PROGRAM ACD C C This program is used to convert FORTRAN source files from C PDP format to ACD format. In particular, 's are C replaced by the proper number of spaces; continuation C lines are modified, line numbers are right justified; C octal constants are modified and string delimiter are C changed from single (') to double quotes ("). C C The default input file type is .FTN; the default output C file type is .ACD. C LOGICAL*1 IN(80), OUT(132), FILE(40), TAB, COM(2) DATA TAB/"11/, COM/'C','*'/ C C - ASK FOR NAME OF INPUT FILE. 100 CALL DEFILE( -1,,,,,, 'FTN' ) WRITE(5,110) 110 FORMAT('$Name of input file: ') READ(5,120,END=7600) NFILE, FILE 120 FORMAT(Q,40A1) IF( NFILE .EQ. 0 ) GO TO 7600 FILE( NFILE+1 ) = 0 C C - ASSIGN FILES. OPEN( UNIT=1, NAME=FILE, TYPE='OLD', READONLY, ERR=7600 ) CALL DEFILE( 1,,,,,FILE) FILE( 10 ) = 0 CALL DEFILE( -1,,,,,, 'ACD' ) OPEN( UNIT=2, NAME=FILE, TYPE='NEW' ) C C - READ IN LINE. NLINE = 0 200 READ(1,210,END=7500) NIN, IN 210 FORMAT(Q,80A1) N = 1 NOUT = 1 NLINE = NLINE + 1 C C - REPLACE ALL TABS. 300 CALL ITWAS( TAB, IN(N), NIN-N+1, ITIS ) IF( ITIS .GT. NIN-N+1 ) GO TO 2100 ITIS = ITIS + N - 1 C C - COPY LINE TO TAB CHARACTER. IF( ITIS .EQ. N ) GO TO 1100 DO 1000 I=1,ITIS-N OUT( NOUT ) = IN( N ) NOUT = NOUT + 1 1000 N = N + 1 C C - FILL IN 'S FOR THE TAB. 1100 NSP = 7 - MOD( NOUT, 7 ) DO 2000 I=1,NSP OUT( NOUT ) = ' ' 2000 NOUT = NOUT + 1 N = ITIS + 1 IF( N .GT. NIN ) GO TO 3100 GO TO 300 C C - COPY REMAINDER OF LINE. 2100 DO 3000 I=N,NIN OUT( NOUT ) = IN( I ) 3000 NOUT = NOUT + 1 NOUT = NOUT - 1 C C - IF COMMENT LINE WITH "D", CHANGE TO "*". 3100 CALL ITWAS( OUT(1), 'D', 1, ITIS ) IF( ITIS .EQ. 1 ) OUT(1) = '*' C C - IS LINE JUST BLANK COMMENT? IF( NOUT .LE. 6 ) GO TO 7400 C C - CALCULATE A LINE NUMBER. LINO = 0 NS = 1 CALL ITWAS( OUT(1), 'C*', 2, ITCOM ) IF( ITCOM .LE. 2 ) NS = 2 DO 4000 I=NS,5 CALL ITWAS( OUT(I), '0123456789 ', 11, ITIS ) IF( ITIS .EQ. 12 ) GO TO 5100 IF( ( LINO .NE. 0 ) .AND. ( ITIS .EQ. 11 ) ) GO TO 4100 4000 LINO = 10*LINO + MOD( ITIS-1, 10 ) 4100 IF( LINO .EQ. 0 ) GO TO 4200 ENCODE(5,4110,OUT) LINO 4110 FORMAT(I5) IF( ITCOM .EQ. 3 ) GO TO 5100 OUT(1) = COM( ITCOM ) GO TO 5100 C C - CONTINUATION LINE? 4200 CALL ITWAS( OUT(7), '123456789', 9, ITIS ) IF( ITIS .EQ. 10 ) GO TO 5100 C C - SHIFT LEFT AND CHANGE COINUATION CHARACTER TO "$". DO 5000 I=7,NOUT 5000 OUT( I-1 ) = OUT( I ) OUT(6) = '$' NOUT = NOUT - 1 C C - CHANGE FORMAT OF OCTAL CONSTANTS. 5100 N = 1 5200 CALL ITWAS( '"', OUT(N), NOUT-N+1, ITIS ) IF( ITIS .GT. NOUT-N+1 ) GO TO 7200 C C - ARE THE "'S BEING USED FOR QUOTES? DO 6000 I=N+ITIS,NOUT CALL ITWAS( OUT(I), '01234567', 8, ISOK ) IF( ISOK .GT. 8 ) GO TO 6100 6000 CONTINUE C C - IF AT LEAST ONE DIGIT, ASSUME AN OCTAL NUMBER. 6100 IF( I .EQ. N+ITIS ) GO TO 7100 C C - SHIFT NUMBER OVER """ AND APPEND A "B". DO 7000 J=N+ITIS,I-1 7000 OUT( J-1 ) = OUT( J ) OUT( I-1 ) = 'B' 7100 N = I GO TO 5200 C C - CHANGE "'" TO """. 7200 CALL ITWAS( 1H', OUT, NOUT, ITIS ) IF( ITIS .GT. NOUT ) GO TO 7300 OUT( ITIS ) = 1H" GO TO 7200 C C - TRUNCATE AT COLUMN 80 IF COMMENT, ELSE CONTINUE IT. 7300 IF( NOUT .LE. 72 ) GO TO 7400 CALL ITWAS( OUT(1), 'C*', 2, ITIS ) IF( ITIS .LE. 2 ) GO TO 7400 WRITE(2,7310) ( OUT(I), I=1,72 ) 7310 FORMAT(80A1) WRITE(2,7320) ( OUT(I), I=73,NOUT ) 7320 FORMAT(5X,'$',40A1) GO TO 200 C C - WRITE OUT LINE. 7400 NOUT = MIN0( NOUT, 80 ) WRITE(2,7310) ( OUT(I), I=1,NOUT ) GO TO 200 C C - CLOSE FILES AND CONTINUE. 7500 CLOSE( UNIT=1 ) CLOSE( UNIT=2 ) GO TO 100 C C - ALL DONE. 7600 CALL EXIT END