*20 PMODE EJECT / / / / THIS IS THE SECOND PART OF PIP. IT S CALLED P I P 2. / / / / / / / / / / / / / / / / / / / / / / / / EJECT *1400 / GENERAL MASS STORAGE I/O ROUTINES. / / / / / CALLING SEQUENCE: / / / READ (OR WRITE) / UNIT NUMBER / FIRST CORE LOCATION OF TRANSFER / NUMBER OF BLOCKS TO BE TRANSFERRED. / FIRST BLOCK OF TRANSFER. / / / ROUTINE HAS THE ABILITY TO GO INTO EXTENED CORE. / IF HIS NUMBER OF BLOCKS MAKES THE LOCATION COUNTER "WRAP AROUND". / / / / / TREAD, 0 /MAIN READ ROUTINE JMS TWHERE /GET CORRECT MASS DEVICE TAPER /00-07 = TAPE READ ASMIFN RF08 /DO WE WANT THE RF08 ROUTINES ASSEMBLED? ASMSKP 4 /YEP BYPASS NON-UNIT ASSIGNMENTS. NOSUCH NOSUCH NOSUCH NOSUCH /UNITS 10-47 NOT PRESENT / ASMIFZ RF08 /ARE THEY NOT THERE? ASMSKP 4 /NOT THERE. DO NOT ASSEMBLE IN POINTERS. RF08R RF08R RF08R RF08R /UNITS 0-47 INCASE OF RK08S / NOSUCH /UNITS 50-77 FREE FOR NOW. NOSUCH NOSUCH / / / / TWRITE, 0 /MAIN WRITEE. JMS TWHERE /GET COORRECT MASS STORAGE DEVICE. TAPEW /FIRST IS LINC TAPE. ASMIFZ RF08 /DISK DESIRED? ASMSKP 4 /NOPE. BYPASS POIITERS RF08W /UNITS 10-47 ARE DISK UNITS NOW. RF08W RF08W RF08W / ASMIFN RF08 /TEST AGAIN. ASMSKP 4 /SKIP NOSUCH UNITS IF DISK DESIRED. NOSUCH /UNITS 10-17 NOT YET ASSIGNED. NOSUCH /UNITS 20-77 FREE FOR NOW. NOSUCH NOSUCH / NOSUCH /UNITS 50-77 FREE FOR NOW. NOSUCH NOSUCH / / / / / TWHERE, 0 /GETS CORRECT MASS STORAGE DEVICE. MTWO /-2 TAD TWHERE /GET CALLING. DCA TEMP /GET ORIGINAL CALLING. TAD I TEMP DCA TEMP /GET USER CALLING. / / ASMIFZ RF08 /DISK ASMSKP 6 /NOPE / TAD I TEMP /GET USERS UNIT. TAD RK70 /SUBTRACT ONE FROM THE DRIVE NUMBER AND L30 /CHOP OFF RANDOM CRAP. CLL RTR /SHIFT TO CONTROLLER BITS 9-10 DCA RKDRIV /SAVE AWAY / / TAD I TEMP /GET THE USERS UNIT AGAIN. RTR RAR /GET BITS 6-8 AND L7 TAD TWHERE /GET START OF LIST. DCA TWHERE /AND STORE AWAY. TAD I TWHERE /GET CALLING ADDRESS. DCA TWHERE /AND STASH AWAY. TAD TEMP /GET USERS CALLING ADDRESS. DCA I TWHERE /AND SET UP PHONNEY CALL. ISZ TWHERE /GO TO SECOND LOC. JMP I TWHERE /PHONNEY CALL ALL DONE. / / / / TAPER, 0 /MAIN LINC TAPE READ ROUTINE. TAD TREAD /GET READ ADDRESS. DCA TWRITE /AND SAVE FOR READ. TAD TERENT /SET TO RETRY READ IF ERROR DCA I TEERNT /SAVE IN RETRY LOCATION DCA I TTSKP /DO A CHECK OF CHECKSUM. JMS I TTBLAH /GO PERFORM FOLLOWING OPERATION. LMODE /NEXT INSTRUCTION IS EXECUTED BY TBLAH IN LMODE RDE I /READ AND LEAVE GOING. PMODE /JUST FOR ASSEMBLER. JMP TEXIT /AND EXIT / / TAPEW, 0 /GENERAL LINC TAPE WRITE ROUTINE. TAD TTTSKP /SET UP TO IGNORE BAD CHECKSUM. DCA I TTSKP /AND STASH AWAY. TAD TTAPEW /FOR WRITE ERROR REWRITE ENTIRE BLOCK DCA I TEERNT JMS I TTBLAH /DO WRITE NOW. LMODE WRI I PMODE /BACK INTO PMODE DCA I TTSKP /SET TO CHECK CHECKSUM. JMS I TTBLAH /NOW DO CHECK OF WHAT WE JUST WROTE. LMODE CHK I PMODE / TEXIT, PFOUR /GENERAL EXIT. TAD TWRITE /GET WRITE DCA TWRITE /GO PAST ARGUEMENTS. JMP I TWRITE /PAST ARGUEMENTS. / / ASET, 0 /INITIALIZES ARGUEMENT GETTER FOR AMSS STORAGE DEVICES. MONE TAD TWRITE /FIRST AGR. DCA AUTO8 /ARG REGISTER. JMP I ASET /EXIT / / / / / / / TTSKP, TSKP /CHECKSUM SKIP TTTSKP, SKP /INSTRUCTION TO IGNORE CHECKSUM TTBLAH, TBLAH /POINTER TO I/O DOER TERENT, TREENT /RETRY LOCATION TEERNT, TTRENT /RETRY SWITCH TTAPEW, TWRITE+1 /RETRY ENTRIE WRITE ON ERROR / / / / / FFILEC, MONE /COPIES A NAMED FILE TO ANOTHER NAMED FILE. DCA OUTNUM /ZET COUNTER TO 1 PTWO /SET UP SECOND DIRECTORY LOOKUP DCA FWHAT /IT S AN OUTPUT FILE TAD I FFTEMP /GET THE ORIGINAL SIZE DCA FSIZE /PLACE IN THE SIZE NOW. DIRECT /NOW ALLOCATE SPACE. TAD FUNIT /GET THE NEW OUTPUT UNIT DCA OUTUNIT /AND SET UP OUTPUT UNIT TAD FBNUM /GET OUTPUT BLOCK DCA OUTBLOCK /AND SET UP. HPOP /POP IN UPPER SAVED FBLOCK TAD FUNIT /SAVE THE INPUT UNIT DCA INUNIT TAD FBNUM /GET THE INPUT STARTING BLOCK DCA INBLOCK /AND SET UP COPY /NOW COPY THE FILE PIP /AND RETURN TO PIP. / / / FFTEMP, HHTEMP / / / / / / / / / / / / / / RFDISK, 0 TAD FUNIT /GET THE USERS UNIT DCA TREAD /AND SAVE FOR A SECOND TAPE /DO THE NECESSARY STUFF. TAD TREAD /REGET THE USERS UNIT AND RK70 /JUST MAJOR DEVICE BITS. SNA /ZERO? TAD L10 /YEP. ADD IN 10 TO FORCE CONTROLLER SHIFT. TAD RK70 /THIS IS TO FORCE BETWEEN 10-37 AND RK70 TAD L10 TAD FUNIT DCA FUNIT /FUNIT IS ALL SET NOW. JMP I RFDISK / / / RK70, 70 / / / / / / / / / / / / / / / ASMIFZ RF08 /RF08 DESIRED? ASMSKP 4 /NO. DON T PUT MESSAGE HERE. / TMESS2, TEXT "FLINC TAPE FCHECKSUM ERROR " /TAPE ERROR MESSAGE HERE TO LEAVE ROOM LATTER ON. / / / / / / / / EJECT *1600 / / / MAIN GENERAL TAPE I/O LOOP. / / / TBLAH, 0 /PERFORMS A FUNCTION, THEN EXITS. SETA /SET UP ARGUEMENT GETTER. GETA /GET UNIT NUMBER CLL RAR /MOVE INTO CORRECT PLACE TAD L30 /SET UP EXTENED UNITS BITS. DCA TAXO /AND STORE AWAY. NO-PAUSE AND EXTENEDED ADDRESSING ALSO SET. CLA RTL /NOW MOVE BACK TO BIT 8 RTL TAD I TBLAH /ADD IN DESIRED FUNCTION. DCA TOPR /AND STORE AWAY TO BE EXECUTED. TAD TOPR /GET THE OPERATION AGAIN. DCA TSTOPR /SET UP SELECT-WRITE LOCK CHECK. ISZ TBLAH /SKIP PAST CRAP. GETA /GET STARTING ADDRESS. DCA TLOC1 /AND STORE AWAY. GETA /GET WORD COUNT. SNA /IS IT ZERO? JMP I TBLAH /YEP. EXIT. CIA /NOPE. COMPLEMETN IT. DCA TCOUNT /STASH AWAY. GETA /GET BLOCK NUMBER IAC /FOR UPCOMING SUBRACTION ERROR. DCA TBLOCK /AND OPLACE IN FIRST BLOCK. / / / TREENT, MONE /TO RETRY SAME BLCOK AFTER ERROR. TAD TBLOCK /RESET BLOCK NUMBER TO CORRECT ONE. DCA TBLOCK TAD TLOC1 /GET THE FIRST LOC SZA /IT S ZERO. CORRECT FOR FIELD CHANGE JMP TDOWN /NOT ZERO OK. TAD L7000 /BOP DOWN FIELD. TAD TAXO /IN EXTENDED REGISTER DCA TAXO ASMIFZ RF08 /DISK ROUTINES THERE. ASMSKP 4 /NO. DO NOT ASSEMBLE IN CODE TO PROTECT 7400-7777 OF FIELD 0. TAD TAXO /REGET THE NEXT AXO REGISTER. AND L7000 SNA CLA /ARE WE CROSSING BOUNDARY TO LOWER CORE? TAD M400 /YES. BOP DOWN BY AN EXTRA 400 SO WE DON T BASH DATA BREAK /AND THE READ ROUTINES THERE. / TDOWN, TAD M400 /400= LENGTH OF 1 RECORD. DCA TLOC1 /LOC ALL SET TO GO. / TRENT2, TAD M215 /ENTERS HERE IF A SKIP OVER RECORD. M215=LENGTH OF TAPE+10 SECONDS. DCA TERRC2 /SET UP WAIT COUNT. TAD L5000 /SET MAINANCE MODE 6151 /FOR TESING WHETHER OR NOT UNIT OK / / / TLOOP, PONE /MAIN LOOP TO DO NEXT RECORD. IS THIS LAST RECORD? TAD TCOUNT /GET THE NUMBER OF RECORDS TO GO SZA CLA JMP .+4 /NO. STILL MORE TO GO. TAD TOPR /LAST ONE. TURN OFF MOTION BIT. AND L7757 DCA TOPR ASMIFZ RF08 /RF08 DEISRED? ASMSKP 14 /NOPE. DON T ASSEMBLE IN CODE TO PROTECT 7400. TAD TLOC1 /GET THE LAST LOCATION. TAD L400 TAD L400 /SEE IF NEXT IS GOING TO READ INTO 7400. SZA CLA /?? JMP TLP1 /NO. IT ISN T. TAD TAXO /GET THE TAXO TO SEE IF AND L7000 /IT S 7400 OF FIELD 0 SZA CLA JMP TLP1 /NOT FIELD 0 TAD L400 /WE RE GOING TO BASH 7400, SO SKIP PAST IT. TAD TLOC1 DCA TLOC1 / TLP1, CLA CLL /LINC MUST BE CLEAR TAD L400 /BOP UP LOCATION TAD TLOC1 DCA TLOC1 LINC /GO OVER INTO LMODE LMODE ROR I 3 /MOVE OVERFLOW BIT INTO CORRECT TAPE POSITION. ADM I /UPDATE TAXO AND AXO ALL AT ONCE. TAXO, 0 AXO /SEND TO CONTROLER CLR /CLEAR AC FOR TEST TO FOLLOW DUMMY OPERTION. TSTOPR, 0 /PERFORM USERS OPERATION ONCE. BLOCK NUMBER=0 INSURES SUCCESS. 0000 /BECAUSE BLOCK NUMBER IS ADDED TO SPECIAL REGISTER WHICH IS READ IN. IOB /DO 8 IOT TO GET SPECIAL REGISTER. 6154 /IF TAPE OK(SELECT AND WRITE-LOCK OFKAY STC TEMP4 /THEN BIT10=1; NOW DO REAL USER OPERATION. LDA I /GET ADDRESS TLOC1, 0 TMA /AND SEND IT TO CONTROLLER TOPR, 0 /ACTUAL TAPE INSTRUCTION TBLOCK, 0 /ACTUAL BLOCK NUMBER. LDA /RECALL PAST SPECIAL FUCTION TEMP4 /REGISTER AND CHECK WHETER UNIT OK PDP /GET BACK INTO 8 MODE PMODE ISZ TBLOCK /BOP UP BLOCK NUMBER RTR /PLACE BIT 10 IN LINC SNL CLA /IS UNIT OK WITH WRITE LOCK OFF IF NECESSARY. JMP TSELER /UNIT NOT OK. DISPLAY MESSAGE. LMODE /TELL ASSEM WE LL BE IN LMODE. TLOOP2, PDP /GET INTO 8 MODE. IF IN 8 MODE ITS JUST A NOP. PMODE CHECKIO /CHECKIO I/O DEVICES WHILE WAITING IN LOOP. ISZ TERRC1 /BOP UP FIRST WAIT COUNT JMP TNT2LG /DIDN T OVERFLOW YET. GO DOWN ISZ TERRC2 /OUTER SKIP OK? JMP TNT2LG /BIG COUNT STILL OK. GO DOWN. / JMS I TEMAIN /WE VE WAITED TOO LONG. GIVE MESSAGE. TMESS1 /TO LONG MESSAGE / TNT2LG, LINC /GET INTO LINC MODE FOR FLAG TESTING. LMODE /GET INTO L MODE TO TEST TAPE. STD JMP TLOOP2 /NOT YET DONE. GO BACK AND WAIT. TAC /DONE. GET CHECKSUM INTO AC. PDP PMODE /AND GET BACK INTO 8 MODE CMA /MAKE INTO ZERO IF 7777 SNA CLA /GOOD CHECKSUM JMP TDOC /YEP. TRY NEXT RECORD. TSKP, SKP /SWITCH FOR ERROR IF BAD CHECKSUM. JMP TCHEKE /BAD CHECKSUM. GIVE MESSAGE TDOC, ISZ TCOUNT /OK. IS ALL ODNE? JMP TLOOP /NOPE. DO NEXT TBEXIT, JMP I TBLAH /YEP. EXIT / / / / TCHEKE, JMS I TEMAIN TMESS2 /CHECKSUM ERROR TSELER, JMS I TEMAIN TMESS3 /BLOCK NUMBER OR TIMING ERROR / / / / / TCOUNT, 0 TERRC1, 0 TERRC2, 0 TEMAIN, TMAINE / / / / / / / / / ASMIFN RF08 /RF08 DEISRED? ASMSKP 4 /YEP. DON T ASSEMBLE MESSAGE HERE / TMESS2, TEXT "FLINC TAPE FCHECKSUM ERROR " / TMESS3, TEXT "FSELECT OR FWRITE-LOCK ERROR " / / / / / EJECT / / / / / LOCATED AROUND 2000. PREVIOUS PAGE OVERLAPS A LITTLE BIT. / / / / TAPE ROUTINES CONTINUED. TMAINE, 0 /MAIN ERROR WAIT CLA CLL CML RAR /4000+6152=TAPE PRESET. 6152 /STOP ANY STRAY TAPE OPERATIONS. CLA CLL TAD I TMAINE /GET ERROR MESSAGE DCA .+2 MOVE /AND MOVE TO MAIN MESSAGE. 0 TMAIND 20 /40 CHARACTER NAME. MONE TAD I TBLOKK /GET COOREECT BLOCK NUMBER FOR DISPLAY OF ERROR MESSAGE. JMS TTBC /CALL ERROR MESSAGE DISPLAYER TTEG1 /WITH LIST OF WHERE TO GO ON REPLY. / / / / / TTEG1, TRENT3 /ACCEPT LOCATION TERROT /RETRY LOCATION TRENT3 /SKIP LOCATION (INTERNALLY SAME AS ACCEPT) / / / / / / / TRENT3, ISZ I TKOUNT /IS THIS LAST RECORD? JMP I TTRNT2 /NOPE. GO BACK AND SKIP JMP I TBLAHT /YEP. EXIT / / / / / TERROT, JMP I TTRENT / / / / / / TTRENT, TREENT TBLOKK, TBLOCK TKOUNT, TCOUNT TTRNT2, TRENT2 TBLAHT, TBEXIT / / / / / / / / / / / / / / TTBC, 0 /ERROR MESSAGE DISPLAYER LINC /GET OVER TO LINC SIDE LMODE TBREG=TMAINE?1777 /ASSIGN A BETA REGISTER STC TTEBLK /SAVE THE BLOCK NUMBER SET I TBREG /SET THE B REG TO POINT TO TOUT1?1777-1+4000 /WHERE THE BLOCK NUMBER SHOULD GO. / TTBLP, DJR /DON T CLOBBER 0 LDA I TTEBLK, 0 /GET THE B,OCK NUMBER ROL 3 /ROTATE TO GET DIGIT STA TTEBLK /AND STORE BACK FOR NEXT TIME BCL I -7 BSE I 60 /CONVERT TO TRIMMED ASCII STH I TBREG /AND STORE AWAY. SRO I 3567 /ALL DONE WITH 4 DIGITS? JMP TTBLP /NOPE. DISPLAY MORE. PDP PMODE /GET BACK INTO 8 MODE CLA TAD I TTBC /GET THE GO TO LIST DCA TTS2 /AND SAVE IN SEARCH CALL DECODE /DISPLAY MESSAGE AND GET REPLY TMAIND-2 SEARCH /LOOK-UP REPLY TTS1 TTS2, 0 /CALLERS LIST. JMP .-5 /NOT A LEGAL REPLY. / / / TTS1, 301 322 4323 / / / / / / / / LEFT+140 TOP-100 /LOCATED ON TOP,LEFT OF SCREEN TMAIND, 0 /OVERLAYED BY EXACT MESSGE *TMAIND+20 /A 40 CHAR MESSAGE FROM CORRECT ERROR ROUTINE. TEXT "FAT BLOCK NUMBER " TOUT1, 0 TOUT2, 0 TEXT " A --- ACCEPT AS IS R --- TRY AGAIN S --- TRY TO SKIP PAST FAULTY BLOCK\" TMESS1, TEXT "FBLOCK NUMBER FOR TIMING ERROR " / / / / EJECT / LOCATED AROUND 2200. PREVIOUS PAGE OVERLAPS A LITTLE BIT. / / / GENERAL CALL: / / DECODE / YOUR DISPLAY / / / / WILL DECODE A STRING AS FOLLOWS: / / ;<8 CHARACTER NAME>, / / ANY PART MAY BE MISSING WITH THE EXCEPTION OF THE FIRST LETTER. / / IT S BROKEN DOWN AS FOLLOWS. THE FIRST LETTER GOES INTO "FTYPE", THE NUMBER INTO "FUNIT", / THE 8 CHARACTER NAME INTO "FNAME" FOLLWED BY / "77" S TO FILL IT OUT, AND THE LAST NUMBER INTO / "FSIZE". ANY MISSING NUMBERS GO TO 0, A MISSING NAME GOES TO 7777777777777. / / DDCODE, 0 /GETS AND DECODES A LINE FROM THE TTY WHILE DISPLAYING SOMETHING. CLA CLL /CLEAR AC. TAD I DDCODE /GET LOCATION OF DISPLAY. DCA DDDIS /AND PLACE HERE. ISZ DDCODE /SKIP PAST CALLING ARG. DDAGIN, MONE /RESTART OF DISPLAY. DCA FNAME /SET NAME TO 7777 MONE DCA FNAME+1 MONE DCA FNAME+2 MONE DCA FNAME+3 /NAME NOW CONTAINS A 7777 DCA FUNIT /ZAP OUT UNIT NUMBER. DCA FTYPE /ZAP OUT CHAR. DCA FSIZE /AND SIZE. LINE /GET A LINE FROM THE TTY. DDDIS, 0 /WHILE DISPLAYING THE CALLERS CRAP. TAD DDGTEXT /POINTER TO BUFFER-1 DCA I DPSTART /WE LL USE "PGETL" TO GET MONE /THE CHARS SO I M SETTING IT UP NOW. DCA I DPSWITCH /SET SWITCH TO LEFT CHAR. TAD DSIZE /NUMBER OF CHARS ALREADY IN BUFFER. DCA COUNT /PLACE IN TEMP COUNT. JMS I DPGETL /GO GET A CHAR. ISZ COUNT /BOP UP CONUT. IS THTA ALL? JMP .-2 /NO. GET NEXT. CLA /YES. CLEAR AC OF CHAR. JMS I DPGETL /GET NEXT CHAR. TAD L7777 /TEST TO SEE IF A LETTER SPA /IS IT <"A" JMP DDAGIN /YES. NOT A LET. TRY AGAIN. TAD M32 /IS IT TOO BIG??? SMA JMP DDAGIN /YEP. TOO BIG. TRY AGAIN. TAD L333 /OK. MAKE INTO A GOOD LETTER. DCA FTYPE /AND STASH AWAY. JMS DGETNUM /GET A NUMBER NEXT. TAD TEMP /GET THE VALUE. DCA FUNIT /AND STASH AWAY. TAD TEMP1 /GET CHARACTER WHICH WAS NON NUM. SNA /IS IT TERMINATING 0000 JMP I DDCODE /YES. EXIT. TAD M73 /IS IT A ";" SZA CLA JMP DDAGIN /NOT ANYONE. BAD CHAR. TRY AGAIN. TAD DFNAME /POINTER TO "FNAME" DCA TEMP3 /AND STORE AWAY TAD M4 /4 *2 CHARS PER WORD=8 DCA COUNT DLOOP, JMS DDCHEK /GET A CHAR AND CHECK IT. RTL RTL RTL /ROTATE INTO LEFT SPOT. AND L7700 /ZAP OUT RIGHT TAD L77 /NAME TERMINATES WITH A 77 DCA I TEMP3 /PLACE IT AWAY. JMS DDCHEK /GET ANOTHER AND L77 /JUST RIGHT 6 BITS TAD I TEMP3 /GET BACK OLD 1 TAD M77 /CHOP OFF L77 WE ADDED BEFORE. DCA I TEMP3 /AND PLACE BACK IN THING. ISZ TEMP3 /BOP UP NAME POINTER. ISZ COUNT /4 WORDS FILLED UP YET? JMP DLOOP /NO. JMS DDCHEK /YES. GET NEXT JUST FOR HELL OF IT. JMP DDAGIN /NAME TOO LOONG. RESTART/ / DCOMMA, JMS DGETNUM /EVALUATE NUM AFTER COMMA. TAD TEMP /GET VALUE DCA FSIZE /AND STASH AWAY TAD TEMP1 /GET TERMINATING CHAR. SZA CLA /IS IT 0000 JMP DDAGIN /NO. RETRY AGAIN. JMP I DDCODE /YEP. ALL DONE. E X I T ! / DGETNUM,0 /FORMS A NUMBER DCA TEMP /ZERO SUM JMS I DPGETL /GET A CHAR. DCA TEMP1 /STASH IT AWAY. TAD TEMP1 /GET IT BACK TAD M60 /IS IT <60 SPA CLA JMP I DGETNUM / <60. RETURN. TAD TEMP1 /GET AGAIN TAD M70 /IS IT TOOOOO BBBIIIGGGG?????? SMA CLA JMP I DGETNUM /YEP. RETURN TAD TEMP /GET OLD TOTAL CLL RAL CLL RAL CLL RAL /MULTIPLY BY 8 TAD TEMP1 /ADD IN TEMP1 TAD M60 /GET RID OF ASCII BITS. DCA TEMP /AND STASH AWAY. JMP DGETNUM+2 /GO GET NEXT CHAR. / DDCHEK, 0 /CHECKS FOR 0 OR , JMS I DPGETL SNA /IS GOTTEN CHAR 0? JMP I DDCODE /YES. EX I T TAD M54 /IS IT A , SNA JMP DCOMMA /YES. END OF NAME. TAD L54 /CORRECT FOR SUBTRACTION. JMP I DDCHEK /RETURN IWTH CHAR IN AC. / / / DPGETL, DDCOM /POINTER TO UNPACK ROUTINE CHAR GETTER. DFNAME, FNAME /POINTER TO FNAME DDGTEXT,GTEXT+1 /POINTER TO START OF MESSAGE-1 DPSTART,PSTART /POINTER TO GETCHAR POINTER DPSWITCH,PSWITCH /POINTER TO SWITCH (LEFT OR RIGHT CHAR) DSIZE, -LBNUM /NUMBER OF SYSTEM CHARS ALREADY IN BUFFER. / / / / / / / EJECT *2400 / / MAIN DIRECTORY SEARCHER. / / GENREAL CALL: / / / DIRECT / / / NO ARGUEMENTS. ALL COMMUNICATION IS DONE THROUGH "FBLOCK AREA [FSIZE-FNAME+3]" / / / / / / DYRECT, 0 /MAIN ENTRY CLA CLL /CLEAR AC TO BE SURE. TAD INDEX /GET START OF INDEX DCA DINDEX /AND PLACE AWAY HERE TAD ILEN /GET LENGTH OF INDEX DCA DLEN /AND PLACE AWAY. PUSH /SAVE FBLOCK. I/O MIGHT DESTROY IT. TAD FUNIT /GET DESIRED UNIT. DCA .+2 /AND FINISH SETTING UP READ. READ /READ IN INDEX. 0 /UNIT DPOINT, BUFFER /INTO START OF BUFFER AREA. DLEN, 0 /LENGTH OF INDEX. DINDEX, 0 /STARTING BLOCK OF INDEX. POP /RESTORE FBLOCK JMS I DDNAME /LOOKUP NAME. JMP I DDFOUND /NAME EXISTS. GO ELSEWHERE. JMS I DYGLEN /NO NAME. GET D LEN. ISZ COUNT /BOP BY 1 TO OFFSET FOR FIRST ENTRY TAD DPOINT /SET UP AUTO1 DCA AUTO1 /TO POOINT TO DIRECTORY. DYLOOP, JMS I DYPAST /GO TO NEXT ENTRY. TAD I AUTO1 /GET FIRST LETTERS OF NAME. TAD M5757 /IS IT FREE SNA CLA JMP DYGOOD /YEP. PLACE IT HERE ISZ COUNT /NO GOOD, ANY MORE TO CHACK? JMP DYLOOP /YEP. GO BACK NO /NO ROOM FOR NEW NAME. DYGOOD, TAD AUTO1 /SET UP MOVE TO DIRECOTRY OF NAME DCA .+3 /NAME PLACE IN DIRECTORY. MOVE /MOVE NEW NAME INTO DIRECTORY. FNAME 0 4 PFOUR /NOW FILL IN SPACES WITH 5757S TAD AUTO1 /POINTER TO SOURCE BLOCKS DCA .+3 MOVE /NOW MOVE IN 5757 S DL5757 0 4 JMS I DYBACK /POINT TO START OF NAME / / DREENT, TAD FWHAT /DFOUND ALSO COMES HERE. IS IT INPUT OR OUTPUT??? TAD L7777 /1=INPUT,2=OUTPUT SNA /IS IT INPUT NO /YES. NO NAME. DISPLAY "NO" TAD L7777 /IS IT "2" SZA SYSERR /NO. INTERNAL PIP ERROR. FOR DEBUGGING ONLY. TAD FTYPE /SOURCE=1,BINARY=2 TAD L7777 /IS IT A 1 SNA JMP DSOURCE /YES. SOURCE TAD L7777 /IS IT2. (BINARY) SZA SYSERR /NEITHER. SYSTEM ERROR PTWO /BINARY. BOP PAST SOURCE. DSOURCE,TAD L4 /GO PAST NAME. TAD AUTO1 /SET AUTO2 TO BLOCK NUMBER POINTER. DCA AUTO2 / / / / ROUTINE TO FIND VACANT SPACE IN THE DIRECTORY / / / / DLOOK, TAD CLOWER /GET LOWER LIMIT OF SYSTEM. DCA DFIRST /THATS WHERE WE LL START CHECKING. DLOOP1, TAD DFIRST /GET START OF BLOCKS WE RE NOW CHECKING TAD FSIZE /FIND OUT HOW BIG WE WANT THEM. CLL CMA IAC /13 BIT NEGATE, EXCEPT FOR LINK. TAD CLOWER /DO WE GO OVER INTO SYSTEM? SZA SNL CLA /NOW REASON FOR NO CML ABOVE. JMP DNO1 /YEP. GO DOWN AND TRY NEXT. JMS I DDCHECK /CHECK TO SEE IF ANY OF THESE BLOCKS ARE OCCUPIED. JMP DNO1 /YEP, THEY ARE. GO DOWN AND TRY NEXT. TAD DFIRST /FOUND ROOM. TAD FSIZE /GET DISTANCE FROM INDEX. CIA TAD INDEX IAC /1 MORE FOR ADDITION OVERSHOOT. DCA DDIS1 /DISTANCE FROM INDEX. JMP DDO2 /NOW CHECK OTHER SIDE. DNO1, TAD DFIRST /BLOCKS WON T FIT. CIA /CAN WE TRY FARTHER FROM SYSTEM. TAD ELOWER /ADD LOWER LIMIT OF DEVICE. SNA CLA /ARE WE AT BOTTOM NOW? JMP DBAD1 /YEP. NO ROOM HERE IN THIS SIDE. MONE /ROOM LEFT. BOP DOWN DFIRST AND TRY AGAIN. TAD DFIRST DCA DFIRST /A LITTLE FARTHER FROM SYSTEM THIS TIME. JMP DLOOP1 /GO BACK AND TRY AGAIN. / DBAD1, MONE /NO ROOM ON BOTTOM . SET DISTANCE TO MAX. DCA DDIS1 / DDO2, CLA CLL /NOW EW LL CHECK TO UPPER TO SEE IF IT FITS. TAD CUPPER /GET UPPER PART OF SYSTEM. DCA DFIRST /FOR FIRST ISZ CORRECTION. / DLOOP2, ISZ DFIRST /WE LL TRY NEXT BLOCK. SKP /WOW.QUITE A DEVICE HE S GOT THERE. 4 RF08 S IT MUST BE. JMP DBAD2 /BUT STILL NO ROOM ON TOP. TAD EUPPER /GET THE UPPER LIMIT OF THE DEVICE. CLL CML CMA /13 BIT COMP , -1 TAD DFIRST /WILL WE OVERFLOW DEVICE LIMITS. TAD FSIZE /WHEN WE ADD IN LENGTH. SZA SNL CLA JMP DBAD2 /NO ROOM LEFT ON TOP END. JMS I DDCHECK /CHECK TO SEE IF BLOCKS ARE FREE. JMP DLOOP2 /NOT FREE. GO BACK AND TRY AGAIN. TAD INDEX /FREE. GET DISTANCE. CIA TAD DFIRST DCA DDIS2 /AND SAVE IT. JMP I DDFIG /GO CALCULATE WHICHONE IS CLOSER [LOWER HALF OR UPPER HALF] / / DBAD2, MONE /NO ROOM ON UPPER HALF. DCA DDIS2 /SET DISTANCE TO A MAXIMUM. JMP I DDFIG /GO FIGURE OUT WHICH ONE IS CLOSER. / / DDIS1, 0 /LOWER DEVICE DISTANCE DDIS2, 0 /UPPER DEVICE DISTANCE FROM DESIRED FILE. DDCHECK,DCHECK /POINTER DDFIG, DFIG DDNAME, DNAME DDFOUND,DFOUND DYGLEN, DGLEN DYPAST, DPAST DYBACK, DBACK DL5757, 5757 5757 5757 5757 / / / / / / / / / EJECT *2600 / / MORE OF THE DIRECTORY LOOKUP ROUTINES. / / / / / / DFIG, TAD I DDDIS1 IAC /IS LOWER HALF OK?? SNA CLA JMP D1NOG /NO ROOM IN LOWER HALF. TAD I DDDIS2 /HOW ABOUT THE UPPER HALF? IAC SNA CLA JMP D1CLOSE /LOWER HALF IS CLOSER BECAUSE NO UPPER HALF. TAD I DDDIS1 /BOTH THERE. GET LOWER DISTANCE. CLL CML CMA IAC /13 BIT NEGATE TAD I DDDIS2 /GET UPPER DISTANCE. SZL CLA /WHICH IS CLOSER. JMP D2CLOSE /UPPER IS CLOSER. / D1CLOSE,MONE /-1 FOR ADDITION ERROR TAD FSIZE /RECREATE ORIGINAL BLOCK NUMBER TAD I DDDIS1 CIA TAD INDEX /WE VE GOT THE ORGINAL BLOCK NUMBER NOW. DCOM, DCA FBNUM /TELL CALLING PROGRAM ABOUT IT. TAD FBNUM /NOW PLACE IT IN DIRECTORY. DCA I AUTO2 TAD FSIZE /ALSO THE SIZE IN THE DIRECOTRY. DCA I AUTO2 MOVE /NOW SET UP THE WRITING OF THE DIRECTORY. DPOINT-1 DWRITE+1 4 PUSH /PUSH DOWN F BLOCK DWRITE, WRITE /WRITE DIRECTORY, WITH MOVED IN ARGUEMENTS. 0 0 0 0 POP /POP UP FBLOCK DDEXIT, TAD I DDYRECT /GET CALLING ADDRESS DCA TEMP /STORE IT JMP I TEMP /EXIT TO USER. / D1NOG, TAD I DDDIS2 /CHECK IF ROOM ON TOP HALF. IAC SNA CLA /ROOM? NO /NO ROOM ON DEVICE FOR FILE. D2CLOSE,TAD DFIRST /GET THE LAST BLOCK CHECKED. JMP DCOM /AND THATS IT. PLACE IN DIRECTORY. / / / / DCHECK, 0 /CHECKS TO SEE IF BLOCKS OCCUPIED BY DFIRSR ARE FREE MONE TAD I DDPOINT /SET AUTO1 TO POINT TO START OF DIRECTORY DCA AUTO1 /IN CORE. JMS I DDGLEN /GET LEN OF DIRECTORY DLOOP3, TAD I AUTO1 /GET FIRST WORD OF A NAME IN THE DIRECTORY. TAD M5757 /IS IT A GOOD NAME??? SNA CLA JMP DBLANK /NO. SKIP PAST IT. ISZ AUTO1 ISZ AUTO1 ISZ AUTO1 /SKIP PAST REST OF NAME. ISZ AUTO1 /AND ALSO STARTING BLOCK OF SOURCE TAD I AUTO1 /IS THERE ANY SOURCE(LENGTH=POSITIVE) SPA CLA JMP DNOS /NO SOURCE JMS I DDTHERE /YEP. CHECK IT OUT. DNOS, ISZ AUTO1 /SKIP PAST BINARY BLOCK TAD I AUTO1 /GET BINARY LENGTH SPA CLA /BINARY THERE? JMP DBLANK /NO BINARY JMS I DDTHERE /BINARY THERE. CHECK FOR INTERFERENCE. / DBLANK, JMS I DDPAST /SKIP TO NEXT DIRECTORY ENTRY ISZ COUNT /ARE WE ALL DONE WITH THE DIRECTORY? JMP DLOOP3 /NO. GET NEXT ENTRY ISZ DCHECK /YES. SKIP PAST NEXT CALLING STATEMENT AND EXIT. JMP I DCHECK /GOODBYE. AND GOOD LUCK. / / / / / DGLEN, 0 /ROUTINE GETS LENGTH OF DIRECTORY AND STORES IT IN -COUNT. TAD ILEN /GET INDEX LENGTH. RTL RTL RAL /MULTIPLY BY 32 (32 ENTRIES PER BLOCK. AND L7740 /CHOP AWAY CRAP. CIA DCA COUNT /AND STORE NEGATED IN COUNT. JMP I DGLEN /RETURN TO CALLER. / DPAST, 0 /ROUTINE SETS AUTO1 TO POINT TO NEXT NAME IN DIRECTORY. TAD AUTO1 AND L7770 /LOGICAL OPERATION---- AUTO1.OR.7 TAD L7 DCA AUTO1 /AND PUT BACK. JMP I DPAST / DBACK, 0 /ROUTINE BACKSPACES 1 DIRECTORY ENTRY. JMS DPAST /MOVE TO END OF THIS NAME TAD AUTO1 TAD M10 DCA AUTO1 /AND DOP DOWN BY 10 (1 DIRECTORY ENTRY) JMP I DBACK / / / DTHERE, 0 /CHECKS JUST ONE DIRECTORY ENTRY FOR BEING WITHIN THE SPECIFIED LIMITS. MONE TAD AUTO1 /BOP BACK THE AUTO REG. DCA TEMP3 /AND PLACE IT AWAY TAD I TEMP3 /RETRIEVE STARTING BLOCK NUMBER CLL CML CMA IAC /13 BIT NEGATE. TAD DFIRST /ADD IN DESIRED STARTING BLOCK. SNA JMP I DCHECK /SAME. BLOCK IS TAKEN. EXIT. SNL CLA /ARE WE PAST DFIRST. JMP DFBIGR /NO. DFIRST IS BIGGER. TAD I TEMP3 /YEP. LETS SEE IF WE MISS IT. CLL CML CMA TAD DFIRST /DOES DFIRST+FSIZE INCROACH ON OUR TERRITORY. TAD FSIZE SNL CLA /???? JMP I DCHECK /YEP. CAN T PUT IT HERE. JMP I DTHERE /IT FITS. / DFBIGR, TAD I TEMP3 /WE RE BEFORE DFIRST. ISZ TEMP3 /POINT TO FILE LENGTH NOW. TAD I TEMP3 /ADD OUR LENGTH IN CLL CMA IAC TAD DFIRST /DO WE OVERFLOW INTO DFIRST??? SZA SNL CLA JMP I DCHECK /WE CERTAINLY DO. JMP I DTHERE / NOPE. WE RE CLEAR. RETURN TO CHECK AGAIN. / / / DDDIS1, DDIS1 /POINTER TO LOWER DISTANCE FROM SYSTEM DDDIS2, DDIS2 /POINTER TO UPPER DISTANCE FROM SYSTEM DDYRECT,DYRECT /POINTER TO ENTRY DDPOINT,DPOINT /POINTER TO BUFFERS DDGLEN, DGLEN /POINTER TO GET NUMBER OF DIRECTORY ENTRIES ROUTINE. DDTHERE,DTHERE /POINTER TO BLOCK CHECKER DDPAST, DPAST /POINTER TO ROUTINE TO GO TO NEXT ENTRY. / / / / / / / / / EJECT *3000 / / SOME MORE OF THE DIRECTORY LOOKUP ROUTINES. / / / / / DFOUND, TAD FWHAT /NAME ALREADY IN DIRECTORY. GET WHETHER INPUT OR OUTPUT FILE. TAD L7777 /1=INPUT,2=OUTPUT SNA JMP DDIN /IT S INPUT. TAD L7777 /IS IT OUTPUT? SZA SYSERR /NOT 1 OR 2. SOMETHING HAS BLOWN. TAD FTYPE /1=SOURCE,2=BINARY TAD L7777 /IS IT SOURCE SNA JMP DZAP /YEP. ZAP OUT BLOCKS FROM DIRECTORY. TAD L7777 /BINARY??? SZA SYSERR PTWO /BINARY FILE. ADD TWO TO BYPASS SOURCE DZAP, TAD L4 /BOP PAST NAME TAD AUTO1 /GET POINTER NOW DCA AUTO1 TAD L5757 /BLANK OUT THE BLOCK NUMBER DCA I AUTO1 / (EITHER TO POINTER TO SOURCE OR BINARY) PUSH /PUSH DOWN FBLOCK SO "REPLACE" WONT BLOW IT. TAD AUTO1 /NOW GET THE AUTO LENGTH POINTER. DCA AUTO3 /AND PLACE IN A TEMPORARY AUTO. TAD I AUTO3 /IF SIGN BIT OF LENGTH ON THEN NO SOURCE OR BINARY. SMA CLA /DO WE WANT TO REPLACE???? REPLACE /YEP. DISPLAY REPLACE MESSAGE. POP /HE S ANSWERED AN "R". NOW REPLACE FBLOCK. TAD L5757 /NOW ZAP OUT THE LENGTH. DCA I AUTO1 /BY PLACING IN SOME 5757 S. PUSH /NOW PUSH DOWN SO THAT WE WILL REMEMBER IT. JMS I DDBACK /BACKSPACE TO BEGINNING OF NAME. JMP I .+1 /WE WANTS IT REPLACED. DREENT /REENTRY FOR REPLACING THE FILE / / DDIN, TAD FTYPE /IT AN INPUT FILE. GET THE MODE. TAD L7777 /1=SOURCE,2=BINARY SNA JMP DDT /IT SOURCE TAD L7777 /MAYBE IT S BINARY SZA SYSERR /UGH. PIP HAS BLOWN. PTWO /IT S BINARY. MOVE PAST SOURCE. DDT, TAD L4 /PUSH PAST NAME. TAD AUTO1 /RESET POINTER DCA AUTO1 TAD I AUTO1 /GET BLOCK NUMBER DCA FBNUM /AND STORE AWAY. TAD I AUTO1 /GET SIZE OF FILE SPA /IS IT OK? NO /NO. DISPLAY "NO" MESSAGE. DCA FSIZE /YEP. ITS THERE. STASH AWAY. JMP I .+1 /NOW EXIT FROM DYRECT. DDEXIT / / / / DNAME, 0 /LOOKS UP NAME IN THE DIRECTORY. TAD I DNPOINT /GET STARTING ADDRESS FOR THE NAME LOOKUP. TAD L7777 /AC MAY NOT CONTAIN ZERO FOR SOME SPECIAL CALLS. DCA AUTO1 /PLACE IN AUTO1 JMS I DNGLEN /GET LENGTH TAD I DNPOINT /GET STARTING ADDRESS OF DIRECTORY DCA TEMP4 /STORE AWAY. TAD I TEMP4 /GET FIRST WORD. IS IT "5757" TAD M5757 SNA CLA JMP DOK /IT S THERE. ALL IS WELL ISZ DNAME /DESIRED NAME NOT THERE BECAUSE NO DIRECTORY. TAD COUNT /MULTIPLY COUNT BY 8 RTL RAL /BECAUSE THERE ARE 8 WORDS PER AND L7770 /DIRECTORY ENTRY DCA COUNT TAD L5757 /MAKE IT A GOOD DIRECOTORY. DCA I AUTO1 /FILL IT UP ISZ COUNT /ALL DONE? JMP .-3 /NOPE JMP I DNAME /YEP. ALL DONE. / / / DOK, JMS I DNPAST /PUSH PAST PRESENT NAME. TAD I AUTO1 /GET FIRST WORD OF NEW NAME. CIA TAD FNAME /A MATCH? SZA CLA JMP DNOT /NO. TRY NEXT TAD I AUTO1 /AND SO ON DOWN UNTIL IT FAILS OR A MATCH IS MADE. CIA TAD FNAME+1 SZA CLA JMP DNOT TAD I AUTO1 CIA TAD FNAME+2 SZA CLA JMP DNOT TAD I AUTO1 CIA TAD FNAME+3 SZA CLA JMP DNOT JMS I DNBACK /A MATCH SET AUTO1 AND EXIT. JMP I DNAME / / DNOT, ISZ COUNT /FINISHED CHECKING ALL? JMP DOK /NO. MORE TO GO. ISZ DNAME /NOT THERE. PUSH BACK EXIT LOCATION JMP I DNAME /AND EXIT. / / / / / DDBACK, DBACK /POINTER TO BACKSPACE ROUTINE DNBACK=DDBACK /A SLIGHT OVERSIGHT. DNPOINT,DPOINT /POINTER TO BUFFERS DNGLEN, DGLEN /GET NUMBER OF ENTRIES ROUTINE DNPAST, DPAST /ADVANCE POINTER TO NEXT NAME ROUTINE / / / / / NODIS, 0 /THIS ROUTINE DISPLAYS A "NO" DISPLAY /ISSUE DISPLAY COMMAND NONODI /MYOUTPUT CRAP JMP .-2 /HANG AROUND UNTIL A ^D OR ^P IS TYPED. / NONODI, LEFT+340 /ABOUT CENTER OF THE SCREEN BOTTOM+340 TEXT "FNO\" /A SIMPLE MESSAGE. / / / REPDIS, 0 PUSH /STORE AWAY FBLOCK DECODE /GET A LINE DISREP /REPLACE MESSAGE TAD FTYPE /GET REPLY TAD M322 /IS IT AN "R" SZA CLA JMP REPDIS+2 /NOPE. TRY AGAIN. POP /RESTORE FBLOCK JMP I REPDIS /AND RETURN. / / DISREP, LEFT+260 /ABOUT THE CENTER TOP-300 /GOOD ENOUGH TEXT "FREPLACE? HR --- REPLACE\" / / / / / / / / / / / EJECT / / / / / COPY ROUTINE: / OVERLAPS IN 3200 FROM PREVIOUS PAGE. / / / / / / GENERAL CALL: / / / COPY / / / / COPIES FSIZE BLOCKS FROM INUNIT,INBLOCK / TO OUTUNIT,OUTBLOCK / AND TO MORE UNITS DEPENDING ON THE VALUE OF "OUTNUM". / OUTNUM SHOULD BE 7777 FOR 1 TAPE COPY. / / / / / CCOPY, 0 /MAIN ENTRY TAD INUNIT /GET INPUT UNIT DCA CINU /AND PLACE IN READ CALL TAD INBLOCK /GET INPUT STARTING BLOCK DCA CINB /AND STORE IN READ BLCOK TAD OUTBLOCK /GET THE OUTPUT STARTING BLOCK DCA COUTB /AND LEAVE THAT IN WRITE TAD FSIZE /GET THE NUMBER OF BLOCKS TO COPY DCA CSIZE /AND STORE THAT AWAY. / CPLOOP, TAD OUTUNIT /GET THE ORIGINAL OUTPUT UNIT. DCA COUTU /AND PLACE I N WIRTE OUT UNIT. TAD OUTNUM /GET NUMBER OF UNITS ITS GOING TO DCA CCOUNT /PLACE IN TEMPORARY COUNTER. TAD CSIZE /GET NUMBER OF BLOCKS LEFT. SNA /ALL DONE??? JMP I CCOPY /YES CLL CML CMA IAC /13 BIT NEGATE. TAD BNUM /NUMBER OF BUFFERS AVAILABLE. SNL SZA CLA /MORE TO GO THEN BUFFERS ALOLOW? JMP CSMALL /NO. BUFFERS BIGGER. TAD BNUM /GET BUFFER SIZE. DCA CINS /STASH IN READ. TAD BNUM DCA COUTS /STASH IN WRITE. JMP CCOM /GO DO READ-WRITE / CSMALL, TAD CSIZE /GET NUMBER LEFT. DCA CINS /STASH IN INPUT SIZE. TAD CSIZE DCA COUTS /AND OUTPUT SIZE. / CCOM, READ /READ IN CORECT NUMBER OF BLOCKS. CINU, 0 /INPUT UNIT. BUFFER /POINTER TO BUFFERS. CINS, 0 /NUMBER OF RECORDS TO BE READ IN. CINB, 0 /STARTING BLOCK NOW OF READ. CCMORE, WRITE /NOW WRITE IT OUT. COUTU, 0 /OUTPUT UNIT BUFFER /BUFFER POINTER COUTS, 0 /NUMBER OF RECORDS. COUTB, 0 /0STARTING RECORD NUMBER. ISZ COUTU /BOP UP TO NEXT OUTPUT UNIT ISZ CCOUNT /MORE UNITS TO WRITE ON?? JMP CCMORE /YEP. GO BACK AND WRITE ON NEXT. / / / TAD CINS /GET THE INPUT SIZE TAD CINB /ADD THE BLOCK NUMBER DCA CINB /AND UPDATE BLOCK NUMBER. TAD COUTS /GET THE OUTPUT SIZE. TAD COUTB /ADD THE COUTPUT SIZE. DCA COUTB /AND UPDATE IT. TAD CINS /GET THE NUMBER OF RECORDS JUST TRANSFERRED. CIA /AND SUBTRACT IT FROM TAD CSIZE /THE TOTAL TRANSFERR DCA CSIZE /AND STORE AWAY. JMP CPLOOP /GO BACK AND DO SOME MORE. / / / / CSIZE, 0 /CURENT NUMBER OF BLOCKS GOING. CCOUNT, 0 /TEMPORAY COUNTER FOR THE UNITS. / / / LLEDER, 0 /GENERATES LEADER OR TRAILER TAD M212 /ABOUT 130 CHARACTERS OF LEADER DCA COUNT TAD L200 AUXOUT /PUT OUT LEADER ISZ COUNT /ALL DONE? JMP .-3 /NOPE, DO MORE. JMP I LLEDER /ALL DONE. EXIT / / / HHPUSH, 0 /HIGH FBLOCK SAVE. MOVE /MOVE FBLOCK TO A SAFE PLACE FSIZE HHTEMP FNAME+3-FSIZE+1 JMP I HHPUSH / / HHPOP, 0 /RESTORES FBLOCK FROM HIGH PLACE MOVE HHTEMP FSIZE FNAME+3-FSIZE+1 JMP I HHPOP / / HHTEMP, 0/HIGH SAVE AREA *HHTEMP+FNAME+3-FSIZE /LEAVE ROOM FOR FBLOCK 0000 /LAST WORD OF SAVE AREA. / / / / TTAPE, 0 /SETS UP TO USE TAPE LIMITS FOR DIRECTORY LOOKUP. MOVE /MOVE IN CORRECT POINTERS TTTSET INDEX CUPPER-INDEX+1 TAD FUNIT /GET THE UNIT AND L7 /SET UP FOR LINC TAPE DCA FUNIT MONE /SET FOR 1 COPY DCA OUTNUM JMP I TTAPE /AND RETURN / / TTTSET, TINDEX /START OF TAPE INDEX BLOCK TILEN /LENGTH OF TAPE INDEX TLOWER /LOWEST BLOCK NUBMER ON DEVICE TUPPER /HIGHEST BLOCK NUMBER ON THE DEVICE TSYSLOWER /LOWER LIMIT OF SYSTEM TSYSUPPER /LAST BLOCK USED BY SYSTEM / / / / TTYPUT, 0 /TTY OUTPUT ROUTINE DCA TTAPE /STASH AWAY WHILE DOING CHECK. CHECKIO /TEST FOR MAYBE A CONTROL Z 6041 /IS IT FREE? JMP .-2 /NOPE. CHECK AGAIN. TAD TTAPE /GET IT AGAIN. 6046 /YEP. GOOD BYE. CLA JMP I TTYPUT /THATS ALL / / / / / / / / / / / ASMIFZ PFLICK /DO WE WANT THE FLICKER FACTOR ADDED? ASMSKP 10 /NOPE. DONT ASSEMBLE THEM IN / POTHER, 0 /FLICKER. TAD I AUTO6 /PICK A RANDOM LOCATION AND L4000 /JUST GET THE HIGH ORDER BIT TAD LOC1 /NOW ADD IN THE TABLE POINTER DCA LOC1 /AND THE CHANNEL SELECTIO WORD JMP I POTHER /STASH BACK AND RETURN TO THE CALLER / / / / / / / / / / / / / / / / / EJECT / / / / / / END OF P I P 2. / / / / CALL PIP3 / / / / / / / CHAIN "PIP3" / EJECT