PROGRAM CAB C C This program converts files produced by CBA back into original C format. C BYTE FILEO(40,1),FILEI(40,1) !Filename storage. INTEGER OUTRC2(257) !Output BYTE BOUTRC(513),PAGE(512) !Buffer EQUIVALENCE(PAGE(1),OUTRC2(1),BOUTRC(1))! BYTE INREC(171,4) !Four input buffers. BYTE IN12(684) !Change to 12 input records. EQUIVALENCE(IN12(1),INREC(1)) ! INTEGER HUCHA !H.UCHA INTEGER CHKSUM ! C C Declarations for DLIB subroutines. C INTEGER RECIO(7),FHIBK,FEFBK !User file attributes. INTEGER FCNTG,FFFBY !F.CNTG EQUIVALENCE (FFFBY,IFDBOUT(7)) !First free byte. EQUIVALENCE (FHIBK,RECIO(4)) !Size of original file. EQUIVALENCE (FEFBK,RECIO(6)) !End-of-file block. EQUIVALENCE (FCNTG,IFDBOUT(15)) ! BYTE FDBOUT(128) !File INTEGER IFDBOUT(64) !Description EQUIVALENCE (IFDBOUT(1),FDBOUT(1))!Block. INTEGER SIZEI4(2) ! REAL SIZE ! EQUIVALENCE(SIZEI4(1),SIZE) ! EQUIVALENCE(SIZEO,FDBOUT(11)) ! BYTE OUT(2) ! COMMON /MYFDB/ FDBOUT ! COMMON /VABORT/ IABORT ! COMMON /PAGES/ PAGE ! C CALL CABINI(FDBOUT) !Initialize 10 CALL CABLIN(FILEO,FILEI) !Get files from command line C C Open files. C OUT(1)="16 !FA.CRE!FA.WRT!FA.EXT OUT(2)="1 !FD.RWM block mode. OPEN(UNIT=1,TYPE='OLD',NAME=FILEI(1,1),ERR=80) READ(1,20,ERR=80)RECIO,HUCHA,SIZEI4 !Read user file attributes. 20 FORMAT(10I6) !to ASCII file. FCNTG=FHIBK !Set F.CNTG to number of blocks. IF((HUCHA .AND. "200) .EQ. 0)FCNTG=-FCNTG !Check for noncontigous. CALL OFNB(FDBOUT,OUT,2,FILEO,IERR) IF(IERR .LE. 0)CALL FDBERR(FDBOUT,3HCAB) FFFBY=RECIO(7) ! C C Convert to ASCII C IBLK=1 !Point to 1st block. 30 READ(1,40,END=60,ERR=80)IN12 !Read 12 input records at 40 FORMAT(11(57A1/),57A1) !a gulp. READ(1,50)NBT,CHKSUM ! 50 FORMAT(2I6) ! OUTRC2(257)=0 ! CALL T4REC(INREC,BOUTRC) !Translate 12 records to 1 block. CALL CHKCAB(PAGE,CHKSUM,FILEI) ! CALL DABWT(FDBOUT,PAGE,512,IBLK,NB,IERR) IF(IERR .LT. 0)CALL FDBERR(FDBOUT,3HCAB) IBLK=IBLK+1 !Point to next block. GO TO 30 !Loop until end of file. C C End-of-file processing. C 60 DO 70 I=1,7 ! IFDBOUT(I)=RECIO(I) ! 70 CONTINUE ! SIZEO=SIZE !Set F.EFBK, F.HIBK to match original. CALL CLOS(FDBOUT) !Close all CLOSE(UNIT=1) !files and GO TO 10 !go back for another command line. 80 CALL FTNERR(3HCAB) CALL EXIT END