Google
 

Trailing-Edge - PDP-10 Archives - BB-R598A-RM_1983 - swskit-v3/listings/vnp36/vfio10.list
There are no other files named vfio10.list in the archive.
	Scott G. Robinson, 3-DEC-79 : Ve
								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   1
								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (1)

;	  0001	!<REL4A.TKB-VNP>FIO10.BLI.5,  3-Dec-79 14:28:00, Edit by SROBINSON
;	  0002	MODULE FIO10 (					! FILE I/O
;	  0003			IDENT = 'X2.0-1'
;	  0004			) =
;	  0005	BEGIN
;	  0006	!
;	  0007	!
;	  0008	!
;	  0009	!                    COPYRIGHT (c) 1980, 1981, 1982
;	  0010	!                    DIGITAL EQUIPMENT CORPORATION
;	  0011	!                        Maynard, Massachusetts
;	  0012	!
;	  0013	!     This software is furnished under a license and may  be  used
;	  0014	!     and copied only in accordance with the terms of such license
;	  0015	!     and with the inclusion of the above copyright notice.   This
;	  0016	!     software  or any other copies thereof may not be provided or
;	  0017	!     otherwise made available to any other person.  No  title  to
;	  0018	!     and ownership of the software is hereby transferred.
;	  0019	!
;	  0020	!     The information  in  this  software  is  subject  to  change
;	  0021	!     without  notice  and should not be construed as a commitment
;	  0022	!     by DIGITAL EQUIPMENT CORPORATION.
;	  0023	!
;	  0024	!     DIGITAL assumes no responsibility for the use or reliability
;	  0025	!     of  its  software  on  equipment  which  is  not supplied by
;	  0026	!     DIGITAL.
;	  0027	!
;	  0028	
;	  0029	!++
;	  0030	! FACILITY: TKB-20 AND VNP-20
;	  0031	!
;	  0032	! ABSTRACT:
;	  0033	!
;	  0034	!
;	  0035	! THIS MODULE DOES FILE I/O FOR THE TASK BUILDER.
;	  0036	!
;	  0037	! THE CALLS ARE: OPEN, CLOSE, INPUT AND OUTPUT.
;	  0038	!  ALL TAKE A 'CHANNEL' ARGUMENT.  CHANNEL NUMBERS ARE BETWEEN
;	  0039	!   0 AND 15.  CHANNEL 0 IS ALWAYS OPEN TO THE TERMINAL.
;	  0040	!
;	  0041	!
;	  0042	! ENVIRONMENT: TOPS-10 USER MODE
;	  0043	!
;	  0044	! AUTHOR: J. SAUTER, CREATION DATE: 14-DEC-77
;	  0045	!
;	  0046	! MODIFIED BY:
;	  0047	!
;	  0048	!	Scott G. Robinson, 15-NOV-78 : VERSION X0.1-2A
;	  0049	!	- Add %C' ' to the break set for file names
;	  0050	!
;	  0051	!	Scott G. Robinson, 28-NOV-78 : VERSION X0.2
;	  0052	!	- Make this module FIO10 because it is for a
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   2
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (1)

;	  0053	!	  TOPS-10 I/O Scheme
;	  0054	!
;	  0055	!	Scott G. Robinson, 13-JUN-79 : VERSION X0.3
;	  0056	!	- Add routine STOP_PROGRAM
;	  0057	!-----------------------------------------------------------------------
;	  0058	!
;	  0059	!	Scott G. Robinson, 3-DEC-79 : Version X2.0
;	  0060	!	- Ensure DECnet-10 Compatibility
;	  0061	!
;	  0062	!	Scott G. Robinson, 15-JUL-80 : Version X2.0-1
;	  0063	!	- Add Terminal Output Logging
;	  0064	!
;	  0065	!	, : VERSION
;	  0066	! 01	-
;	  0067	!--
;	  0068	
;	  0069	!<BLF/PAGE>
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   3
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (2)

;	  0070	!
;	  0071	! TABLE OF CONTENTS:
;	  0072	!
;	  0073	
;	  0074	FORWARD ROUTINE
;	  0075	    RESET_ALL : NOVALUE,			!RESET ALL I/O
;	  0076	    SIXBIT,					!TRANSLATE ASCII TO SIXBIT
;	  0077	    OPEN,					!OPEN A FILE (GLOBAL)
;	  0078	    CLOSE : NOVALUE,				!CLOSE A FILE (GLOBAL)
;	  0079	    INPUT,					!READ FROM A FILE (GLOBAL)
;	  0080	    OUTPUT : NOVALUE,				!WRITE ON A FILE (GLOBAL)
;	  0081	    STOP_PROGRAM : NOVALUE;			!TERMINATE PROGRAM
;	  0082	
;	  0083	!
;	  0084	! INCLUDE FILES:
;	  0085	!
;	  0086	!	NONE
;	  0087	!
;	  0088	! MACROS:
;	  0089	!
;	  0090	!	NONE
;	  0091	!
;	  0092	! EQUATED SYMBOLS:
;	  0093	!
;	  0094	
;	  0095	LITERAL
;	  0096	    DEBUG = 0;
;	  0097	
;	  0098	!
;	  0099	! OWN STORAGE:
;	  0100	!
;	  0101	
;	  0102	OWN
;	  0103	    CHAN_STATUS : VECTOR [16],
;	  0104	    CHAN_HEADER : VECTOR [16],
;	  0105	    CHAN_BUFFER : VECTOR [16],
;	  0106	    CHAN_WORD : VECTOR [16],
;	  0107	    CHAN_CTR : VECTOR [16],
;	  0108	    CHAN_DIRECTION : VECTOR [16];
;	  0109	
;	  0110	LITERAL
;	  0111	    FILE_NAME_LEN = CH$ALLOCATION (40);
;	  0112	
;	  0113	OWN
;	  0114	    CHAN_FNAME : VECTOR [16*FILE_NAME_LEN];
;	  0115	
;	  0116	!
;	  0117	! EXTERNAL REFERENCES:
;	  0118	!
;	  0119	
;	  0120	EXTERNAL ROUTINE
;	  0121	    ERROR,					!PROGRAMMING ERROR
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   4
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (2)

;	  0122	    ERRMSG,					!ERROR MESSAGE PRINTER
;	  0123	    GETSTG,					!GET STORAGE FROM FREE LIST
;	  0124	    FRESTG;					!RETURN STORAGE TO FREE LIST
;	  0125	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   5
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (3)

;	  0126	GLOBAL ROUTINE RESET_ALL : NOVALUE = 		!RESET ALL I/O
;	  0127	
;	  0128	!++
;	  0129	! FUNCTIONAL DESCRIPTION:
;	  0130	!
;	  0131	!
;	  0132	!	ROUTINE TO RESET ALL I/O.  IT DOES THIS BY ISSUEING THE
;	  0133	!	 TOPS-10 "RESET" UUO.
;	  0134	!
;	  0135	!
;	  0136	! FORMAL PARAMETERS:
;	  0137	!
;	  0138	!	NONE
;	  0139	!
;	  0140	! IMPLICIT INPUTS:
;	  0141	!
;	  0142	!	NONE
;	  0143	!
;	  0144	! IMPLICIT OUTPUTS:
;	  0145	!
;	  0146	!	NONE
;	  0147	!
;	  0148	! ROUTINE VALUE:
;	  0149	!
;	  0150	!	NONE
;	  0151	!
;	  0152	! SIDE EFFECTS
;	  0153	!
;	  0154	!	RESETS ALL I/O
;	  0155	!
;	  0156	!--
;	  0157	
;	  0158	    BEGIN
;	  0159	
;	  0160	    BUILTIN
;	  0161		UUO;
;	  0162	
;	  0163	    UUO (0, %O'047', 0, 0);
;	  0164	    END;					!OF RESET_ALL


	TITLE	FIO10
	TWOSEG


	.REQUEST  SYS:B361LB.REL


	RELOC	0				;					000000'
CHAN_STATUS:
	BLOCK	20				;					000000'
CHAN_HEADER:
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   6
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (3)

	BLOCK	20				;					000020'
CHAN_BUFFER:
	BLOCK	20				;					000040'
CHAN_WORD:
	BLOCK	20				;					000060'
CHAN_CTR:
	BLOCK	20				;					000100'
CHAN_DIRECTION:
	BLOCK	20				;					000120'
CHAN_FNAME:
	BLOCK	200				;					000140'


	EXTERN	ERROR, ERRMSG, GETSTG, FRESTG


AC0=	0
AC1=	1
AC2=	2
AC3=	3
AC4=	4
AC5=	5
AC6=	6
AC7=	7
AC10=	10
AC11=	11
AC12=	12
AC13=	13
AC14=	14
FP=	15
AC16=	16
SP=	17


	RELOC	400000				;					400000'
RESET_ALL::
	CALLI	0,0				; 0,0					400000' 047 00 0 00 000000		0163
	POPJ	SP,				; SP,					400001' 263 17 0 00 000000		0126

; Routine Size:  2 words


;	  0165	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   7
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (4)

;	  0166	ROUTINE SIXBIT (ASCII_PTR) = 			!ASCII TO SIXBIT
;	  0167	
;	  0168	!++
;	  0169	! FUNCTIONAL DESCRIPTION:
;	  0170	!
;	  0171	!
;	  0172	!	ROUTINE TO CONVERT UP TO SIX CHARACTERS OF ASCII STRING TO
;	  0173	!	 SIXBIT.
;	  0174	!
;	  0175	!
;	  0176	! FORMAL PARAMETERS:
;	  0177	!
;	  0178	!	ASCII_PTR - POINTER TO ASCII STRING
;	  0179	!
;	  0180	! IMPLICIT INPUTS:
;	  0181	!
;	  0182	!	NONE
;	  0183	!
;	  0184	! IMPLICIT OUTPUTS:
;	  0185	!
;	  0186	!	NONE
;	  0187	!
;	  0188	! ROUTINE VALUE:
;	  0189	!
;	  0190	!	THE VALUE OF THE STRING, IN SIXBIT.
;	  0191	!
;	  0192	! SIDE EFFECTS
;	  0193	!
;	  0194	!	NONE
;	  0195	!
;	  0196	!--
;	  0197	
;	  0198	    BEGIN
;	  0199	
;	  0200	    LOCAL
;	  0201		OUTPTR,
;	  0202		INPTR,
;	  0203		CHAR,
;	  0204		CHAR_CTR,
;	  0205		RESULT;
;	  0206	
;	  0207	!
;	  0208	    RESULT = 0;
;	  0209	    OUTPTR = CH$PTR (RESULT, -1, 6);
;	  0210	    INPTR = CH$PTR (.ASCII_PTR, -1, 7);
;	  0211	    CHAR = 0;
;	  0212	    CHAR_CTR = 0;
;	  0213	!
;	  0214	
;	  0215	    DO
;	  0216		BEGIN
;	  0217		CHAR = CH$A_RCHAR (INPTR);
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   8
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (4)

;	  0218	
;	  0219		IF ((.CHAR GEQ %C' ') AND (.CHAR LEQ %C'_')) THEN CH$A_WCHAR (.CHAR - %O'40', OUTPTR);
;	  0220	
;	  0221		CHAR_CTR = .CHAR_CTR + 1;
;	  0222		END
;	  0223	    UNTIL ((.CHAR EQL 0) OR (.CHAR_CTR GEQ 6));
;	  0224	
;	  0225	    .RESULT
;	  0226	    END;


SIXBIT: PUSH	SP,AC0				; SP,AC0				400002' 261 17 0 00 000000		0166
	ADJSP	SP,1				; SP,1					400003' 105 17 0 00 000001
	SETZM	0(SP)				; RESULT				400004' 402 00 0 17 000000		0208
	MOVEI	AC1,-1(SP)			; AC1,RESULT-1				400005' 201 01 0 17 777777		0209
	HRLI	AC1,60600			; AC1,60600				400006' 505 01 0 00 060600
	MOVE	AC5,AC1				; OUTPTR,AC1				400007' 200 05 0 00 000001
	MOVE	AC1,-3(SP)			; AC1,ASCII_PTR				400010' 200 01 0 17 777775		0210
	MOVEI	AC1,-1(AC1)			; AC1,-1(AC1)				400011' 201 01 0 01 777777
	HRLI	AC1,100700			; AC1,100700				400012' 505 01 0 00 100700
	SETZB	AC2,AC3				; CHAR,CHAR_CTR				400013' 403 02 0 00 000003		0211
L.1:	IBP	AC1				; INPTR					400014' 133 00 0 00 000001		0217
	MOVE	AC2,AC1				; CHAR,INPTR				400015' 200 02 0 00 000001
	ILDB	AC2,AC2				; CHAR,CHAR				400016' 134 02 0 00 000002
	CAIL	AC2,40				; CHAR,40				400017' 301 02 0 00 000040		0219
	CAILE	AC2,137				; CHAR,137				400020' 303 02 0 00 000137
	JRST	L.2				; L.2					400021' 254 00 0 00 400027'
	MOVE	AC4,AC2				; AC4,CHAR				400022' 200 04 0 00 000002
	SUBI	AC4,40				; AC4,40				400023' 275 04 0 00 000040
	IBP	AC5				; OUTPTR				400024' 133 00 0 00 000005
	MOVE	AC0,AC5				; AC0,OUTPTR				400025' 200 00 0 00 000005
	IDPB	AC4,AC0				; AC4,AC0				400026' 136 04 0 00 000000
L.2:	ADDI	AC3,1				; CHAR_CTR,1				400027' 271 03 0 00 000001		0221
	JUMPE	AC2,L.3				; CHAR,L.3				400030' 322 02 0 00 400033'		0223
	CAIGE	AC3,6				; CHAR_CTR,6				400031' 305 03 0 00 000006
	JRST	L.1				; L.1					400032' 254 00 0 00 400014'		0215
