Directory of image this file is from
This file as a plain text file
/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<CR>
/ I<CR>
/ /THE ^Z^Z000^Z IS REQUIRED TO GET OUT OF "SEND" AFTER
/ / CERTAIN ERRORS HAVE OCCURRED.
/
/II. SEND
/
/ RU DSKC:SEND3[1001,1002]<CR>
/ <FILENAME>=<CR>
/ (FILE IS SENT HERE)
/ ^Z^Z<CHECKSUM>^Z
/ [REPEAT ABOVE 3 LINES FOR EACH FILE]
/
/III. SEND BINARY
/
/ RU DSKC:SEND3[1001,1002]<CR>
/ <FILENAME>=/B<CR>
/ (FILE IS SENT HERE INCL'D'G <NULL>'S AND SPECIAL CHARACTERS)
/ ^Z^Z<CHECKSUM>^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]<CR>
/ <FILENAME><CR>
/ (RECEIVE FILE UNTIL TWO 232'S (^Z) FOLLOWED BY
/ THREE DIGIT CHECKSUM)
/
/V. RECEIVE BINARY
/
/ RU DSKC:SEND3[1001,1002]<CR>
/ <FILENAME>/B<CR>
/ (FOR SKED AND SAVE FILES)
/
/VI. RECEIVE IMAGE
/
/ RU DSKC:SEND3[1001,1002]<CR>
/ <FILENAME>/I<CR>
/ (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 <STARTR>+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 <LOGIN> IN
/ PACKED ASCII. SPECIAL HANDLING FOR THE
/ EQUALS OPTION LOCATED AT <BNOEQ>.
/
/III. CHARACTER TO INITIATE ECHOING AFTER A LOGIN ("J" IN OUR
/ CASE FOR "JOB ...") IS LOCATED AT <LOC11>+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<CR><LF>
/ /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<CR>
/ R PIP<CR>
/ <FILENAME>=TTY:^Q<CR><LF>
/
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
/
/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 <TTYOUT>
/ --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 <SEND3> 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 <FILENAME>/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 <AND (6556 / C E H L>
IFNDEF PIP <AND (4546 /B C E H I L>
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 <DONE> 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 <ISZ CCOUNT /ARE WE READY TO SEND BREAK CHARACTER?>
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 "<MESSAGE>"
/
/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 <XTTYOU> <-- <TTYOU2> 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 <JMP TTYL3
PAGE>
TTYL3, TLS
DCA CKECHO
DCA OUCR
NEXT
IFNDEF PIP <PAGE>
TTYL2, TAD (-16+40
SMA
JMP TTYL4 /PRINT ONLY THOSE .GT. <CR>
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 <LOC1>
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 <DONE> 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 <GET> 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) & <CR>
/
/
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 <LF>
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 \^ /<SWITCH> DEV:FILENAME.EXT [/<SWITCH> ... ] \
*.-1
TEXT "^(CRASH = CTRL-\) "
*.-1
TEXT \^(WILD CARDS FOR /S ONLY.) \
*.-1
IFNDEF PIP <TEXT \^SWITCHES:^/B - BINARY (SKED & SAVE) \>
IFDEF PIP <TEXT \^SWITCHES: \>
*.-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 <PAGE>
/TRANSMIT PACKED ASCII TEXT TO THE DEC-10 (NEVER ECHO)
/
/CALLING SEQUENCE:
/ JMS XMTTXT
/ <TEXT ADDR>
/
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
$