mirror of
https://github.com/PDP-10/its.git
synced 2026-01-20 09:55:52 +00:00
573 lines
8.4 KiB
Plaintext
573 lines
8.4 KiB
Plaintext
;-*-Midas-*-
|
||
|
||
|
||
Title :SENSOR - Sends cENSOR
|
||
|
||
|
||
A=1 ;General porpoise
|
||
B=2
|
||
C=3
|
||
D=4
|
||
J=5
|
||
F=6
|
||
G=7
|
||
|
||
I=10 ;Index
|
||
|
||
R1=11 ;Returns
|
||
R2=12
|
||
R3=13
|
||
|
||
T1=14 ;Transient
|
||
T2=15
|
||
T3=16
|
||
|
||
P=17 ;The obligatory PDL
|
||
|
||
Call=<PUSHJ P,>
|
||
Return=<POPJ P,>
|
||
|
||
TTYo==1
|
||
CLIo==2
|
||
USRi==3
|
||
|
||
PDLen==15
|
||
JCLen==20
|
||
|
||
MaxIs==10 ;Max # unames to /Ignore
|
||
MaxPs==10 ; " # jnames to /Program
|
||
MaxFs==10 ; " # jnames to /Forward to
|
||
|
||
;;;
|
||
;;;;;
|
||
;;;
|
||
|
||
Define SYSCAL op,args
|
||
.Call [Setz ? Sixbit /op/ ? args ((Setz))]
|
||
Termin
|
||
|
||
Define TYPE &string
|
||
Movei T1,<.Length string>
|
||
Move T2,[440700,,[Ascii string]]
|
||
Syscal SIOT,[%Climm,,TTYo ? T2 ? T1]
|
||
.Lose %LsSys
|
||
Termin
|
||
|
||
;;;
|
||
;;;;;
|
||
;;;
|
||
|
||
Keys: "B ? "F ? "I ? "P ? "S ? "V ? "N
|
||
Hands: DoB ? DoF ? DoI ? DoP ? DoS ? DoV ? DoN
|
||
NKeys==.-Hands
|
||
|
||
BFlag: 0
|
||
FFlag: 0
|
||
IFlag: 0
|
||
PFlag: 0
|
||
SFlag: 0
|
||
VFlag: 0
|
||
|
||
oChan: TTYo
|
||
|
||
Uname: 0 ;Your uname
|
||
|
||
Valret: Ascii ":SELF
|
||
.JNAME/1'HACRTN
|
||
:KILL
|
||
HACTRNJ
|
||
L DSK:KP;SERVER BIN
|
||
:GZP
|
||
:FORGET
|
||
J :VK "
|
||
|
||
Numbel: 1 ;Number of bells before message
|
||
Verbos: 4 ;Verbosity level
|
||
SaveSs: -1 ;0 if not Saving Sends
|
||
|
||
Device: Sixbit /DSK/ ;Filename of your sends file
|
||
Sname: Sixbit /.TEMP./
|
||
FN1: 0
|
||
FN2: Sixbit /SENDS/
|
||
|
||
Ignore: 0 ;# unames we're ignoring
|
||
INames: Block MaxIs ;da poop
|
||
IValue: Block MaxIs ;Ignorance level
|
||
|
||
Sacred: 0 ;# special programs
|
||
PNames: Block MaxPs ;more poop
|
||
PVerb: Block MaxPs ;Verbosity
|
||
PBell: Block MaxPs ;Bells.
|
||
|
||
Forwar: 0 ;# jnames to foreward to
|
||
FNames: Block MaxFs
|
||
FRilly: Block MaxFs
|
||
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
;;;
|
||
;;; Header-parse cruft that needs to be zeroed every pass goes
|
||
;;; tween the Zer's. Contents of ZerTop is written over it all.
|
||
;;;
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
||
ZerTop: 0 ;Had better be zero!
|
||
|
||
JOBp: 0 ;-1 if print funame/jname and mesage only.
|
||
MAILp: 0 ;-1 for mail notification
|
||
YesCLI: 0
|
||
|
||
Fname: Block 4 ;From Name
|
||
F6name: 0 ;6bit name of sender. nonzero iff this is from an ITS site
|
||
|
||
Fsite: Block 3 ;From Site
|
||
F6Site: 0
|
||
|
||
FUname: 0 ;From Uname/Jname (might be COMSYS or some such)
|
||
FJname: 0
|
||
|
||
Length: 0 ;Length of message
|
||
pText: 0
|
||
|
||
ZerBot: 0 ;Hi, mom.
|
||
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
;;;
|
||
;;; End zeroed stuff
|
||
;;;
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
||
|
||
No: 0 ;True if this keyword has the /No prefix
|
||
gotFN1: 0
|
||
|
||
PDList: -PDLen,,.
|
||
Block PDLen
|
||
|
||
JCLbuf: Block JCLen
|
||
-1
|
||
|
||
OB: "[
|
||
CB: "]
|
||
EOF: -1,,3
|
||
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
;;;
|
||
;;; The program (finally) begins
|
||
;;;
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
||
Begin: Move P,PDList
|
||
Syscal OPEN,[%Clbit,,.uao\%TJDIS
|
||
%Climm,,TTYo
|
||
[Sixbit /TTY/]]
|
||
.Lose %LsFil
|
||
.Suset [.rUNAME,,Uname]
|
||
|
||
JCLp: .Break 12,[..rJCL,,JCLbuf]
|
||
Skipn JCLbuf
|
||
Jrst Go ;No JCL to parse
|
||
Move J,[350700,,Jclbuf]
|
||
|
||
NabCmd: Setzm No
|
||
Call Getcmd
|
||
Jrst Go ;Nothing more to get
|
||
Movsi T1,NKeys
|
||
Fcomd: Camn R1,Keys(T1)
|
||
Jrst @Hands(T1)
|
||
Aobjn T1,Fcomd
|
||
|
||
Type "Unknown command: '"
|
||
.Iot TTYo,R1
|
||
.Iot TTYo,["']
|
||
Jrst JCLerr
|
||
|
||
;;;
|
||
;;; /BELLS nnn
|
||
;;;
|
||
|
||
DoB: Call Getnum
|
||
Jrst NoNum
|
||
Cail R1,10.
|
||
Jrst BadNum
|
||
Movem R1,Numbel
|
||
Setom BFlag
|
||
Jrst NabCmd
|
||
|
||
;;;
|
||
;;; /VERBOSITY nnn
|
||
;;;
|
||
|
||
DoV: Call Getnum
|
||
Jrst NoNum
|
||
Caile R1,3
|
||
Jrst BadNum
|
||
Movem R1,Verbos
|
||
Setom VFlag
|
||
Jrst NabCmd
|
||
|
||
;;;
|
||
;;; [/NO] /PROGRAM uname bells verbosity ...
|
||
;;;
|
||
|
||
DoP: Setz B,
|
||
Call GetSix
|
||
Jrst NoArg
|
||
DoP2: Cail B,MaxPs
|
||
Jrst ToMany
|
||
Move C,R1
|
||
Call GetNum
|
||
Jrst [Movei R1,1 ;B=1
|
||
Movei R2,2 ;V=2
|
||
Jrst SaveP]
|
||
IDivi R1,10.
|
||
Caig R1,9.
|
||
Caile R2,3
|
||
Jrst BadNum
|
||
SaveP: Movem C,PNames(B)
|
||
Movem R2,PVerb(B)
|
||
Movem R1,PBell(B)
|
||
Call GetSix
|
||
Jrst [Aoj B,
|
||
Movem B,Sacred
|
||
Setom PFlag
|
||
Jrst NabCmd]
|
||
Aoja B,DoP2
|
||
|
||
;;;
|
||
;;; [/NO] /SENDSAVE dev:sname;fn1 fn2
|
||
;;;
|
||
|
||
DoS: Skipe No
|
||
Jrst [Setzm SaveSs
|
||
Jrst NabCmd]
|
||
Setom SaveSs
|
||
Setzm gotFN1
|
||
Setom SFlag
|
||
gFile: Call GetSix
|
||
Jrst NabCmd
|
||
Cain R2,":
|
||
Jrst [Movem R1,Device
|
||
Jrst gFile]
|
||
Cain R2,";
|
||
Jrst [Movem R1,Sname
|
||
Jrst gFile]
|
||
Movei T1,FN1
|
||
Skipe gotFN1
|
||
Aoj T1,
|
||
Movem R1,(T1)
|
||
Setom GotFN1
|
||
Jrst gFile
|
||
|
||
;;;
|
||
;;; [/NO] /IGNORE uname intensity ...
|
||
;;;
|
||
|
||
DoI: Setz B,
|
||
Call GetSix
|
||
Jrst NoArg
|
||
DoI2: Cail B,MaxIs
|
||
Jrst ToMany
|
||
Skipe No
|
||
Jrst [Setom IValue(B)
|
||
Jrst DoI3]
|
||
Move C,R1
|
||
Call GetNum
|
||
Jrst NoNum
|
||
Movem R1,IValue(B)
|
||
DoI3: Movem C,INames(B)
|
||
Call GetSix
|
||
Jrst [Aoj B,
|
||
Movem B,Ignore
|
||
Setom IFlag
|
||
Jrst NabCmd]
|
||
Aoja B,DoI2
|
||
|
||
;;;
|
||
;;; [/NO] /FORWARD jname ...
|
||
;;;
|
||
|
||
DoF: Setz B,
|
||
Call GetSix
|
||
Jrst NoArg
|
||
DoF2: Cail B,MaxFs
|
||
Jrst ToMany
|
||
Movem R1,FNames(B)
|
||
Move T1,No
|
||
Movem T1,FRilly(B)
|
||
Call GetSix
|
||
Jrst [Aoj B,
|
||
Movem B,Forwar
|
||
Setom FFlag
|
||
Jrst NabCmd]
|
||
Aoja B,DoF2
|
||
|
||
DoN: Setcmm No
|
||
Jrst NabCmd
|
||
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
;;;
|
||
;;; JCL is all parsed - Now we summon a new server, or just
|
||
;;; ship off these params to an existing one.
|
||
;;;
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
||
Go: Syscal OPEN,[%Clbit,,.bii
|
||
%Climm,,USRi
|
||
[Sixbit /USR/]
|
||
Uname
|
||
['HACRTN]]
|
||
.Value Valret
|
||
.Close USRi,
|
||
Syscal OPEN,[%Clbit,,.uao
|
||
%Climm,,CLIo
|
||
[Sixbit /CLI/]
|
||
Uname
|
||
['HACTRN]]
|
||
Jrst CantS
|
||
.Iot CLIo,[177]
|
||
.Iot CLIo,[177] ;Set up lead-in sequence
|
||
|
||
;;;
|
||
;;; <0><#of bells>
|
||
;;;
|
||
|
||
SendB: Skipn BFlag
|
||
Jrst SendF
|
||
.Iot CLIo,[0]
|
||
.Iot CLIo,Numbel
|
||
|
||
;;;
|
||
;;; <1><number><jname 1><0><jname 2><0> ...
|
||
;;;
|
||
|
||
SendF: Skipn FFlag
|
||
Jrst SendI
|
||
.Iot CLIo,[1]
|
||
.Iot CLIo,Forwar
|
||
Movn A,Forwar
|
||
Movss A
|
||
SendFl: Move T1,FNames(A)
|
||
Call 6Type
|
||
.Iot CLIo,[0]
|
||
Aobjn A,SendF
|
||
|
||
;;;
|
||
;;; <2><number><ignorance 1><uname 1><0><ignorance 2><uname 2><0> ...
|
||
;;;
|
||
|
||
SendI: Skipn IFlag
|
||
Jrst SendP
|
||
.Iot CLIo,[2]
|
||
.Iot CLIo,Ignore
|
||
Movn A,Ignore
|
||
Movss A
|
||
SendI1: .Iot CLIo,IValue(A)
|
||
Move T1,INames(A)
|
||
Call 6Type
|
||
.Iot CLIo,[0]
|
||
Aobjn A,SendI1
|
||
|
||
;;;
|
||
;;; <3><number><verbosity 1><bells 1><jname 1><0> ...
|
||
;;;
|
||
|
||
SendP: Skipn PFLag
|
||
Jrst SendS
|
||
.Iot CLIo,[3]
|
||
.Iot CLIo,Sacred
|
||
Movn A,Sacred
|
||
Movss A
|
||
SendP1: .Iot CLIo,PVerb(A)
|
||
.Iot CLIo,PBell(A)
|
||
Move T1,PNames(A)
|
||
Call 6Type
|
||
Aobjn A,SendP1
|
||
|
||
;;;
|
||
;;; <4><flag>[<device><0><sname><0><fn1><0><fn2><0>]
|
||
;;;
|
||
|
||
SendS: Skipn SFlag
|
||
Jrst SendV
|
||
.Iot CLIo,[4]
|
||
.Iot CLIo,SaveSs
|
||
Skipn SaveSs
|
||
Jrst SendV
|
||
Move T1,Device
|
||
Call 6Type
|
||
.Iot CLIo,[0]
|
||
Move T1,Sname
|
||
Call 6Type
|
||
.Iot CLIo,[0]
|
||
Move T1,FN1
|
||
Call 6Type
|
||
.Iot CLIo,[0]
|
||
Move T1,FN2
|
||
Call 6Type
|
||
.Iot CLIo,[0]
|
||
|
||
;;;
|
||
;;; <5><verbosity>
|
||
;;;
|
||
|
||
SendV: Skipn SendV
|
||
Jrst Finish
|
||
.Iot CLIo,[5]
|
||
.Iot CLIo,Verbos
|
||
|
||
Finish: .Close CLIo,
|
||
Type "[Arghs sent]"
|
||
Jrst Die
|
||
|
||
|
||
;;;
|
||
;;;;;
|
||
;;;
|
||
|
||
|
||
|
||
NoNum: Type "Missing numeric argument?"
|
||
Jrst JCLerr
|
||
|
||
BadNum: Type "Numeric argument out of valid range?"
|
||
Jrst JCLerr
|
||
|
||
NoArg: Type "Missing argument?"
|
||
Jrst JCLerr
|
||
|
||
BadArg: Type "Invalid argument?"
|
||
Jrst JCLerr
|
||
|
||
ToMany: Type "Too many arguments?"
|
||
|
||
JCLerr: .Iot TTYo,[^P]
|
||
.Iot TTYo,["A]
|
||
Move A,[440700,,JCLbuf]
|
||
JEloop: Ildb T1,A
|
||
Jumpe T1,Die
|
||
Cail T1,40
|
||
.Iot TTYo,T1
|
||
Came A,J
|
||
Jrst JEloop
|
||
.Iot TTYo,["<]
|
||
.Iot TTYo,["-]
|
||
Jrst JEloop
|
||
|
||
CantS: Type "Can't send arguments to HACTRN"
|
||
|
||
DIE: .Logout 1,
|
||
|
||
6Type: Setz T2,
|
||
Rotc T1,6
|
||
Addi T2,40
|
||
.Iot CLIo,T2
|
||
Jumpn T1,6Type
|
||
Return
|
||
|
||
GCmOne: Ibp J
|
||
GetCmd: Ldb T1,J
|
||
Caie T1,40 ;Skip leading whitespace
|
||
Cain T1,^I
|
||
Jrst GCmOne
|
||
Caie T1,^M ;Die on ^C, ^M, ^_, ^@
|
||
Cain T1,^C
|
||
Return
|
||
Skipe T1
|
||
Cain T1,^_
|
||
Return
|
||
Caie T1,"/ ;Ah, we found the "/"!
|
||
Jrst GCmOne
|
||
Ildb R1,J ;Get the command-char
|
||
Cail R1,"a
|
||
Trz R1,40 ;Uppercase it
|
||
|
||
Gc2: Ildb T1,J
|
||
Caie T1,40
|
||
Cain T1,"=
|
||
Jrst PopJ1
|
||
Caie T1,^I
|
||
Cain T1,",
|
||
Jrst PopJ1
|
||
Jumpn T1,GC2
|
||
Jrst PopJ1
|
||
|
||
GetSix: Setz R1,
|
||
Movei T3,6
|
||
Move T2,[440600,,R1]
|
||
Ildb R2,J
|
||
Caie R2,40
|
||
Cain R2,^I
|
||
Jrst .-3
|
||
Skipa
|
||
g6Char: Ildb R2,J
|
||
Caie R2,^M
|
||
Cain R2,^C
|
||
Jrst 6Check
|
||
Skipe R2
|
||
Cain R2,"/
|
||
Jrst 6Check
|
||
Caie R2,";
|
||
Cain R2,":
|
||
Jrst 6Check
|
||
Cain R2,40
|
||
Jrst 6Check
|
||
Jumpe T3,g6Char
|
||
Cail R2,"a
|
||
Trz R2,40
|
||
Subi R2,40
|
||
Idpb R2,T2
|
||
Soja T3,g6Char
|
||
|
||
6Check: Caie T3,6
|
||
Jrst PopJ1
|
||
Return
|
||
|
||
GetNum: Setz T3,
|
||
Ildb T1,J
|
||
Caie T1,40
|
||
Cain T1,^I
|
||
Jrst GetNum
|
||
Skipa
|
||
gNChar: Ildb T1,J
|
||
Caie T1,^M
|
||
Cain T1,^C
|
||
Jrst NCheck
|
||
Caie T1,"/
|
||
Skipn T1
|
||
Jrst NCheck
|
||
Caie T1,40
|
||
Cain T1,^I
|
||
Jrst NCheck
|
||
Cail T1,"0
|
||
Caile T1,"9
|
||
Jrst [Skipn T3
|
||
Return
|
||
Pop P,T1
|
||
Jrst .-3]
|
||
Subi T1,"0
|
||
Push P,T1
|
||
Aoja T3,gNChar
|
||
|
||
NCheck: Skipn T3
|
||
Return
|
||
Setz R1,
|
||
Movei R2,1
|
||
ToTen: Pop P,T1
|
||
IMul T1,R2
|
||
IMuli R2,10.
|
||
Add R1,T1
|
||
Sojn T3,ToTen
|
||
Jrst PopJ1
|
||
|
||
PopJ1: Aos (P)
|
||
Return
|
||
|
||
;;;
|
||
;;;;;
|
||
;;;
|
||
|
||
Variables
|
||
Constants
|
||
|
||
|
||
END Begin |