L.3:	MOVE	AC1,0(SP)			; AC1,RESULT				400033' 200 01 0 17 000000		0166
	ADJSP	SP,-1				; SP,-1					400034' 105 17 0 00 777777
	POP	SP,AC0				; SP,AC0				400035' 262 17 0 00 000000
	POPJ	SP,				; SP,					400036' 263 17 0 00 000000

; Routine Size:  29 words


;	  0227	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page   9
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

;	  0228	GLOBAL ROUTINE OPEN (CHANX, FNAME, MODE, IO, DEFEXT) : = 	!OPEN A FILE
;	  0229	
;	  0230	!++
;	  0231	! FUNCTIONAL DESCRIPTION:
;	  0232	!
;	  0233	!
;	  0234	!
;	  0235	!	OPEN A FILE.
;	  0236	!
;	  0237	!
;	  0238	! FORMAL PARAMETERS:
;	  0239	!
;	  0240	!	CHANX - THE CHANNEL NUMBER TO OPEN.
;	  0241	!	FNAME - POINTER TO FILE NAME STRING.
;	  0242	!	MODE - I/O MODE: 1 = CHARACTER, 2 = WORD.
;	  0243	!	IO - 0 = INPUT, 1 = OUTPUT.
;	  0244	!	DEFEXT - POINTER TO DEFAULT EXTENSION (3 CHARS)
;	  0245	!
;	  0246	! IMPLICIT INPUTS:
;	  0247	!
;	  0248	!	NONE
;	  0249	!
;	  0250	! IMPLICIT OUTPUTS:
;	  0251	!
;	  0252	!	NONE
;	  0253	!
;	  0254	! ROUTINE VALUE:
;	  0255	!
;	  0256	!	1 IF OPEN SUCCESSFUL, 0 IF NOT.
;	  0257	!
;	  0258	! SIDE EFFECTS
;	  0259	!
;	  0260	!	ASSOCIATES CHANNEL NUMBER WITH DEVICE BY DOING UUOS
;	  0261	!	AND MODIFYING OWN STORAGE.
;	  0262	!
;	  0263	!--
;	  0264	
;	  0265	    BEGIN
;	  0266	
;	  0267	    BIND
;	  0268		ROUTINE_NAME = UPLIT (%ASCIZ'OPEN');
;	  0269	
;	  0270	    LOCAL
;	  0271		ACCUM,
;	  0272		ACCUM_CTR,
;	  0273		ACCUM_PTR,
;	  0274		BUF_PTR,
;	  0275		CHAN,
;	  0276		CHAR,
;	  0277		DEV_NAME,
;	  0278		END_SCAN,
;	  0279		FILE_NAME,
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  10
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

;	  0280		FILE_EXT,
;	  0281		FILN_PTR,
;	  0282		FIL_PTR,
;	  0283		HEADER_PTR,
;	  0284		LOOKUP_BLOCK : VECTOR [4],
;	  0285		OPEN_BLOCK : VECTOR [3],
;	  0286		RESULT,
;	  0287		SAVEJOBFF,
;	  0288		SUCCESS;
;	  0289	
;	  0290	    EXTERNAL LITERAL
;	  0291		%NAME ('.JBFF');
;	  0292	
;	  0293	    BUILTIN
;	  0294		UUO;
;	  0295	
;	  0296	    CHAN = .CHANX;
;	  0297	    RESULT = 0;
;	  0298	
;	  0299	    IF (.CHAN EQL 0)
;	  0300	    THEN
;	  0301		ERROR (UPLIT (%ASCIZ'MAY NOT OPEN CHANNEL 0 - OPEN'))
;	  0302	    ELSE
;	  0303	
;	  0304		IF ((.CHAN GTR 15) OR (.CHAN LSS 0))
;	  0305		THEN
;	  0306		    ERROR (UPLIT (%ASCIZ'INVALID CHANNEL NUMBER - OPEN'))
;	  0307		ELSE
;	  0308	
;	  0309		    IF (.CHAN_STATUS [.CHAN] NEQ 0)
;	  0310		    THEN
;	  0311			ERROR (UPLIT (%ASCIZ'CHANNEL ALREADY OPEN - OPEN'))
;	  0312		    ELSE
;	  0313	
;	  0314			IF ((.MODE NEQ 1) AND (.MODE NEQ 2))
;	  0315			THEN
;	  0316			    ERROR (UPLIT (%ASCIZ'ILLEGAL MODE - OPEN'))
;	  0317			ELSE
;	  0318			    BEGIN			!THINGS SEEM OK.
;	  0319			    DEV_NAME = 0;
;	  0320			    FILE_NAME = 0;
;	  0321			    FILE_EXT = 0;
;	  0322			    ACCUM = 0;
;	  0323			    END_SCAN = 0;
;	  0324	!
;	  0325			    FIL_PTR = CH$PTR (.FNAME, -1, 7);
;	  0326			    FILN_PTR = CH$PTR (CHAN_FNAME [.CHAN*FILE_NAME_LEN], -1, 7);
;	  0327			    ACCUM_PTR = CH$PTR (ACCUM, -1, 6);
;	  0328			    ACCUM_CTR = 0;
;	  0329	!
;	  0330	
;	  0331			    DO
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  11
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

;	  0332				BEGIN			!SCAN THE FILE NAME STRING
;	  0333				CHAR = CH$A_RCHAR (FIL_PTR);
;	  0334				CH$A_WCHAR (.CHAR, FILN_PTR);
;	  0335	
;	  0336				SELECTONE .CHAR OF
;	  0337				    SET
;	  0338	
;	  0339				    [0,%C' '] :
;	  0340					END_SCAN = 1;
;	  0341	
;	  0342				    [%C'A' TO %C'Z', %C'0' TO %C'9', %C'A' + %O'40' TO %C'Z' + %O'40'] :
;	  0343					BEGIN		!ALPHANUMERIC
;	  0344	
;	  0345					IF ((ACCUM_CTR = .ACCUM_CTR + 1) GTR 6)
;	  0346					THEN
;	  0347					    ERRMSG (0, 2, ROUTINE_NAME,
;	  0348						.FNAME, 0, 0, 0)
;	  0349					ELSE
;	  0350					    CH$A_WCHAR (.CHAR - %O'40', ACCUM_PTR);
;	  0351	
;	  0352					END;
;	  0353	
;	  0354				    [%C':'] :
;	  0355					BEGIN		! WE HAVE SCANNED A DEVICE NAME
;	  0356					DEV_NAME = .ACCUM;
;	  0357					ACCUM = 0;
;	  0358					ACCUM_CTR = 0;
;	  0359					ACCUM_PTR = CH$PTR (ACCUM, -1, 6);
;	  0360					END;
;	  0361	
;	  0362				    [%C'.'] :
;	  0363					BEGIN		! WE HAVE SCANNED A FILE NAME
;	  0364					FILE_NAME = .ACCUM;
;	  0365					ACCUM = 0;
;	  0366					ACCUM_CTR = 0;
;	  0367					ACCUM_PTR = CH$PTR (ACCUM, -1, 6);
;	  0368					END;
;	  0369	
;	  0370				    [OTHERWISE] :
;	  0371					ERRMSG (0, 2, ROUTINE_NAME, .FNAME, 0, 0, 0);
;	  0372				    TES;
;	  0373	
;	  0374				END
;	  0375			    WHILE (.END_SCAN EQL 0);
;	  0376	
;	  0377	!
;	  0378	! SUBSTITUTE THE DEFAULTS
;	  0379	!
;	  0380	
;	  0381			    IF (.FILE_NAME EQL 0)
;	  0382			    THEN
;	  0383				BEGIN			!NAME IS ZERO, CHECK FOR UNDELIMITED NAME
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  12
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

;	  0384				FILE_NAME = .ACCUM;
;	  0385				ACCUM = 0;
;	  0386				ACCUM_CTR = 0;
;	  0387				END;
;	  0388	
;	  0389			    IF (.FILE_EXT EQL 0)
;	  0390			    THEN
;	  0391				BEGIN			!EXTENSION IS ZERO, USE LAST NAME PROVIDED.
;	  0392				FILE_EXT = .ACCUM;
;	  0393	
;	  0394				IF (.ACCUM_CTR GTR 3) THEN ERRMSG (0, 2, ROUTINE_NAME, .FNAME, 0, 0, 0);
;	  0395	
;	  0396				ACCUM = 0;
;	  0397				ACCUM_CTR = 0;
;	  0398				END;
;	  0399	
;	  0400			    IF (.DEV_NAME EQL 0) THEN DEV_NAME = SIXBIT (UPLIT (%ASCIZ'DSK'));
;	  0401	
;	  0402			    IF (.FILE_EXT EQL 0) THEN FILE_EXT = SIXBIT (.DEFEXT);
;	  0403	
;	  0404			    IF (.FILE_NAME EQL 0)
;	  0405			    THEN
;	  0406				ERRMSG (0, 2, ROUTINE_NAME, .FNAME, 0, 0, 0)
;	  0407			    ELSE
;	  0408				BEGIN
;	  0409				OPEN_BLOCK [0] = (.MODE - 1)*%O'14';	!CHAR = 0, WORD = 14 OCTAL.
;	  0410				OPEN_BLOCK [1] = .DEV_NAME;
;	  0411	
;	  0412				IF ((HEADER_PTR = GETSTG (3)) EQL 0)
;	  0413				THEN
;	  0414				    ERRMSG (0, 1, ROUTINE_NAME, 0, 0, 0, 0)
;	  0415				ELSE
;	  0416				    BEGIN
;	  0417	
;	  0418				    IF (.IO NEQ 0)
;	  0419				    THEN
;	  0420					OPEN_BLOCK [2] = (.HEADER_PTR)^18
;	  0421				    ELSE
;	  0422					OPEN_BLOCK [2] = (.HEADER_PTR);
;	  0423	
;	  0424				    CHAN_HEADER [.CHAN] = .HEADER_PTR;
;	  0425	
;	  0426				    IF (UUO (1, %O'050', .CHAN, OPEN_BLOCK) EQL 0) THEN 	! ISSUE OPEN UUO
;	  0427					ERRMSG (0, 3, ROUTINE_NAME, .FNAME, 0, 0, 0)
;	  0428				    ELSE
;	  0429					BEGIN		!OPEN UUO SUCCEEDED.
;	  0430	
;	  0431					IF ((BUF_PTR = GETSTG (%O'203')) EQL 0)
;	  0432					THEN
;	  0433					    ERRMSG (0, 1, ROUTINE_NAME, 0,
;	  0434						0, 0, 0)
;	  0435					ELSE
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  13
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

;	  0436					    BEGIN
;	  0437					    SAVEJOBFF = .(%NAME ('.JBFF'));
;	  0438					    %NAME ('.JBFF') = .BUF_PTR;
;	  0439					    CHAN_BUFFER [.CHAN] = .BUF_PTR;
;	  0440					    LOOKUP_BLOCK [0] = .FILE_NAME;
;	  0441					    LOOKUP_BLOCK [1] = .FILE_EXT;
;	  0442					    LOOKUP_BLOCK [2] = LOOKUP_BLOCK [3] = 0;
;	  0443	
;	  0444					    IF (.IO NEQ 0)
;	  0445					    THEN
;	  0446						UUO (0, %O'065', .CHAN, 1)	!OUTBUF
;	  0447					    ELSE
;	  0448						UUO (0, %O'064', .CHAN, 1);	!INBUF
;	  0449	
;	  0450					    %NAME ('.JBFF') = .SAVEJOBFF;
;	  0451	
;	  0452					    IF (.IO NEQ 0)
;	  0453					    THEN
;	  0454						SUCCESS = UUO (1, %O'077', .CHAN, LOOKUP_BLOCK)	!ENTER
;	  0455					    ELSE
;	  0456						SUCCESS = UUO (1, %O'076', .CHAN, LOOKUP_BLOCK);	!LOOKUP
;	  0457	
;	  0458					    IF (.SUCCESS EQL 0)
;	  0459					    THEN
;	  0460						ERRMSG (0, 4, ROUTINE_NAME, .FNAME,
;	  0461						    .LOOKUP_BLOCK [3], 0, 0)
;	  0462					    ELSE
;	  0463						BEGIN
;	  0464						CHAN_STATUS [.CHAN] = .MODE;
;	  0465						CHAN_DIRECTION [.CHAN] = .IO;
;	  0466						CHAN_CTR [.CHAN] = 0;
;	  0467						RESULT = 1;	!FLAG SUCCESSFUL OPEN
;	  0468						END;	!OF LOOKUP/ENTER SUCCEEDED
;	  0469	
;	  0470					    END;	!OF BUFFER STORAGE OBTAINED
;	  0471	
;	  0472					END;		!OF OPEN UUO SUCCEEDED
;	  0473	
;	  0474				    END;		!OF HEADER STORAGE OBTAINED
;	  0475	
;	  0476				END;			!OF FILE NAME PROVIDED
;	  0477	
;	  0478			    END;			!OF PARMS SEEM OK
;	  0479	
;	  0480	    .RESULT
;	  0481	    END;					!OF ROUTINE OPEN


P.AAA:	BYTE	(7)"O","P","E","N",000		; OPEN					400037' 117 120 105 116 000
P.AAB:	BYTE	(7)"M","A","Y"," ","N"		; MAY N					400040' 115 101 131 040 116
	BYTE	(7)"O","T"," ","O","P"		; OT OP					400041' 117 124 040 117 120
	BYTE	(7)"E","N"," ","C","H"		; EN CH					400042' 105 116 040 103 110
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  14
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

	BYTE	(7)"A","N","N","E","L"		; ANNEL					400043' 101 116 116 105 114
	BYTE	(7)" ","0"," ","-"," "		;  0 -					400044' 040 060 040 055 040
	BYTE	(7)"O","P","E","N",000		; OPEN					400045' 117 120 105 116 000
