.; .; FILFIX.ALL .; COMMAND FILE TO BUILD FILFIX.TSK .; .OPEN FILFIX.FTN;111 .ENABLE DATA PROGRAM FILFIX C+ C FILFIX PROGRAM C PROGRAM TO FIX INTERNAL CARRIAGE CONTROL FILES C AND TO FIX BACK SPACES AND EXTRANIOUS CNTROL CHARACTERS C C WRITTEN BY: DAVID J. STRAIT 05-MAR-82 C APPLIED DYNAMICS INTERNATIONAL C C REVISION: 27-APR-82 BY: DJS C C CALL SEQUENCE: C >RRM FIXFIL OUTNAM = INNAME C C WHERE: C C RETURN: C C SUBS CALLED: C C- CHARACTER*80 CMDBUF INTEGER*2 CMDBEG,CMDLEN,INBEG CHARACTER INBUF*132,OUTBUF*132 BYTE BBUF(132) EQUIVALENCE (BBUF,INBUF) C C GET COMMAND LINE C CMDBEG = 1 CALL GETMCR(CMDBUF,CMDLEN) IF (CMDLEN.LE.0) GO TO 10 CMDBEG = 1 + INDEX(CMDBUF(1:CMDLEN),' ') ! SEARCH FOR SPACE IF (CMDBEG.LT.1) GO TO 9020 ! NO SPACE, ERROR RETURN GO TO 20 ! SKIP C 10 WRITE(5,5000) 5000 FORMAT('$FILFIX>') READ(5,5010,END=9999) CMDLEN,CMDBUF 5010 FORMAT(Q,A) C C FIND EQUALS C 20 I = INDEX(CMDBUF(CMDBEG:CMDLEN),'=') ! SEARCH FOR "=" IF (I.EQ.0) GO TO 9030 ! NO = PRINT ERROR C C OPEN FILES C INBEG = I + CMDBEG OPEN(UNIT=1,READONLY,NAME=CMDBUF(INBEG:CMDLEN),TYPE='OLD' 1 ,ERR=9000) C OPEN(UNIT=2,NAME=CMDBUF(CMDBEG:INBEG-2),TYPE='NEW',ERR=9010, 1 CARRIAGECONTROL='LIST') C C TRANSLATE FILE C NIN = 0 ! RESET INPUT COUNT NOUT = 0 ! RESET OUTPUT COUNT 100 IF (NIN.NE.0) GO TO 120 READ(1,1000,END=300) NIN,INBUF 1000 FORMAT(Q,A) IF (NIN.EQ.0) GO TO 100 DO 110 I = 1,NIN BBUF(I) = BBUF(I).AND."177 ! CLEAR HIGH BIT 110 CONTINUE INPNT = 0 120 NIN = NIN - 1 INPNT = INPNT + 1 IF (BBUF(INPNT).EQ."12) GO TO 200 ! GOT LF IF (BBUF(INPNT).EQ."10) GO TO 140 ! GOT BS IF (BBUF(INPNT).EQ."14) GO TO 150 ! GOT FF IF (BBUF(INPNT).LT."40) GO TO 100 ! CONTROL CHARACTER SKIP IF (BBUF(INPNT).EQ."177) GO TO 100 ! IGNORE RUBOUT ALSO IF (NOUT.NE.134) GO TO 130 WRITE(2,2000) OUTBUF NOUT = 0 WRITE(5,*) ' WARNING - LINE OVER 134 CHARACTERS' 130 NOUT = NOUT + 1 OUTBUF(NOUT:NOUT) = INBUF(INPNT:INPNT) GO TO 100 C C BACK SPACE C 140 IF (NOUT.NE.0) NOUT = NOUT - 1 GO TO 100 C C FORM FEED C 150 IF (NOUT.NE.0) WRITE(2,2000) OUTBUF(1:NOUT) NOUT = 0 WRITE(2,2000) INBUF(INPNT:INPNT) GO TO 100 C C SEND LINE C 200 IF (NOUT.NE.0) GO TO 210 NOUT = 1 ! PUT SPACE IN NULL RECORD OUTBUF(1:1) = ' ' 210 WRITE(2,2000) OUTBUF(1:NOUT) 2000 FORMAT(A) NOUT = 0 GO TO 100 C C END OF INPUT FILE C 300 IF (NOUT.NE.0) WRITE(2,2000) OUTBUF(1:NOUT) CALL CLOSE(1) CALL CLOSE(2) GO TO 9900 C C ERROR PRINT OUT C 9000 WRITE(5,*) ' FILFIX ERROR - INPUT FILE "', 1 CMDBUF(INBEG:CMDLEN),'" NOT FOUND' GO TO 9900 9010 WRITE(5,*) ' FILFIX ERROR - CAN''T OPEN OUTPUT FILE ', 1 CMDBUF(CMDBEG:INBEG-2) CALL CLOSE(1) ! CLOSE INPUT FILE GO TO 9900 C 9020 WRITE(5,*) ' FILFIX ERROR - NO SPACE ON COMMAND LINE' GO TO 9999 C 9030 WRITE(5,*) ' COMMAND LINE ERROR - NO "="' C C END C 9900 IF (CMDBEG.EQ.1) GO TO 10 9999 CALL EXIT END .DISABLE DATA .CLOSE F77 FILFIX;1=FILFIX/TR:NONE/NOI4 .IF GT 1 .EXIT .OPEN FILFIX.TKB;111 .DATA FILFIX;1/CP/-FP=FILFIX;1 .DATA LB:[1,1]F77EIS .DATA / .DATA LIBR=FCSRES:RO .DATA ACTFIL=3 .DATA UNITS=5 .DATA TASK=...FFX .DATA // .CLOSE TKB @FILFIX.TKB PIP FILFIX.OBJ;1,FILFIX.TKB;111/DE,FILFIX.FTN;111