ECGPUWAVE 1.3.4

File: <base>/src/ecgpuwave/dades.f (37,624 bytes)
c	 *******************************************************************
c         DADES.FOR 
c	 SUBRUTINES QUE ENS ELABOREN LES DADES IMPORTANTS A PARTIR DELS
c	 PUNTS SIGNIFICATIUS TROBATS EN PUNTS.FOR, I ENS LES MOSTREN
c         Eudald Bogatell (1-6-1991)
c         David Vigo Anglada (9-1992)
c	 *******************************************************************

C       -----------------------------------------------------------------------
C       Copyright (C) 2002 Pablo Laguna
C
C       This program is free software; you can redistribute it and/or modify it
C       under the terms of the GNU General Public License as published by the
C       Free Software Foundation; either version 2 of the License, or (at your
C       option) any later version.
C
C       This program is distributed in the hope that it will be useful, but
C       WITHOUT ANY WARRANTY; without even the implied warranty of
C       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
C       General Public License for more details.
C
C       You should have received a copy of the GNU General Public License along
C       with this program; if not, write to the Free Software Foundation, Inc.,
C       59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
C
C       You may contact the author by e-mail (laguna@posta.unizar.es) or postal
C       mail (Dpt. Ingenieria Electrónica y Comunicaciones, Grupo de Tecnología
C       de las Comunicaciones (GTC), Centro Politécnico Superior. Universidad
C       de Zaragoza, María de Luna, 3 (Pol. Actur), Edificio A, Despacho 3.16,
C       50015 Zaragoza. Spain).  For updates to this software, please visit
C       PhysioNet (http://www.physionet.org/).
C       _______________________________________________________________________

	 subroutine dades_sig (ecg, ipbeg, ippos, ipend, iqbeg,
     &	      iqpos, iqend, irpos, irrpos, isbeg, ispos, isend,
     &	      itbeg, itpos, itend, iqrs, jqrs, ifm, rmax, max, f, ns,
     &	      basel, morf, amprr, ampr, ampq, amps, ampp, ampt, durpic,
     &	      qrsint, durr, durrr, durq, durs, durp, durt, rrint, print, 
     &	      ppint, qtint, qtpint, ritme, rrmed, tip, pendr, itpos2,
     &	      idis, nep, qtcint, qtpcint, k, kder, ST_am, ST_pe,
     &        ST_in, ST_ar, freV, desV) 

c	 Aquesta subrutina es cridada desde ecgmain com una opcio, i ens exposa
c	 les dades de manera que s'en puguin treure conclusions directament

	 dimension irpos(8000),ecg(100000),iqrs(8000),pendr(8000)
	 dimension itpos(8000)
	 dimension ipbeg(8000),ippos(8000),ipend(8000),iqbeg(8000)
	 dimension iqpos(8000),ispos(8000),isend(8000),itbeg(8000)
	 dimension itend(8000), itpos2(8000), irrpos(8000)
	 dimension iqend(8000)
	 dimension isbeg(8000), morf(5,8000),i_base(8000)
 	 dimension ST_am(8000),ST_pe(8000),ST_in(8000),ST_ar(8000)
	 dimension amprr(8000), ampr(8000), ampq(8000), amps(8000)
	 dimension durq(8000)
         dimension ampp(8000), ampt(8000), durp(8000), durt(8000)
	 dimension durpic(8000),qrsint(8000),durr(8000),durrr(8000)
	 dimension durs(8000),rrint(8000),print(8000),ppint(8000)
	 dimension qtint(8000)
	 dimension qtpint(8000),basel(8000),idis(3,20),freV(8000)
	 dimension desV(8000)
	 dimension qtcint(8000), qtpcint(8000)
	 character*12 f
	 character*4 tip(8000)

c	 ecg: senyal ECG
c 	 jqrs: nombre de qrs detectats i confirmats que tractarem
c 	 samp: interval de mostreig en ms
c	 iqrs: posicio dels complexes QRS detectats i confirmats
c	 irpos: vector que conti la posicio de l'ona R
c 	 ipbeg, ippos, ipend: inici, pic i final de l'ona P
c 	 iqbeg, iqpos, iqend: inici, pic i final de l'ona Q
c 	 isbeg, ispos, isend: inici, pic i final de l'ona S
c 	 itbeg, itpos, itpos2, itend: inici, pics i final de l'ona T
c 	 basel: conte les linies de base de cada QRS
c	 idis: conte els posibles episodis de VT i VF
c	 nep: nombre d'episodis de VT i VF
c	 ampq, ampr, amps, amprr: amplituds de les ones Q, R, S i S' 
c	 durq, durr, durs, durrr: durades de les ones Q, R, S i R'
c	 rrint, ppint, print: intervals RR, PP i PR
c	 qtint, qtpint: intervals QT i QT de pic
c	 qtcint, qtpcint: intervals QT i QT de pic corretgits.
c	 durpic i pendr: duracio i pendent de la primera pujada de la R
c 	 morf: vector d'enters que ens informa de la morfologia del bateg
c		morf(1,j) -bateg	0: rr normal
c					1: rr llarg
c					2: rr curt
c					3: primer bateg
c
c		morf(2,j) -complex QRS  0: qRs
c					1: qR
c					2: Rs
c					3: R
c					4: rS
c					5: RS
c					6: rsR'
c					7: QS
c					8: notched R ,NR
c                   			9: WQS
c					10:Taquicardia ventricular (VT)
c					11:Fibrilacio ventricular (VF)
c
c		morf(3,j) -ona P	0: existeix, normal
c					1:    "    , invertida
c					2: no existeix
c
c		morf(4,j) -ona T	0: existeix, normal
c					1:    "    , invertida
c					2:    "    , nomes pujada
c					3:    "    , nomes baixada
c					4: bifasica -+
c					5:    "     +-
c					6: no existeix


c	 conv: factor de conversio a volts
	 conv= 1.
	 samp=1000.0/ifm
	 jep=1
c	 ritme: ritme cardiac en pulsacions per min 
	 ritme= 60*ifm/rrmed
	 call baseline(jqrs,ippos,ecg,basel,samp,ipbeg,ipend,iqbeg,
     &                 isend,i_base)     

	 do i=1, jqrs

c	 anem omplint el vector de morfologia, al mateix temps que trobem
c	 algunes dades importants

c	 si el qrs cau dins dun episodi de VT o VF no hi busquem cap complexe
c	 QRS
	   if (nep.gt.0.and.iqrs(i).ge.(idis(1,jep)+is)*ifm-ifm*0.3.and.
     &	jep.le.nep) then
           if (iqrs(i).le.(idis(2,jep)+is)*ifm) then
		if (idis(3,jep).eq.1) then
		    morf(2,i)=10
	  	    tip(i)=' VT '
		else if(idis(3,jep).eq.2) then
		    morf(2,i)=11
	  	    tip(i)=' VF '
                end if
		morf(3,i)=2
		morf(4,i)=6
		go to 500
	      else
		jep=jep+1
	     end if
	   end if

	 if (ippos(i).eq.0) then 
		morf(3,i)=2
	    else
		if (ecg(ippos(i)).lt.ecg(ipbeg(i)).and.
     &			ecg(ippos(i)).lt.ecg(ipend(i))) then
		    morf(3,i)=1
		  else
		    morf(3,i)=0
		end if
	 end if


c 	 definim la morfologia de l'ona T
c	 JA LA TENIM DEFINIDA
c         if(itpos(i).eq.0) then
c		morf(4,i)=4
c	    else
c	      if (itbeg(i).eq.0) then
c		if (ecg(itpos(i)).gt.ecg(itend(i))) then
c		    morf(4,i)=3
c		  else
c		    morf(4,i)=2
c		end if
c	       else
c		if (ecg(itpos(i)).lt.ecg(itbeg(i)).or.
c     &		     ecg(itpos(i)).lt.ecg(itend(i))) then
c			morf(4,i)=1
c		   else 
c			morf(4,i)=0
c		end if
c	      end if
c	 end if

c	 busquem les amplituts de les ones del QRS que mes tard ens serviran 
c	 per definir la morfologia del QRS

	 if (irrpos(i).ne.0) then
	    amprr(i)=abs((ecg(irrpos(i))-basel(i))*conv)
	  else
	    amprr(i)=0.
	 end if
	 ampr(i)=(ecg(irpos(i))-basel(i))*conv
	 if (iqpos(i).eq.0) then
	    ampq(i)=0.
	  else
	    ampq(i)=abs((ecg(iqpos(i))-basel(i))*conv)	
	 end if
	 if (ispos(i).eq.0) then
	    amps(i)=0.
	  else
	    amps(i)=abs((ecg(ispos(i))-basel(i))*conv)
	 end if

c        busquem les amplituds de les ones P :
	 if (ippos(i).eq.0) then
	    amps(i)=0.
	  else
	    ampp(i)=abs((ecg(ippos(i))-basel(i))*conv)
	 end if
c        i per l'ona T:
	 if (morf(4,i).eq.0.or.morf(4,i).eq.1) then 
	    ampt(i)=abs((ecg(itpos(i))-ecg(itend(i)))*conv)
	  else if (morf(4,i).eq.2.or.morf(4,i).eq.3) then 
            if (ispos(i).ne.0) then
               iaux=isend(i)
            else 
               iaux=basel(i)
            end if
	    ampt(i)=abs((ecg(itend(i))-ecg(iaux))*conv)
	  else if (morf(4,i).eq.4.or.morf(4,i).eq.5) then 
	    ampt(i)=abs((ecg(itpos(i))-ecg(itend(i)))*conv)
            iaux=abs((ecg(itpos2(i))-ecg(itend(i)))*conv)
            if (iaux.gt.ampt(i)) ampt(i)=iaux
          else
            ampt(i)=0.
	 end if

c	 definim la morfologia del QRS

	 tip(i)='????'
	 if (amprr(i).gt.0) then
	    if (amps(i).le.0.) then
		morf(2,i)=8
		tip(i)='NR'
	      else
		morf(2,i)=6
		tip(i)='rsRp'
	    end if
	  else
	    if (ampr(i).le.0.) then
		if (ampq(i).gt.0..and.amps(i).gt.0.0) then
			morf(2,i)=9
			tip(i)=' WQS'
		end if
		if(ampq(i).le.0..and.amps(i).gt.0..or.ampr(i).lt.0) then
			morf(2,i)=7
			tip(i)='  QS'
		end if
	      else
		if(ampq(i).gt.0..and.amps(i).gt.0.) then
			morf(2,i)=0
			tip(i)=' qRs'
		end if
		if(amps(i).le.0..and.ampq(i).le.0.) then
			morf(2,i)=3
			tip(i)='   R'
		end if
		if(amps(i).le.0..and.ampq(i).gt.0.) then
			morf(2,i)=1
			tip(i)='  qR'
		end if
		if(amps(i).gt.0..and.ampq(i).le.0.) then
		  if(amps(i)*2.lt.ampr(i)) then
			morf(2,i)=2
			tip(i)='  Rs'
		     else 
			if(ampr(i)*2.lt.amps(i)) then
			   morf(2,i)=4
			   tip(i)='  rS'
			 else
			   morf(2,i)=5
			   tip(i)='  RS'
			end if
		  end if
		end if
	    end if
	  end if
            

c	 busquem altres intervals de interes
	 
	 qrsint(i)=(isend(i)-iqbeg(i))*samp		
	 durpic(i)=(irpos(i)-iqbeg(i))*samp

c	 durada de les ones del qrs

	 if (morf(2,i).eq.6) then
		durr(i)=(iqend(i)-iqbeg(i))*samp
		durs(i)=(isbeg(i)-iqend(i))*samp
		durrr(i)=(isend(i)-isbeg(i))*samp
		durq(i)=0.
	 else 
	 if(iqend(i).ne.0.and.isbeg(i).ne.0) then
		durr(i)=(isbeg(i)-iqend(i))*samp		
		durq(i)=(iqend(i)-iqbeg(i))*samp
		durs(i)=(isend(i)-isbeg(i))*samp
	 else if(iqend(i).eq.0.and.isbeg(i).ne.0) then
		durr(i)=(isbeg(i)-iqbeg(i))*samp		
		durq(i)=0.
		durs(i)=(isend(i)-isbeg(i))*samp
	 else if(iqend(i).ne.0.and.isbeg(i).eq.0) then
		durr(i)=(isend(i)-iqend(i))*samp		
		durq(i)=(iqend(i)-iqbeg(i))*samp
		durs(i)=0.
	 else if(iqend(i).eq.0.and.isbeg(i).eq.0) then
		durr(i)=(isend(i)-iqbeg(i))*samp		
		durq(i)=0.
		durs(i)=0.
	 end if
	 end if

c        durada de les ones P i T
	 if (ippos(i).ne.0) then
             durp(i)=(ipend(i)-ipbeg(i))*samp		
         else
             durp(i)=0.
         end if
	 if (itpos(i).ne.0) then
             durt(i)=(itend(i)-itbeg(i))*samp		
         else
             durt(i)=0.
         end if

c	 pendent de la ona R
	 if (ampr(i).gt.0) then
            if ( (irpos(i)-iqbeg(i)-nint(10/samp)).ne.0) then
	 pendr(i)=(ecg(irpos(i))-ecg(iqbeg(i)+nint(10/samp)))/
     &            (irpos(i)-iqbeg(i)-nint(10/samp))*conv/samp*1000.
            else
	 pendr(i)=(ecg(irpos(i))-ecg(iqbeg(i)+nint(10/samp)))/
     &            (irpos(i)-iqbeg(i))*conv/samp*1000.
            end if
	 end if
c	 morfologia del ritme

	 if (i.eq.1) then 
		morf(1,1)=3
		rrint(1)=0
	    else 
	 	morf(1,i)=0
		rrint(i)=(irpos(i)-irpos(i-1))*samp
	 end if
c	 fem les correccions necesaries pel cas complexe QS
	 if (ampr(i).lt.0.and.morf(2,i).eq.7) then
	 	durs(i)=durr(i)
		durr(i)=0
		pendr(i)=0
		ispos(i)=irpos(i)
		amps(i)=abs(ampr(i))
		ampr(i)=0
		durpic(i)=0
	 end if

c	 intervals PR i PP

	 if (morf(3,i).eq.2) then
	  	print(i)=0.
		ppint(i)=0.
	    else
		print(i)=(iqbeg(i)-ipbeg(i))*samp
		if (i.eq.1.or.morf(3,i-1).eq.2) then 
			ppint(i)=0.
		    else
			ppint(i)=(ippos(i)-ippos(i-1))*samp
		end if
	 end if

c	 intervals QT

	 if (morf(4,i).eq.6.or.iqbeg(i).eq.0.or.itend(i).eq.0) then
		qtint(i)=0.
	 	qtpint(i)=0.
		qtcint(i)=0.
	 	qtpcint(i)=0.
	    else
	      if (morf(4,i).eq.3) then
		qtpint(i)=(itpos2(i)-iqbeg(i))*samp
	       else
		qtpint(i)=(itpos(i)-iqbeg(i))*samp
	      end if
       	      qtint(i)=(itend(i)-iqbeg(i))*samp
c	 si el interval rr esta acotat busquem el qt corretgit
	      if(rrint(i).gt.0.8*rrmed*samp.and.
     &		rrint(i).lt.1.2*rrmed*samp) then
		qtcint(i)=qtint(i)/sqrt(rrint(i)/1000)
		qtpcint(i)=qtpint(i)/sqrt(rrint(i)/1000)
	       else
		qtcint(i)=0.
	 	qtpcint(i)=0.
	      end if
	 end if
 500	 continue	 
	 end do
	 call impr_dat(f,ifm,ns,jqrs,morf,amprr,ampr,ampq,amps,ampp,ampt,
     &	       durpic,qrsint,durr,durrr,durq,durs,durp,durt,rrint,print, 
     &	       ppint, qtint, qtpint, samp, ritme, rrmed*samp, tip,
     &	       irpos,pendr,k,kder,ST_am,ST_pe,ST_in,ST_ar,freV,desV) 
         call impr_qt(f(1:lnblnk(f))//'.qtc',jqrs,qtcint, qtpcint)
	 return
	 end

c---------------------------------------------------------------------------
c---------------------------------------------------------------------------

	 subroutine  impr_qt( tit,jqrs,qtcint, qtpcint)

c	 ens escriu en un fitxer els intervals QT i QTP corretgits
	 dimension qtcint(8000), qtpcint(8000)
	 character*16 tit

	 open(unit=1, file=tit)
	 write(1,*) ' INTERVALS QT I QT PIC CORREGITS '
	 do i=1,jqrs
	    write(1,*) i, qtcint(i), qtpcint(i)
	 end do
	 close (unit=1)
	 return
	 end

	    
c---------------------------------------------------------------------------

	 subroutine mos_dat(f,ifm,ns,jqrs,morf,amprr,ampr,ampq,amps,ampp,
     &		ampt,durpic,qrsint,durr,durrr,durq,durs,durp,durt,rrint, 
     &		print,ppint,qtint,qtpint,ritme,rrmed, tip, irpos, pendr,
     &		qtcint, qtpcint, ST_am, ST_pe, ST_in, ST_ar)                
 
c 	 aquesta subrutina ens ofereix les opcions de mostrar les dades


 	 dimension morf(5,8000),ST_am(8000),ST_pe(8000),ST_in(8000)
 	 dimension ST_ar(8000)
	 dimension amprr(8000),ampr(8000),ampq(8000),amps(8000)
	 dimension pendr(8000)
	 dimension durpic(8000),qrsint(8000),durr(8000),durrr(8000)
	 dimension durq(8000)
	 dimension durs(8000),rrint(8000),print(8000),ppint(8000)
	 dimension qtint(8000)
	 dimension qtpint(8000), irpos(8000),ampp(8000),ampt(8000)
	 dimension qtpcint(8000), qtcint(8000),durp(8000),durt(8000)
	 character*12 f
	 character*4 tip(8000)
	 character*1 op
	 logical nofi

	 samp=1000./ifm
	 write (6,30)
 30 	 format (///,t20,'OPCIONS MOSTRAR DADES',///)        
	 write(6,35)
 35 	 format (t20,'1 Pantalla',//,t20,'2 Impresora',//,
     &           t20,'3 Extret per pantalla',///,t20,'0 sortir')
 39	 write(6,40)
 40      format(////,'$',t20,'OPCIO: ')
         read(5,41,err=39) k
 41      format(I2)         
	 if (k.eq.0) then
	   return
	 else if(k.eq.1) then
 	 write(6,50)
 50      format(//,'$',t20,'Segon inicial [0.0]: ')
         read(5,*) segi
c 51      format(f4.1)         
	 call visualitzar(f,ifm,ns,jqrs,morf,amprr,ampr,ampq,amps,ampp,
     &        ampt,durpic,qrsint,durr,durrr,durq,durs,durp,durt,rrint, 
     &        print,ppint,qtint,qtpint,samp, ritme, rrmed, tip, irpos,
     &        segi, pendr, qtcint, qtpcint) 
	 else if(k.eq.2) then
	  open(unit=31, file=f(1:lnblnk(f))//'.inf')
 90	  write(6,100)
 100	  format(/,'$',t10,'Seleccio de bategs [s]: ')
	  read(5,110) op
 110	  format(a)
          call imp_capc(f, ifm, ns, jqrs, ritme, rrmed*samp)
	  if(op.eq.'n'.or.op.eq.'N') then
	   do i=1,jqrs	 
	    call imprimir(i,morf,amprr,ampr,ampq,amps,ampp,ampt,irpos,
     &		ifm,durpic,qrsint,durr,durrr,durq,durs,durp,durt,rrint, 
     &		print,ppint,qtint, qtpint,tip, pendr, qtcint, qtpcint, 
     &          ST_am, ST_pe, ST_in, ST_ar)
	   end do
	  else
	   nofi=.true.
	 do while(nofi)
 	  write(6,120)
 120	  format(/,'$',t10,'Instant anterior al bateg en seg. ',
     &           '[<qq> per sortir]:')
	  read(5,*,err=140) segi
c 130	  format(f4.1)
	  go to 150
 140	  nofi=.false.
c	  trobem a partir del segon anterior el bateg a mostrar
 150	  j=1
	  if (nofi) then
	   do while(irpos(j).lt.nint(segi*ifm).and.j.le.jqrs)
	     j=j+1
	   end do
	   call imprimir(j,morf,amprr,ampr,ampq,amps,ampp,ampt,irpos,ifm,
     &		durpic,qrsint,durr,durrr,durq,durs,durp,durt,rrint, 
     &		print,ppint, qtint, qtpint,tip, pendr, qtcint, qtpcint, 
     &          ST_am, ST_pe, ST_in, ST_ar)
	  end if		
	 end do
	 end if
	 close(unit=31)
	 else if (k.eq.3) then
	 call vis_dat(f, ifm, ns, jqrs, morf, amprr, ampr, ampq, amps,
     &		durpic, qrsint, durr, durrr, durq, durs, rrint, print, 
     &		ppint, qtint, qtpint, samp, ritme, rrmed*samp, tip,
     &		irpos, pendr) 
	 
	 end if
	 return 
	 end

c--------------------------------------------------------------------------

	 subroutine imprimir(i,morf,amprr,ampr,ampq,amps,ampp,ampt,
     &		irpos,ifm,durpic,qrsint,durr,durrr,durq,durs,durp,durt, 
     &		rrint,print,ppint,qtint,qtpint,tip,pendr,qtcint,qtpcint, 
     &          ST_am, ST_pe, ST_in, ST_ar) 

c	 aquesta subroutina ens mostra per impresora les dades obtingudes 
c 	 aixi com algunes clasificacions respecte les morfologies

 	 dimension morf(5,8000), irpos(8000), pendr(8000)
	 dimension amprr(8000),ampr(8000),ampq(8000),amps(8000)
	 dimension durpic(8000),qrsint(8000),durr(8000),durrr(8000)
	 dimension durq(8000)
	 dimension durs(8000),rrint(8000),print(8000),ppint(8000)
	 dimension qtint(8000)
	 dimension durt(8000)
	 dimension qtpint(8000),ampp(8000),ampt(8000),durp(8000)
	 dimension qtcint(8000), qtpcint(8000)
         dimension ST_am(8000),ST_pe(8000),ST_in(8000),ST_ar(8000)
	 character*4 tip(8000)
	 character*12 noe

	 noe='no existeix'
	 write(31,50) i, tip(i)
 50	 format(/,15x,'BATEG: ',i3,t47,'Tipus de complexe qrs: ',a4)
c 	 instant del bateg en segons
	 seg=1.*irpos(i)/ifm
	 if (morf(3,i).eq.0) then
	 write(31,63) seg
 63	 format(15x,'Instant:',f6.2,' seg',t47,'La ona P es normal')
	 else if (morf(3,i).eq.1) then
	 write(31,64) seg
 64	 format(15x,'Instant:',f6.2,' seg',t47,'La ona P es invertida')
	 else if (morf(3,i).eq.2) then
	 write(31,65) seg
 65	 format(15x,'Instant:',f5.1,t47,'La ona P no existeix')
	 end if

	 go to (500, 501, 502, 503, 504, 505, 506), morf(4,i)+1
 500	 write(31,66)
 66	 format(t47,'La ona T es normal')
	 go to 510
 501	 write(31,67)
 67	 format(t47,'La ona T es invertida')
	 go to 510
 502	 write(31,68)
 68	 format(t47,'Ona T de pujada')
	 go to 510
 503	 write(31,69)
 69	 format(t47,'Ona T de baixada')
	 go to 510
 504	 write(31,70)
 70	 format(t47,'Ona T bifasica -+')
	 go to 510
 505	 write(31,71)
 71	 format(t47,'Ona T bifasica +-')
	 go to 510
 506	 write(31,72)
 72	 format(t47,'La ona T no existeix')
 
 510     continue

	 if (morf(1,i).eq.3) then
		write(31,74) 'primer bateg'
 74		format(5x,'Amplada interval RR = ',a12)
	    else    
       		write(31,75) nint(rrint(i))
 75	 	format(5x,'Amplada interval RR =',i5,' ms')
 	 end if    
	 write(31,80) nint(qrsint(i))
 80	 format(5x,'Amplada interval QRS=',i5,' ms')
	 if (morf(4,i).eq.6) then
		write(31,85) noe, noe
 85		format(5x,'Amplada interval QT =',a12,
     &  t47,'Interval QTC =',a12)
		write(31,90) noe, noe
 90		format(5x,'Amplada interval QTP=',a12,
     &  t47,'Interval QTPC =',a12)
	    else    
		if (qtcint(i).eq.0) then
       		write(31,95) nint(qtint(i))
 95	 	format(5x,'Amplada interval QT =',i5,' ms',
     &  t47,'QTC = interval rr fora de limits')
		write(31,96) nint(qtpint(i))
 96		format(5x,'Amplada interval QTP=',i5,' ms',
     &  t47,'QTPC = interval rr fora de limits')
		else
       		write(31,98) nint(qtint(i)),nint(qtcint(i))          
 98	 	format(5x,'Amplada interval QT =',i5,' ms',
     &  t47,'Interval QTC =',i5)
		write(31,99) nint(qtpint(i)),nint(qtpcint(i))     
 99		format(5x,'Amplada interval QTP=',i5,' ms',
     &  t47,'Interval QTPC =',i5)
		end if
 	 end if                       
	 if (morf(3,i).eq.2) then
		write(31,105) noe
 105		format(5x,'Amplada interval PR =',a12)
		write(31,110) noe
 110		format(5x,'Amplada interval PP =',a12)
	    else    
       		write(31,115) nint(print(i))
 115	 	format(5x,'Amplada interval PR =',i5,' ms')
		if (morf(1,i).eq.3) then
		  write(31,116) 'primer bateg'
 116		  format(5x,'Amplada interval PP = ',a12)
	         else
		  if (morf(3,i-1).eq.2) then
		     write(31,117) noe
 117		     format(5x,'Amplada interval PP =',a12)
                    else
		     write(31,120) nint(ppint(i))
 120		     format(5x,'Amplada interval PP =',i5,' ms')
		  end if
		end if
 	 end if    
	 write(31,*)
	 write(31,123) ampp(i), nint(durp(i))
 123	 format(5x,'Amplitut de la ona P =',f8.3,' mV',
     &          t47,'Duracio de la ona P =',i4,' ms')
	 write(31,125) ampr(i), nint(durr(i))
 125	 format(5x,'Amplitut de la ona R =',f8.3,' mV',
     &          t47,'Duracio de la ona R =',i4,' ms')
	 write(31,130) ampq(i), nint(durq(i))
 130	 format(5x,'Amplitut de la ona Q =',f8.3,' mV',
     &          t47,'Duracio de la ona Q =',i4,' ms')
	 write(31,135) amps(i),nint(durs(i))
 135	 format(5x,'Amplitut de la ona S =',f8.3,' mV',
     &          t47,'Duracio de la ona S =',i4,' ms')
	 write(31,137) ampt(i), nint(durt(i))
 137	 format(5x,'Amplitut de la ona T =',f8.3,' mV',
     &          t47,'Duracio de la ona T =',i4,' ms')
	 if (morf(2,i).eq.6) then
	 write(31,140) amprr(i), nint(durrr(i))
 140	 format(5x,'Amplitut de la ona R',1h','=',f8.3,' mV',
     &          t47,'Duracio de la ona R',1h','=',i4,' ms')
	 end if
	 write(31,148) nint(pendr(i)),nint(durpic(i))
 148	 format(5x,'Pendent de la ona R  =',i8,' mV',1h/,'seg',
     &          t47,'Duracio pic de ona R=',i4,' ms',/)
	 write(31,150) ST_pe(i),ST_am(i),ST_ar(i),ST_in(i) 
 150	 format(5x,'Pendent segment ST =',f7.3,' mV/seg',
     &          t47,'Amplitud segment ST =',f7.3,' mV',/
     &          5x,'Area segment ST    =',f7.2,' uV*seg', 
     &          t47,'Index segment ST    =',f7.3,/)
	 write (31,160) 
 160	 format (5x,'--------------------------------------------------
     &-------------------------')
	 return
	 end

c--------------------------------------------------------------------------

	 subroutine visualitzar(f,ifm,ns,jqrs,morf,amprr,ampr,ampq,amps,
     &        ampp,ampt,durpic,qrsint,durr,durrr,durq,durs,durp,durt, 
     &	      rrint,print,ppint,qtint,qtpint,samp,ritme,rrmed,tip,irpos,
     &        segi, pendr, qtcint, qtpcint)

c	 aquesta subroutina ens mostra per pantalla les dades obtingudes 
c 	 aixi com algunes clasificacions respecte les morfologies

 	 dimension morf(5,8000),ampp(8000),ampt(8000),durp(8000)
 	 dimension durt(8000)
	 dimension amprr(8000),ampr(8000),ampq(8000),amps(8000)
	 dimension pendr(8000)
	 dimension durpic(8000),qrsint(8000),durr(8000),durrr(8000)
	 dimension durq(8000)
	 dimension durs(8000),rrint(8000),print(8000),ppint(8000)
	 dimension qtint(8000)
	 dimension qtpint(8000), irpos(8000)
	 dimension qtpcint(8000), qtcint(8000)
	 character*12 f, noe
	 character*4 tip(8000)
	 character*1 op

c	 trobem a partir del segon inicial el primer bateg a mostrar
	 j=1
	 do while(irpos(j).lt.nint(segi*ifm).and.j.le.jqrs)
	     j=j+1
	 end do
	 noe=' no existeix'
	 do i=j, jqrs
c	 write(6,45)
c 45	 format('1')
	 write(6,*)
	 call capcalera (f, ifm, ns, jqrs, ritme, rrmed*samp)
	 write(6,701) i, tip(i)
 701	 format(15x,'BATEG: ',i3,t47,'Tipus de complexe qrs: ',a4)
c 	 instant del bateg en segons
	 seg=1.*irpos(i)/ifm
	 if (morf(3,i).eq.0) then
	 write(6,631) seg
 631	 format(15x,'Instant:',f6.2,' seg',t47,'La ona P es normal')
	 else if (morf(3,i).eq.1) then
	 write(6,641) seg
 641	 format(15x,'Instant:',f6.2,' seg',t47,'La ona P es invertida')
	 else if (morf(3,i).eq.2) then
	 write(6,651) seg
 651	 format(15x,'Instant:',f5.1,t47,'La ona P no existeix')
	 end if
	 go to (800, 801, 802, 803, 804, 805, 806), morf(4,i)+1
 800	 write(6,661)
 661	 format(t47,'La ona T es normal')
	 go to 810
 801	 write(6,67)
 67	 format(t47,'La ona T es invertida')
	 go to 810
 802	 write(6,68)
 68	 format(t47,'Ona T de pujada')
	 go to 810
 803	 write(6,69)
 69	 format(t47,'Ona T de baixada')
	 go to 810
 804	 write(6,70)
 70	 format(t47,'Ona T bifasica -+')
	 go to 810
 805	 write(6,71)
 71	 format(t47,'Ona T bifasica +-')
	 go to 810
 806	 write(6,72)
 72	 format(t47,'La ona T no existeix')
 
 810     continue



	 if (morf(1,i).eq.3) then
		write(6,740) 'primer bateg'
 740		format(5x,'Amplada interval RR = ',a12)
	    else    
       		write(6,750) nint(rrint(i))
 750	 	format(5x,'Amplada interval RR =',i5,' ms')
 	 end if    
	 write(6,840) nint(qrsint(i))
 840	 format(5x,'Amplada interval QRS=',i5,' ms')
	 if (morf(4,i).eq.6) then
		write(6,850) noe, noe
 850		format(5x,'Amplada interval QT =',a12,
     &  t47,'Interval QTC =',a12)
		write(6,950) noe, noe
 950		format(5x,'Amplada interval QTP=',a12,
     &  t47,'Interval QTPC =',a12)
	    else    
		if (qtcint(i).eq.0) then
       		write(6,951) nint(qtint(i))
 951	 	format(5x,'Amplada interval QT =',i5,' ms',
     &  t47,'QTC = interval rr fora de limits')
		write(6,961) nint(qtpint(i))
 961		format(5x,'Amplada interval QTP=',i5,' ms',
     &  t47,'QTPC = interval rr fora de limits')
		else
       		write(6,981) nint(qtint(i)),nint(qtcint(i))          
 981	 	format(5x,'Amplada interval QT =',i5,' ms',
     &  t47,'Interval QTC =',i5)
		write(6,991) nint(qtpint(i)),nint(qtpcint(i))     
 991		format(5x,'Amplada interval QTP=',i5,' ms',
     &  t47,'Interval QTPC =',i5)
		end if
 	 end if                       
	 if (morf(3,i).eq.2) then
		write(6,105) noe
 105		format(5x,'Amplada interval PR =',a12)
		write(6,110) noe
 110		format(5x,'Amplada interval PP =',a12)
	    else    
       		write(6,115) nint(print(i))
 115	 	format(5x,'Amplada interval PR =',i5,' ms')
		if (morf(1,i).eq.3) then
		  write(6,116) 'primer bateg'
 116		  format(5x,'Amplada interval PP = ',a12)
	         else    
		  if (morf(3,i-1).eq.2) then
			write(6,117) noe
 117			format(5x,'Amplada interval PP =',a12)
	  	    else
           		write(6,120) nint(ppint(i))
 120		        format(5x,'Amplada interval PP =',i5,' ms')
		  end if
		end if
 	 end if    
	 write(6,*)
	 write(6,123) ampp(i), nint(durp(i))
 123	 format(5x,'Amplitut de la ona P =',f8.3,' mV',
     &          t47,'Duracio de la ona P =',i4,' ms')
	 write(6,125) ampr(i), nint(durr(i))
 125	 format(5x,'Amplitut de la ona R =',f8.3,' mV',
     &          t47,'Duracio de la ona R =',i4,' ms')
	 write(6,130) ampq(i), nint(durq(i))
 130	 format(5x,'Amplitut de la ona Q =',f8.3,' mV',
     &          t47,'Duracio de la ona Q =',i4,' ms')
	 write(6,135) amps(i),nint(durs(i))
 135	 format(5x,'Amplitut de la ona S =',f8.3,' mV',
     &          t47,'Duracio de la ona S =',i4,' ms')
	 write(6,137) ampt(i), nint(durt(i))
 137	 format(5x,'Amplitut de la ona T =',f8.3,' mV',
     &          t47,'Duracio de la ona T =',i4,' ms')
	 if (morf(2,i).eq.6) then
	 write(6,140) amprr(i), nint(durrr(i))
 140	 format(5x,'Amplitut de la ona R',1h','=',f8.3,' mV',
     &          t47,'Duracio de la ona R',1h','=',i4,' ms')
	 end if
	 write(6,148) nint(pendr(i)),nint(durpic(i))
 148	 format(5x,'Pendent de la ona R  =',i8,' mV',1h/,'seg',
     &          t47,'Duracio pic de ona R=',i4,' ms',/)
 290	 write(6,300)
 300	 format(10x,/,'$Pitja <ret>per continuar  <Q> per sortir: ')
	 read(5,310,err=290) op
 310	 format(a)
	 if(op.eq.'q'.or.op.eq.'Q') return
	 end do
	 return
	 end

c-------------------------------------------------------------------------------


	 subroutine capcalera (f, ifm, ns, jqrs, ritme, rrmit)

c	 ens mostra per pantalla la capgalera a cada bateg
	 
	 character*12 f

	 write (6,10) 
 10	 format (5x,'--------------------------------------------------
     &--------------------')
	 write (6,20) f, ifm
	 write (6,30) ns, jqrs
	 write (6,40) nint(ritme), nint(rrmit)
 20	 format (10x,'nom del pacient:  ',a12,
     &           t47,'frequ. de mostreig:',i5,' Hz')
 30	 format (10x,'long. de registre:',i5,' seg',
     &           t47,'bategs detectats:  ',i5)
 40 	 format (10x,'ritme cardiac:    ',i5,' puls min',
     &           t47,'interval RR mitg:  ',i5,' ms')
	 write (6,10)
	 return 
	 end
c-------------------------------------------------------------------------
	 subroutine imp_capc(f, ifm, ns, jqrs, ritme, rrmit)

c	 ens imprimeig la capgalera al inici del llistat
	 
	 character*12 f

	 write (31,10) 
 10	 format (5x,'--------------------------------------------------
     &-------------------------')
	 write (31,20) f, ifm
	 write (31,30) ns, jqrs
	 write (31,40) nint(ritme), nint(rrmit)
 20	 format (10x,'nom del pacient:  ',a12,
     &           t47,'frequ. de mostreig:',i5,' Hz')
 30	 format (10x,'long. de registre:',i5,' seg',
     &           t47,'bategs detectats:  ',i5)
 40 	 format (10x,'ritme cardiac:    ',i5,' puls min',
     &           t47,'interval RR mitg:  ',i5,' ms')
	 write (31,10)
	 return 
	 end

c-------------------------------------------------------------------------
 	 subroutine baseline(jqrs,ippos,ecg,basel,samp,ipbeg,ipend,     
     &                       iqbeg,isend,i_base)
c-------------------------------------------------------------------------

 	 dimension basel(8000),ipend(8000),iqbeg(8000),ippos(8000)
	 dimension ecg(100000),i_base(8000),isend(8000),ipbeg(8000)

c	 busquem la linea de base com la mitjana dels punts del segment PR

	 nqui=nint(15./samp)
	 ntre=nint(30./samp)
         ntre_q = nint(10./samp)
         nqui_q = nint(5./samp)


	 if (iqbeg(1).eq.0) then
		inic=2
	    else
		inic=1
	 end if

	 do i=inic,jqrs
	 if (ippos(i).ne.0) then   
	 	sum=0.
		if (iqbeg(i)-ipend(i).gt.33/samp) then 
			do k=ipend(i)+nqui, iqbeg(i)-nqui
			   sum=sum+ecg(k)
			end do
			baselin=sum/(iqbeg(i)-nqui-nqui-ipend(i)+1)
                        pos_base=(iqbeg(i)+ipend(i))/2.

                else if (iqbeg(i)-ipend(i).le.33/samp) then 
c               else if (iqbeg(i).eq.ipend(i).gt.25) then

		       if(iqbeg(i).eq.ipend(i)) then
			  baselin=ecg(iqbeg(i))
                          pos_base=iqbeg(i)
		       else
			  do k=ipend(i), iqbeg(i)
			   sum =sum+ecg(k)
			  end do
			  baselin= sum/(iqbeg(i)-ipend(i)+1)
                          pos_base=(iqbeg(i)+ipend(i))/2.
		       end if
c                else 
c                       continue
c			do k=ipbeg(i)-33/samp-nqui,ipbeg(i)-nqui
c			   sum=sum+ecg(k)
c			end do
c			baselin=sum/(33/samp)
c                        pos_base=(ipbeg(i)+(17/samp))
c
		end if
	 else
	     if (iqbeg(i).gt.0) then
		sum=0.
	 	if(iqbeg(i)-nqui_q.gt.1) then
		  k=iqbeg(i)-nqui_q
		  do while(k.ge.iqbeg(i)-ntre_q-nqui_q.and.k.gt.0)
			sum=sum+ecg(k)
			k=k-1
		  end do
		  if(k.eq.0)then
			baselin=sum/(iqbeg(i)-nqui_q)
                        pos_base=(iqbeg(i)-nqui_q)/2.
		    else
			baselin=sum/(ntre_q+1)
                        pos_base=iqbeg(i)-nqui_q-ntre_q/2.
		  end if
		else
		  do k=1,iqbeg(i)
			sum=sum+ecg(k)
		  end do
		  baselin=sum/iqbeg(i)
                  pos_base=iqbeg(i)/2.
		end if
	     else
		baselin=0
	     end if
	 end if
	 basel(i)=baselin
         i_base(i)=int(pos_base+0.5)
	 end do

c        Si iqbeg(1) est` a la primera mostra, senyal de que no s'ha pogut
c        detectar bi; llavors fem basel(1)= al nivell de isend(1), per evitar
c        que la pimera mostra sigui alterada
	 if (iqbeg(1).le.1) basel(1)=ecg(isend(1))  
	 if (iqbeg(1).le.1) i_base(1)=isend(1)
 	 return 
	 end

c--------------------------------------------------------------------------

	 subroutine impr_dat(f,ifm,ns,jqrs,morf,amprr,ampr,ampq,amps,
     &	       ampp,ampt,durpic,qrsint,durr,durrr,durq,durs,durp,durt, 
     &	       rrint,print,ppint,qtint,qtpint,samp,ritme,rrmit,tip, 
     &         irpos,pendr,k,kder,ST_am,ST_pe,ST_in,ST_ar,freV,desV)
c 	 Aquesta subrutina ens treu totes les dades en un fitxer .DAT per a 
c	 ser impres per la printronix, o be per a ser llegit desde un altre 
c	 programa

 	 dimension morf(5,8000),pendr(8000),durp(8000),durt(8000)
	 dimension amprr(8000),ampr(8000),ampq(8000),amps(8000)
	 dimension durpic(8000),qrsint(8000),durr(8000),durrr(8000)
	 dimension durq(8000)
	 dimension durs(8000),rrint(8000),print(8000),ppint(8000)
	 dimension qtint(8000)
	 dimension qtpint(8000),irpos(8000),ampp(8000),ampt(8000)
         dimension ST_am(8000),ST_pe(8000),ST_in(8000),ST_ar(8000)
         dimension freV(8000),desV(8000)

	 character*12 f, noe, fd
	 character*4 tip(8000)
	 character*3 fderiv
	 character*1 op

c	 Obrim fitxer de sortida. Si hem arribat aqui per l'opcis 18 de
c        tractament multiderivacional nomis s'ha d'obrir el primer cop per la
c        primera derivacis.
         if (k.eq.18) then
            fd=f
            fderiv=fd(9:11)
            f=fd(1:7)
         end if
         if (k.ne.18) then
	    open(unit=30, file=f(1:lnblnk(f))//'.dad')

	 write(30,10) f, ns, nint(ritme), nint(rrmit), ifm, jqrs
 10    format(//,1x,'Pacient:',a11,2x,'longitut:',i4,' seg',12x,'ritme:'
     &   ,i3,' pul',1h/,'min',4x,'RR mitg:',i4,' ms',3x,'freq mos:',i4,
     &   'Hz',3x,'batecs:',i4,/)

	 write(30,12)
 12	 format(1x,'CODI DE MORFOLOGIES: ona P: 0=normal, 1=invertida,
     & 2=no existeix;     batec: 0=normal, 3=primer batec',/,
     &1x,'ona T: 0=normal, 1=invertida, 2=nomes pujada, 3=nomes baixada,,
     & 4=bifasica -+, 5=bifasica +-, 6=no existeix',/)

         else
          if (kder.eq.1) then
	    open(unit=30, file=f(1:lnblnk(f))//'.dad')

	 write(30,15) f, ns, ifm, jqrs
 15 	 format(//,1x,'Pacient:',a11,2x,'longitut:',i4,' seg',2x,
     &          3x,'freq mos:',i4,'Hz',
     &          3x,'batecs:',i4,/)

	 write(30,16)
 16	 format(1x,'CODI DE MORFOLOGIES: ona P: 0=normal, 1=invertida,
     & 2=no existeix;     batec: 0=normal, 3=primer batec',/,
     &1x,'ona T: 0=normal, 1=invertida, 2=nomes pujada, 3=nomes baixada,,
     & 4=bifasica -+, 5=bifasica +-, 6=no existeix',/)
          end if
         end if

         if (k.eq.18) then
            write(30,17) fderiv,nint(ritme),nint(rrmit)
 17         format(//1x,'Derivacio: ',a3,10x,'ritme:',i3,' pul',1h/,
     &             'min',10x,'RR mitg:',i4,' ms'/)
         end if

	 write(30,20)
 20	 format(/18x,'I N T E R V A L S  (ms)',15x,'A M P L I T U T S  (mv)',
     &          17x,'D U R A C I O N S    (ms)')
	 write(30,25)
 25      format(15x,28('-'),4x,40('-'),5x,32('-'))
	 write(30,30)
 30	 format(' Batec  seg.    RR  QRS   QT  QTP   PR   PP      P     ',
     &   'Q      R      S      T      R',1H','       P    Q    R    S', 
     &   '    T    R',1H',' PicR' /)
	 iau=0
	 do i=1,jqrs
         if ((tip(i-1).eq.' VT '.and.tip(i+1).eq.' VT ').or.(tip(i-1)
     &        .eq.' VF '.and.tip(i+1).eq.' VF ')) go to 45
         iau=iau+1
	 seg=1.*irpos(i)/ifm
	 write(30,40) i,seg,nint(rrint(i)),nint(qrsint(i)),nint(qtint(i)),
     &   nint(qtpint(i)),nint(print(i)),nint(ppint(i)),ampp(i),ampq(i),
     &   ampr(i),amps(i),ampt(i),amprr(i),nint(durp(i)),nint(durq(i)),
     &   nint(durr(i)),nint(durs(i)),nint(durt(i)),nint(durrr(i)),
     &	 nint(durpic(i))

 40	 format(1x,i3,3x,f5.2,1x,6(1x,i4),
     &          4x,6(f6.3,1x),1x,6(i4,1x),1x,i3)

         if(iau.eq.5) then
	    iau=0
	    write(30,*)
	 end if
 45      continue
         end do

   	 write(30,50)
 50      format (///,14x,'PEND-R    MORFOLOGIES         S E G M E N T  '
     &           ,' ST            ARRITMIES')
	 write(30,55)
 55      format(14x,6('-'),2x,13('-'),3x,32('-'),2x,15('-'))
	 write(30,60)
 60      format(' Batec  seg.  mV/s      QRS P T Bat   ampl.    pend.',
     &        '    index     area     ventricular'/37x,
     &        ' (mV)   (mV/seg)          (uV*seg)  freq(Hz) sd(mV)')
   	 iau=0
         do i=1,jqrs
          if ((tip(i-1).eq.' VT '.and.tip(i+1).eq.' VT ').or.(tip(i-1)
     &        .eq.' VF '.and.tip(i+1).eq.' VF ')) go to 75
          iau=iau+1
   	    seg=1.*irpos(i)/ifm
	    write(30,70) i,seg,nint(pendr(i)),tip(i),morf(2,i),morf(3,i),
     &          morf(4,i),morf(1,i),ST_am(i),ST_pe(i),ST_in(i),ST_ar(i),    
     &          freV(i),desV(i)
 70         format (1x,i3,3x,f5.2,2x,i3,4x,a4,i2,1x,i1,1x,i1,1x,i1,3x,
     &              f7.3,2x,f7.3,2x,f7.3,2x,f7.2,3x,f5.2,2x,f7.4)
            if(iau.eq.5) then
      	      iau=0
	      write(30,*)
	    end if
 75      continue
	 end do

         if (k.ne.18.or.kder.eq.15) then
      	    close(unit=30)
         end if
	 return
	 end

c---------------------------------------------------------------------------

	 subroutine vis_dat(f, ifm, ns, jqrs, morf, amprr, ampr, ampq, amps,
     &		durpic, qrsint, durr, durrr, durq, durs, rrint, print, 
     &		ppint, qtint, qtpint, samp, ritme, rrmit, tip,irpos,pendr) 

c 	 Aquesta subrutina ens mostra totes les dades per pantalla 

 	 dimension morf(5,8000),pendr(8000)
	 dimension amprr(8000),ampr(8000),ampq(8000),amps(8000)
	 dimension durpic(8000),qrsint(8000),durr(8000),durrr(8000)
	 dimension durq(8000)
	 dimension durs(8000),rrint(8000),print(8000),ppint(8000)
	 dimension qtint(8000)
	 dimension qtpint(8000), irpos(8000)
	 character*12 f, noe
	 character*4 tip(8000)
	 character*1 op
      character*2 FRMT

	 write(6,5)
 5	 format(5x,'Canviar el format a 132 columnes i pitjar <ret>')
      FRMT = 'i1'
      read(5,FRMT,err=6) ret

 6	 write(6,10) f, ns, nint(ritme), nint(rrmit), ifm, jqrs
 10 	 format(//,1x,'Pacient:',a8,2x,'longitut:',i4,' seg',2x,'ritme:',i3,
     &   ' pul',1h/,'min',2x,'RR mitg:',i4,' ms',3x,'freq mos:',i4,'Hz',
     &   3x,'bategs:',i4,/)
	 write(6,15)
 15	 format(1x,'CODI DE MORFOLOGIES: ona P: 0=normal, 1=invertida,
     & 2=no existeix;     bateg: 0=normal, 3=primer bateg',/,
     &1x,'ona T: 0=normal, 1=invertida, 2=nomes pujada, 3=nomes baixada,,
     & 4=bifasica -+, 5=bifasica +-, 6=no existeix',/)
	 write(6,20)
 20	 format(19x,'I N T E R V A L S  (ms)',13x,'A M P L I T U T S  (mV)',
     &   7x,'D U R A C I O N S  (ms)',2x,'PEND-R',2x,'MORFOLOGIES')
	 write(6,30)
 30	 format(' bateg seg.    RR    QRS   QT    QTP   PR    PP        Q',
     &   '      R      S      R',1H','       Q    R    S    R',1H',
     &   '  PicR  mV',1h/,'seg    QRS P T Bat')
	 iau=0
	 do i=1,jqrs
         iau=iau+1
	 seg=1.*irpos(i)/ifm
	 write(6,40) i,seg,nint(rrint(i)),nint(qrsint(i)),nint(qtint(i)),
     &   nint(qtpint(i)),nint(print(i)),nint(ppint(i)),ampq(i),ampr(i),
     &   amps(i),amprr(i),nint(durq(i)),nint(durr(i)),nint(durs(i)),
     &   nint(durrr(i)),nint(durpic(i)),nint(pendr(i)),tip(i),
     &	 morf(2,i),morf(3,i),morf(4,i),morf(1,i)

 40	 format(1x,i3,1x,f6.2,2x,i5,1x,i5,1x,i5,1x,i5,1x,i5,1x,i5,
     &   4x,f6.3,1x,f6.3,1x,f6.3,1x,f6.3,4x,i4,1x,i4,1x,i4,1x,i4,1x,i4,
     &   3x,i4,3x,a4,i2,1x,i1,1x,i1,1x,i1)
         if(iau.eq.5) then
	 iau=0
	 write(6,*)
	 end if
	 end do

	 write(6,50)
 50	 format(5x,'Canviar el format a 80 columnes i pitjar <ret>')
      read(5,FRMT,err=60) ret
 60	 return
	 end
c-----------------------------------------------------------------------