P.AAC:	BYTE	(7)"I","N","V","A","L"		; INVAL					400046' 111 116 126 101 114
	BYTE	(7)"I","D"," ","C","H"		; ID CH					400047' 111 104 040 103 110
	BYTE	(7)"A","N","N","E","L"		; ANNEL					400050' 101 116 116 105 114
	BYTE	(7)" ","N","U","M","B"		;  NUMB					400051' 040 116 125 115 102
	BYTE	(7)"E","R"," ","-"," "		; ER -					400052' 105 122 040 055 040
	BYTE	(7)"O","P","E","N",000		; OPEN					400053' 117 120 105 116 000
P.AAD:	BYTE	(7)"C","H","A","N","N"		; CHANN					400054' 103 110 101 116 116
	BYTE	(7)"E","L"," ","A","L"		; EL AL					400055' 105 114 040 101 114
	BYTE	(7)"R","E","A","D","Y"		; READY					400056' 122 105 101 104 131
	BYTE	(7)" ","O","P","E","N"		;  OPEN					400057' 040 117 120 105 116
	BYTE	(7)" ","-"," ","O","P"		;  - OP					400060' 040 055 040 117 120
	BYTE	(7)"E","N",000,000,000		; EN					400061' 105 116 000 000 000
P.AAE:	BYTE	(7)"I","L","L","E","G"		; ILLEG					400062' 111 114 114 105 107
	BYTE	(7)"A","L"," ","M","O"		; AL MO					400063' 101 114 040 115 117
	BYTE	(7)"D","E"," ","-"," "		; DE -					400064' 104 105 040 055 040
	BYTE	(7)"O","P","E","N",000		; OPEN					400065' 117 120 105 116 000
P.AAF:	BYTE	(7)"D","S","K",000,000		; DSK					400066' 104 123 113 000 000


	EXTERN	.JBFF


ROUTINE_NAME=	    P.AAA			;						000000	400037'


OPEN::	PUSH	SP,AC0				; SP,AC0				400067' 261 17 0 00 000000		0228
	PUSH	SP,AC10				; SP,AC10				400070' 261 17 0 00 000010
	PUSH	SP,AC11				; SP,AC11				400071' 261 17 0 00 000011
	PUSH	SP,AC12				; SP,AC12				400072' 261 17 0 00 000012
	PUSH	SP,AC13				; SP,AC13				400073' 261 17 0 00 000013
	PUSH	SP,AC14				; SP,AC14				400074' 261 17 0 00 000014
	PUSH	SP,AC16				; SP,AC16				400075' 261 17 0 00 000016
	ADJSP	SP,14				; SP,14					400076' 105 17 0 00 000014
	MOVE	AC11,-30(SP)			; CHAN,CHANX				400077' 200 11 0 17 777750		0296
	SETZM	-3(SP)				; RESULT				400100' 402 00 0 17 777775		0297
	JUMPN	AC11,L.4			; CHAN,L.4				400101' 326 11 0 00 400104'		0299
	PUSH	SP,C.3				; SP,[0,,P.AAB]				400102' 261 17 0 00 400443'		0301
	JRST	L.7				; L.7					400103' 254 00 0 00 400121'
L.4:	CAIG	AC11,17				; CHAN,17				400104' 307 11 0 00 000017		0304
	JUMPGE	AC11,L.5			; CHAN,L.5				400105' 325 11 0 00 400110'
	PUSH	SP,C.4				; SP,[0,,P.AAC]				400106' 261 17 0 00 400444'		0306
	JRST	L.7				; L.7					400107' 254 00 0 00 400121'
L.5:	SKIPN	CHAN_STATUS(AC11)		; CHAN_STATUS(CHAN)			400110' 336 00 0 11 000000'		0309
	JRST	L.6				; L.6					400111' 254 00 0 00 400114'
	PUSH	SP,C.5				; SP,[0,,P.AAD]				400112' 261 17 0 00 400445'		0311
	JRST	L.7				; L.7					400113' 254 00 0 00 400121'
L.6:	MOVE	AC0,-26(SP)			; AC0,MODE				400114' 200 00 0 17 777752		0314
	CAIE	AC0,1				; AC0,1					400115' 302 00 0 00 000001
	CAIN	AC0,2				; AC0,2					400116' 306 00 0 00 000002
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  15
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

	JRST	L.8				; L.8					400117' 254 00 0 00 400124'
	PUSH	SP,C.6				; SP,[0,,P.AAE]				400120' 261 17 0 00 400446'		0316
L.7:	PUSHJ	SP,ERROR			; SP,ERROR				400121' 260 17 0 00 000000*
	ADJSP	SP,-1				; SP,-1					400122' 105 17 0 00 777777
	JRST	L.39				; L.39					400123' 254 00 0 00 400427'		0314
L.8:	SETZB	AC13,-1(SP)			; DEV_NAME,FILE_NAME			400124' 403 13 0 17 777777		0320
	SETZM	-2(SP)				; FILE_EXT				400125' 402 00 0 17 777776		0321
	SETZB	AC12,-4(SP)			; END_SCAN,ACCUM			400126' 403 12 0 17 777774		0322
	MOVE	AC1,-27(SP)			; AC1,FNAME				400127' 200 01 0 17 777751		0325
	MOVEI	AC0,-1(AC1)			; AC0,-1(AC1)				400130' 201 00 0 01 777777
	HRLI	AC0,100700			; AC0,100700				400131' 505 00 0 00 100700
	MOVE	AC1,AC11			; AC1,CHAN				400132' 200 01 0 00 000011		0326
	IMULI	AC1,10				; AC1,10				400133' 221 01 0 00 000010
	MOVEI	AC1,CHAN_FNAME-1(AC1)		; AC1,CHAN_FNAME-1(AC1)			400134' 201 01 0 01 000137'
	HRLI	AC1,100700			; AC1,100700				400135' 505 01 0 00 100700
	MOVEM	AC1,0(SP)			; AC1,FILN_PTR				400136' 202 01 0 17 000000
	MOVEI	AC1,-5(SP)			; AC1,ACCUM-1				400137' 201 01 0 17 777773		0327
	HRLI	AC1,60600			; AC1,60600				400140' 505 01 0 00 060600
	MOVE	AC10,AC1			; ACCUM_PTR,AC1				400141' 200 10 0 00 000001
	SETZ	AC14,				; ACCUM_CTR,				400142' 400 14 0 00 000000		0328
L.9:	IBP	AC0				; FIL_PTR				400143' 133 00 0 00 000000		0333
	MOVE	AC16,AC0			; CHAR,FIL_PTR				400144' 200 16 0 00 000000
	ILDB	AC16,AC16			; CHAR,CHAR				400145' 134 16 0 00 000016
	IBP	0(SP)				; FILN_PTR				400146' 133 00 0 17 000000		0334
	MOVE	AC1,0(SP)			; AC1,FILN_PTR				400147' 200 01 0 17 000000
	IDPB	AC16,AC1			; CHAR,AC1				400150' 136 16 0 00 000001
	JUMPE	AC16,L.10			; CHAR,L.10				400151' 322 16 0 00 400154'		0336
	CAIE	AC16,40				; CHAR,40				400152' 302 16 0 00 000040
	JRST	L.11				; L.11					400153' 254 00 0 00 400156'
L.10:	MOVEI	AC12,1				; END_SCAN,1				400154' 201 12 0 00 000001		0340
	JRST	L.19				; L.19					400155' 254 00 0 00 400230'		0336
L.11:	CAIGE	AC16,60				; CHAR,60				400156' 305 16 0 00 000060
	JRST	L.12				; L.12					400157' 254 00 0 00 400162'
	CAIG	AC16,71				; CHAR,71				400160' 307 16 0 00 000071
	JRST	L.14				; L.14					400161' 254 00 0 00 400171'
L.12:	CAIGE	AC16,101			; CHAR,101				400162' 305 16 0 00 000101
	JRST	L.13				; L.13					400163' 254 00 0 00 400166'
	CAIG	AC16,132			; CHAR,132				400164' 307 16 0 00 000132
	JRST	L.14				; L.14					400165' 254 00 0 00 400171'
L.13:	CAIL	AC16,141			; CHAR,141				400166' 301 16 0 00 000141
	CAILE	AC16,172			; CHAR,172				400167' 303 16 0 00 000172
	JRST	L.15				; L.15					400170' 254 00 0 00 400202'
L.14:	ADDI	AC14,1				; ACCUM_CTR,1				400171' 271 14 0 00 000001		0345
	CAILE	AC14,6				; ACCUM_CTR,6				400172' 303 14 0 00 000006
	JRST	L.18				; L.18					400173' 254 00 0 00 400217'
	MOVE	AC1,AC16			; AC1,CHAR				400174' 200 01 0 00 000016		0350
	SUBI	AC1,40				; AC1,40				400175' 275 01 0 00 000040
	IBP	AC10				; ACCUM_PTR				400176' 133 00 0 00 000010
	MOVE	AC2,AC10			; AC2,ACCUM_PTR				400177' 200 02 0 00 000010
	IDPB	AC1,AC2				; AC1,AC2				400200' 136 01 0 00 000002
	JRST	L.19				; L.19					400201' 254 00 0 00 400230'		0336
L.15:	CAIE	AC16,72				; CHAR,72				400202' 302 16 0 00 000072
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  16
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

	JRST	L.16				; L.16					400203' 254 00 0 00 400206'
	MOVE	AC13,-4(SP)			; DEV_NAME,ACCUM			400204' 200 13 0 17 777774		0356
	JRST	L.17				; L.17					400205' 254 00 0 00 400212'
L.16:	CAIE	AC16,56				; CHAR,56				400206' 302 16 0 00 000056		0336
	JRST	L.18				; L.18					400207' 254 00 0 00 400217'
	MOVE	AC1,-4(SP)			; AC1,ACCUM				400210' 200 01 0 17 777774		0364
	MOVEM	AC1,-1(SP)			; AC1,FILE_NAME				400211' 202 01 0 17 777777
L.17:	SETZB	AC14,-4(SP)			; ACCUM_CTR,ACCUM			400212' 403 14 0 17 777774		0365
	MOVEI	AC1,-5(SP)			; AC1,ACCUM-1				400213' 201 01 0 17 777773		0367
	HRLI	AC1,60600			; AC1,60600				400214' 505 01 0 00 060600
	MOVE	AC10,AC1			; ACCUM_PTR,AC1				400215' 200 10 0 00 000001
	JRST	L.19				; L.19					400216' 254 00 0 00 400230'		0336
L.18:	PUSH	SP,C.7				; SP,[0]				400217' 261 17 0 00 400447'		0371
	PUSH	SP,C.8				; SP,[2]				400220' 261 17 0 00 400450'
	PUSH	SP,C.9				; SP,[0,,ROUTINE_NAME]			400221' 261 17 0 00 400451'
	PUSH	SP,-32(SP)			; SP,FNAME				400222' 261 17 0 17 777746
	PUSH	SP,C.7				; SP,[0]				400223' 261 17 0 00 400447'
	PUSH	SP,C.7				; SP,[0]				400224' 261 17 0 00 400447'
	PUSH	SP,C.7				; SP,[0]				400225' 261 17 0 00 400447'
	PUSHJ	SP,ERRMSG			; SP,ERRMSG				400226' 260 17 0 00 000000*
	ADJSP	SP,-7				; SP,-7					400227' 105 17 0 00 777771
L.19:	JUMPE	AC12,L.9			; END_SCAN,L.9				400230' 322 12 0 00 400143'		0375
	SKIPE	-1(SP)				; FILE_NAME				400231' 332 00 0 17 777777		0381
	JRST	L.20				; L.20					400232' 254 00 0 00 400236'
	MOVE	AC0,-4(SP)			; AC0,ACCUM				400233' 200 00 0 17 777774		0384
	MOVEM	AC0,-1(SP)			; AC0,FILE_NAME				400234' 202 00 0 17 777777
	SETZB	AC14,-4(SP)			; ACCUM_CTR,ACCUM			400235' 403 14 0 17 777774		0385
L.20:	SKIPE	-2(SP)				; FILE_EXT				400236' 332 00 0 17 777776		0389
	JRST	L.22				; L.22					400237' 254 00 0 00 400256'
	MOVE	AC0,-4(SP)			; AC0,ACCUM				400240' 200 00 0 17 777774		0392
	MOVEM	AC0,-2(SP)			; AC0,FILE_EXT				400241' 202 00 0 17 777776
	CAIG	AC14,3				; ACCUM_CTR,3				400242' 307 14 0 00 000003		0394
	JRST	L.21				; L.21					400243' 254 00 0 00 400255'
	PUSH	SP,C.7				; SP,[0]				400244' 261 17 0 00 400447'
	PUSH	SP,C.8				; SP,[2]				400245' 261 17 0 00 400450'
	PUSH	SP,C.9				; SP,[0,,ROUTINE_NAME]			400246' 261 17 0 00 400451'
	PUSH	SP,-32(SP)			; SP,FNAME				400247' 261 17 0 17 777746
	PUSH	SP,C.7				; SP,[0]				400250' 261 17 0 00 400447'
	PUSH	SP,C.7				; SP,[0]				400251' 261 17 0 00 400447'
	PUSH	SP,C.7				; SP,[0]				400252' 261 17 0 00 400447'
	PUSHJ	SP,ERRMSG			; SP,ERRMSG				400253' 260 17 0 00 000000*
	ADJSP	SP,-7				; SP,-7					400254' 105 17 0 00 777771
