mirror of
https://github.com/PDP-10/its.git
synced 2026-02-04 15:53:01 +00:00
Addd support for REATTA.
This commit is contained in:
348
src/sysen2/reatta.18
Executable file
348
src/sysen2/reatta.18
Executable file
@@ -0,0 +1,348 @@
|
||||
|
||||
;-*-MIDAS-*-
|
||||
|
||||
TITLE REATTACH
|
||||
|
||||
.INSRT RMS;MACROS >
|
||||
|
||||
TYIC==1
|
||||
TYOC==2
|
||||
USRI==3
|
||||
DSKIC==4
|
||||
|
||||
BUSRC==100000 ;USER-CONTROLLED BIT IN .USTP WORD.
|
||||
|
||||
IFNDEF LPDL,LPDL==40
|
||||
IFNDEF JCLBSZ,JCLBSZ==10
|
||||
|
||||
BEG: MOVE P,[-LPDL,,PDL]
|
||||
MOVEI A,ITEMTB ;INIT ALL VARIABLES
|
||||
MOVEM A,ITEMTP
|
||||
.SUSET [.RUNAM,,UNAME]
|
||||
SETZM JNAME
|
||||
SETOM TTYNUM
|
||||
.SUSET [.ROPTIO,,A]
|
||||
TLNN A,OPTCMD ;NO COMMAND STRING => REATTACH OUR OWN DETACHED TREE.
|
||||
JRST OLDTREE
|
||||
SETZM JCLBUF ;NOW GET THE COMMAND STRING
|
||||
MOVE A,[JCLBUF,,JCLBUF+1]
|
||||
BLT A,JCLBUF+JCLBSZ-1
|
||||
.BREAK 12,[5,,JCLBUF]
|
||||
SKIPN JCLBUF
|
||||
JRST OLDTREE
|
||||
MOVE D,[440700,,JCLBUF] ;NOW PROCESS THE COMMAND STRING.
|
||||
ITEMLP: SAVE D
|
||||
CALL RNUMO ;TRY TO READ A TTY NUMBER.
|
||||
JRST ITEMWD ;FAILED; READ A WORD INSTEAD.
|
||||
SUB P,[1,,1]
|
||||
MOVEM A,TTYNUM ;GOT A TTY NUMBER; LOOK FOR NEXT THING.
|
||||
JRST ITEMX
|
||||
|
||||
ITEMWD: REST D ;START OVER (MAYBE RNUMO SKIPPED SOME CHARS)
|
||||
CALL RDSIX ;READ A WORD.
|
||||
JUMPE B,ITEMW1
|
||||
XCT @ITEMTP ;STORE IT AS UNAME OR JNAME.
|
||||
AOS ITEMTP
|
||||
ITEMW1: CAIN C,"* ;"*" MEANS "DON'T SPECIFY THIS ITEM".
|
||||
AOS ITEMTP
|
||||
ITEMX: CAIE C,^C ;^C AND ^M END THE COMMAND STRING.
|
||||
CAIN C,^M
|
||||
JRST CHECK
|
||||
CAIE C,"/ ;SLASH STARTS A SWITCH.
|
||||
JRST ITEMLP
|
||||
ILDB C,D
|
||||
CAIL C,140 ;CONVER THE SWITCH NAME TO UPPER CASE
|
||||
SUBI C,40
|
||||
SETZ B,
|
||||
CAIN C,"F ;/F => IF TTY IS IN USE, FREE IT BY DETACH.
|
||||
SETOB B,FORCE
|
||||
CAIN C,"K ;/K => KILL THE TREE DETACHED FROM THE SPEC'D TTY,
|
||||
SETOB B,KILL ;IF THERE WAS ONE.
|
||||
CAIN C,"X ;/X => EXCHANGE SPECIFIED JOB WITH THAT ON SPECIFIED TTY.
|
||||
SETOB B,EXCHNG
|
||||
JUMPN B,ITEMLP
|
||||
JRST NOSWIT ;ANYTHING ELSE AFTER SLASH IS ILLEGAL.
|
||||
|
||||
ITEMTB: MOVEM B,UNAME
|
||||
MOVEM B,JNAME
|
||||
SOS ITEMTP
|
||||
|
||||
;READ AN OCTAL NUMBER, OPTIONALLY PRECEDED BY "T", INTO A.
|
||||
;THE "T" MAKES NO DIFFERENCE. A COLON MAY ALSO APPEAR AS A NOISE CHARACTER
|
||||
;AT THE END.
|
||||
;CLOBBERS B,C. SKIPS IF SUCCESSFUL (NUMBER IS NON-NULL AND
|
||||
;HAS A PROPER TERMINATING CHARACTER).
|
||||
RNUMO: SETZB A,B ;A ACCUMULATES NUMBER, B COUNTS DIGITS.
|
||||
ILDB C,D
|
||||
CAIE C,"T
|
||||
CAIN C,"T+40
|
||||
RNUMO1: ILDB C,D
|
||||
CAIL C,"0
|
||||
CAILE C,"9
|
||||
JRST RNUMOX ;NON-DIGIT => IS THIS A LEGITIMATE TERMINATOR?
|
||||
LSH A,3
|
||||
ADDI A,-"0(C) ;DIGIT => MERGE IT IN.
|
||||
AOJA B,RNUMO1
|
||||
|
||||
RNUMOX: JUMPE B,CPOPJ ;FAIL IF # OF DIGITS IS 0.
|
||||
CAIN C,":
|
||||
ILDB C,D
|
||||
RDTEST: CAIE C,", ;SKIP IF CHAR IN C IS A LEGITIMATE TERMINATOR.
|
||||
CAIG C,40
|
||||
JRST POPJ1
|
||||
CAIE C,"*
|
||||
CAIN C,"/
|
||||
JRST POPJ1
|
||||
CAIN C,"?
|
||||
JRST HELP
|
||||
CPOPJ: RET
|
||||
|
||||
POPJ1: AOS (P)
|
||||
RET
|
||||
|
||||
;READ A WORD, AS A SIXBIT WORD IN B. CLOBBERS A, C.
|
||||
;ENDS WITH FIRST LEGITIMATE TERMINATOR (BUT ^Q CAN QUOTE).
|
||||
RDSIX: SETZ B,
|
||||
MOVE A,[440600,,B]
|
||||
RDSIXL: ILDB C,D
|
||||
CALL RDTEST ;IS CHAR A TERMINATOR?
|
||||
JRST RDSIX1 ;NO.
|
||||
CAIE C,^Q ;YES, BUT ^Q ISN'T LIKE OTHER TERMINATORS.
|
||||
RET
|
||||
ILDB C,D
|
||||
CAIGE C,40
|
||||
RET ;DON'T LET ^M, ^C BE QUOTED AT ALL.
|
||||
RDSIX1: CAIL C,140
|
||||
SUBI C,40 ;CONVERT CHAR TO UPPER CASE.
|
||||
SUBI C,40
|
||||
TLNE A,770000
|
||||
IDPB C,A
|
||||
JRST RDSIXL
|
||||
|
||||
;ASK THE USER FOR CONFIRMATION ON REATTACHING HIS DETACHED TREE.
|
||||
CONFRM:.OPEN TYOC,TTYOF
|
||||
.LOSE %LSSYS
|
||||
.OPEN TYIC,TTYIF
|
||||
.LOSE %LSSYS
|
||||
MOVEI A,[ASCIZ /This will kill any jobs you have in this tree.
|
||||
/]
|
||||
CALL NO3
|
||||
CONFR1: MOVEI A,[ASCIZ /Should I go ahead (Y or N)? /]
|
||||
CALL NO3
|
||||
.IOT TYIC,C
|
||||
CAIL C,140
|
||||
SUBI C,40
|
||||
MOVEI A,[ASCIZ /
|
||||
/]
|
||||
CALL NO3
|
||||
CAIN C,"N
|
||||
JRST NO2
|
||||
CAIE C,"Y
|
||||
JRST CONFR1
|
||||
SETOM KILL ;KILL THE USER'S NEW TREE.
|
||||
POPJ P,
|
||||
|
||||
;HERE IF NO ARGUMENTS. ATTACH OUR OWN OLD DETACHED TREE, ASKING FOR CONFIRMATION.
|
||||
OLDTREE:SETOM SELF
|
||||
|
||||
;COME HERE AFTER PROCESSING THE COMMAND STRING.
|
||||
;DEFAULT THE JNAME IF NECESSARY, AND CHECK ARGS FOR LEGALITY.
|
||||
CHECK: SKIPE A,JNAME ;IF JNAME IS UNSPECIFIED, TRY DETACHED TREES, THEN HACTRN.
|
||||
JRST CHECK1
|
||||
MOVE B,[SIXBIT/HELP/]
|
||||
CAMN B,UNAME ;IF UNAME IS "HELP" AND NO JNAME, COMMAND STRING WAS
|
||||
JRST HELP ;JUST "HELP", SO GIVE USER HELP.
|
||||
MOVE A,['HACTRR] ;USE HACTRR IF IT EXISTS,
|
||||
.CALL TRYOPN
|
||||
SKIPA A,['HACTRQ] ;ELSE USE HACTRQ IF IT EXISTS,
|
||||
JRST CHECK1
|
||||
.CALL TRYOPN
|
||||
SKIPA A,['HACTRP] ;ELSE USE HACTRP IF IT EXISTS,
|
||||
JRST CHECK1
|
||||
.CALL TRYOPN
|
||||
SKIPA A,['HACTRO] ;ELSE USE HACTRO IF IT EXISTS,
|
||||
JRST CHECK1
|
||||
.CALL TRYOPN
|
||||
SKIPA A,['HACTRN] ;IT DOESN'T; TRY HACTRN.
|
||||
JRST CHECK1
|
||||
SKIPE SELF ;DON'T TRY HACTRN IN CASE OF :REATTA<CR>
|
||||
JRST NODET
|
||||
CHECK1: .CALL TRYOPN ;DOES SPEC'D JOB EXIST?
|
||||
JRST NOJOB ;NO; ERROR.
|
||||
.USET USRI,[.RUSTP,,B]
|
||||
TLNE B,BUSRC ;IT IS AN ERROR TO TRY TO ATTACH A STOPPED JOB.
|
||||
JRST NORUN
|
||||
SKIPE SELF ;IF :REATTA<CR>, ASK USER FOR CONFIRMATION.
|
||||
CALL CONFRM
|
||||
MOVEM A,JNAME
|
||||
MOVE B,TTYNUM
|
||||
JUMPGE B,CHECK2 ;IF USING OUR OWN TTY,
|
||||
.SUSET [.RCNSL,,B] ;FIND OUT ITS NUMBER.
|
||||
.SUSET [.RUNAME,,C] ;ALSO, IF WE ARE NOT LOGGED IN YET, ASSUME /K
|
||||
HLLES C ;SO THAT SOMEONE DOING :REATTA <SELF> WITHOUT
|
||||
AOJN C,CHECK2 ;LOGGING IN DOESN'T LEAVE A NON-LOGGED-IN DETACHED TREE.
|
||||
SETOM KILL
|
||||
SKIPE EXCHNG ;/X ISN'T ALLOWED IF YOU AREN'T LOGGED IN.
|
||||
JRST NOLOGX
|
||||
CHECK2: SKIPE KILL
|
||||
SKIPN EXCHNG ;/X AND /K ARE INCONSISTENT.
|
||||
CAIA
|
||||
JRST NOXK
|
||||
TRO B,400000 ;MAKE A TTY SPEC OUT OF THE TTY NUMBER.
|
||||
MOVEM B,RTTYNM
|
||||
SYSCAL STYGET,[B ? MOVEM C ? MOVEM A ? MOVEM C]
|
||||
.LOSE %LSFIL
|
||||
HRRES C ;C HAS -1, OR IDX OF TOP OF TREE OF SPEC'D TTY.
|
||||
.USET USRI,[.RUIND,,D]
|
||||
CAIN D,(C) ;SPEC'D TREE IS ALREADY ON THAT TTY =>
|
||||
JRST NOOP ;WE HAVE NOTHING TO DO.
|
||||
.USET USRI,[.RSUPPR,,D]
|
||||
JUMPGE D,NOTTOP ;SPEC'D JOB MUST BE TOP LEVEL
|
||||
JUMPL C,CHECK3 ;NOW, IF TTY IS IN USE,
|
||||
SKIPE EXCHNG
|
||||
SETOM FORCE
|
||||
SKIPL TTYNUM ;AND IT'S OUR OWN, DETACH US.
|
||||
SKIPE FORCE ;ELSE GIVE UP UNLESS /F OR /X WAS SPEC'D.
|
||||
SYSCAL DETACH,[%CLIMM,,400000(C) ? %CLBIT,,30]
|
||||
JRST NOTFREE ;THIS DETACH OMITS CNSL FREE MSG, AND MAKES JOB
|
||||
JRST ACT ;DIE AFTER AN HOUR IF NOT ATTACHED.
|
||||
|
||||
CHECK3: HRRES A
|
||||
JUMPGE A,NOTFREE ;CAN'T DO ANYTHING WITH TTY IN USE AS DEVICE.
|
||||
|
||||
;NOW THAT ALL IS CHECKED, DO THE DIRTY WORK.
|
||||
ACT: .USET USRI,[.RCNSL,,A] ;REMEMBER TTY THAT SPEC'D JOB CAME FROM IN A.
|
||||
.USET USRI,[.RAPRC,,D]
|
||||
JUMPL D,ACT1 ;IF SPEC'D TREE IS DISOWNED, ALL IS WELL.
|
||||
JUMPL A,ACT2 ;ELSE IF THE SPEC'D TREE HAD A TTY AND THE SPEC'D TTY
|
||||
JUMPL C,ACT2 ;HAD A TREE, MAYBE (IF /X, "EXCHANGE", SPECIFIED)
|
||||
SKIPN EXCHNG
|
||||
JRST ACT2
|
||||
SYSCAL DETACH,[1000,,USRI ? 5000,,30] ;KILL IN 1 HOUR, NO CONSOLE FREE MESSAGE.
|
||||
.LOSE %LSSYS ;FREE THE SPEC'D TREE FROM ITS TTY
|
||||
SYSCAL ATTACH,[%CLIMM,,400000(C) ? %CLIMM,,400000(A) ? %CLBIT,,400000]
|
||||
.LOSE %LSSYS ;AND PUT THE SPEC'D TTY'S TREE THERE INSTEAD.
|
||||
JRST ACT1
|
||||
|
||||
;HERE TO DETACH SPECIFIED TREE IF WE ARE NOT EXCHANGING IT. IN THAT CASE,
|
||||
;WE SHOULD ALLOW A CONSOLE-FREE MESSAGE ON ITS TERMINAL.
|
||||
ACT2: DPAUSE
|
||||
SYSCAL DETACH,[1000,,USRI ? 5000,,10] ;CTL BIT 10 INHIBITS CNSL FREE MSG
|
||||
.LOSE %LSSYS
|
||||
ACT1: DPAUSE
|
||||
SYSCAL ATTACH,[%CLIMM,,USRI ? RTTYNM ? %CLBIT,,400000]
|
||||
.LOSE %LSSYS
|
||||
SKIPN KILL ;AND MAYBE KILL THE TREE WE DETACHED FROM THE TTY.
|
||||
JRST RETURN
|
||||
SKIPL C
|
||||
.GUN C,
|
||||
RETURN: DPAUSE
|
||||
.LOGOUT
|
||||
.SUSET [.RTTY,,A]
|
||||
ANDI A,-1
|
||||
SKIPL TTYNUM
|
||||
CAMN A,TTYNUM ;IF WE JUST REATTACHED OUR OWN TREE TO NEW TTY,
|
||||
.VALUE [ASCIZ /:KILL :NEWTTY :VERSIO /] ;TELL DDT TO LOOK AGAIN AT TTY CHARACTERISTICS
|
||||
.BREAK 16,340000
|
||||
|
||||
;ERROR MESSAGE HANDLERS.
|
||||
|
||||
NOTFREE:JSP A,NO
|
||||
ASCIZ /Specified TTY not free/
|
||||
|
||||
NOTTOP: JSP A,NO
|
||||
ASCIZ /Specified job not top level/
|
||||
|
||||
NOLOGX: JSP A,NO
|
||||
ASCIZ */X is not allowed unless you are logged in*
|
||||
|
||||
NOXK: JSP A,NO
|
||||
ASCIZ */X and /K together make no sense*
|
||||
|
||||
NOJOB: JSP A,NO
|
||||
ASCIZ /No such job/
|
||||
|
||||
NORUN: JSP A,NO
|
||||
ASCIZ /Specified job not running/
|
||||
|
||||
NOOP: JSP A,NO
|
||||
ASCIZ /Specified job and TTY already connected/
|
||||
|
||||
NODET: JSP A,NO
|
||||
ASCIZ /You have no detached tree/
|
||||
|
||||
NOSWIT: JSP A,NO
|
||||
ASCIZ /Unrecognized switch. Legal ones are K, F, and X/
|
||||
|
||||
NO: .OPEN TYOC,TTYOF
|
||||
.VALUE
|
||||
CALL NO3 ;PRINT THE STRING A POINTS TO,
|
||||
MOVEI A,[ASCIZ /.
|
||||
For help, do :REATTA ?<cr> or print .INFO.;REATTA ORDER./]
|
||||
CALL NO3 ;AND SOME GENERAL ADVICE.
|
||||
NO2: DPAUSE ;.VALUE IF DEBUGGING.
|
||||
.LOGOUT
|
||||
.BREAK 16,140000
|
||||
|
||||
NO3: HRLI A,440700
|
||||
NO1: ILDB B,A
|
||||
JUMPE B,CPOPJ
|
||||
.IOT TYOC,B
|
||||
JRST NO1
|
||||
|
||||
;COME HERE IF COMMAND STRING IS "HELP" OR CONTAINS A "?".
|
||||
HELP: .OPEN TYOC,TTYOF
|
||||
.LOSE %LSSYS
|
||||
SYSCAL OPEN,[1000,,DSKIC ;OPEN THE HELP FILE.
|
||||
['DSK,,] ? ['REATTA] ? [SIXBIT/ORDER/] ? ['.INFO.]]
|
||||
.LOSE %LSFIL
|
||||
SETOM TTYNUM ;PREVENT VALRETTING :NEWTTY AT RETURN:.
|
||||
HELP1: .IOT DSKIC,A
|
||||
ANDI A,-1
|
||||
CAIE A,^L
|
||||
CAIN A,^C
|
||||
JRST RETURN
|
||||
.IOT TYOC,A
|
||||
JRST HELP1
|
||||
|
||||
;CONSTANTS
|
||||
TRYOPN: SETZ ? SIXBIT/OPEN/
|
||||
[10,,USRI]
|
||||
['USR,,]
|
||||
UNAME
|
||||
SETZ A
|
||||
|
||||
TTYIF: 'TTY
|
||||
0
|
||||
|
||||
TTYOF: 1,,'TTY
|
||||
0
|
||||
|
||||
;VARIABLES
|
||||
FORCE: 0 ;-1 => EVEN IF SPEC'D TTY IS IN USE AND NOT OURS,
|
||||
;GO AHEAD BY DETACHING WHOEVER IS ON IT.
|
||||
KILL: 0 ;-1 => IF MUST DETACH A TREE FROM THE TTY TO FREE IT,
|
||||
;GUN THE TREE AFTER ATTACHING THE TTY.
|
||||
EXCHNG: 0 ;-1 => TAKE THE TREE WE DETACH FROM THE SPECIFIED TTY
|
||||
;AND ATTACH IT TO THE TTY THE SPECIFIED JOB CAME FROM,
|
||||
;THUS EXCHANGING THE TWO TREES.
|
||||
SELF: 0 ;-1 => :REATTA<CR>, ATTACH OWN DETACHED TREE.
|
||||
;IN THIS CASE, WE LOOK ONLY FOR DETACHED TREES, NOT FOR HACTRN.
|
||||
UNAME: 0 ;UNAME OF JOB TO ATTACH
|
||||
JNAME: 0 ;JNAME OF JOB TO ATTACH
|
||||
;0 => TRY HACTRO, THEN TRY HACTRN IF HACTRO DOESN'T EXIST.
|
||||
TTYNUM: -1 ;-1 => USE OUR TTY; ELSE, # OF TTY TO USE.
|
||||
RTTYNM: 0 ;A TTY SPEC, GOOD FOR SPECIFYING THE TTY TO BE USED.
|
||||
ITEMTP: ITEMTB ;FILENAME-READER COUNTER FOR SELECTING UNAME OR JNAME.
|
||||
|
||||
PDL: BLOCK LPDL
|
||||
|
||||
JCLBUF: BLOCK JCLBSZ
|
||||
-1
|
||||
|
||||
DEBUG: 0 ;-1 => DEBUGGING.
|
||||
PAT:
|
||||
PATCH: BLOCK 100
|
||||
-1
|
||||
|
||||
END BEG
|
||||
Reference in New Issue
Block a user