File: VENPIP.PA of Tape: Sources/Focal/s8
(Source file text) 

/COMMUNICATIONS WITH ETH-VENUS
	/W.V.D.MARK        ETH-HPF-B22


	/PARAMETERS NEEDED:

	XR=10
	TEMP=20
	CHAR=21
	INFPTR=22
	INEOF=23
	INBUF=3000	/ADDRESS OF INPUT BUFFER
	INCTL=1420	/INPUT BUFFER CONTROL WORD
	OUBUF=0000	/ADDRESS OF OUTPUT BUFFER
	OUCTL=5420	/OUTPUT BUFFER CONTROL WORD (MUST BE NEGATIVE)
	INRECS=6	/[INCTL/256]
	INDEVH=6600	/ADDRESS OF PAGE FOR INPUT HANDLER
	OUDEVH=7200	/ADDRESS OF PAGE FOR OUTPUT HANDLER
	ORIGIN=2000
	DCB=7760

	/ASSUMES I/O MONITOR IS RESIDENT IN CORE.
	/CAN BE CALLED FROM ANY FIELD WITH BUFFERS IN ANY FIELD.

	DEV=	31^10

	KCF2=6000+DEV
	KSF2=6001+DEV
	KCC2=6002+DEV
	KRS2=6004+DEV
	KIE2=6005+DEV
	KRB2=6006+DEV
	TFL2=6010+DEV
	TSF2=6011+DEV
	TCF2=6012+DEV
	TPC2=6014+DEV
	TSK2=6015+DEV
	TLS2=6016+DEV
	INFLD=INCTL&70	/GET FIELD OF INPUT BUFFER
	OUFLD=OUCTL&70	/DITTO OUTPUT BUFFER

	FIELD 1
	*ORIGIN

IN7400,	7400
INPTR,	0
IOPEN,	0
	CLA CMA
	DCA INCHCT	/SET INCHCT TO FORCE A READ
	ISZ INEOF	/SET END-OF-FILE FLAG TO FORCE A NEW FILE
	TAD (7617
	DCA INFPTR	/RESET FILE POINTER
	TAD I (VENUSI
	SZA CLA
	JMS I (VENIOP
	JMP I IOPEN

ICHAR,	0
IN7600,	7600
	RDF
	TAD INCDIF
	DCA INRTRN	/SAVE CALLING FIELDS
INCHAR,	CDF INFLD
	ISZ INJMP	/BUMP THREE-WAY UNPACK SWITCH
	ISZ INCHCT
INJMPP,	JMP INJMP
	TAD INEOF
	SNA CLA		/DID LAST READ YIELD END-OF-FILE?
	JMP INGBUF	/NO - DO ANOTHER
GETNEW,	JMS INNEWF	/OPEN A NEW INPUT FILE
	JMP EOFERR	/NO FILE TO OPEN
INGBUF,	TAD INCTR
	CLL
	TAD (INRECS
	SNL
	DCA INCTR	/RESTORE INCTR IF IT HASN'T OVERFLOWED
	SZL		/IS THIS THE LAST READ?
	ISZ INEOF	/YES - SET END-OF-FILE FLAG
			/NOT END-OF-FILE IF INPUT DEVICE
			/IS NON-FILE STRUCTURED!
	CLL CML CMA RTR	/CONSTRUCT A CONTROL WORD FOR THE READ
	RTR		/FROM THE AMOUNT OF THE OVERFLOW
	RTR		/(IF ANY) AND THE STANDARD CONTROL WORD
	TAD (INCTL+1
	DCA INCTLW
INCDIF,	CDF CIF 0
	CDF 10
	JMS I INHNDL	/CALL THE DEVICE HANDLER
INCTLW,	0
INBUFP,	INBUF
INREC,	0
	JMP INERRX
INBREC,	TAD INREC
	TAD (INRECS
	DCA INREC	/UPDATE THE RECORD NUMBER
	TAD INCTLW
	AND IN7600
	CLL RAL
	TAD INCTLW
	AND IN7600
	CMA
	DCA INCHCT	/COMPUTE THE NEW CHARACTER COUNT
	TAD INJMPP
	DCA INJMP	/RESET THE CHARACTER SWITCH
	TAD INBUFP
	DCA INPTR	/AND THE WORD POINTER
	JMP INCHAR	/GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED
INERRX,	ISZ INEOF	/EITHER AN END-OF-FILE OR A BADDIE
	SMA CLA		/WHICH TYPE WAS IT?
	JMP INBREC	/END OF FILE - RESUME THY PROCESSING
INERR,	CLA CLL CML RAR	/BADDIE - GIVE ERROR RETURN WITH NEGATIVE AC
EOFERR,	JMP INRTRN
INJMP,	HLT		/THIS IS THE THREE - WAY CHARACTER SWITCH
	JMP ICHAR1
	JMP ICHAR2
ICHAR3,	TAD INJMPP
	DCA INJMP
	TAD I INPTR
IN200,	AND IN7400
	CLL RTR
	RTR		/COMBINE THE HIGH-ORDER FOUR BITS OF
	TAD INCTLW
	RTR		/THE TWO WORD TO FORM THE THIRD CHARACTER
	RTR
	ISZ INPTR
	JMP INCOMN
ICHAR2,	TAD I INPTR
	AND IN7400
	DCA INCTLW	/SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR
	ISZ INPTR	/BUMP THE WORD POINTER
ICHAR1,	TAD I INPTR
INCOMN,	AND (377
	TAD (-232
INCTZF,	SNA		/IS THE CHARACTER A ^Z?
	JMP GETNEW	/YES - GET A NEW FILE
	TAD (232	/RESTORE THE CHARACTER
	ISZ ICHAR	/BUMP RETURN TO NORMAL RETURN
INRTRN,	0		/RESTORE CALLING FIELDS
	JMP I ICHAR	/AND RETURN
			/IOPEN IS UNNECESSARY.
INNEWF,	-1		/ROUTINE TO OPEN NEW INPUT FILE
	INCHCT=INNEWF
	CDF 10
	TAD (INDEVH+1
	DCA INHNDL	/INITIALIZE HANDLER ADDRESS
	TAD I INFPTR	/GET NEXT CD INPUT FILE ENTRY
	SNA		/ANY MORE?
	JMP I INNEWF	/NO - OUT OF INPUT
	JMS I IN200
	1		/ASSIGN, FETCH HANDLER
INHNDL,	0
	HLT		/HUH?
	TAD I INFPTR
	AND (7760	/GET LENGTH PART OF WORD
	SZA		/LENGTH OF 0 MEANS LENGTH >=256
	TAD (17		/ADD HIGH-ORDER BITS
	CLL CML RTR
	RTR
	DCA INCTR	/STORE LENGTH OF FILE
	ISZ INFPTR
	TAD I INFPTR
	DCA INREC	/STORE STARTING RECORD NUMBER OF FILE
	ISZ INFPTR
	DCA INEOF	/ZERO END-OF-FILE FLAG
	ISZ INNEWF
	JMP I INNEWF
	INCTR=IOPEN
	PAGE
OOPEN,	0		/OPEN OUTPUT FILE
OU7600,	7600
	RDF
	TAD OUCDIF
	DCA OORETN
	TAD OU7601
	DCA OUBLK
	TAD (OUDEVH+1
	DCA OUHNDL
	CDF 10
	TAD I OU7600	/GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY
	AND (17		/STRIP OFF ANY LENGTH INFO
	SNA		/IS THERE AN OUTPUT DEVICE?
	JMP I (VENOOP	/NO - INHIBIT OUTPUT
	JMS I (200
	1		/ASSIGN, FETCH HANDLER
OUHNDL,	0		/OUTPUT DEVICE HANDLER ENTRY
	HLT		/HUH?
OUENTR,	TAD I OU7600
	JMS I (200
	3		/ENTER OUTPUT FILE
OUBLK,	7601		/REPLACED WITH STARTING BLOCK
OUELEN,	0		/REPLACED WITH LENGTH OF HOLE
	JMP OEFAIL	/FAILED - MAYBE WE ASKED TOO MUCH
	DCA OUCCNT
	DCA I (OUTINH	/ZERO OUTPUT INHIBIT FLAG
	JMS I (OUSETP
	ISZ OOPEN
OORETN,	CDF CIF 10	/RESTORE CALLING FIELDS
	JMP I OOPEN
OEFAIL,	TAD I OU7600
	AND (7760	/GET REQUESTED LENGTH
	SNA CLA		/WAS IT AN INDEFINITE REQUEST
	JMP ONTERR	/YES - CANNOT ENTER THE FILE
	TAD I OU7600
	AND (17		/MAKE THE REQUESTED LENGTH ZERO
	DCA I OU7600
	JMP OUENTR	/TRY, TRY AGAIN
ONTERR,	CLA CLL CML RAR
	JMP OORETN	/TAKE THE ERROR RETURN WITH AC<0
ONOFIL,	ISZ I (OUTINH
	JMP OORETN	/TAKE THE ERROR RETURN WITH AC=0
OUTDMP,	0
	DCA OUCTLW	/STORE THE CONTROL WORD
	CDF 10
	TAD I (OUTINH
	SZA CLA
	JMP OUNOWR
	TAD OUCCNT
	SNA
	ISZ OUCTLW
	TAD OUBLK
	DCA OUREC	/COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER
	TAD OUCTLW
	CLL RTL
	RTL
	RTL
	AND (17		/COMPUTE THE NUMBER OF RECORDS
	TAD OUCCNT	/UPDATE THE NUMBER OF BLOCKS IN THE FILE
	DCA OUCCNT
	TAD OUCCNT
	CLL CML
	TAD OUELEN
	SNL SZA CLA	/DOES THE LENGTH EXCEED THE GIVEN LENGTH?
	JMP I OUTDMP	/YES - SIGNAL OUTPUT ERROR
OUCDIF,	CDF CIF 0
	CDF 10
	JMS I OUHNDL
OUCTLW,	0
	OUBUF
OUREC,	0
	SKP
OUNOWR,	ISZ OUTDMP	/BUMP OUTDMP TO NORMAL RETURN
	JMP I OUTDMP
OCLOSE,	0
	CDF 10
	TAD I (OUTINH
	SZA CLA		/IS OUTPUT INHIBITED?
	JMP OCISZ	/YES - CLOSE IS A NOP
	TAD I (VENUSO
	SZA CLA
	JMP I (VENCLO
	TAD (232	/OUTPUT A ^Z
	JMS I (OCHAR
	JMP OCRET
	JMS I (OCHAR
	JMP OCRET
FILLLP,	JMS I (OCHAR
	JMP OCRET
	TAD (177	/WHOLE RECORD
	AND I (OUDWCT
	SZA CLA		/UP TO THE BOUNDARY YET?
	JMP FILLLP	/NO - FILL WITH ZEROS
	TAD I (OUDWCT	/GET DOUBLEWORD COUNT LEFT
	TAD (OUCTL&3700
	SNA		/A FULL WRITE LEFT?
	JMP NODUMP	/YES - DON'T DO IT - THE ^Z IS ALREADY OUT
	TAD (4000+OUFLD	/PUT IN THE FIELD BITS AND THE WRITE BIT
	JMS OUTDMP
	JMP OCRET	/AN ERROR OCCURRED WHILE DUMPING THE BUFFER
NODUMP,	TAD I OU7600	/GET THE DEVICE NUMBER
	JMS I (200
	4		/CLOSE THE OUTPUT FILE
OU7601,	7601		/POINTER TO THE OUTPUT FILE NAME
OUCCNT,	0
	SKP		/ERROR WHILE CLOSING THE FILE - BAD!
OCISZ,	ISZ OCLOSE
OCRET,	CDF CIF 10	/RESTORE CALLING FIELDS
	JMP I OCLOSE
	PAGE
OUSETP,	0		/ROUTINE TO INITIALIZE CHARACTER POINTERS
	TAD (OUCTL&3700	/GET SIZE OF BUFFER IN DOUBLEWORDS
	CIA		/PAL10 IS DEFINITELY NOT NICE
	DCA OUDWCT
/	TAD (OUBUF
	IFNZRO OUBUF <ERROR!>	/V3
	DCA OUPTR	/INITIALIZE WORD POINTER
	TAD OUJMPE
	DCA OUJMP	/INITIALIZE THREE-WAY CHARACTER SWITCH
	JMP I OUSETP

OCHAR,	0
	AND (377
	DCA OUTEMP
	RDF
	TAD (CDF CIF 0
	DCA OUCRET
	TAD OUTINH
	SZA CLA		/IS THERE AN OUTPUT FILE?
	JMP OUCOMN	/NO - EXIT
OUCHAR,	CDF OUFLD	/SET DATA FIELD TO BUFFER'S FIELD
	ISZ OUJMP	/BUMP THE CHARACTER SWITCH
OUJMP,	HLT		/THREE WAY CHARACTER SWITCH
	JMP OCHAR1
	JMP OCHAR2
OCHAR3,	TAD OUTEMP
	CLL RTL
	RTL
	AND (7400
	TAD I OUPOLD
	DCA I OUPOLD	/UPDATE FIRST WORD OF TWO WITH HIGH
			/ORDER 4 BITS OF THIRD CHAR
	TAD OUTEMP
	CLL RTR
	RTR
	RAR
	AND (7400
	TAD I OUPTR
	DCA I OUPTR	/UPDATE SECOND WORD FROM LOW ORDER 4 BITS
	TAD OUJMPE
	DCA OUJMP	/RESET SWITCH
	ISZ OUPTR
	ISZ OUDWCT	/BUMP DOUBLEWORD COUNTER EVERY 3 CHARS
	JMP OUCOMN
	TAD (OUCTL	/LOAD CONTROL WORD FOR A FULL WRITE
	JMS I (OUTDMP	/DUMP THE BUFFER
	JMP OUCRET	/OUTPUT ERROR - GIVE ERROR RETURN
	JMS OUSETP	/RE-INITIALIZE THE POINTERS
	JMP OUCOMN
OCHAR2,	TAD OUPTR
	DCA OUPOLD	/SAVE POINTER TO FIRST WORD OF TWO
	ISZ OUPTR	/BUMP WORD POINTER TO SECOND WORD
OCHAR1,	TAD OUTEMP
	DCA I OUPTR
OUCOMN,	ISZ OCHAR
OUCRET,	HLT		/RESTORE CALLING FIELDS
	JMP I OCHAR
OUTEMP,	0
OUPOLD,	0
OUPTR,	0
OUJMPE,	JMP OUJMP
OUDWCT,	0
OUTINH,	0
OTYPE,	0
	RDF
	TAD (CDF CIF 0
	DCA OTRTN
	CDF 10
	TAD I (7600
	AND (17
	TAD (DCB-1
	DCA OUTEMP
	TAD I OUTEMP
OTRTN,	HLT
	JMP I OTYPE

OCHARX,	0
	DCA OTEM
	TAD VENUSO
	SNA CLA
	JMP PDPOUT
	TAD OTEM
	JMS I (VENOUT
	JMP I OCHARX
	JMP ORET
PDPOUT,	TAD OTEM
	JMS I (OCHAR
	SKP
ORET,	ISZ OCHARX
	JMP I OCHARX
OTEM,	0

ICHARX,	0
	TAD VENUSI
	SNA CLA
	JMP PDPIN
	JMS I (VENIN
	JMP I ICHARX
	JMP IRET
PDPIN,	JMS I (ICHAR
	SKP
IRET,	ISZ ICHARX
	JMP I ICHARX

VENUSO,	0
VENUSI,	0

	PAGE
/ASCII PROCESSOR

LFEED,	TAD CHAR
	JMS LINSTR	/PUT THE LINE FEED IN THE LINE BUFFER
EOL,	JMS LINSTR	/MARK THE END OF USEFUL INFO
	TAD (ABUF-1
	DCA XR		/RESET BUFFER POINTER
EOLLP,	CDF 20
	TAD I XR	/GET A CHARACTER FROM THE LINE BUFFER
	CDF 10
PIPSNA,	SNA		/ZERO MEANS NO MORE CHARS
	JMP EOFTST
	JMS I (OCHARX	/OUTPUT THE CHARACTER
	JMP I (AOUERR
	JMP EOLLP
EOFTST,	TAD AEOFFG
	SNA CLA		/END OF INPUT ENCOUNTERED?
	JMP I (ASCIGO	/NO - GET NEXT LINE
ACLOSE,	JMS I (OCLOSE	/YES - CLOSE THE OUTPUT FILE
	SKP
	JMP I (VENANN
AOUERR,	SMA CLA
	JMP BOUERR
PER2,	JMS I (PIPERR
	ERR2
BOUERR,	JMS I (PIPERR
	ERR0

VENCD,	KCC
	TAD ("#
	JMS I (TTYOUT
	TSF
	JMP .-1
	JMS I (200
	5
	2605	/"VE"
	TFL
ASCII,	CLA		/JMS I (ASCI2
	JMS I (OOPEN
	SMA CLA
	JMP .+3
	JMS I (PIPERR
	ERR5
	JMS I (IOPEN	/OPEN THE INPUT FILES
	DCA AEOFFG	/ZERO THE END-OF-FILE FLAG
	JMP I (ASCIGO

	/ENTRY ON END OF INPUT
ASCEOF,	SMA CLA		/WAS IT EOF OR AN INPUT ERROR?
	JMP .+3
PER4,	JMS I (PIPERR
	ERR4
	ISZ AEOFFG	/SET END-OF-INPUT FLAG
	JMP EOL		/PROCESS LAST LINE (IF ANY)
AEOFFG,	0
	PAGE
/ASCII PROCESSOR CONTINUED

ASCIGO,	TAD (ABUF-1
	DCA XR
	DCA COLCT	/ZERO COLUMN COUNTER
ACHLP,	JMS I (ICHARX	/GET A CHARACTER
	JMP I (ASCEOF	/END OF INPUT OR WORSE
	AND (177	/MASK OUT PARITY BIT
	SZA		/IGNORE BLANK TAPE AND LEADER/TRAILER
	TAD (-177
	SNA
	JMP ACHLP	/DITTO RUBOUTS
	TAD (377	/FORCE COLUMN 8 ON
	DCA CHAR
	TAD CHAR
	TAD (-216
	CLL
	TAD ASCI5
	SNL		/IS THE CHARACTER A FORM CONTROL CHARACTER?
	JMP CINSRT	/NO
	TAD ASCJMP	/YES - GO TO APPROPRIATE ROUTINE
	DCA .+1
	HLT
ASCJMP,	JMP I .+1
	TABLP
	LFEED
	CARRET		/LEAVE IT FOR DIABLO
	FFEED
	CARRET
CINSRT,	7600		/GRP 2 CLA
	TAD CHAR
ADCAXR,	JMS LINSTR/STORE THE CHARACTER IN THE LINE BUFFER
	ISZ COLCT	/ALWAYS BUMP THE COLUMN POINTER
TESTXR,	TAD XR
	TAD (-ABUF-300
	SPA CLA		/HAS THE BUFFER OVERFLOWED?
	JMP ACHLP	/NO - GET NEXT CHARACTER
	JMS I (PIPERR
	ERR1
TABLP,	TAD (240
	JMS LINSTR	/OUTPUT A SPACE
	ISZ COLCT
	TAD COLCT
	AND (7
	SZA CLA	/IS THE COLUMN COUNTER A MULTIPLE OF 8?
	JMP TABLP	/NOT YET
	JMP TESTXR	/YES - CHECK BUFFER OVERFLOW
VTLF,	TAD (-5	/FIVE LINE FEEDS SIMULATE A VERTICAL TAB
	DCA TEMP
	TAD (212
	JMS LINSTR
	ISZ TEMP
	JMP .-3
	JMP I (EOL	/FORM FEED AND VERTICAL TAB ARE LINE ENDERS
FFEED,	TAD VENUSO
	SNA CLA
	JMP FFPDP
	JMS I (PRWD
	EOR
	JMS I (PCRLF
	JMP I (EOL
FFPDP,	TAD (214
	JMS LINSTR
	JMP I (EOL

CARRET,	TAD CHAR
	JMS LINSTR	/STORE CARRIAGE RETURN IN THE BUFFER
	JMP TESTXR	/CARRIAGE RETURN IS NO LINE TERMINATOR
COLCT,	0
ASCI5,	5

LINSTR,	0
	CDF 20
	DCA I XR
	CDF 10
	JMP I LINSTR

	PAGE
PIPERR,	0
	SMA SZA
	DCA ERRSWI
	SMA CLA
	JMS CRLF
	TAD I PIPERR	/GET ARG
	DCA TEMP
ERLP,	CDF 20
	TAD I TEMP
	BSW
	JMS ERPCH	/PRINT HIGH-ORDER CHARACTER
	TAD I TEMP
	JMS ERPCH	/PRINT LOW-ORDER CHARACTER
	ISZ TEMP
	JMP ERLP

ERPCH,	0
	AND (77
	SNA
	JMP ERREXI	/0 CHARACTER TERMINATES
	JMS CHPRNT
	JMP I ERPCH
FILENR,	TAD ("#
	JMS TTYOUT
	TAD INFPTR	/GET PTR TO CURRENT INPUT FILE
	TAD (321	/MAGIC NUMBER
	CLL RAR
	JMP FILENR-2

ERREXI,	CDF 10
	TAD ERRSWI
	DCA ERPCH
	DCA ERRSWI
	TAD ERPCH
	SNA CLA
	JMP VENERR
	ISZ PIPERR
	JMP I PIPERR

ERRSWI,	0

CHPRNT,	0
	TAD (-37	/IS IT A _?
	SNA
	JMP FILENR	/YES..PRINT FILE NUMBER
	SPA
	TAD (100
	TAD (237
	JMS TTYOUT
	JMP I CHPRNT

CRLF,	0
	CDF 10
	TAD (215
	JMS TTYOUT
	TAD (212
	JMS TTYOUT
	JMP I CRLF

TTYOUT,	0
	TSF
	JMP .-1
	TLS
	CLA
	JMP I TTYOUT
PCRLF,	0
	TAD (215
	JMS I (OCHARX
	JMP I (AOUERR
	TAD (212
	JMS I (OCHARX
	JMP I (AOUERR
	JMP I PCRLF

PRWD,	0
	CDF 10
	TAD I PRWD
	DCA TEMP
	ISZ PRWD
PRWDLP,	CDF 20
	TAD I TEMP
	BSW
	JMS PR6BIT
	CDF 20
	TAD I TEMP
	JMS PR6BIT
	ISZ TEMP
	JMP PRWDLP

PR6BIT,	0
	CDF 10
	AND (77
	SNA
	JMP I PRWD
	TAD (240
	AND (77
	TAD (240
	JMS I (OCHARX
	JMP I (AOUERR
	JMP I PR6BIT

	PAGE
VENCLO,	JMS I (PRWD
	EOF
	JMS I (PCRLF
	CLA IAC		/WAIT FOR * ONLY
	JMS SYNC
	DCA I (VENUSO
	JMP I (OCISZ

VENOOP,	ISZ I (VENUSO
	JMS I (PRWD
	CTEVE
	JMS I (PCRLF
	JMP I (OORETN-3

VENIOP,	0
	JMP I VENIOP

SYNC,	0
	DCA SYNSWI
	TAD SYNSWI
	SZA CLA
	JMP STAR
	JMS VENIN
	TAD ("?-4000
	JMS SYNECH
	JMP SYNC+2
STAR,	JMS VENIN
	TAD ("?-4000
	TAD (-"*
	SNA CLA
	JMP I SYNC
	JMP SYNC+2
SYNSWI,	0

SYNECH,	0
	TAD (-212
	SNA
	ISZ SYNECH
	TAD (212
	JMS TTYOUT
	JMP I SYNECH

	PAGE
VENIN,	0
	JMS INTERM
	KSF2
	JMP .-2
	KRB2
	SPA
	JMP VHRDWR
	AND (177
	TAD (200
	DCA VENIBU
	TAD VENIBU
	TAD (-"?
	SNA CLA
	JMP VENIER
	TAD VENIBU
	ISZ VENIN
	JMP I VENIN
VENIER,	CLA CLL CML RAR
	JMP I VENIN
VHRDWR,	BSW
	RTR
	AND (7
	DCA VENIBU
	JMS CRLF
	TAD VENIBU
	TAD (260
	JMS TTYOUT
	CMA
	JMS PIPERR
	ERR6

VENIBU,	0

INTERM,	0
	KSF
	JMP I INTERM
	KRB
	AND (177
	TAD (200
	DCA TERIBU
	TAD TERIBU
	TAD (-203	/^C
	SNA
	JMP VENEXT
	TAD (-220+203	/^P
	SNA
	JMP VENANN
	TAD (-233+220	/ESCAPE
	SZA CLA
	JMP I INTERM
	CLA CLL CML RAR
VQUEST,	TAD ("?-4000
	JMS TTYOUT
VENERR,	TAD (233
	JMS VENOUT
	NOP
	JMS SYNC
VENANN,	CDF 10
	CLA
	DCA I (VENUSI
	DCA I (VENUSO
	TAD ("#
	JMS TTYOUT
VENUSL,	DCA TERIBU
	KSF2
	JMP NOVENI
	JMS VENIN
	JMP VQUEST
	JMS TTYOUT
NOVENI,	JMS INTERM
	TAD TERIBU
	SNA
	JMP VENUSL
	TAD (-204	/^D=DECODE
	SNA
	JMP I (VENCD
	TAD	(204-377	/RUBOUT
	SNA CLA
	TAD	("\-377	/ECHO AS '\'
	TAD TERIBU
	JMS TTYOUT
	TAD TERIBU
	JMS VENOUT
	JMP VQUEST
	TAD TERIBU
	TAD (-215
	SZA CLA
	JMP VENUSL
	TAD (212
	JMS TTYOUT
	TAD (212
	JMS VENOUT
	JMP VQUEST
	JMP VENUSL

TERIBU,	0

	PAGE
VENPIP,	CAF
	ISZ TIME
	JMP .-1
	KRB
	KRB2
	CLA CLL CML RTL
	KIE2		/ENABLE ERR,NOT INT.
	CLA
	TAD (230	/CAN
	TLS2
	TLS
	CLA
	ISZ VENUSO
	JMS I (PRWD
	LOGIN
	JMS I (PCRLF
	JMS SYNC
	JMS I (PRWD
	WHOAMI
	JMS I (PCRLF
	JMS SYNC
	DCA VENUSO
	JMP VENANN

TIME,	0

VENEXT,	TAD (233
	JMS VENOUT
	NOP
	JMS SYNC
	DCA VENUSI
	ISZ VENUSO
	JMS PRWD
	BYE
	JMS PCRLF
	JMS VENIN
	TAD ("?-4000
	JMS SYNECH
	JMP .-3
	DCA VENUSO
	TSF
	JMP .-1
	CIF CDF 0
	JMP I (7600

VENOUT,	0
	DCA VENOBU
	JMS INTERM
	KSF2
	JMP .+3
	JMS VENIN
	JMP I VENOUT
	CLA
	TSF2
	JMP .-7
	TAD VENOBU
	AND	(177
	TAD	(TRABUF
	DCA	TRAPNT
	CDF 20
	TAD I	TRAPNT
	TAD	(200
	CDF 10
	TLS2
	CLA
	ISZ VENOUT
	JMP I VENOUT

VENOBU,	0
TRAPNT,	0

	PAGE
	FIELD 2
	*6000

ABUF,	ZBLOCK 300
EOR,	TEXT /.EOR./
EOF,	TEXT /.EOF./
CTEVE,	TEXT /C,,T/
LOGIN,	TEXT /LOGIN,9624,VDMARK,338/
WHOAMI,	TEXT /WHOAMI/
BYE,	TEXT /LOGOUT/

/ERROR MESSAGE TEXT GOES HERE


ERR0,	TEXT	/NO ROOM FOR OUTPUT FILE/
ERR1,	TEXT	/LINE TOO LONG IN FILE_/
ERR2,	TEXT	/OUTPUT ERROR/
ERR3,	TEXT	/ERROR DELETING FILE/
ERR4,	TEXT	/INPUT ERROR, FILE_/
ERR5,	TEXT	/CAN'T OPEN OUTPUT FILE/
ERR6,	TEXT	/ = RECEIVE ERROR;1=OVER;2=FRAME;4=PARITY/
ERR7,	TEXT	/PREMATURE END OF FILE, FILE_/
ERR8,	TEXT	/ILLEGAL BINARY INPUT, FILE_/
ERR9,	TEXT	/XXXXX/
ERR10,	TEXT	/DIRECTORY ERROR/


TRABUF,	0;1;2;3;4;5;6;7
	10;11;12;13;14;15;16;17
	20;21;22;23;24;25;26;27
	30;31;32;33;34;35;36;37
B40,	40;45;100;43;44;42;46;47
	50;51;52;53;54;55;56;57
	60;61;62;63;64;65;66;67
	70;71;72;73;74;75;76;134
B100,	41;101;102;103;104;105;106;107
	110;111;112;113;114;115;116;117
	120;121;122;123;124;125;126;127
	130;131;132;133;134;135;136;137
B140,	140;141;142;143;144;145;146;147
	150;151;152;153;154;155;156;157
	160;161;162;163;164;165;166;167
	170;171;172;173;174;175;176;77

	$$