L.21:	SETZB	AC14,-4(SP)			; ACCUM_CTR,ACCUM			400255' 403 14 0 17 777774		0396
L.22:	JUMPN	AC13,L.23			; DEV_NAME,L.23				400256' 326 13 0 00 400263'		0400
	PUSH	SP,C.10				; SP,[0,,P.AAF]				400257' 261 17 0 00 400452'
	PUSHJ	SP,SIXBIT			; SP,SIXBIT				400260' 260 17 0 00 400002'
	MOVE	AC13,AC1			; DEV_NAME,AC1				400261' 200 13 0 00 000001
	ADJSP	SP,-1				; SP,-1					400262' 105 17 0 00 777777
L.23:	SKIPE	-2(SP)				; FILE_EXT				400263' 332 00 0 17 777776		0402
	JRST	L.24				; L.24					400264' 254 00 0 00 400271'
	PUSH	SP,-24(SP)			; SP,DEFEXT				400265' 261 17 0 17 777754
	PUSHJ	SP,SIXBIT			; SP,SIXBIT				400266' 260 17 0 00 400002'
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  17
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

	MOVEM	AC1,-3(SP)			; AC1,FILE_EXT				400267' 202 01 0 17 777775
	ADJSP	SP,-1				; SP,-1					400270' 105 17 0 00 777777
L.24:	SKIPE	-1(SP)				; FILE_NAME				400271' 332 00 0 17 777777		0404
	JRST	L.25				; L.25					400272' 254 00 0 00 400276'
	PUSH	SP,C.7				; SP,[0]				400273' 261 17 0 00 400447'		0406
	PUSH	SP,C.8				; SP,[2]				400274' 261 17 0 00 400450'
	JRST	L.28				; L.28					400275' 254 00 0 00 400331'
L.25:	MOVE	AC1,-26(SP)			; AC1,MODE				400276' 200 01 0 17 777752		0409
	SUBI	AC1,1				; AC1,1					400277' 275 01 0 00 000001
	IMULI	AC1,14				; AC1,14				400300' 221 01 0 00 000014
	MOVEM	AC1,-7(SP)			; AC1,OPEN_BLOCK			400301' 202 01 0 17 777771
	MOVEM	AC13,-6(SP)			; DEV_NAME,OPEN_BLOCK+1			400302' 202 13 0 17 777772		0410
	PUSH	SP,C.11				; SP,[3]				400303' 261 17 0 00 400453'		0412
	PUSHJ	SP,GETSTG			; SP,GETSTG				400304' 260 17 0 00 000000*
	MOVE	AC0,AC1				; HEADER_PTR,AC1			400305' 200 00 0 00 000001
	ADJSP	SP,-1				; SP,-1					400306' 105 17 0 00 777777
	JUMPE	AC0,L.30			; HEADER_PTR,L.30			400307' 322 00 0 00 400341'
	MOVEI	AC1,-7(SP)			; AC1,OPEN_BLOCK			400310' 201 01 0 17 777771		0420
	ADDI	AC1,2				; AC1,2					400311' 271 01 0 00 000002
	SKIPN	-25(SP)				; IO					400312' 336 00 0 17 777753		0418
	JRST	L.26				; L.26					400313' 254 00 0 00 400316'
	HRLZM	AC0,0(AC1)			; HEADER_PTR,0(AC1)			400314' 516 00 0 01 000000		0420
	JRST	L.27				; L.27					400315' 254 00 0 00 400317'		0418
L.26:	MOVEM	AC0,0(AC1)			; HEADER_PTR,0(AC1)			400316' 202 00 0 01 000000		0422
L.27:	MOVEM	AC0,CHAN_HEADER(AC11)		; HEADER_PTR,CHAN_HEADER(CHAN)		400317' 202 00 0 11 000020'		0424
	MOVEI	AC1,-7(SP)			; AC1,OPEN_BLOCK			400320' 201 01 0 17 777771		0426
	HRLI	AC1,50000			; AC1,50000				400321' 505 01 0 00 050000
	DPB	AC11,C.1			; CHAN,[POINT 4,AC1,12]  <23,4>		400322' 137 11 0 00 400441'
	XCT	AC1				; AC1					400323' 256 00 0 00 000001
	TDZA	AC0,AC0				; AC0,AC0				400324' 634 00 0 00 000000
	MOVEI	AC0,1				; AC0,1					400325' 201 00 0 00 000001
	JUMPN	AC0,L.29			; AC0,L.29				400326' 326 00 0 00 400334'
	PUSH	SP,C.7				; SP,[0]				400327' 261 17 0 00 400447'		0427
	PUSH	SP,C.11				; SP,[3]				400330' 261 17 0 00 400453'
L.28:	PUSH	SP,C.9				; SP,[0,,ROUTINE_NAME]			400331' 261 17 0 00 400451'
	PUSH	SP,-32(SP)			; SP,FNAME				400332' 261 17 0 17 777746
	JRST	L.31				; L.31					400333' 254 00 0 00 400345'
L.29:	PUSH	SP,C.12				; SP,[203]				400334' 261 17 0 00 400454'		0431
	PUSHJ	SP,GETSTG			; SP,GETSTG				400335' 260 17 0 00 000000*
	MOVE	AC0,AC1				; BUF_PTR,AC1				400336' 200 00 0 00 000001
	ADJSP	SP,-1				; SP,-1					400337' 105 17 0 00 777777
	JUMPN	AC0,L.32			; BUF_PTR,L.32				400340' 326 00 0 00 400347'
L.30:	PUSH	SP,C.7				; SP,[0]				400341' 261 17 0 00 400447'		0433
	PUSH	SP,C.13				; SP,[1]				400342' 261 17 0 00 400455'
	PUSH	SP,C.9				; SP,[0,,ROUTINE_NAME]			400343' 261 17 0 00 400451'
	PUSH	SP,C.7				; SP,[0]				400344' 261 17 0 00 400447'
L.31:	PUSH	SP,C.7				; SP,[0]				400345' 261 17 0 00 400447'
	JRST	L.37				; L.37					400346' 254 00 0 00 400413'
L.32:	MOVE	AC1,.JBFF			; SAVEJOBFF,.JBFF			400347' 200 01 0 00 000000*		0437
	MOVEM	AC0,.JBFF			; BUF_PTR,.JBFF				400350' 202 00 0 00 000000*		0438
	MOVEM	AC0,CHAN_BUFFER(AC11)		; BUF_PTR,CHAN_BUFFER(CHAN)		400351' 202 00 0 11 000040'		0439
	MOVE	AC0,-1(SP)			; AC0,FILE_NAME				400352' 200 00 0 17 777777		0440
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  18
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

	MOVEM	AC0,-13(SP)			; AC0,LOOKUP_BLOCK			400353' 202 00 0 17 777765
	MOVE	AC0,-2(SP)			; AC0,FILE_EXT				400354' 200 00 0 17 777776		0441
	MOVEM	AC0,-12(SP)			; AC0,LOOKUP_BLOCK+1			400355' 202 00 0 17 777766
	SETZM	-10(SP)				; LOOKUP_BLOCK+3			400356' 402 00 0 17 777770		0442
	SETZM	-11(SP)				; LOOKUP_BLOCK+2			400357' 402 00 0 17 777767
	SKIPN	-25(SP)				; IO					400360' 336 00 0 17 777753		0444
	JRST	L.33				; L.33					400361' 254 00 0 00 400365'
	MOVEI	AC0,1				; AC0,1					400362' 201 00 0 00 000001		0446
	HRLI	AC0,65000			; AC0,65000				400363' 505 00 0 00 065000
	JRST	L.34				; L.34					400364' 254 00 0 00 400367'
L.33:	MOVEI	AC0,1				; AC0,1					400365' 201 00 0 00 000001		0448
	HRLI	AC0,64000			; AC0,64000				400366' 505 00 0 00 064000
L.34:	DPB	AC11,C.2			; CHAN,[POINT 4,AC0,12]  <23,4>		400367' 137 11 0 00 400442'
	XCT	AC0				; AC0					400370' 256 00 0 00 000000
	MOVEM	AC1,.JBFF			; SAVEJOBFF,.JBFF			400371' 202 01 0 00 000000*		0450
	SKIPN	-25(SP)				; IO					400372' 336 00 0 17 777753		0452
	JRST	L.35				; L.35					400373' 254 00 0 00 400377'
	MOVEI	AC1,-13(SP)			; AC1,LOOKUP_BLOCK			400374' 201 01 0 17 777765		0454
	HRLI	AC1,77000			; AC1,77000				400375' 505 01 0 00 077000
	JRST	L.36				; L.36					400376' 254 00 0 00 400401'
L.35:	MOVEI	AC1,-13(SP)			; AC1,LOOKUP_BLOCK			400377' 201 01 0 17 777765		0456
	HRLI	AC1,76000			; AC1,76000				400400' 505 01 0 00 076000
L.36:	DPB	AC11,C.1			; CHAN,[POINT 4,AC1,12]  <23,4>		400401' 137 11 0 00 400441'
	XCT	AC1				; AC1					400402' 256 00 0 00 000001
	TDZA	AC0,AC0				; AC0,AC0				400403' 634 00 0 00 000000
	MOVEI	AC0,1				; AC0,1					400404' 201 00 0 00 000001
	JUMPN	AC0,L.38			; SUCCESS,L.38				400405' 326 00 0 00 400420'		0458
	PUSH	SP,C.7				; SP,[0]				400406' 261 17 0 00 400447'		0460
	PUSH	SP,C.14				; SP,[4]				400407' 261 17 0 00 400456'
	PUSH	SP,C.9				; SP,[0,,ROUTINE_NAME]			400410' 261 17 0 00 400451'
	PUSH	SP,-32(SP)			; SP,FNAME				400411' 261 17 0 17 777746
	PUSH	SP,-14(SP)			; SP,LOOKUP_BLOCK+3			400412' 261 17 0 17 777764
L.37:	PUSH	SP,C.7				; SP,[0]				400413' 261 17 0 00 400447'
	PUSH	SP,C.7				; SP,[0]				400414' 261 17 0 00 400447'
	PUSHJ	SP,ERRMSG			; SP,ERRMSG				400415' 260 17 0 00 000000*
	ADJSP	SP,-7				; SP,-7					400416' 105 17 0 00 777771
	JRST	L.39				; L.39					400417' 254 00 0 00 400427'		0458
L.38:	MOVE	AC0,-26(SP)			; AC0,MODE				400420' 200 00 0 17 777752		0464
	MOVEM	AC0,CHAN_STATUS(AC11)		; AC0,CHAN_STATUS(CHAN)			400421' 202 00 0 11 000000'
	MOVE	AC0,-25(SP)			; AC0,IO				400422' 200 00 0 17 777753		0465
	MOVEM	AC0,CHAN_DIRECTION(AC11)	; AC0,CHAN_DIRECTION(CHAN)		400423' 202 00 0 11 000120'
	SETZM	CHAN_CTR(AC11)			; CHAN_CTR(CHAN)			400424' 402 00 0 11 000100'		0466
	MOVEI	AC0,1				; AC0,1					400425' 201 00 0 00 000001		0467
	MOVEM	AC0,-3(SP)			; AC0,RESULT				400426' 202 00 0 17 777775
L.39:	MOVE	AC1,-3(SP)			; AC1,RESULT				400427' 200 01 0 17 777775		0228
	ADJSP	SP,-14				; SP,-14				400430' 105 17 0 00 777764
	POP	SP,AC16				; SP,AC16				400431' 262 17 0 00 000016
	POP	SP,AC14				; SP,AC14				400432' 262 17 0 00 000014
	POP	SP,AC13				; SP,AC13				400433' 262 17 0 00 000013
	POP	SP,AC12				; SP,AC12				400434' 262 17 0 00 000012
	POP	SP,AC11				; SP,AC11				400435' 262 17 0 00 000011
	POP	SP,AC10				; SP,AC10				400436' 262 17 0 00 000010
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  19
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (5)

	POP	SP,AC0				; SP,AC0				400437' 262 17 0 00 000000
	POPJ	SP,				; SP,					400440' 263 17 0 00 000000
C.1:	POINT	4,AC1,12			; 4,AC1,12				400441' 27 04 0 00 000001
C.2:	POINT	4,AC0,12			; 4,AC0,12				400442' 27 04 0 00 000000
C.3:	XWD	0,P.AAB				; 0,P.AAB				400443' 000000	400040'
C.4:	XWD	0,P.AAC				; 0,P.AAC				400444' 000000	400046'
C.5:	XWD	0,P.AAD				; 0,P.AAD				400445' 000000	400054'
C.6:	XWD	0,P.AAE				; 0,P.AAE				400446' 000000	400062'
C.7:	EXP	0				; 0					400447' 000000	000000
C.8:	EXP	2				; 2					400450' 000000	000002
C.9:	XWD	0,ROUTINE_NAME			; 0,ROUTINE_NAME			400451' 000000	400037'
C.10:	XWD	0,P.AAF				; 0,P.AAF				400452' 000000	400066'
C.11:	EXP	3				; 3					400453' 000000	000003
C.12:	EXP	203				; 203					400454' 000000	000203
C.13:	EXP	1				; 1					400455' 000000	000001
C.14:	EXP	4				; 4					400456' 000000	000004

; Routine Size:  248 words


;	  0482	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  20
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (6)

