;*; Updated on 26-Dec-86 at 12:22 PM by Cary Fitch; edit time: 0:03:57
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; ATTACH - AlphaBASIC subroutine to attach job to another terminal
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;Commissioned by: Cary Fitch, NTSC
;
;Written by: David Pallmann, UltraSoft
;
;Edit History:
;1.0 23-Dec-86 created. /DFP
;1.01 23-Dec-86 clear T.JLK on old terminal [1-CF]
; (disconnects previous terminal from job)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Calling format:
;
; XCALL ATTACH, address
;
; Where:
;
; address - is a 4-byte binary value that contains the
; address of the TCB to attach to. Typically, this
; is the value returned by a prior TRMADR XCALL.
;
; Example:
;
; MAP1 TRMLOC, B, 4
; ...
; XCALL TRMADR, "TRM1", TRMLOC
; IF TRMLOC=0 THEN GOTO TERM'ERROR
; ...
; XCALL ATTACH, TRMLOC
;
; Uses: Allows printing to another terminal or port using "print
; using" and other convenient means from within a BASIC program.
;
; Allows input from another terminal in a BASIC program using
; normal INPUT or INPUT LINE statement.
;
; Allows use of XCALL INFLD from another terminal, with use of
; "time out feature" of INFLD, control can return to original
; terminal at predetermined time.
;
; Useful for getting input from devices such as card readers
; etc. in control applications.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VMAJOR=1
VMINOR=1
VSUB=0
OBJNAM .SBR
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
COPY XCALL
PHDR -1,,PH$REE!PH$REU
;check argument count
CHKCNT: CMPW COUNT(A3),#1 ; 1 argument in XCALL?
JNE CNTERR ; no - error
;check that first argument is of type binary and is 4 bytes long
CHKBIN: CMPW TYPE1(A3),#BINARY ; 1st argument a binary?
JNE BINERR ; no - error
CMP SIZE1(A3),#4 ; 1st argument 4 bytes long
JNE BINERR ; no - error
; detach terminal from job [1-CF]
DETACH: JOBIDX ; get our job [1-CF]
MOV JOBTRM(A6),A6 ; index the term [1-CF]
CLR T.JLK(A6) ; clear trm link to job [1-CF]
;if terminal in question is already attached, detach it
MOV ADDR1(A3),A0 ; point to 1st argument
MOV @A0,A5 ; A5 is new TCB address
TST T.JLK(A5) ; is new terminal attached?
BEQ ATTACH ; no
MOV T.JLK(A5),A0 ; yes - get JCB addres in A0
CLR JOBTRM(A0) ; clear JCB link to TCB
;[1-CF] CLR T.JLK(A5) ; clear TCB link to JCB
;attach terminal to our job
ATTACH: JOBIDX A1 ; point to own JCB
MOV A5,JOBTRM(A1) ; set JCB link to TCB
MOV A1,T.JLK(A5) ; set TCB link to JCB
RTN ; return to program
;incorrect number of arguments in XCALL
CNTERR: TYPESP ?Incorrect number of arguments
BR ERROR