/ / RDFILP - RDFIL FOR PRINTER AND LIST PROCESSING / / 002 GDH 03-MAR-82 Fixed storage of temp in RDGTHS. / 001 GJP 21-JAN-82 Added 2 more possible header extensions / TT 07-JUL-81 Removed superfluous conditionals / X3.5 JLZ 20-MAY-80 REARRANGED TO SUPPORT SAVING POSITIONS FOR / ENHANCED HEADERS/FOOTERS / 2.7A-1 LDB 1/29/78 CHANGE FOR WT78 7-BIT / 2.J KEE ADD 4-FLOPPY SUPPORT 8/26/77 / SCHCNT= 774 / BYTES PER BLOCK BOFSET= 2 SCBKOF= 52 / OFFSET TO FIRST BLOCK PTR IN HEADER 1 / / / THIS ROUTINE OPENS A FILE FOR READING. IT IS CALLED WITH THE FILENAME / AS AN ARGUMENT. / RDINIT, XX / DCA T1 / SAVE THE FILE NAME TAD T1 / RECOVER IT AND P377 / GET THE FILE NUMBER DCA RDFQBK+RXQFNO / WRITE THE FILE NUMBER / TAD T1 / RECOVER THE FILE NAME BSW RTR AND (17) / GET THE DRIVE NUMBER DCA RDFQBK+RXQDRV / WRITE THE FILE NUMBER JMS RDFIO / ESTABLISH THE DENSITY /A001 RXEDN+4000 / GO DO A SET DENSITY /A001 / / THIS CALL WILL DEPOSIT THE BLOCK NUMBER OF OUR FILE'S HEADER BLOCK / INTO RDFQBK+RXQBLK / JMS RDFIO RXEGF+4000 / SMA CLA / ANEGATIVE RETURN INDICATES AN ERROR TAD RDFQBK+RXQBLK / GET THE HEADER BLOCK NUMBER JMS RDINI1 / INITITIALIZE SOME VARIABLES / JMS RDGETR / GET THE FIRST HEADER EXTENSION DCA RDHDRB+1 / SAVE ITS BLOCK NUMBER / AC0001 JMS RDGETR / GET THE SECOND HEADER EXTENSION DCA RDHDRB+2 / SAVE ITS BLOCK NUMBER TAD (1354) / GET THE PTR TO WHERE THE EXTENSIONS /A001 / ARE IN THE 2ND HEADER EXTENSION /A001 JMS RDGTHS / GO GET REAMINING HEADERS INTO MEMORY /A001 / JMP I RDINIT / AND RETURN / / THIS ROUTINE INITIALIZES A FEW VARIABLES FOR READING A FILE. IT IS CALLED / WITH THE BLOCK NUMBER OF THE FILE'S HEADER BLOCK IN THE AC, OR ZERO IF THE / HEADER BLOCK COULD NOT BE FOUND. / RDINI1, XX / DCA RDHDRB / SET HEADER BLOCK NUMBER / AC7777 DCA RDCHNO / INITIALIZE THE COUNT OF NUMBER OF CHARACTERS LEFT / IN THE BUFFER / AC7777 DCA RDPTNO / INITIALIZE THE COUNT OF NUMBER OF BLOCK NUMBERS / LEFT IN THE TABLE TAD (SCBKOF+1) / INITIALIZE THE OFFSET OF THE FIRST BLOCK NUMBER / IN THE HEADER BLOCK DCA RDPTRS / DCA RDMOD / CLEAR THE MODE VALUES (USED IN SIX BIT TRANSLATION) DCA RDMOD+1 DCA RDHDBN / SHOW BUFFER EMPTY OF HEADER BLOCK JMP I RDINI1 / AND RETURN / / / THIS ROUTINE RETURNS THE NEXT CHARACTER FROM THE FILE IN 6-BIT / RDNXC, XX / JMS RDNXCB / GET THE NEXT BYTE FROM THE FILE / TAD (-77) / IS IT AN ESCAPE? SNA JMP RDNXCX / JUMP IF SO / TAD P77 / ELSE RESTORE THE CHARACTER JMP I RDNXC / AND RETURN IT / RDNXCX, JMS RDNXCB / GET ANOTHER BYTE SMA SZA TAD P7700 / SHOW IT IS AN ESCAPE CHARACTER JMP I RDNXC / AND RETURN IT / / THIS ROUTINE RETURNS THE NEXT BYTE FROM THE FILE / RDNXCB, XX / RDNXC1, CLA ISZ RDCHNO / INCREMENT THE NEGATIVE CHARACATER COUNT JMP RDNXC3 / JUMP IF THERE ARE ANY CHARACTERS LEFT IN THE BUFFER / /D001 ISZ RDPTRS / INCREMENT THE OFFSET ISZ RDPTNO / ANY BLOCK NUMBERS LEFT? SKP / SKIP IF SOME ARE LEFT / / THERE ARE NO BLOCK NUMBERS LEFT IN THE TABLE. FILL THE TABLE BACK UP. / JMP RDFTAB / THIS RTNE FILLS THE TABLE WITH BLK NBRS/M001 / / THERE ARE NO CHARACATERS. READ THE NEXT BLOCK INTO THE BUFFER. / RDNXC5, /A001 TAD (-SCHCNT) / RESET THE CHARACTER COUNT DCA RDCHNO JMP RDFBUF / FILL THE BUFFER RDNXC4, /A001 JMP I RDNXCB / ERROR OR EOF RETURN / / NOW, READ THE NEXT BYTE FROM THE BUFFER / RDNXC3, /A001 TAD RDCHNO / GET THE CHARACTER COUNT TAD (SCHCNT) / SUBTRACT FROM THE END OF THE BUFFER JMS RDGTBY / GET THE NEXT BYTE FROM THE BUFFER RDBUF+BOFSET / SNA / IS THE VALUE A NULL? JMP RDNXC1 / JUMP TO GET A NEW ONE IF SO JMP I RDNXCB / ELSE, RETURN THE VALUE / / THIS ROUTINE FILLS THE BLOCK NUMBER TABLE WHEN IT IS EMPTY. / RDFTAB, /M001 / TAD (-RDNPTR) DCA RDPTNO / INITIALIZE COUNT OF NUMBERS IN TABLE TAD (RDPTRB-1) DCA RDLPTR / INITIALIZE POINTER INTO TABLE /D001 TAD RDPTRS / SAVE THE OFFSET TO USE BELOW /D001 DCA RDPTRS / / NOW FILL THE TABLE WITH BLOCK NUMBERS. / RDFTL1, ISZ RDLPTR / INCREMENT POINTER INTO THE TABLE JMS CK3HDR / GO CHECK TO SEE IF THE 3RD HEADER EXT BLCKS /A001 / DCA RDPTRS / STORE POINTER FOR UPDATE /A001 TAD RDPTRS / GET THE NEXT OFFSET JMS RDGETR / GET NEXT BLOCK NUMBER SZA ISZ RDPTRS / DON'T INCREMENT THE OFFSET IF THERE'RE NO MORE/M001 / BLOCK NUMBERS DCA I RDLPTR / STORE THE BLOCK NUMBER IN THE TABLE ISZ RDPTNO / IS THERE STILL ROOM IN THE TABLE? JMP RDFTL1 / CONTINUE LOOP IF THERE IS / RDFTL2, TAD (-RDNPTR) / RESET TABLE COUNT DCA RDPTNO / DCA RDHDBN / SHOW THE BUFFER CONTAINS NO HEADER BLOCK / TAD (RDPTRB-1) / GET ONE BEFORE THE BEGINNING OF THE TABLE DCA RDLPTR / INITIALIZE THE POINTER INTO THE BLOCK NUMBER TABLE / JMP RDNXC5 / AND RETURN /M001 / / / THIS ROUTINE READS THE NEXT BLOCK INTO THE TABLE / RDFBUF, /M001 / ISZ RDLPTR / INCREMENT THE POINTER INTO TABLE TAD I RDLPTR / RECOVER THE NEXT BLOCK NUMBER SNA / IS THERE ANOTHER BLOCK NUMBER? JMP RDFBL1 / JUMP IF THERE ARE NO MORE / JMS RDFIO / READ THE NEXT BLOCK RXERD+4000 SPA CLA / WAS THERE AN ERROR? JMP RDFBL2 / JUMP IF SO /D001 ISZ RDFBUF JMP RDNXC3 / AND RETURN /M001 / / WE HAVE REACHED THE END OF THE FILE. / RDFBL1, DCA RDCHNO / CLEAR THE CHARACTER COUNT TO SIGNAL EOF JMP RDNXC4 / AND RETURN /M001 / / THERE WAS AN ERROR READING A BLOCK. / RDFBL2, JMS RDINI1 / REINITIALIZE TO PREVENT READS AC7777 / RETURN AN ERROR FLAG JMP RDNXC4 /M001 RDLPTR, 0 / POINTER INTO THE BLOCK NUMBER TABLE RDPTNO, 0 / COUNT OF TABLE ENTRIES / / THE FOUR VARIABLE LOCATIONS WHICH FOLLOW MUST REMAIN IN THIS ORIENTATION / SINCE THEY ARE SAVED AND RESTORED BY THE PRINTER TO IMPLEMENT ENHANCED / HEADERS AND FOOTERS. / / ********************************************************************* / FSSAV, RDPTRS, 0 / OFFSET INTO THE HEADER BLOCK OF NEXT BLOCK NUMBER RDMOD, 0 / MODES FOR DECODING 6-BIT 0 RDCHNO, 0 / BUFFER CHARACTER COUNT / / *********************************************************************** / PAGE / / THIS ROUTINE READS THE NEXT CHARACTER FROM THE FILE AND RETURNS IT IN / SEVEN BIT ASCII. / RDNXCH, XX / / IF THE CHARACTER COUNT IS CLEARED, THE EOF HAS BEEN REACHED. / TAD RDCHNO / IS THE COUNT CLEAR? SMA CLA JMP I RDNXCH / YES--RETURN IMMEDIATELY / RDNXH1, JMS RDNXC / ++++ SNA / ++++ JMP I RDNXCH / RETURN IF NONE JMS XLTASC JMS GETMOD / ++++ RDMOD SNA / ++++ JMP RDNXH1 / DON'T RETURN NULLS JMP I RDNXCH / RDGTBY, XX CLL RAR TAD I RDGTBY DCA GETBY1 ISZ RDGTBY TAD I GETBY1 SNL / ++++ BSW AND P77 JMP I RDGTBY GETBY1=T1 / RDFIO, XX DCA RDFQBK+RXQBLK / STORE BLOCK NUMBER TAD I RDFIO / ++++ DCA RDFQBK+RXQFNC / AND FUNCTION CODE ISZ RDFIO RIF TAD CDF0 / MAKE CDF INSTRUCTION DCA RDFQBK+RXQBFD CIFSYS / ++++ ENQUE / ++++ RDFQB / QUEUE TO HANDLER RDFIO1, CIFSYS / ++++ JWAIT / WAIT TIL DONE TAD RDFQBK+RXQCOD / DONE YET? SNA / ++++ JMP RDFIO1 / LOOP IF NOT JMP I RDFIO / ELSE RETURN STATUS / RDFQB, DSKQUE / ++++ 0 / ++++ 0 / QUEUE HEADER RDFQBK, 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ 0 / ++++ RDBUF / ++++ 0 / ++++ 0 / ++++ 0 / / / RDFIL HEADER CONTROL BLOCK / RDBFCB, RDBUF / BUFFER ADDRESS RDHDBN, 0 / POINTER TO CURRENT HEADER BLOCK NUMBER RDHDRB, 0 / ++++ 0 0 0 / ++++ 0 / ++++ 0 / HEADER BLOCK NUMBERS ENDED BY ZERO / / THIS ROUTINE RETURNS THE BLOCK NUMBER ADDRESSED BY THE OFFSET WHICH IS / IN THE AC UPON CALL. / RDGETR, XX / DCA .+2 / SAVE THE OFFSET IN THE CALL BELOW / RDGETA, JMS SCOFST / THIS ROUTINE RETURNS THE ADDRESS IN THE BUFFER OF / THE DESIRED OFFSET IN A SKIP RETURN. IF THE / RIGHT HEADER BLOCK IS NOT IN THE BUFFER, IT MAKES / ANORMAL RETURN, BUT HAS SET RDHDBN TO THE ADDRESS / OF THE PROPER HEADER BLOCK NUMBER. 0 / THE DESIRED OFFSET RDBFCB / THE HEADER CONTROL BLOCK / JMP RDGTXR / NORMAL RETURN MADE--JUMP TO HANDLE IT / DCA T1 / SAVE THE BLOCK NUMBER ADDRESS TO INDIRECT THROUGH TAD I T1 / GET THE BLOCK NUMBER JMP I RDGETR / RETURN IT / / WE MUST LOAD THE HEADER BLOCK INTO THE BUFFER AND TRY AGAIN / RDGTXR, TAD I RDHDBN / GET THE BLOCK NUMBER OF THE HEADER BLOCK SNA JMP RDGTXZ / JUMP IF NO HEADER BLOCK WAS SPECIFIED / JMS RDFIO / READ THE HEADER BLOCK RXERD+4000 / SMA CLA / WAS THERE AN ERROR IN READING? JMP RDGETA / NO--LOOP TO GET THE BLOCK NUMBER DCA I RDHDBN / YES--CLEAR THE BLOCK NUMBER OF THE HEADER BLOCK / RDGTXZ, DCA RDHDBN / CLEAR TO INDICATE NO HEADER BLOCK IS IN THE BUFFER JMP I RDGETR / AND RETURN / SCOFST, XX CLA / ++++ DCA SCOFS1 / INIT REL BLK # TAD I SCOFST TAD (-376) / COMPUTE REL BLK # ISZ SCOFS1 SMA / ++++ JMP .-3 DCA SCOFS2 / SAVE OFFSET-400 ISZ SCOFST TAD I SCOFST / BUFCB PTR DCA SCOFS3 AC0001 / ++++ TAD SCOFS3 / CUR BLK PTR PTR DCA SCOFS4 ISZ SCOFST TAD I SCOFS4 SNA / ++++ JMP SCOFSA / READ IF CURR BLK 0 CIA / ELSE COMPARE WITH NEEDED PTR TAD SCOFS1 / ++++ TAD SCOFS4 SNA CLA / ++++ JMP SCOFSB / JUMP IF SAME SCOFSA, TAD SCOFS1 / ++++ TAD SCOFS4 / SET NEW BLK PTR DCA I SCOFS4 JMP I SCOFST / RETURN FOR READ SCOFSB, TAD SCOFS2 / ++++ TAD (400) / WORD OFFSET TAD I SCOFS3 / +BUFFER PTR ISZ SCOFST / BUMP FOR NORMAL RETURN JMP I SCOFST / RETURN WORD PTR / SCOFS1, .-. SCOFS2, .-. SCOFS3, .-. SCOFS4, .-. / PAGE / NOTE: THIS CONSTANT (1355) IS USED ONCE DURING OPEN, THEN OVERLAID XLTASC, / XLAT 6-BIT TO ASCII XX / 1-73: NORMAL / 74: SHIFT / 76: UNSHIFT / 7702-7777: ESCAPE / / OUTPUT: / / -(1-6): MODE CHANGE (L=1 IF ON) / 0-200: ASCII CHAR (L=1 IF ALPHA) / SPA SNA / ++++ JMP XLTAS1 / ESCAPE TAD (-74) / ++++ SMA / ++++ JMP XLTAS2 / SHIFT-UNSHIFT TAD (74-41) XLTAS4, CLL CML / SET LINK FOR ALPHA TAD (41+37) / CLEAR LINK IF NOT ALPHA JMP I XLTASC XLTAS1, TAD (100-MAXESC) / ++++ SMA / ++++ CLA / CHECK FOR OK TAD (MAXESC+ESCTAB) / ++++ DCA T1 TAD I T1 / ++++ SPA / ++++ JMP XLTAS3 TAD (-100) / ADJUST FOR ALPHA TEST JMP XLTAS4 / XLTAS2, SNA CLA / ++++ IAC CMA XLTAS3, CLL CML RAR JMP I XLTASC / ESCTAB, 0 / ++++ 0 -3 / ++++ -4 / ++++ -5 / ++++ -6 / ++++ 11 / ++++ 10 / ++++ 15 -13 / ++++ -14 / ++++ 12 / ++++ 14 / ++++ -7 / ++++ -10 -11 / ++++ -12 / ++++ 0 133 / ++++ 134 / ++++ 135 / ++++ 136 / ++++ 137 0 / NORMALLY 7 FOR NEED-WRAP CODE 16 / ++++ 17 MAXESC=.-ESCTAB -16 / ERROR / NOTE: THIS CONSATNT (RDHDRB+2) IS USED ONCE, THEN OVERLAID GETMOD, / XLAT ESCAPES, ADD MODES TO ASCII XX MQL TAD I GETMOD / ++++ DCA T1 / ++++ ISZ GETMOD MQA SMA SZA / ++++ JMP GETMD1 / NORMAL ASCII SNA / ++++ JMP I GETMOD IAC SNA / ++++ ISZ T1 / ADJUST T1 IF SHIFT-UNSHIFT CHANGE TAD (MODTAB) / ++++ DCA T2 / GET PTR TAD I T2 SPA / ++++ JMP I GETMOD / RETURN QUICK IF ERROR CMA AND I T1 SNL / ++++ TAD I T2 DCA I T1 / SET NEW MODE JMP I GETMOD GETMD1, TAD I T1 / ADD MODE FLAGS ISZ T1 SZL / ++++ TAD I T1 / AND UNSHIFT JMP I GETMOD / -1 / ERROR 2000 1400 1000 400 200 MODTAB=. 40 / RDNPTR=10 RDPTRB, ZBLOCK RDNPTR /*********************************************************************** / /A001 / THIS ROUTINE WILL COPY IN TO MEMORY THE TWO ADDITIONAL /A001 / HEADER BLOCK NUMBERS FOR DOUBLE DENSITY DISKETTES. /A001 / /A001 /***********************************************************************/A001 RDGTHS, / GETS HEADER EXTENSIONS 3 AND 4 INTO MEMORY /A001 XX /A001 DCA RDTMP1 / GET POINTER TO WHERE THE BLOCK NBRS ARE/M002 TAD (RDHDRB+2) / GET THE TARGET AREA ADDRESS /A001 DCA X1 / STORE IT FOR AUTOINDEXING /A001 TAD RDTMP1 / GET POINTER TO HEADER EXTENSIONS /M002 JMS RDGETR / GO GET THE EXTENSION /A001 DCA I X1 / PUT IT INTO BLOCK LIST /A001 ISZ RDTMP1 / BUMP UP THE POINTER TO NEXT EXTENSION /M002 TAD RDTMP1 / GET IT /M002 JMS RDGETR / GO GET 4TH EXTENSION /A001 DCA I X1 / PUT IT INTO RDFIL BLOCK CONTROL AREA /A001 JMP I RDGTHS / RETURN /A001 /******************************************************************** /A001 / /A001 / THIS ROUTINE WILL CHECK TO SEE IF THE POINTER IS POINTING TO /A001 / THE AREA ON THE 2ND HEADER EXTENSION WHERE THE ADDITIONAL /A001 / HEADER BLOCK EXTENSION BLOCK NUMBERS ARE. IF THE POINTER IS /A001 / POINTING THERE, IT WILL BUMP UP THE POINTER SO THAT IT WILL BE /A001 / POINTING TO THE NEXT DOCUMENT TEXT BLOCK NUMBER, SO THAT WE /A001 / WON'T BE TRYING TO PRINT HEADER EXTENSION BLOCK NUMBERS AS /A001 / TEXT BLOCKS. /A001 / /A001 /***********************************************************************/A001 RDTMP1, /A002 CK3HDR, / CHECK FOR THIRD HEADER, AND BUMP PAST HDR EXTENSIONS /A001 XX /A001 TAD RDPTRS / GET HEADER WORD POINTER /A001 TAD (-1354) / GET NEG OF POINTER WHERE EXT ARE /A001 SNA / ARE THEY EQUAL? /A001 TAD (16) / BUMP PAST THE HEADER EXT BLOCK NBRS /A001 TAD (1354) / ADD BACK 1354, WHERE HEADERS ARE /A001 JMP I CK3HDR / RETURN /A001 / PAGE / RDBUF, ZBLOCK 400 / READ BUFFER