;	  0483	GLOBAL ROUTINE CLOSE (CHANX) : NOVALUE = 	! CLOSE A CHANNEL
;	  0484	
;	  0485	!++
;	  0486	! FUNCTIONAL DESCRIPTION:
;	  0487	!
;	  0488	!	THE CLOSE ROUTINE CLOSES A CHANNEL.
;	  0489	!
;	  0490	! FORMAL PARAMETERS:
;	  0491	!
;	  0492	!	CHANX - THE CHANNEL TO CLOSE.
;	  0493	!
;	  0494	! IMPLICIT INPUTS:
;	  0495	!
;	  0496	!	NONE
;	  0497	!
;	  0498	! IMPLICIT OUTPUTS:
;	  0499	!
;	  0500	!	NONE
;	  0501	!
;	  0502	! ROUTINE VALUE:
;	  0503	!
;	  0504	!	NONE
;	  0505	!
;	  0506	! SIDE EFFECTS
;	  0507	!
;	  0508	!	CLOSES THE CHANNEL BY DOING UUOS AND MODIFYING OWN STORAGE
;	  0509	!
;	  0510	!--
;	  0511	
;	  0512	    BEGIN
;	  0513	
;	  0514	    LOCAL
;	  0515		CHAN;
;	  0516	
;	  0517	    BUILTIN
;	  0518		UUO;
;	  0519	
;	  0520	    CHAN = .CHANX;
;	  0521	
;	  0522	    IF (.CHAN EQL 0)
;	  0523	    THEN
;	  0524		ERROR (UPLIT (%ASCIZ'YOU MAY NOT CLOSE CHANNEL 0 - CLOSE'))
;	  0525	    ELSE
;	  0526	
;	  0527		IF ((.CHAN LSS 0) OR (.CHAN GTR 15))
;	  0528		THEN
;	  0529		    ERROR (UPLIT (%ASCIZ'INVALID CHANNEL NUMBER - CLOSE'))
;	  0530		ELSE
;	  0531	
;	  0532		    IF (.CHAN_STATUS [.CHAN] EQL 0)
;	  0533		    THEN
;	  0534			ERROR (UPLIT (%ASCIZ'CHANNEL IS NOT OPEN - CLOSE'))
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  21
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (6)

;	  0535		    ELSE
;	  0536			BEGIN				!CHANNEL NUMBER SEEMS OK
;	  0537	
;	  0538			IF (.CHAN_DIRECTION [.CHAN] EQL 1)
;	  0539			THEN
;	  0540			    BEGIN			!ADJUST BYTE POINTER TO LAST BYTE
;	  0541	
;	  0542			    INCR COUNTER FROM 1 TO 8 DO
;	  0543				OUTPUT (.CHAN, 0);
;	  0544	
;	  0545			    END;
;	  0546	
;	  0547			UUO (0, %O'070', .CHAN, 0);	!CLOSE
;	  0548			FRESTG (.CHAN_BUFFER [.CHAN], %O'203');
;	  0549			FRESTG (.CHAN_HEADER [.CHAN], 3);
;	  0550			CHAN_STATUS [.CHAN] = 0;
;	  0551			END;				!CHANNEL NUMBER OK
;	  0552	
;	  0553	    END;					!OF ROUTINE CLOSE


P.AAG:	BYTE	(7)"Y","O","U"," ","M"		; YOU M					400457' 131 117 125 040 115
	BYTE	(7)"A","Y"," ","N","O"		; AY NO					400460' 101 131 040 116 117
	BYTE	(7)"T"," ","C","L","O"		; T CLO					400461' 124 040 103 114 117
	BYTE	(7)"S","E"," ","C","H"		; SE CH					400462' 123 105 040 103 110
	BYTE	(7)"A","N","N","E","L"		; ANNEL					400463' 101 116 116 105 114
	BYTE	(7)" ","0"," ","-"," "		;  0 -					400464' 040 060 040 055 040
	BYTE	(7)"C","L","O","S","E"		; CLOSE					400465' 103 114 117 123 105
	BYTE	(7)000,000,000,000,000		;					400466' 000 000 000 000 000
P.AAH:	BYTE	(7)"I","N","V","A","L"		; INVAL					400467' 111 116 126 101 114
	BYTE	(7)"I","D"," ","C","H"		; ID CH					400470' 111 104 040 103 110
	BYTE	(7)"A","N","N","E","L"		; ANNEL					400471' 101 116 116 105 114
	BYTE	(7)" ","N","U","M","B"		;  NUMB					400472' 040 116 125 115 102
	BYTE	(7)"E","R"," ","-"," "		; ER -					400473' 105 122 040 055 040
	BYTE	(7)"C","L","O","S","E"		; CLOSE					400474' 103 114 117 123 105
	BYTE	(7)000,000,000,000,000		;					400475' 000 000 000 000 000
P.AAI:	BYTE	(7)"C","H","A","N","N"		; CHANN					400476' 103 110 101 116 116
	BYTE	(7)"E","L"," ","I","S"		; EL IS					400477' 105 114 040 111 123
	BYTE	(7)" ","N","O","T"," "		;  NOT					400500' 040 116 117 124 040
	BYTE	(7)"O","P","E","N"," "		; OPEN					400501' 117 120 105 116 040
	BYTE	(7)"-"," ","C","L","O"		; - CLO					400502' 055 040 103 114 117
	BYTE	(7)"S","E",000,000,000		; SE					400503' 123 105 000 000 000


CLOSE:: PUSH	SP,AC0				; SP,AC0				400504' 261 17 0 00 000000		0483
	PUSH	SP,AC10				; SP,AC10				400505' 261 17 0 00 000010
	MOVE	AC10,-3(SP)			; CHAN,CHANX				400506' 200 10 0 17 777775		0520
	JUMPN	AC10,L.40			; CHAN,L.40				400507' 326 10 0 00 400512'		0522
	PUSH	SP,C.15				; SP,[0,,P.AAG]				400510' 261 17 0 00 400557'		0524
	JRST	L.43				; L.43					400511' 254 00 0 00 400522'
L.40:	JUMPL	AC10,L.41			; CHAN,L.41				400512' 321 10 0 00 400515'		0527
	CAIG	AC10,17				; CHAN,17				400513' 307 10 0 00 000017
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  22
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (6)

	JRST	L.42				; L.42					400514' 254 00 0 00 400517'
L.41:	PUSH	SP,C.16				; SP,[0,,P.AAH]				400515' 261 17 0 00 400560'		0529
	JRST	L.43				; L.43					400516' 254 00 0 00 400522'
L.42:	SKIPE	CHAN_STATUS(AC10)		; CHAN_STATUS(CHAN)			400517' 332 00 0 10 000000'		0532
	JRST	L.44				; L.44					400520' 254 00 0 00 400524'
	PUSH	SP,C.17				; SP,[0,,P.AAI]				400521' 261 17 0 00 400561'		0534
L.43:	PUSHJ	SP,ERROR			; SP,ERROR				400522' 260 17 0 00 000000*
	JRST	L.47				; L.47					400523' 254 00 0 00 400553'		0532
L.44:	MOVEI	AC0,1				; AC0,1					400524' 201 00 0 00 000001		0538
	CAME	AC0,CHAN_DIRECTION(AC10)	; AC0,CHAN_DIRECTION(CHAN)		400525' 312 00 0 10 000120'
	JRST	L.46				; L.46					400526' 254 00 0 00 400537'
	MOVEI	AC0,1				; COUNTER,1				400527' 201 00 0 00 000001		0542
L.45:	PUSH	SP,AC10				; SP,CHAN				400530' 261 17 0 00 000010		0543
	PUSH	SP,C.7				; SP,[0]				400531' 261 17 0 00 400447'
	PUSHJ	SP,OUTPUT			; SP,OUTPUT				400532' 260 17 0 00 000000V
	ADJSP	SP,-2				; SP,-2					400533' 105 17 0 00 777776
	ADDI	AC0,1				; COUNTER,1				400534' 271 00 0 00 000001		0542
	CAIG	AC0,10				; COUNTER,10				400535' 307 00 0 00 000010
	JRST	L.45				; L.45					400536' 254 00 0 00 400530'
L.46:	MOVEI	AC0,0				; AC0,0					400537' 201 00 0 00 000000		0547
	HRLI	AC0,70000			; AC0,70000				400540' 505 00 0 00 070000
	DPB	AC10,C.2			; CHAN,[POINT 4,AC0,12]  <23,4>		400541' 137 10 0 00 400442'
	XCT	AC0				; AC0					400542' 256 00 0 00 000000
	PUSH	SP,CHAN_BUFFER(AC10)		; SP,CHAN_BUFFER(CHAN)			400543' 261 17 0 10 000040'		0548
	PUSH	SP,C.12				; SP,[203]				400544' 261 17 0 00 400454'
	PUSHJ	SP,FRESTG			; SP,FRESTG				400545' 260 17 0 00 000000*
	PUSH	SP,CHAN_HEADER(AC10)		; SP,CHAN_HEADER(CHAN)			400546' 261 17 0 10 000020'		0549
	PUSH	SP,C.11				; SP,[3]				400547' 261 17 0 00 400453'
	PUSHJ	SP,FRESTG			; SP,FRESTG				400550' 260 17 0 00 000000*
	SETZM	CHAN_STATUS(AC10)		; CHAN_STATUS(CHAN)			400551' 402 00 0 10 000000'		0550
	ADJSP	SP,-3				; SP,-3					400552' 105 17 0 00 777775		0536
L.47:	ADJSP	SP,-1				; SP,-1					400553' 105 17 0 00 777777		0512
	POP	SP,AC10				; SP,AC10				400554' 262 17 0 00 000010		0483
	POP	SP,AC0				; SP,AC0				400555' 262 17 0 00 000000
	POPJ	SP,				; SP,					400556' 263 17 0 00 000000
C.15:	XWD	0,P.AAG				; 0,P.AAG				400557' 000000	400457'
C.16:	XWD	0,P.AAH				; 0,P.AAH				400560' 000000	400467'
C.17:	XWD	0,P.AAI				; 0,P.AAI				400561' 000000	400476'

; Routine Size:  46 words


;	  0554	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  23
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (7)

;	  0555	GLOBAL ROUTINE INPUT (CHANX) = 			! READ FROM AN I/O DEVICE
;	  0556	
;	  0557	!++
;	  0558	! FUNCTIONAL DESCRIPTION:
;	  0559	!
;	  0560	!	READ A BYTE OR WORD FROM THE SPECIFIED CHANNEL
;	  0561	!	 EOF OR ERROR RETURNS A -1
;	  0562	!
;	  0563	! FORMAL PARAMETERS:
;	  0564	!
;	  0565	!	CHANX - THE CHANNEL OVER WHICH TO READ THE BYTE OR WORD
;	  0566	!
;	  0567	! IMPLICIT INPUTS:
;	  0568	!
;	  0569	!	NONE
;	  0570	!
;	  0571	! IMPLICIT OUTPUTS:
;	  0572	!
;	  0573	!	NONE
;	  0574	!
;	  0575	! ROUTINE VALUE:
;	  0576	!
;	  0577	!	THE BYTE OR WORD READ
;	  0578	!
;	  0579	! SIDE EFFECTS
;	  0580	!
;	  0581	!	REMOVES ONE BYTE OR WORD FROM THE INPUT STRING
;	  0582	!
;	  0583	!--
;	  0584	
;	  0585	    BEGIN
;	  0586	
;	  0587	    LOCAL
;	  0588		CHAN,
;	  0589		CHAN_WORD_TMP,
;	  0590		CHARACTER,
;	  0591		FILI : REF VECTOR [3],
;	  0592		STATUS;
;	  0593	
;	  0594	    BUILTIN
;	  0595		UUO;
;	  0596	
;	  0597	    CHAN = .CHANX;
;	  0598	    CHARACTER = 0;
;	  0599	
;	  0600	    IF ((.CHAN LSS 0) OR (.CHAN GTR 15))
;	  0601	    THEN
;	  0602		ERROR (UPLIT (%ASCIZ'INVALID CHANNEL NUMBER - INPUT'))
;	  0603	    ELSE
;	  0604	
;	  0605		IF (.CHAN EQL 0)
;	  0606		THEN
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  24
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (7)

;	  0607		    BEGIN				!CHANNEL 0 IS THE TERMINAL
;	  0608		    UUO (0, %O'051', 4, CHARACTER);	!INCHWL
;	  0609		    END
;	  0610		ELSE
;	  0611		    BEGIN				!NOT CHANNEL 0
;	  0612	
;	  0613		    IF (.CHAN_STATUS [.CHAN] EQL 0)
;	  0614		    THEN
;	  0615			ERROR (UPLIT (%ASCIZ'CHANNEL NOT OPEN - INPUT'))
;	  0616		    ELSE
;	  0617	
;	  0618			IF (.CHAN_DIRECTION [.CHAN] NEQ 0)
;	  0619			THEN
;	  0620			    ERROR (UPLIT (%ASCIZ'CHANNEL NOT OPEN FOR INPUT - INPUT'))
;	  0621			ELSE
;	  0622			    BEGIN			!LOOKS OK
;	  0623			    CHAN_WORD_TMP = .CHAN_WORD [.CHAN];
;	  0624	
;	  0625			    IF (.CHAN_CTR [.CHAN] NEQ 0)
;	  0626			    THEN
;	  0627				BEGIN			!TAKE A BYTE FROM CURRENT WORD
;	  0628				CHARACTER = .CHAN_WORD_TMP<(CASE .CHAN_CTR [.CHAN] FROM 1 TO 3 OF
;	  0629					SET
;	  0630					[1] : 26;
;	  0631					[2] : 0;
;	  0632					[3] : 8;
;	  0633					TES), 8>;
;	  0634				CHAN_CTR [.CHAN] = .CHAN_CTR [.CHAN] + 1;
;	  0635	
;	  0636				IF (.CHAN_CTR [.CHAN] EQL 4) THEN CHAN_CTR [.CHAN] = 0;
;	  0637	
;	  0638				END
;	  0639			    ELSE
;	  0640				BEGIN			!NEED A NEW WORD
;	  0641				FILI = .CHAN_HEADER [.CHAN];
;	  0642	
;	  0643				IF ((FILI [2] = .FILI [2] - 1) LEQ 0)
;	  0644				THEN
;	  0645				    BEGIN		!NEED A NEW BUFFER
;	  0646	
;	  0647				    IF (UUO (1, %O'056', .CHAN, 0) NEQ 0)	!IN UUO
;	  0648				    THEN
;	  0649					BEGIN
;	  0650					BEGIN
;	  0651	
;	  0652					IF (UUO (1, %O'063', .CHAN, %O'20000') NEQ 0)	!STATZ UUO
;	  0653					THEN
;	  0654					    BEGIN
;	  0655					    UUO (0, %O'062', .CHAN, STATUS);	! GETSTS
;	  0656					    ERRMSG (0, 5, UPLIT (%ASCIZ'INPUT'), CHAN_FNAME [.CHAN*FILE_NAME_LEN],
;	  0657						.STATUS, 0, 0);
;	  0658					    END;
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  25
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (7)

