	.TITLE	WITS
/
/   5 JUN 74 (PDH) ALLOW LOCAL RETRIEVAL & SENDING OF FILES
/  14 MAR 73 - AUTOMATIC SIGN-ON
/   1 MAR 73 - PAUL HENDERSON - FIRST SUCCESS
/
/  PROGRAM TO USE BD50 IN ORDER TO MAKE THE PDP-9 APPEAR AS A
/  BUFFERED TERMINAL TO TALK TO WITS ON THE 360/75.
/
DKI=1
DKO=2
TTI=4
BDI=5
BDO=6
PD=10
AUTO12=12
AUTO13=13
/
	.IODEV	DKI,DKO,TTI,BDI,BDO,PD
/
	.GLOBL	FILENM
/
WITS	.INIT	TTI,0,SIGNON
	.INIT	BDI,0,WITS	/INITIALIZE ALL DEVICES
	.INIT	BDO,1,WITS
	.INIT	PD,1,WITS
/
	.WRITE	PD,2,INITAL,0	/TELL USER WHO WE ARE
	.READ	BDI,3,IMAGE,3	/BEGIN INPUT FROM 360/75
ICMD	.READ	TTI,2,LINE,34	/ALSO BEGIN COMMAND INPUT
MAIN	JMS	BDREAD
	NOP
	JMS	TTREAD		/MAIN LOOP JUST CIRCULATES
	NOP
	JMP	MAIN
/
SIGNON	.WRITE	PD,2,AUTO,0     /ANNOUNCE WE ARE IN AUTOMATIC SIGNON
	DZM	BDCHAR		/CLEAR CHARACTER READ, IN CASE OF 'DC3'
SENDCR	.WRITE	BDO,2,CR,0      /SEND CR TO 360/75
	JMS	BDREAD
	NOP
