EJECT OS8IO FROM SUPPORT IFNDEF OS8LIS IFZERO OS8LIS DCB=7760 /DEVICE CONTROL TABLE FIELD 1 *ORIGIN INFLD=INCTL&70 /INPUT BUFFER FIELD OUFLD=OUCTL&70 /OUTPUT BUFFER FIELD IN7400,7400 IOPEN, 0 /INITIALIZE INPUT CLA CMA DCA INCHCT /SET TO READ FROM NEW DEVICE. ISZ INEOF /FORCE A NEW INPUT FILE. TAD (7617 /POINT TO CD INPUT LIST. DCA INFPTR JMP I IOPEN INEOF, 0 INFPTR, 0 INPTR, 0 ICHAR, 0 /INPUT A CHARACTER. IN7600, 7600 RDF /SAVE CALLING FIELD FOR RETURN TAD INCDIF DCA INRTRN INCHAR, CDF INFLD /DATA FIELD TO FIELD OF BUFFER ISZ INJMP /3 - WAY UNPACKING SWITCH ISZ INCHCT /INPUT BUFFER EXHAUSTED? INJMPP, JMP INJMP /NO..UNPACK THE NEXT CHAR. TAD INEOF /DID LAST READ GIVE EOF ON THIS DEVICE? SNA CLA JMP INGBUF /NO. CONTINUE READING. GETNEW, JMS INNEWF /YES.. GET NEXT INPUT IF IT EXISTS. JMP EOFERR /TAKE EOF EXIT FROM ICHAR. INGBUF, TAD INCTR /INCTR HOLDS THE CURRENT LENGTH OF /THE INPUT FILE. WHEN THE AMOUNT REMAINING /TO READ IS LESS THAN THE SIZE oF THe /IN M SN WNI FEE/ .SYE .NTGTE N XTPIF UT IX ITIE SSJ . M PO RFE REA/ KTFEEX O IEOFTIMRAC RHN .UGI FBDT, AI TN RCN/ RCIO T/AND SIGNAL EOF FOR NEXT READ. CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THIS RTR /READ FROM THE OVERFLOW, IF ANY, RTR /AND THE STANDARD CONTROL WORD. TAD (INCTL+1 DCA INCTLW INCDIF, CIF CDF 0 /NOW DO A CALL TO THE INPUT HANDLER CDF 10 /WE ARE IN FILED 1, HANDLER IN FIELD 0 JMS I INHNDL INCTLW, 0 /INPUT CONTROL WORD INBUFP, INBUF /INPUT BUFFER ADDRESS INREC, 0 /POINTER TO INPUT RECORD JMP INERRX INBREC, TAD INREC TAD (INRECS /UPDATE POINTER INTO FILE DCA INREC TAD INCTLW /NOW COMPUTE THE NUMBER OF CHARACTERS AND IN7600 /IN THIS INPUT BUFFER CLL RAL TAD INCTLW AND IN7600 CMA DCA INCHCT /NEW NUMBER OF CHARACTERS. TAD INJMPP /RESET 3 WAY SWITCH DCA INJMP TAD INBUFP DCA INPTR /AND BUFFER POINTER JMP INCHAR /NOW READ THE BUFFER INERRX, ISZ INEOF /SET EOF JUST IN CASE SMA CLA /IF <0, A PHYSICAL ERROR JMP INBREC /EOF ON INPUT INERR, CLA CLL CML RAR /FATAL EOFERR, JMP INRTRN /GET OUT INJMP, HLT /3 WAY UNPACK SWITCH JMP ICHAR1 /GET 1ST OF 3 JMP ICHAR2 /SECOND ICHAR3, TAD INJMPP DCA INJMP /SET FOR FIRST CHAR. NEXT TAD I INPTR /THE THIRD WORD IS MADE OF THE HIGH IN200, AND IN7400 /ORDER FOUR BITS OF THE FIRST CLL RTR /TWO. RTR TAD INCTLW RTR RTR ISZ INPTR /POINTER TO NEXT WORD JMP INCOMN /GET OUT WITH CHAR IN AC ICHAR2, TAD I INPTR AND IN7400 /SAVE HIGH ORDER FOR THIRD WORD DCA INCTLW ISZ INPTR ICHAR1, TAD I INPTR INCOMN, AND (377 TAD (-232 /IS IT A CONTROL/Z (EOF)? SNA JMP GETNEW /YES..LOOK AT NEXT INPUT TAD (232 ISZ ICHAR /TAKE NORMAL RETURN INRTRN, 0 /CIF CDF N. JMP I ICHAR INNEWF, -1 INCHCT=INNEWF CDF 10 TAD (INDEVH+1 /INITIALIZE IN CASE WE NEED A NEW DCA INHNDL /MORE INPUT? TAD I INFPTR SNA JMP I INNEWF /NOPE JMS I IN200 /CALL MONITOR TO GET HANDLER 1 INHNDL, 0 HLT /VERY BAD! TAD I INFPTR AND (7760 /GET INPUT FILE LENGTH SZA TAD (17 CLL CML RTR RTR /NEGATIVE OF FILE LENGTH DCA INCTR ISZ INFPTR /POINT TO STARTING BLOCK TAD I INFPTR DCA INREC /STORE IN HANDLER CALL ISZ INFPTR /NEXT INPUT. DCA INEOF /CLEAR EOF FLAG. ISZ INNEWF JMP I INNEWF INCTR=IOPEN PAGE OOPEN, 0 /OPEN OUTPUT FILE OU7600, 7600 TAD OU7601 /POINT TO OUTPUT FILE NAME IN CD DCA OUBLK /AREA TAD (OUDEVH+1 DCA OUHNDL /INITIALIZE OUTPUT DEVICE HANDLER TAD I OU7600 /PICK UP OUTPUT DEVICE NUMBER AND (17 SNA /IS THERE ONE? JMP ONOFIL /NO..INHIBIT OUTPUT JMS I (200 /FETCH OUTPUT HANDLER 1 OUHNDL, 0 HLT /BAD THING OUENTR, TAD I OU7600 JMS I (200 /ENTER THE OUTPUT FILE 3 OUBLK, 7601 /GETS STARTING BLOCK OF HOLE OUELEN, 0 /GETS SIZE OF HOLE AVAILABLE JMP OEFAIL /FAILURE. SEE WHAT WE DID. DCA OUCCNT /CLEAR CLOSING LENGTH DCA I (OUTINH /CLEAR OUTPUT INHIBIT JMS I (OUSETP /SET UP POINTERS ISZ OOPEN OORETN, CDF CIF 10 JMP I OOPEN /RGTWRN O.K. OEFAIL- tAF I! !Ow?>08 ]?MEBL LPJ MFO LAE/ IIF RLA EUES.H E AW WTDDE .IC ADU NCO TCL/ RECL AIOC NSNLGHGE TAD C( ITO HIU/ NEC ALTORTPUN UBHI IIJ T OU7600 AND (17 /MAKE IT 0 DCA I OU7600 JMP OUENTR /AND TRY AGAIN ONTERR, CLA CLL CML RAR JMP OORETN ONOFIL, ISZ I (OUTINH /INHIBIT OUTPUT JMP OORETN OUTDMP, 0 /DUMP OUTPUT BUFFER DCA OUCTLW /STORE CONTROL WORD CDF 10 TAD I (OUTINH /IS OUTPUT INHIBITED? SZA CLA JMP OUNOWR /VEP. TAD OUCCNT /IF THIS IS FIRST WRITE, START THE SNA /SEARCH FORWARD ON DECTAPE ISZ OUCTLW TAD OUBLK /GET STARTING BLOCK OF THIS DCA OUREC /TRANSFER TAD OUCTLW CLL RTL RTL RTL /COMPUTE # OF RECORDS TO OUTPUT AND (17 TAD OUCCNT /UPDATE CLOSING LENGTH DCA OUCCNT TAD OUCCNT /SEE IF CLOSING LENGTH WILL BE CLL CML /BIGGER THAN OUTPUT HOLE TAD OUELEN SNL SZA CLA JMP I OUTDMP /WILL BE TOO BIG OUCDIF, CIF CDF 0 CDF 10 JMS I OUHNDL /DO THE WRITE OUCTLW, 0 OUBUF OUREC, 0 SKP /ERROR OUNOWR, ISZ OUTDMP /TAKE NORMAL RETURN JMP I OUTDMP PTP=0020 OCLOSE, 0 /CLOSE OUTPUT FILE CDF 10 TAD I (OUTINH /IF OUTPUT INHIBITED, CLOSE IS A NOP. SZA CLA JMP OCISZ /A NOP JMS I (OTYPE /DETERMINE IF OUTPUT IS TO PTP AND (770 /IF IT IS, DO NOT OUTPUT A CONTROL/Z. TAD (-PTP SZA CLA TAD (232 /NOT PTP,OUTPUT CONTROL/Z AS EOF JMS I (OCHAR JMP OCRET /ERROR RETURN JMS I (OCHAR /FILL WITH 0 CHARACTERS JMP OCRET FILLIP, JMS I (OCHAR /FILL TO BOUNDARY WITH 0 JMP OCRET JMS I (OTYPE /IF OUTPUT IS DIRECTORY DEVICE, FILL SPA CLA /WHOLE RECORD, ELSE HALF RECORD TAD (100 TAD (77 AND I (OUDWCT /ARE WE UP TO BOUNDARY YET? SZA CLA JMP FILLIP /NO TAD I (OUDWCT TAD (OUCTL&3700 /IS THERE A FULL WRITE LEFT? SNA JMP NODUMP /YES, BUT DO NOT DO IT, AS CONTROL/Z IS OUT. TAD (4000+OUFLD JMS OUTDMP /DUMP LAST BUFFER JMP OCRET NODUMP, TAD I OU7600 /GET DEVICE NUMBER JMS I (200 /CLOSE THE OUTPUT FILE 4 OU7601, 7601 /POINTER TO FILE NAME OUCCNT, 0 /CLOSING FILE LENGTH HERE SKP /ERROR OCISZ, ISZ OCLOSE /NORMAL RETURN OCRET, CDF CIF 10 /RESTORE CALLING FIELDS JMP I OCLOSE PAGE OUSETP, 0 /INITIALIZE OUTPUT POINTERS TAD (OUCTL&3700 CIA DCA OUDWCT /DOUBLE WORD OUTPUT COUNT TAD (OUBUF /INITIALIZE WORD POINTER DCA OUPTR TAD OUJMPE DCA OUJMP /3 WAY UNPACK SWITCH JMP I OUSETP OCHAR, 0 /OUTPUT CHARACTER ROUTINE AND (377 /ISOLATE EIGHT BITS DCA OUTEMP RDF /GET FIELD WE WERE CALLED TAD (CIF CDF 0 /FROM DCA OUCRET TAD OUTINH /OUTPUT INHIBITED? SZA CLA JMP OUCOMN /YES. NOP. OUCHAR, CDF OUFLD /GO TO DATA FIELD OF BUFFER ISZ OUJMP /BUMP CHARACTER SWITCH OUJMP, HLT /GETS JMP.,JMP.+1,ETC. JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OUTEMP /THIRD CHAR CLL RTL /HIGH ORDER BITS GO INTO THE RTL /HIGH ORDER 4 BITS OF THE AND (7400 /FIRST OF TWO WORDS TAD I OUPOLD DCA I OUPOLD TAD OUTEMP /THE SECOND DOUBLE WORD GETS CLL RTR /THE LOW ORDE BITS OF RTR /THE THIRD CHAR RAR AND (7400 TAD I OUPVR DCE I ` OUpvR  taD(("`!OwjM\O TB OSETF HDA 7 N04( 0I/ TRFF SW OWOTDO SRA IDT PO DOU LAD CO IOU LPT D A DU MTO PEH/ SETOE NCUDDEBOO L RWTGD SE /3 CHARS. JMP OUCOMN /GET OUT TAD (OUCTL /READY TO OUTPUT A BUFFER JMS I (OUTDMP /OUTPUT IT JMP OUCRET /AN ERROR JMS OUSETP /RESET OUTPUT POINTERS JMP OUCOMN OCHAR2, TAD OUPTR /POINT TO FIRST DOUBLE WORD DCA OUPOLD ISZ OUPTR /POINT OUTPUT TO SECOND OCHAR1, TAD OUTEMP DCA I OUPTR OUCOMN, ISZ OCHAR /NORMAL EXIT OUCRET, HLT JMP I OCHAR OUTEMP, 0 OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTINH, 0 OTYPE, 0 /OTYPE LOOKS AT THE OUTPUT DEVICE #, RDF TAD (CIF CDF 0 DCA OTRTN CDF 10 TAD I (7600 /AND LOOKS UP THE DCB WORD FOR AND (17 /THAT DEVICE. TAD (DCB-1 DCA OUTEMP TAD I OUTEMP /GET DCB ENTRY OTRTN, HLT JMP I OTYPE IFZERO OS8LIS