;	  0659	
;	  0660					END;
;	  0661					CHARACTER = -1;	!THIS VALUE RETURNED ON EOF OR ERROR
;	  0662					END
;	  0663				    ELSE
;	  0664					BEGIN
;	  0665					FILI [1] = CH$PLUS (.FILI [1], -1);
;	  0666					CHARACTER = CH$A_RCHAR (FILI [1]);
;	  0667					END
;	  0668	
;	  0669				    END
;	  0670				ELSE
;	  0671				    CHARACTER = CH$A_RCHAR (FILI [1]);
;	  0672	
;	  0673				IF ((.CHAN_STATUS [.CHAN] EQL 2) AND (.CHARACTER GEQ 0))
;	  0674				THEN
;	  0675				    BEGIN		!WORD INPUT MODE, NOT EOF
;	  0676				    CHAN_WORD [.CHAN] = .CHARACTER;
;	  0677				    CHAN_WORD_TMP = .CHARACTER;
;	  0678				    CHAN_CTR [.CHAN] = 1;
;	  0679				    CHARACTER = .CHAN_WORD_TMP<18, 8>;
;	  0680				    END;
;	  0681	
;	  0682				END;			!OF NEED NEW LONG WORD
;	  0683	
;	  0684			    END;			!OF "LOOKS OK"
;	  0685	
;	  0686		    END;				!OF NOT CHANNEL 0
;	  0687	
;	  0688	    .CHARACTER
;	  0689	    END;					!OF INPUT ROUTINE


P.AAJ:	BYTE	(7)"I","N","V","A","L"		; INVAL					400562' 111 116 126 101 114
	BYTE	(7)"I","D"," ","C","H"		; ID CH					400563' 111 104 040 103 110
	BYTE	(7)"A","N","N","E","L"		; ANNEL					400564' 101 116 116 105 114
	BYTE	(7)" ","N","U","M","B"		;  NUMB					400565' 040 116 125 115 102
	BYTE	(7)"E","R"," ","-"," "		; ER -					400566' 105 122 040 055 040
	BYTE	(7)"I","N","P","U","T"		; INPUT					400567' 111 116 120 125 124
	BYTE	(7)000,000,000,000,000		;					400570' 000 000 000 000 000
P.AAK:	BYTE	(7)"C","H","A","N","N"		; CHANN					400571' 103 110 101 116 116
	BYTE	(7)"E","L"," ","N","O"		; EL NO					400572' 105 114 040 116 117
	BYTE	(7)"T"," ","O","P","E"		; T OPE					400573' 124 040 117 120 105
	BYTE	(7)"N"," ","-"," ","I"		; N - I					400574' 116 040 055 040 111
	BYTE	(7)"N","P","U","T",000		; NPUT					400575' 116 120 125 124 000
P.AAL:	BYTE	(7)"C","H","A","N","N"		; CHANN					400576' 103 110 101 116 116
	BYTE	(7)"E","L"," ","N","O"		; EL NO					400577' 105 114 040 116 117
	BYTE	(7)"T"," ","O","P","E"		; T OPE					400600' 124 040 117 120 105
	BYTE	(7)"N"," ","F","O","R"		; N FOR					400601' 116 040 106 117 122
	BYTE	(7)" ","I","N","P","U"		;  INPU					400602' 040 111 116 120 125
	BYTE	(7)"T"," ","-"," ","I"		; T - I					400603' 124 040 055 040 111
	BYTE	(7)"N","P","U","T",000		; NPUT					400604' 116 120 125 124 000
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  26
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (7)

P.AAM:	BYTE	(7)"I","N","P","U","T"		; INPUT					400605' 111 116 120 125 124
	BYTE	(7)000,000,000,000,000		;					400606' 000 000 000 000 000


INPUT:: PUSH	SP,AC0				; SP,AC0				400607' 261 17 0 00 000000		0555
	PUSH	SP,AC10				; SP,AC10				400610' 261 17 0 00 000010
	PUSH	SP,AC11				; SP,AC11				400611' 261 17 0 00 000011
	MOVE	AC10,-4(SP)			; CHAN,CHANX				400612' 200 10 0 17 777774		0597
	SETZ	AC0,				; CHARACTER,				400613' 400 00 0 00 000000		0598
	JUMPL	AC10,L.48			; CHAN,L.48				400614' 321 10 0 00 400617'		0600
	CAIG	AC10,17				; CHAN,17				400615' 307 10 0 00 000017
	JRST	L.49				; L.49					400616' 254 00 0 00 400621'
L.48:	PUSH	SP,C.22				; SP,[0,,P.AAJ]				400617' 261 17 0 00 400755'		0602
	JRST	L.52				; L.52					400620' 254 00 0 00 400633'
L.49:	JUMPN	AC10,L.50			; CHAN,L.50				400621' 326 10 0 00 400624'		0605
	TTCALL	4,AC0				; 4,CHARACTER				400622' 051 04 0 00 000000		0608
	JRST	L.64				; L.64					400623' 254 00 0 00 400744'		0605
L.50:	SKIPE	CHAN_STATUS(AC10)		; CHAN_STATUS(CHAN)			400624' 332 00 0 10 000000'		0613
	JRST	L.51				; L.51					400625' 254 00 0 00 400630'
	PUSH	SP,C.23				; SP,[0,,P.AAK]				400626' 261 17 0 00 400756'		0615
	JRST	L.52				; L.52					400627' 254 00 0 00 400633'
L.51:	SKIPN	CHAN_DIRECTION(AC10)		; CHAN_DIRECTION(CHAN)			400630' 336 00 0 10 000120'		0618
	JRST	L.53				; L.53					400631' 254 00 0 00 400636'
	PUSH	SP,C.24				; SP,[0,,P.AAL]				400632' 261 17 0 00 400757'		0620
L.52:	PUSHJ	SP,ERROR			; SP,ERROR				400633' 260 17 0 00 000000*
	ADJSP	SP,-1				; SP,-1					400634' 105 17 0 00 777777
	JRST	L.64				; L.64					400635' 254 00 0 00 400744'		0618
L.53:	MOVE	AC11,CHAN_WORD(AC10)		; CHAN_WORD_TMP,CHAN_WORD(CHAN)		400636' 200 11 0 10 000060'		0623
	MOVE	AC1,CHAN_CTR(AC10)		; AC1,CHAN_CTR(CHAN)			400637' 200 01 0 10 000100'		0625
	JUMPE	AC1,L.59			; AC1,L.59				400640' 322 01 0 00 400662'
	SUBI	AC1,1				; AC1,1					400641' 275 01 0 00 000001		0628
	JRST	L.54(AC1)			; L.54(AC1)				400642' 254 00 0 01 400643'
L.54:	JRST	L.55				; L.55					400643' 254 00 0 00 400646'
	JRST	L.56				; L.56					400644' 254 00 0 00 400650'
	JRST	L.57				; L.57					400645' 254 00 0 00 400651'
L.55:	MOVEI	AC1,32				; AC1,32				400646' 201 01 0 00 000032
	JRST	L.58				; L.58					400647' 254 00 0 00 400652'
L.56:	TDZA	AC1,AC1				; AC1,AC1				400650' 634 01 0 00 000001
L.57:	MOVEI	AC1,10				; AC1,10				400651' 201 01 0 00 000010
L.58:	MOVE	AC2,C.18			; AC2,[POINT 8,CHAN_WORD_TMP,35]  <0,8> 400652' 200 02 0 00 400751'
	DPB	AC1,C.19			; AC1,[POINT 6,AC2,5]  <30,6>		400653' 137 01 0 00 400752'
	LDB	AC0,AC2				; CHARACTER,AC2				400654' 135 00 0 00 000002
	AOS	CHAN_CTR(AC10)			; CHAN_CTR(CHAN)			400655' 350 00 0 10 000100'		0634
	MOVEI	AC1,4				; AC1,4					400656' 201 01 0 00 000004		0636
	CAMN	AC1,CHAN_CTR(AC10)		; AC1,CHAN_CTR(CHAN)			400657' 316 01 0 10 000100'
	SETZM	CHAN_CTR(AC10)			; CHAN_CTR(CHAN)			400660' 402 00 0 10 000100'
	JRST	L.64				; L.64					400661' 254 00 0 00 400744'
L.59:	MOVE	AC1,CHAN_HEADER(AC10)		; FILI,CHAN_HEADER(CHAN)		400662' 200 01 0 10 000020'		0641
	SOSLE	2(AC1)				; 2(FILI)				400663' 373 00 0 01 000002		0643
	JRST	L.62				; L.62					400664' 254 00 0 00 400730'
	MOVEI	AC3,0				; AC3,0					400665' 201 03 0 00 000000		0647
	HRLI	AC3,56000			; AC3,56000				400666' 505 03 0 00 056000
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  27
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (7)

	DPB	AC10,C.20			; CHAN,[POINT 4,AC3,12]  <23,4>		400667' 137 10 0 00 400753'
	XCT	AC3				; AC3					400670' 256 00 0 00 000003
	TDZA	AC2,AC2				; AC2,AC2				400671' 634 02 0 00 000002
	MOVEI	AC2,1				; AC2,1					400672' 201 02 0 00 000001
	JUMPE	AC2,L.61			; AC2,L.61				400673' 322 02 0 00 400725'
	MOVEI	AC3,20000			; AC3,20000				400674' 201 03 0 00 020000		0652
	HRLI	AC3,63000			; AC3,63000				400675' 505 03 0 00 063000
	DPB	AC10,C.20			; CHAN,[POINT 4,AC3,12]  <23,4>		400676' 137 10 0 00 400753'
	XCT	AC3				; AC3					400677' 256 00 0 00 000003
	TDZA	AC2,AC2				; AC2,AC2				400700' 634 02 0 00 000002
	MOVEI	AC2,1				; AC2,1					400701' 201 02 0 00 000001
	JUMPE	AC2,L.60			; AC2,L.60				400702' 322 02 0 00 400723'
	MOVEI	AC1,2				; AC1,STATUS				400703' 201 01 0 00 000002		0655
	HRLI	AC1,62000			; AC1,62000				400704' 505 01 0 00 062000
	DPB	AC10,C.1			; CHAN,[POINT 4,AC1,12]  <23,4>		400705' 137 10 0 00 400441'
	XCT	AC1				; AC1					400706' 256 00 0 00 000001
	PUSH	SP,C.7				; SP,[0]				400707' 261 17 0 00 400447'		0656
	PUSH	SP,C.25				; SP,[5]				400710' 261 17 0 00 400760'
	PUSH	SP,C.26				; SP,[0,,P.AAM]				400711' 261 17 0 00 400761'
	MOVE	AC1,AC10			; AC1,CHAN				400712' 200 01 0 00 000010
	IMULI	AC1,10				; AC1,10				400713' 221 01 0 00 000010
	ADDI	AC1,CHAN_FNAME			; AC1,CHAN_FNAME			400714' 271 01 0 00 000140'
	PUSH	SP,AC1				; SP,AC1				400715' 261 17 0 00 000001
	PUSH	SP,AC2				; SP,STATUS				400716' 261 17 0 00 000002
	PUSH	SP,C.7				; SP,[0]				400717' 261 17 0 00 400447'
	PUSH	SP,C.7				; SP,[0]				400720' 261 17 0 00 400447'
	PUSHJ	SP,ERRMSG			; SP,ERRMSG				400721' 260 17 0 00 000000*
	ADJSP	SP,-7				; SP,-7					400722' 105 17 0 00 777771		0654
L.60:	SETO	AC0,				; CHARACTER,				400723' 474 00 0 00 000000		0661
	JRST	L.63				; L.63					400724' 254 00 0 00 400733'		0645
L.61:	SETO	AC2,				; AC2,					400725' 474 02 0 00 000000		0665
	ADJBP	AC2,1(AC1)			; AC2,1(FILI)				400726' 133 02 0 01 000001
	MOVEM	AC2,1(AC1)			; AC2,1(FILI)				400727' 202 02 0 01 000001
L.62:	IBP	1(AC1)				; 1(FILI)				400730' 133 00 0 01 000001		0671
	MOVE	AC0,1(AC1)			; CHARACTER,1(FILI)			400731' 200 00 0 01 000001
	ILDB	AC0,AC0				; CHARACTER,CHARACTER			400732' 134 00 0 00 000000
L.63:	MOVEI	AC1,2				; AC1,2					400733' 201 01 0 00 000002		0673
	CAME	AC1,CHAN_STATUS(AC10)		; AC1,CHAN_STATUS(CHAN)			400734' 312 01 0 10 000000'
	JRST	L.64				; L.64					400735' 254 00 0 00 400744'
	JUMPL	AC0,L.64			; CHARACTER,L.64			400736' 321 00 0 00 400744'
	MOVEM	AC0,CHAN_WORD(AC10)		; CHARACTER,CHAN_WORD(CHAN)		400737' 202 00 0 10 000060'		0676
	MOVE	AC11,AC0			; CHAN_WORD_TMP,CHARACTER		400740' 200 11 0 00 000000		0677
	MOVEI	AC1,1				; AC1,1					400741' 201 01 0 00 000001		0678
	MOVEM	AC1,CHAN_CTR(AC10)		; AC1,CHAN_CTR(CHAN)			400742' 202 01 0 10 000100'
	LDB	AC0,C.21			; CHARACTER,[POINT 8,CHAN_WORD_TMP,17]  <18,8>
						;					400743' 135 00 0 00 400754'		0679
