mirror of
https://github.com/PDP-10/its.git
synced 2026-04-01 11:58:40 +00:00
1689 lines
27 KiB
Plaintext
Executable File
1689 lines
27 KiB
Plaintext
Executable File
TITLE MUDINQ -- MUDDLE INQUIRER
|
||
.MLLIT==1
|
||
|
||
O=0
|
||
A=1
|
||
B=2
|
||
C=3
|
||
D=4
|
||
E=5
|
||
F=6
|
||
P=10
|
||
SC=11
|
||
CH=12
|
||
CNT=13
|
||
CONTIN=14
|
||
FREBUF=15
|
||
INTAC=16
|
||
|
||
TYIC==0
|
||
TYOC==1
|
||
DSKI==2
|
||
MSPI1==3 ; CAN HAVE 3 MESSAGES OUT AT ONCE
|
||
MSPO==4
|
||
MSPI2==5
|
||
MSPI3==6
|
||
MSCHNS==1_MSPI3+1_MSPI2+1_MSPI1 ;MSP READ CHANNELS
|
||
|
||
USEUJ==20
|
||
SIMM==10
|
||
SANDH==4
|
||
ITSPGS==300000/2000 ;# ITS PAGES
|
||
HIPORG==200 ;PAGE # OF A ORIGIN OF HIGH PAGES
|
||
|
||
LOC 42
|
||
-TSINTL,,TSINT
|
||
LOC 100
|
||
|
||
|
||
DEFINE DBP X ;DECREMENT BYTE POINTER
|
||
ADD X,[070000,,0]
|
||
JUMPGE X,.+3
|
||
SOS X
|
||
HRLI X,010700
|
||
TERMIN
|
||
|
||
DEFINE MACT ADDR
|
||
MOVEI 0,ADDR
|
||
MOVEM 0,ACT2
|
||
MOVEM P,ACT1
|
||
TERMIN
|
||
|
||
DEFINE ASCIS VAL
|
||
ZORK==.LENGTH /VAL/
|
||
BB==ZORK-<<ZORK/5>*5>
|
||
<<ZORK+4>/5>
|
||
IFE BB,[ASCII /VAL/]
|
||
IFE BB-1,[ASCII /VAL /]
|
||
IFE BB-2,[ASCII /VAL /]
|
||
IFE BB-3,[ASCII /VAL /]
|
||
IFE BB-4,[ASCII /VAL /]
|
||
TERMIN
|
||
|
||
DEFINE BLATIT MSG
|
||
MOVEI E,MSG
|
||
PUSHJ P,BLAT
|
||
TERMIN
|
||
|
||
DEFINE COPBLK MSG
|
||
MOVEI E,MSG
|
||
PUSHJ P,COPYBL
|
||
TERMIN
|
||
|
||
JCLPTR: 440700,,JCL
|
||
LSTCHN: 0 ;IF NON-ZERO, POINTER TO LAST LISTEN CHANNEL OPENED
|
||
STATFL: 0
|
||
STY: 0
|
||
NPCOMP: 0
|
||
COMTRY: 0
|
||
SYSHER: 0
|
||
OPFFLG: 0
|
||
XORFLG: 0
|
||
PURGER: 0
|
||
SCRIPT: 0
|
||
UNXSW: 0
|
||
RDERR: 0
|
||
XMSGLN: 0
|
||
STRSW: 0
|
||
RDSW: 0
|
||
PRTSW: -1 ;LOCK SO INTERRUPT HANDLER AND PRINTER DON'T COMPETE
|
||
CHRCNT: 0
|
||
CURUNM: 0
|
||
|
||
ACT1: 0 ;SAVED P FOR MORE HANDLER TO DO DISMISS
|
||
ACT2: 0 ;ADDR TO DISMISS TO
|
||
|
||
NUMCHR: 0 ;#CHARACTERS TYPED AHEAD
|
||
INTBUF: 440700,,TINBUF ;POINTER TO TEMPORARY INPUT BUFFER
|
||
FBUF: 440700,,TINBUF ;POINTER TO FRONT OF TEMPORARY BUFFER
|
||
EBUF: 440700,,TINBUF ;POINTER TO END OF TEMPORARY BUFFER
|
||
PRGJNM: SIXBIT /PURGE/
|
||
MKSJNM: SIXBIT /MAKSCR/
|
||
STTJNM: SIXBIT /STATUS/
|
||
WHOJNM: SIXBIT /WHOMUD/ ;JNAME CHECKS FOR INQUIRE
|
||
XORJN1: SIXBIT /XORCST/
|
||
XORJN2: SIXBIT /X/
|
||
|
||
UNAMEB: 2
|
||
ASCII / \"X=/
|
||
AUNAME: 0
|
||
|
||
STIMEB: 1
|
||
STIME: ASCII /1800 /
|
||
|
||
MYUNM: 0
|
||
MYJNM: 0
|
||
XUNAME: 0 ;XUNAME OF USER
|
||
NAME: 0 ;SLOT FOR FILLING IN FILE NAMES
|
||
|
||
DBUF:
|
||
JCL: BLOCK 40.
|
||
DBUFLN==.-DBUF
|
||
CHSTK: BLOCK 40
|
||
PSTK: BLOCK 60
|
||
INTSTK: BLOCK 40
|
||
MSGBLK: BLOCK 200.
|
||
TINBUF: BLOCK 20 ;INPUT BUFFER
|
||
|
||
UNAMES: 0 ;BLOCK FOR IPC SENDS
|
||
JNAMES: 0
|
||
WDCNT: 0
|
||
SNDBLK: 0
|
||
IPCTYP: 400000,,0
|
||
BLOCK 198.
|
||
|
||
MSPCHS: MSPI1,,MSPIN1 ;CHANNEL #,,BUFFER
|
||
0 ;IS THERE AN UNPRINTED MESSAGE HERE?
|
||
SIXBIT /MUDINQ/ ;JNAME FOR THIS CHANNEL
|
||
MSPI2,,MSPIN2
|
||
0
|
||
SIXBIT /MUDINR/
|
||
MSPI3,,MSPIN3
|
||
0
|
||
SIXBIT /MUDINS/
|
||
MSPCHL: MSPCHS-.,,MSPCHS
|
||
MSPCHK==2
|
||
;BLOCKS FOR MSP LISTENS
|
||
MSPIN1: 0 ;BLOCK FOR MSPI1
|
||
0
|
||
15
|
||
BLOCK 15
|
||
MSPIN2: 0 ;BLOCK FOR MSPI2
|
||
0
|
||
15
|
||
BLOCK 15
|
||
MSPIN3: 0 ;BLOCK FOR MSPI3
|
||
0
|
||
15
|
||
BLOCK 15
|
||
|
||
EBLOCK: 0 ;COPY OF MSPINP BLOCK
|
||
0
|
||
15
|
||
BLOCK 15
|
||
|
||
MSPBLK: 0
|
||
MSPADD: 0
|
||
MSPUNM: 0
|
||
MSPJNM: 0
|
||
|
||
OPBLK: 0 ;OPEN BLOCK FOR MSPO
|
||
-203.,,UNAMES
|
||
0
|
||
0
|
||
|
||
FILBLK: SETZ ;OPEN BLOCK FOR DSKI
|
||
SIXBIT /OPEN/
|
||
[.BII,,DSKI] ;BLOCK IMAGE MODE
|
||
DEVICE
|
||
FNAME1
|
||
FNAME2
|
||
SETZ SNAME
|
||
|
||
DEVICE: SIXBIT /DSK /
|
||
FNAME1: 0
|
||
FNAME2: SIXBIT /> /
|
||
SNAME: 0
|
||
|
||
TTYSET: SETZ ;BLOCK FOR CALL TO TTYSET
|
||
SIXBIT /TTYSET/
|
||
1000,,TYIC
|
||
[232323,,232323]
|
||
SETZ [232323,,230323]
|
||
|
||
;INTERRUPT TABLE: MORE FIRST, THEN CHARACTERS, THEN MSP (SO MORES WILL HAPPEN
|
||
;IF PROCESSING MSP INTERRUPT)
|
||
;AUTOMAGICALLY PUSH O, A AND B
|
||
ACPUSH==3
|
||
TSINT: ACPUSH,,INTAC
|
||
0 ? 1_TYOC ? 0 ? MSCHNS ? DOMORE ; CHAR INTERRUPTS CAN HAPPEN DURING MORE
|
||
0 ? 1_TYIC ? 0 ? 1_TYIC+MSCHNS ? DOREAD
|
||
0 ? 1_MSPI1 ? 0 ? MSCHNS ? DOMSP1
|
||
0 ? 1_MSPI2 ? 0 ? MSCHNS ? DOMSP2
|
||
0 ? 1_MSPI3 ? 0 ? MSCHNS ? DOMSP3
|
||
TSINTL==.-TSINT
|
||
|
||
;MORE INTERRUPT HANDLER
|
||
DOMORE: PUSH P,C
|
||
SETOM MORFLG' ; SO CHAR INTERRUPTS DISMISS IMMEDIATE
|
||
MOVEI C,0
|
||
MOVEI A,10
|
||
MOVE B,[440700,,[ASCII /--More--/]]
|
||
.CALL SIOT
|
||
.LOSE 1000
|
||
.CALL [SETZ
|
||
SIXBIT /FLUSH/
|
||
SETZI TYOC]
|
||
.LOSE 1000
|
||
SKIPN C
|
||
.HANG
|
||
MOVE A,C
|
||
SETZM MORFLG
|
||
POP P,C
|
||
CAIE A,"
|
||
JRST DOMFLS
|
||
MOVEI A,4
|
||
MOVE B,[440700,,[ASCII /TL/]]
|
||
.CALL SIOT
|
||
.LOSE 1000
|
||
.CALL NDISMI ; NORMAL DISMISS IF SPACE TYPED
|
||
.LOSE 1000
|
||
DOMFLS: CAIN A,^G
|
||
JRST FINIS
|
||
MOVEI A,7
|
||
MOVE B,[440700,,[ASCII /Flushed/]]
|
||
.CALL SIOT
|
||
.LOSE 1000
|
||
SKIPN ACT1
|
||
JRST [.CALL NDISMI
|
||
.LOSE 1000]
|
||
MOVE P,ACT1
|
||
SETZM ACT1
|
||
.CALL [SETZ
|
||
SIXBIT /DISMIS/
|
||
MOVSI ACPUSH
|
||
INTAC
|
||
SETZ ACT2]
|
||
.LOSE 1000
|
||
|
||
;DISMISS FOR NORMAL STUFF: JUST RESTORE EVERYTHING
|
||
NDISMI: SETZ
|
||
SIXBIT /DISMIS/
|
||
MOVSI ACPUSH
|
||
SETZ INTAC
|
||
|
||
SIOT: SETZ
|
||
SIXBIT /SIOT/
|
||
MOVEI TYOC
|
||
B
|
||
SETZ A
|
||
|
||
DOREAD: MOVEI A,TYIC
|
||
.ITYIC A,
|
||
.CALL NDISMI
|
||
CAIN A,^G
|
||
JRST FINIS
|
||
CAIN A,^S
|
||
JRST RESET
|
||
JUMPE A,QUITTE
|
||
SKIPLE NUMCHR
|
||
JRST DOREA1
|
||
MOVE 0,INTBUF
|
||
MOVEM 0,FBUF
|
||
MOVEM 0,EBUF
|
||
SETZM NUMCHR
|
||
DOREA1: .IOT TYIC,A
|
||
SKIPE MORFLG
|
||
JRST [MOVE C,A
|
||
JRST DOREA2]
|
||
IDPB A,EBUF
|
||
AOS NUMCHR
|
||
DOREA2: .CALL NDISMI
|
||
.LOSE 1000
|
||
|
||
; MSP INTERRUPT HANDLER. IF READING FROM TTY, QUEUE FOR PRINTING;
|
||
; OTHERWISE, PRINT IMMEDIATE. THE PRINTING ROUTINE CLOSES THE CHANNEL
|
||
; AND FREES ITS SLOT.
|
||
DOMSP1: SETOM MSPCHS+1 ;REPLY ON THIS CHANNEL
|
||
JRST DMSPCK
|
||
DOMSP2: SETOM MSPCHS+4
|
||
JRST DMSPCK
|
||
DOMSP3: SETOM MSPCHS+7
|
||
DMSPCK: AOS MSPMSG' ;COUNT OF PENDING MESSAGES
|
||
SKIPE RDSW ;AM I IN READER?
|
||
JRST DMSPC1
|
||
PUSHJ P,MSPACK ;NOPE. GO DO PRINTING
|
||
DMSDIS: .CALL NDISMI ;AND DISMISS
|
||
.LOSE 1000
|
||
DMSPC1: SKIPE RDCHR ;DON'T ASK ME
|
||
JRST DMSPDF ;DEFER PRINTING
|
||
PUSHJ P,MSPACK ;DO PRINTING
|
||
JRST DMSPDF ;DISMISS IF FAILED
|
||
OASC @PRMPT ;PRINT PROMPT
|
||
PUSHJ P,BUFPRI ;PRINT BUFFER
|
||
DMSPDF: .CALL NDISMI ;AND DISMISS
|
||
.LOSE 1000
|
||
|
||
MSPACK: AOSE PRTSW ;CAN I GET IT?
|
||
POPJ P, ;NO, SO SOMEBODY ELSE MUST HAVE IT
|
||
PUSH P,A
|
||
PUSH P,B
|
||
PUSH P,E
|
||
PUSH P,F
|
||
MSPLOO: MOVE A,MSPCHL ;POINTER TO CHANNEL BLOCK
|
||
MSPLO1: SKIPN 1(A) ;MESSAGE ON THIS CHANNEL?
|
||
JRST MSNEXT ;NO
|
||
PUSHJ P,ACKPRT
|
||
SOSG MSPMSG ;ANY MESSAGES TO PRINT?
|
||
JRST MSPEND ;NO
|
||
MSNEXT: ADD A,[3,,3]
|
||
JUMPL A,MSPLO1 ;CHECK REST OF CHANNELS
|
||
JRST MSPLOO ;START OVER
|
||
MSPEND: SETOM PRTSW ;FREE PRINTER FOR INTERRUPTS
|
||
POP P,F
|
||
POP P,E
|
||
POP P,B
|
||
POP P,A
|
||
POPJ1: AOS (P)
|
||
POPJ P,
|
||
|
||
RESET: SETZM UNAMES
|
||
SETZM JNAMES
|
||
QUITTE: MOVE 0,INTBUF ;THROW AWAY ANYTHING TYPED AHEAD
|
||
MOVEM 0,FBUF
|
||
MOVEM 0,EBUF
|
||
SETZM NUMCHR
|
||
.RESET TYIC,
|
||
.RESET TYOC,
|
||
MOVE P,[-60,,PSTK-1]
|
||
.CALL [SETZ
|
||
SIXBIT /DISMIS/
|
||
MOVSI ACPUSH
|
||
INTAC
|
||
SETZI MLOOP]
|
||
.LOSE 1000
|
||
|
||
FINIS: .RESET TYIC,
|
||
.RESET TYOC,
|
||
.BREAK 16,160000
|
||
|
||
|
||
|
||
;MAIN PROGRAM FOR INQUIRE
|
||
|
||
START: .BREAK 12,[5,,JCL]
|
||
.SUSET [.RSNAME,,SNAME] ;SET SNAME TO USERS NAME
|
||
.SUSET [.RXUNAM,,XUNAME]
|
||
.SUSET [.RUNAME,,MYUNM]
|
||
.SUSET [.RJNAME,,MYJNM]
|
||
.SUSET [.ROPTIO,,0]
|
||
TLO 0,OPTINT ;NEW-STYLE INTERRUPTS
|
||
.SUSET [.SOPTIO,,0]
|
||
MOVE P,[-40,,PSTK-1]
|
||
MOVE INTAC,[-40,,INTSTK-1]
|
||
MOVE CH,[-40,,CHSTK-1]
|
||
PUSHJ P,TTYOPN ;SET UP THE TTY CHANNELS
|
||
MOVE MYJNM
|
||
; CAME XORJN1
|
||
; CAMN XORJN2
|
||
; JRST XORCST
|
||
CAMN PRGJNM
|
||
SETOM PURGER
|
||
CAMN MKSJNM
|
||
SETOM SCRIPT
|
||
CAMN WHOJNM
|
||
JRST WHOM
|
||
CAMN STTJNM
|
||
JRST STATUS
|
||
PUSHJ P,GETJCL
|
||
MLOOP: SETZM LSTCHN
|
||
SKIPE MSPMSG
|
||
JRST [PUSHJ P,MSPACK
|
||
.VALUE
|
||
JRST .+1]
|
||
SETZM CONTIN
|
||
SKIPN SCRIPT
|
||
SKIPE PURGER
|
||
JRST PURGE
|
||
PUSHJ P,GETNM
|
||
MOVEI A,[ASCIZ /Inquiry: /]
|
||
MOVEM A,PRMPT
|
||
OASCR [0]
|
||
OASC (A)
|
||
MOVEI MLOOP
|
||
MOVEM RDERR
|
||
PUSHJ P,RTOALT ;READ A MESSAGE
|
||
OASCR [0] ;ECHO A TERPRI
|
||
MLOOP1: PUSHJ P,SNDMSG ;SEND IT
|
||
OASCR [ASCIZ /Message sent./]
|
||
JRST MLOOP
|
||
|
||
ACKPRT: PUSH P,A
|
||
OASCR [0]
|
||
MOVE A,(A) ;-CHANNEL,,BLOCK
|
||
SKIPN STATFL
|
||
OASC [ASCIZ /Acknowledgement from /]
|
||
OSIX (A)
|
||
OASCI 40
|
||
OSIX 1(A)
|
||
OASCI ":
|
||
OASCR [0]
|
||
MOVE E,[440700,,6]
|
||
ADDI E,(A) ;OFFSET FOR BLOCK
|
||
PUSHJ P,FPARSE
|
||
PUSHJ P,DELETE
|
||
SKIPE STATFL
|
||
.BREAK 16,40000
|
||
OASCR [0]
|
||
POP P,A
|
||
SETZM 1(A) ;NOTHING TO PROCESS
|
||
HLRE D,(A) ;-CHANNEL
|
||
MOVMS D ;CHANNEL
|
||
HRLM D,(A) ;FREE SLOT
|
||
ASH D,27 ;SINCE .CALL DOESN'T WORK
|
||
IOR D,[.CLOSE]
|
||
XCT D
|
||
POPJ P,
|
||
|
||
;ASSORTED HACKERS FOR JCL, COPYING OT MSGBLK, ETC.
|
||
|
||
;READ JCL FOR UNAME AND JNAME
|
||
|
||
GETJCL: MOVE E,[440700,,JCL] ;READ JCL
|
||
MOVE F,[440600,,UNAMES]
|
||
PUSHJ P,NXTCHR
|
||
PUSHJ P,NAMFND
|
||
MOVE F,[440600,,JNAMES]
|
||
PUSHJ P,NXTCHR
|
||
PUSHJ P,NAMFND
|
||
PUSHJ P,NXTCHR
|
||
JCLOUT: DBP E
|
||
MOVEM E,JCLPTR
|
||
POPJ P,
|
||
|
||
NXTCHR: IBP E ;GET NEXT NON-SEPARATION CHAR
|
||
LDB E
|
||
JUMPE CPOPJ
|
||
CAIN "-
|
||
JRST NUMBR
|
||
CAIL "0
|
||
CAILE "9
|
||
JRST .+2
|
||
JRST NUMBR
|
||
CAIN 40
|
||
JRST NXTCHR
|
||
DBP E,
|
||
CPOPJ: POPJ P,
|
||
|
||
NUMBR: SUB P,[1,,1]
|
||
JRST JCLOUT
|
||
|
||
NAMFND: ILDB E
|
||
TLNN F,760000
|
||
POPJ P,
|
||
CAIE 15
|
||
CAIN 40 ;END OF NAME
|
||
POPJ P,
|
||
JUMPE CPOPJ
|
||
CAIL "a
|
||
CAILE "z
|
||
ADDI 40 ;TO SIXBIT AND CAPITALIZED!
|
||
IDPB F
|
||
JRST NAMFND
|
||
|
||
; HERE TO COPY SOMETHING INTO MSGBLK
|
||
; POINTER TO MSGBLK IS IN F
|
||
; POINTER TO OTHER BLOCK IS IN E"
|
||
|
||
COPYBL: MOVE A,(E) ;LENGTH
|
||
HRLZI C,1(E)
|
||
HRR C,F
|
||
ADD F,A
|
||
BLT C,-1(F)
|
||
ADDM A,MSGBLK ;HACK WORD COUNT
|
||
POPJ P,
|
||
|
||
|
||
;STUFF TO GET UNAME/JNAME IF NOT PROVIDED
|
||
|
||
GETNM: SKIPE UNAMES
|
||
JRST JCHK
|
||
SKIPE JNAMES
|
||
JRST GETUNM
|
||
|
||
GETUJ: PUSHJ P,GETUNM
|
||
PUSHJ P,GETJNM
|
||
POPJ P,
|
||
|
||
JCHK: SKIPE JNAMES
|
||
POPJ P,
|
||
|
||
GETJNM: MOVEI A,[ASCIZ /Jname: /]
|
||
MOVEM A,PRMPT
|
||
OASCR [0]
|
||
OASC (A)
|
||
MOVE F,UNAMES
|
||
CAME F,[SIXBIT /COMWIN/]
|
||
JRST NOWIN
|
||
MOVE F,[SIXBIT /COMSYS/]
|
||
MOVEM F,UNAMES
|
||
SETOM IPCTYP
|
||
NOWIN: PUSHJ P,UNMLKP
|
||
CAIE F,0
|
||
JRST FNDJNM
|
||
MOVEI GETJNM
|
||
MOVEM RDERR
|
||
PUSHJ P,RTOALT
|
||
MOVE E,[440700,,MSGBLK+1]
|
||
MOVE F,[440600,,JNAMES]
|
||
PUSHJ P,NXTCHR
|
||
PUSHJ P,NAMFND
|
||
OASCR [0]
|
||
POPJ P,
|
||
|
||
FNDJNM: MOVE F
|
||
MOVEM JNAMES
|
||
OSIX JNAMES
|
||
OASCR [0]
|
||
POPJ P,
|
||
|
||
ALIPCJ: OASCR [0]
|
||
PUSHJ P,IPCERS
|
||
JRST GETJNM
|
||
|
||
ALIPCU: OASCR [0]
|
||
PUSHJ P,IPCERS
|
||
JRST GETUNM
|
||
|
||
GETUNM: MOVEI A,[ASCIZ /Uname: /]
|
||
MOVEM A,PRMPT'
|
||
OASCR [0]
|
||
OASC (A)
|
||
MOVEI GETUNM
|
||
MOVEM RDERR
|
||
PUSHJ P,RTOALT
|
||
MOVE E,[440700,,MSGBLK+1]
|
||
MOVE F,[440600,,UNAMES]
|
||
PUSHJ P,NXTCHR
|
||
PUSHJ P,NAMFND
|
||
POPJ P,
|
||
|
||
UNMLKP: SETZ SC,
|
||
SKIPN SYSHER
|
||
PUSHJ P,GETSYS
|
||
MOVEI B,40
|
||
|
||
UNMLK1: SOJL B,[MOVE F,SC
|
||
POPJ P,]
|
||
MOVE A,@MSUSER
|
||
JUMPE A,UNMLK1
|
||
MOVE @MSREAD
|
||
CAME F
|
||
JRST UNMLK1
|
||
JUMPN SC,[SETZ F,
|
||
POPJ P,]
|
||
MOVE SC,@MSRED2
|
||
JRST UNMLK1
|
||
|
||
|
||
UJFILL: MOVEI E,UJNAME+1 ;REINITIALIZE UJNAME BLOCK
|
||
SETZM UJFLAG
|
||
HRLI E,BLOCK4
|
||
MOVE F,E
|
||
BLT E,3(F)
|
||
MOVE E,[440700,,UJNAME+1]
|
||
MOVE F,[440600,,MYUNM]
|
||
UJLOOP: MOVEI ""
|
||
IDPB E
|
||
MOVEI B,6
|
||
UJIDPB: ILDB F
|
||
ADDI 40
|
||
IDPB E
|
||
SOJN B,UJIDPB
|
||
MOVEI ""
|
||
IDPB E
|
||
SKIPE UJFLAG
|
||
POPJ P,
|
||
MOVE F,[440600,,MYJNM]
|
||
SETOM UJFLAG'
|
||
JRST UJLOOP
|
||
|
||
;STUFF TO PIECE TOGETHER MESSAGE AND SEND IT
|
||
|
||
SETUP: PUSH P,A
|
||
MOVE A,STRTOP
|
||
ADD A,STRBOT
|
||
ADD A,STRFOO
|
||
ADD A,UJNAME
|
||
ADD A,MSGBLK
|
||
IMULI A,5
|
||
MOVEM A,CHRCNT
|
||
POP P,A
|
||
MOVEI FREBUF,197. ;LENGTH OF BUFFER
|
||
JUMPE CONTIN,SETUP1 ;FIRST TIME
|
||
MOVE F,[440700,,SNDBLK] ;MAKE BYTE POINTER
|
||
POPJ P,
|
||
|
||
SETUP1: MOVE CHRCNT ;GET CHARS IN MESSAGE
|
||
MOVEM SNDBLK+2 ;PUT IN TOTAL CHARACTERS IN MESSAGE
|
||
ADDI 4
|
||
IDIVI 5
|
||
ADDI 2
|
||
HRRM SNDBLK ;PUT IN TOTAL WORDS (ROUNDED) IN MESSAGE
|
||
MOVE F,[440700,,SNDBLK+2]
|
||
POPJ P,
|
||
|
||
SNDMSG: PUSHJ P,MSPOPN ;GET CHANNEL
|
||
SNDMS1: PUSHJ P,UJFILL ;CONS U/JNAME
|
||
SETZM CHRCNT
|
||
PUSHJ P,SETUP
|
||
BLATIT STRTOP
|
||
BLATIT MSGBLK
|
||
BLATIT STRBOT
|
||
BLATIT UJNAME
|
||
BLATIT STRFOO
|
||
PUSHJ P,IPCMSG
|
||
POPJ P,
|
||
|
||
BLAT: MOVE A,(E) ;WORDS IN FROBBER
|
||
IBLAT: ADDI F,1
|
||
HRRZ B,F
|
||
HRLI B,1(E) ;START OF FROBBER
|
||
CAMLE A,FREBUF
|
||
JRST PBLAT
|
||
ADDI F,-1(A) ;END OF FROBBER
|
||
BLT B,(F) ;PUT IN MESSAGEE
|
||
SUB FREBUF,A ;UPDATE FREE BUFFER LENGTH
|
||
POPJ P,
|
||
|
||
PBLAT: SETOM MLTSND' ;SAY MORE IS COMING
|
||
ADDI F,-1(FREBUF)
|
||
BLT B,(F) ;PUT IN MESSAGE TO EOB
|
||
SUB A,FREBUF
|
||
ADDI E,(FREBUF)
|
||
PUSHJ P,IPCMSG ;SEND IT
|
||
SETZM MLTSND
|
||
JRST IBLAT
|
||
|
||
IPCMSG: MOVEI 100000
|
||
SKIPE MLTSND
|
||
TRO 200000
|
||
SKIPE CONTIN
|
||
TRO 400000
|
||
HRLM SNDBLK
|
||
HRRZ F
|
||
SUBI SNDBLK-2
|
||
SKIPE MLTSND
|
||
MOVEI 200.
|
||
MOVEM WDCNT
|
||
PUSHJ P,OPEN
|
||
AOS CONTIN
|
||
PUSHJ P,SETUP
|
||
POPJ P,
|
||
|
||
OPEN: HRRZI (SIXBIT /IPC/)
|
||
TLO USEUJ
|
||
SKIPE CONTIN
|
||
JRST COPEN
|
||
TLO SIMM
|
||
|
||
OPEN1: MOVEM OPBLK
|
||
SKIPE STY
|
||
POPJ P,
|
||
.OPEN MSPO,OPBLK
|
||
JRST IPCOPF
|
||
POPJ P,
|
||
|
||
COPEN: TLO SANDH
|
||
JRST OPEN1
|
||
|
||
|
||
;OPENERS OF MSP AND TTY CHANNELS
|
||
|
||
MSPOPN: PUSH P,A
|
||
PUSH P,B
|
||
MOVE A,MSPCHL
|
||
MSPLOP: SKIPL (A)
|
||
JRST MSPWIN
|
||
ADD A,[3,,3]
|
||
JUMPL A,MSPLOP
|
||
JRST [OASCR [ASCIZ /All listening channels in use. Aborting./]
|
||
JRST RESET]
|
||
MSPWIN: MOVEM A,LSTCHN ;SAVE IN CASE OPEN FAILS
|
||
HLRZ (A) ;GET CHANNEL NUMBER TO USE
|
||
MOVN B,
|
||
HRLM B,(A) ;SAY THIS ONE IN USE
|
||
MOVE B,2(A) ;GET JNAME OF CHANNEL
|
||
MOVEM B,MYJNM
|
||
MOVEM B,MSPJNM ;SAVE AS JNAME AND IN OPEN BLOCK
|
||
MOVE B,(A) ;GET ADDRESS OF BLOCK
|
||
HRRM B,MSPADD ;STUFF IN OPEN BLOCK
|
||
HRLI B,EBLOCK
|
||
MOVEI A,17(B)
|
||
BLT B,(A) ;RE-INITIALIZE BUFFER
|
||
MOVE A,[SIXBIT / IPC/]
|
||
TLO A,1
|
||
MOVEM A,MSPBLK
|
||
MOVE A,MYUNM
|
||
MOVEM A,MSPUNM
|
||
ASH 0,27 ;PUT CHANNEL NUMBER IN AC SLOT
|
||
MOVE A,[.OPEN MSPBLK]
|
||
IOR A,
|
||
XCT A ;OPEN CHANNEL
|
||
.LOSE 1000
|
||
MSPPOP: POP P,B
|
||
POP P,A
|
||
POPJ P,
|
||
|
||
TTYOPN: .CALL [SETZ
|
||
SIXBIT /OPEN/
|
||
5000,,4001
|
||
1000,,TYOC
|
||
SETZ [SIXBIT /TTY /]]
|
||
.VALUE
|
||
.OPEN TYIC,[.UAI,,'TTY]
|
||
.VALUE
|
||
.SUSET [.SIMSK2,,[1_TYOC+1_TYIC+MSCHNS]]
|
||
.CALL TTYSET ;SET UP TTY TO TAKE CONTROL-S
|
||
.VALUE
|
||
.SUSET [.RCNSL,,A]
|
||
CAILE A,20
|
||
SETOM STY
|
||
POPJ P,
|
||
|
||
|
||
|
||
;READER
|
||
|
||
RTOALT: SETOM RDSW
|
||
SETZM RDCHR'
|
||
MOVEI CNT,1000.
|
||
MOVE F,[440700,,MSGBLK+1]
|
||
|
||
READCH: PUSHJ P,RDACHR
|
||
SETOM RDCHR
|
||
CAIN A,"
|
||
JRST UNBLOK
|
||
CAIE A,""
|
||
CAIN A,"\
|
||
JRST QUOTE
|
||
CAIE A,^D
|
||
CAIN A,^L
|
||
JRST PBUF
|
||
CAIN A,177
|
||
JRST RUBOUT
|
||
|
||
CHRLOD: IDPB A,F
|
||
SOJG CNT,READCH
|
||
JRST BIGERR
|
||
|
||
PBUF: CAIE A,^D
|
||
BUFPRT: OASC @PRMPT
|
||
PUSHJ P,BUFPRI
|
||
JRST READCH
|
||
|
||
RDACHR: SKIPG NUMCHR
|
||
.HANG
|
||
ILDB A,FBUF
|
||
SOS NUMCHR
|
||
POPJ P,
|
||
|
||
RUBOUT: CAIN CNT,1000.
|
||
JRST READCH
|
||
DBP F,
|
||
PUSHJ P,RUBFLS
|
||
AOS CNT ;AOS THE CHAR COUNTER
|
||
JRST READCH
|
||
|
||
RUBFLS: LDB A,F
|
||
CAIN A,177
|
||
JRST RUBTWO
|
||
CAIL A,40
|
||
JRST RUBONE
|
||
CAIE A,33
|
||
CAIN A,10
|
||
JRST RUBONE
|
||
CAIE A,^I
|
||
CAIN A,^L
|
||
JRST RUBONE
|
||
RUBTWO: OCTLP "X ; DO THE RUBOUT(S)
|
||
RUBONE: OCTLP "X
|
||
POPJ P,
|
||
|
||
QUOTE: PUSH P,A
|
||
MOVEI A,"\
|
||
IDPB A,F
|
||
POP P,A
|
||
SOJG CNT,CHRLOD
|
||
JRST BIGERR
|
||
|
||
UNBLOK: PUSH P,A
|
||
PUSH P,B
|
||
MOVE A,CNT
|
||
IDIVI A,5
|
||
JUMPE B,UNFXOT
|
||
MOVEI A,"
|
||
UNFXLP: IDPB A,F ;STUFF IN A SPACE
|
||
SUBI CNT,1
|
||
SOJG B,UNFXLP
|
||
UNFXOT: POP P,A
|
||
POP P,B
|
||
SETZ A,
|
||
CAIN CNT,1000.
|
||
JRST RSTNM
|
||
IDPB A,F
|
||
DBP F,
|
||
PUSH CH,A
|
||
MOVE E,[440700,,MSGBLK+1]
|
||
|
||
UNBLK1: MOVE C,A
|
||
ILDB A,E
|
||
JUMPE A,BALANC
|
||
CAIN A,""
|
||
JRST STRHAK
|
||
CAIN A,"<
|
||
PUSH CH,[">]
|
||
CAIN A,"(
|
||
PUSH CH,[")]
|
||
CAIN A,"[
|
||
PUSH CH,["]]
|
||
CAIN A,"{
|
||
PUSH CH,["}]
|
||
CAIE A,">
|
||
CAIN A,")
|
||
JRST POPPER
|
||
CAIE A,"]
|
||
CAIN A,"}
|
||
JRST POPPER
|
||
JRST UNBLK1
|
||
|
||
RSTNM: MOVE RDERR
|
||
CAIN GETUNM
|
||
JRST ALIPCU
|
||
CAIN GETJNM
|
||
JRST ALIPCJ
|
||
MOVEM A,UNAMES
|
||
MOVEM A,JNAMES
|
||
JRST QUITTE
|
||
|
||
STRHAK: PUSH P,A
|
||
MOVE A,STRSW
|
||
SETCA A,A
|
||
MOVEM A,STRSW
|
||
POP P,A
|
||
JRST UNBLK1
|
||
|
||
POPPER: POP CH,B
|
||
CAME A,B
|
||
JRST MSMTCH
|
||
JRST UNBLK1
|
||
|
||
BALANC: POP CH,B
|
||
CAIE B,0
|
||
JRST UNMTCH
|
||
SKIPE STRSW
|
||
JRST UNMTCH
|
||
|
||
RDONE: MOVN A,CNT
|
||
ADDI A,1000.
|
||
IDIVI A,5
|
||
JUMPE B,RDONE1
|
||
RDPAD: SETZ C,
|
||
IDPB C,F
|
||
SOJN B,RDPAD
|
||
ADDI A,1
|
||
RDONE1: MOVEM A,MSGBLK
|
||
SETZM RDSW
|
||
POPJ P,
|
||
|
||
UNMTCH: PUSH CH,B ;OOPS
|
||
CAIN C,"!
|
||
JRST PMATCH
|
||
PUSH P,F
|
||
OASC [ASCIZ /
|
||
ERROR - UNMATCHED (try !)/]
|
||
POP P,F
|
||
PUSHJ P,BUFPRI
|
||
PUSHJ P,POPOFF
|
||
JRST READCH
|
||
|
||
PMATCH: POP CH,B
|
||
JUMPE B,PMATC1
|
||
DPB B,F
|
||
IBP F,
|
||
SOJG CNT,PMATCH
|
||
JRST BIGERR
|
||
|
||
PMATC1: SETZ SC,
|
||
IDPB SC,F
|
||
DBP F,
|
||
JRST RDONE
|
||
|
||
MSMTCH: PUSH CH,B
|
||
OASCR [0]
|
||
OASC [ASCIZ /ERROR - /]
|
||
MOVE SC,A
|
||
.IOT TYOC,SC
|
||
PUSH P,F
|
||
OASC [ASCIZ / INSTEAD OF /]
|
||
POP P,F
|
||
.IOT TYOC,B
|
||
OASCR [0]
|
||
PUSHJ P,BUFPRI
|
||
PUSHJ P,POPOFF
|
||
JRST READCH
|
||
|
||
POPOFF: POP CH,B
|
||
CAIE B,0
|
||
JRST POPOFF
|
||
POPJ P,
|
||
|
||
|
||
;PRINTING ROUTINES
|
||
|
||
BUFPRI: SKIPN RDSW
|
||
POPJ P,
|
||
CAIE A,^L
|
||
OASCR [0]
|
||
MOVEI SC,0
|
||
IDPB SC,F
|
||
DBP F,
|
||
PUSH P,F
|
||
OASC MSGBLK+1
|
||
POP P,F
|
||
POPJ P,
|
||
|
||
|
||
;ASK DELETE QUESTION AND DO THE RIGHT THING
|
||
|
||
DELETE: SKIPE STATFL
|
||
JRST DELET1
|
||
OASCR [0]
|
||
OASC [ASCIZ /
|
||
Delete file? (Y or N) /]
|
||
MOVEI C,0
|
||
SETOM MORFLG
|
||
SKIPN C
|
||
.HANG
|
||
SETZM MORFLG
|
||
MOVE A,C
|
||
CAIN A,"N
|
||
JRST PFNAME
|
||
CAIN A,"?
|
||
JRST DUMMY
|
||
CAIE A,"Y
|
||
JRST DELETE
|
||
DELET1: .CALL [SETZ
|
||
SIXBIT /DELETE/
|
||
DEVICE
|
||
FNAME1
|
||
FNAME2
|
||
SETZ SNAME]
|
||
.LOSE 1000
|
||
POPJ P,
|
||
|
||
PFNAME: OASC [ASCIZ /
|
||
Acknowledgement saved in /]
|
||
PUSHJ P,PFILE
|
||
OASCI ".
|
||
POPJ P,
|
||
|
||
PFILE: OSIX DEVICE
|
||
OASCI ":
|
||
OSIX SNAME
|
||
OASCI ";
|
||
OSIX FNAME1
|
||
OASCI "
|
||
OSIX FNAME2
|
||
POPJ P,
|
||
|
||
DUMMY: OASC [ASCIZ /
|
||
Why the hell do you type ? when it says to type Y or N, DUMMY!!!
|
||
/]
|
||
POPJ P,
|
||
|
||
|
||
;ERROR ROUTINES
|
||
|
||
ILFILE: .VALUE ;SHOULD NEVER HAPPEN
|
||
|
||
ILLCHR: .VALUE ;SAME AS ABOVE
|
||
|
||
IPCOPF: PUSH P,A
|
||
SKIPN A,LSTCHN
|
||
JRST IPCOP1
|
||
HLRE 0,(A)
|
||
MOVMS 0
|
||
HRLM 0,(A)
|
||
ASH 27
|
||
IOR 0,[.CLOSE]
|
||
XCT 0
|
||
SETZM LSTCHN
|
||
IPCOP1: POP P,A
|
||
SKIPN PURGER ;CONTINUE IF IN PURGE
|
||
SKIPE XORFLG ;CONTINUE IF IN XORCST
|
||
JRST [SETOM OPFFLG
|
||
POPJ P,]
|
||
SKIPN SCRIPT
|
||
SKIPE STATFL
|
||
JRST [SETOM OPFFLG
|
||
POPJ P,]
|
||
OASC [ASCIZ /
|
||
IPC open failed (no one is listening with that name).
|
||
/]
|
||
SETZ A,
|
||
JRST RSTNM
|
||
|
||
BIGERR: .VALUE [ASCIZ /:
|
||
Input buffer exhausted. You will never get this message.KILL
|
||
/]
|
||
|
||
|
||
;HERE IF XORCST
|
||
|
||
XORONE: PUSHJ P,XORSND
|
||
OASC [ASCIZ /The evil spirit '/]
|
||
OSIX UNAMES
|
||
OASCI 40
|
||
OSIX JNAMES
|
||
OASC [ASCIZ /' /]
|
||
MOVEI A,[ASCIZ /has been shown mercy./]
|
||
SKIPN UNXSW
|
||
MOVEI A,[ASCIZ /has met its maker./]
|
||
SKIPE OPFFLG
|
||
MOVEI A,[ASCIZ /does not listen./]
|
||
OASCR (A)
|
||
.BREAK 16,40000
|
||
|
||
XORCST: PUSHJ P,GETJCL
|
||
SETOM XORFLG
|
||
PUSHJ P,CDMSG
|
||
SKIPE UNAMES
|
||
JRST XORONE
|
||
PUSHJ P,GETSYS
|
||
MOVEI B,40
|
||
|
||
SCLP: SOJL B,[.BREAK 16,40000]
|
||
MOVE A,@MSUSER
|
||
JUMPE A,SCLP
|
||
MOVE @UNAME
|
||
MOVE SC,MUDDMN
|
||
|
||
SCLP1: CAMN MUDDMN(SC)
|
||
JRST [PUSHJ P,XDEMON
|
||
JRST SCLP]
|
||
SOJG SC,SCLP1
|
||
JRST SCLP
|
||
|
||
XDEMON: PUSH P,A
|
||
PUSH P,B
|
||
MOVEM CURUNM
|
||
MOVE @MSREAD
|
||
MOVEM UNAMES
|
||
MOVE @MSRED2
|
||
MOVEM JNAMES
|
||
SETZM CONTIN
|
||
PUSHJ P,XORSND ;FUNNY MESSAGES IF XORCST
|
||
SKIPE OPFFLG
|
||
JRST [SETZM OPFFLG
|
||
JRST XOUT]
|
||
OASCR [0]
|
||
OSIX UNAMES
|
||
OASCI "
|
||
OSIX JNAMES
|
||
SKIPE UNXSW
|
||
JRST UNXPR
|
||
OASC [ASCIZ / resting comfortably./]
|
||
XOUT: POP P,B
|
||
POP P,A
|
||
POPJ P,
|
||
|
||
UNXPR: OASC [ASCIZ / spared./]
|
||
JRST XOUT
|
||
|
||
; CREATE THE MESSAGE FOR THE DEMON
|
||
|
||
CDMSG: PUSHJ P,FIXTIM
|
||
PUSHJ P,FIXUNM
|
||
SETZM MSGBLK
|
||
MOVEI F,MSGBLK+1
|
||
SKIPE UNXSW
|
||
JRST CDUMSG
|
||
COPBLK XORTOP
|
||
COPBLK UNAMEB
|
||
COPBLK XORMID
|
||
COPBLK STIMEB
|
||
COPBLK XORBOT
|
||
POPJ P,
|
||
|
||
CDUMSG: COPBLK UNXMSG
|
||
POPJ P,
|
||
|
||
;COPY OF SNDMSG FOR XORCST: SENDS SHORTER MESSAGE
|
||
XORSND: PUSHJ P,UJFILL ;CONS U/JNAME
|
||
SETZM CHRCNT
|
||
PUSHJ P,XSETUP
|
||
BLATIT XTRTOP
|
||
BLATIT MSGBLK
|
||
BLATIT XTRBOT
|
||
PUSHJ P,IPCMSG
|
||
POPJ P,
|
||
|
||
XSETUP: PUSH P,A
|
||
MOVE A,XTRTOP
|
||
ADD A,XTRBOT
|
||
ADD A,MSGBLK
|
||
IMULI A,5
|
||
MOVEM A,CHRCNT
|
||
POP P,A
|
||
MOVEI FREBUF,197. ;LENGTH OF BUFFER
|
||
JUMPE CONTIN,SETUP1 ;FIRST TIME
|
||
MOVE F,[440700,,SNDBLK] ;MAKE BYTE POINTER
|
||
POPJ P,
|
||
|
||
; GET THE UNAME IN ASCII
|
||
|
||
FIXUNM: MOVE E,[440600,,MYUNM]
|
||
MOVE F,[440700,,AUNAME]
|
||
MOVEI C,5
|
||
FIXULP: ILDB E
|
||
ADDI 40
|
||
IDPB F
|
||
SOJN C,FIXULP
|
||
POPJ P,
|
||
|
||
; GET THE TIME TO SLEEP FROM JCL
|
||
|
||
FIXTIM: MOVE E,JCLPTR
|
||
MOVE F,[440700,,STIME]
|
||
GETTLP: ILDB E
|
||
JUMPE CPOPJ
|
||
TLNN F,760000 ;WORD IS NOW FULL
|
||
POPJ P,
|
||
CAIN "-
|
||
JRST UNXOR
|
||
CAIL "0
|
||
CAILE "9
|
||
JRST FIXTM1
|
||
IDPB F
|
||
JRST GETTLP
|
||
|
||
FIXTM1: MOVEI 40
|
||
FIXTM2: IDPB F
|
||
TLNN F,760000
|
||
POPJ P,
|
||
JRST FIXTM2
|
||
|
||
UNXOR: SETOM UNXSW
|
||
POPJ P,
|
||
|
||
MUDDMN: 3
|
||
SIXBIT /COMBAT/
|
||
SIXBIT /BATCHN/
|
||
SIXBIT /.BATCH/
|
||
|
||
|
||
;HERE IF WHOMING
|
||
|
||
WHOM: PUSHJ P,IPCERS
|
||
OASC [ASCIZ /
|
||
Total of /]
|
||
ODEC IPCCNT
|
||
MOVE IPCCNT
|
||
CAIN 1
|
||
JRST ALONE
|
||
OASCR [ASCIZ / MUDDLErs./]
|
||
.BREAK 16,40000
|
||
|
||
ALONE: OASCR [ASCIZ / MUDDLEr./]
|
||
.BREAK 16,40000
|
||
|
||
|
||
;HERE IF STATUSING
|
||
|
||
STATUS: SETOM STATFL
|
||
MOVE XUNAME
|
||
MOVEM UNAMES
|
||
MOVE [SIXBIT /PCOMP/]
|
||
MOVEM JNAMES
|
||
OASC [ASCIZ /PCOMP/]
|
||
STAT1: SETZM CONTIN
|
||
SETZM MSGBLK
|
||
MOVEI F,MSGBLK+1
|
||
COPBLK STATM
|
||
PUSHJ P,MSPOPN
|
||
PUSHJ P,SNDMS1
|
||
SKIPE OPFFLG
|
||
JRST SFAIL
|
||
OASCR [0]
|
||
OASCR [ASCIZ /Status:/]
|
||
CAI
|
||
.HANG
|
||
.BREAK 16,40000
|
||
|
||
SFAIL: SKIPN NPCOMP
|
||
JRST SFAIL1
|
||
SKIPE COMTRY
|
||
JRST SFAIL2
|
||
SETZM OPFFLG
|
||
OASC [ASCIZ /...COMBAT ZONE/]
|
||
MOVE [SIXBIT /COMBAT/]
|
||
MOVEM UNAMES
|
||
MOVE [SIXBIT /ZONE/]
|
||
MOVEM JNAMES
|
||
SETOM COMTRY
|
||
JRST STAT1
|
||
|
||
SFAIL1: SETZM OPFFLG
|
||
MOVE [SIXBIT /NPCOMP/]
|
||
MOVEM JNAMES
|
||
OASC [ASCIZ /...NPCOMP/]
|
||
SETOM NPCOMP
|
||
JRST STAT1
|
||
|
||
SFAIL2: OASCR [0]
|
||
OASC [ASCIZ /Yes, we have no compilers./]
|
||
.BREAK 16,40000
|
||
|
||
;HERE IF PURGING
|
||
|
||
PURGE: MOVE [SIXBIT /ZORK/]
|
||
MOVEM JNAMES
|
||
PUSHJ P,MSPOPN
|
||
PUSHJ P,GETNM
|
||
SETZM MSGBLK
|
||
MOVEI F,MSGBLK+1
|
||
SKIPE SCRIPT
|
||
JRST PURGE2
|
||
COPBLK PURGEM
|
||
PURGEX: PUSHJ P,SNDMS1
|
||
SKIPE OPFFLG
|
||
JRST PFAIL
|
||
OASCR [0]
|
||
MOVEI A,[ASCIZ /Purged him!/]
|
||
SKIPE SCRIPT
|
||
MOVEI A,[ASCIZ /Scripted him!/]
|
||
OASC (A)
|
||
PURGE1: OASCR [0]
|
||
SETZM CONTIN
|
||
SETZM UNAMES
|
||
JRST PURGE+2
|
||
|
||
PURGE2: COPBLK MSM
|
||
JRST PURGEX
|
||
|
||
PFAIL: SETZM OPFFLG
|
||
OASCR [0]
|
||
OASC [ASCII /Not playing ZORK/]
|
||
JRST PURGE1
|
||
|
||
|
||
;HERE TO PRINT ALL IPC USERS
|
||
|
||
IPCERS: MACT IPCERO ;MAKE ACTIVATION FOR MORE INTERRUPT
|
||
SETZM IPCCNT
|
||
OASC [ASCIZ ?
|
||
IPC names U/Jnames
|
||
|
||
UNAME JNAME UNAME JNAME?]
|
||
SKIPN SYSHER
|
||
PUSHJ P,GETSYS
|
||
MOVEI B,40
|
||
|
||
IPCLP: SOJL B,IPCERO
|
||
MOVE A,@MSUSER
|
||
JUMPE A,IPCLP
|
||
AOS IPCCNT
|
||
OASC [ASCIZ /
|
||
/]
|
||
MOVE E,@MSREAD
|
||
PUSHJ P,PRINTE
|
||
MOVE E,@MSRED2
|
||
PUSHJ P,PRINTE
|
||
MOVE F,@MSRED2
|
||
MOVE E,@JNAME
|
||
CAME E,F
|
||
JRST PRUJ
|
||
MOVE F,@MSREAD
|
||
MOVE E,@UNAME
|
||
CAMN E,F
|
||
JRST IPCLP
|
||
PRUJ: MOVE E,@UNAME
|
||
PUSHJ P,PRINTE
|
||
MOVE E,@JNAME
|
||
PUSHJ P,PRINTE
|
||
JRST IPCLP
|
||
|
||
PRINTE: OSIX E
|
||
OASC [ASCIZ / /]
|
||
POPJ P,
|
||
IPCERO: OASCR [0]
|
||
SETZM ACT1
|
||
POPJ P,
|
||
|
||
IPCCNT: 0
|
||
|
||
|
||
;PRINT A FILE WHOSE NAME IS SOMEWHERE IN BLOCK POINTED AT BY E
|
||
|
||
FPARSE: SETZM NAME
|
||
MOVE F,[440600,,NAME];CLEARS NAME SLOT
|
||
GETCHR: ILDB B,E
|
||
JUMPE B,DSKOPN
|
||
CAIE B,40
|
||
CAIN B,11
|
||
JRST GETCHR
|
||
FIELD: CAIE B,40 ;HERE TO GET A NAME
|
||
CAIN B,11
|
||
JRST FNAM ;SPACE AND TAB MAKE FNAME1 AND 2
|
||
CAIE B,0
|
||
CAIN B,15
|
||
JRST FNAM ;SO DOES 0 AND <CR>
|
||
CAIN B,":
|
||
JRST DEV
|
||
CAIN B,";
|
||
JRST DIR
|
||
CAIN B,^Q ;HANDLE QUOTING
|
||
ILDB B,E
|
||
CAIGE B,40 ;SUBI B,40 < 0 (BAD CHARACTER)
|
||
JRST ILLCHR
|
||
SUBI B,40
|
||
CAIL B,100
|
||
SUBI B,40 ;CASE CONVERSION
|
||
TLNE F,770000 ;IGNORE MORE THAN 6 CHARACTERS
|
||
IDPB B,F
|
||
ILDB B,E
|
||
JRST FIELD
|
||
|
||
DEV: MOVE A,NAME
|
||
MOVEM A,DEVICE
|
||
JRST FPARSE
|
||
|
||
DIR: MOVE A,NAME
|
||
MOVEM A,SNAME
|
||
JRST FPARSE
|
||
|
||
FNAM: MOVE A,NAME
|
||
SKIPN FNAME1
|
||
JRST FNAM1
|
||
MOVEM A,FNAME2
|
||
JRST FPARSE
|
||
|
||
FNAM1: MOVEM A,FNAME1
|
||
JRST FPARSE
|
||
|
||
DSKOPN: MOVE A,FNAME1
|
||
JUMPN A,DSKOP2 ;GIVE HIM > AS A DEFAULT
|
||
MOVE A,[SIXBIT /> /]
|
||
MOVEM A,FNAME1
|
||
|
||
DSKOP2: .CALL FILBLK ;DO ALL OF THE OPENS
|
||
JRST ILFILE
|
||
|
||
FILPRT: PUSH P,C
|
||
PUSH P,D
|
||
MACT FILPRO ;MAKE ACTIVATION IN CASE MORE FLUSHED
|
||
.CALL [SETZ
|
||
SIXBIT /FILLEN/
|
||
MOVEI DSKI
|
||
SETZM C]
|
||
.LOSE 1000
|
||
IDIVI C,DBUFLN ; # OF ITERATIONS NEEDED
|
||
JUMPE D,PFLOOP
|
||
ADDI C,1
|
||
PFLOOP: MOVE A,[-DBUFLN,,DBUF]
|
||
.IOT DSKI,A ; IOT IN FIRST PART
|
||
SOJE C,CTCHAK ; IF LAST ITERATION, FROB CTRL-C'S
|
||
MOVEI O,5*DBUFLN ; # OF CHARACTERS, IF NOT LAST ITER
|
||
DOSIOT: MOVE B,[440700,,DBUF]
|
||
.CALL [SETZ ; PRINT IT TO TTY
|
||
SIXBIT /SIOT/
|
||
MOVSI %TJDIS
|
||
MOVEI TYOC
|
||
B
|
||
SETZ O]
|
||
.LOSE 1000
|
||
JUMPN C,PFLOOP ; DONE?
|
||
FILPRO: SETZM ACT1
|
||
.CLOSE DSKI,
|
||
POP P,D
|
||
POP P,C
|
||
POPJ P,
|
||
|
||
CTCHAK: HLRE B,A ; CONS UP BPTR TO LAST BYTE OF LAST WORD
|
||
MOVEI O,DBUFLN
|
||
ADD O,B
|
||
IMULI O,5
|
||
MOVEI D,5
|
||
SUBI A,1
|
||
HRLI A,010700
|
||
CTCLOP: LDB B,A ; PICK UP CHAR
|
||
CAIE B,^C
|
||
CAIN B,0
|
||
CAIA ; IF IT'S CTRL-C OR -@, FLUSH IT
|
||
JRST DOSIOT
|
||
DBP A ; BACK UP ONE
|
||
SUBI O,1
|
||
SOJG D,CTCLOP
|
||
JRST DOSIOT ; IF READ WHOLE WORD, GO PRINT ANYWAY
|
||
|
||
|
||
;GET A COPY OF THE SYSTEM FOR USE IN LOOKING UP IPC HACKERS
|
||
|
||
GETSYS: .CALL [SETZ ;GET THE SYSTEM
|
||
SIXBIT /CORBLK/
|
||
1000,,200000
|
||
[-1]
|
||
[-ITSPGS,,HIPORG]
|
||
[400000]
|
||
SETZ [0]]
|
||
.LOSE 1000
|
||
EVLP: MOVEI A,4
|
||
MOVE B,EVTBLB(A)
|
||
.EVAL B,
|
||
JRST [OASCR [ASCIZ /EVAL failed. MUDINQ won't work until this is fixed./]
|
||
.BREAK 16,160000]
|
||
ADD B,[B,,400000]
|
||
MOVEM B,EVTBLB+1(A)
|
||
SUBI A,2
|
||
JUMPGE A,EVLP+1
|
||
MOVEI A,2
|
||
EVLP1: MOVE B,EVTBLA(A)
|
||
.EVAL B,
|
||
JRST [OASCR [ASCIZ /EVAL failed. MUDINQ won't work until this is fixed./]
|
||
.BREAK 16,160000]
|
||
ADD B,[A,,400000]
|
||
MOVEM B,EVTBLA+1(A)
|
||
SUBI A,2
|
||
JUMPGE A,EVLP1
|
||
SETOM SYSHER
|
||
POPJ P,
|
||
|
||
EVTBLB: SQUOZE 4,MSUSER ;INDEX OFF B
|
||
MSUSER: 0
|
||
SQUOZE 4,MSREAD
|
||
MSREAD: 0
|
||
SQUOZE 4,MSRED2
|
||
MSRED2: 0
|
||
EVTBLA: SQUOZE 4,UNAME ;INDEX OFF A
|
||
UNAME: 0
|
||
SQUOZE 4,JNAME
|
||
JNAME: 0
|
||
|
||
|
||
|
||
;STANDARD INQUIRE MESSAGE (BEFORE FILLED BY USER)
|
||
|
||
STRTOP: ASCIS [
|
||
<PROG!- LERR\ !-INTERRUPTS!-
|
||
((OUTCHAN!- <OR!- <OPEN!- "PRINT" "DSK:_NQRY_ >">
|
||
<OPEN!- "PRINT" "DSK:HUDINI;_NQRY_ >">>)
|
||
(O!- .OUTCHAN!- )
|
||
(STR!- <STRING!- <10 .O!- > ";" <7 .O!- > " " <8 .O!- >>)
|
||
(EPRINT!- <ON!- "ERROR"
|
||
#FUNCTION!- (("TUPLE" FRATM!- )
|
||
<COND!- (<ASSIGNED?!- INDENT-TO!- >
|
||
<PRINT!- .FRATM!- >
|
||
<INT-LEVEL!- 0>
|
||
<RETURN!- T!- .INDENT-TO!- >)>)
|
||
10000 0>)
|
||
(OBLIST!- ,OBLIST!- ))
|
||
<SET!- LERR\ !-INTERRUPTS!- <FRAME!- <FRAME!- <FRAME!- >>>>
|
||
<PUT!- .OUTCHAN!- 13 80>
|
||
<PROG!- INDENT-TO!- () <EVAL!- <PARSE!- "<PRINT ]
|
||
|
||
STRBOT: ASCIS [ >">>>
|
||
<OFF!- .EPRINT!- >
|
||
<CLOSE!- .OUTCHAN!- >
|
||
<COND!- (<SEND!- ]
|
||
|
||
STRFOO: ASCIS [ .STR!- >)
|
||
(<RENAME!- .STR!- >)>>]
|
||
|
||
|
||
;XORCST'S BASIC MESSAGE: SHORTER THAN STANDARD
|
||
XTRTOP: ASCIS [
|
||
<PROG!- LERR\ !-INTERRUPTS!-
|
||
((EPRINT!- <ON!- "ERROR"
|
||
#FUNCTION!- (("TUPLE" FRATM!- )
|
||
<COND!- (<ASSIGNED?!- INDENT-TO!- >
|
||
<INT-LEVEL!- 0>
|
||
<RETURN!- T!- .INDENT-TO!- >)>)
|
||
10000 0>)
|
||
(OBLIST!- ,OBLIST!- ))
|
||
<SET!- LERR\ !-INTERRUPTS!- <FRAME!- <FRAME!- <FRAME!- >>>>
|
||
<PROG!- INDENT-TO!- () <EVAL!- <PARSE!- " ]
|
||
|
||
XTRBOT: ASCIS [ ">>>
|
||
<OFF!- .EPRINT!- >>]
|
||
|
||
;XORCST'S INQUIRE MESSAGE
|
||
XORTOP: ASCIS [
|
||
<PROG!- ((S!- %<RSUBR!- <VECTOR %<PCODE!- \"SETSN\"0>
|
||
SNAME-SETTER
|
||
#DECL (\"VALUE\" ANY \"OPTIONAL\" ANY)>>)
|
||
(SNM!- <S!- >)
|
||
(STP!- <>))
|
||
<S!- ]
|
||
|
||
XORMID: ASCIS [\">
|
||
<SLEEP!- ]
|
||
|
||
XORBOT: ASCIS [ '.STP!- >
|
||
<S!- .SNM!- >>]
|
||
|
||
UNXMSG: ASCIS [<SET!- STP!- T>]
|
||
|
||
|
||
;PURGE'S INQUIRE MESSAGE
|
||
|
||
PURGEM: ASCIS [; \"Dungeon\" <FLUSH-ME!-INITIAL!- >]
|
||
|
||
MSM: ASCIS [; \"Dungeon\" <MAKE-SCRIPT>]
|
||
|
||
STATM: ASCIS [ <STATUS> ]
|
||
|
||
UJNAME: ASCIS [ ]
|
||
BLOCK4: ASCII / /
|
||
|
||
; TYPEOUT UUOS (STRAIGHT FROM DIRED, WITH SOME HELP FROM PDL)
|
||
|
||
HPOS: 0
|
||
|
||
ZZZ==.
|
||
LOC 40
|
||
0
|
||
JSR UUOH
|
||
LOC ZZZ
|
||
UUOCT==0
|
||
UUOTAB: JRST ILUUO
|
||
IRPS X,,[ODEC OBPTR OHPOS OCTLP OALIGN OSIX OASC OASCI OASCR OSIXS]
|
||
UUOCT==UUOCT+1
|
||
X=UUOCT_33
|
||
JRST U!X
|
||
TERMIN
|
||
|
||
UUOMAX==.-UUOTAB
|
||
|
||
UUOH: 0
|
||
PUSH P,A
|
||
PUSH P,B
|
||
PUSH P,C
|
||
PUSH P,D
|
||
MOVEI @40 ; GET EFF ADDR. OF UUO
|
||
MOVEM UUOE'
|
||
MOVE @0
|
||
MOVEM UUOD' ; CONTENTS OF EFF ADR
|
||
MOVE B,UUOE ; EFF ADR
|
||
LDB A,[270400,,40] ; GET UUO AC,
|
||
LDB C,[330600,,40] ; OP CODE
|
||
CAIL C,UUOMAX
|
||
MOVEI C,0 ; GRT=>ILLEGAL
|
||
JRST @UUOTAB(C) ; GO TO PROPER ROUT
|
||
|
||
UUORET: POP P,D
|
||
POP P,C
|
||
POP P,B
|
||
POP P,A ; RESTORE AC'S
|
||
JRST 2,@UUOH
|
||
|
||
ILUUO: .VALUE [ASCIZ /:ILLEGAL UUO
|
||
/]
|
||
UOBPTR: MOVEI C,0
|
||
MOVE B,@40
|
||
JRST UOASC1
|
||
UOASCR: SKIPA C,[^M] ; CR FOR END OF TYPE
|
||
UOASC: MOVEI C,0 ; NO CR
|
||
HRLI B,440700 ; MAKE ASCII POINTER
|
||
UOASC1: ILDB A,B ; GET CHAR
|
||
JUMPE A,.+3 ; FINISH?
|
||
PUSHJ P,IOTA
|
||
JRST .-3 ; AND GET ANOTHER
|
||
SKIPE A,C ; GET SAVED CR?
|
||
PUSHJ P,IOTA
|
||
JRST UUORET
|
||
|
||
UOASCC: HRLI B,440700 ; MAKE ASCII POINTER
|
||
UOAS1C: ILDB A,B ; GET CHAR
|
||
CAIN A,^C
|
||
JRST UUORET
|
||
PUSHJ P,IOTA
|
||
JRST UOAS1C ; AND GET ANOTHER
|
||
|
||
UOCTLP: MOVEI A,^P
|
||
PUSHJ P,IOTA1
|
||
|
||
UOASCI: MOVE A,B ; PRT ASCII IMMEDIATE
|
||
PUSHJ P,IOTA
|
||
JRST UUORET
|
||
|
||
UOSIX: MOVE B,UUOD
|
||
USXOOP: JUMPE B,UUORET
|
||
LDB A,[360600,,B]
|
||
ADDI A,40
|
||
PUSHJ P,IOTA
|
||
LSH B,6
|
||
JRST USXOOP
|
||
|
||
UOSIXS: MOVE A,[440600,,UUOD]
|
||
USLOOP: ILDB C,A
|
||
ADDI C,40
|
||
PUSHJ P,IOTC
|
||
TLNE A,770000
|
||
JRST USLOOP
|
||
JRST UUORET
|
||
|
||
UOHPOS: SUB B,HPOS
|
||
JUMPLE B,UOASCI
|
||
UOHPO1: MOVEI A,40
|
||
PUSHJ P,IOTA
|
||
SOJG B,UOHPO1
|
||
JRST UUORET
|
||
|
||
POWER: 0 ? 1 ? 10. ? 100. ? 1000. ? 10000. ? 100000. ? 1000000.
|
||
|
||
UOALIG: MOVE D,UUOD
|
||
ANDI A,7
|
||
MOVE A,POWER(A)
|
||
MOVEI C,40
|
||
UOALI1: CAMLE A,D
|
||
PUSHJ P,IOTC
|
||
IDIVI A,10.
|
||
CAIE A,1
|
||
JRST UOALI1
|
||
SETZ A,
|
||
|
||
UODEC: SKIPA C,[10.] ; GET BASE FOR DECIMAL
|
||
UOOCT: MOVEI C,8. ; OCTAL BASE
|
||
MOVE B,UUOD ; GET ACTUAL WORD TO PRT
|
||
JRST .+3 ; JOIN CODE
|
||
UODECI: SKIPA C,[10.] ; DECIMAL
|
||
UOOCTI: MOVEI C,8.
|
||
MOVEM C,BASE'
|
||
SKIPN A
|
||
HRREI A,-1 ; A=DIGIT COUNT
|
||
PUSHJ P,UONUM ; PRINT NUMBR
|
||
JRST UUORET
|
||
|
||
UONUM: IDIV B,BASE
|
||
HRLM C,(P) ; SAVE DIGIT
|
||
SOJE A,UONUM1 ; DONE IF 0
|
||
SKIPG A ; + => MORE
|
||
SKIPE B ; - => B=0 => DONE
|
||
PUSHJ P,UONUM ; ELSE MORE
|
||
UONUM1: HLRZ C,(P) ; RETREIVE DIGITS
|
||
ADDI C,"0 ; MAKE TO ASCII
|
||
CAILE C,"9 ; IS IT GOOD DIG
|
||
ADDI C,"A-"9-1 ; MAKE HEX DIGIT
|
||
PUSHJ P,IOTC
|
||
POPJ P, ; RET
|
||
|
||
IOTC: PUSH P,A
|
||
MOVE A,C
|
||
PUSHJ P,IOTA
|
||
JRST POPAJ
|
||
|
||
IOTA: CAIN A,^P
|
||
JRST IOTAP
|
||
IOTA1: CAIN A,^J
|
||
POPJ P,
|
||
.IOT TYOC,A
|
||
CAIN A,^I
|
||
JRST [MOVE A,HPOS
|
||
ADDI A,10
|
||
ANDI A,7770
|
||
MOVEM A,HPOS
|
||
POPJ P,]
|
||
AOS HPOS
|
||
CAIE A,^M
|
||
POPJ P,
|
||
SETZM HPOS
|
||
POPJ P,
|
||
IOTAP: .IOT TYOC,["^]
|
||
ADDI A,100
|
||
JRST IOTA1
|
||
|
||
POPAJ: POP P,A
|
||
POPJ P,
|
||
|
||
END START |