PROGRAM WORTXT C C Routine to convert a print image file from WORD-11 to a standard text C file that could be edited. WORD-11 leaves the file in a partially C undefined state. The record format is RFM? for no defined record C format. Output will be the same file name, but sequential, variable C record lengths, carriage return attribute. C C Compile and taskbuild commands C FORTRAN/F77 WOR2TXT C WOR2TXT=WOR2TXT C LB:[1,24]CHSLIB/LB C / C UNITS=3 C ACTFIL=3 C ASG=TI:3 C MAXBUF=512 C SUPLIB=FCSFSL:SV C // C IMPLICIT INTEGER (A-Z) CHARACTER*32 FILNAM,TIMES*8 BYTE BUFIN(512),BUFOUT(255) BYTE CR,LF,NULL LOGICAL EOF,CRLF C PARAMETER (CR="15,LF="12,NULL="0,INP=1,OUT=2,CRT=3) C CALL TIMER(0,TIMES) 5 WRITE (CRT,6) 6 FORMAT (/,T10,'Convert a print image WORD-11 file to a ', $ 'Text file',//) C 10 WRITE (CRT,11,END=99) 11 FORMAT ('$Enter the print image filename : ') READ (CRT,12) N,FILNAM 12 FORMAT (Q,A32) FILNAM = FILNAM(:N) OPEN (UNIT=INP,FILE=FILNAM,RECORDTYPE='FIXED',RECL=512,ERR=10, $ STATUS='OLD',READONLY,FORM='FORMATTED',ACCESS='SEQUENTIAL') OPEN (UNIT=OUT,FILE=FILNAM,CARRIAGECONTROL='LIST',STATUS='NEW', $ RECL=255) WRITE (CRT,14) 14 FORMAT (//) C C Now, read through the large blocks, using CR to delimit the records. C Span block boundaries. C CALL GETBUF(NCHRS,BUFIN,EOF) IF (EOF) GO TO 40 O = 0 I = 1 NRECS = 0 CRLF = .FALSE. 20 IF (BUFIN(I).EQ.CR) THEN IF (O.GT.0) THEN WRITE (OUT,21) (BUFOUT(J),J=1,O) 21 FORMAT (255A1:) O = 0 NRECS = NRECS+1 ELSE WRITE (OUT,22) ENDIF CRLF = .TRUE. ELSEIF (BUFIN(I).EQ.LF) THEN IF (.NOT.CRLF) THEN WRITE (OUT,22) 22 FORMAT () NRECS = NRECS+1 ENDIF CRLF = .FALSE. ELSEIF (BUFIN(I).EQ.NULL) THEN GO TO 40 ELSE IF (O.GE.255) THEN WRITE (OUT,21) (BUFOUT(J),J=1,O) O = 0 NRECS = NRECS+1 ENDIF O = O+1 BUFOUT(O) = BUFIN(I) CRLF = .FALSE. ENDIF I = I+1 IF (I.GT.NCHRS) THEN CALL GETBUF(NCHRS,BUFIN,EOF) IF (EOF) GO TO 40 I = 1 ENDIF GO TO 20 C C End of file, finish the last buffer being made C 40 IF (O.GT.0) THEN WRITE (OUT,21) (BUFOUT(J),J=1,O) NRECS = NRECS+1 ENDIF WRITE (CRT,41) FILNAM,NRECS 41 FORMAT (/,1X,A,' converted to a text file - ',I5,' lines') C C That's all folks C 99 CLOSE (UNIT=INP) CLOSE (UNIT=OUT) CALL TIMER(1,TIMES) NPAGES = NRECS/66+2 CALL TSKLOG(CRT,'WORD2TXT',TIMES,NPAGES) END SUBROUTINE GETBUF(NCHRS,BUFFER,EOF) C C GET A 512 BYTE BUFFER C IMPLICIT INTEGER (A-Z) BYTE BUFFER(512) LOGICAL EOF DIMENSION ISB(2),DPB(6) DATA BLOCK/0/ C PARAMETER (INP=1,CRT=3) C BLOCK = BLOCK+1 CALL GETADR(DPB,BUFFER) DPB(2) = 512 DPB(4) = 0 DPB(5) = BLOCK CALL WTQIO("10400,INP,1,,ISB,DPB) IF (ISB(1).NE.1) THEN IF (ISB(1).NE.246) THEN WRITE (CRT,5) BLOCK,ISB 5 FORMAT (/,' Read Virtual Block # ',I4,' error of ',2O8,/) ENDIF GO TO 10 ENDIF NCHRS = ISB(2) WRITE (CRT,7) BLOCK 7 FORMAT ('+Converting block ',I3) EOF = .FALSE. RETURN C C Got an eof C 10 EOF = .TRUE. RETURN END