WAIT1	JMS	BDREAD
	JMP	WAIT1
	SAD	(23		/END OF OUTPUT?
	SKP
	JMP	WAIT1		/NO.  READ NEXT CHARACTER
	.WRITE	PD,2,PASSWD,0   /DISPLAY HASP ACCOUNT NUMBER
	.WRITE	BDO,2,PASSWD,0  /LOG IN
/
WAIT2	JMS	BDREAD
	JMP	WAIT2
	SAD	(23
	SKP
	JMP	WAIT2
	.WRITE	PD,2,PAGE,0     /SET UP PAGE SIZE & READY ID FOR
	.WRITE	BDO,2,PAGE,0    /THE PDP-9
/
WAIT3	JMS	BDREAD
	JMP	WAIT3
	SAD	(23
	SKP
	JMP	WAIT3
	.WRITE	PD,2,TABS,0
	.WRITE	BDO,2,TABS,0
	JMP	ICMD
	.EJECT
/
/  SUBROUTINE TO READ SINGLE CHARACTER FROM 360/75, DISPLAY IT
/  ON THE DISPLAY, AND PERFORM SPECIAL FUNCTION WHEN
/  DC3 <23> IS ENCOUNTERED.
/
/  CALLING SEQUENCE:
/
/	JMS	BDREAD
/	(RETURN IF INPUT NOT COMPLETE)
/	(RETURN WITH CHARACTER JUST READ IN AC)
/
BDREAD	XX
	.WAITR	BDI,BDBUSY      /HAS CHARACTER BEEN RECEIVED?
	LAC	IMAGE+2
	AND	(177		/GET CHARACTER & TRIM TO 7-BITS
	SAD	(177
	JMP	READB		/IGNORE DELETE
	SNA
	JMP	READB		/IGNORE NULL CHARACTERS
	DAC	BDCHAR		/SAVE CHARACTER
	ISZ	BDREAD		/INCREMENT RETURN ADDRESS
	SAD	(23		/ DC3 ?
	JMP	DC3
	ALSS	13		/LEFT JUSTIFY CHARACTER
	XOR	(175*20         /ALT MODE IN 2ND CHARACTER
BDWRT	DAC	PDLINE+2
	.WRITE	PD,2,PDLINE,0   /DISPLAY CHARACTER
READB	.READ	BDI,3,IMAGE,3   /READ NEXT CHARACTER
BDBUSY	LAC	BDCHAR		/LEAVE WITH CHARACTER IN AC
	JMP*	BDREAD
/
DC3	LAC	(23*200+10*20+17	/  <23><10><175>
	JMP	BDWRT
	.EJECT
/  SUBROUTINE TO READ A COMPLETE LINE IN IOPS ASCII FROM THE
/  CONTROL TELETYPE, DISPLAY IT ON THE 340C, AND SEND IT
/  TO THE 360/75.  IF THE FIRST CHARACTER IN THE LINE IS
/  ALT MODE, IT IS INTERPRETED AS A REQUEST FOR 'ATTENTION',
/  AND THE APPROPRIATE SEQUENCE IS INITATED.
/
/  CALLING SEQUENCE:
/
/	JMS	TTREAD
/	(RETURN IF INPUT NOT COMPLETE)
/	(RETURN WHEN INPUT COMPLETE)
/
TTREAD	XX
	.WAITR	TTI,TTBUSY
	774000
	AND	LINE+2
	SAD	ALT		/IF 1ST CHARACTER IS ALTMODE,
	JMP	ATTN		/PRESENT ATTENTION
	LAW	-42
	DAC	MOVCNT		/WE WILL MOVE LINE TO OUTPUT BUFFER
	LAC	(LINE-1
	DAC*	(AUTO12
	LAC	(BDLINE-1
	DAC*	(AUTO13
	LAC*	AUTO12
	DAC*	AUTO13		/MOVE LINE
	ISZ	MOVCNT
	JMP	.-3
	ISZ	TTREAD		/INCREMENT RETURN ADDRESS
	.WRITE	PD,2,BDLINE,0   /DISPLAY LINE
	LAW	774000
	AND	BDLINE+2	/ GET 1ST CHARACTER
	SAD	LPAREN		/ IS IT  '(' ?
	JMP	COMAND		/ YES.  FIND OUT WHAT COMMAND IT IS.
	.WRITE	BDO,2,BDLINE,0  /SEND LINE TO 360/75
READT	.READ	TTI,2,LINE,34   /READ NEXT COMMAND LINE
TTBUSY	JMP*	TTREAD
	.EJECT
ATTN	.WRITE	PD,2,ATTEN,0    /SHOW THAT WE ARE PRESENTING ATTENTION
	.WRITE	BDO,3,NULLS,0   /SEND ATTENTION CODE TO 360/75
	JMP	READT
/
ATTEN	AT-.*400+2
	0
	.ASCII	'*** ATTENTION ***'<15>
AT=.
/
NULLS	2003; 0; 0; 0
	.EJECT
COMAND	LAC	BDLINE+2	/ VALIDATE COMMAND
	SAD	.PUT
	JMP	PUT		/ COMMAND WOULD APPEAR TO BE 'PUT'
	SAD	.GET
	JMP	GET		/ PERHAPS 'GET'
/
/  SPACE FOR FUTURE COMMANDS
/
INVALC	.WRITE	PD,2,NOCMD,0	/ '**INVALID  LOCAL COMMAND'
	JMP	READT		/ RE-ENTER NORMAL SEQUENCE
/
PUT	LAC	BDLINE+3	/ VALIDATE LAST HALF OF COMMAND
	SAD	.PUT+1
	SKP
	JMP	INVALC		/ INVALID LOCAL COMMAND
	JMS*	FILENM
	BDLINE+4
	NAME
	LAC	NAME+2
	SNA
	LAC	SRC		/ DEFAULT EXTENSION IS 'SRC'
	DAC	NAME+2
/
	.INIT	DKI,0,SIGNON
	.FSTAT	DKI,NAME	/ DOES FILE EXIST?
	SNA
	JMP	NOFILE		/ NO.  COMPLAIN ABOUT IT.
	.SEEK	DKI,NAME	/ OPEN REQUESTED FILE
/
WAITP1	JMS	BDREAD		/ FIND OUT IF WE CAN SEND
	NOP
	SAD	(23		/ IS IT 'PROCEED' CHARACTER?
	SKP
	JMP	WAITP1		/ NO.  WAIT LONGER.
	.WRITE	BDO,2,AUETC,0	/ 'AU ETC'
	LAC	(LINE1
	DAC	M01
	DAC	M02		/ SET UP BUFFER ADDRESSES
	DAC	M03
	LAC	(LINE2
	DAC	M04
READ1	.READ	DKI,2,LINE1,34	/ READ FIRST LINE OF FILE.
M02=READ1+2
	.READ	TTI,2,LINE,34	/ READ NEXT COMMAND LINE
/
WAITP2	JMS	BDREAD		/ MUST WAIT UNTIL 360/75 READY
	JMP	WAITP2
	SAD	(23
	JMP	WAITIN
	.WAITR	TTI,WAITP2
	LAW	774000
	AND	LINE+2		/ CHECK 1ST CHARACTER
	SAD	ALT		/ IS IT PSEUDO 'ATTENTION' ?
	JMP	READT		/ END 'PUT' ON 'ATTENTION'.
	JMP	WAITP2
WAITIN	.WAIT	DKI		/ WAIT FOR INPUT
	LAC*	M03
	AND	(7
	SAD	(5		/ EOF?
	SKP
	SAD	(6		/ EOM?
	JMP	INPEND		/ END OF INPUT
READ2	.READ	DKI,2,LINE2,34	/ READ NEXT LINE
M04=READ2+2
WRITE1	.WRITE	PD,2,LINE1,0	/ PUT LINE ON DISPLAY
M01=WRITE1+2
WRITE2	.WRITE	BDO,2,LINE1,0	/ SEND LINE TO 360
M03=WRITE2+2
	LAC	M04
	DAC	M02		/ SWAP M04 & M03
	LAC	M03
	DAC	M04
	LAC	M02
	DAC	M01
	DAC	M03
	JMP	WAITP2
/
INPEND	.CLOSE	DKI
	.WRITE	PD,2,ENDAU,0	/ "** END OF 'PUT'"
	.WRITE	BDO,2,CR,0	/ CARRIAGE RETURN TO GET OUT OF 'AUTOLINE'
	JMP	READT
/
NOFILE	.WRITE	PD,2,NOFIL,0	/ 'FILE NOT FOUND'
	JMP	READT		/RE-ENTER MAIN LOOP
/
AUETC	AU-.*400+2; 0; .ASCII 'AU ETC'<15> ;AU=.
ENDAU	EA-.*400+2; 0; .ASCII "** END OF 'PUT'"<15> ;EA=.
NOCMD	NC-.*400+2; 0; .ASCII '** INVALID LOCAL COMMAND'<15> ;NC=.
NOFIL	NF-.*400+2; 0; .ASCII '** FILE NOT FOUND'<15> ;NF=.
/
/
/
/
GET	JMP	INVALC		/ RESERVED FOR COMMAND 'GET'
/
/
/
LINE1	.BLOCK	42; .ASCII <15>
LINE2	.BLOCK	42; .ASCII <15>
	.EJECT
CR	C-.*400+2
BDCHAR
	.ASCII	<15>
C=.
/
ALT	.ASCII	<175> ; .LOC .-1
LPAREN	.ASCII	'('   ; .LOC .-1
.PUT	.ASCII	'(PUT '
.GET	.ASCII	'(GET '
NAME	.BLOCK	3
SRC	.SIXBT	'SRC'
/
PASSWD	PW-.*400+2
	0
	.ASCII	'T0657ENGC,PDP9'<15>
PW=.
/
PAGE	PA-.*400+2
	0
	.ASCII	'PAGE SCREEN=VC;PAGE-FEEDBACK-NOPROMPT LENGTH=22;'
	.ASCII	'CONTROL RID=NONE;STATUS;USERS;TABSET'<15>
PA=.
/
TABS	TA-.*400+2
	0
	.ASCII	<11>'T'<11>'T'<11>'T'<11>'T'<11>'T'
	.ASCII	<11>'T'<11>'T'<11>'T'<11>'T'<15>
TA=.
/
IMAGE	.BLOCK	3
PDLINE	2002; 0; 0; 500000	/LAST WORD CONTAINS 2ND HALF OF <175>
BDLINE	.BLOCK	42
LINE	.BLOCK	42
/
INITAL	IL-.*400+2
MOVCNT
	.ASCII	<13>'PDP-9 BUFFERED WITS TERMINAL.  '
	.ASCII	'WAIT FOR 360/75'<15>
IL=.
/
AUTO	AU-.*400+2
	0
	.ASCII	'*** AUTOMATIC INITIALIZATION ***'<15>
AU=.
/
	.END	WITS
