* * $Id: rzlind.F,v 1.2 1996/04/24 17:26:59 mclareni Exp $ * * $Log: rzlind.F,v $ * Revision 1.2 1996/04/24 17:26:59 mclareni * Extend the include file cleanup to dzebra, rz and tq, and also add * dependencies in some cases. * * Revision 1.1.1.1 1996/03/06 10:47:25 mclareni * Zebra * * #include "zebra/pilot.h" SUBROUTINE RZLIND(IDATA,NTOT,INEW,NEW) * ************************************************************************ * * To convert packed vectors into a portable format. * To extract integers from IDATA into bit pattern array INEW * The original IDATA are modified into characters. * * Called by RZTOF1 * * Author : R.Brun DD/US/PD * Written : 08.09.89 * Last mod: 08.09.89 * ************************************************************************ * DIMENSION IDATA(*),INEW(*) CHARACTER*4 KWORD * #include "zebra/q_jbit.inc" #include "zebra/q_jbyt.inc" NTOLD=NTOT KWORD=' ' IWORD=IDATA(NTOT+1) INEW(NEW)=IWORD IF(IWORD.EQ.0)THEN NTOT=NTOT+1 GO TO 90 ENDIF * IBIT31=JBIT(IWORD,31) IBIT32=JBIT(IWORD,32) IF(IBIT31.NE.0)THEN NWI=2 ELSE NWI=1 ENDIF KCODE=JBYT(IWORD,1,8) IF(IBIT32.NE.0)THEN * * Comment cards * ICODE=KCODE ICADRE=MOD(ICODE,2) * * Is there a frame ? * IF(ICADRE.NE.0)THEN NWI=NWI+1 NEW=NEW+1 INEW(NEW)=IDATA(NTOT+NWI) KWORD(1:1)=CHAR(JBYT(IDATA(NTOT+NWI),1,8)) IPOS1=JBYT(IDATA(NTOT+NWI),25,8) IF(IPOS1.NE.0)THEN KWORD(2:2)=CHAR(JBYT(IDATA(NTOT+NWI),17,8)) ENDIF ENDIF * * Is there a character to repeat? * ICAR=JBYT(IWORD,9,8) IF(ICAR.EQ.0)THEN * * No character to repeat. * IFWORD=JBYT(IWORD,17,7) ILASTW=JBYT(IWORD,24,7) IF(ILASTW.EQ.1) THEN NTOT=NTOT+NWI GO TO 90 ENDIF * IF (ILASTW.GT.20 .OR. IFWORD.GT.ILASTW)GO TO 100 * NTOT=NTOT+NWI+ILASTW-IFWORD+1 GO TO 90 ELSE * * Character must be repeated. * KWORD(3:3)=CHAR(ICAR) IFIRST=JBYT(IWORD,17,7) ILAST =JBYT(IWORD,24,7) * IF (ILAST.GT.80 .OR. IFIRST.GT.ILAST)GO TO 100 * NTOT =NTOT+NWI GO TO 90 ENDIF ELSE * * Other particular cases * ICODE = JBYT(IWORD,24,7) ICOD = ICODE-114 * IF(ICOD.LE.0)GO TO 40 IF (ICOD.LT.6 .OR. ICOD.GT.11) THEN IF (ICOD.EQ.1 .OR. ICOD.EQ.3 .OR. ICOD.EQ.5) THEN KWORD(1:1)=CHAR(KCODE) KWORD(2:2)=CHAR(JBYT(IWORD,9,8)) ENDIF NTOT=NTOT+NWI GO TO 90 ENDIF * IF (ICOD .EQ. 6) THEN NTOT=NTOT+1 GO TO 90 ENDIF * ILASTW=JBYT(IWORD,17,7) NTOT=NTOT+ILASTW GO TO 90 ENDIF * 40 CONTINUE * * Case of a normal line * KWORD(1:1)=CHAR(KCODE) ILASTW=ICODE IF(ILASTW.LT.2) THEN NTOT=NTOT+NWI GO TO 90 ENDIF IFWORD=JBYT(IWORD,17,7) * IF (ILASTW.GT.20 .OR. IFWORD.GT.ILASTW)GO TO 100 * NTOT=NTOT+NWI+ILASTW-IFWORD+1 * 90 CONTINUE CALL UCTOH(KWORD,IDATA(NTOLD+1),4,4) RETURN * 100 NTOT=1000000 999 END