/DEC-10 SYSTEM CONTROLLER -- V 6.07 / /ALLOWS THE PDP-8 TO SIMULATE A REMOTE TERMINAL /TO A PDP-10. IN CONVERSATION MODE, THE PDP-8'S /CONSOLE TERMINAL CAN BE USED TO COMMUNICATE WITH THE /PDP-10 AS IF THE PDP-8 WAS NOT PRESENT AND THE /TERMINAL WAS CONNECTED DIRECTLY TO THE PDP-10. /IN ADDITION, FILES CAN BE TRANSMITTED IN EITHER /DIRECTION BETWEEN PDP-8 AND PDP-10 PERIPHERAL /DEVICES. / / / WRITTEN BY: / ROBERT W. PHELPS / BEHAVIOR LABORATORY / DEPT. OF RADIATION BIOLOGY AND BIOPHYSICS / UNIVERSITY OF ROCHESTER MEDICAL CENTER / ROCHESTER, NY 14642 / /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ / / OCCULT COMMANDS SENT BY DEC-10 TO THE DEC-10: / ------ -------- ---- -- ------ -- --- ------ / [NOTE: FOR CHANGES IN THESE OCCULT COMMANDS WHEN / THE "PIP" OPTION IS USED (MAKING IT UNNECESSARY / TO HAVE "SEND3.SAV" ON THE PDP-10), SEE SECTION VI / IN THE DISCUSSION ON CHANGES BELOW.] / /I. INITIALIZATION / / ^Z ^Z 000 ^Z ^C ^C TTY NO TAB PAGE NO FORM / I / /THE ^Z^Z000^Z IS REQUIRED TO GET OUT OF "SEND" AFTER / / CERTAIN ERRORS HAVE OCCURRED. / /II. SEND / / RU DSKC:SEND3[1001,1002] / = / (FILE IS SENT HERE) / ^Z^Z^Z / [REPEAT ABOVE 3 LINES FOR EACH FILE] / /III. SEND BINARY / / RU DSKC:SEND3[1001,1002] / =/B / (FILE IS SENT HERE INCL'D'G 'S AND SPECIAL CHARACTERS) / ^Z^Z^Z (IN THIS MODE, ^Z IS AN ACTUAL CHARACTER / IF FOLLOWED BY 0 (NOT AN EOF)) / [REPEAT ABOVE 3 LINES FOR EACH FILE] / /IV. RECEIVE / / RU DSKC:SEND3[1001,1002] / / (RECEIVE FILE UNTIL TWO 232'S (^Z) FOLLOWED BY / THREE DIGIT CHECKSUM) / /V. RECEIVE BINARY / / RU DSKC:SEND3[1001,1002] / /B / (FOR SKED AND SAVE FILES) / /VI. RECEIVE IMAGE / / RU DSKC:SEND3[1001,1002] / /I / (FOR PAL10 IMAGE MODE FILES) / /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ / /THE OBVIOUS CHANGES THAT MUST BE MADE IN THIS PROGRAM FOR IT /TO RUN WITH OTHER PDP-10 INSTALLATIONS ARE LISTED BELOW. THERE /MAY BE OTHERS. / /I. THE FIRST CHARACTER OF THE LINE PRINTED IN RESPONSE TO THE "I" / COMMAND (INITIA) -- "U" IN OUR CASE FOR "U OF R ..." -- / IS USED TO TURN ON ECHOING. / / 1. IT IS LOCATED AT +6 / 2. THERE MAY BE PROBLEMS REQUIRING SPECIAL PROGRAMING IF THIS / CHARACTER OCCURS IN THE INITIALIZATION LINE. / /II. DEFAULT LOGIN [PPN] AND PASSWORD ARE LOCATED AT IN / PACKED ASCII. SPECIAL HANDLING FOR THE / EQUALS OPTION LOCATED AT . / /III. CHARACTER TO INITIATE ECHOING AFTER A LOGIN ("J" IN OUR / CASE FOR "JOB ...") IS LOCATED AT +1. / /IV. THE DEC-10 MUST HAVE TWO FILES AND THE [PPN]'S AND DEVICES / IF NECESSARY MUST IN THE APPROPRIATE TEXT MESSAGES. THESE / FILES ARE: / 1. END.8 [NO LONGER NEEDED -- FILES / CAN NO LONGER BE RECEIVED WITHOUT / USING THE "SEND" PROGRAM.] / / 2. SEND3.SAV (ALSO SEE SECTION VI. BELOW) / IS USED INSTEAD OF PIP FOR SENDING TO / THE DEC-10 TO INCREASE THE SPEED OF / TRANSMISSION (PIM MODE) AND TO ALLOW / BINARY FILES TO BE SENT. IT ALSO CHECKS / CHECKSUMS FOR EACH FILE SENT. / /V. IOT'S FOR THE KL8J OR OTHER INTERFACE USED FOR CONNECTING / TO THE PDP-10 LINE ARE DEFINED ON PAGE 2-1. / /VI. BY DEFINING A VARIABLE "PIP", THIS PROGRAM MAY BE OPTIONALLY / ASSEMBLED TO USE "PIP" RATHER THAN "SEND3" FOR SENDING FILES FROM / THE PDP-8 TO THE PDP-10. IN THIS CASE, NO CHECKSUMS ARE / COMPUTED AND BINARY FILES CANNOT BE TRANSMITTED. / /PIP=0 / / CHANGES IN THE OCCULT COMMANDS ARE AS FOLLOWS: / 1. INITILIZATION: / / ^S ^C ^C TTY ECHO NO TAB NO TAPE PAGE NO FORM / /THE ^S IS REQUIRED TO GET OUT OF TAPE MODE / / IF ^Q WAS PREVIOUSLY SENT. THIS CAN HAPPEN / / IF A SEND OPERATION IS PREMATURELY ABORTED. / / 2. SEND / / TTY NO PAGE NO ECHO TAPE / R PIP / =TTY:^Q / /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ / /CORE MAP: / ENTRY POINTS / NORMAL ENTRY: 00200 / CCL ENTRY : 00201 / / 00200-00377 ENTRY POINT AND STARTUP CODE / 00000-01777 COMMAND DECODER / 00000-02777 INPUT DIRECTORY / 10000-11777 USER SERVICE ROUTINE / 12000-13577 FILE LOOKUP MODIFIED FROM 'DIRECT.PA' / 20000-27577 DEC-10 PROGRAM / /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ / /TO ASSEMBLE AND LOAD: / / .COM DEC10 / .LOAD DEC10 / .SAVE SYS DEC10 / / TO USE "PIP" FOR SENDING FILES: / 1. REMOVE THE COMMENT "/" FROM PIP=0 ABOVE / 2. ASSEMBLE, LOAD, SAVE AND USE AS ABOVE / / TO USE "SEND3" FOR SENDING FILES: / 1. ASSEMBLE, LOAD, AND SAVE AS FOR "PIP" / 2. SEND "SEND3.FAI" TO THE PDP-10 / 3. ASSEMBLE, LOAD AND SAVE "SEND3" ON THE PDP-10 / 4. REASSEMBLE, LOAD, AND SAVE DEC10 WITH "PIP" UNDEFINED / /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ / /VERSION 5.06 / --ALLOW /D ON CHAINED ENTRY TO DELETE INITILIZATION / SO DEC10 OPERATIONS ARE NOT INTERRUPTED. / --LIST FILE NAMES ON SEND OPERATION / --ONE WORD CHANGE TO ECHO CTRL CHARACTERS AS ^-CHAR / SEE / --FIX PROBLEM WITH HANGING BECAUSE THE PDP-10 HANDLES / BREAK CHARACTERS WRONG IN PIM MODE. THIS / REQUIRES VERSION 2 OF SEND.EXE!!!!!!!!!!!!!! / --FIX PROBLEM WITH LAST 1 OR 2 CHARACTERS IN A FILE BEING / LOST IF THEY ARE THE ONLY CHARACTERS IN THE LAST BLOCK. / /VERSION 5.07 / --DO NOT SEND "I" AFTER /X AFTER /D / --DON'T DROP SEND FILENAME CHARACTERS WHEN NOT IN RTS8 / /VERSION 5.08 / --FIX HANG ON SEND IN PIP MODE / /VERSION 5.09 / --FIX PROBLEM WITH MULTIPLE FILES WITH PIP OPTION / ARISING FROM SOME ABOVE FIXES. / /VERSION 6.00 / --MAKE 'RECEIVE' GO THROUGH PROGRAM ON THE PDP-10. / THIS ALLOWS SAVE FILES TO BE BACKED UP ON THE PDP-10. / --FIX FAILURE TO RECOGNIZE "/" AFTER "." AFTER ERROR. / --FIX SOFTWARE WAIT TIME DISCREPENCY BETWEEN TIMESHARE AND / STAND ALONE MODES WHICH CAUSES OCCASIONAL MISSED / CHARACTERS IN STAND ALONE MODE RECEIVE. / --HANGING ON SEND BECAUSE INPUT BUFFER OVERFLOWS (XTTYOU=0). / --FIX PROBLEM WITH FILE LOOKUP WHEN MORE THAN ONE DEVICE IS / USED FOR INPUT. / /VERSION 6.01 / --ALLOW /D TO WORK WITH OTHER SWITCHES. THIS DELETES / INITILIZATION AND ALOWS MORE EFFICIENT USE OF / BATCH FOR SENDING/RECEIVING LISTS OF FILES. USE / THE CCL COMMAND: .TEN /S/D/X. / --INCLUDE "DSKC:" WHEN RUNNING "SEND3" TO PERMIT THE PROGRAM / TO WORK WITH ACCOUNTS NOT HAVING DSKC: IN THEIR SEACH LIST. / --CONDENSE /H RESPONSE. / /VERSION 6.02 / --FIX PRINTING WRONG ERROR MESSAGE WITH /R & FILE NOT FOUND / /VERSION 6.03 (GBI) / --ALLOW TTY'S THAT DON'T "ALWAYS MARK". / /VERSION 6.04 (RWP) / --FORCE ^Q AT PROGRAM STARTUP. / --ALLOW DIFFERENT OUTPUT AND INPUT FILE NAMES ON /R WITHOUT /N. / THUS 10 FILES WITH TWO LETTER EXTENSIONS CAN BE / STATED IN COMMAND LINES. / --FIX HANGING WHEN FILE IS CLOSED /R IN STAND ALONE. / --CORRECT ENTER ERROR CAUSING CRASH / /VERSION 6.05 (RWP) / --FIX CLOSING OF FILES WITH ONE TOO MANY BLOCKS AFTER /R/B. / --LET XON/XOFF WORK FOR /H TYPEOUT. / /VERSION 6.06 (RWP) / --PAD ASCII FILES WITH NULL=200 (INSTEAD OF 000) FOLLOWING / THE ^Z. SOME CUSPS (I.E. RALF) CRASH WITHOUT THIS. / /VERSION 6.07 (RWP) / --FIX ERROR IN CHECKSUM COMPARISON WHEN FIRST EIGHT / BITS XMITTED ARE 000 OR OO1. / --AFTER A CHECKSUM ERROR ON /R, CHANGE FILE EXTENSION TO .CS. / --CLEAR BATCH FLAG WHEN USER TYPES ^\. / /KNOWN BUGS: / 1. PROGRAM GIVES A READ ERROR WHEN READING THE LAST FILE ON / SIDE "B" OF THE RK05 IF THE FILE IS VERY CLOSE TO / THE END (READS PAST END OF DISK). /ALLOW START FROM STANDARD LOCATION IN FIELD 0 / JMP XINIT CDF 10 /ENTRY IF CHAINED TO TAD I (OPT1 /-/D MEANS ENTER WITH NO INITILIZATION AND (400 / I.E. DEBUG SNA CLA JMP XINIT2-1 TAD (B /CHANGE EFFECTIVE START ADDRESS DCA STADDR TAD I (OPT1 AND (7377 DCA I (OPT1 CDF 20 DCA I (CLEAR SKP CLA CMA /ENTRY IF CHAINED TO XINIT2, CDF 20 DCA I (CHAIN CDF 0 TAD (6003 /SET JSW DCA I (7746 CDF 10 TAD I (OPT1 CDF 20 DCA I (LOPT1 CDF 10 TAD I (OPT2 CDF 20 DCA I (LOPT2 CDF 10 TAD I (EQLS CDF CIF 20 DCA I (LEQLS TAD (21 /^Q WITHOUT MARK BIT (ALLOWS TRANSMISSION /EVEN IN TIMESHARE MODE) W10LS /TURN ON ALL FLAGS R10RB KRB CLA TLS CLA TSF /CKECK FOR RTS-8 TAD (-200+20 /STAND ALONE TAD (-20 /TSF SKIPS IF RTS-8 DCA I (KHANGT /SOFTWARE WAIT TIME FOR ^S TO WORK JMP I STADDR STADDR, STARTQ / XINIT, CLA CLL CDF 10 DCA I (OPT1 DCA I (OPT2 DCA I (EQLS IAC JMP XINIT2 / / /(THIS PROGRAM WILL WORK AT ANY BAUD RATE.) TYPICAL SPEED SETTINGS /ARE: XMT=9600,RCV=9600. (OBSERVE THAT WITH RESPECT TO THE 10, /WHAT WE ARE CALLING TRANSMIT SPEED IS REALLY RECEIVE SPEED AND /VICE VERSA.) / FIELD 2 / AUTO INDEX REGISTER USAGE / 10 INTERRUPT POINTER AUTO= 11 / 12 XMTBFR / 13 / 14 / 15 / 16 / 17 / *10 SKIPLOC-1 /INITIALIZE THIS LOCATION 0;0 /(PROTECT AUTO REGISTERS FROM USE AS LITERALS) 0;0;0;0;0 TALK, JMS I [TYPE /INITIATES TALK MODE AFTER FILE XMISSION / OR CTRL-C TEXT "^DEC-10 -^" TALK2, JMS NORMAL /FROM STARTR JMP TALK3 / /*********** THIS IS THE MAIN LOOP FOR CONVERSATION /*********** WITH THE DEC PDP-10 / TALKE, JMS CSQ /HERE AFTER ERRORS TALK3, CLA CMA DCA DOT /SET SWITCH CLL CML IAC CLA /ECHO & WAIT FOR "." (AFTER /E) JMS I [CKERR JMP TALK3 /REPEAT IF NO COMMAND CHARACTER / /*********** / /"INTERRUPT SERVICE CHAIN" / ALTHOUGH THE PROGRAM AS WRITTEN RUNS WITH THE /INTERRUPTS OFF, IT IS WRITTEN SO SIMPLE MODIFICATIONS /WOULD ALLOW IT TO RUN UNDER INTERRUPT CONTROL. RTS-8 /PERFORMS THESE FUNCTIONS IN TIME-SHARE MODE. / START, TAD (SKIPLOC-1 DCA 10 NEXT= JMP . CLA TAD I 10 /TRANSFER CONTROL TO NEXT LOCATION SNA /IN THE LIST OF INTERRUPT SERVICE NEXT /ROUTINES. DCA TEMPX JMP I TEMPX / / SKIPLOC=. D10IN /LOCATIONS OF INTERRUPT SERVICE ROUTINES XD10OU, D10OUT D10IN /D10IN IS EVERY OTHER ONE CHECKED XTTYIN, TTYIN D10IN /TO AVOID LOSING AS MANY CHARACTERS AS XTTYOU, TTYOUT D10IN /POSSIBLE IN TIMESHARE MODE. PSEUDO, 0 /USED DURING WAITS FOR PSEUDO INTERRUPT START / / /************************************************** / KL8-J IOT'S FOR TALKING TO THE PDP-10 W10SK=6441 W10LS=6446 R10SK=6431 R10RB=6436 /************************************************** / CMDCHR="/ /SWITCH TO COMMAND MODE CRASH="\&277 /RETURN TO OS/8; CTRL-SHIFT-L / TEMPX, 0 /TEMPORARY STORAGE FOR INTERRUPT T, 0 /TEMP STORAGE FOR OTHER USES TT, 0 TTT, 0 / NORMAL, 0 /RESET ALL INTERRUPT POINTERS TO TALK MODE TAD (D10OUT DCA XD10OU TAD (TTYIN DCA XTTYIN TAD (TTYOUT DCA XTTYOU TAD [R10SK DCA I [D10IN TAD [TSF DCA I [TTYOUT DCA PSEUDO JMP I NORMAL / / INCHAR, 0 /STORES INPUT CHARACTER FROM TTY OUCHAR, 0 /STORES CHARACTER TO OUTPUT TO TTY / DURING TYPE MODE (TTYOU2) CTRLS, 0 /FLAGS STOP BY CTRL-S MODE / -4000 WHEN ^S FROM 10 / 0 IF NO ^S / +1 WHEN ^S FROM 8 CSAVE, 0 /PRIORITY CHARACTER FOR XMITTING TO 10 / (^S OR ^Q) CHAIN, 0 /NEGATIVE IF DEC10 CHAINED TO /POSITIVE IF NOT BUT INIT. STATE /ZERO OTHERWISE GETP, INBUFR PUTP, INBUFR DIRPTR, 0 /POINTS TO DIRECTORY ENTRY CKECHO, 0 /CONTAINS LAST CHARACTER ECHOED FROM 10 OUCR, 0 /PRIORTY OUTPUT TO TTY (TTYOUT) DOT, 0 /-1 IF WAITING FOR RESPONSE TO PDP-10 "." PROMPT CKSUM, 0; 0 CLEAR, 1 /SET WHEN SOMETHING HAS CHANGED TTY SETTINGS LOPT1, 0 /VALUES OF OPTIONS 1 LOPT2, 0 LEQLS, 0 *200 / COME HERE AFTER COMMAND DECODED CALL OR CHAIN / B, TAD LOPT1 /DON'T ALLOW ANY ILLEGAL SWITCHES IFDEF PIP IFNDEF PIP SZA CLA JMP I [EROR TAD LOPT2 AND (4636 /N O R S X SZA CLA JMP I [EROR TAD [20 AND LOPT1 /-/H (HELP) SWITCH? SZA CLA JMP I (HELP CLA IAC AND LOPT1 /CHECK FOR /L (LOGIN) SWITCH TAD LEQLS /AN = ACCT OPTION ALSO MEANS LOGIN SNA CLA JMP LOC12 /NOT THERE, SKIP LOGIN PROCEEDURE TAD LEQLS /WHICH ACCOUNT DO WE LOGIN TO? SZA CLA JMP BNOEQ /DON'T USE THE DEFAULT ONE / JMS I [XMTTXT LOGIND /LOGIN TO DEFAULT ACC'T LOC11, CLA CLL TAD (-"J /REPLY "JOB ..." JMS I [CKERR /MAKE SURE LOGIN IS COMPLETED OK DCA OUCR JMS NORMAL /TURN ECHOING BACK ON AFTER XMTBFR CALL CLA CLL CML IAC JMS I [CKERR /WAIT FOR "." CLA LOC12, TAD LOPT2 AND (140 /-/S AND /R SNA JMP AL /NEITHER /R NOR /S SET TAD (-140 SNA CLA JMP I [EROR /BOTH /R AND /S SET JMP I [LOC1 AL, TAD [200 /NEITHER /R NOR /S -- AND LOPT1 /IS IT /E ? SZA CLA JMP I [LOC1 /YES JMP A /NO -- DO APROPRIATE RETURN /THESE ARE THE EFFECTIVE INTERRUPT SERVICE ROUTINES /FOR NORMAL (TALK MODE) I/O OPERATION / /***** TELETYPE INPUT / TTYIN, KSF /TALK MODE KEYBOARD INPUT SERVICE NEXT KRS AND [177 TAD [200 TAD [-CRASH /FORCED RETURN SNA JMP I (OS8L1C TAD (CRASH-223 /FOR ACTUAL TYPED CHARACTERS, CHECK FOR SNA / CTRL-S AND CTRL-Q JMP XCTRLS TAD (-221+223 SNA JMP XCTRLQ TAD [221 TTYI1, ISZ DOT /CKECK THIS CHAR FOR COMMAND CHARACTER? CLA /NO TAD (-CMDCHR /CHECK FOR COMMAND CHARACTER SNA CLA JMP I [COMMAND /SWITCH MODES KRB AND [177 TAD [200 DCA INCHAR DCA DOT NEXT / /***** KL8-J (DEC-10) OUTPUT / D10OUT, W10SK /TALK MODE OUTPUT TO DEC-10 NEXT TAD CSAVE /USE THIS CHARACTER FIRST SNA JMP D10OU2 W10LS CLA DCA CSAVE NEXT D10OU2, TAD INCHAR SZA W10LS CLA DCA INCHAR NEXT / /***** KL8-J (DEC-10) INPUT / D10IN, R10SK /TALK MODE INPUT FROM DEC-10 NEXT R10RB DCA TTT TAD TTT TAD (-223 /^S SNA JMP YCTRLS TAD (-21+223 /^Q SNA CLA JMP YCTRLQ D10IN2, TAD TTT JMS I [PUT /STUFF CHARACTER INTO BUFFER TO NEXT /MAKE I/O INDEPENDENT OF RELATIVE /SPEEDS OF DEC-10 & TTY. YCTRLS, TAD (3777 AND CTRLS TAD (4000 DCA CTRLS JMP D10IN2 YCTRLQ, TAD (3777 AND CTRLS DCA CTRLS JMP D10IN2 XCTRLQ, TAD [TSF /RESTORE OUTPUT IF CTRL-Q XCTRLS, DCA I [TTYOUT /STOP OUTPUT IF CTRL-S KRB /CLEAR THIS CHARACTER NEXT PAGE /TRANSMIT ONE BUFFER LOAD TO THE DEC-10 / / IF AC<0 ON ENTRY, ECHO ON KEYBOARD / IF AC=0 ON ENTRY, BINARY (SEND 0'S TOO) / IF AC>0 ON ENTRY, NO ECHO / /CALLING SEQ: / JMS XMTBFR / # LOCATIONS IN BUFFER / SA OF BUFFER / / AC NEG. ON RETURN IF NO ^Z SENSED / EXITS VIA IF ASCII ^Z SENSED / XMTBFR, 0 DCA XMTECHO TAD CCOUNT SPA SNA CLA /IS THIS FIRST CALL? JMP .+3 /NO TAD (-100 /YES SET UP RECORD SIZE DCA CCOUNT TAD I XMTBFR /# CHARACTERS CMA DCA GK1 ISZ XMTBFR CMA /SO WE CAN USE AUTOINDEX REGS TAD I XMTBFR /SA OF BUFFER DCA GP1 CLL CMA RTL /-3 DCA GC1 TAD (SNA DCA XMTL2+3 /DON'T SEND ZEROS UNLESS BINARY TAD XMTECHO SZA JMP .+3 TAD (JMP XMTL3 DCA XMTL2+3 /SEND ZEROS SPA CLA JMP XMTL2 /ECHO TAD [XMTNO /XMTNO FOR NO ECHO DCA XTTYOU XMTL2, JMS GETCH1 SPA JMP XMTDON /BUFFER EMPTY (AC NEG.) HLT /JMP XMTL3 (BINARY) OR SNA (ASCII) JMP XMTL2 TAD (-232 /CTRL-Z? SNA JMP DONE /ASCII EOF (^Z) FOUND TAD [232 XMTL3, JMS XSEND1 TAD XST /DID WE SEND ^Z? (ONLY POSSIBLE IN TAD (-232 / BINARY MODE) SZA CLA JMP XMTL2 TAD (-100 /RESET COUNTER BECAUSE ^Z ACTS AS BREAK DCA CCOUNT JMS XSEND1 /YES - SEND 0 TO SAY NOT REALLY EOF JMP XMTL2 / XMTDON, ISZ XMTBFR JMP I XMTBFR / / / XSEND1, 0 /SEND ONE CHARACTER TO THE 10 DCA XST TAD XST JMS ADDCK /BUMP CHECKSUM XSEND2, TAD CTRLS SMA CLA /CTRL-S STOP MODE? JMP .+4 /NO TAD (XSEND2 /YES, HANG DCA PSEUDO NEXT TAD (.+2 DCA PSEUDO TAD INCHAR /WAIT UNTIL PREVIOUS CHARACTER SENT SZA CLA NEXT TAD CCOUNT /ARE WE SENDING BREAK CHARACTER NOW? SMA SZA JMP XSEND3 /DON'T BREAK DATA INTO RECORDS SMA CLA JMP XSEND4 /YES - COMPLETE IT IFNDEF PIP JMP XSEND3 /NO TAD [232 /YES - START SENDING IT JMS ADDCK TAD [232 DCA INCHAR NEXT XSEND4, ISZ INCHAR /SEND SECOND PART OF BREAK IAC JMS ADDCK TAD (-77 DCA CCOUNT /RESET COUNTER - BUFFER WILL HAVE / 1 -- (76 CHARACTERS) -- 232 NEXT XSEND3, CLA TAD XST /SEND OUT START CHARACTER TAD [1000 /KLUDGE FOR SENDING ABSOLUTE ZEROS DCA INCHAR DCA PSEUDO JMP I XSEND1 / XST, 0 XMTECHO, 0 CCOUNT, 1 GP1=12 GC1,0 GK1,0 GETCH1, 0 ISZ GC1 JMP GETCB1 GETCA1, CLL CMA RTL DCA GC1 CMA CLL RAL TAD GP1 DCA GP1 TAD I GP1 AND [7400 DCA T TAD I GP1 AND [7400 RTR RTR TAD T RTR RTR JMP .+6 GETCB1, ISZ GK1 JMP .+3 CMA JMP I GETCH1 /BUFFER EMPTY, RETURN AC=-1 TAD I GP1 AND [377 JMP I GETCH1 PAGE / ADDCK, 0 /ADD CHARACTER TO CHECKSUM CLL TAD CKSUM /ADD THIS VALUE TO CKSUM DCA CKSUM ISZ CKSUM /ALSO COUNT CHARACERS SO MISSING 000 CHARACTER / WILL CAUSE CKSUM ERROR SZL ISZ CKSUM+1 NOP JMP I ADDCK /TELETYPE MESSAGE OUTPUT ROUTINE / CALLING SEQUENCE / JMS TYPE / TEXT "" / /NOTE: A "^" IN THE MESSAGE PRODUCES A CRLF. / TYPE, 0 TAD XTTYOU DCA TTYPT /SAVE OLD TTY OUTPUT LOC TAD [TTYOU2 /INSERT NEW DCA XTTYOU TYP1, TAD I TYPE RTR RTR RTR JMS TYPECHR TAD I TYPE JMS TYPECHR ISZ TYPE JMP TYP1 TYPECHR, 0 AND [77 SZA JMP TYP5 ISZ TYPE JMS TYP3 /WAIT FOR LAST CHARACTER TO GO OUT TAD TTYPT /RESTORE OUTPUT LOC DCA XTTYOU JMP I TYPE TYP5, TAD (-36 /^ SZA JMP TYP4 TAD [215 JMS TYP3 TAD (212 JMS TYP3 JMP I TYPECHR TYP4, TAD (-40+36 SPA TAD [100 TAD [240 JMS TYP3 JMP I TYPECHR / / TYP3, 0 /TYPE CHARACTER IN AC /MUST HAVE <-- BEFORE CALLING DCA TYPT TAD (.+2 DCA PSEUDO TAD I [TTYOUT SNA CLA NEXT /HANG IF IN ^S STATE TAD OUCHAR SZA CLA NEXT DCA PSEUDO TAD TYPT DCA OUCHAR JMP I TYP3 TYPT, 0 TTYPT, 0 /READ AND ECHO A CHARACTER FROM THE TTY AND CHECK /FOR A CTRL-C. USED TO GET TYPED CHARACTERS FOR OTHER /THAN SENDING TO THE PDP-10 (E.G. FOR /N OPTION). RCHAR, 0 TAD (.+2 DCA PSEUDO TAD INCHAR SNA NEXT DCA INCT DCA INCHAR DCA PSEUDO TAD INCT TAD (-203 SNA CLA JMP RCTRL1 TAD INCT JMS TYP3 TAD INCT JMP I RCHAR / TTYOU2, TSF /TTY OUTPUT INTERRUPT SERVICE /DURING MESSAGE TYPEOUTS NEXT TAD OUCHAR SZA TLS CLA DCA OUCHAR NEXT INCT, 0 / RCTRL, KSF /CHECK FOR CONTROL CHARACTER DURING XFER OPERATIN NEXT KRB AND [177 TAD [200 TAD [-CRASH SNA JMP I (OS8L1C /CRASH RETURN TAD (CRASH-203 SZA CLA NEXT ISZ CLEAR /FORCE REINIT IN CASE IN "SEND" RCTRL1, JMS I [CSQ JMP TALK /CTRL-C RETURN / THIS IS THE EFFECTIVE PROGRAM STARTING ADDRESS. / STARTQ, JMS I [CSQ /INITIALIZE DEC-10 PARAMETERS TAD CHAIN /CHAINED TO? SPA CLA JMP I [B /YES STARTR, DCA CHAIN /INDICATE PROGRAM INITIALIZED / HERE FROM ABOVE OR EMPTY CD CALL / AFTER A CHAIN. JMS I [XMTTXT /SEND "I" CMD01 CLA CLL /NO ECHO UNTIL "U" TAD (-"U /REPLY STARTS "U OF R ..." JMS I [CKERR DCA OUCR /OUTPUT THE "U" TAD (1001 / /O OR /X ? AND LOPT2 /RETURN TO OS/8 (E.G. FOR LOGOFF) SZA CLA JMP I [OS8 JMP TALK2 /GO LET USER CONVERSE WITH THE DEC-10 PAGE / XMTNO, CLL CLA /RECEIVES & JUNKS ALL CHARACTERS FROM /THE 10 WHILE CHECKING FOR ERRORS JMS I [CKERR JMP XMTNO /COME HERE AFTER COMMAND DECODER CALL AND LEGAL SWITCHES. / ONE OF /R, /S, OR /E IS SET / LOC1, CDF 10 TAD I [7605 /WAS A DEVICE OR FILENAME ENTERED? CDF 20 SNA CLA JMP I [EROR /NO TAD LOPT1 AND [200 SZA CLA JMP SENDL1 /DON'T CHANGE TTY SETTINGS IF /E TAD [2000 /CHECK /N FOR EXPLICIT DEC10 FILE AND LOPT2 SNA CLA JMP LOC13 /NOT THERE, DON'T READ FILENAME DCA XD10OU /DON'T SEND TYPED CHARACTER TO 10 TAD [TTYOU2 /TTY ECHO FOR RCHAR DCA XTTYOU LOC121, JMS I [TYPE /REQUEST DEC10 FILE SPECIFICATION TEXT /^DEC-10 FILE: / TAD [XBUF-1 DCA AUTO CLL CMA RAL DCA TT SEL2, JMS I (RCHAR TAD (-215 SNA JMP DOIT TAD (215-377 SNA JMP LOC121 TAD [377 AND (77 /KLUDGY BUFFER PACKING ROUTINE ISZ TT JMP SEL22 TAD TTT DCA I AUTO CLL CMA RAL DCA TT JMP SEL23 SEL22, RTL CLL RTL RTL SEL23, DCA TTT JMP SEL2 DOIT, TAD TTT DCA I AUTO JMS I [TYPE TEXT "^" JMS NORMAL /RESTORE I/O SWITCHES LOC13, TAD (RCTRL DCA XTTYIN TAD [100 AND LOPT2 /-/R SWITCH? SZA CLA JMP I [RECEIVE /YES JMP SEND /INITIALIZE OR REINITIALIZE THE DEC-10 PARAMETERS. / CSQ, 0 JMS NORMAL TAD CLEAR SNA CLA /HAVE TTY SETTINGS BEEN MESSED UP? JMP I CSQ DCA CTRLS /MAKE SURE SENDING IS ALLOWED TAD (R10RB /SET SO ALL INPUT FROM 10 IS JUNKED DCA I [D10IN TAD [XMTNO /AND JUNK ANYTHING IN BUFFER DCA XTTYOU IFDEF PIP < TAD (23 /(D10SHR DOES NOT ALLOW 223 TO PASS DCA CSAVE > JMS I [XMTTXT CKST DCA CLEAR JMS NORMAL /RESET EVERYTING CLL JMS I [CKERR /WAIT FOR LF ECHO DCA OUCR JMP I CSQ BNOEQ, TAD LEQLS AND (77 DCA LEQLS TAD LEQLS CLL RTL RAL AND (707 TAD LEQLS AND (707 TAD (6060 DCA ACTNOT JMS I [XMTTXT LOGIN JMP LOC11 /USER MUST SUPPLY PASSWORD /***** TELETYPE OUTPUT / TTYOUT, TSF /TALK MODE OUTPUT TO TTY NEXT TAD OUCR SNA JMS I [GET SPA SNA NEXT AND (177 TAD (-40 SPA /IS IT CONTROL CHARACTER? NOP /TO HAVE THE MACHINE PRINT ^X FORM FOR /CONTROL CHARACTERS, DELETE THIS NOP AND /REMOVE THE "/" FROM THE NEXT LINE "JMP TTYL2" / JMP TTYL2 /YES TAD (40 IFDEF PIP TTYL3, TLS DCA CKECHO DCA OUCR NEXT IFNDEF PIP TTYL2, TAD (-16+40 SMA JMP TTYL4 /PRINT ONLY THOSE .GT. TAD (16 JMP TTYL3 TTYL4, TAD (100+16 /MAKE IT REAL CHARACTER DCA OUCR /SAVE IT TO PRINT NEXT TIME TAD ("^ TLS /PRINT UP-ARROW NEXT /**************** SEND PROCESSING ***** / SEND, JMS I [XMTTXT SENDTX SENDL1, CIF CDF 10 /(ENTER HERE IF /E FROM JMS I [2000 /CALL SPECIAL LOOKUP ROUTINE FROM 'DIRECT.PA' SMA /AC HAS LENGTH OF FILE JMP I [FINISS /NO MORE FILES CDF 10 DCA SMBLKS TAD I (BLOCK DCA SBLOCK TAD I (INHAND DCA IHAND TAD I (EPTR /GET LOC OF FILENAME DCA DIRPTR CDF 20 TAD [200 / /E - EXECUTE SWITCH AND LOPT1 SZA CLA JMP SL9 /YES - DON'T SEND FILE NAME TAD [2000 /CHECK /N SWICH AND LOPT2 SZA CLA /USE PREVIOUSLY READ FILENAME JMP SEL4 TAD SMBLKS /4000 IF NON-FILE STRUCTURED CLL RAL SNA CLA TAD [10 /CHANGE CDF 0 TO CDF 10 IF NON-FILE STRUCTURED TAD (CDF 0 JMS MOVE CLL CLA TAD (-"* JMS I [CKERR /WAIT FOR "*" PROMPT CLA IFDEF PIP < ISZ CLEAR > / /ASCII SEND PROCESSING / SEL4, JMS I [TYPE TEXT /^/ TAD (TTYOUT-XMTNO /TRICK FOR FORCING ECHOING FILE NAME JMS I [XMTTXT XBUF IFNDEF PIP < CLL CML CLA RTR /CHECK /B AND LOPT1 SZA CLA CMA TAD (ECR DCA .+3 TAD (TTYOUT-XMTNO JMS I [XMTTXT ECR CLL CML CLA RAR DCA CTRLS /FORCE WAIT FOR ^Q > IFDEF PIP < JMS I [XMTTXT TTYT > IFNDEF PIP < CLL CML JMS I [CKERR CLA > SL9, DCA CKSUM DCA CKSUM+1 / /BINARY, ASCII AND /E(XECUTE) REJOIN /MAIN LOOP FOR SENDING BUFFER LOADS OF INFO TO THE PDP-10 / SL5, CIF 0 JMS I IHAND 2020 /READS 10(8) BLOCKS XBUF SBLOCK, 0 HLT TAD [10 TAD SMBLKS /HOW MANY BLOCKS LEFT? SPA CLA JMP SL11 /MORE THAN 10 TAD SMBLKS /MULTIPLY IT BY -400 CIA RTL CLL RTL RTL RTL SKP SL11, CLA CLL CML RAR /4000 => AC DCA SL10 TAD (2200 / /B AND /E AND LOPT1 CLL RTL /PUTS /B IN LINK CML RTL /PUTS /E IN SIGN BIT FOR ECHO / (AC=0 NOW IF BINARY) JMS I [XMTBFR SL10, 4000 XBUF SNA CLA HLT /ALWAYS GOES TO END OF BUFFER / IN VERSION 5 (OR IF ASCII) TAD [10 TAD SBLOCK /INCREMENT CURRENT BLOCKJ DCA SBLOCK TAD [10 TAD SMBLKS /INCREMENT BLOCK COUNTER SMA JMP DONE DCA SMBLKS JMS I [TYPE TEXT /$/ JMP SL5 / SMBLKS, 0 IHAND, 0 IFDEF PIP < BADLIN, JMS NORMAL TAD [XMTNO /NO OUTPUT DCA XTTYOU TAD (R10RB /JUNK ALL INPUT DCA I [D10IN TAD (RCTRL DCA XTTYIN DCA CTRLS JMS I [TYPE TEXT \^BAD LINE\ NEXT > PAGE FIN4, CLL CMA RTL /RESET POINTERS & PHASE FOR SENDING CHECKSUM DCA GC1 TAD (TT-1 DCA GP1 DCA GK1 TAD CKSUM /MOVE CKSUM SO IT DOESN'T MODIFY CIA CLL DCA TT / ITSELF WHILE SENDING TAD CKSUM+1 CMA SZL IAC DCA TT+1 JMS GETCH1 JMS I [XSEND1 JMS GETCH1 JMS I [XSEND1 JMS GETCH1 JMS I [XSEND1 TAD [232 /FINAL BREAK CHARACTER JMS I [XSEND1 JMP FIN3 / / HANG, 0 /STOP TRANSMISSION FROM THE 10 TAD (.+2 /DURING HANDLER CALLS DCA PSEUDO TAD INCHAR /WAIT FOR FREE CHANNEL SZA CLA NEXT DCA CTRLS /PROTECT FROM CLEARING CTRL-S TAD (223 /SEND CTRL-S DCA INCHAR TAD (HANG3 DCA PSEUDO HANG2, TAD KHANGT /PLAY GAMES SO WE REALLY WAIT FOR /^S TO BE SENT AND FOR THE 10 /TO REALLY QUIT SENDING. DCA HANGT NEXT HANG3, DCA CTRLS TAD PUTP TAD OLDPUT SNA CLA JMP HANG4 TAD PUTP CIA DCA OLDPUT JMP HANG2 HANG4, ISZ HANGT /WAIT FOR AWHILE NEXT /FOR 10 TO QUIT SENDING DCA PSEUDO JMS I [TYPE TEXT /$/ JMP I HANG / UNHANG, 0 /RESTART TRANSMISSION TAD [221 DCA INCHAR ISZ CTRLS JMP I UNHANG JMP BADLIN / OLDPUT, 0 HANGT, 0 KHANGT, -20 /DEPENDENT ON WHETHER IN RTS8 / GET, 0 /GET ONE CHARACTER FROM ASCHRON. BUFFER TAD [-INBUFR-LENGTH TAD GETP SZA CLA /MAKE BUFFER CIRCULAR JMP .+3 TAD (INBUFR DCA GETP TAD CTRLS /WAS CTRL-S SENT? CLL RAL /DON'T CONSIDER 4000 BIT SNA CLA JMP GETC /NO - DON'T WORRY ABOUT CTRL-Q TAD I GETP /IS THE BUFFER EMPTY? SMA CLA /BUFFER EMPTY? JMP GETC /NO TAD [221 /CTRL-Q DCA CSAVE TAD [R10SK /RESTORE WHAT MIGHT HAVE BEEN CLEARED DCA I [D10IN /DURING BACKGROUND ^S DCA CTRLS GETC, TAD I GETP SMA ISZ GETP JMP I GET / PUT, 0 /PUT ONE CHARACTER INTO ASCHRON. BUFFER DCA I PUTP ISZ PUTP TAD PUTP TAD [-INBUFR-LENGTH SZA CLA JMP .+3 TAD (INBUFR DCA PUTP CMA DCA I PUTP TAD GETP /WHERE ARE WE IN THE BUFFER? CIA TAD PUTP SPA TAD [LENGTH /AC CONTAINS (+) # CHARACTERS IN BUFFER TAD (-LENGTH+2 SNA /AT END OF BUFFER? DCA I [D10IN /DON'T READ ANY MORE CHARACTERS (FOR D10SHR) TAD (MAXCHR+LENGTH-2 SZA CLA /AT ^S POINT? JMP I PUT /NO TAD (223 /CTRL-S DCA CSAVE ISZ CTRLS /SKIPS IF TOO MANY ^S'S SENT -- MEANING / THE 10 IS IGNORING THEM. JMP I PUT JMP BADLIN / LENGTH=200 MAXCHR= 14-LENGTH /NUMBER OF CHARACTERS AFTER WHICH TO SEND CTRL-S / / PAGE INBUFR, -1 /CIRCULAR INPUT BUFFER *INBUFR+LENGTH XBUF=. *.+4000 /DEVICE I/O BUFFER FIN3, CIF CDF 10 TAD [2000 AND LOPT2 SNA CLA JMP I (NENT /(NO REPEAT IF /N) CIF CDF 20 FINISS, CLL CLA TAD (-"* JMS I [CKERR /NOW WAIT FOR "*" CLA JMS I [XMTTXT /MUST GET OUT OF "SEND" FILE PROMPT CTRLC FINISH, CLA CLL IAC JMS I [CKERR DCA OUCR / / TAD CHAIN SPA CLA JMP I [OS8 JMP I [AL0 /**************** RECEIVE PROCESSING ***** / RECEIVE, CIF CDF 10 IAC JMS I [2000 /CALL SPECIAL MODE FILE LOOKUP FROM 'DIRECT.PA' SMA SZA CLA /LENGTH IN AC; 0 MEANS NON-FILE STRUCTURED JMP FINISH+3 TAD [2000 AND LOPT2 SZA CLA JMP REL4 /OPTION /N TAD (7606 DCA DIRPTR TAD (CDF 10 JMS MOVE REL4, JMS I [TYPE TEXT /$/ JMS I [XMTTXT /RU SEND3 SENDTX CLL TAD (-"* JMS I [CKERR CLA TAD (2010 /CHECK /B & /I AND LOPT1 SNA JMP REL6 CLL RTL SZL CLA TAD (5702-5711 / /B SET, THEREFORE /B TAD (5711 /ELSE MUST BE /I DCA CTYPE3 CMA REL6, TAD (CTYPE3+1 DCA REL5 JMS I [XMTTXT XBUF /FILE NAME JMS I [XMTTXT REL5, 0 /(/B OR /I) & / / DCA CKSUM DCA CKSUM+1 CLL JMS I [CKERR DCA TODTM TAD (TODGET+1 DCA XTTYOU /READ REST OF FILE TAD TODTM SKP TODL1, JMS TODGET JMS I [OUTCHR TAD TODTM JMS ADDCK TAD TODTM TAD (-232 SNA CLA JMP TODZ JMP TODL1 TODGET, 0 JMS I [GET SPA NEXT DCA TODTM TAD TODTM JMP I TODGET TODTM, 0 TODZ, JMS TODGET /FOUND ^Z, CHECK NEXT CHARACTER JMS ADDCK TAD TODTM SNA CLA JMP TODL1 /HAS ZERO FOLLOWINT IT MEANS REAL 232 /IF NOT, SHOULD BE A SECOND 232 /JUNK IT CLA CLL CMA RTL /-3 => AC; THIS CORRECTS FOR EXTRA ISZ'S JMS ADDCK / DONE BY ADDCK FOR CHECKSUM COMPARISON. CMA /THIS EXTENDS THE -3 TAD CKSUM+1 / TO THE HIGH ORDER WORD DCA CKSUM+1 JMS TODGET /THE NEXT CHARACTER -- PART OF CHECKSUM JMS ADDCK /ADD IT IN IN APPROP. FORMAT JMS TODGET TAD CKSUM+1 DCA CKSUM+1 JMS TODGET RTL RTL AND (7400 JMS ADDCK TAD TODTM RTR CLL RTR RAR AND (7400 TAD CKSUM+1 DCA CKSUM+1 TAD [XMTNO /NO MORE INPUT DCA XTTYOU /ACCEPTED -- JUNK IT ALL JMP CKSCHK PAGE MOVE, 0 DCA MOVE1 TAD [XBUF-1 /PUT FILENAME FROM DIRECTORY DCA AUTO / INTO COPY COMMAND CLA CLL CMA RTL DCA TTT REL1, JMS MOVE1-1 TAD I DIRPTR SNA JMP REL2 /END OF FILE NAME, EVEN # CHARS AND (77 SNA CLA JMP REL3 /END OF FILE NAME, ODD # CHARS TAD I DIRPTR CDF 20 DCA I AUTO /STORE TWO CHARACTERS ISZ DIRPTR ISZ TTT JMP REL1 JMP MREL4 REL2, ISZ DIRPTR /BUMP TO EXTENSION ISZ TTT JMP REL2 MREL4, JMS MOVE1-1 TAD I DIRPTR CLL RTR RTR RTR /1ST CHAR TO LOW ORDER BITS AND (77 TAD (".&77^100 /PUT "." IN HIGH ORDER BITS CDF 20 DCA I AUTO JMS MOVE1-1 TAD I DIRPTR AND (77 CLL RTL RTL RTL /2ND CHAR TO HIGH ORDER BITS CDF 20 DCA I AUTO JMP I MOVE REL3, TAD (".&77 TAD I DIRPTR CDF 20 DCA I AUTO JMS MOVE1-1 ISZ DIRPTR /BUMP TO EXTENSION ISZ TTT JMP .-2 TAD I DIRPTR CDF 20 DCA I AUTO DCA I AUTO JMP I MOVE 0 MOVE1, HLT /STUFFED WITH CDF NN JMP I MOVE1-1 A, CDF 10 TAD I [7605 CDF 20 SZA CLA JMP EROR /FILE STATED WITH IMPROPER SWITCHES TAD CHAIN SZA CLA JMP STARTR AL0, TAD LOPT2 / /O OR /X - EXIT TO PDP-8 AND (1001 SZA CLA JMP I [OS8 /RETURN TO OS/8 IF /O OR /X SWITCH JMS I [CSQ JMP TALK / / FIN5, TAD CHAIN /FROM /E WHEN FINISHED SENDING SMA CLA JMP TALK2 CLA CLL CML IAC /WAIT FOR "." AFTER /E JMS I [CKERR CLA JMP I [OS8 EROR, JMS I [TYPE TEXT "^? TYPE /H FOR HELP^" JMP HELPY / COMMAND, JMS NORMAL CIF 10 JMS I [200 /CALL USR -- CD CALL -- SPECIAL MODE 5 5200 TLS /IT SCREWS UP TTY -- RESET IT CDF 10 TAD I (OPT1 /GET SWITCHES DCA LOPT1 TAD I (OPT2 DCA LOPT2 TAD I (EQLS DCA LEQLS CDF 20 JMP B / LOGIN, TEXT \LOG 1001,10\ ACTNOT=.-1 TEXT \^M\ PAGE CKERR, 0 /LINK = 0 -- NO ECHO /LINK.NE.0 -- ECHO / WAIT FOR AC CHARACTER (AC < 0) / FIRST CHAR AFTER LF (AC = 0) / "." AFTER LF (AC > 0) /CHARACTER IS RETURNED IN AC /IF IT'S A "?", BEGIN ECHO & TALK MODE DCA CKEL1 /NEG OF CHARACTER TO WAIT FOR IF ANY SZL /LINK NON-ZERO IF ECHO SHOULD BE ON /*** NOP THE SZL INSTRUCTION TO FORCE / ECHOING OF EVERYTHING FOR DEBUGGING TAD (CKGET-GET TAD [GET DCA CKEL TAD CKEL1 SPA CLA JMP CKERR7 /WAIT FOR AC CHARACTER CKERR4, TAD (.+2 /WAIT FOR DCA XTTYOU JMS I CKEL SPA SNA NEXT AND [177 TAD (-12 SZA CLA NEXT CKERR7, TAD (.+2 /WAIT FOR AC CHARACTER OR "." DCA XTTYOU JMS I CKEL SPA SNA NEXT DCA CKER2 /SAVE THE CHARACTER TAD CKER2 AND [177 TAD (-77 /"? SNA CLA JMP CKER3 TAD CKEL1 SMA JMP CKER5 /LOOKING FOR DOT TAD CKER2 /COMPARE IT TO CHARACTER RECEIVED AND [177 /DON'T MATCH PARITY BIT SZA CLA /SAME? NEXT /NO - TRY ANOTHER ONE CKER6, DCA XTTYOU TAD CKER2 JMP I CKERR / CKEL, 0 CKEL1, 0 CKER2, 0 CKER3, CLA SKP /FOUND ERROR CODE "?" JMP OS8L1 /EXECUTED ONLY IF ERROR ON LOGOUT TAD CKER2 /NOTE: THIS RESULTS IN TWO "?"'S OUTPUT IF ONE /OCCURS AS THE FIRST CHARACTER IN A LINE /AND THE ECHO MODE IS ALREADY ON. DCA OUCR JMS NORMAL CLL CML JMS CKERR CLA TAD CHAIN SMA CLA JMP TALKE DCA CKER3 JMP I [OS8 CKER5, SNA CLA /FIRST CHARACTER OR "."? JMP CKER6 /FIRST CHARACTER -- EXIT TAD (-". /"." TAD CKER2 AND [177 SZA CLA JMP CKERR4 JMP CKER6 /FOUND THE DOT -- EXIT CKGET, 0 TAD CKECHO /ANY CHARACTERS OUTPUT? SNA JMP I [TTYOUT /NO - SERVICE POSSIBLE TTY INTERRUPT DCA T DCA CKECHO /CLEAR IT TAD T JMP I CKGET OS8, CLA IAC /RETURN TO OS/8 AND LOPT2 /CHECK FOR /X -- NO LOGOUT SZA CLA JMP OS8L1 DCA .-2 /PROTECT FROM LOOP IF LOGOUT ERROR DCA CKER3 /RETURN TO OS8 IF LOGOUT ERROR JMS I [CSQ TAD (TTYOUT-XMTNO /TRICK XMTTXT INTO ECHOING JMS I [XMTTXT CKILL CLA CLL CML IAC JMS I [CKERR /HERE AFTER CRASH CHARACTER OS8L1C, CLA CLL CMA RTR /5777 => AC CDF 0 AND I (7777 DCA I (7777 /CLEAR BATCH FLAG CDF 20 OS8L1, KRB /PROTECT FROM LOOP IF CRASH CHARACTER CLA JMS I [TYPE TEXT "^OS/8 -" CDF CIF 0 JMP I [7605 LOGIND, TEXT \LOG 1001,1004,PDP8^M\ PAGE / / HELP, JMS I [TYPE /TYPE HELP TEXT TEXT \(6.07) AFTER "." PROMPT, TYPE: \ *.-1 TEXT \^ / DEV:FILENAME.EXT [/ ... ] \ *.-1 TEXT "^(CRASH = CTRL-\) " *.-1 TEXT \^(WILD CARDS FOR /S ONLY.) \ *.-1 IFNDEF PIP IFDEF PIP *.-1 TEXT "^/C - CURRENT DATE (/S) " *.-1 TEXT "^/D - NO INIT (FROM CCL) " *.-1 TEXT "^/E - EXECUTE " *.-1 TEXT "^/H - HELP " IFNDEF PIP < *.-1 TEXT "^/I - IMAGE (PAL10) MODE (/R) " > *.-1 TEXT "^/L - LOGIN (=NN FOR OTHER ACCTS)^/N - NAME DEC10 FILE " *.-1 TEXT "^/O - LOGOFF & RETURN TO OS/8 " *.-1 TEXT "^/R - RECEIVE FROM DEC-10^/S - SEND TO DEC-10 " *.-1 TEXT "^/X - DON'T LOGOFF & RETURN TO OS/8^ " IFDEF PIP < *.-1 TEXT \(PIP)^\ > HELPY, TAD LITDOT /SIMULATE MONITER "." PROMPT DCA OUCR /IT'S REALLY STILL WAITING AFTER "HELP" JMP I .+1 AL0 LITDOT, ". /(CAN'T HAVE LITERALS UP THERE) / / IFDEF PIP < SENDTX, TEXT \TTY NO PAGE NO ECHO TAPE^MR PIP^M\ TTYT, TEXT \=TTY:^Q^M^J\ > IFNDEF PIP < SENDTX, TEXT \RU DSKC:SEND3[1001,1002]^M\ > CTYPE3, 0 TEXT \^M\ IFDEF PIP < CKST, TEXT \^C^CTTY ECHO NO TAB NO TAPE PAGE NO FORM^M^J\ > IFNDEF PIP < CKST, TEXT \^Z^Z000^Z^C^CTTY NO TAB PAGE NO FORM^M\ > CMD01, TEXT \I^M\ CKILL, TEXT \R LOGOUT^M\ CTRLC, TEXT \^C\ IFNZRO .&100 /TRANSMIT PACKED ASCII TEXT TO THE DEC-10 (NEVER ECHO) / /CALLING SEQUENCE: / JMS XMTTXT / / XMTTXT, 0 TAD [XMTNO /DON'T ECHO CHARACTERS DCA XTTYOU TAD I XMTTXT /GET LOCATION OF TEXT DCA XTL1 ISZ XMTTXT XMTL5, TAD I XTL1 /GET NEXT CHARACTER CLL RTR RTR RTR JMS XMTQ1 /PROCESS IT TAD I XTL1 /NOW LOW ORDER CHARACTER JMS XMTQ1 ISZ XTL1 JMP XMTL5 /RECYCLE XMTQ1, 0 /CO-ROUTINE AND (77 JMP I XMTQ2 XMTQ2, XMTS1 JMP I XMTQ1 XMTS1, SNA JMP I XMTTXT /ZERO MEANS END OF TEXT TAD (-36 SZA /IS IT AN "^"? JMP XMTS2 /NO - PROCESS AS REGULAR CHARACTER JMS XMTQ2 /GO GET NEXT CHARACTER FROM STRING TAD [200 JMP XMTS3 /OUTPUT IT AS CONTROL CHARACTER XMTS2, TAD (-40+36 SPA TAD (100 TAD (40 XMTS3, JMS I [XSEND1 JMS XMTQ2 JMP XMTS1 XTL1, 0 IFNDEF PIP < BADLIN, JMS NORMAL TAD [XMTNO /NO OUTPUT DCA XTTYOU TAD (R10RB /JUNK ALL INPUT DCA I [D10IN TAD (RCTRL DCA XTTYIN DCA CTRLS JMS I [TYPE TEXT \^BAD LINE\ NEXT > DONE, CLA IAC DCA CCOUNT / TAD [200 AND LOPT1 /CHECK FOR /E SZA CLA JMP FIN5 /NO CHECKSUM FOR /E TAD [232 JMS XSEND1 IFNDEF PIP < TAD [232 JMS XSEND1 JMP FIN4 > IFDEF PIP < JMP FIN3 > CKSCHK, TAD CKSUM SZA CLA JMP CKSERR TAD CKSUM+1 SNA CLA JMP CKSER2 CKSERR, JMS I [TYPE /CHECKSUM ERROR ON RECEIVE TEXT \^? CHECKSUM ERROR^\ CIF CDF 10 JMS I (CSERRF /CHANGE FILE EXTENSION TO .CS CKSER2, CLA CLL CML RTR /2000->AC TAD OUWDCT /ANY CHARACTERS OUTPUT YET TAD DCLEN /ANY BLOCKS WRITTEN? SNA CLA JMP TALKE /NO - DON'T CLOSE FILE / THERE PROBABLY WAS AN ERROR CLA CLL CML RTR /2000 -> AC AND LOPT1 SZA CLA /IGNORE FINAL CHARACTER (^Z) JMP OLOOP3 / IN BUFFER. BINARY FILES MUST THEREFORE / ALWAYS BE AN INTEGRAL NUMBER OF BLOCKS / LONG. JMP OLOOP1 PAGE 5702 /-"/B" ECR, TEXT \=^M\ OLOOP, TAD [200 /USE 200 AS FILL CHARACTER JMS OUTCHR OLOOP1, TAD OUWDCT /GET -WORDS LEFT IN BUFFER AND [177 /CHECK AGAINST NEW BUFFER # SZA CLA /SKIP IF JUST DUMPED ONE JMP OLOOP /KEEP GOING TO DUMP ONE TAD INPROG /PROTECT FROM ONE OR TWO CHARACTERS SZA CLA /IN BUFFER BEING LOST AT END JMP OLOOP OLOOP3, TAD OUWDCT TAD [2000 /DONT DUMP IF AT END SZA CLA JMS DUMP /DUMP BUFFER CIF 10 JMS I (END10 TAD (". JMP I [FINISH+2 / / / OUTCHR, 0 JMP I RPOS RPOS1, DCA I OCPTR ISZ INPROG JMS RPOS RPOS2, DCA HOLD JMS RPOS RPOS3, RTL RTL DCA HOLD2 TAD HOLD2 AND [7400 TAD I OCPTR DCA I OCPTR DCA INPROG ISZ OCPTR TAD HOLD2 RTL RTL AND [7400 TAD HOLD DCA I OCPTR ISZ OCPTR ISZ OUWDCT SKP JMS DUMP JMS RPOS JMP RPOS1 RPOS, RPOS1 JMP I OUTCHR INPROG, 0 OUWDCT, 0 OCPTR, 0 HOLD, 0 HOLD2, 0 DUMP, 0 TAD XTTYOU DCA DUMPT DCA XTTYOU JMS I (HANG TAD DLENG /GET LENGTH AVAILABLE SNA /IF ZERO ITS NON FILE STRUCTURE JMP NOMATR /IF ZERO DOESNT MATTER CLL TAD DCLEN /ADD CURRENT SIZE TAD [10 /ADD # OF BLOCKS SZL CLA /WE ARE OK IF SKIPS JMP NOROOM TAD OUWDCT /UPDATE CLOSING LENGTH TAD [2000 CLL RTR RTR RTR RAR TAD DCLEN DCA DCLEN /SAVE FOR CLOSE NOMATR, TAD OUWDCT TAD (6020 DCA CTLWD CIF 0 JMS I OUTHND CTLWD, 6020 BUFAD, XBUF BLCKN, 0 JMP WRTERR TAD [10 TAD BLCKN /UPDATE BLOCK # DCA BLCKN TAD [-2000 DCA OUWDCT TAD BUFAD DCA OCPTR JMS I (UNHANG TAD DUMPT DCA XTTYOU JMP I DUMP / DLENG, 0 DUMPT, 0 DCLEN, 0 OUTHND, 0 NOROOM, JMS I [TYPE TEXT /^OUTPUT FILE FULL!^/ JMP WRTER2 WRTERR, JMS I [TYPE TEXT /^WRITE ERROR!^/ WRTER2, JMS NORMAL JMP I [COMMAND FIELD 1 /DEC 8/10 FILE LOOKUP PROGRAM / /MODIFIED FROM DIRECT.PA PTR=20 CNT=21 INFPTR=22 OUHAND=23 INHAND=24 EPTR=26 INSCNT=27 TEMP=30 OKFLAG=31 IFCNT=32 OSWTCH=33 INFWDS=34 BDPTR=35 GPTR1=36 XR=10 XR1=11 XR2=12 AC2=CLA CLL CML RTL AC3=CLA CLL CML IAC RAL AC4=CLA CLL IAC RTL AC4000=CLA CLL CML RAR ACM2=CLA CLL CMA RAL ACM3=CLA CLL CMA RTL ALTOPT=7642 OPT1=7643 OPT2=7644 EQLS=7646 /EQUALS OPTION DATE=7666 *2000 GOBAK, 0 /ENTER HERE TO LOOKUP FIRST FILE / AC=0 IF SEND / AC=1 IF RECEIVE DCA IOQ+2 TAD IOQ+2 SPA SNA CLA JMP IN TAD I (7600 /WAS OUTPUT STATED? SZA CLA JMP IN /YES - DON'T COPY 1ST INPUT FILE TAD (-5 DCA IOQ TAD (7600-1 DCA 11 TAD (7605-1 DCA 12 TAD I 12 DCA I 11 ISZ IOQ JMP .-3 IN, /SUBSTITUTE .X0 IF NULL EXTENSION TAD (7604 /GET EXTENSION DCA IOQ TAD (-6 /# FILES TO CHECK DCA IOQ+1 IN1, TAD I IOQ SNA /SKIP IF GIVEN TAD (3060 /.X0 FILE FROM DEC-10 DCA I IOQ /PUT EXTENSION BACK TAD (5 TAD IOQ DCA IOQ ISZ IOQ+1 JMP IN1 / CHECK FOR ? IN OUTPUT SPECIFICATION TAD (-10 DCA CNT /CNT HAVING -10 PUTS US AT FIRST CHAR S1C, TAD (7605 JMS I (GTSXBT /GET A CHAR TAD (7701/(-"?!7700 /CHECK FOR ? SNA JMP QINO TAD ("?-"* SNA CLA JMP AINO ISZ CNT JMP S1C / CHECK FOR EMBEDDED * IN ANY SPECIFICATION TAD (7605 S4L, DCA PTR TAD (-10 DCA CNT ACK, TAD PTR JMS I (GTSXBT TAD (7726/(-"*!7700 SZA CLA JMP CNTUP AC2 TAD CNT SZA TAD (6 SNA CLA ISZ CNT TAD PTR JMS I (GTSXBT SZA CLA JMP AINO CNTUP, ISZ CNT JMP ACK TAD I PTR SNA CLA JMP I (NULLCK TAD (5 TAD PTR JMP S4L /THIS IS THE END OF OPERATION CODE /IT CLOSES THE FILE AND HANDLES RETURNS END10, 0 TAD I (DCLEN DCA CLEN CDF 10 TAD I (7600 JMS I (200 /CLOSE THE OUTPUT FILE 4 7601 CLEN, 0 JMP CLOERR CIF CDF 20 JMP I END10 / / / ABORT, CDF CIF 20 /RETURN FROM DEC-10 MOD JMP I GOBAK IOQ, 0;0;0 STAR, 5200 PAGE NULLCK, TAD (7201 DCA AO2 TAD (7201 DCA AO1 TAD I (7600 SNA JMP TTYHND JMS I (200 /FETCH OUTPUT HANDLER 1 AO1, 7201 HLT TAD AO1 JMP CMN TTYHND, TAD (2424 DCA TTY1 TAD (3100 DCA TTY2 JMS I (200 /FETCH TTY HANDLER (DEFAULT OUTPUT) 1 TTY1, 0 TTY2, 0 AO2, 7201 JMP I (IDBLVT TAD TTY2 DCA I (7600 TAD AO2 CMN, DCA OUHAND TAD (7601 DCA BLCK TAD I (7600 JMS I (200 /ENTER OUTPUT FILE 3 BLCK, 7601 LENGX, 0 JMP ODFUL CDF 20 TAD LENGX DCA I (DLENG TAD OUHAND DCA I (OUTHND DCA I (DCLEN TAD BLCK DCA I (BLCKN TAD (XBUF DCA I (OCPTR TAD (RPOS1 DCA I (RPOS TAD (-2000 /NUMBER OF WORDS IN BUFFER DCA I (OUWDCT CDF 10 DCA I (CLEN TAD I (7605 SNA JMP FINDSK /V3C IF NO DEVICE SPECIFIED, LOOKUP 'DSK' SETDEV, DCA I (7605 TAD (7605 DOMOIN, DCA INFPTR DCA NODIRF TAD (6601 DCA AI1 TAD I INFPTR SNA JMP DCHK JMS I (200 /FETCH INPUT HANDLER 1 AI1, 6601 HLT TAD AI1 DCA INHAND JMP I (PG1 AINO, JMS I (ERROR ILLA+40 JMP EOLIN QINO, JMS I (ERROR ILLQ+40 EOLIN, TAD (215 /COME HERE TO ABORT DIRECTORY JMS I (TTY /AND PRINT CRLF CLA IAC JMP I (ABORT /ABORT OPERATION AND GOTO ENDUP FINDSK, DCA XX /V3C JMS I (200 /CALL USR 12 /TO DO AN INQUIRE 5723 /TO LOCATE 'DSK' XX, 0 0 JMP I (IDBLVT /NO 'DSK' IMPOSSIBLE (SO SAY NO 'TTY') TAD XX /RETURN DEVICE NUMBER OF DSK JMP SETDEV DCHK, TAD IOQ+1 //HAVE ANY FILES BEEN XRERRED? SZA CLA JMP ABORT /YES JMS I (ERROR NOFER+40 JMP EOLIN PAGE DIRCTY=0 /LOCATION OF INPUT DIRECTORY PG1, TAD I INFPTR TAD (7757 DCA TEMP TAD I TEMP SMA CLA JMP NODIR /NON-DIRECTORY DEVICE TAD IOQ+2 /IF /R, TREAT AS NON-DIRECTORY SZA CLA / DEVICE SO NO INPUT LOOKUP JMP NODIR / WILL BE DONE CIF 0 JMS I INHAND /READ INPUT DIRECTORY 1400 DIRCTY 1 JMP INDERR CDF 0 /CODE TO CHECK FOR TAD I (DIRCTY /LEGALITY OF DIRECTORY CMA CLL TAD I (DIRCTY+2 CDF 10 SNL TAD (7700 SZL CLA JMP BIDIR /DIRECTORY IS BAD / COUNT NUMBER OF INPUTS FROM SAME DEVICE NOSORT, DCA CNT TAD INFPTR SKP GETCNT, TAD PTR IAC DCA PTR TAD I PTR SZA CLA JMP NOSUB TAD (5200 DCA I PTR TAD (3 TAD PTR DCA TEMP TAD (5200 DCA I TEMP NOSUB, TAD PTR TAD (4 DCA PTR ISZ CNT TAD I PTR CIA TAD I INFPTR SNA CLA JMP GETCNT NOPTIM, TAD CNT CIA DCA INSCNT TAD PTR DCA I (MOIN DCA BDPTR TAD NODIRF SNA CLA JMP I (NBLOCK TAD INFPTR IAC DCA EPTR /FAKE FILE NAME FOR SEND ISZ IOQ+1 /COUNT FILE SENT CLL CML RAR /SEND 2047 BLOCKS FROM NON-DIRECTORY DEVICE JMP I (ABORT BIDIR, JMS I (ERROR BADDIR+40 JMP I (EOLIN INDERR, JMS I (ERROR BADIRD+40 JMP I (EOLIN /THIS IS THE ERROR MESSAGE PRINTER ERROR, 0 CLA CLL TAD (TTY DCA OSWTCH TAD (-100 DCA CNT PLOOP, TAD I ERROR JMS I (GTSXBT DCA DFLAG TAD DFLAG JMS I (CONVTP ISZ CNT TAD DFLAG SZA CLA JMP PLOOP ISZ ERROR JMP I ERROR DFLAG, 0 NODIRF, 0 /NON-DIRECTORY DEVICE FLAG NODIR, ISZ NODIRF JMP NOSORT PAGE /THIS IS THE SUPERQUASIFACETED DIRECTORY PATTERN MATCHING ROUTINE /THE INPUT DIRECTORY IS SEARCHED HERE, IF A MATCH /IS FOUND USING THE INPUT GROUPING /GOT1 GETS CONTROL WITH -BLOCKS IN THE AC NBLOCK, TAD BDPTR /POINTER TO START OF DIR BLOCK DCA XR CDF 0 TAD I XR /GET BLOCK NUMBER FIRST FILE DCA BLOCK TAD I XR /NEXT SEGMENT NUMBER DCA LFLAG /IF IT 0 WE AT END ISZ XR /SKIP TENTATIVE FILE WORD TAD I XR /GET -NUMBER OF INFO WORDS CIA /MAKE POSITVE DCA INFWDS TAD XR /POINT TO FIRST IAC /ENTRY DCA EPTR BLOOP, TAD I EPTR /GET FILENAME WORD CDF 10 SNA CLA /SKIP IF FILE HERE JMP EMPTY /NO... ITS REALLY AN EMPTY TAD INSCNT /SET NUMBER OF INPUT TO LOOK DCA NCNT /AT ALL AT ONCE DCA MATFLG /CLEAR MATCH FLAG TAD INFPTR /ADDRESS OF FIRST INPUT SKP MN1, TAD GPTR2 /ADDRESS OF CURRENT INPUT TAD (5 /GTSXBT SUBR REQUIRES US TO DCA GPTR2 /POINT TO END OF FIELD TAD EPTR /POINT DIRECTORY POINTER TO TAD (4 /END OF ENTRY FOR SAME REASON DCA GPTR1 TAD GPTR1 /SET EPNEXT TO POINT TO TAD INFWDS /MINUS NUMBER OF BLOCKS IN DCA EPNEXT /FILE WORD TAD (-10 /NUMBER OF CHARS TO LOOK AT WILDNM, DCA CNT MLP, TAD GPTR2 /OK - GET A CHARACTER FROM JMS I (GTSXBT /STRING TAD (7726/(-"*!7700 /IS IT AN * SNA /SKIP IF NOT * JMP WILDA /YEP... ITS A WILD CARD TAD ("*-"? /IS IT A ? SNA /SKIP IF NOT JMP WILD /YES... FORCE MATCH ON THIS CHAR TAD ("?&77 /RESTORE VALUE CIA /NEGATE DCA CHAR /AND SAVE TAD GPTR1 /NOW GET CHAR FROM DIRECTORY CDF 0 JMS I (GTSXBT CDF 10 TAD CHAR /DO CHARS MATCH SZA CLA /SKIP IF THEY DO JMP NM1 /NO MATCH ON THIS INPUT WILD, ISZ CNT /BUMP COUNT OF CHARS & POINTER JMP MLP /COMPARE ALL 8 MEXT, ISZ MATFLG /A MATCH!!!!!!! NM1, CLA /WILD CARD COMES HERE WITH ICHY AC ISZ NCNT /HAVE WE CHECKED GROUP OF INPUTS JMP MN1 /NO CHECK WHOLE GROUP TAD MATFLG /HAVE THERE BEEN ANY MATCHES SZA CLA /SKIP IF NOT TAD (4 /WILL INVERT /V SWITCH TAD I (OPT2 /ADD SWITCH AND (4 /ISOLATE IT CDF 0 /SKIPS IF INPUT DIRECTORY ENTRY IS NOT CANDIDATE /THAT IS - IF A MATCH WAS NOT FOUND BETWEEN ANY /OF THE INPUTS AND /V WAS NOT SPECIFIED OR /A MATCH WAS FOUND AND /V WAS SPECIFIED /THIS ALLOWS /V TO MEAN EVERYTHING BUT... SZA CLA TAD I EPNEXT /GET -NUMBER OF BLOCKS CDF 10 SZA /SKIPS IF TENTATIVE OR NOT CANDIDATE JMP I (GOT1 /PROCESS FILE NENT, TAD NODIRF SZA CLA JMP I (SAYNON TAD EPNEXT /POINT EPTR TO BLOCK DCA EPTR /COUNT OF FILE JMP NEMPTY EMPTY, ISZ EPTR /ON EMPTY MAKE EPTR POINT TO BLOCK COUNT NOP NEMPTY, CDF 0 TAD I EPTR /GET BLOCK COUNT CIA /MAKE POSITIVE TAD BLOCK DCA BLOCK /KEEP SUM ISZ EPTR /POINT TO NEXT ENTRY ISZ I BDPTR /POINTS TO -NUMBER OF ENTRIES JMP BLOOP /NOT DONE WITH SEGMENT CDF 10 TAD (400 /BUMP TO NEXT SEGMENT TAD BDPTR DCA BDPTR TAD LFLAG /DID WE PROCESS LAST SEGMENT SZA CLA /SKIP IF WE DID JMP NBLOCK /PROCESS NEW SEGNENT JMP I (SAYNON /HANDLE WILD CARDS WILDA, TAD CNT /GET CURRENT CHAR POSITION TAD (6 /ADD SIZE OF FILENAME SPA /SKIP IF IN EXTENSION FIELD JMP WILDNM /THIS BUMPS TO EXTENSION JMP MEXT /THIS MEANS IT HAS TO BE A MATCH CHAR, 0 EPNEXT, 0 GPTR2, 0 LFLAG, 0 NCNT, 0 BLOCK, 0 MATFLG, 0 PAGE GOT1, DCA IFCNT /-# OF BLOCKS IN AC JMS I (DATCHK /VERIFY /C AND /O SWITCHES ISZ IOQ+1 /COUNT FILE SENT TAD IFCNT JMP I (ABORT /DEC-10 EXIT ODFULT, TEXT \? ENTER FAILURE\ ODFUL, JMS I (ERROR ODFULT+40 JMP I (EOLIN GTSXBT, HLT CLL RAL TAD CNT CML RAR DCA TEMP TAD I TEMP SNL JMS ROTR6 AND (77 JMP I GTSXBT ROTR6, 0 RTR RTR RTR JMP I ROTR6 CONVTP, HLT SZA TAD (240 AND (77 TAD (240 JMS I OSWTCH JMP I CONVTP TTY, 0 TSF JMP .-1 TLS TAD (-215 SZA CLA JMP I TTY TAD (12 JMP TTY+1 OPRNT, 0 DCA GTSXBT TAD (-4 DCA CNT OPLP, TAD GTSXBT RTL CLL RAL DCA GTSXBT TAD GTSXBT RAL AND (7 TAD (260 JMS I (CONVTP ISZ CNT JMP OPLP JMP I OPRNT /ROUTINE TO MAKE SURE USER SPECIFIED //C AND /O SWITCHES CAUSE CORRECT MATCH WITH DATE DATCHK, 0 TAD I (OPT1 /CHECK /C JMS MDATE NOP /RETURN HERE WITH AC=0 IF NO /C SZA CLA /RETURN HERE WITH AC=0 IF DATES MATCH JMP I (NENT /DATES DONT MATCH AND /C GIVEN JMP I DATCHK /CONTINUE MDATE, 0 //O AND /V ARE AC2 RTL /IS IT OPTION ON? SMA CLA /SKIP IF IT IS JMP I MDATE /NO- RETURN WITH 0 AC ISZ MDATE /SKIP RETURN CDF 0 TAD I GPTR1 /GET DATE WORD CIA CDF 10 TAD I (DATE /COMPARE WITH MONITORS, 0 IF = JMP I MDATE PAGE CLOERR, JMS I (ERROR CLERR+40 JMP I (EOLIN IDBLVT, JMS I (ERROR NOTTY+40 JMP I (EOLIN SAYNON, TAD MOIN JMP I (DOMOIN MOIN, 0 CSERRF, 0 TAD I (7600 /FIND ENTRY FOR OUTPUT DEVICE AND (17 / IN DEVICE CONTROL WORD TABLE TAD (7760-1 / AND CLEAR TENTATIVE FILE ENTRY. DCA CSERRT TAD I CSERRT AND (7770 DCA I CSERRT TAD (0323 /NEW EXTENSION = ".CS" DCA I (7604 TAD (7601 DCA .+4 TAD I (7600 /ENTER NEW FILE WITH NEW NAME. JMS I (200 /IT WILL BE AT EXACTLY THE SAME 3 / PLACE AS THE ORIGINAL FILE 7601 / BUT WITH A NEW NAME. 0 JMP ODFUL CIF CDF 20 JMP I CSERRF CSERRT, 0 BADIRD, TEXT /ERROR READING INPUT DIRECTORY/ CLERR, TEXT /ERROR CLOSING FILE/ ILLQ, TEXT /ILLEGAL ?/ ILLA, TEXT /ILLEGAL */ BADDIR, TEXT /BAD INPUT DIRECTORY/ NOTTY, TEXT /THERE IS NO HOPE-THERE IS NO TTY HANDLER IN YOUR SYSTEM/ NOFER, TEXT /? FILE NOT FOUND/ $ ENDBLK, CLA TAD I POINT2 /YES GET BLOCK LINK WORD SNA CLA /IS THIS THE LAST BLOCK JMP RECYCL TAD POINT2 TAD (376 /NO SET BLOCK SCAN POINTER TO NEXT BLOCK DCA POINT2 TAD I POINT2 /GET FILE COUNT DCA CNT2 /RESET FILE SCAN COUNTER ISZ POINT2 ISZ POINT2 /POINT TO BLOCK LINK WORD TAD POINT2 TAD (-DIRCTY-3000 /DID WE OVERFLOW THE BUFFER SMA CLA JMP (BIDIR /YES DIRECTORY MUST BE BAD AC3 /SET FILE SCAN POINTER TO NEXT BLOCK TAD POINT2 JMP KPLOOK /KEEP LOOKING RECYCL, TAD PT1 TAD SIZE /RESET BLOCK FILE POINTER ISZ CNT1 /IS THIS THE LAST FILE JMP TRYAGN JMP DONE /YES CHECK IF WE ARE DONE /THIS ROUTINE CHECKS IF THE FILES ARE IN THE RIGHT ORDER CHECKX, TAD (-4 /WE ARE ONLY GOING TO CHECK THE FIRST 4 WORDS DCA CNT0 TAD PT1 DCA CK1 /SET FIRST CHECK POINTER TAD PT2 DCA CK2 /SET SECOND CHECK POINTER NXTCHR, TAD I CK1 CIA CLL TAD I CK2 /COMPARE THE TWO WORDS SNA /ARE THEY THE SAME JMP ZERO /YES INCREMENT AND CHECK NEXT WORD SNL CLA /NO, BUT ARE THEY IN THE RIGHT ORDER JMS SWAP /WRONG ORDER, LETS SWAP THEM AROUND SAME, TAD SIZE /RIGHT ORDER, SET UP RETURN (6 IN THE AC) JMP RETURN ZERO, ISZ CK1 /INCREMENT CHECK POINTERS ISZ CK2 ISZ CNT0 /HAVE WE CHECKED ALL FOUR WORDS JMP NXTCHR /NO CONTINUE CHECKING JMP SAME /THIS SHOULD NEVER BE. TWO FILES WITH THE /SAME NAME, UNLESS ONE IS A TENTATIVE /FILE WHICH WAS NOT CLOSED /THIS ROUTINE DOES THE ACTUAL SWAPPING SWAP, 0 TAD PT1 DCA CK1 /SET FIRST SWAP POINTER TAD PT2 DCA CK2 /SET SECOND SWAP POINTER TAD SIZE /GET FILE ENTRY SIZE CIA DCA CNT0 /SET COUNTER TO NEGATIVE FILE SIZE CONTIN, TAD I CK1 DCA HOLDIT TAD I CK2 DCA I CK1 TAD HOLDIT DCA I CK2 ISZ CK1 ISZ CK2 ISZ CNT0 JMP CONTIN JMP I SWAP PT1, 0 PT2, 0 CNT0, 0 CNT1, 0 CNT2, 0 CK1, 0 CK2, 0 POINT1, 0 POINT2, 0 SIZE, 0 HOLDIT, 0 $