Google
 

Trailing-Edge - PDP-10 Archives - BB-R598A-RM_1983 - swskit-v3/nvt/11host.mac
There is 1 other file named 11host.mac in the archive. Click here to see a list.
	.TITLE	HOST	- CONNECT TI: TO OTHER HOST
	.IDENT	/003010/

	.MCALL	CONB$$,CRBDF$,CNBDF$,NSSYM$,ISTAT$,STATE$,TRAN$
	.MCALL	OPNW$S,CONW$S,REC$S,SND$S,CLS$S
	.MCALL	DIR$,GMCR$,ASTX$S,DSAR$S,ENAR$S,GPRT$S,SPND$S,EXIT$S
	.MCALL	ALUN$S,CLEF$S,SETF$S,WTSE$S,QIOW$S,QIO$S
	CRBDF$
	CNBDF$
	NSSYM$

	.MACRO	ERROR MSG
	MOV	#'MSG,R0
	JMP	ERROR
	.ENDM	ERROR

	.MACRO	MESSAGE LINE
	.NCHR	$$$LNG,<LINE>
	.ASCII	<$$$LNG>\'LINE'\
	.ENDM	MESSAGE

	.MACRO	PUSH	LIST
	.IRP	.L,<LIST>
	MOV	.L,-(SP)
	.ENDR
	.ENDM	PUSH

	.MACRO	POP	LIST
	.IRP	.L,<LIST>
	MOV	(SP)+,.L
	.ENDR
	.ENDM	POP

	.PSECT	POOL,D
AVAIL:	.WORD	POOL,0
POOL:	.WORD	0,POOLNG
	.PSECT
;+
; COMMAND LINE PARSER STATE TABLES
;-

	ISTAT$	.MCRST,.MCRKW

	STATE$
	TRAN$	$STRNG				; THE MCR COMMAND.
	STATE$
	TRAN$	$EOS,$EXIT			; END OF COMMAND
	TRAN$	$BLANK				; OR SEPERATOR.
	STATE$
	TRAN$	$STRNG,,SETNOD			; THE NODE NAME
	STATE$	SWTS				; SCAN FOR SWITCHES
	TRAN$	$EOS,$EXIT
	TRAN$	<'/>
	STATE$
	TRAN$	!SWTESC,SWTS
	TRAN$	!SWTPAU,SWTS

	STATE$	SWTESC
	TRAN$	"ESCAPE"
	STATE$
	TRAN$	<':>
	STATE$
	TRAN$	$NUMBR,$EXIT,SETESN
	TRAN$	$ANY,$EXIT,SETESC

	STATE$	SWTPAU
	TRAN$	"PAUSE"
	STATE$
	TRAN$	<':>
	STATE$
	TRAN$	$NUMBR,$EXIT,SETPAN
	TRAN$	$ANY,$EXIT,SETPAU

	STATE$
	.PAGE
;+
; COMMAND PARSER ACTION ROUTINES
;-

	.PSECT	POOL,D
SETNOD:	MOV	#6,R0		; MAX NODE NAME LENGTH.
	CMP	R0,.PSTCN	; IF NODE NAME TOO LONG
	BLO	90$		; THEN REJECT.
	MOV	#N.RND+6+SERVER,R1 ; OTHERWISE
10$:	MOVB	#' ,-(R1)	; CLEAR OUT THE FIELD
	SOB	R0,10$
	MOV	.PSTPT,R2	; AND
	MOV	.PSTCN,R0
20$:	MOVB	(R2)+,(R1)+	; INSERT USER'S NAME.
	SOB	R0,20$
	RETURN
90$:	ADD	#2,(SP)
	RETURN

SETESN:	MOVB	.PNUMB,ESCAPE
	RETURN

SETESC:	MOVB	.PCHAR,ESCAPE
	RETURN

SETPAN:	MOVB	.PNUMB,PAUSE
	RETURN

