C.. CHANGE.FTN BOHDEN K. CMAYLO C.. JAN, 1982 BYTE INPUT(512),INCH(80),INCHX,IZERO,MCHAB(40),MCCHAB(40) DIMENSION MCHAW(20),MCCHAW(20),INPUTW(256) EQUIVALENCE (INPUT,INPUTW),(MCHAB,MCHAW),(MCCHAB,MCCHAW) DATA NEWMAT,IZERO/0,'0'/ IN=1 IOUT=2 CALL DINOUT(IERR,IN,'IN * ENTER FILE NAME TO CHANGE=',INPUT) IF(IERR.GT.0) GO TO 99 C TYPE 555 C555 FORMAT('$ * NUMBER OF BLOCKS IN INPUT FILE=') MAXKIN=1000 C ACCEPT 444,MAXKIN C444 FORMAT(I6) CALL DINOUT(IERR,IOUT,'OUT * ENTER OUTPUT FILE NAME=',INPUT) IF(IERR.GT.0) GO TO 99 C.. C.. GET CHARACTERS TO CHANGE C.. CALL PROMPT 1 (' * CHARACTER STRING !MATCH!CHANGE!TYPE!NUMBER=',IQ,INCH) C.. C.. TYPES ARE : C.. A=1=ASCII CHARS (DEFAULT) C.. B=2=BYTE OCTAL WORDS C.. O=3=OCTAL WORDS C.. R=4=RAD50 CHARS C.. INTYPE=1 INCHX=INCH(1) INDEX=0 MC=0 MCC=0 MATCHS=9999 DO 1 I=2,IQ IF(INCH(I).NE.INCHX) GO TO 1 INDEX=INDEX+1 GO TO (11,12,13,98)INDEX C.. C.. MATCH CHARACTERS 2-(I-1) C.. 11 IF(I.EQ.2) GO TO 98 CALL BYTEDO(MCHAB(1),MCHAB(I-2),INCH(2)) INX=I+1 MC=I-2 GO TO 1 C.. C.. CHANGE CHARACTERS C.. 12 IF(I.EQ.INX) GO TO 98 CALL BYTEDO(MCCHAB(1),MCCHAB(I-INX),INCH(INX)) MCC=I-INX IF(MC.NE.MCC) GO TO 98 INX=I+1 C.. C.. TYPE OF CHARACTERS C.. INTYPE=0 IF(INCH(I+1).EQ.'A') INTYPE=1 IF(INCH(I+1).EQ.'B') INTYPE=2 IF(INCH(I+1).EQ.'O') INTYPE=3 IF(INCH(I+1).EQ.'R') INTYPE=4 IF(INTYPE.EQ.0) GO TO 98 GO TO 1 C.. C.. NUNBER OF MATCHES C.. 13 DO 130 MATCHS=1,9 IF(INCH(I+1).EQ.IZERO+MATCHS) GO TO 1 130 CONTINUE GO TO 98 1 CONTINUE C.. C.. DO CONVERSIONS, IF REQUIRED C.. IF(MC.LE.0.OR.MCC.LE.0) GO TO 98 GO TO (21,22,23,24)INTYPE C.. ASCII... NO CONVERSIONS 21 GO TO 30 C.. BYTE OCTAL... SIZE CHECK(MULT OF 3),CONVERT TO OCTAL 22 MC3=MC/3 IF(MC.NE.MC3*3) GO TO 97 C.. DECODE CHANGE FROM DECODE(MC,20,MCHAB,ERR=96)(INPUT(I),I=1,MC3) 20 FORMAT(20O3) CALL BYTEDO(MCHAB,MCHAB(MC3),INPUT) C.. DECODE CHANGE TO DECODE(MC,20,MCCHAB,ERR=96)(INPUT(I),I=1,MC3) CALL BYTEDO(MCCHAB,MCCHAB(MC3),INPUT) MC=MC3 GO TO 30 C.. WORD OCTAL... SIZE CHECK(MULT OF 6),CONVERT TO OCTAL 23 MC6=MC/6 IF(MC.NE.MC6*6) GO TO 95 C.. DECODE CHANGE FROM DECODE(MC,19,MCHAB,ERR=96)(INPUTW(I),I=1,MC6) 19 FORMAT(10O6) CALL WORDDO(MCHAW,MCHAW(MC6),INPUTW) C.. DECODE CHANGE TO DECODE(MC,19,MCCHAW,ERR=96)(INPUTW(I),I=1,MC6) CALL WORDDO(MCCHAW,MCCHAW(MC6),INPUTW) MC=MC6 GO TO 30 C.. CHANGE TO RAD50 (MULT OF 3) + CONVERT 24 MC3=MC/3 IF(MC.NE.MC3*3) GO TO 97 CALL IRAD50(MC,MCHAB,INPUT) CALL WORDDO(MCHAW,MCHAW(MC3),INPUTW) CALL IRAD50(MC,MCCHAB,INPUT) CALL WORDDO(MCCHAW,MCCHAW(MC3),INPUTW) MC=MC3 C.. C.. READ IN DATA + GO TO CHECKS C.. KIN=0 30 KIN=KIN+1 CALL ERRSET(39,.TRUE.,.FALSE.,.TRUE.,.FALSE.,100) IF(KIN.GT.MAXKIN) GO TO 32 READ(IN'KIN,ERR=32)INPUT 31 FORMAT(Q,32(32A1)) IF(NEWMAT.GE.MATCHS) GO TO 60 IQ=512 GO TO (41,41,42,42)INTYPE C.. CHECK ASCII OR OCTAL BYTES CHARS 41 DO 50 I=1,IQ IF(INPUT(I).NE.MCHAB(1)) GO TO 50 IF(MC.EQ.1) GO TO 52 DO 51 J=2,MC IF(INPUT(I+J-1).NE.MCHAB(J)) GO TO 50 51 CONTINUE C.. C.. MATCHED, REPLACE C.. 52 CONTINUE IREP=IREP+1 DO 53 J=1,MC INPUT(I+J-1)=MCCHAB(J) 53 CONTINUE NEWMAT=NEWMAT+1 IF(NEWMAT.GE.MATCHS) GO TO 60 50 CONTINUE C.. C.. WRITE OUT DATA C.. 60 WRITE(IOUT'KIN)(INPUT(I),I=1,IQ) 61 FORMAT(32(32A1)) GO TO 30 C.. C.. OCTAL WORDS + RAD50 C.. 42 IQQ=(IQ+1)/2 DO 70 I=1,IQQ IF(INPUTW(I).NE.MCHAW(1)) GO TO 70 IF(MC.EQ.1) GO TO 72 DO 71 J=2,MC IF(INPUTW(I+J-1).NE.MCHAW(J)) GO TO 70 71 CONTINUE C.. C.. MATCHED, REPLACE C.. 72 CONTINUE IREP=IREP+1 DO 73 J=1,MC INPUTW(I+J-1)=MCCHAW(J) 73 CONTINUE 70 CONTINUE C.. C.. WRITE OUT DATA C.. GO TO 60 C.. C.. END OF FILE, CLOSE AND REPORT C.. 32 CLOSE(UNIT=IN) CLOSE(UNIT=IOUT) TYPE 33,IREP 33 FORMAT(///' * STRINGS REPLACED=',I6//) 100 CALL EXIT C.. C.. ERRORS C.. 99 TYPE 199,(INPUT(I),I=1,40) 199 FORMAT('0* ERROR FILE NAME =',40A1) GO TO 100 98 TYPE 198,(INCH(I),I=1,40) 198 FORMAT('0* ERROR CHANGE STRING =',40A1) GO TO 100 97 TYPE 197,MC,(INPUT(I),I=1,40) 197 FORMAT('0* ERROR CHANGE NUMBER',I4,' NOT MULTIPLE OF 3'/ 1 '* STRING =',40A1) GO TO 100 96 TYPE 196,MC,(MCHAB(I),I=1,MC) 196 FORMAT('0* ERROR IN DECODE, #=',I3,' SRTING=',40A1) TYPE 196,MC,(MCCHAB(I),I=1,MC) GO TO 100 95 TYPE 195,MC,(INPUT(I),I=1,40) 195 FORMAT('0* ERROR CHANGE NUMBER',I4,' NOT MULTIPLE OF 6'/ 1 '* STRING =',40A1) GO TO 100 94 TYPE 194,IQ 194 FORMAT('0* ERROR, NUMBER CHARACTERS',I5,' GREATER 512') GO TO 100 END