Google
 

Trailing-Edge - PDP-10 Archives - BB-W661A-BM_1983 - tools/svcxmi.mac
There is 1 other file named svcxmi.mac in the archive. Click here to see a list.
	SALL
	TITLE	SVCXMI	Communication Master Program
	SEARCH	MONSYM,MACSYM,X25SYM

; Copyright (c) 1982, 1983 by
; DIGITAL EQUIPMENT CORPORATION, Maynard, Massachusetts 01754
;
; This software is furnished under a license and may be used and  copied
; only  in  accordance  with  the  terms  of  such  license and with the
; inclusion of the above copyright notice.  This software or  any  other
; copies  thereof may not be provided or otherwise made available to any
; other person.  No title to and ownership of  the  software  is  hereby
; transferred.
;
; The information in this software is subject to change  without  notice
; and  should  not  be  construed  as  a commitment by Digital Equipment
; Corporation.
;
; Digital assumes no responsibility for the use or  reliability  of  its
; software on equipment which is not supplied by Digital.

; Accumulators

S1=1					;Scratch ACs
S2=2
S3=3
S4=4
T1=5					;Temporary ACs
T2=6
SP=17

; Push Down Stack

SIZE=^D256
STACK:	BLOCK	SIZE

; X.25 Access Argument Blocks

WSPSIZ=<^D128/4>+.PBSIZ
WSPACE:	BLOCK	WSPSIZ			;Working area for the X.25 library
ARGBLK:	BLOCK	^D10			;Argument block
BUFFER:	BLOCK	^D32			;Transmitted data buffer
STATE:	BLOCK	1			;Port state
PROMPT:	ASCIZ	/> /
HELP:	ASCIZ	/Enter text:
/

; Interrupt System Storage Definitions

CH.X25=0				;Interrupt channel number
SAVEPC:	BLOCK	1			;Location for saved PC
LEVTAB:	SAVEPC				;Interrupt level table
	REPEAT	2,<0>
CHNTAB:	1,,SRVCKT			;Interrupt handler entry
	REPEAT	^D35,<0>		;Unused channels have 0

START:	RESET				;Reset the world
	MOVE	SP,[IOWD SIZE,STACK]	;Set up push down stack
	MOVEI	S1,.FHSLF		;Current process
	MOVE	S2,[LEVTAB,,CHNTAB]	;Interrupt table
	SIR
	EIR				;Enable system
	MOVE	S2,[1B<CH.X25>]		;Activate channel
	AIC
	MOVEI	T1,XS%UND
	MOVEM	T1,STATE		;Set port state to UNDEFINED
	SETZM	ARGBLK			;Initialize entire argument block area
	MOVE	T1,[ARGBLK,,ARGBLK+1]
	BLT	T1,ARGBLK+^D9
	MOVE	T1,[CH.X25,,WSPACE]
	MOVEM	T1,ARGBLK		;Interrupt channel and work area
	MOVE	T1,[POINT 7,[ASCIZ/TELENET/]]
	MOVEM	T1,ARGBLK+2		;Network name
	MOVE	T1,[POINT 7,[ASCIZ/X25-GATE/]]
	MOVEM	T1,ARGBLK+3		;Access password
	MOVE	T1,[POINT 7,[ASCIZ/311030300012/]]
	MOVEM	T1,ARGBLK+4		;Destination DTE address
	MOVEI	S1,ARGBLK
	CALL	X%ISC##
	MOVE	T1,ARGBLK+1		;Get return code
	CAIE	T1,XC%SUC		;Is it successful ?
	HALTF				;No, terminate
	MOVEI	T1,XS%CAG		;Yes,
	MOVEM	T1,STATE		;Change port state to CALLING
	WAIT				;Dismiss the process

SRVCKT:	SETZM	ARGBLK+1		;Initialize argument block entries
	MOVE	T1,[ARGBLK+1,,ARGBLK+2]
	BLT	T1,ARGBLK+^D9
	MOVEI	S1,ARGBLK		;Pass access argument block
	CALL	X%RPS##			;Check port state
	MOVE	T1,ARGBLK+1		;Get return code
	CAIE	T1,XC%SUC		;Is it successful ?
	 JRST	X25TPA			;No, terminate
	MOVE	T1,STATE		;Get old port state
	HRRZ	T2,ARGBLK+2		;Get new port state
	CAIN	T1,XS%CAG		;From CALLING state
	 JRST	[CAIN	T2,XS%CAG	;Remain in CALLING state
		  JRST	SRVCKT		;Check the port state again
		 CAIN	T2,XS%RUN	;Changed to RUNNING state
		  JRST	X25SDM		;Transmit data to the network
		 JRST	X25TPA]		;Otherwise, terminate
	CAIN	T1,XS%RUN		;From RUNNING state
	 JRST	[CAIN	T2,XS%RUN	;Remain in RUNNING state
		 DEBRK			;Do nothing
		 JRST	X25TPA]		;Otherwise, terminate
	JRST	X25TPA			;Don't want to handle other states

X25SDM:	MOVEI	T1,XS%RUN
	MOVEM	T1,STATE		;Update port state to RUNNING
	HRROI	S1,HELP
	PSOUT

SDM.1:	HRROI	S1,PROMPT
	PSOUT
	HRROI	S1,BUFFER		;Receiving buffer
	MOVEI	S2,^D128		;Maximum length
	HRROI	S3,PROMPT		;Prompt text
	RDTTY
	 JRST	X25TPA			;Failed, terminate virtual circuit
	HRRZ	T2,S2			;Get remaining length
	CAIN	T2,^D126		;Is it empty string (only <cr><lf>) ?
	 JRST	X25TPA			;Yes, that's it
	SETZM	ARGBLK+1		;Initialize argument block entries
	MOVE	T1,[ARGBLK+1,,ARGBLK+2]
	BLT	T1,ARGBLK+^D9
	MOVEI	T1,^D128		;Get the actual length of the string
	SUB	T1,T2
	MOVEM	T1,ARGBLK+2
	HRROI	T1,BUFFER
	MOVEM	T1,ARGBLK+3		;Get pointer to the text string
	MOVEI	S1,ARGBLK
	CALL	X%SDM##			;Send the string to the network
	MOVE	T1,ARGBLK+1		;Get the return code
	CAIE	T1,XC%SUC		;Is it successful ?
	 JRST	[TXNN	T1,XC%PER	;No, then is it procedure error ?
		  JRST	SDM.1		;No, it is non-fatal error
		 JRST	X25TPA]		;Yes, terminate
	JRST	SDM.1			;Get next string from terminal

X25TPA:	MOVEI	S1,ARGBLK		;Terminate port access
	CALL	X%TPA##
	HALTF				;Stop program
	END	START			;End Of Program
; Local Modes:
; Mode:MACRO
; Auto Save Mode:2
; Comment Column:40
; Comment Rounding:+1
; End: