mirror of
https://github.com/PDP-10/its.git
synced 2026-01-26 04:02:06 +00:00
MONIT - lightweight ATSIGN HACTRN replacement.
Jack Haverty wrote on its-hackers: > On MIT-DM, the most commonly used top-level program was called > "monit". It was used by most people instead of DDT because it required > less memory, which was a very scarce and precious commodity in the > early 70s before paging and swapping. In fact there was a lot of peer > pressure to use monit unless you had a very good reason to use DDT. This is a very old source file -- AI: SYSENG; MONIT 114 is listed in MAPS in 1971-04. Development happened on DM; "Scenarios for Using Arpanet at the International Conference on Computer Communication" has a 1972-09 transcript showing MONIT 192 on DM. The binary SYS; TS MONIT is listed on AI, MC and ML from 1971 to 1983 in MAPS, although it doesn't survive in the AI/MC KS10 dumps. A 1981 message to BUG-ITS from ED@MIT-ML suggests it was an old version: > ML:SYS;TS MONIT [...] does not have symbols nor the correct start > address (1300). It is pretty badly broken, but great fun to play with > nevertheless.
This commit is contained in:
committed by
Adam Sampson
parent
44dbbbb033
commit
8d2eb9bd16
893
src/syseng/monit.114
Normal file
893
src/syseng/monit.114
Normal file
@@ -0,0 +1,893 @@
|
||||
TITLE MONITOR AND MERRY MAKING
|
||||
|
||||
;ACCUMULATOR DEFS
|
||||
FF==0 ;FLAG AC
|
||||
A=1
|
||||
B=2
|
||||
C=3
|
||||
D=4
|
||||
P=17 ;PUSH DOWN POINTER
|
||||
|
||||
;FLAGS FOR FF REG
|
||||
USRUN==1 ;INFERIOR EXISTS
|
||||
VALCM==10 ;LOOKING AT .VALUE FROM INFERIOR
|
||||
CRLF==40 ;CR WAS LAST CHARACTER OUTPUT TO TTY
|
||||
RDF==200 ;READING COMMANDS FROM FILE
|
||||
ECHF==400 ;ECHO TYPING
|
||||
TTYGN==1000 ;TTY GIVEN AWAY
|
||||
INFIL==2000 ;FILE INPUT FOR LOAD OPEN
|
||||
OUTFLS==4000 ;OUTPUT STOPPED BY ^S
|
||||
|
||||
;CHANNELS FOR I/O
|
||||
TYIC==1 ;TTY INPUT
|
||||
TYOC==2 ;TTY OUTPUT
|
||||
SYSI==3 ;INPUT OF PROGRAMS
|
||||
USRO==4 ;OUTPUT TO INFERIOR
|
||||
USRT==5 ;TEMPORARY SECOND INFERIOR
|
||||
PRTC==6 ;PRINT AND LISTF INPUT AND ERROR DEVICE
|
||||
CLAC==7 ;CLA INPUT
|
||||
CLIC==10 ;CLI OUTPUT
|
||||
|
||||
PDLLNG==30
|
||||
COMLNG==24 ;WDS FOR COMMANDS
|
||||
BUFLNG==200 ;IO BUFF LNG
|
||||
|
||||
ZZZ==.
|
||||
LOC 41
|
||||
JSR UUOH
|
||||
JSR TSINT
|
||||
LOC ZZZ
|
||||
|
||||
DEFINE FATAL MESS
|
||||
JSP A,XFATAL
|
||||
INFOR2 \.,MESS
|
||||
TERMIN
|
||||
|
||||
DEFINE INFORM N,MESS
|
||||
IF1,[PRINTC / N MESS
|
||||
/] TERMIN
|
||||
|
||||
DEFINE INFOR2 N,MESS
|
||||
IF2,[PRINTC / N MESS
|
||||
/] TERMIN
|
||||
|
||||
FFSAV=5
|
||||
STARTA=6
|
||||
COMPTR=7
|
||||
LCMCHR=10
|
||||
LOGNAM=11
|
||||
LPOS=12
|
||||
BASE=13
|
||||
NOATTY: PSIXI (SIXBIT /ATY/) ;CFT - UNABLE TO GIVE CONSOLE TO INFERIOR
|
||||
QBEG: PASCR [ASCIZ /?/]
|
||||
QBUST: TLZ FF,RDF+ECHF+VALCM ;IN CASE _G'ED
|
||||
BEG: TLZ FF,OUTFLS
|
||||
.SUSET [.SPICL,,[-1]] ;? ? MAKE ME INTERUPT-PRONE
|
||||
MOVE P,[-PDLLNG,,PDL-1] ;FLUSH OUT PDL
|
||||
TLNN FF,VALCM ;VALRETED FROM PREV
|
||||
PUSHJ P,RCMD ;READ STRING IN
|
||||
PUSHJ P,SCMD ;SCAN COMMAND
|
||||
JUMPE B,.-2 ;COMMAND BLANK, TRY AGAIN
|
||||
PASCI ^M
|
||||
MOVE A,[-NUMCOM,,MYCOM]
|
||||
CAMN B,(A) ;CHECK FOR LOCAL COMMANDS
|
||||
JRST @1(A) ;FOUND
|
||||
AOBJN A,.+1
|
||||
AOBJN A,.-3 ;GET ANOTHER
|
||||
|
||||
MOVEM B,SYSF+2 ;STORE SYS FILE NAME
|
||||
CAMN B,USRF+2
|
||||
PUSHJ P,USRCLO ;KILL CURRENT ONE FIRST
|
||||
MOVEM B,USRF+2 ;AND NAME TO CREATE
|
||||
TLZ FF,INFIL ;SHOW NO INFILE OPEN (IN CASE RE-OWN JOB)
|
||||
UOPEN: MOVEI A,7 ;SET MODE FOR USER FILE
|
||||
HRLM A,USRF ;IMAGE, BLOCK, OUTPUT
|
||||
TLNN FF,INFIL
|
||||
PUSHJ P,USROPE ;SEE IF DISOWNED - AND OPEN THE USER
|
||||
PUSHJ P,ALD ;LOAD THE FILE - SKIPPED IF RE-OWNED JOB
|
||||
.USET USRO,[.SUPC,,STARTA] ;SET INF PC TO START - MAY BE SKIPPED TOO
|
||||
.CLOSE SYSI,
|
||||
PUSHJ P,ATTY ;GIVE HIM THE CONSOLE
|
||||
.USET USRO,[.SUSTP,,BLANK] ;START INF
|
||||
JRST QBUST
|
||||
|
||||
; MOVSI A,200000
|
||||
; .SLEEP A, ;RIP VAN WINKLE
|
||||
; JRST .-2 ;IN CASE 40 YRS PASS
|
||||
|
||||
RCMD: SETZM LCMCHR
|
||||
TLNN FF,RDF ;READING
|
||||
JRST RCMD2 ;NO, TYPE
|
||||
TLNN FF,ECHF
|
||||
JRST RCMD3 ;NOT ECHO => NO TYPE
|
||||
RCMD2: .IOT TYOC,[15] ;CR IF (RDF OFF) OR (ECHF ON)
|
||||
.IOT TYOC,[";] ;PROMPT CHARACTER
|
||||
RCMD3: MOVE B,[440700,,COMMND] ;BEG INPUT
|
||||
MOVEM B,COMPTR ;SET COMMAND PTR
|
||||
MOVEI C,0 ;COUNTER
|
||||
RCMD1: .IOT TYIC,A ;GET CHAR
|
||||
CAIN A,33 ;ALT MODE
|
||||
JRST QBEG
|
||||
CAIN A,"?
|
||||
JUMPE C,PHELP ;INIT ? MEANS HELP
|
||||
TLNN A,-1 ;MAGIC EOF CONDITION
|
||||
CAIN A,^C ;EOF ON READ?
|
||||
JRST CLSRD ;YES, OPEN TTY
|
||||
CAIE A,^S
|
||||
CAIN A,^G ;BELL TO FLUSH LINE - DOESNT HAPPEN ON THIS LEVEL
|
||||
JRST RCMD1 ;IGNORE
|
||||
CAIN A,177 ;RUBOUT
|
||||
JRST RUB
|
||||
IDPB A,B ;STORE CHAR IN STRING
|
||||
CAML B,[350700,,COMMND+COMLNG-1] ;BYTE P TO END OF BUFF
|
||||
JRST RCFUL ;FULL BUFFER
|
||||
CAIL A,40 ;OUT FOR ANY CONTROL CHARACTER
|
||||
AOJA C, RCMD1 ;NO, GET MORE
|
||||
RCMDX: MOVEI A,0 ;YES, TERM WITH NULL FOR TYPE
|
||||
IDPB A,B
|
||||
TLZ FF,OUTFLS
|
||||
POPJ P, ;RETURN BEFORE POSSIBLE END OF FILE
|
||||
|
||||
CLSRD: MOVEM A,LCMCHR
|
||||
TLZ FF,ECHF+RDF ;END OF READ
|
||||
.OPEN TYIC,TYIF ;SWITCH BACK TO TTY INPUT OF COMMANDS
|
||||
JSP A,ANALER ;ENDS UP BEING FATAL
|
||||
RCFUL: MOVEI A,15 ;END UP COMMAND
|
||||
IDPB A,B
|
||||
JRST RCMDX ;MUST BE END OF COMM
|
||||
|
||||
RUB: SOJL C,RCMD ;IF RUBBED OUT EVERYTHING
|
||||
LDB A,B ;GET LAST INSERTED
|
||||
.IOT TYOC,A ;ECHO IT OUT
|
||||
ADD B,[070000,,] ;BUMP CH POINTER
|
||||
TLNE B,400000 ;AT WORD BOUND
|
||||
ADD B,[347777777777]
|
||||
JRST RCMD1
|
||||
|
||||
SCMD: MOVE A,COMPTR ;SCAN COMMAND
|
||||
ILDB A,A
|
||||
CAIE A,": ;WAS FIRST CHAR A :
|
||||
JRST GETSYL
|
||||
PUSHJ P,GETCAT ;YES, IGNORE IT
|
||||
IBP COMPTR
|
||||
JRST GETSYL
|
||||
|
||||
GETCCA: ILDB A,COMPTR ;FETCH COMM CHAR TO A
|
||||
CAIE A,^L ;FLUSH FORM FEED
|
||||
CAIN A,^J ;FLUSH LF
|
||||
JRST GETCCA
|
||||
CAIE A,^C ;EOF
|
||||
SKIPN A ;NULL AT END OF ASCIZ
|
||||
TLZ FF,VALCM+ECHF ;TURN OFF .VALUE READING
|
||||
GETCAT: TLNE FF,VALCM+ECHF
|
||||
JRST IOTA ;ECHO IF VALRET OR ECHO FLAG
|
||||
POPJ P, ;ELSE JUST RETURN
|
||||
; SCNAME - ROUTINE TO SCAN COMMAND LINE FROM CURRENT POSITION
|
||||
; RETURNS A FILE NAME. A,B,C,D <= NAME1,NAME2,DEVICE,USER
|
||||
; USING "[DEV:][USR;]NAME1 NAME2" OR "NAME1 NAME2 [DEV [USR]]"
|
||||
|
||||
SCNAME: PUSH P,[SIXBIT /@/] ;WORK SCRATCH ON STACK
|
||||
PUSH P,[SIXBIT /@/] ;NAME1,NAME2
|
||||
PUSH P,BLANK ;DEV
|
||||
PUSH P,BLANK ;USR
|
||||
MOVEI C,-3(P) ;INIT PTR TO N1
|
||||
SCNGET: PUSHJ P,GETSYL ;RET A,B <= BRKCHR,6BIT SYL
|
||||
SKIPN B
|
||||
JUMPL A,POPIT ;EMPTY SYLLABLE AT END OF LINE
|
||||
CAIN A,': ;CHECK WHICH BREAK
|
||||
MOVEM B,-1(P) ;MOVE SYL: TO DEVICE
|
||||
CAIN A,'; ;MOVE SYL; TO USR
|
||||
MOVEM B,0(P)
|
||||
JUMPG A,SCNGET ;NOT SPACE, GET MORE SYL(NOT CTL EITHER)
|
||||
CAIN C,-2(P) ;POINT TO NAME2?
|
||||
EXCH B,-3(P) ;YES, MOVE SYL1 TO NAME1
|
||||
MOVEM B,(C)
|
||||
JUMPL A,POPIT ;CTL TERMINATES
|
||||
CAIGE C,(P) ;ALSO 4 SYLS DOES
|
||||
AOJA C,SCNGET ;UP PTR, GET MORE
|
||||
POPIT: POP P,D ;USR;
|
||||
POP P,C ;DEV:
|
||||
POP P,A ;N1
|
||||
JRST GETSX ;N2
|
||||
|
||||
;GETSYL - ROUTINE TO GET SINGLE WORD OFF COMMAND LINE
|
||||
; ONLY BRK CHAR ARE : ; SPACE AND CONTROLS EXCEPT ^Q WHICH
|
||||
; QUOTES THE NEXT NON CTL CHAR (: ; SP)
|
||||
|
||||
GETSYL: PUSH P,BLANK ;INIT SYL ON STACK
|
||||
MOVE B,[440600,,0(P)] ;BYT PTR TO STACK
|
||||
GETSLP: PUSHJ P,GETCCA ;GET CHAR
|
||||
CAIN A,^Q ;IS IT "QUOTE"
|
||||
JRST GETQOT ;YES
|
||||
SUBI A,40 ;MAKE SIXBIT
|
||||
JUMPL A,GETSX ;CTL=EXIT
|
||||
JUMPE A,GETSP ;INIT SPACES FLUSHED
|
||||
CAIE A,':
|
||||
CAIN A,';
|
||||
JRST GETSX ; ; OR : TERM
|
||||
GETSPT: CAIL A,100 ;LC?
|
||||
SUBI A,40 ;MAKE UC
|
||||
TLNE B,770000 ;CHECK FIT
|
||||
IDPB A,B ;STORE CHAR
|
||||
JRST GETSLP
|
||||
|
||||
GETQOT: PUSHJ P,GETCCA ;GET CHAR TO QUOTE
|
||||
SUBI A,40 ;6BIT
|
||||
JUMPGE A,GETSPT ;CANT ^Q A CTL
|
||||
JRST GETSX
|
||||
|
||||
GETSP: TLNE B,400000 ;IF NONE YET PUT IN
|
||||
JRST GETSLP ;SPACE IGNORED
|
||||
GETSX: POP P,B ;ASSEMBLED SYL TO B
|
||||
POPJ P, ;BREAK IS LEFT IN A
|
||||
|
||||
ALDLOS: MOVEI A,(SIXBIT /DSK/)
|
||||
HRRM A,SYSF
|
||||
.OPEN SYSI,SYSF ;TRY DSK:TS <NAME>
|
||||
SKIPA
|
||||
JRST USRCAS ;FLUSH OLD ONE, OPEN NEW ONE
|
||||
MOVEI A,(SIXBIT /SYS/)
|
||||
HRRM A,SYSF
|
||||
.OPEN SYSI,SYSF ;NOW SYS:TS <NAME>
|
||||
JSP A,ANALER
|
||||
JRST USRCAS ;FLUSH OLD ONE, OPEN NEW ONE
|
||||
|
||||
ALD: TLZN FF,INFIL ;IS FILE OPEN ?
|
||||
PUSHJ P,ALDLOS ;CROCK !
|
||||
ALDO: PUSHJ P,GTWD ;READ BEGIN FILE
|
||||
JUMPE B,PURE ;PURE PROCEDURE !!
|
||||
CAME B,[JRST 1] ;CHECK FOR END OF LOADER
|
||||
JRST ALDO
|
||||
|
||||
ALD1: PUSHJ P,GTWD ;GET CTL WD
|
||||
JUMPGE B,ALDJ ;JRST OR CTL
|
||||
MOVE C,B ;-N,,ADR
|
||||
ALD2: MOVE D,B
|
||||
CAMGE B,[-BUFLNG,,] ;CHECK FIT IN BUFF
|
||||
HRLI B,-BUFLNG ;USE OWN SIZE
|
||||
HRRI B,UBUF ;INBUFFER
|
||||
PUSHJ P,ALDRD ;GET BLOCK
|
||||
MOVEI A,(D)
|
||||
.ACCESS USRO,A ;BEGIN OUTPUT AT LD ADR
|
||||
MOVE A,B
|
||||
.IOT USRO,A ;MOVE BLOCK THERE
|
||||
SUB B,[-1,,]
|
||||
SUB B,D ;CHECK IF MORE IN LD BLK
|
||||
JUMPL B,ALD2 ;GET ANOTHR BUFF
|
||||
PUSHJ P,GTWD ;END BLOCK, GET SUM
|
||||
CAMN C,B ;CHECK
|
||||
JRST ALD1 ;LOAD NEXT BLK
|
||||
PSIXI (SIXBIT /CKS/)
|
||||
SKIPA
|
||||
EOF: PSIXI (SIXBIT /EOF/)
|
||||
.CLOSE SYSI,
|
||||
PUSHJ P,USRCLO ;FLUSH OUT JOB
|
||||
JRST QBEG ;WILL SCRATCH PDL
|
||||
|
||||
ALDJ: HRRZM B,STARTA ;START IN FILE
|
||||
POPJ P, ;RETURN
|
||||
|
||||
ALDRD: MOVE A,B
|
||||
PUSHJ P,GTWD1 ;READ BUFF
|
||||
MOVE A,B
|
||||
ROT C,1 ;ACCUM CHECK SUM
|
||||
ADD C,(A)
|
||||
AOBJN A,.-2 ;FOR WHOLE BUFF
|
||||
POPJ P,
|
||||
|
||||
GTWD: HRROI A,B ;SINGLE WORD TO B
|
||||
GTWD1: .IOT SYSI,A ;BLOCK IN
|
||||
JUMPL A,EOF ;UNABLE TO READ DESIRED CT
|
||||
POPJ P,
|
||||
|
||||
PURE: SETZM BLK
|
||||
.CALL CBLK ;GET SYSTEM TO LOAD THIS PURE PROCEDURE
|
||||
PSIXI (SIXBIT /CBK/)
|
||||
JRST ALD1
|
||||
|
||||
CBLK: 400000,,0
|
||||
SIXBIT /LOAD/
|
||||
[USRO]
|
||||
[SYSI]
|
||||
400000,,ARG3
|
||||
|
||||
ARG3: -3,,BLK
|
||||
|
||||
BLK: 0
|
||||
0
|
||||
0
|
||||
DEATH: TLNE USRUN
|
||||
PUSHJ P,DISOW
|
||||
JRST DEAT
|
||||
|
||||
XFATAL: POCTI (A) ;MAY VERY WELL NOT OUTPUT ANYTHING
|
||||
PASCR [ASCIZ / FATAL ERR/]
|
||||
DEAT: .VALUE ;?? - MAY CAUSE RELOADING OF MONIT
|
||||
PSIXI (SIXBIT /DTH/)
|
||||
JRST QBEG ;IN CASE
|
||||
|
||||
ANALER: TLNN FF,RDF ;ERR DURING READING
|
||||
JRST ANAL1 ;NO
|
||||
.OPEN TYIC,TYIF ;SWITCH BACK TO TTY FOR INPUT OF COMMANDS
|
||||
FATAL CANT RE-OPEN TTY
|
||||
ANAL1: TLZ FF,RDF+ECHF+VALCM ;ERROR => NO TAPE IN OR VALRET
|
||||
MOVEI A,@-2(A)
|
||||
PSIX (A) ;POINTS TO OPEN BLOCK
|
||||
PASCI ":
|
||||
PSIX 1(A) ;NAME1
|
||||
PASCI " ;SPACE
|
||||
PSIX 2(A) ;NAME2
|
||||
PASCI 40 ;SP
|
||||
|
||||
ERR: .OPEN PRTC,[SIXBIT / ERR !/] ;OPEN ERROR COMMENT
|
||||
FATAL CANT OPEN ERROR DEVICE
|
||||
XPRINT: .IOT PRTC,A
|
||||
TLNN A,-1 ;MAGIC EOF?
|
||||
CAIN A,^C
|
||||
JRST BEG ;YES, FINISHED
|
||||
CAIE A,^L ;IGNORE FF
|
||||
PUSHJ P,IOTA ;PRINT SYSTEM COMMENT
|
||||
TLZN FF,OUTFLS
|
||||
JRST XPRINT
|
||||
JRST BEG
|
||||
|
||||
USROPE: PUSHJ P,CKLOG ;MUST BE LOGGED IN
|
||||
.OPEN USRT,USRF ;NAME PTR IN A
|
||||
JSP A,ANALER ;YOU LOST
|
||||
.USET USRT,[.RMEMT,,A] ;ATTEMPT TO SEE IF REOWNED JOB
|
||||
CAIE A,2000
|
||||
JRST USRAT1 ;CERTAINLY
|
||||
.USET USRT,[.RUPC,,A] ;??
|
||||
TRNN A,-1
|
||||
JRST USRILT ;NO, NO SUCH REOWNED JOB EXISTS
|
||||
USRAT1: AOS (P) ;TO SKIP LOAD - SINCE JOB ALREADY EXISTS
|
||||
AOS (P) ;TO SKIP GIVING IT PC
|
||||
.CLOSE USRT, ;CLOSE TEMPORARY INFERIOR
|
||||
USRCAS: PUSHJ P,USRCLO ;
|
||||
.OPEN USRO,USRF ;FINALLY OPEN ON RIGHT CHANNEL
|
||||
JSP A,ANALER
|
||||
TLO FF,USRUN ;INDICATE THERE EXISTS ONE
|
||||
POPJ P,
|
||||
|
||||
USRILT: .UCLOSE USRT, ;FLUSH TEMPORARY INFERIOR
|
||||
POPJ P,
|
||||
|
||||
USRCLO: PUSHJ P,DTTY ;MAKE SURE TTY IS UP
|
||||
TLZE FF,USRUN ;CHECK IF ACTUALLY OPEN
|
||||
.UCLOSE USRO, ;YES, WIPE IT OUT
|
||||
POPJ P,
|
||||
|
||||
ATTY: TLNE FF,USRUN ;CANT IF NO USR OPEN
|
||||
.ATTY USRO, ;TRY TO GIVE IT UP
|
||||
JRST NOATTY ;LOST
|
||||
TLO FF,TTYGN ;FLAG TTY GONE
|
||||
POPJ P,
|
||||
|
||||
DTTY: TLZN FF,TTYGN ;SEE IF TTY GIVEN AWAY
|
||||
POPJ P, ;I GOT IT ALREADY
|
||||
.DTTY USRO, ;GOBBLE IT BACK
|
||||
FATAL CANT GET TTY BACK FM INF
|
||||
POPJ P,
|
||||
|
||||
LISTF: PUSHJ P,SCARE ;OUTPUT FILE DIRECTORY
|
||||
JUMPN C,.+3
|
||||
CAME B,[SIXBIT /@/]
|
||||
MOVE C,B ;1ST ARG IS DEV IF NO :
|
||||
MOVE A,[SIXBIT /.FILE./]
|
||||
MOVE B,[SIXBIT /(DIR)/]
|
||||
PUSHJ P,SCARE1
|
||||
SKIPE C
|
||||
HLRM C,PRTF ;SET DEV
|
||||
HRRZS PRTF
|
||||
JRST PRNCOM
|
||||
|
||||
PRINT: PUSHJ P,SCARE ;GET A,B,C,D = N1,N2,DEV,USR
|
||||
PUSHJ P,COMTTT
|
||||
PRNCOM: .OPEN PRTC,PRTF
|
||||
JSP A,ANALER
|
||||
JRST XPRINT
|
||||
|
||||
LOAD: PUSHJ P,SCARE ;GET FILE NAME
|
||||
CAME A,[SIXBIT /TS/]
|
||||
CAMN A,[SIXBIT /@/]
|
||||
MOVE A,B
|
||||
CAMN A,USRF+2
|
||||
PUSHJ P,USRCLO ;KILL OLD ONE FIRST
|
||||
MOVEM A,USRF+2 ;'@' OR 'TS' FIRST NAME => SECOND FOR JOB NAME
|
||||
PUSHJ P,COMTTT
|
||||
MOVSI C,6
|
||||
HLLM C,PRTF ;SET BLOCK IMAGE INPUT
|
||||
.OPEN SYSI,PRTF
|
||||
JSP A,ANALER
|
||||
TLO FF,INFIL
|
||||
PUSHJ P,USRCAS ;FLUSH OLD INFERIOR, OPEN NEW ONE
|
||||
JRST UOPEN
|
||||
|
||||
DELETE: PUSHJ P,SCARE
|
||||
PUSHJ P,COMTTT
|
||||
.FDELE PRTF ;SYS CALL DELETE
|
||||
JRST CANNOT ;OOPS, ERROR RET
|
||||
JRST BEG ;OK
|
||||
|
||||
XFILE: PUSHJ P,SCARE ;READ COMMANDS FROM FILE
|
||||
TLO FF,RDF+ECHF ;FLAG READING
|
||||
PUSHJ P,COMTTT
|
||||
.OPEN TYIC,PRTF
|
||||
JSP A,.+2
|
||||
JRST BEG
|
||||
.OPEN TYIC,TYIF ;GET BACK TTY - COULDNT OPEN COMMAND FILE
|
||||
JSP A,ANALER ;COULDNT GET TTY - WILL BE FATAL ??
|
||||
JRST ANALER
|
||||
|
||||
|
||||
SCARE: PUSHJ P,SCNAME
|
||||
SCARE1: CAMN B,[SIXBIT /@/]
|
||||
JRST UNCHN ;IF HE DIDNT GIVE FILE NAME,USE OLD ONE ????
|
||||
MOVEM A,PRTF+1
|
||||
MOVEM B,PRTF+2
|
||||
UNCHN: SKIPE D ;CHANGE SNAME
|
||||
.SUSET [.SSNAME,,D]
|
||||
POPJ P,
|
||||
|
||||
COMTTT: SKIPE C
|
||||
HLRM C,PRTF ;SET DEV
|
||||
HRRZ C,PRTF
|
||||
MOVEM C,PRTF
|
||||
CAIE C,(SIXBIT /TTY/)
|
||||
POPJ P,
|
||||
PSIXI (SIXBIT /DEV/)
|
||||
JRST QBEG
|
||||
|
||||
LOGIN: PUSHJ P,GETSYL
|
||||
MOVEM B,USRF+1 ;SET NEW UNAME (? SO CAN HACK OTHERS DISOWNED PROCEDURES)
|
||||
.LOGIN B,
|
||||
JRST CANNOT
|
||||
MOVEM B,LOGNAM
|
||||
MOVEM B,COMPF+1
|
||||
MOVEI B,(SIXBIT /COM/)
|
||||
HRRM B,COMPF
|
||||
.OPEN PRTC,COMPF
|
||||
JRST BEG ;NO COM:USER MAIL
|
||||
JRST XPRINT
|
||||
|
||||
DISOWN: PUSHJ P,CKRUN
|
||||
PUSHJ P,DISOW
|
||||
JRST BEG
|
||||
|
||||
DISOW: .DISOWN USRO, ;DSN
|
||||
FATAL WONT DISOWN INFERIOR
|
||||
SETOM USRF+2 ;TO AVOID LOSSAGE ON REOWNING
|
||||
TLZ FF,USRUN
|
||||
POPJ P,
|
||||
|
||||
CONTIN: PUSHJ P,CKRUN
|
||||
PUSHJ P,ATTY ;GIVE UP THE TTY
|
||||
PROCED: PUSHJ P,CKRUN
|
||||
.USET USRO,[.SUSTP,,BLANK] ;SEE HIM RUN !
|
||||
JRST BEG
|
||||
|
||||
KILL: PUSHJ P,CKRUN
|
||||
PUSHJ P,USRCLO ;FLUSH JOB IF ANY
|
||||
JRST BEG
|
||||
|
||||
CKLOG: SKIPE LOGNAM ;CHECK IF LOGGED IN
|
||||
POPJ P,
|
||||
PASC [ASCIZ /LOGIN/]
|
||||
JRST QBEG
|
||||
|
||||
CKRUN: TLNE FF,USRUN ;CHECK IF JOB CURRENTLY EXISTS
|
||||
POPJ P,
|
||||
PASCR [ASCIZ /NO PROGRAM RUN/] ;JOB
|
||||
JRST BEG
|
||||
|
||||
DEFINE COMTAB A,B
|
||||
SIXBIT /A/
|
||||
SIXBIT /B/+A
|
||||
TERMIN
|
||||
|
||||
MYCOM: COMTAB HELP
|
||||
COMTAB LOGOUT
|
||||
COMTAB DELETE
|
||||
COMTAB FLAP
|
||||
COMTAB DISOWN
|
||||
COMTAB CONTIN
|
||||
COMTAB PROCED
|
||||
COMTAB KILL
|
||||
COMTAB LOAD
|
||||
COMTAB LISTF
|
||||
COMTAB PRINT
|
||||
COMTAB ERR
|
||||
COMTAB XFILE
|
||||
COMTAB LOGIN
|
||||
COMTAB DEATH
|
||||
COMTAB SEND
|
||||
COMTAB DDT
|
||||
NUMCOM==.-MYCOM ;COUNT FOR TABLE USES
|
||||
|
||||
PHELP: POP P,A ;HMM FOR ?
|
||||
HELP: PASC [ASCIZ /COMMANDS /]
|
||||
MOVE A,[-NUMCOM,,MYCOM]
|
||||
PASCI 40 ;SPACE
|
||||
PSIX (A) ;TABLE ENTRY
|
||||
AOBJN A,.+1
|
||||
AOBJN A,.-3
|
||||
PASCI ^M ;CR TO END IT
|
||||
JRST BEG
|
||||
|
||||
LOGOUT: .LOGOUT ;IF AT TOP LEVEL
|
||||
.VALUE [ASCIZ /:LOGOUT /] ;OTHERWISE
|
||||
PSIXI (SIXBIT /LOG/)
|
||||
JRST QBEG ;IN CASE
|
||||
|
||||
FLAP: MOVE B,[.UDISMT A,]
|
||||
ACOMM: PUSHJ P,GETCCA ;GETCOMM CHAR TO A
|
||||
SUBI A,"0 ;MAKE ASCII TO UNIT #
|
||||
JUMPLE A,.+3 ;CHECK FOR VALID
|
||||
CAIG A,8
|
||||
XCT B ;DO IT
|
||||
SKIPA ;HMM!
|
||||
JRST BEG
|
||||
|
||||
CANNOT: PASC [ASCIZ /CAN'T /]
|
||||
MOVEI A,0
|
||||
IDPB A,COMPTR ;FUDGE FOR ASC PRT
|
||||
PASCR COMMND
|
||||
JRST BEG
|
||||
|
||||
DDT: .TRANDL TBLOCK ;UNTRANSLATE TO ATSIGN HACTRN
|
||||
PSIXI (SIXBIT /TRN/)
|
||||
JRST DEATH ; DISOWN AND GET CLASS ONE INTERUPT TO RELOAD
|
||||
|
||||
|
||||
TBLOCK: 0 ;UNAME
|
||||
SIXBIT /*/ ;JNAME
|
||||
|
||||
UUOCT==0
|
||||
UUOTAB: JRST ILUUO
|
||||
IRPS X,,[PDEC PDECI POCT POCTI PSIX PSIXI PASC PASCI PASCR]
|
||||
UUOCT==UUOCT+1
|
||||
X=UUOCT_33
|
||||
JRST U!X
|
||||
TERMIN
|
||||
|
||||
UUOMAX==.-UUOTAB
|
||||
|
||||
UUOH: 0
|
||||
PUSH P,A
|
||||
PUSH P,B
|
||||
PUSH P,C
|
||||
MOVE A,LPOS
|
||||
CAIGE A,35. ;CHECK LINE POS
|
||||
JRST .+3
|
||||
MOVEI A,^M
|
||||
PUSHJ P,IOTA
|
||||
LDB A,[270400,,40] ;GET UUO AC,
|
||||
HRRZ B,40 ;AND ADR
|
||||
LDB C,[330600,,40] ;OP CODE
|
||||
CAIL C,UUOMAX
|
||||
MOVEI C,0 ;GRT=>ILLEGAL
|
||||
TLNN FF,OUTFLS
|
||||
JRST @UUOTAB(C) ;GO TO PROPER ROUT
|
||||
SKIPE C
|
||||
JRST UUORET
|
||||
ILUUO: MOVEI B,[ASCIZ /ILLGL UUO/] ;ILUUO
|
||||
UPASCR: SKIPA C,[15] ;CR FOR END OF TYPE
|
||||
UPASC: MOVEI C,0 ;NO CR
|
||||
HRLI B,440700 ;MAKE ASCII POINTER
|
||||
ILDB A,B ;GET CHAR
|
||||
JUMPE A,.+3 ;FINISH?
|
||||
PUSHJ P,IOTA ;TYPE "A"
|
||||
JRST .-3 ;AND GET ANOTHER
|
||||
SKIPE A,C ;GET SAVED CR?
|
||||
PUSHJ P,IOTA
|
||||
UUORET: POP P,C
|
||||
POP P,B
|
||||
POP P,A
|
||||
JRST 2,@UUOH
|
||||
|
||||
UPASCI: MOVE A,B ;PRT ASCII IMMEDIATE
|
||||
PUSHJ P,IOTA
|
||||
JRST UUORET
|
||||
|
||||
UPSIX: SKIPA A,[440600,,0(B)] ;PRINT A SIXBIT WORD
|
||||
UPSIXI: MOVE A,[220600,,40] ;PRT SIXBIT IMMEDIATE
|
||||
UPSLA: ILDB C,A
|
||||
ADDI C,40 ;MAKE TO ASCII(+40)
|
||||
CAIE C,40 ;BUT SKIP IF SPACE
|
||||
PUSHJ P,IOTC
|
||||
TLNE A,770000 ;SEE IF FINISH
|
||||
JRST UPSLA ;NOPE, MORE
|
||||
JRST UUORET
|
||||
|
||||
UPDEC: SKIPA C,[10.] ;GET BASE FOR DECIMAL
|
||||
UPOCT: MOVEI C,8. ;OCTAL BASE
|
||||
MOVE B,(B) ;GET ACTUAL WORD TO PRT
|
||||
JRST .+3 ;JOIN CODE
|
||||
UPDECI: SKIPA C,[10.] ;DECIMAL
|
||||
UPOCTI: MOVEI C,8.
|
||||
MOVEM C,BASE
|
||||
SKIPN A
|
||||
HRREI A,-1 ;A=DIGIT COUNT
|
||||
PUSHJ P,UPNUM ;PRINT NUMBR
|
||||
JRST UUORET
|
||||
|
||||
UPNUM: IDIV B,BASE
|
||||
HRLM C,(P) ;SAVE DIGIT
|
||||
SOJE A,UPNUM1 ;DONE IF 0
|
||||
SKIPG A ;+ => MORE
|
||||
SKIPE B ;- => B=0 => DONE
|
||||
PUSHJ P,UPNUM ;ELSE MORE
|
||||
UPNUM1: HLRZ C,(P) ;RETREIVE DIGITS
|
||||
ADDI C,"0 ;MAKE TO ASCII
|
||||
IOTC: EXCH A,C
|
||||
PUSHJ P,IOTA
|
||||
EXCH A,C
|
||||
POPJ P,
|
||||
|
||||
IOTA: CAIE A,^C
|
||||
TLNE FF,OUTFLS
|
||||
POPJ P,
|
||||
CAIN A,^J ;IS LF
|
||||
TLZN FF,CRLF ;IF AFTER CR
|
||||
.IOT TYOC,A ;TYPE OUT A
|
||||
AOS LPOS
|
||||
CAIE A,^M ;TYPE CR?
|
||||
POPJ P,
|
||||
.IOT TYOC,[^J] ;PUT OUT LF FOR CR
|
||||
TLO FF,CRLF ;AND FLG
|
||||
SETZM LPOS ;YES, ZERO
|
||||
POPJ P,
|
||||
TSINT: 0 ;MASK WD HERE
|
||||
0 ;RETURN LOC
|
||||
PUSH P,A ;SAVE IN CASE
|
||||
MOVEM FF,FFSAV
|
||||
SKIPL A,TSINT ;IS IT INFERIOR PROBLEM ?
|
||||
JRST MONINT ;NO, MY OWN !
|
||||
.USET USRO,[.RPIRQ,,A] ;GET USER INT BITS
|
||||
.USET USRO,[.SPIRQ,,BLANK] ;FLUSH ALL ???
|
||||
TLO FF,USRUN ;IN CASE YOU DIDN'T KNOW !!
|
||||
TLZ FF,OUTFLS
|
||||
TRZE A,2 ;_Z TYPED AT INFERIOR
|
||||
TLO FF,TTYGN ;IN CASE YOU DIDN'T KNOW !!
|
||||
PUSHJ P,DTTY ;GET TTY BACK
|
||||
TRZE A,20 ;DISPLAY PROTECTION VIOLATION
|
||||
PSIXI (SIXBIT /DPV/)
|
||||
TRZE A,40 ;ILLEGAL INSTRUCTION
|
||||
PSIXI (SIXBIT /ILL/)
|
||||
TRZE A,200 ;.VALUE FROM INFERIOR
|
||||
JRST VALRET ;READ HIS STRING
|
||||
TRZE A,400 ;I/O CHANNEL ERROR
|
||||
PSIXI (SIXBIT /IOC/)
|
||||
TRZE A,2000 ;.BREAK
|
||||
PSIXI (SIXBIT /BRK/)
|
||||
TRZE A,20000 ;MEMORY PROTECTION VIOLATION
|
||||
PSIXI (SIXBIT /MPV/)
|
||||
TRNN A,-1
|
||||
JRST IFLUSH ;NOMORE INTS
|
||||
POCTI 6,(A) ;PRT RH ONLY
|
||||
PASC [ASCIZ / INTRPT FM INF/]
|
||||
IFLUSH: POP P,A ;GET OFF STACK
|
||||
.RESET TYIC,
|
||||
.DISMISS [QBEG] ;ALWAYS STOP HIM FOR INTERUPTING
|
||||
|
||||
MONINT: PUSHJ P,DTTY
|
||||
TRZE A,2 ;_Z TYPED AT ME
|
||||
PASCI ^Z
|
||||
TRZE A,1 ;CHARACTER TYPED
|
||||
PUSHJ P,TYILK
|
||||
TRNE A,-1
|
||||
TLZ FF,OUTFLS ;IF ANY BUGS TO REPORT ABOUT
|
||||
TRZE A,100 ;FIVE MINUTES
|
||||
PUSHJ P,CKDIE ;PRINT DOWN MESS
|
||||
TRZE A,1000 ;NO INF CORE
|
||||
JRST NOCORA
|
||||
TRZE A,400000 ;CLI INTERUPT
|
||||
PUSHJ P,GULPMS
|
||||
TRNN A,-1
|
||||
JRST NOCORB
|
||||
POCTI 6,(A) ;PRINT ERROR BITS
|
||||
PASC [ASCIZ / INTRPT /]
|
||||
MOVE A,TSINT+1
|
||||
POCTI 6,(A)
|
||||
JRST IFLUSH ;YES, FLUSH-SINCE IT WASNT STANDARD INTERUPT
|
||||
|
||||
NOCORB: MOVE A,FFSAV
|
||||
TLNE A,TTYGN ;WAS IT GONE AT INTERUPT TIME ?
|
||||
PUSHJ P,ATTY ;GIVE TTY BACK TO INF
|
||||
POP P,A
|
||||
.DISMISS TSINT+1 ;GO ON - I SERVICED IT OK
|
||||
|
||||
NOCORA: PSIXI (SIXBIT /COR/)
|
||||
JRST IFLUSH
|
||||
|
||||
GULPMS: .OPEN CLAC,[SIXBIT / "CLA/]
|
||||
POPJ P, ;MIGHT WANT TO BARF
|
||||
PUSH P,A
|
||||
PASCI ^M
|
||||
PASC [ASCIZ /MESSAGE FROM /]
|
||||
PUSHJ P,REDONE
|
||||
PSIX ONEWRD
|
||||
PASCI "
|
||||
PUSHJ P,REDONE
|
||||
PSIX ONEWRD
|
||||
PASCI ^M
|
||||
GULPM1: PUSHJ P,REDONE
|
||||
PASC ONEWRD
|
||||
JRST GULPM1
|
||||
|
||||
REDONE: HRROI A,ONEWRD
|
||||
.IOT CLAC,A
|
||||
SKIPL A
|
||||
POPJ P,
|
||||
SUB P,[1,,1]
|
||||
CLOCRR: .CLOSE CLAC,
|
||||
PASCI ^M
|
||||
JRST POPAJ
|
||||
|
||||
SEND: PUSHJ P,GETSYL ;GET LOSER NAME
|
||||
MOVEM B,CLIFN1
|
||||
MOVEM B,CLUFN1
|
||||
.OPEN CLIC,CLUFNB ;SEE IF LOGGED IN
|
||||
JRST CLSNDB ;NO
|
||||
.CLOSE CLIC,
|
||||
.OPEN CLIC,CLIFNB
|
||||
JSP A,ANALER
|
||||
SEND1: ILDB A,COMPTR ;SEND STUFF ON CLI
|
||||
.IOT CLIC,A
|
||||
CAIE A,^M
|
||||
JRST SEND1
|
||||
MOVE A,LCMCHR
|
||||
CAIN A,^C
|
||||
JRST DONCLI
|
||||
MOVE A,CLUFN1
|
||||
CAMN A,LOGNAM ;TO SELF ?
|
||||
JRST DONCLI ;BARF ! GROSS DANGER !
|
||||
PUSHJ P,RCMD ;GET MORE UNTIL GET EOF
|
||||
.IOT CLIC,[^M]
|
||||
JRST SEND1
|
||||
|
||||
DONCLI: .CLOSE CLIC,
|
||||
JRST BEG
|
||||
|
||||
CLSNDB: PASCR [ASCIZ /NOT LOGGED IN/]
|
||||
JRST BEG
|
||||
|
||||
CLIFNB: 1,,(SIXBIT /CLI/)
|
||||
CLIFN1: .
|
||||
SIXBIT /HACTRN/
|
||||
|
||||
CLUFNB: (SIXBIT /USR/)
|
||||
CLUFN1: .
|
||||
SIXBIT /HACTRN/
|
||||
ONEWRD: 0
|
||||
BLANK: 0 ;AND ANOTHER TO STOP ASCIZ
|
||||
|
||||
TYILK: PUSH P,A
|
||||
MOVEI A,TYIC
|
||||
.ITYIC A,
|
||||
JRST POPAJ
|
||||
CAIN A,^G
|
||||
JRST FLSTYO
|
||||
CAIE A,^S
|
||||
JRST POPAJ
|
||||
TLO FF,OUTFLS ;INDICATE OUTPUT FLUSHAGE
|
||||
.RESET TYOC,
|
||||
JRST POPAJ
|
||||
|
||||
FLSTYO: .RESET TYOC,
|
||||
.IOT TYOC,[7] ;ECHO THE CNTRL G
|
||||
JRST IFLUSH ;PDL WILL GET RESET LATER
|
||||
|
||||
VALRET: .USET USRO,[.RSV40,,A]
|
||||
TRNN A,-1
|
||||
JRST VALRE2 ;ZERO ADDRESS
|
||||
MOVEI B,6
|
||||
HRLM B,USRF ;SET MODE TO IMAGE, BLOCK, INPUT
|
||||
.OPEN SYSI,USRF
|
||||
JSP A,ANALER
|
||||
.ACCES SYSI,A ;?
|
||||
MOVE B,[-COMLNG,,COMMND]
|
||||
.IOT SYSI,B ;MOVE STRING OVER
|
||||
TLO FF,VALCM ;SET TO SCAN
|
||||
MOVE B,[440700,,COMMND] ;RESET COMMAND SCANNER
|
||||
MOVEM B,COMPTR
|
||||
.CLOSE SYSI,
|
||||
VALRE1: POP P,A
|
||||
.RESET TYIC,
|
||||
.DISMISS [BEG] ;JRST BEG
|
||||
|
||||
VALRE2: PSIXI (SIXBIT /VAL/)
|
||||
JRST IFLUSH
|
||||
|
||||
CKDIE: PUSH P,A
|
||||
.DIETIM A, ;GET TIME TIL SYS DWN
|
||||
JUMPL A,POPAJ ;NO DYING NOW
|
||||
PUSH P,B
|
||||
PUSH P,C
|
||||
PUSH P,D
|
||||
IDIVI A,30.*60.*60. ;HOURS IN A
|
||||
IDIVI A+1,30.*60. ;MINS IN A+1
|
||||
IDIVI A+2,30. ;SEC IN A+2
|
||||
PDECI (A) ;PRT HRS
|
||||
PASCI ":
|
||||
PDECI 2,(A+1) ;PRT MINS
|
||||
PASCI ":
|
||||
PDECI 2,(A+2) ;PRT SECS
|
||||
PASCR [ASCIZ / UNTIL SYS DWN/]
|
||||
POPDJ: POP P,D
|
||||
POPCJ: POP P,C
|
||||
POPBJ: POP P,B
|
||||
POPAJ: POP P,A
|
||||
POPJP: POPJ P,
|
||||
|
||||
COMPF: SIXBIT / SYSSYSTEMMAIL / ;FOR MAIL PRINT, SET FOR USER WHEN LOGIN
|
||||
SYSF: SIXBIT / &SYSTS /
|
||||
USRF: SIXBIT / 'USR /
|
||||
TYIF: SIXBIT / (TTYMONITRTTYIN /
|
||||
PRTF: SIXBIT / DSK / ;EXTRA LONG FOR DELETE
|
||||
|
||||
CONSTANTS
|
||||
VARIABLES
|
||||
|
||||
;OVERLAYED BY COMMANDS LATER ON AND PART OF I/O BUFFER (FOR LOADING PROGS)
|
||||
|
||||
COMMND: ;HERE STARTS COMMND,I/O BUFFER
|
||||
|
||||
STARTU: .CLOSE 3,
|
||||
.SUSET [.RJNAME,,A] ;THIS GETS OVERLAYED
|
||||
CAME A,[SIXBIT /HACTRN/]
|
||||
.VALUE [ASCII /:DDT ISYS ATSIGN HACTRN SYS TS MONITîU./]
|
||||
;FLUSH UNLESS TOP LEVEL
|
||||
MOVE P,[-PDLLNG,,PDL-1]
|
||||
.OPEN TYOC,[SIXBIT / !TTYMONITRTTYOUT/]
|
||||
JRST LOGOUT ;FLUSH IMMEDIATE IF CANT TYPE
|
||||
.OPEN TYIC,TYIF
|
||||
FATAL CANT OPEN TTY INPUT
|
||||
TLZ FF,-1 ;RESET ALL FLAGS
|
||||
.STATUS TYIC,A
|
||||
TRNE A,2 ;IS IT GE-BITER ?
|
||||
PASCI ^L
|
||||
PASCI ^M
|
||||
PSIX [.FNAM1]
|
||||
PASCI ".
|
||||
PSIX [.FNAM2]
|
||||
.SUSET [.RUINDEX,,A] ;GIVE USER INDEX
|
||||
PASC [ASCIZ / U=/]
|
||||
POCTI (A)
|
||||
PASCI ^M ;CR
|
||||
PUSHJ P,CKDIE ;CHECK IF SYS GOING DOWN
|
||||
MOVEI A,621561 ;MASK WORDS FOR INTERRUPTS
|
||||
; CHRTYP DPMPV ILLINS SYSDIE IOCHNER MPVINF MPV PDLOV + BAD42 _Z .VALUE .BREAK _N CLI
|
||||
MOVSI A+1,1 ;BIT FOR INFERIOR
|
||||
.SETM2 A, ;SET MASKWDS
|
||||
|
||||
.SUSET [.RUNAM,,B] ;GET USERS NAME
|
||||
AOJE B,STAR1 ;JUMP IF NOT LOGGED YET
|
||||
SOS B
|
||||
MOVEM B,LOGNAM ;ALREADY LOGGED IN IF NOT -1
|
||||
JRST BEG
|
||||
|
||||
STAR1: .OPEN PRTC,COMPF
|
||||
JRST BEG ;NO SYS:SYSTEM MAIL
|
||||
JRST XPRINT ;YES, THERE IS, PRINT IT
|
||||
|
||||
CONSTANTS
|
||||
VARIABLES
|
||||
|
||||
INFORM \.-STARTU,STARTUP LENGTH
|
||||
|
||||
;MIGHT WANT TO PUT UBUF IN TRANSIENT SECOND BLOCK OF CORE IF WE NEED MORE SPACE.
|
||||
|
||||
UBUF=COMMND+COMLNG ;LEAVE COMMAND BUFF SEPARATE
|
||||
IFL .-UBUF-BUFLNG,LOC UBUF+BUFLNG
|
||||
|
||||
PDL: BLOCK PDLLNG
|
||||
|
||||
INFORM \NUMCOM/2,NUMBER OF COMMANDS
|
||||
|
||||
INFORM \.,PROG LENGTH
|
||||
|
||||
END STARTU
|
||||
.VALUE FROM INFERIOR
|
||||
JRST VALRET ;READ HIS STRING
|
||||
TRZE A,400 ;I/O CHANNEL ERROR
|
||||
Reference in New Issue
Block a user