L.64:	MOVE	AC1,AC0				; AC1,CHARACTER				400744' 200 01 0 00 000000		0555
	POP	SP,AC11				; SP,AC11				400745' 262 17 0 00 000011
	POP	SP,AC10				; SP,AC10				400746' 262 17 0 00 000010
	POP	SP,AC0				; SP,AC0				400747' 262 17 0 00 000000
	POPJ	SP,				; SP,					400750' 263 17 0 00 000000
C.18:	POINT	8,AC11,35			; 8,CHAN_WORD_TMP,35			400751' 00 10 0 00 000011
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  28
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (7)

C.19:	POINT	6,AC2,5				; 6,AC2,5				400752' 36 06 0 00 000002
C.20:	POINT	4,AC3,12			; 4,AC3,12				400753' 27 04 0 00 000003
C.21:	POINT	8,AC11,17			; 8,CHAN_WORD_TMP,17			400754' 22 10 0 00 000011
C.22:	XWD	0,P.AAJ				; 0,P.AAJ				400755' 000000	400562'
C.23:	XWD	0,P.AAK				; 0,P.AAK				400756' 000000	400571'
C.24:	XWD	0,P.AAL				; 0,P.AAL				400757' 000000	400576'
C.25:	EXP	5				; 5					400760' 000000	000005
C.26:	XWD	0,P.AAM				; 0,P.AAM				400761' 000000	400605'

; Routine Size:  107 words


;	  0690	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  29
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (8)

;	  0691	GLOBAL ROUTINE OUTPUT (CHANX, OUTWRD) : NOVALUE = 	! WRITE ON AN I/O DEVICE
;	  0692	
;	  0693	!++
;	  0694	! FUNCTIONAL DESCRIPTION:
;	  0695	!
;	  0696	!	WRITE THE SPECIFIED BYTE OR WORD OUT THROUGH THE CHANNEL.
;	  0697	!
;	  0698	! FORMAL PARAMETERS:
;	  0699	!
;	  0700	!	CHANX - THE CHANNEL TO SEND DATA THROUGH
;	  0701	!	OUTWRD - THE BYTE OR WORD TO SEND
;	  0702	!
;	  0703	! IMPLICIT INPUTS:
;	  0704	!
;	  0705	!	NONE
;	  0706	!
;	  0707	! IMPLICIT OUTPUTS:
;	  0708	!
;	  0709	!	NONE
;	  0710	!
;	  0711	! ROUTINE VALUE:
;	  0712	!
;	  0713	!	NONE
;	  0714	!
;	  0715	! SIDE EFFECTS
;	  0716	!
;	  0717	!	PLACES ONE MORE WORD OR BYTE ON THE I/O DEVICE
;	  0718	!
;	  0719	!--
;	  0720	
;	  0721	    BEGIN
;	  0722	
;	  0723	    LOCAL
;	  0724		CHAN,
;	  0725		CHAN_WORD_TMP,
;	  0726		CHARACTER,
;	  0727		FILI : REF VECTOR [3],
;	  0728		STATUS;
;	  0729	
;	  0730	    BUILTIN
;	  0731		UUO;
;	  0732	
;	  0733	    CHAN = .CHANX;
;	  0734	
;	  0735	    IF ((.CHAN LSS 0) OR (.CHAN GTR 15))
;	  0736	    THEN
;	  0737		ERROR (UPLIT (%ASCIZ'INVALID CHANNEL NUMBER - OUTPUT'))
;	  0738	    ELSE
;	  0739	
;	  0740		IF (.CHAN EQL 0)
;	  0741		THEN
;	  0742		    BEGIN				!CHANNEL 0 IS THE TERMINAL
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  30
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (8)

;	  0743		    OUTPUT(1,.OUTWRD);			!LOG TERMINAL OUTPUT TO CHAN 1
;	  0744		    UUO (0, %O'051', 1, OUTWRD);	!OUTCHR
;	  0745		    END
;	  0746		ELSE
;	  0747		    BEGIN				!NOT CHANNEL 0
;	  0748	
;	  0749		    IF (.CHAN_STATUS [.CHAN] EQL 0)
;	  0750		    THEN
;	  0751			ERROR (UPLIT (%ASCIZ'CHANNEL NOT OPEN - OUTPUT'))
;	  0752		    ELSE
;	  0753	
;	  0754			IF (.CHAN_DIRECTION [.CHAN] NEQ 1)
;	  0755			THEN
;	  0756			    ERROR (UPLIT (%ASCIZ'CHANNEL NOT OPEN FOR OUTPUT - OUTPUT'))
;	  0757			ELSE
;	  0758			    BEGIN			!LOOKS OK
;	  0759			    CHAN_WORD_TMP = .CHAN_WORD [.CHAN];
;	  0760	
;	  0761			    IF (.CHAN_STATUS [.CHAN] EQL 2)
;	  0762			    THEN
;	  0763				BEGIN			!BINARY MODE, PACK BYTES
;	  0764				CHAN_WORD_TMP<(CASE .CHAN_CTR [.CHAN] FROM 0 TO 3 OF
;	  0765					SET
;	  0766					[0] : 18;
;	  0767					[1] : 26;
;	  0768					[2] : 0;
;	  0769					[3] : 8;
;	  0770					TES), 8> = .OUTWRD;
;	  0771				CHAN_CTR [.CHAN] = .CHAN_CTR [.CHAN] + 1;
;	  0772	
;	  0773				IF (.CHAN_CTR [.CHAN] EQL 4) THEN CHAN_CTR [.CHAN] = 0;
;	  0774	
;	  0775				END			!BINARY MODE PACKING
;	  0776			    ELSE
;	  0777				CHAN_WORD_TMP = .OUTWRD<0, 7>;
;	  0778	
;	  0779			    IF (.CHAN_CTR [.CHAN] EQL 0)
;	  0780			    THEN
;	  0781				BEGIN			!NEED TO WRITE LONG WORD
;	  0782				FILI = .CHAN_HEADER [.CHAN];
;	  0783	
;	  0784				IF ((FILI [2] = .FILI [2] - 1) LEQ 0)
;	  0785				THEN
;	  0786				    BEGIN		!DUMP BUFFER
;	  0787	
;	  0788				    IF (UUO (1, %O'057', .CHAN, 0) NEQ 0)	!OUT UUO
;	  0789				    THEN
;	  0790					BEGIN
;	  0791					UUO (0, %O'062', .CHAN, STATUS);	! GETSTS
;	  0792					ERRMSG (0, 5, UPLIT (%ASCIZ'OUTPUT'), CHAN_FNAME [.CHAN*FILE_NAME_LEN],
;	  0793					    .STATUS, 0, 0);
;	  0794					END
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  31
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (8)

;	  0795				    ELSE
;	  0796					FILI [1] = CH$PLUS (.FILI [1], -1);
;	  0797	
;	  0798				    END;
;	  0799	
;	  0800				CH$A_WCHAR (.CHAN_WORD_TMP, FILI [1]);
;	  0801				END;			!OF NEED TO WRITE LONG WORD
;	  0802	
;	  0803			    CHAN_WORD [.CHAN] = .CHAN_WORD_TMP;
;	  0804			    END;			!OF "LOOKS OK"
;	  0805	
;	  0806		    END;				!OF NOT CHANNEL 0
;	  0807	
;	  0808	    END;					!OF OUTPUT ROUTINE


P.AAN:	BYTE	(7)"I","N","V","A","L"		; INVAL					400762' 111 116 126 101 114
	BYTE	(7)"I","D"," ","C","H"		; ID CH					400763' 111 104 040 103 110
	BYTE	(7)"A","N","N","E","L"		; ANNEL					400764' 101 116 116 105 114
	BYTE	(7)" ","N","U","M","B"		;  NUMB					400765' 040 116 125 115 102
	BYTE	(7)"E","R"," ","-"," "		; ER -					400766' 105 122 040 055 040
	BYTE	(7)"O","U","T","P","U"		; OUTPU					400767' 117 125 124 120 125
	BYTE	(7)"T",000,000,000,000		; T					400770' 124 000 000 000 000
P.AAO:	BYTE	(7)"C","H","A","N","N"		; CHANN					400771' 103 110 101 116 116
	BYTE	(7)"E","L"," ","N","O"		; EL NO					400772' 105 114 040 116 117
	BYTE	(7)"T"," ","O","P","E"		; T OPE					400773' 124 040 117 120 105
	BYTE	(7)"N"," ","-"," ","O"		; N - O					400774' 116 040 055 040 117
	BYTE	(7)"U","T","P","U","T"		; UTPUT					400775' 125 124 120 125 124
	BYTE	(7)000,000,000,000,000		;					400776' 000 000 000 000 000
P.AAP:	BYTE	(7)"C","H","A","N","N"		; CHANN					400777' 103 110 101 116 116
	BYTE	(7)"E","L"," ","N","O"		; EL NO					401000' 105 114 040 116 117
	BYTE	(7)"T"," ","O","P","E"		; T OPE					401001' 124 040 117 120 105
	BYTE	(7)"N"," ","F","O","R"		; N FOR					401002' 116 040 106 117 122
	BYTE	(7)" ","O","U","T","P"		;  OUTP					401003' 040 117 125 124 120
	BYTE	(7)"U","T"," ","-"," "		; UT -					401004' 125 124 040 055 040
	BYTE	(7)"O","U","T","P","U"		; OUTPU					401005' 117 125 124 120 125
	BYTE	(7)"T",000,000,000,000		; T					401006' 124 000 000 000 000
P.AAQ:	BYTE	(7)"O","U","T","P","U"		; OUTPU					401007' 117 125 124 120 125
	BYTE	(7)"T",000,000,000,000		; T					401010' 124 000 000 000 000


OUTPUT::PUSH	SP,AC0				; SP,AC0				401011' 261 17 0 00 000000		0691
	PUSH	SP,AC10				; SP,AC10				401012' 261 17 0 00 000010
	PUSH	SP,AC11				; SP,AC11				401013' 261 17 0 00 000011
	MOVE	AC10,-5(SP)			; CHAN,CHANX				401014' 200 10 0 17 777773		0733
	JUMPL	AC10,L.65			; CHAN,L.65				401015' 321 10 0 00 401020'		0735
	CAIG	AC10,17				; CHAN,17				401016' 307 10 0 00 000017
	JRST	L.66				; L.66					401017' 254 00 0 00 401022'
L.65:	PUSH	SP,C.30				; SP,[0,,P.AAN]				401020' 261 17 0 00 401160'		0737
	JRST	L.69				; L.69					401021' 254 00 0 00 401041'
L.66:	JUMPN	AC10,L.67			; CHAN,L.67				401022' 326 10 0 00 401031'		0740
	PUSH	SP,C.13				; SP,[1]				401023' 261 17 0 00 400455'		0743
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  32
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (8)

	PUSH	SP,-5(SP)			; SP,OUTWRD				401024' 261 17 0 17 777773
	PUSHJ	SP,OUTPUT			; SP,OUTPUT				401025' 260 17 0 00 401011'
	TTCALL	1,-6(SP)			; 1,OUTWRD				401026' 051 01 0 17 777772		0744
	ADJSP	SP,-2				; SP,-2					401027' 105 17 0 00 777776		0742
	JRST	L.82				; L.82					401030' 254 00 0 00 401151'		0740
L.67:	MOVE	AC0,CHAN_STATUS(AC10)		; AC0,CHAN_STATUS(CHAN)			401031' 200 00 0 10 000000'		0749
	JUMPN	AC0,L.68			; AC0,L.68				401032' 326 00 0 00 401035'
	PUSH	SP,C.31				; SP,[0,,P.AAO]				401033' 261 17 0 00 401161'		0751
	JRST	L.69				; L.69					401034' 254 00 0 00 401041'
L.68:	MOVEI	AC1,1				; AC1,1					401035' 201 01 0 00 000001		0754
	CAMN	AC1,CHAN_DIRECTION(AC10)	; AC1,CHAN_DIRECTION(CHAN)		401036' 316 01 0 10 000120'
	JRST	L.70				; L.70					401037' 254 00 0 00 401044'
	PUSH	SP,C.32				; SP,[0,,P.AAP]				401040' 261 17 0 00 401162'		0756
L.69:	PUSHJ	SP,ERROR			; SP,ERROR				401041' 260 17 0 00 000000*
	ADJSP	SP,-1				; SP,-1					401042' 105 17 0 00 777777
	JRST	L.82				; L.82					401043' 254 00 0 00 401151'		0754
L.70:	MOVE	AC11,CHAN_WORD(AC10)		; CHAN_WORD_TMP,CHAN_WORD(CHAN)		401044' 200 11 0 10 000060'		0759
	CAIE	AC0,2				; AC0,2					401045' 302 00 0 00 000002		0761
	JRST	L.77				; L.77					401046' 254 00 0 00 401075'
	MOVE	AC0,CHAN_CTR(AC10)		; AC0,CHAN_CTR(CHAN)			401047' 200 00 0 10 000100'		0764
	MOVE	AC1,AC0				; AC1,AC0				401050' 200 01 0 00 000000
	JRST	L.71(AC1)			; L.71(AC1)				401051' 254 00 0 01 401052'
L.71:	JRST	L.72				; L.72					401052' 254 00 0 00 401056'
	JRST	L.73				; L.73					401053' 254 00 0 00 401060'
	JRST	L.74				; L.74					401054' 254 00 0 00 401062'
	JRST	L.75				; L.75					401055' 254 00 0 00 401063'