SETPAU:	MOVB	.PCHAR,PAUSE
	RETURN
	.PSECT	DATA,D
PAUSE:	.BYTE	'X-100
STATUS:	.BYTE	0		; STATUS SWITCHES:
 DET	=	001		;  DETACH TERMINAL
 CLS	=	002		;  CLOSE THE LINK
 ABT	=	004		;  NOTIFY OF LINK ABORT
 PAU	=	010		;  PAUSE THE PROGRAM
 EXT	=	020		;  EXIT THE PROGRAM

ESCAPE:	.BYTE	'Y-100
BELL:	.BYTE	7
TTYBF:	.WORD	0,TTYBF
RECLN:	.WORD	100.
	.PSECT	POOL,D
SERVER:	CONB$$	TOPS20,310,0
IOSTA:	.BLKW	2
MCR:	GMCR$

	.PSECT	POOL,D
NONET:	MESSAGE	<HOS -- NETWORK NOT ACCESSABLE>
SYNTAX:	MESSAGE	<HOS -- COMMAND SYNTAX ERROR>
NONODE:	MESSAGE	<HOS -- TARGET NODE NOT AVAILABLE>
NOSRV:	MESSAGE	<HOS -- TARGET SERVER NOT AVAILABLE>
NETERR:	MESSAGE	<HOS -- NETWORK ERROR ON CONNECT: XXX,XXX>
	.EVEN
	.PSECT	TEXT,D
BYE:	MESSAGE	<HOS -- TARGET SYSTEM HAS DISCONNECTED>

	.PSECT	POOL,D
START:	ALUN$S	#1,#"NS,#0
	ALUN$S	#2,#"NS,#0
	OPNW$S	#1,#1,#IOSTA
	BCS	101$
	TSTB	IOSTA
	BMI	101$
	DIR$	#MCR		; GET MCR COMMAND LINE.
	BCS	10$		; IF ONE IS AVAILABLE
	MOV	#.MCRST,R5	; THEN
	MOV	#G.MCRB+MCR,R4	; PARSE THE COMMAND LINE
	MOVB	$DSW,R3
	MOV	#.MCRKW,R2
	MOV	#3*400+1,R1
	CALL	.TPARS		; IF SYNTAX ERROR
	BCS	102$		; THEN NOTIFY USER.
10$:	DSAR$S
	MOV	#IOSTA,R5
	CONW$S	#2,#1,R5,#RECINI,<#SERVER,#N.RQL>
	BCS	103$
	TSTB	(R5)
	BMI	103$
	JMP	ATTCH

101$:	ERROR	NONET		; NO NETWORK
102$:	ERROR	SYNTAX		; COMMAND SYNTAX ERROR
103$:	CMPB	#IE.NRJ,(R5)
	BNE	104$
	CMPB	#NE$NOD,2(R5)
	BEQ	105$
	CMPB	#NE$UOB,2(R5)
	BEQ	106$
104$:	MOV	#NETERR,R0
	MOVB	(R5),R1
	CALL	BYTE
	MOVB	2(R5),R1
	CALL	BYTE
	ERROR	NETERR		; NETWORK ERROR
105$:	ERROR	NONODE		; NODE NOT AVAILABLE
106$:	ERROR	NOSRV		; SERVER NOT AVAILABLE

BYTE:	CMPB	#'X,(R0)+
	BNE	BYTE
	DEC	R0
	MOV	#20114,R2
1$:	ASLB	R1
	ROLB	R2
	BCC	1$
	MOVB	R2,(R0)+
	CLRB	R2
	BISB	#23,R2
	ASL	R2
	BCC	1$
	RETURN

	.PSECT	CODE,I
GONE:	MOV	#BYE,R0
ERROR:	MOVB	(R0)+,R1
	QIOW$S	#IO.WLB,#3,#3,,,,<R0,R1,#40>
EXIT:	EXIT$S