L.72:	MOVEI	AC1,22				; AC1,22				401056' 201 01 0 00 000022
	JRST	L.76				; L.76					401057' 254 00 0 00 401064'
L.73:	MOVEI	AC1,32				; AC1,32				401060' 201 01 0 00 000032
	JRST	L.76				; L.76					401061' 254 00 0 00 401064'
L.74:	TDZA	AC1,AC1				; AC1,AC1				401062' 634 01 0 00 000001
L.75:	MOVEI	AC1,10				; AC1,10				401063' 201 01 0 00 000010
L.76:	MOVE	AC0,C.18			; AC0,[POINT 8,AC11,35]  <0,8>		401064' 200 00 0 00 400751'		0770
	DPB	AC1,C.27			; AC1,[POINT 6,AC0,5]  <30,6>		401065' 137 01 0 00 401155'
	MOVE	AC2,-4(SP)			; AC2,OUTWRD				401066' 200 02 0 17 777774
	DPB	AC2,AC0				; AC2,AC0				401067' 137 02 0 00 000000
	AOS	CHAN_CTR(AC10)			; CHAN_CTR(CHAN)			401070' 350 00 0 10 000100'		0771
	MOVEI	AC0,4				; AC0,4					401071' 201 00 0 00 000004		0773
	CAMN	AC0,CHAN_CTR(AC10)		; AC0,CHAN_CTR(CHAN)			401072' 316 00 0 10 000100'
	SETZM	CHAN_CTR(AC10)			; CHAN_CTR(CHAN)			401073' 402 00 0 10 000100'
	JRST	L.78				; L.78					401074' 254 00 0 00 401076'
L.77:	LDB	AC11,C.28			; CHAN_WORD_TMP,[POINT 7,OUTWRD,35]  <0,7>
						;					401075' 135 11 0 00 401156'		0777
L.78:	SKIPE	CHAN_CTR(AC10)			; CHAN_CTR(CHAN)			401076' 332 00 0 10 000100'		0779
	JRST	L.81				; L.81					401077' 254 00 0 00 401150'
	MOVE	AC0,CHAN_HEADER(AC10)		; FILI,CHAN_HEADER(CHAN)		401100' 200 00 0 10 000020'		0782
	MOVE	AC1,AC0				; AC1,FILI				401101' 200 01 0 00 000000		0784
	SOS	2(AC1)				; 2(AC1)				401102' 370 00 0 01 000002
	MOVE	AC1,AC0				; AC1,FILI				401103' 200 01 0 00 000000
	SKIPLE	2(AC1)				; 2(AC1)				401104' 333 00 0 01 000002
	JRST	L.80				; L.80					401105' 254 00 0 00 401143'
	MOVEI	AC2,0				; AC2,0					401106' 201 02 0 00 000000		0788
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  33
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (8)

	HRLI	AC2,57000			; AC2,57000				401107' 505 02 0 00 057000
	DPB	AC10,C.29			; CHAN,[POINT 4,AC2,12]  <23,4>		401110' 137 10 0 00 401157'
	XCT	AC2				; AC2					401111' 256 00 0 00 000002
	TDZA	AC1,AC1				; AC1,AC1				401112' 634 01 0 00 000001
	MOVEI	AC1,1				; AC1,1					401113' 201 01 0 00 000001
	JUMPE	AC1,L.79			; AC1,L.79				401114' 322 01 0 00 401136'
	MOVEI	AC1,2				; AC1,STATUS				401115' 201 01 0 00 000002		0791
	HRLI	AC1,62000			; AC1,62000				401116' 505 01 0 00 062000
	DPB	AC10,C.1			; CHAN,[POINT 4,AC1,12]  <23,4>		401117' 137 10 0 00 400441'
	XCT	AC1				; AC1					401120' 256 00 0 00 000001
	PUSH	SP,C.7				; SP,[0]				401121' 261 17 0 00 400447'		0792
	PUSH	SP,C.25				; SP,[5]				401122' 261 17 0 00 400760'
	PUSH	SP,C.33				; SP,[0,,P.AAQ]				401123' 261 17 0 00 401163'
	MOVE	AC1,AC10			; AC1,CHAN				401124' 200 01 0 00 000010
	IMULI	AC1,10				; AC1,10				401125' 221 01 0 00 000010
	ADDI	AC1,CHAN_FNAME			; AC1,CHAN_FNAME			401126' 271 01 0 00 000140'
	PUSH	SP,AC1				; SP,AC1				401127' 261 17 0 00 000001
	PUSH	SP,AC2				; SP,STATUS				401130' 261 17 0 00 000002
	PUSH	SP,C.7				; SP,[0]				401131' 261 17 0 00 400447'
	PUSH	SP,C.7				; SP,[0]				401132' 261 17 0 00 400447'
	PUSHJ	SP,ERRMSG			; SP,ERRMSG				401133' 260 17 0 00 000000*
	ADJSP	SP,-7				; SP,-7					401134' 105 17 0 00 777771		0790
	JRST	L.80				; L.80					401135' 254 00 0 00 401143'		0788
L.79:	SETO	AC1,				; AC1,					401136' 474 01 0 00 000000		0796
	MOVE	AC2,AC0				; AC2,FILI				401137' 200 02 0 00 000000
	ADJBP	AC1,1(AC2)			; AC1,1(AC2)				401140' 133 01 0 02 000001
	MOVE	AC2,AC0				; AC2,FILI				401141' 200 02 0 00 000000
	MOVEM	AC1,1(AC2)			; AC1,1(AC2)				401142' 202 01 0 02 000001
L.80:	MOVE	AC1,AC0				; AC1,FILI				401143' 200 01 0 00 000000		0800
	IBP	1(AC1)				; 1(AC1)				401144' 133 00 0 01 000001
	MOVE	AC3,AC0				; AC3,FILI				401145' 200 03 0 00 000000
	MOVE	AC2,1(AC3)			; AC2,1(AC3)				401146' 200 02 0 03 000001
	IDPB	AC11,AC2			; CHAN_WORD_TMP,AC2			401147' 136 11 0 00 000002
L.81:	MOVEM	AC11,CHAN_WORD(AC10)		; CHAN_WORD_TMP,CHAN_WORD(CHAN)		401150' 202 11 0 10 000060'		0803
L.82:	POP	SP,AC11				; SP,AC11				401151' 262 17 0 00 000011		0691
	POP	SP,AC10				; SP,AC10				401152' 262 17 0 00 000010
	POP	SP,AC0				; SP,AC0				401153' 262 17 0 00 000000
	POPJ	SP,				; SP,					401154' 263 17 0 00 000000
C.27:	POINT	6,AC0,5				; 6,AC0,5				401155' 36 06 0 00 000000
C.28:	POINT	7,-4(SP),35			; 7,OUTWRD,35				401156' 00 07 0 17 777774
C.29:	POINT	4,AC2,12			; 4,AC2,12				401157' 27 04 0 00 000002
C.30:	XWD	0,P.AAN				; 0,P.AAN				401160' 000000	400762'
C.31:	XWD	0,P.AAO				; 0,P.AAO				401161' 000000	400771'
C.32:	XWD	0,P.AAP				; 0,P.AAP				401162' 000000	400777'
C.33:	XWD	0,P.AAQ				; 0,P.AAQ				401163' 000000	401007'

; Routine Size:  107 words


;	  0809	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  34
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (9)

;	  0810	GLOBAL ROUTINE STOP_PROGRAM : NOVALUE = 		!TERMINATE PROGRAM
;	  0811	
;	  0812	!++
;	  0813	! FUNCTIONAL DESCRIPTION:
;	  0814	!
;	  0815	!
;	  0816	!	TERMINATE PROGRAM EXECUTION PROBABLY DUE TO SOME FATAL
;	  0817	!	 ERROR. USES "EXIT" UUO.
;	  0818	!
;	  0819	!
;	  0820	! FORMAL PARAMETERS:
;	  0821	!
;	  0822	!	NONE
;	  0823	!
;	  0824	! IMPLICIT INPUTS:
;	  0825	!
;	  0826	!	NONE
;	  0827	!
;	  0828	! IMPLICIT OUTPUTS:
;	  0829	!
;	  0830	!	NONE
;	  0831	!
;	  0832	! ROUTINE VALUE:
;	  0833	!
;	  0834	!	NONE
;	  0835	!
;	  0836	! SIDE EFFECTS
;	  0837	!
;	  0838	!	HALTS THE PROGRAM
;	  0839	!
;	  0840	!--
;	  0841	
;	  0842	    BEGIN
;	  0843	
;	  0844	    BUILTIN
;	  0845		UUO;
;	  0846	
;	  0847	    UUO (0, %O'047', 1, %O'12');
;	  0848	    END;					!OF STOP_PROGRAM


STOP_PROGRAM::
	CALLI	1,12				; 1,12					401164' 047 01 0 00 000012		0847
	POPJ	SP,				; SP,					401165' 263 17 0 00 000000		0810

; Routine Size:  2 words


;	  0849	
;	  0850	!
;	  0851	END
;	  0852	
FIO10								25-Jan-1983 10:14:51	TOPS-20 Bliss-36 2A(142)	    Page  35
X2.0-1								 1-Jan-1983 15:42:42	NETPKG:<VNP36>VFIO10.BLI.7 (9)

;	  0853	ELUDOM



	END

; Low  segment length:     224 words
; High segment length:     630 words





;	  0854	! Local Modes:
;	  0855	! Comment Start:!
;	  0856	! Comment Column:36
;	  0857	! Auto Save Mode:2
;	  0858	! Mode:Fundamental
;	  0859	! End:
; Size:		541 code + 313 data words
; Run Time:	00:10.1
; Elapsed Time:	00:31.2
; Memory Used:	32 pages
; Compilation Complete
ACCUM_CTR			 272	 328#	 345#	 358#	 366#	 386#	 394	 397#
ACCUM_PTR			 273	 327#	 350	 359#	 367#
ACCUM				 271	 322#	 327	 356	 357#	 359	 364	 365#	 367	 384	 385#	 392
				 396#
ASCII_PTR			 166	 210
BUF_PTR				 274	 431#	 438	 439
CHAN				 275	 296#	 299	 304	 309	 326	 424	 426	 439	 446	 448	 454
				 456	 464	 465	 466	 515	 520#	 522	 527	 532	 538	 543	 547
				 548	 549	 550	 588	 597#	 600	 605	 613	 618	 623	 625	 628
				 634	 636	 641	 647	 652	 655	 656	 673	 676	 678	 724	 733#
				 735	 740	 749	 754	 759	 761	 764	 771	 773	 779	 782	 788
				 791	 792	 803
CHANX				 228	 296	 483	 520	 555	 597	 691	 733
CHAN_BUFFER			 105	 439#	 548
CHAN_CTR			 107	 466#	 625	 628	 634#	 636#	 678#	 764	 771#	 773#	 779
CHAN_DIRECTION			 108	 465#	 538	 618	 754
CHAN_FNAME			 114	 326	 656	 792
CHAN_HEADER			 104	 424#	 549	 641	 782
CHAN_STATUS			 103	 309	 464#	 532	 550#	 613	 673	 749	 761
CHAN_WORD			 106	 623	 676#	 759	 803#
CHAN_WORD_TMP			 589	 623#	 628	 677#	 679	 725	 759#	 764#	 777#	 800	 803
CHAR				 203	 211#	 217#	 219	 223	 276	 333#	 334	 336	 350
CHARACTER			 590	 598#	 608	 628#	 661#	 666#	 671#	 673	 676	 677	 679#	 688
				 726
CHAR_CTR			 204	 212#	 221#	 223
CLOSE				  78	 483*
COUNTER				 542
DEFEXT				 228	 402
DEV_NAME			 277	 319#	 356#	 400#	 410
END_SCAN			 278	 323#	 340#	 375
ERRMSG				 122	 347	 371	 394	 406	 414	 427	 433	 460	 656	 792
ERROR				 121*	 301	 306	 311	 316	 524	 529	 534	 602	 615	 620	 737
				 751	 756
FILE_EXT			 280	 321#	 389	 392#	 402#	 441
FILE_NAME			 279	 320#	 364#	 381	 384#	 404	 440
FILE_NAME_LEN			 111#	 114	 326	 656	 792
FILI				 591	 641#	 643#	 665#	 666	 671	 727	 782#	 784#	 796#	 800
FILN_PTR			 281	 326#	 334
FIL_PTR				 282	 325#	 333
FIO10				   2#
FNAME				 228	 325	 348	 371	 394	 406	 427	 460
FRESTG				 124	 548	 549
GETSTG				 123	 412	 431
HEADER_PTR			 283	 412#	 420	 422	 424
INPTR				 202	 210#	 217
INPUT				  79	 555*
IO				 228	 418	 444	 452	 465
LOOKUP_BLOCK			 284	 440#	 441#	 442#	 454	 456	 461
MODE				 228	 314	 409	 464
OPEN				  77	 228*
OPEN_BLOCK			 285	 409#	 410#	 420#	 422#	 426
OUTPTR				 201	 209#	 219
OUTPUT				  80	 543	 691*	 743
OUTWRD				 691	 743	 744	 770	 777
RESET_ALL			  75	 126*
RESULT				 205	 208#	 209	 225	 286	 297#	 467#	 480
ROUTINE_NAME			 268#	 347	 371	 394	 406	 414	 427	 433	 460
SAVEJOBFF			 287	 437#	 450
SIXBIT				  76	 166*	 400	 402
STATUS				 592	 655	 657	 728	 791	 793
STOP_PROGRAM			  81#	 810*
SUCCESS				 288	 454#	 456#	 458
UUO				 161	 163	 294	 426	 446	 448#	 454	 456	 518	 547	 595	 608
				 647	 652	 655	 731	 744	 788	 791	 845	 847