SPND:	BICB	#PAU,STATUS
	SPND$S
ATTCH:	QIOW$S	#IO.ATA,#3,#3,,,,<#SND>
10$:	TSTB	STATUS
	BEQ	30$
	BITB	#EXT,STATUS
	BNE	EXIT
	BITB	#ABT,STATUS
	BNE	GONE
	BITB	#PAU,STATUS
	BNE	SPND
30$:	CLEF$S	#1
	ENAR$S
	WTSE$S	#1
40$:	DSAR$S
	MOV	TTYBF,R5
	BEQ	10$
	MOV	R5,R4
	MOV	(R4)+,TTYBF
	BNE	50$
	MOV	#TTYBF,TTYBF+2
50$:	ENAR$S
	MOV	(R4)+,R3
	QIO$S	#IO.WAL,#3,,,R5,#60$,<R4,R3,#0>
	BR	40$
60$:	MOV	(SP)+,R0
	MOV	R0,R1
	CMP	(R0)+,(R0)+
	REC$S	#2,,R1,#REC,<R0,RECLN>
	BCS	99$
	ASTX$S
99$:	BPT

SND:	CMPB	ESCAPE,(SP)
	BEQ	70$
	CMPB	PAUSE,(SP)
	BEQ	80$
	MOV	#5,R1
	MOV	#AVAIL,R0
	CALL	$RQCB
	BCS	40$
	MOV	R0,R1
	CMP	(R0)+,(R0)+
	MOVB	(SP),(R0)	; INSERT THE CHARACTER.
	SND$S	#2,,R1,#60$,<R0,#1>
	BCS	BREAK
20$:	TST	(SP)+
	ASTX$S
40$:	QIO$S	#IO.WAL,#3,,,,,<#BELL,#1,#0>
	BR	20$
60$:	MOV	(SP)+,R2
	MOV	#5,R1
	MOV	#AVAIL,R0
	CALL	$RLCB
	ASTX$S
70$:	BISB	#DET!CLS!EXT,STATUS ; CLOSE THE LINK
	BR	90$
80$:	BISB	#DET!PAU,STATUS	; DETACH THE TERMINAL
90$:	TST	(SP)+

ABORT:	BITB	#DET,STATUS
	BEQ	10$
	BICB	#DET,STATUS
	QIOW$S	#IO.DET,#3,#1
10$:	BITB	#CLS,STATUS
	BEQ	70$
	BICB	#CLS,STATUS
	CLS$S	#1,#1
	BCS	BREAK
70$:	ASTX$S
BREAK:	BPT

RECINI:	TSTB	@(SP)+
	BMI	90$
	MOV	#3.,R2		; INITIATE 3 READS
60$:	MOV	#4,R1
	ADD	RECLN,R1
	MOV	#AVAIL,R0
	PUSH	R2
	CALL	$RQCB
	POP	R2
	BCS	90$
	MOV	R0,R1
	CMP	(R0)+,(R0)+
	REC$S	#2,,R1,#REC,<R0,RECLN>
	BCS	BREAK
	SOB	R2,60$
90$:	ASTX$S

REC:	MOV	(SP)+,R0
	TSTB	(R0)
	BMI	40$
	BITB	#PAU,STATUS
	BNE	70$
	CLR	(R0)
	MOV	#TTYBF,R1
	TST	(R1)+
	BNE	10$
	SETF$S	#1
10$:	MOV	R0,@(R1)+
	MOV	R0,-(R1)
	BR	90$
40$:	BISB	#DET!CLS!ABT,STATUS
	BR	ABORT
70$:	MOV	R0,R1
	TST	(R0)+
	MOV	(R0)+,R2
	QIOW$S	#IO.WAL,#3,#1,,R1,,<R0,R2,#0>
	REC$S	#2,,R1,#REC,<R0,RECLN>
90$:	ASTX$S

	.PSECT	POOL,D
POOLNG	=.-POOL

	.END	START