;   0001  0	MODULE KERFIL (IDENT = '3.3.119',
;   0002  0	    ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)) =
;   0003  1	BEGIN
;   0004  1	!<BLF/WIDTH:90>
;   0005  1	 
;   0006  1	!++
;   0007  1	! FACILITY:
;   0008  1	!	KERMIT-32 Microcomputer to mainframe file transfer utility.
;   0009  1	!
;   0010  1	! ABSTRACT:
;   0011  1	!	KERFIL contains all of the file processing for KERMIT-32.  This
;   0012  1	!	module contains the routines to input/output characters to files
;   0013  1	!	and to open and close the files.
;   0014  1	!
;   0015  1	! ENVIRONMENT:
;   0016  1	!	VAX/VMS user mode.
;   0017  1	!
;   0018  1	! AUTHOR: Robert C. McQueen, CREATION DATE: 28-March-1983
;   0019  1	!
;   0020  1	!--
;   0021  1	 
;   0022  1	 %SBTTL 'Table of Contents'
;   0023  1	 %SBTTL 'Revision History'
;   0024  1	 
;   0025  1	!++
;   0026  1	!
;   0027  1	! 1.0.000	By: Robert C. McQueen		On: 28-March-1983
;   0028  1	!		Create this module.
;   0029  1	! 1.0.001	By: Robert C. McQueen		On: 4-April-1983
;   0030  1	!		Remove checks for <FF> in the input data stream.
;   0031  1	!
;   0032  1	! 1.0.002	By: Robert C. McQueen		On: 31-May-1983
;   0033  1	!		Fix a bad check in wildcard processing.
;   0034  1	!
;   0035  1	! 1.0.003	By: Nick Bush			On: 13-June-1983
;   0036  1	!		Add default file spec of .;0 so that wild-carded
;   0037  1	!		file types don't cause all version of a file to
;   0038  1	!		be transferred.
;   0039  1	!
;   0040  1	! 1.0.004	By: Robert C. McQueen		On: 20-July-1983
;   0041  1	!		Strip off the parity bit on the compares for incoming ASCII
;   0042  1	!		files.
;   0043  1	!
;   0044  1	! 1.2.005	By: Robert C. McQueen		On: 15-August-1983
;   0045  1	!		Attempt to improve the GET%FILE and make it smaller.
;   0046  1	!		Also start the implementation of the BLOCK file processing.
;   0047  1	!
;   0048  1	! 2.0.006	Release VAX/VMS Kermit-32 version 2.0
;   0049  1	!
;   0050  1	! 2.0.016	By: Nick Bush			On: 4-Dec-1983
;   0051  1	!		Change how binary files are written to (hopefully) improve
;   0052  1	!		the performance.  We will now use 510 records and only
;   0053  1	!		write out the record when it is filled (instead of writing
;   0054  1	!		one record per packet).  This should cut down on the overhead
;   0055  1	!		substantially.
;   0056  1	!
;   0057  1	! 2.0.017	By: Nick Bush			On: 9-Dec-1983
;   0058  1	!		Fix processing for VFC format files.  Also fix GET_ASCII
;   0059  1	!		for PRN and FTN record types.  Change GET_ASCII so that
;   0060  1	!		'normal' CR records get sent with trailing CRLF's instead
;   0061  1	!		of <LF>record<CR>.  That was confusing too many people.
;   0062  1	!
;   0063  1	! 2.0.022	By: Nick Bush			On: 15-Dec-1983
;   0064  1	!		Add Fixed record size (512 byte) format for writing files.
;   0065  1	!		This can be used for .EXE files.  Also clean up writing
;   0066  1	!		ASCII files so that we don't lose any characters.
;   0067  1	!
;   0068  1	! 2.0.024	By: Robert C. McQueen		On: 19-Dec-1983
;   0069  1	!		Delete FILE_DUMP.
;   0070  1	!
;   0071  1	! 2.0.026	By: Nick Bush			On: 3-Jan-1983
;   0072  1	!		Add options for format of file specification to be
;   0073  1	!		sent in file header packets.  Also type out full file
;   0074  1	!		specification being sent/received instead of just
;   0075  1	!		the name we are telling the other end to use.
;   0076  1	!
;   0077  1	! 2.0.030	By: Nick Bush			On: 3-Feb-1983
;   0078  1	!		Add the capability of receiving a file with a different
;   0079  1	!		name than given by KERMSG.  The RECEIVE and GET commands
;   0080  1	!		now really are different.
;   0081  1	!
;   0082  1	! 2.0.035	By: Nick Bush				On: 8-March-1984
;   0083  1	!		Add LOG SESSION command to set a log file for CONNECT.
;   0084  1	!		While we are doing so, clean up the command parsing a little
;   0085  1	!		so that we don't have as many COPY_xxx routines.
;   0086  1	!
;   0087  1	! 2.0.036	By: Nick Bush				On: 15-March-1984
;   0088  1	!		Fix PUT_FILE to correctly handle carriage returns which are
;   0089  1	!		not followed by line feeds.  Count was being decremented
;   0090  1	!		Instead of incremented.
;   0091  1	!
;   0092  1	! 2.0.040	By: Nick Bush				On: 22-March-1984
;   0093  1	!		Fix processing of FORTRAN carriage control to handle lines
;   0094  1	!		which do not contain the carriage control character (i.e., zero
;   0095  1	!		length records).  Previously, this type of record was sending
;   0096  1	!		infinite nulls.
;   0097  1	!
;   0098  1	! 3.0.045	Start of version 3.
;   0099  1	!
;   0100  1	! 3.0.046	By: Nick Bush				On: 29-March-1984
;   0101  1	!		Fix debugging log file to correctly set/clear file open
;   0102  1	!		flag.  Also make log files default to .LOG.
;   0103  1	!
;   0104  1	! 3.0.050	By: Nick Bush				On: 2-April-1984
;   0105  1	!		Add SET SERVER_TIMER to determine period between idle naks.
;   0106  1	!		Also allow for a routine to process file specs before
;   0107  1	!		FILE_OPEN uses them.  This allows individual sites to
;   0108  1	!		restrict the format of file specifications used by Kermit.
;   0109  1	!
;   0110  1	! 3.1.053	By: Robert C. McQueen			On: 9-July-1984
;   0111  1	!		Fix FORTRAN carriage control processing to pass along
;   0112  1	!		any character from the carriage control column that is
;   0113  1	!		not really carriage control.
;   0114  1	!
;   0115  1	! Start version 3.2
;   0116  1	!
;   0117  1	! 3.2.067	By: Robert C. McQueen			On: 8-May-1985
;   0118  1	!		Use $GETDVIW instead of $GETDVI.
;   0119  1	!
;   0120  1	! 3.2.070	By: David Stevens			On: 16-July-1985
;   0121  1	!		Put "Sending: " prompt into NEXT_FILE routine, to make
;   0122  1	!		VMS KERMIT similar to KERMIT-10.
;   0123  1	!
;   0124  1	! 3.2.077	By: Robert McQueen			On: 8-May-1986
;   0125  1	!		Fix FORTRAN CC once and for all (I hope).
;   0126  1	!
;   0127  1	! Start of version 3.3
;   0128  1	!
;   0129  1	! 3.3.105	By: Robert McQueen			On: 8-July-1986
;   0130  1	!		Do some clean up and attempt to fix LINK-W-TRUNC errors
;   0131  1	!		from a BLISS-32 bug.
;   0132  1	!
;   0133  1	! 3.3.106	By: Robert McQueen			On: 8-July-1986
;   0134  1	!		Fix problem of closing a fixed file and losing data.
;   0135  1	!
;   0136  1	! 3.3.111	By: Robert McQueen		    On: 2-Oct-1986
;   0137  1	!		Make Kermit-32 not eat the parity from a CR if a LF doesn't
;   0138  1	!		follow it when writing an ASCII file.
;   0139  1	!
;   0140  1	! 3.3.112	JHW0001		Jonathan H. Welch, 	28-Apr-1988 12:11
;   0141  1	!		Fix the message generated in NEXT_FILE so that the
;   0142  1	!		filenames displayed (i.e. Sending: foo.bar;1 as foo.bar)
;   0143  1	!		are always terminated by a null (ASCIZ).
;   0144  1	!
;   0145  1	! 3.3.117	JHW006		Jonathan H. Welch,	12-May-1988
;   0146  1	!		Calls to LIB$SIGNAL with multiple arguments were
;   0147  1	!		not coded correctly.  For calls with multiple arguments
;   0148  1	!		an argument count was added.
;   0149  1	!		Minor changes to KERM_HANDLER to make use of the changed
;   0150  1	!		argument passing method.
;   0151  1	!
;   0152  1	! 3.3.118	JHW010		Jonathan H. Welch,	23-Apr-1990 09:42
;   0153  1	!		Added SET FILE BLOCKSIZE nnn (where nnn is the record size
;   0154  1	!		in bytes) command for incoming BINARY and FIXED file transfers.
;   0155  1	!		If no blocksize has been specified the old behavior (510 byte
;   0156  1	!		records plus 2 bytes (for CR/LF) for BINARY files and 512
;   0157  1	!		byte records for FIXED files will be used.
;   0158  1	!		Also modified SHOW FILE to display record size when appropriate.
;   0159  1	!
;   0160  1	! 3.3.119	JHW015		Jonathan H. Welch,	16-Jul-1990 15:30
;   0161  1	!		Fixed the logic in GET_ASCII which was causing an infinite
;   0162  1	!		loop for files with print file carriage control.
;   0163  1	!--
;   0164  1	 
;   0165  1	 %SBTTL 'Forward definitions'
;   0166  1	 
;   0167  1	FORWARD ROUTINE
;   0168  1	    LOG_PUT,					! Write a buffer out
;   0169  1	    DUMP_BUFFER,				! Worker routine for FILE_DUMP.
;   0170  1	    GET_BUFFER,					! Routine to do $GET
;   0171  1	    GET_ASCII,					! Get an ASCII character
;   0172  1	    GET_BLOCK,					! Get a block character
;   0173  1	    FILE_ERROR : NOVALUE;			! Error processing routine
;   0174  1	 
;   0175  1	 %SBTTL 'Require/Library files'
;   0176  1	!
;   0177  1	! INCLUDE FILES:
;   0178  1	!
;   0179  1	 
;   0180  1	LIBRARY 'SYS$LIBRARY:STARLET';
;   0181  1	 
;   0182  1	REQUIRE 'KERCOM.REQ';
;   0391  1	 
;   0392  1	 %SBTTL 'Macro definitions'
;   0393  1	!
;   0394  1	! MACROS:
;   0395  1	!
;   0396  1	 %SBTTL 'Literal symbol definitions'
;   0397  1	!
;   0398  1	! EQUATED SYMBOLS:
;   0399  1	!
;   0400  1	!
;   0401  1	! Various states for reading the data from the file
;   0402  1	!
;   0403  1	 
;   0404  1	LITERAL
;   0405  1	    F_STATE_PRE = 0,				! Prefix state
;   0406  1	    F_STATE_PRE1 = 1,				! Other prefix state
;   0407  1	    F_STATE_DATA = 2,				! Data processing state
;   0408  1	    F_STATE_POST = 3,				! Postfix processing state
;   0409  1	    F_STATE_POST1 = 4,				! Secondary postfix processing state
;   0410  1	    F_STATE_MIN = 0,				! Min state number
;   0411  1	    F_STATE_MAX = 4;				! Max state number
;   0412  1	 
;   0413  1	!
;   0414  1	! Buffer size for log file
;   0415  1	!
;   0416  1	 
;   0417  1	LITERAL
;   0418  1	    LOG_BUFF_SIZE = 256;			! Number of bytes in log file buffer
;   0419  1	 
;   0420  1	 %SBTTL 'Local storage'
;   0421  1	!
;   0422  1	! OWN STORAGE:
;   0423  1	!
;   0424  1	 
;   0425  1	OWN
;   0426  1	    SEARCH_FLAG,				! Can/cannot do $SEARCH
;   0427  1	    DEV_CLASS,					! Type of device we are reading
;   0428  1	    EOF_FLAG,					! End of file reached.
;   0429  1	    FILE_FAB : $FAB_DECL,			! FAB for file processing
;   0430  1	    FILE_NAM : $NAM_DECL,			! NAM for file processing
;   0431  1	    FILE_RAB : $RAB_DECL,			! RAB for file processing
;   0432  1	    FILE_XABFHC : $XABFHC_DECL,			! XAB for file processing
;   0433  1	    FILE_MODE,					! Mode of file (reading/writing)
;   0434  1	    FILE_REC_POINTER,				! Pointer to the record information
;   0435  1	    FILE_REC_COUNT,				! Count of the number of bytes
;   0436  1	    REC_SIZE : LONG,				! Record size
;   0437  1	    REC_ADDRESS : LONG,				! Record address
;   0438  1	    FIX_SIZE : LONG,				! Fixed control region size
;   0439  1	    FIX_ADDRESS : LONG,			! Address of buffer for fixed control region
;   0440  1	    EXP_STR : VECTOR [CH$ALLOCATION (NAM$C_MAXRSS)],
;   0441  1	    RES_STR : VECTOR [CH$ALLOCATION (NAM$C_MAXRSS)],
;   0442  1	    RES_STR_D : BLOCK [8, BYTE];		! Descriptor for the string
;   0443  1	 
;   0444  1	 %SBTTL 'Global storage'
;   0445  1	!
;   0446  1	! Global storage:
;   0447  1	!
;   0448  1	 
;   0449  1	GLOBAL
;   0450  1	
;   0451  1	    file_blocksize,				! Block size of for BINARY and FIXED files.
;   0452  1	    file_blocksize_set,				! 0=user has not specified a blocksize, 1=user has specified a blocksize
;   0453  1	    FILE_TYPE,					! Type of file being xfered
;   0454  1	    FILE_DESC : BLOCK [8, BYTE];		! File name descriptor
;   0455  1	 
;   0456  1	 %SBTTL 'External routines and storage'
;   0457  1	!
;   0458  1	! EXTERNAL REFERENCES:
;   0459  1	!
;   0460  1	!
;   0461  1	! Storage in KERMSG
;   0462  1	!
;   0463  1	 
;   0464  1	EXTERNAL
;   0465  1	    ALT_FILE_SIZE,				! Number of characters in FILE_NAME
;   0466  1	    ALT_FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],	! Storage
;   0467  1	    FILE_SIZE,					! Number of characters in FILE_NAME
;   0468  1	    FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],
;   0469  1	    TY_FIL,				! Flag that file names are being typed
;   0470  1	    CONNECT_FLAG,	! Indicator of whether we have a terminal to type on
;   0471  1	    FIL_NORMAL_FORM;				! File specification type
;   0472  1	 
;   0473  1	!
;   0474  1	!  Routines in KERTT
;   0475  1	!
;   0476  1	 
;   0477  1	EXTERNAL ROUTINE
;   0478  1	    TT_OUTPUT : NOVALUE;	! Force buffered output
;   0479  1	 
;   0480  1	!
;   0481  1	! System libraries
;   0482  1	!
;   0483  1	 
;   0484  1	EXTERNAL ROUTINE
;   0485  1	    LIB$GET_VM : ADDRESSING_MODE (GENERAL),
;   0486  1	    LIB$FREE_VM : ADDRESSING_MODE (GENERAL),
;   0487  1	    LIB$SIGNAL : ADDRESSING_MODE (GENERAL) NOVALUE;
;   0488  1	 
;   0489  1	 %SBTTL 'File processing -- FILE_INIT - Initialization'
;   0490  1	 
;   0491  1	GLOBAL ROUTINE FILE_INIT : NOVALUE =
;   0492  1	 
;   0493  1	!++
;   0494  1	! FUNCTIONAL DESCRIPTION:
;   0495  1	!
;   0496  1	!	This routine will initialize some of the storage in the file processing
;   0497  1	!	module.
;   0498  1	!
;   0499  1	! CALLING SEQUENCE:
;   0500  1	!
;   0501  1	!	FILE_INIT();
;   0502  1	!
;   0503  1	! INPUT PARAMETERS:
;   0504  1	!
;   0505  1	!	None.
;   0506  1	!
;   0507  1	! IMPLICIT INPUTS:
;   0508  1	!
;   0509  1	!	None.
;   0510  1	!
;   0511  1	! OUTPUT PARAMETERS:
;   0512  1	!
;   0513  1	!	None.
;   0514  1	!
;   0515  1	! IMPLICIT OUTPUTS:
;   0516  1	!
;   0517  1	!	None.
;   0518  1	!
;   0519  1	! COMPLETION CODES:
;   0520  1	!
;   0521  1	!	None.
;   0522  1	!
;   0523  1	! SIDE EFFECTS:
;   0524  1	!
;   0525  1	!	None.
;   0526  1	!
;   0527  1	!--
;   0528  1	 
;   0529  2	    BEGIN
;   0530  2	    FILE_TYPE = FILE_ASC;
;   0531  2	    file_blocksize = 512;
;   0532  2	    file_blocksize_set = 0;
;   0533  2	
;   0534  2	! Now set up the file specification descriptor
;   0535  2	    FILE_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0536  2	    FILE_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0537  2	    FILE_DESC [DSC$A_POINTER] = FILE_NAME;
;   0538  2	    FILE_DESC [DSC$W_LENGTH] = 0;
;   0539  2	    EOF_FLAG = FALSE;
;   0540  1	    END;					! End of FILE_INIT


	.TITLE  KERFIL
	.IDENT  \3.3.119\

	.PSECT  $OWN$,NOEXE,2

;SEARCH_FLAG
U.7:	.BLKB   4									   ;				      00000
;DEV_CLASS
U.8:	.BLKB   4									   ;				      00004
;EOF_FLAG
U.9:	.BLKB   4									   ;				      00008
;FILE_FAB
U.10:	.BLKB   80									   ;				      0000C
;FILE_NAM
U.11:	.BLKB   96									   ;				      0005C
;FILE_RAB
U.12:	.BLKB   68									   ;				      000BC
;FILE_XABFHC
U.13:	.BLKB   44									   ;				      00100
;FILE_MODE
U.14:	.BLKB   4									   ;				      0012C
;FILE_REC_POINTER
U.15:	.BLKB   4									   ;				      00130
;FILE_REC_COUNT
U.16:	.BLKB   4									   ;				      00134
;REC_SIZE
U.17:	.BLKB   4									   ;				      00138
;REC_ADDRESS
U.18:	.BLKB   4									   ;				      0013C
;FIX_SIZE
U.19:	.BLKB   4									   ;				      00140
;FIX_ADDRESS
U.20:	.BLKB   4									   ;				      00144
;EXP_STR
U.21:	.BLKB   256									   ;				      00148
;RES_STR
U.22:	.BLKB   256									   ;				      00248
;RES_STR_D
U.23:	.BLKB   8									   ;				      00348

	.PSECT  $GLOBAL$,NOEXE,2

FILE_BLOCKSIZE::
	.BLKB   4									   ;				      00000
FILE_BLOCKSIZE_SET::
	.BLKB   4									   ;				      00004
FILE_TYPE::
	.BLKB   4									   ;				      00008
FILE_DESC::
	.BLKB   8									   ;				      0000C

FNM_NORMAL==	    1
FNM_FULL==	    2
FNM_UNTRAN==	    4
PR_MIN==	    0
PR_NONE==	    0
PR_MARK==	    1
PR_EVEN==	    2
PR_ODD==	    3
PR_SPACE==	    4
PR_MAX==	    4
GC_MIN==	    1
GC_EXIT==	    1
GC_DIRECTORY==	    2
GC_DISK_USAGE==     3
GC_DELETE==	    4
GC_TYPE==	    5
GC_HELP==	    6
GC_LOGOUT==	    7
GC_LGN==	    8
GC_CONNECT==	    9
GC_RENAME==	    10
GC_COPY==	    11
GC_WHO==	    12
GC_SEND_MSG==	    13
GC_STATUS==	    14
GC_COMMAND==	    15
GC_KERMIT==	    16
GC_JOURNAL==	    17
GC_VARIABLE==	    18
GC_PROGRAM==	    19
GC_MAX==	    19
DP_FULL==	    0
DP_HALF==	    1
CHK_1CHAR==	    49
CHK_2CHAR==	    50
CHK_CRC==	    51
MAX_MSG==	    1002
	.EXTRN  ALT_FILE_SIZE, ALT_FILE_NAME, FILE_SIZE, FILE_NAME, TY_FIL, CONNECT_FLAG, FIL_NORMAL_FORM
	.EXTRN  TT_OUTPUT, LIB$GET_VM, LIB$FREE_VM, LIB$SIGNAL

	.PSECT  $CODE$,NOWRT,2

	.ENTRY  FILE_INIT, ^M<R2>		 ;FILE_INIT, Save R2		       0491 			       0004   00000
	MOVAB   G^FILE_TYPE, R2			 ;FILE_TYPE, R2			      	    	       52 00000000'  00  9E   00002
	MOVL    #1, (R2)			 ;#1, FILE_TYPE			       0530 	       62	     01  D0   00009
	MOVZWL  #512, -8(R2)			 ;#512, FILE_BLOCKSIZE		       0531 	  F8   A2     0200   8F  3C   0000C
	CLRL    -4(R2)				 ;FILE_BLOCKSIZE_SET		       0532 			FC   A2  D4   00012
	MOVL    #17694720, 4(R2)		 ;#17694720, FILE_DESC		       0538 	  04   A2 010E0000   8F  D0   00015
	MOVAB   G^FILE_NAME, 8(R2)		 ;FILE_NAME, FILE_DESC+4	       0537 	  08   A2 00000000G  00  9E   0001D
	CLRL    G^U.9				 ;U.9				       0539 		  00000000'  00  D4   00025
	RET     				 ;				       0540 				 04   0002B

; Routine Size:  44 bytes,    Routine Base:  $CODE$ + 0000


;   0541  1	 
;   0542  1	 %SBTTL 'GET_FILE'
;   0543  1	 
;   0544  1	GLOBAL ROUTINE GET_FILE (CHARACTER) =
;   0545  1	 
;   0546  1	!++
;   0547  1	! FUNCTIONAL DESCRIPTION:
;   0548  1	!
;   0549  1	!	This routine will return a character from the input file.
;   0550  1	!	The character will be stored into the location specified by
;   0551  1	!	CHARACTER.
;   0552  1	!
;   0553  1	! CALLING SEQUENCE:
;   0554  1	!
;   0555  1	!	GET_FILE (LOCATION_TO_STORE_CHAR);
;   0556  1	!
;   0557  1	! INPUT PARAMETERS:
;   0558  1	!
;   0559  1	!	LOCATION_TO_STORE_CHAR - This is the address to store the character
;   0560  1	!		into.
;   0561  1	!
;   0562  1	! IMPLICIT INPUTS:
;   0563  1	!
;   0564  1	!	None.
;   0565  1	!
;   0566  1	! OUTPUT PARAMETERS:
;   0567  1	!
;   0568  1	!	Character stored into the location specified.
;   0569  1	!
;   0570  1	! IMPLICIT OUTPUTS:
;   0571  1	!
;   0572  1	!	None.
;   0573  1	!
;   0574  1	! COMPLETION CODES:
;   0575  1	!
;   0576  1	!	True - Character stored into the location specified.
;   0577  1	!	False - End of file reached.
;   0578  1	!
;   0579  1	! SIDE EFFECTS:
;   0580  1	!
;   0581  1	!	None.
;   0582  1	!
;   0583  1	!--
;   0584  1	 
;   0585  2	    BEGIN
;   0586  2	!
;   0587  2	! Define the various condition codes that we check for in this routine
;   0588  2	!
;   0589  2	    EXTERNAL LITERAL
;   0590  2		KER_EOF;				! End of file
;   0591  2	 
;   0592  2	    LOCAL
;   0593  2		STATUS;					! Random status values
;   0594  2	 
;   0595  2	    IF .EOF_FLAG THEN RETURN KER_EOF;
;   0596  2	 
;   0597  2	    SELECTONE .FILE_TYPE OF
;   0598  2		SET
;   0599  2	 
;   0600  2		[FILE_ASC, FILE_BIN, FILE_FIX] :
;   0601  2		    STATUS = GET_ASCII (.CHARACTER);
;   0602  2	 
;   0603  2		[FILE_BLK] :
;   0604  2		    STATUS = GET_BLOCK (.CHARACTER);
;   0605  2		TES;
;   0606  2	 
;   0607  2	    RETURN .STATUS;
;   0608  1	    END;					! End of GET_FILE



	.EXTRN  KER_EOF

	.ENTRY  GET_FILE, ^M<>			 ;GET_FILE, Save nothing	       0544 			       0000   00000
	BLBC    G^U.9, 1$			 ;U.9, 1$			       0595 	       08 00000000'  00  E9   00002
	MOVL    #KER_EOF, R0			 ;#KER_EOF, R0			      	    	       50 00000000G  8F  D0   00009
	RET     				 ;				      	    				 04   00010
1$:	MOVL    G^FILE_TYPE, R0			 ;FILE_TYPE, R0			       0597 	       50 00000000'  00  D0   00011
	BLEQ    2$				 ;2$				       0600 			     05  15   00018
	CMPL    R0, #2				 ;R0, #2			      	    	       02	     50  D1   0001A
	BLEQ    3$				 ;3$				      	    			     05  15   0001D
2$:	CMPL    R0, #4				 ;R0, #4			      	    	       04	     50  D1   0001F
	BNEQ    4$				 ;4$				      	    			     0B  12   00022
3$:	PUSHL   4(AP)				 ;CHARACTER			       0601 			04   AC  DD   00024
	CALLS   #1, G^U.4			 ;#1, U.4			      	    00000000V  00	     01  FB   00027
	RET     				 ;				      	    				 04   0002E
4$:	CMPL    R0, #3				 ;R0, #3			       0603 	       03	     50  D1   0002F
	BNEQ    5$				 ;5$				      	    			     0A  12   00032
	PUSHL   4(AP)				 ;CHARACTER			       0604 			04   AC  DD   00034
	CALLS   #1, G^U.5			 ;#1, U.5			      	    00000000V  00	     01  FB   00037
5$:	RET     				 ;				       0607 				 04   0003E

; Routine Size:  63 bytes,    Routine Base:  $CODE$ + 002C


;   0609  1	 %SBTTL 'GET_ASCII - Get a character from an ASCII file'
;   0610  1	ROUTINE GET_ASCII (CHARACTER) =
;   0611  1	 
;   0612  1	!++
;   0613  1	! FUNCTIONAL DESCRIPTION:
;   0614  1	!
;   0615  1	! CALLING SEQUENCE:
;   0616  1	!
;   0617  1	! INPUT PARAMETERS:
;   0618  1	!
;   0619  1	!	None.
;   0620  1	!
;   0621  1	! IMPLICIT INPUTS:
;   0622  1	!
;   0623  1	!	None.
;   0624  1	!
;   0625  1	! OUPTUT PARAMETERS:
;   0626  1	!
;   0627  1	!	None.
;   0628  1	!
;   0629  1	! IMPLICIT OUTPUTS:
;   0630  1	!
;   0631  1	!	None.
;   0632  1	!
;   0633  1	! COMPLETION CODES:
;   0634  1	!
;   0635  1	!   KER_EOF -  End of file encountered
;   0636  1	!   KER_ILLFILTYP - Illegal file type
;   0637  1	!   KER_NORMAL - Normal return
;   0638  1	!
;   0639  1	! SIDE EFFECTS:
;   0640  1	!
;   0641  1	!	None.
;   0642  1	!
;   0643  1	!--
;   0644  1	 
;   0645  2	    BEGIN
;   0646  2	!
;   0647  2	! Status codes that are returned by this module
;   0648  2	!
;   0649  2	    EXTERNAL LITERAL
;   0650  2		KER_EOF,			! End of file encountered
;   0651  2		KER_ILLFILTYP,			! Illegal file type
;   0652  2		KER_NORMAL;			! Normal return
;   0653  2	 
;   0654  2	    OWN
;   0655  2		CC_COUNT,			! Count of the number of CC things to output
;   0656  2		CC_TYPE;			! Type of carriage control being processed.
;   0657  2	 
;   0658  2	    LOCAL
;   0659  2		STATUS,					! For status values
;   0660  2		RAT;
;   0661  2	 %SBTTL 'GET_FTN_FILE_CHARACTER - Get a character from an Fortran carriage control file'
;   0662  2	ROUTINE GET_FTN_FILE_CHARACTER (CHARACTER) = 
;   0663  2	!++
;   0664  2	! FUNCTIONAL DESCRIPTION:
;   0665  2	!
;   0666  2	!   This routine will get a character from a FORTRAN carriage control file.
;   0667  2	!   A FORTRAN carriage control file is one with FAB$M_FTN on in the FAB$B_RAT
;   0668  2	!   field.
;   0669  2	!
;   0670  2	! FORMAL PARAMETERS:
;   0671  2	!
;   0672  2	!   CHARACTER - Address of where to store the character
;   0673  2	!
;   0674  2	! IMPLICIT INPUTS:
;   0675  2	!
;   0676  2	!   CC_TYPE - Carriage control type
;   0677  2	!
;   0678  2	! IMPLICIT OUTPUTS:
;   0679  2	!
;   0680  2	!   CC_TYPE - Updated if this is the first characte of the record
;   0681  2	!
;   0682  2	! COMPLETION_CODES:
;   0683  2	!
;   0684  2	!   System service or Kermit status code
;   0685  2	!
;   0686  2	! SIDE EFFECTS:
;   0687  2	!
;   0688  2	!   Next buffer can be read from the data file.
;   0689  2	!--
;   0690  3	    BEGIN
;   0691  3	!
;   0692  3	! Dispatch according to the state of the file being read.  Beginning of
;   0693  3	! record, middle of record, end of record
;   0694  3	!
;   0695  3	    WHILE TRUE DO
;   0696  3		CASE .FILE_FAB[FAB$L_CTX] FROM F_STATE_MIN TO F_STATE_MAX OF
;   0697  3		    SET
;   0698  3	!
;   0699  3	! Here at the beginning of a record.  We must read the buffer from the file
;   0700  3	! at this point.  Once the buffer is read we must then determine what to do
;   0701  3	! with the FORTRAN carriage control that at the beginning of the buffer.
;   0702  3	!
;   0703  3		    [F_STATE_PRE ]:
;   0704  4			BEGIN	
;   0705  4	!
;   0706  4	! Local variables
;   0707  4	!
;   0708  4			LOCAL
;   0709  4			    STATUS;			    ! Status returned by the
;   0710  4							    !  GET_BUFFER routine
;   0711  4	!
;   0712  4	! Get the buffer
;   0713  4	!
;   0714  4			STATUS = GET_BUFFER ();		    ! Get a buffer from the system
;   0715  5			IF (NOT .STATUS)		    ! If this call failed
;   0716  5			    OR (.STATUS EQL KER_EOF)	    !  or we got an EOF
;   0717  4			THEN
;   0718  4			    RETURN .STATUS;		    ! Just return the status
;   0719  4	!
;   0720  4	! Here with a valid buffer full of data all set to be decoded
;   0721  4	!
;   0722  4			IF .FILE_REC_COUNT LEQ 0	    ! If nothing, use a space
;   0723  4			THEN				    !  for the carriage control
;   0724  4			    CC_TYPE = %C' '
;   0725  4			ELSE
;   0726  5			    BEGIN
;   0727  5			    CC_TYPE = CH$RCHAR_A (FILE_REC_POINTER);
;   0728  5			    FILE_REC_COUNT = .FILE_REC_COUNT - 1;
;   0729  4			    END;
;   0730  4	!
;   0731  4	! Dispatch on the type of carriage control that we are processing
;   0732  4	!
;   0733  4			SELECTONE .CC_TYPE OF
;   0734  4			    SET
;   0735  4	!
;   0736  4	! All of these just output:
;   0737  4	!   <DATA> <Carriage-control>
;   0738  4	!
;   0739  4			    [CHR_NUL, %C'+'] :
;   0740  5				BEGIN
;   0741  5				FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0742  4				END;
;   0743  4	!
;   0744  4	! This outputs:
;   0745  4	!   <LF><DATA><CR>
;   0746  4	!
;   0747  4			    [%C'$', %C' '] :
;   0748  5				BEGIN
;   0749  5				.CHARACTER = CHR_LFD;
;   0750  5				FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0751  5				RETURN KER_NORMAL;
;   0752  4				END;
;   0753  4	!
;   0754  4	! This outputs:
;   0755  4	!   <LF><LF><DATA><CR>
;   0756  4	!
;   0757  4			    [%C'0'] :
;   0758  5				BEGIN
;   0759  5				.CHARACTER = CHR_LFD;
;   0760  5				FILE_FAB [FAB$L_CTX] = F_STATE_PRE1;
;   0761  5				RETURN KER_NORMAL;
;   0762  4				END;
;   0763  4	!
;   0764  4	! This outputs:
;   0765  4	!   <FORM FEED><DATA><CR>
;   0766  4	!
;   0767  4			    [%C'1'] :
;   0768  5				BEGIN
;   0769  5				.CHARACTER = CHR_FFD;
;   0770  5				FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0771  5				RETURN KER_NORMAL;
;   0772  4				END;
;   0773  4	!
;   0774  4	! If we don't know the type of carriage control, then just return the
;   0775  4	! character we read as data and set the carriage control to be space
;   0776  4	! to fool the post processing of the record
;   0777  4	!
;   0778  4			    [OTHERWISE] :
;   0779  5				BEGIN
;   0780  5				.CHARACTER = .CC_TYPE;		! Return the character
;   0781  5				CC_TYPE = %C' ';		! Treat as space
;   0782  5				FILE_REC_POINTER = CH$PLUS(.FILE_REC_POINTER,-1);
;   0783  5				FILE_REC_COUNT = .FILE_REC_COUNT + 1;
;   0784  5				FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0785  5				RETURN KER_NORMAL
;   0786  4				END;
;   0787  4			    TES;
;   0788  4	 
;   0789  3			END;
;   0790  3	!
;   0791  3	! Here to add the second LF for the double spacing FORTRAN carriage control
;   0792  3	!
;   0793  3		    [F_STATE_PRE1 ]:
;   0794  4			BEGIN
;   0795  4			.CHARACTER = CHR_LFD;
;   0796  4			FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0797  4			RETURN KER_NORMAL;
;   0798  3			END;
;   0799  3	!
;   0800  3	! Here to read the data of the record
;   0801  3	!
;   0802  3		    [F_STATE_DATA]:
;   0803  4			BEGIN
;   0804  4	!
;   0805  4	! Here to read the data of the record and return it to the caller
;   0806  4	! This section can only return KER_NORMAL to the caller
;   0807  4	!
;   0808  4			IF .FILE_REC_COUNT LEQ 0	    ! Anything left in the buffer
;   0809  4			THEN
;   0810  4			    FILE_FAB [FAB$L_CTX] = F_STATE_POST	! No, do post processing
;   0811  4			ELSE
;   0812  5			    BEGIN
;   0813  5			    .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);	! Get a character
;   0814  5			    FILE_REC_COUNT = .FILE_REC_COUNT - 1;   ! Decrement the count
;   0815  5			    RETURN KER_NORMAL;			! Give a good return
;   0816  4			    END;
;   0817  3			END;
;   0818  3	!
;   0819  3	! Here to do post processing of the record.  At this point we are going
;   0820  3	! to store either nothing as the post fix, a carriage return for overprinting
;   0821  3	! or a carriage return and then a line feed in the POST1 state.
;   0822  3	!
;   0823  3		    [F_STATE_POST ]:
;   0824  4			BEGIN
;   0825  4			SELECTONE .CC_TYPE OF
;   0826  4			    SET
;   0827  4	!
;   0828  4	! This stat is for no carriage control on the record.  This is for
;   0829  4	! 'null' carriage control (VMS manual states: "Null carriage control 
;   0830  4	! (print buffer contents.)" and for prompt carriage control.
;   0831  4	!
;   0832  4			    [CHR_NUL, %C'$' ]:
;   0833  5				BEGIN
;   0834  5				FILE_FAB [FAB$L_CTX] = F_STATE_PRE
;   0835  4				END;
;   0836  4	!
;   0837  4	! This is the normal state, that causes the postfix for the data to be
;   0838  4	! a line feed.  
;   0839  4	!
;   0840  4			    [%C'0', %C'1', %C' ', %C'+' ]:
;   0841  5				BEGIN
;   0842  5				.CHARACTER = CHR_CRT;
;   0843  5				FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
;   0844  5				RETURN KER_NORMAL
;   0845  4				END;
;   0846  4			    TES;
;   0847  4	 
;   0848  3			END;
;   0849  3	!
;   0850  3	! Here if we are in a state that this routine doesn't set.  Just assume that
;   0851  3	! something screwed up and give an illegal file type return to the caller
;   0852  3	!
;   0853  3		    [INRANGE, OUTRANGE]:
;   0854  3			RETURN KER_ILLFILTYP;
;   0855  3	 
;   0856  3		    TES
;   0857  2	    END;



	.PSECT  $OWN$,NOEXE,2

;CC_COUNT
U.30:	.BLKB   4									   ;				      00350
;CC_TYPE
U.31:	.BLKB   4									   ;				      00354

	.EXTRN  KER_ILLFILTYP, KER_NORMAL

	.PSECT  $CODE$,NOWRT,2

;GET_FTN_FILE_CHARACTER
U.32:	.WORD   ^M<R2>				 ;Save R2			       0662 			       0004   00000
	MOVAB   G^U.10+24, R2			 ;U.10+24, R2			      	    	       52 00000000'  00  9E   00002
1$:	CASEL   (R2), #0, #4			 ;FILE_FAB+24, #0, #4		       0696 	       00	     62  CF   00009
						 ;					    			     04       0000C
2$:	.WORD   4$-2$,-				 ;4$-2$,-			      	    	     008D	   0012       0000D
		14$-2$,-			 ;14$-2$,-				    	     00B4	   0096       00011
		16$-2$,-			 ;16$-2$,-				    			   000A       00015
		18$-2$,-			 ;18$-2$,-
		3$-2$				 ;3$-2$
3$:	MOVL    #KER_ILLFILTYP, R0		 ;#KER_ILLFILTYP, R0		       0854 	       50 00000000G  8F  D0   00017
	RET     				 ;				      	    				 04   0001E
4$:	CALLS   #0, G^U.3			 ;#0, U.3			       0714 00000000V  00	     00  FB   0001F
	BLBS    R0, 5$				 ;STATUS, 5$			       0715 	       01	     50  E8   00026
	RET     				 ;				      	    				 04   00029
5$:	CMPL    R0, #KER_EOF			 ;STATUS, #KER_EOF		       0716 00000000G  8F	     50  D1   0002A
	BNEQ    6$				 ;6$				      	    			     01  12   00031
	RET     				 ;				      	    				 04   00033
6$:	TSTL    272(R2)				 ;FILE_REC_COUNT		       0722 		      0110   C2  D5   00034
	BGTR    7$				 ;7$				      	    			     07  14   00038
	MOVL    #32, 816(R2)			 ;#32, CC_TYPE			       0724 	0330   C2	     20  D0   0003A
	BRB     8$				 ;8$				      	    			     12  11   0003F
7$:	MOVL    268(R2), R0			 ;FILE_REC_POINTER, R0		       0727 	       50     010C   C2  D0   00041
	MOVZBL  (R0), 816(R2)			 ;(R0), CC_TYPE			      	    	0330   C2	     60  9A   00046
	INCL    268(R2)				 ;FILE_REC_POINTER		      	    		      010C   C2  D6   0004B
	DECL    272(R2)				 ;FILE_REC_COUNT		       0728 		      0110   C2  D7   0004F
8$:	MOVL    816(R2), R0			 ;CC_TYPE, R0			       0733 	       50     0330   C2  D0   00053
	BEQL    9$				 ;9$				       0739 			     05  13   00058
	CMPL    R0, #43				 ;R0, #43			      	    	       2B	     50  D1   0005A
	BNEQ    11$				 ;11$				      	    			     05  12   0005D
9$:	MOVL    #2, (R2)			 ;#2, FILE_FAB+24		       0741 	       62	     02  D0   0005F
10$:	BRB     1$				 ;1$				      	    			     A5  11   00062
11$:	CMPL    R0, #32				 ;R0, #32			       0747 	       20	     50  D1   00064
	BEQL    14$				 ;14$				      	    			     31  13   00067
	CMPL    R0, #36				 ;R0, #36			      	    	       24	     50  D1   00069
	BEQL    14$				 ;14$				      	    			     2C  13   0006C
	CMPL    R0, #48				 ;R0, #48			       0757 	       30	     50  D1   0006E
	BNEQ    12$				 ;12$				      	    			     09  12   00071
	MOVL    #10, @4(AP)			 ;#10, @CHARACTER		       0759 	  04   BC	     0A  D0   00073
	MOVL    #1, (R2)			 ;#1, FILE_FAB+24		       0760 	       62	     01  D0   00077
	BRB     22$				 ;22$				       0761 			     72  11   0007A
12$:	CMPL    R0, #49				 ;R0, #49			       0767 	       31	     50  D1   0007C
	BNEQ    13$				 ;13$				      	    			     06  12   0007F
	MOVL    #12, @4(AP)			 ;#12, @CHARACTER		       0769 	  04   BC	     0C  D0   00081
	BRB     15$				 ;15$				       0770 			     17  11   00085
13$:	MOVL    R0, @4(AP)			 ;R0, @CHARACTER		       0780 	  04   BC	     50  D0   00087
	MOVL    #32, 816(R2)			 ;#32, CC_TYPE			       0781 	0330   C2	     20  D0   0008B
	DECL    268(R2)				 ;FILE_REC_POINTER		       0782 		      010C   C2  D7   00090
	INCL    272(R2)				 ;FILE_REC_COUNT		       0783 		      0110   C2  D6   00094
	BRB     15$				 ;15$				       0784 			     04  11   00098
14$:	MOVL    #10, @4(AP)			 ;#10, @CHARACTER		       0795 	  04   BC	     0A  D0   0009A
15$:	MOVL    #2, (R2)			 ;#2, FILE_FAB+24		       0796 	       62	     02  D0   0009E
	BRB     22$				 ;22$				       0797 			     4B  11   000A1
16$:	TSTL    272(R2)				 ;FILE_REC_COUNT		       0808 		      0110   C2  D5   000A3
	BGTR    17$				 ;17$				      	    			     05  14   000A7
	MOVL    #3, (R2)			 ;#3, FILE_FAB+24		       0810 	       62	     03  D0   000A9
	BRB     10$				 ;10$				      	    			     B4  11   000AC
17$:	MOVL    268(R2), R0			 ;FILE_REC_POINTER, R0		       0813 	       50     010C   C2  D0   000AE
	MOVZBL  (R0), @4(AP)			 ;(R0), @CHARACTER		      	    	  04   BC	     60  9A   000B3
	INCL    268(R2)				 ;FILE_REC_POINTER		      	    		      010C   C2  D6   000B7
	DECL    272(R2)				 ;FILE_REC_COUNT		       0814 		      0110   C2  D7   000BB
	BRB     22$				 ;22$				       0815 			     2D  11   000BF
18$:	MOVL    816(R2), R0			 ;CC_TYPE, R0			       0825 	       50     0330   C2  D0   000C1
	BEQL    19$				 ;19$				       0832 			     05  13   000C6
	CMPL    R0, #36				 ;R0, #36			      	    	       24	     50  D1   000C8
	BNEQ    20$				 ;20$				      	    			     04  12   000CB
19$:	CLRL    (R2)				 ;FILE_FAB+24			       0834 			     62  D4   000CD
	BRB     10$				 ;10$				      	    			     91  11   000CF
20$:	CMPL    R0, #32				 ;R0, #32			       0840 	       20	     50  D1   000D1
	BEQL    21$				 ;21$				      	    			     12  13   000D4
	CMPL    R0, #43				 ;R0, #43			      	    	       2B	     50  D1   000D6
	BEQL    21$				 ;21$				      	    			     0D  13   000D9
	CMPL    R0, #48				 ;R0, #48			      	    	       30	     50  D1   000DB
	BLSS    10$				 ;10$				      	    			     82  19   000DE
	CMPL    R0, #49				 ;R0, #49			      	    	       31	     50  D1   000E0
	BLEQ    21$				 ;21$				      	    			     03  15   000E3
	BRW     1$				 ;1$				      	    			   FF21  31   000E5
21$:	MOVL    #13, @4(AP)			 ;#13, @CHARACTER		       0842 	  04   BC	     0D  D0   000E8
	CLRL    (R2)				 ;FILE_FAB+24			       0843 			     62  D4   000EC
22$:	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       0844 	       50 00000000G  8F  D0   000EE
	RET     				 ;				       0857 				 04   000F5

; Routine Size:  246 bytes,    Routine Base:  $CODE$ + 006B


;   0858  2	 %SBTTL 'GET_ASCII - Main logic'
;   0859  2	    RAT = .FILE_FAB [FAB$B_RAT] AND ( NOT FAB$M_BLK);
;   0860  2	 
;   0861  2	    IF .DEV_CLASS EQL DC$_MAILBOX THEN RAT = FAB$M_CR;	! Mailbox needs CR's
;   0862  2	 
;   0863  2	    WHILE TRUE DO
;   0864  3		BEGIN
;   0865  3	 
;   0866  3		SELECTONE .RAT OF
;   0867  3		    SET
;   0868  3		    
;   0869  3		    [FAB$M_FTN ]:
;   0870  4			BEGIN
;   0871  4			RETURN GET_FTN_FILE_CHARACTER (.CHARACTER)
;   0872  3			END;
;   0873  3	 
;   0874  3		    [FAB$M_PRN, FAB$M_CR] :
;   0875  3	 
;   0876  3			CASE .FILE_FAB [FAB$L_CTX] FROM F_STATE_MIN TO F_STATE_MAX OF
;   0877  3			    SET
;   0878  3	 
;   0879  3			    [F_STATE_PRE] :
;   0880  4				BEGIN
;   0881  4				STATUS = GET_BUFFER ();
;   0882  4	 
;   0883  4				IF NOT .STATUS OR .STATUS EQL KER_EOF THEN RETURN .STATUS;
;   0884  4	 
;   0885  4				SELECTONE .RAT OF
;   0886  4				    SET
;   0887  4	 
;   0888  4				    [FAB$M_CR] :
;   0889  5					BEGIN
;   0890  5					FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0891  4					END;
;   0892  4	 
;   0893  4				    [FAB$M_PRN] :
;   0894  5					BEGIN
;   0895  5	 
;   0896  5					LOCAL
;   0897  5					    TEMP_POINTER;
;   0898  5	 
;   0899  5					TEMP_POINTER = CH$PTR (.FILE_RAB [RAB$L_RHB]);
;   0900  5					CC_COUNT = CH$RCHAR_A (TEMP_POINTER);
;   0901  5					CC_TYPE = CH$RCHAR_A (TEMP_POINTER);
;   0902  5	 
;   0903  5					IF .CC_COUNT<7, 1> EQL 0
;   0904  5					THEN
;   0905  6					    BEGIN
;   0906  6	 
;   0907  6					    IF .CC_COUNT<0, 7> NEQ 0
;   0908  6					    THEN
;   0909  7						BEGIN
;   0910  7						.CHARACTER = CHR_LFD;
;   0911  7						CC_COUNT = .CC_COUNT - 1;
;   0912  7	 
;   0913  7						IF .CC_COUNT GTR 0
;   0914  7						THEN
;   0915  7						    FILE_FAB [FAB$L_CTX] = F_STATE_PRE1
;   0916  7						ELSE
;   0917  7						    FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0918  7	 
;   0919  7						RETURN KER_NORMAL;
;   0920  7						END
;   0921  6					    ELSE
;   0922  6						FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0923  6	 
;   0924  6					    END
;   0925  5					ELSE
;   0926  6					    BEGIN
;   0927  6	 
;   0928  6					    SELECTONE .CC_COUNT<5, 2> OF
;   0929  6						SET
;   0930  6	 
;   0931  6						[%B'00'] :
;   0932  7						    BEGIN
;   0933  7						    .CHARACTER = .CC_COUNT<0, 5>;
;   0934  7						    FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0935  7						    RETURN KER_NORMAL;
;   0936  6						    END;
;   0937  6	 
;   0938  6						[%B'10'] :
;   0939  7						    BEGIN
;   0940  7						    .CHARACTER = .CC_COUNT<0, 5> + 128;
;   0941  7						    FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0942  7						    RETURN KER_NORMAL;
;   0943  6						    END;
;   0944  6	 
;   0945  6						[OTHERWISE, %B'11'] :
;   0946  6						    RETURN KER_ILLFILTYP;
;   0947  6						TES;
;   0948  5					    END;
;   0949  4					END;
;   0950  4				    TES;
;   0951  4	 
;   0952  3				END;
;   0953  3	 
;   0954  3			    [F_STATE_PRE1] :
;   0955  3	 
;   0956  3				IF .RAT EQL FAB$M_PRN
;   0957  3				THEN
;   0958  4				    BEGIN
;   0959  4				    .CHARACTER = CHR_LFD;
;   0960  4				    CC_COUNT = .CC_COUNT - 1;
;   0961  4	 
;   0962  4				    IF .CC_COUNT LEQ 0 THEN FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   0963  4	 
;   0964  4				    RETURN KER_NORMAL;
;   0965  4				    END
;   0966  3				ELSE
;   0967  3				    RETURN KER_ILLFILTYP;
;   0968  3	 
;   0969  3			    [F_STATE_DATA] :
;   0970  4				BEGIN
;   0971  4	 
;   0972  4				IF .FILE_REC_COUNT LEQ 0
;   0973  4				THEN
;   0974  4				    FILE_FAB [FAB$L_CTX] = F_STATE_POST
;   0975  4				ELSE
;   0976  5				    BEGIN
;   0977  5				    .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
;   0978  5				    FILE_REC_COUNT = .FILE_REC_COUNT - 1;
;   0979  5				    RETURN KER_NORMAL;
;   0980  4				    END;
;   0981  4	 
;   0982  3				END;
;   0983  3	 
;   0984  3			    [F_STATE_POST] :
;   0985  4				BEGIN
;   0986  4	 
;   0987  4				SELECTONE .RAT OF
;   0988  4				    SET
;   0989  4	 
;   0990  4				    [FAB$M_CR] :
;   0991  5					BEGIN
;   0992  5					.CHARACTER = CHR_CRT;
;   0993  5					FILE_FAB [FAB$L_CTX] = F_STATE_POST1;
;   0994  5							! So we get a line feed
;   0995  5					RETURN KER_NORMAL;
;   0996  4					END;
;   0997  4	 
;   0998  4	 
;   0999  4				    [FAB$M_PRN] :
;   1000  5					BEGIN
;   1001  5	 
;   1002  5					IF .CC_TYPE<7, 1> EQL 0
;   1003  5					THEN
;   1004  6					    BEGIN
;   1005  6	 
;   1006  6					    IF .CC_TYPE<0, 7> NEQ 0
;   1007  6					    THEN
;   1008  7						BEGIN
;   1009  7						.CHARACTER = CHR_LFD;
;   1010  7						CC_COUNT = .CC_TYPE;
;   1011  7						FILE_FAB [FAB$L_CTX] = F_STATE_POST1;
;   1012  7	                                        RETURN KER_NORMAL;
;   1013  7						END
;   1014  6					    ELSE
;   1015  6						FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
;   1016  6					    END
;   1017  5					ELSE
;   1018  6					    BEGIN
;   1019  6	 
;   1020  6					    SELECTONE .CC_TYPE<5, 2> OF
;   1021  6						SET
;   1022  6	 
;   1023  6						[%B'00'] :
;   1024  7						    BEGIN
;   1025  7						    .CHARACTER = .CC_TYPE<0, 5>;
;   1026  7						    FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
;   1027  7						    RETURN KER_NORMAL;
;   1028  6						    END;
;   1029  6	 
;   1030  6						[%B'10'] :
;   1031  7						    BEGIN
;   1032  7						    .CHARACTER = .CC_TYPE<0, 5> + 128;
;   1033  7						    FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
;   1034  7						    RETURN KER_NORMAL;
;   1035  6						    END;
;   1036  6	 
;   1037  6						[OTHERWISE, %B'11'] :
;   1038  6						    RETURN KER_ILLFILTYP;
;   1039  6						TES;
;   1040  6	 
;   1041  5					    END;
;   1042  5	 
;   1043  4					END;
;   1044  4				    TES;		! End SELECTONE .RAT
;   1045  4	 
;   1046  3				END;
;   1047  3	 
;   1048  3			    [F_STATE_POST1] :
;   1049  3	 
;   1050  3				IF .RAT EQL FAB$M_PRN
;   1051  3				THEN
;   1052  4				    BEGIN
;   1053  4				    .CHARACTER = CHR_LFD;
;   1054  4				    CC_COUNT = .CC_COUNT - 1;
;   1055  4	 
;   1056  4				    IF .CC_COUNT LEQ -1
;   1057  4				    THEN
;   1058  5					BEGIN
;   1059  5					.CHARACTER = CHR_CRT;
;   1060  5	!				FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   1061  5					FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
;   1062  4					END;
;   1063  4	 
;   1064  4				    RETURN KER_NORMAL;
;   1065  4				    END
;   1066  3				ELSE
;   1067  3	!
;   1068  3	! Generate line feed after CR for funny files
;   1069  3	!
;   1070  3	 
;   1071  4				    IF (.RAT EQL FAB$M_CR)
;   1072  3				    THEN
;   1073  4					BEGIN
;   1074  4					.CHARACTER = CHR_LFD;	! Return a line feed
;   1075  4					FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
;   1076  4							! Next we get data
;   1077  4					RETURN KER_NORMAL;
;   1078  4					END
;   1079  3				    ELSE
;   1080  3					RETURN KER_ILLFILTYP;
;   1081  3	 
;   1082  3			    TES;			! End of CASE .STATE
;   1083  3	 
;   1084  3		    [OTHERWISE] :
;   1085  4			BEGIN
;   1086  4	 
;   1087  4			WHILE .FILE_REC_COUNT LEQ 0 DO
;   1088  5			    BEGIN
;   1089  5			    STATUS = GET_BUFFER ();
;   1090  5	 
;   1091  5			    IF NOT .STATUS OR .STATUS EQL KER_EOF THEN RETURN .STATUS;
;   1092  5	 
;   1093  4			    END;
;   1094  4	 
;   1095  4			FILE_REC_COUNT = .FILE_REC_COUNT - 1;
;   1096  4			.CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
;   1097  4			RETURN KER_NORMAL;
;   1098  3			END;
;   1099  3		    TES;				! End of SELECTONE .RAT
;   1100  3	 
;   1101  2		END;					! End WHILE TRUE DO loop
;   1102  2	 
;   1103  2	    RETURN KER_ILLFILTYP;			! Shouldn't get here
;   1104  1	    END;					! End of GET_ASCII





;GET_ASCII
U.4:	.WORD   ^M<R2,R3,R4,R5,R6>		 ;Save R2,R3,R4,R5,R6		       0610 			       007C   00000
	MOVL    #KER_EOF, R6			 ;#KER_EOF, R6			      	    	       56 00000000G  8F  D0   00002
	MOVAB   G^U.3, R5			 ;U.3, R5			      	    	       55 00000000V  00  9E   00009
	MOVAB   G^U.30, R4			 ;U.30, R4			      	    	       54 00000000'  00  9E   00010
	MOVZBL  -806(R4), R2			 ;FILE_FAB+30, RAT		       0859 	       52     FCDA   C4  9A   00017
	BICL2   #8, R2				 ;#8, RAT			      	    	       52	     08  CA   0001C
	CMPL    -844(R4), #160			 ;DEV_CLASS, #160		       0861 000000A0   8F     FCB4   C4  D1   0001F
	BNEQ    1$				 ;1$				      	    			     03  12   00028
	MOVL    #2, R2				 ;#2, RAT			      	    	       52	     02  D0   0002A
1$:	CMPL    R2, #1				 ;RAT, #1			       0869 	       01	     52  D1   0002D
	BNEQ    2$				 ;2$				      	    			     09  12   00030
	PUSHL   4(AP)				 ;CHARACTER			       0871 			04   AC  DD   00032
	CALLS   #1, W^U.32			 ;#1, U.32			      	    	FED0   CF	     01  FB   00035
	RET     				 ;				      	    				 04   0003A
2$:	CMPL    R2, #2				 ;RAT, #2			       0874 	       02	     52  D1   0003B
	BEQL    3$				 ;3$				      	    			     08  13   0003E
	CMPL    R2, #4				 ;RAT, #4			      	    	       04	     52  D1   00040
	BEQL    3$				 ;3$				      	    			     03  13   00043
	BRW     31$				 ;31$				      	    			   0128  31   00045
3$:	CASEL   -812(R4), #0, #4		 ;FILE_FAB+24, #0, #4		       0876 	       00     FCD4   C4  CF   00048
						 ;					    			     04       0004D
4$:	.WORD   5$-4$,-				 ;5$-4$,-			      	    	     0075	   000A       0004E
		12$-4$,-			 ;12$-4$,-				    	     00A8	   0088       00052
		15$-4$,-			 ;15$-4$,-				    			   0101       00056
		18$-4$,-			 ;18$-4$,-
		27$-4$				 ;27$-4$
5$:	CALLS   #0, (R5)			 ;#0, GET_BUFFER		       0881 	       65	     00  FB   00058
	MOVL    R0, R3				 ;R0, STATUS			      	    	       53	     50  D0   0005B
	BLBS    R3, 7$				 ;STATUS, 7$			       0883 	       03	     53  E8   0005E
6$:	BRW     32$				 ;32$				      	    			   0120  31   00061
7$:	CMPL    R3, R6				 ;STATUS, R6			      	    	       56	     53  D1   00064
	BEQL    6$				 ;6$				      	    			     F8  13   00067
	CMPL    R2, #2				 ;RAT, #2			       0888 	       02	     52  D1   00069
	BEQL    8$				 ;8$				      	    			     2A  13   0006C
	CMPL    R2, #4				 ;RAT, #4			       0893 	       04	     52  D1   0006E
	BNEQ    1$				 ;1$				      	    			     BA  12   00071
	MOVL    -616(R4), R0			 ;FILE_RAB+44, TEMP_POINTER	       0899 	       50     FD98   C4  D0   00073
	MOVZBL  (R0)+, (R4)			 ;(TEMP_POINTER)+, CC_COUNT	       0900 	       64	     80  9A   00078
	MOVZBL  (R0)+, 4(R4)			 ;(TEMP_POINTER)+, CC_TYPE	       0901 	  04   A4	     80  9A   0007B
	TSTB    (R4)				 ;CC_COUNT			       0903 			     64  95   0007F
	BLSS    10$				 ;10$				      	    			     1C  19   00081
	BITB    (R4), #127			 ;CC_COUNT, #127		       0907 	  7F   8F	     64  93   00083
	BEQL    8$				 ;8$				      	    			     0F  13   00087
	MOVL    #10, @4(AP)			 ;#10, @CHARACTER		       0910 	  04   BC	     0A  D0   00089
	DECL    (R4)				 ;CC_COUNT			       0911 			     64  D7   0008D
	BLEQ    14$				 ;14$				       0913 			     3E  15   0008F
	MOVL    #1, -812(R4)			 ;#1, FILE_FAB+24		       0915 	FCD4   C4	     01  D0   00091
	BRB     17$				 ;17$				      	    			     5C  11   00096
8$:	MOVL    #2, -812(R4)			 ;#2, FILE_FAB+24		       0922 	FCD4   C4	     02  D0   00098
9$:	BRB     1$				 ;1$				      	    			     8E  11   0009D
10$:	EXTZV   #5, #2, (R4), R0		 ;#5, #2, CC_COUNT, R0		       0928 	       02	     05  EF   0009F
						 ;					    	       50	     64       000A2
	BNEQ    11$				 ;11$				       0931 			     08  12   000A4
	EXTZV   #0, #5, (R4), @4(AP)		 ;#0, #5, CC_COUNT, @CHARACTER	       0933 	       05	     00  EF   000A6
						 ;					    	  04   BC	     64       000A9
	BRB     14$				 ;14$				       0934 			     21  11   000AC
11$:	CMPL    R0, #2				 ;R0, #2			       0938 	       02	     50  D1   000AE
	BNEQ    13$				 ;13$				      	    			     13  12   000B1
	EXTZV   #0, #5, (R4), @4(AP)		 ;#0, #5, CC_COUNT, @CHARACTER	       0940 	       05	     00  EF   000B3
						 ;					    	  04   BC	     64       000B6
	ADDL2   #128, @4(AP)			 ;#128, @CHARACTER		      	    	  04   BC 00000080   8F  C0   000B9
	BRB     14$				 ;14$				       0941 			     0C  11   000C1
12$:	CMPL    R2, #4				 ;RAT, #4			       0956 	       04	     52  D1   000C3
13$:	BNEQ    26$				 ;26$				      	    			     74  12   000C6
	MOVL    #10, @4(AP)			 ;#10, @CHARACTER		       0959 	  04   BC	     0A  D0   000C8
	SOBGTR  (R4), 21$			 ;CC_COUNT, 21$			       0960 	       50	     64  F5   000CC
14$:	MOVL    #2, -812(R4)			 ;#2, FILE_FAB+24		       0962 	FCD4   C4	     02  D0   000CF
	BRB     21$				 ;21$				       0964 			     49  11   000D4
15$:	TSTL    -540(R4)			 ;FILE_REC_COUNT		       0972 		      FDE4   C4  D5   000D6
	BGTR    16$				 ;16$				      	    			     07  14   000DA
	MOVL    #3, -812(R4)			 ;#3, FILE_FAB+24		       0974 	FCD4   C4	     03  D0   000DC
	BRB     23$				 ;23$				      	    			     42  11   000E1
16$:	MOVL    -544(R4), R0			 ;FILE_REC_POINTER, R0		       0977 	       50     FDE0   C4  D0   000E3
	MOVZBL  (R0), @4(AP)			 ;(R0), @CHARACTER		      	    	  04   BC	     60  9A   000E8
	INCL    -544(R4)			 ;FILE_REC_POINTER		      	    		      FDE0   C4  D6   000EC
	DECL    -540(R4)			 ;FILE_REC_COUNT		       0978 		      FDE4   C4  D7   000F0
17$:	BRB     30$				 ;30$				       0979 			     78  11   000F4
18$:	CMPL    R2, #2				 ;RAT, #2			       0990 	       02	     52  D1   000F6
	BNEQ    19$				 ;19$				      	    			     06  12   000F9
	MOVL    #13, @4(AP)			 ;#13, @CHARACTER		       0992 	  04   BC	     0D  D0   000FB
	BRB     20$				 ;20$				       0993 			     19  11   000FF
19$:	CMPL    R2, #4				 ;RAT, #4			       0999 	       04	     52  D1   00101
	BNEQ    9$				 ;9$				      	    			     97  12   00104
	TSTB    4(R4)				 ;CC_TYPE			       1002 			04   A4  95   00106
	BLSS    24$				 ;24$				      	    			     1D  19   00109
	BITB    4(R4), #127			 ;CC_TYPE, #127			       1006 	  7F   8F	04   A4  93   0010B
	BEQL    22$				 ;22$				      	    			     0F  13   00110
	MOVL    #10, @4(AP)			 ;#10, @CHARACTER		       1009 	  04   BC	     0A  D0   00112
	MOVL    4(R4), (R4)			 ;CC_TYPE, CC_COUNT		       1010 	       64	04   A4  D0   00116
20$:	MOVL    #4, -812(R4)			 ;#4, FILE_FAB+24		       1011 	FCD4   C4	     04  D0   0011A
21$:	BRB     34$				 ;34$				       1012 			     78  11   0011F
22$:	CLRL    -812(R4)			 ;FILE_FAB+24			       1015 		      FCD4   C4  D4   00121
23$:	BRW     1$				 ;1$				      	    			   FF05  31   00125
24$:	EXTZV   #5, #2, 4(R4), R0		 ;#5, #2, CC_TYPE, R0		       1020 	       02	     05  EF   00128
						 ;					    	       50	04   A4       0012B
	BNEQ    25$				 ;25$				       1023 			     09  12   0012E
	EXTZV   #0, #5, 4(R4), @4(AP)		 ;#0, #5, CC_TYPE, @CHARACTER	       1025 	       05	     00  EF   00130
						 ;					    	  04   BC	04   A4       00133
	BRB     29$				 ;29$				       1026 			     31  11   00137
25$:	CMPL    R0, #2				 ;R0, #2			       1030 	       02	     50  D1   00139
26$:	BNEQ    35$				 ;35$				      	    			     63  12   0013C
	EXTZV   #0, #5, 4(R4), @4(AP)		 ;#0, #5, CC_TYPE, @CHARACTER	       1032 	       05	     00  EF   0013E
						 ;					    	  04   BC	04   A4       00141
	ADDL2   #128, @4(AP)			 ;#128, @CHARACTER		      	    	  04   BC 00000080   8F  C0   00145
	BRB     29$				 ;29$				       1033 			     1B  11   0014D
27$:	CMPL    R2, #4				 ;RAT, #4			       1050 	       04	     52  D1   0014F
	BNEQ    28$				 ;28$				      	    			     0D  12   00152
	MOVL    #10, @4(AP)			 ;#10, @CHARACTER		       1053 	  04   BC	     0A  D0   00154
	SOBGEQ  (R4), 34$			 ;CC_COUNT, 34$			       1054 	       3E	     64  F4   00158
	MOVL    #13, @4(AP)			 ;#13, @CHARACTER		       1059 	  04   BC	     0D  D0   0015B
	BRB     29$				 ;29$				       1061 			     09  11   0015F
28$:	CMPL    R2, #2				 ;RAT, #2			       1071 	       02	     52  D1   00161
	BNEQ    35$				 ;35$				      	    			     3B  12   00164
	MOVL    #10, @4(AP)			 ;#10, @CHARACTER		       1074 	  04   BC	     0A  D0   00166
29$:	CLRL    -812(R4)			 ;FILE_FAB+24			       1075 		      FCD4   C4  D4   0016A
30$:	BRB     34$				 ;34$				       1077 			     29  11   0016E
31$:	TSTL    -540(R4)			 ;FILE_REC_COUNT		       1087 		      FDE4   C4  D5   00170
	BGTR    33$				 ;33$				      	    			     12  14   00174
	CALLS   #0, (R5)			 ;#0, GET_BUFFER		       1089 	       65	     00  FB   00176
	MOVL    R0, R3				 ;R0, STATUS			      	    	       53	     50  D0   00179
	BLBC    R3, 32$				 ;STATUS, 32$			       1091 	       05	     53  E9   0017C
	CMPL    R3, R6				 ;STATUS, R6			      	    	       56	     53  D1   0017F
	BNEQ    31$				 ;31$				      	    			     EC  12   00182
32$:	MOVL    R3, R0				 ;STATUS, R0			      	    	       50	     53  D0   00184
	RET     				 ;				      	    				 04   00187
33$:	DECL    -540(R4)			 ;FILE_REC_COUNT		       1095 		      FDE4   C4  D7   00188
	MOVL    -544(R4), R0			 ;FILE_REC_POINTER, R0		       1096 	       50     FDE0   C4  D0   0018C
	MOVZBL  (R0), @4(AP)			 ;(R0), @CHARACTER		      	    	  04   BC	     60  9A   00191
	INCL    -544(R4)			 ;FILE_REC_POINTER		      	    		      FDE0   C4  D6   00195
34$:	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       1097 	       50 00000000G  8F  D0   00199
	RET     				 ;				      	    				 04   001A0
35$:	MOVL    #KER_ILLFILTYP, R0		 ;#KER_ILLFILTYP, R0		       1103 	       50 00000000G  8F  D0   001A1
	RET     				 ;				      	    				 04   001A8

; Routine Size:  425 bytes,    Routine Base:  $CODE$ + 0161


;   1105  1	 %SBTTL 'GET_BLOCK - Get a character from a BLOCKed file'
;   1106  1	ROUTINE GET_BLOCK (CHARACTER) =
;   1107  1	 
;   1108  1	!++
;   1109  1	! FUNCTIONAL DESCRIPTION:
;   1110  1	!
;   1111  1	!	This routine will return the next byte from a blocked file.  This
;   1112  1	!	routine will use the $READ RMS call to get the next byte from the
;   1113  1	!	file.  This way all RMS header information can be passed to the
;   1114  1	!	other file system.
;   1115  1	!
;   1116  1	! CALLING SEQUENCE:
;   1117  1	!
;   1118  1	!	STATUS = GET_BLOCK(CHARACTER);
;   1119  1	!
;   1120  1	! INPUT PARAMETERS:
;   1121  1	!
;   1122  1	!	CHARACTER - Address to store the character in.
;   1123  1	!
;   1124  1	! IMPLICIT INPUTS:
;   1125  1	!
;   1126  1	!	REC_POINTER - Pointer into the record.
;   1127  1	!	REC_ADDRESS - Address of the record.
;   1128  1	!	REC_COUNT - Count of the number of bytes left in the record.
;   1129  1	!
;   1130  1	! OUPTUT PARAMETERS:
;   1131  1	!
;   1132  1	!	None.
;   1133  1	!
;   1134  1	! IMPLICIT OUTPUTS:
;   1135  1	!
;   1136  1	!	None.
;   1137  1	!
;   1138  1	! COMPLETION CODES:
;   1139  1	!
;   1140  1	!   KER_NORMAL - Got a byte
;   1141  1	!   KER_EOF - End of file gotten.
;   1142  1	!   KER_RMS32 - RMS error
;   1143  1	!
;   1144  1	! SIDE EFFECTS:
;   1145  1	!
;   1146  1	!	None.
;   1147  1	!
;   1148  1	!--
;   1149  1	 
;   1150  2	    BEGIN
;   1151  2	!
;   1152  2	! Status codes returned by this module
;   1153  2	!
;   1154  2	    EXTERNAL LITERAL
;   1155  2		KER_RMS32,			    ! RMS error encountered
;   1156  2		KER_EOF,			    ! End of file encountered
;   1157  2		KER_NORMAL;			    ! Normal return
;   1158  2	 
;   1159  2	    LOCAL
;   1160  2		STATUS;					! Random status values
;   1161  2	 
;   1162  2	    WHILE .FILE_REC_COUNT LEQ 0 DO
;   1163  3		BEGIN
;   1164  3		STATUS = $READ (RAB = FILE_RAB);
;   1165  3	 
;   1166  3		IF NOT .STATUS
;   1167  3		THEN
;   1168  3	 
;   1169  3		    IF .STATUS EQL RMS$_EOF
;   1170  3		    THEN
;   1171  4			BEGIN
;   1172  4			EOF_FLAG = TRUE;
;   1173  4			RETURN KER_EOF;
;   1174  4			END
;   1175  3		    ELSE
;   1176  4			BEGIN
;   1177  4			FILE_ERROR (.STATUS);
;   1178  4			EOF_FLAG = TRUE;
;   1179  4			RETURN KER_RMS32;
;   1180  3			END;
;   1181  3	 
;   1182  3		FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
;   1183  3		FILE_REC_COUNT = .FILE_RAB [RAB$W_RSZ];
;   1184  2		END;
;   1185  2	 
;   1186  2	    FILE_REC_COUNT = .FILE_REC_COUNT - 1;
;   1187  2	    .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
;   1188  2	    RETURN KER_NORMAL;
;   1189  1	    END;					! End of GET_BLOCK



	.EXTRN  KER_RMS32, SYS$READ

;GET_BLOCK
U.5:	.WORD   ^M<R2,R3>			 ;Save R2,R3			       1106 			       000C   00000
	MOVAB   G^U.16, R3			 ;U.16, R3			      	    	       53 00000000'  00  9E   00002
1$:	TSTL    (R3)				 ;FILE_REC_COUNT		       1162 			     63  D5   00009
	BGTR    5$				 ;5$				      	    			     43  14   0000B
	PUSHAB  -120(R3)			 ;FILE_RAB			       1164 			88   A3  9F   0000D
	CALLS   #1, G^SYS$READ			 ;#1, SYS$READ			      	    00000000G  00	     01  FB   00010
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00017
	BLBS    R2, 4$				 ;STATUS, 4$			       1166 	       28	     52  E8   0001A
	CMPL    R2, #98938			 ;STATUS, #98938		       1169 0001827A   8F	     52  D1   0001D
	BNEQ    2$				 ;2$				      	    			     09  12   00024
	MOVL    #KER_EOF, R0			 ;#KER_EOF, R0			       1173 	       50 00000000G  8F  D0   00026
	BRB     3$				 ;3$				      	    			     10  11   0002D
2$:	PUSHL   R2				 ;STATUS			       1177 			     52  DD   0002F
	CALLS   #1, G^U.6			 ;#1, U.6			      	    00000000V  00	     01  FB   00031
	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       1179 	       50 00000000G  8F  D0   00038
3$:	MOVL    #1, -300(R3)			 ;#1, EOF_FLAG			       1172 	FED4   C3	     01  D0   0003F
	RET     				 ;				       1179 				 04   00044
4$:	MOVL    8(R3), -4(R3)			 ;REC_ADDRESS, FILE_REC_POINTER        1182 	  FC   A3	08   A3  D0   00045
	MOVZWL  -86(R3), (R3)			 ;FILE_RAB+34, FILE_REC_COUNT	       1183 	       63	AA   A3  3C   0004A
	BRB     1$				 ;1$				      	    			     B9  11   0004E
5$:	DECL    (R3)				 ;FILE_REC_COUNT		       1186 			     63  D7   00050
	MOVL    -4(R3), R0			 ;FILE_REC_POINTER, R0		       1187 	       50	FC   A3  D0   00052
	MOVZBL  (R0), @4(AP)			 ;(R0), @CHARACTER		      	    	  04   BC	     60  9A   00056
	INCL    -4(R3)				 ;FILE_REC_POINTER		      	    			FC   A3  D6   0005A
	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       1188 	       50 00000000G  8F  D0   0005D
	RET     				 ;				      	    				 04   00064

; Routine Size:  101 bytes,    Routine Base:  $CODE$ + 030A


;   1190  1	 %SBTTL 'GET_BUFFER - Routine to read a buffer.'
;   1191  1	ROUTINE GET_BUFFER =
;   1192  1	 
;   1193  1	!++
;   1194  1	! FUNCTIONAL DESCRIPTION:
;   1195  1	!
;   1196  1	!	This routine will read a buffer from the disk file.  It will
;   1197  1	!	return various status depending if there was an error reading
;   1198  1	!	the disk file or if the end of file is reached.
;   1199  1	!
;   1200  1	! CALLING SEQUENCE:
;   1201  1	!
;   1202  1	!	STATUS = GET_BUFFER ();
;   1203  1	!
;   1204  1	! INPUT PARAMETERS:
;   1205  1	!
;   1206  1	!	None.
;   1207  1	!
;   1208  1	! IMPLICIT INPUTS:
;   1209  1	!
;   1210  1	!	None.
;   1211  1	!
;   1212  1	! OUTPUT PARAMETERS:
;   1213  1	!
;   1214  1	!	None.
;   1215  1	!
;   1216  1	! IMPLICIT OUTPUTS:
;   1217  1	!
;   1218  1	!	FILE_REC_POINTER - Pointer into the record.
;   1219  1	!	FILE_REC_COUNT - Count of the number of bytes in the record.
;   1220  1	!
;   1221  1	! COMPLETION CODES:
;   1222  1	!
;   1223  1	!	KER_NORMAL - Got a buffer
;   1224  1	!	KER_EOF - End of file reached.
;   1225  1	!	KER_RMS32 - RMS error
;   1226  1	!
;   1227  1	! SIDE EFFECTS:
;   1228  1	!
;   1229  1	!	None.
;   1230  1	!
;   1231  1	!--
;   1232  1	 
;   1233  2	    BEGIN
;   1234  2	!
;   1235  2	! The following are the various status values returned by this routien
;   1236  2	!
;   1237  2	    EXTERNAL LITERAL
;   1238  2		KER_NORMAL,				! Normal return
;   1239  2		KER_EOF,				! End of file
;   1240  2		KER_RMS32;				! RMS error encountered
;   1241  2	 
;   1242  2	    LOCAL
;   1243  2		STATUS;					! Random status values
;   1244  2	 
;   1245  2	    STATUS = $GET (RAB = FILE_RAB);
;   1246  2	 
;   1247  2	    IF NOT .STATUS
;   1248  2	    THEN
;   1249  2	 
;   1250  2		IF .STATUS EQL RMS$_EOF
;   1251  2		THEN
;   1252  3		    BEGIN
;   1253  3		    EOF_FLAG = TRUE;
;   1254  3		    RETURN KER_EOF;
;   1255  3		    END
;   1256  2		ELSE
;   1257  3		    BEGIN
;   1258  3		    FILE_ERROR (.STATUS);
;   1259  3		    EOF_FLAG = TRUE;
;   1260  3		    RETURN KER_RMS32;
;   1261  2		    END;
;   1262  2	 
;   1263  2	    FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
;   1264  2	    FILE_REC_COUNT = .FILE_RAB [RAB$W_RSZ];
;   1265  2	    RETURN KER_NORMAL;
;   1266  1	    END;



	.EXTRN  SYS$GET

;GET_BUFFER
U.3:	.WORD   ^M<R2>				 ;Save R2			       1191 			       0004   00000
	MOVAB   G^U.12, R2			 ;U.12, R2			      	    	       52 00000000'  00  9E   00002
	PUSHL   R2				 ;R2				       1245 			     52  DD   00009
	CALLS   #1, G^SYS$GET			 ;#1, SYS$GET			      	    00000000G  00	     01  FB   0000B
	BLBS    R0, 3$				 ;STATUS, 3$			       1247 	       28	     50  E8   00012
	CMPL    R0, #98938			 ;STATUS, #98938		       1250 0001827A   8F	     50  D1   00015
	BNEQ    1$				 ;1$				      	    			     09  12   0001C
	MOVL    #KER_EOF, R0			 ;#KER_EOF, R0			       1254 	       50 00000000G  8F  D0   0001E
	BRB     2$				 ;2$				      	    			     10  11   00025
1$:	PUSHL   R0				 ;STATUS			       1258 			     50  DD   00027
	CALLS   #1, G^U.6			 ;#1, U.6			      	    00000000V  00	     01  FB   00029
	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       1260 	       50 00000000G  8F  D0   00030
2$:	MOVL    #1, -180(R2)			 ;#1, EOF_FLAG			       1253 	FF4C   C2	     01  D0   00037
	RET     				 ;				       1260 				 04   0003C
3$:	MOVL    128(R2), 116(R2)		 ;REC_ADDRESS, FILE_REC_POINTER        1263 	  74   A2     0080   C2  D0   0003D
	MOVZWL  34(R2), 120(R2)			 ;FILE_RAB+34, FILE_REC_COUNT	       1264 	  78   A2	22   A2  3C   00043
	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       1265 	       50 00000000G  8F  D0   00048
	RET     				 ;				      	    				 04   0004F

; Routine Size:  80 bytes,    Routine Base:  $CODE$ + 036F


;   1267  1	 %SBTTL 'PUT_FILE'
;   1268  1	 
;   1269  1	GLOBAL ROUTINE PUT_FILE (CHARACTER) =
;   1270  1	 
;   1271  1	!++
;   1272  1	! FUNCTIONAL DESCRIPTION:
;   1273  1	!
;   1274  1	!	This routine will store a character into the record buffer
;   1275  1	!	that we are building.  It will output the buffer to disk
;   1276  1	!	when the end of line characters are found.
;   1277  1	!
;   1278  1	! CALLING SEQUENCE:
;   1279  1	!
;   1280  1	!	STATUS = PUT_FILE(Character);
;   1281  1	!
;   1282  1	! INPUT PARAMETERS:
;   1283  1	!
;   1284  1	!	Character - Address of the character to output in the file.
;   1285  1	!
;   1286  1	! IMPLICIT INPUTS:
;   1287  1	!
;   1288  1	!	None.
;   1289  1	!
;   1290  1	! OUTPUT PARAMETERS:
;   1291  1	!
;   1292  1	!	Status - True if no problems writing the character
;   1293  1	!		 False if there were problems writing the character.
;   1294  1	!
;   1295  1	! IMPLICIT OUTPUTS:
;   1296  1	!
;   1297  1	!	None.
;   1298  1	!
;   1299  1	! COMPLETION CODES:
;   1300  1	!
;   1301  1	!	None.
;   1302  1	!
;   1303  1	! SIDE EFFECTS:
;   1304  1	!
;   1305  1	!	None.
;   1306  1	!
;   1307  1	!--
;   1308  1	 
;   1309  2	    BEGIN
;   1310  2	!
;   1311  2	! Completion codes
;   1312  2	!
;   1313  2	    EXTERNAL LITERAL
;   1314  2		KER_REC_TOO_BIG,			! Record too big
;   1315  2		KER_NORMAL;				! Normal return
;   1316  2	!
;   1317  2	! Local variables
;   1318  2	!
;   1319  2	    OWN
;   1320  2		SAVED_CHARACTER : UNSIGNED BYTE;	! Character we may have to
;   1321  2							!  write later on
;   1322  2	    LOCAL
;   1323  2		STATUS;					! Random status values
;   1324  2	 
;   1325  2	    SELECTONE .FILE_TYPE OF
;   1326  2		SET
;   1327  2	 
;   1328  2		[FILE_ASC] :
;   1329  3		    BEGIN
;   1330  3	!
;   1331  3	! If the last character was a carriage return and this is a line feed,
;   1332  3	! we will just dump the record.  Otherwise, if the last character was
;   1333  3	! a carriage return, output both it and the current one.
;   1334  3	!
;   1335  3	 
;   1336  3		    IF .FILE_FAB [FAB$L_CTX] NEQ F_STATE_DATA
;   1337  3		    THEN
;   1338  4			BEGIN
;   1339  4	 
;   1340  4			IF (.CHARACTER AND %O'177') EQL CHR_LFD
;   1341  4			THEN
;   1342  5			    BEGIN
;   1343  5			    FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   1344  5			    RETURN DUMP_BUFFER ();
;   1345  5			    END
;   1346  4			ELSE
;   1347  5			    BEGIN
;   1348  5	 
;   1349  5			    IF .FILE_REC_COUNT GEQ .REC_SIZE
;   1350  5			    THEN
;   1351  6				BEGIN
;   1352  6				LIB$SIGNAL (KER_REC_TOO_BIG);
;   1353  6				RETURN KER_REC_TOO_BIG;
;   1354  5				END;
;   1355  5	 
;   1356  5			    CH$WCHAR_A (.SAVED_CHARACTER, FILE_REC_POINTER);
;   1357  5							! Store the carriage return we deferred
;   1358  5			    FILE_REC_COUNT = .FILE_REC_COUNT + 1;
;   1359  5			    FILE_FAB [FAB$L_CTX] = F_STATE_DATA;	! Back to normal data
;   1360  4			    END;
;   1361  4	 
;   1362  3			END;
;   1363  3	 
;   1364  3	!
;   1365  3	! Here when last character was written to the file normally.  Check if
;   1366  3	! this character might be the end of a record (or at least the start of
;   1367  3	! end.
;   1368  3	!
;   1369  3	 
;   1370  3		    IF (.CHARACTER AND %O'177') EQL CHR_CRT
;   1371  3		    THEN
;   1372  4			BEGIN
;   1373  4			SAVED_CHARACTER = .CHARACTER;	    ! Save the character for later
;   1374  4			FILE_FAB [FAB$L_CTX] = F_STATE_POST;	! Remember we saw this
;   1375  4			RETURN KER_NORMAL;		! And delay until next character
;   1376  3			END;
;   1377  3	 
;   1378  3		    IF .FILE_REC_COUNT GEQ .REC_SIZE
;   1379  3		    THEN
;   1380  4			BEGIN
;   1381  4			LIB$SIGNAL (KER_REC_TOO_BIG);
;   1382  4			RETURN KER_REC_TOO_BIG;
;   1383  3			END;
;   1384  3	 
;   1385  3		    FILE_REC_COUNT = .FILE_REC_COUNT + 1;
;   1386  3		    CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
;   1387  2		    END;
;   1388  2	 
;   1389  2		[FILE_BIN, FILE_FIX] :
;   1390  3		    BEGIN
;   1391  3	 
;   1392  3		    IF .FILE_REC_COUNT GEQ .REC_SIZE
;   1393  3		    THEN
;   1394  4			BEGIN
;   1395  4			STATUS = DUMP_BUFFER ();
;   1396  4	 
;   1397  4			IF NOT .STATUS
;   1398  4			THEN
;   1399  5			    BEGIN
;   1400  5			    LIB$SIGNAL (.STATUS);
;   1401  5			    RETURN .STATUS;
;   1402  4			    END;
;   1403  4	 
;   1404  3			END;
;   1405  3	 
;   1406  3		    FILE_REC_COUNT = .FILE_REC_COUNT + 1;
;   1407  3		    CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
;   1408  2		    END;
;   1409  2	 
;   1410  2		[FILE_BLK] :
;   1411  3		    BEGIN
;   1412  3	 
;   1413  3		    IF .FILE_REC_COUNT GEQ .REC_SIZE
;   1414  3		    THEN
;   1415  4			BEGIN
;   1416  4			FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
;   1417  4			STATUS = $WRITE (RAB = FILE_RAB);
;   1418  4			FILE_REC_COUNT = 0;
;   1419  4			FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
;   1420  3			END;
;   1421  3	 
;   1422  3		    FILE_REC_COUNT = .FILE_REC_COUNT + 1;
;   1423  3		    CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
;   1424  2		    END;
;   1425  2		TES;
;   1426  2	 
;   1427  2	    RETURN KER_NORMAL;
;   1428  1	    END;					! End of PUT_FILE



	.PSECT  $OWN$,NOEXE,2

;SAVED_CHARACTER
U.34:	.BLKB   1									   ;				      00358

	.EXTRN  KER_REC_TOO_BIG, SYS$WRITE

	.PSECT  $CODE$,NOWRT,2

	.ENTRY  PUT_FILE, ^M<R2,R3,R4,R5,R6>	 ;PUT_FILE, Save R2,R3,R4,R5,R6        1269 			       007C   00000
	MOVAB   G^LIB$SIGNAL, R6		 ;LIB$SIGNAL, R6		      	    	       56 00000000G  00  9E   00002
	MOVL    #KER_REC_TOO_BIG, R5		 ;#KER_REC_TOO_BIG, R5		      	    	       55 00000000G  8F  D0   00009
	MOVAB   G^U.2, R4			 ;U.2, R4			      	    	       54 00000000V  00  9E   00010
	MOVAB   G^U.16, R3			 ;U.16, R3			      	    	       53 00000000'  00  9E   00017
	MOVL    G^FILE_TYPE, R0			 ;FILE_TYPE, R0			       1325 	       50 00000000'  00  D0   0001E
	CMPL    R0, #1				 ;R0, #1			       1328 	       01	     50  D1   00025
	BNEQ    5$				 ;5$				      	    			     55  12   00028
	CMPL    -272(R3), #2			 ;FILE_FAB+24, #2		       1336 	       02     FEF0   C3  D1   0002A
	BEQL    2$				 ;2$				      	    			     2A  13   0002F
	CMPZV   #0, #7, 4(AP), #10		 ;#0, #7, CHARACTER, #10	       1340 	       07	     00  ED   00031
						 ;					    	       0A	04   AC       00034
	BNEQ    1$				 ;1$				      	    			     09  12   00037
	MOVL    #2, -272(R3)			 ;#2, FILE_FAB+24		       1343 	FEF0   C3	     02  D0   00039
	CALLS   #0, (R4)			 ;#0, DUMP_BUFFER		       1344 	       64	     00  FB   0003E
	RET     				 ;				      	    				 04   00041
1$:	CMPL    (R3), 4(R3)			 ;FILE_REC_COUNT, REC_SIZE	       1349 	  04   A3	     63  D1   00042
	BGEQ    4$				 ;4$				      	    			     2E  18   00046
	MOVL    -4(R3), R0			 ;FILE_REC_POINTER, R0		       1356 	       50	FC   A3  D0   00048
	MOVB    548(R3), (R0)			 ;SAVED_CHARACTER, (R0)		      	    	       60     0224   C3  90   0004C
	INCL    -4(R3)				 ;FILE_REC_POINTER		      	    			FC   A3  D6   00051
	INCL    (R3)				 ;FILE_REC_COUNT		       1358 			     63  D6   00054
	MOVL    #2, -272(R3)			 ;#2, FILE_FAB+24		       1359 	FEF0   C3	     02  D0   00056
2$:	CMPZV   #0, #7, 4(AP), #13		 ;#0, #7, CHARACTER, #13	       1370 	       07	     00  ED   0005B
						 ;					    	       0D	04   AC       0005E
	BNEQ    3$				 ;3$				      	    			     0D  12   00061
	MOVB    4(AP), 548(R3)			 ;CHARACTER, SAVED_CHARACTER	       1373 	0224   C3	04   AC  90   00063
	MOVL    #3, -272(R3)			 ;#3, FILE_FAB+24		       1374 	FEF0   C3	     03  D0   00069
	BRB     9$				 ;9$				       1375 			     64  11   0006E
3$:	CMPL    (R3), 4(R3)			 ;FILE_REC_COUNT, REC_SIZE	       1378 	  04   A3	     63  D1   00070
	BLSS    8$				 ;8$				      	    			     51  19   00074
4$:	PUSHL   R5				 ;R5				       1381 			     55  DD   00076
	CALLS   #1, (R6)			 ;#1, LIB$SIGNAL		      	    	       66	     01  FB   00078
	MOVL    R5, R0				 ;R5, R0			       1382 	       50	     55  D0   0007B
	RET     				 ;				      	    				 04   0007E
5$:	CMPL    R0, #2				 ;R0, #2			       1389 	       02	     50  D1   0007F
	BEQL    6$				 ;6$				      	    			     05  13   00082
	CMPL    R0, #4				 ;R0, #4			      	    	       04	     50  D1   00084
	BNEQ    7$				 ;7$				      	    			     18  12   00087
6$:	CMPL    (R3), 4(R3)			 ;FILE_REC_COUNT, REC_SIZE	       1392 	  04   A3	     63  D1   00089
	BLSS    8$				 ;8$				      	    			     38  19   0008D
	CALLS   #0, (R4)			 ;#0, DUMP_BUFFER		       1395 	       64	     00  FB   0008F
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00092
	BLBS    R2, 8$				 ;STATUS, 8$			       1397 	       2F	     52  E8   00095
	PUSHL   R2				 ;STATUS			       1400 			     52  DD   00098
	CALLS   #1, (R6)			 ;#1, LIB$SIGNAL		      	    	       66	     01  FB   0009A
	MOVL    R2, R0				 ;STATUS, R0			       1401 	       50	     52  D0   0009D
	RET     				 ;				      	    				 04   000A0
7$:	CMPL    R0, #3				 ;R0, #3			       1410 	       03	     50  D1   000A1
	BNEQ    9$				 ;9$				      	    			     2E  12   000A4
	MOVL    (R3), R0			 ;FILE_REC_COUNT, R0		       1413 	       50	     63  D0   000A6
	CMPL    R0, 4(R3)			 ;R0, REC_SIZE			      	    	  04   A3	     50  D1   000A9
	BLSS    8$				 ;8$				      	    			     18  19   000AD
	MOVW    R0, -86(R3)			 ;R0, FILE_RAB+34		       1416 	  AA   A3	     50  B0   000AF
	PUSHAB  -120(R3)			 ;FILE_RAB			       1417 			88   A3  9F   000B3
	CALLS   #1, G^SYS$WRITE			 ;#1, SYS$WRITE			      	    00000000G  00	     01  FB   000B6
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   000BD
	CLRL    (R3)				 ;FILE_REC_COUNT		       1418 			     63  D4   000C0
	MOVL    8(R3), -4(R3)			 ;REC_ADDRESS, FILE_REC_POINTER        1419 	  FC   A3	08   A3  D0   000C2
8$:	INCL    (R3)				 ;FILE_REC_COUNT		       1422 			     63  D6   000C7
	MOVL    -4(R3), R0			 ;FILE_REC_POINTER, R0		       1423 	       50	FC   A3  D0   000C9
	MOVB    4(AP), (R0)			 ;CHARACTER, (R0)		      	    	       60	04   AC  90   000CD
	INCL    -4(R3)				 ;FILE_REC_POINTER		      	    			FC   A3  D6   000D1
9$:	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       1427 	       50 00000000G  8F  D0   000D4
	RET     				 ;				      	    				 04   000DB

; Routine Size:  220 bytes,    Routine Base:  $CODE$ + 03BF


;   1429  1	 
;   1430  1	 %SBTTL 'DUMP_BUFFER - Dump the current record to disk'
;   1431  1	ROUTINE DUMP_BUFFER =
;   1432  1	 
;   1433  1	!++
;   1434  1	! FUNCTIONAL DESCRIPTION:
;   1435  1	!
;   1436  1	!	This routine will dump the current record to disk.  It doesn't
;   1437  1	!	care what type of file you are writing, unlike FILE_DUMP.
;   1438  1	!
;   1439  1	! CALLING SEQUENCE:
;   1440  1	!
;   1441  1	!	STATUS = DUMP_BUFFER();
;   1442  1	!
;   1443  1	! INPUT PARAMETERS:
;   1444  1	!
;   1445  1	!	None.
;   1446  1	!
;   1447  1	! IMPLICIT INPUTS:
;   1448  1	!
;   1449  1	!	None.
;   1450  1	!
;   1451  1	! OUTPUT PARAMETERS:
;   1452  1	!
;   1453  1	!	None.
;   1454  1	!
;   1455  1	! IMPLICIT OUTPUTS:
;   1456  1	!
;   1457  1	!	None.
;   1458  1	!
;   1459  1	! COMPLETION CODES:
;   1460  1	!
;   1461  1	!	KER_NORMAL - Output went ok.
;   1462  1	!	KER_RMS32 - RMS-32 error.
;   1463  1	!
;   1464  1	! SIDE EFFECTS:
;   1465  1	!
;   1466  1	!	None.
;   1467  1	!
;   1468  1	!--
;   1469  1	 
;   1470  2	    BEGIN
;   1471  2	!
;   1472  2	! Completion codes returned:
;   1473  2	!
;   1474  2	    EXTERNAL LITERAL
;   1475  2		KER_NORMAL,				! Normal return
;   1476  2		KER_RMS32;				! RMS-32 error
;   1477  2	!
;   1478  2	! Local variables
;   1479  2	!
;   1480  2	    LOCAL
;   1481  2		STATUS;					! Random status values
;   1482  2	 
;   1483  2	!
;   1484  2	! First update the record length
;   1485  2	!
;   1486  2	    FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
;   1487  2	!
;   1488  2	! Now output the record to the file
;   1489  2	!
;   1490  2	    STATUS = $PUT (RAB = FILE_RAB);
;   1491  2	!
;   1492  2	! Update the pointers first
;   1493  2	!
;   1494  2	    FILE_REC_COUNT = 0;
;   1495  2	    FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
;   1496  2	!
;   1497  2	! Now determine if we failed attempting to write the record
;   1498  2	!
;   1499  2	 
;   1500  2	    IF NOT .STATUS
;   1501  2	    THEN
;   1502  3		BEGIN
;   1503  3		FILE_ERROR (.STATUS);
;   1504  3		RETURN KER_RMS32
;   1505  2		END;
;   1506  2	 
;   1507  2	    RETURN KER_NORMAL
;   1508  1	    END;					! End of DUMP_BUFFER



	.EXTRN  SYS$PUT

;DUMP_BUFFER
U.2:	.WORD   ^M<R2>				 ;Save R2			       1431 			       0004   00000
	MOVAB   G^U.16, R2			 ;U.16, R2			      	    	       52 00000000'  00  9E   00002
	MOVW    (R2), -86(R2)			 ;FILE_REC_COUNT, FILE_RAB+34	       1486 	  AA   A2	     62  B0   00009
	PUSHAB  -120(R2)			 ;FILE_RAB			       1490 			88   A2  9F   0000D
	CALLS   #1, G^SYS$PUT			 ;#1, SYS$PUT			      	    00000000G  00	     01  FB   00010
	CLRL    (R2)				 ;FILE_REC_COUNT		       1494 			     62  D4   00017
	MOVL    8(R2), -4(R2)			 ;REC_ADDRESS, FILE_REC_POINTER        1495 	  FC   A2	08   A2  D0   00019
	BLBS    R0, 1$				 ;STATUS, 1$			       1500 	       11	     50  E8   0001E
	PUSHL   R0				 ;STATUS			       1503 			     50  DD   00021
	CALLS   #1, G^U.6			 ;#1, U.6			      	    00000000V  00	     01  FB   00023
	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       1504 	       50 00000000G  8F  D0   0002A
	RET     				 ;				      	    				 04   00031
1$:	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       1507 	       50 00000000G  8F  D0   00032
	RET     				 ;				      	    				 04   00039

; Routine Size:  58 bytes,    Routine Base:  $CODE$ + 049B


;   1509  1	 %SBTTL 'OPEN_READING'
;   1510  1	ROUTINE OPEN_READING =
;   1511  1	 
;   1512  1	!++
;   1513  1	! FUNCTIONAL DESCRIPTION:
;   1514  1	!
;   1515  1	!	This routine will open a file for reading.  It will return either
;   1516  1	!	true or false to the called depending on the success of the
;   1517  1	!	operation.
;   1518  1	!
;   1519  1	! CALLING SEQUENCE:
;   1520  1	!
;   1521  1	!	status = OPEN_READING();
;   1522  1	!
;   1523  1	! INPUT PARAMETERS:
;   1524  1	!
;   1525  1	!	None.
;   1526  1	!
;   1527  1	! IMPLICIT INPUTS:
;   1528  1	!
;   1529  1	!	None.
;   1530  1	!
;   1531  1	! OUTPUT PARAMETERS:
;   1532  1	!
;   1533  1	!	None.
;   1534  1	!
;   1535  1	! IMPLICIT OUTPUTS:
;   1536  1	!
;   1537  1	!	None.
;   1538  1	!
;   1539  1	! COMPLETION CODES:
;   1540  1	!
;   1541  1	!   KER_NORMAL - Normal return
;   1542  1	!   KER_RMS32 - RMS error encountered
;   1543  1	!
;   1544  1	! SIDE EFFECTS:
;   1545  1	!
;   1546  1	!	None.
;   1547  1	!
;   1548  1	!--
;   1549  1	 
;   1550  2	    BEGIN
;   1551  2	!
;   1552  2	! Completion codes returned:
;   1553  2	!
;   1554  2	    EXTERNAL LITERAL
;   1555  2		KER_NORMAL,				! Normal return
;   1556  2		KER_RMS32;				! RMS-32 error
;   1557  2	 
;   1558  2	    LOCAL
;   1559  2		STATUS;					! Random status values
;   1560  2	 
;   1561  2	!
;   1562  2	! We now have an expanded file specification that we can use to process
;   1563  2	! the file.
;   1564  2	!
;   1565  2	 
;   1566  2	    IF .FILE_TYPE NEQ FILE_BLK
;   1567  2	    THEN
;   1568  3		BEGIN
; P 1569  3		$FAB_INIT (FAB = FILE_FAB, FAC = GET, FOP = NAM, RFM = STM, NAM = FILE_NAM,
;   1570  3		    XAB = FILE_XABFHC);
;   1571  3		END
;   1572  2	    ELSE
;   1573  3		BEGIN
; P 1574  3		$FAB_INIT (FAB = FILE_FAB, FAC = (GET, BIO), FOP = NAM, RFM = STM,
;   1575  3		    NAM = FILE_NAM, XAB = FILE_XABFHC);
;   1576  2		END;
;   1577  2	 
;   1578  2	    $XABFHC_INIT (XAB = FILE_XABFHC);
;   1579  2	    STATUS = $OPEN (FAB = FILE_FAB);
;   1580  2	 
;   1581  3	    IF (.STATUS NEQ RMS$_NORMAL AND .STATUS NEQ RMS$_KFF)
;   1582  2	    THEN
;   1583  3		BEGIN
;   1584  3		FILE_ERROR (.STATUS);
;   1585  3		RETURN KER_RMS32;
;   1586  2		END;
;   1587  2	 
;   1588  2	!
;   1589  2	! Now allocate a buffer for the records
;   1590  2	!
;   1591  2	    REC_SIZE = (IF .FILE_TYPE EQL FILE_BLK THEN 512 ELSE .FILE_XABFHC [XAB$W_LRL]);
;   1592  2	 
;   1593  2	    IF .REC_SIZE EQL 0 THEN REC_SIZE = MAX_REC_LENGTH;
;   1594  2	 
;   1595  2	    STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
;   1596  2	!
;   1597  2	! Determine if we need a buffer for the fixed control area
;   1598  2	!
;   1599  2	    FIX_SIZE = .FILE_FAB [FAB$B_FSZ];
;   1600  2	 
;   1601  2	    IF .FIX_SIZE NEQ 0
;   1602  2	    THEN
;   1603  3		BEGIN
;   1604  3		STATUS = LIB$GET_VM (FIX_SIZE, FIX_ADDRESS);
;   1605  2		END;
;   1606  2	 
;   1607  2	!
;   1608  2	! Initialize the RAB for the $CONNECT RMS call
;   1609  2	!
; P 1610  2	    $RAB_INIT (RAB = FILE_RAB, FAB = FILE_FAB, RAC = SEQ, ROP = NLK, UBF = .REC_ADDRESS,
;   1611  2		USZ = .REC_SIZE);
;   1612  2	 
;   1613  2	    IF .FIX_SIZE NEQ 0 THEN FILE_RAB [RAB$L_RHB] = .FIX_ADDRESS;
;   1614  2	 
;   1615  2							! Store header address
;   1616  2	    STATUS = $CONNECT (RAB = FILE_RAB);
;   1617  2	 
;   1618  2	    IF NOT .STATUS
;   1619  2	    THEN
;   1620  3		BEGIN
;   1621  3		FILE_ERROR (.STATUS);
;   1622  3		RETURN KER_RMS32;
;   1623  2		END;
;   1624  2	 
;   1625  2	    FILE_REC_COUNT = -1;
;   1626  2	    FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
;   1627  2	    RETURN KER_NORMAL;
;   1628  1	    END;					! End of OPEN_READING



U.36=		    U.10
U.37=		    U.10
U.38=		    U.13
U.39=		    U.12
	.EXTRN  SYS$OPEN, SYS$CONNECT

;OPEN_READING
U.35:	.WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9>	 ;Save R2,R3,R4,R5,R6,R7,R8,R9	       1510 			       03FC   00000
	MOVAB   G^FILE_TYPE, R9			 ;FILE_TYPE, R9			      	    	       59 00000000'  00  9E   00002
	MOVAB   G^LIB$GET_VM, R8		 ;LIB$GET_VM, R8		      	    	       58 00000000G  00  9E   00009
	MOVAB   G^U.36, R7			 ;U.36, R7			      	    	       57 00000000'  00  9E   00010
	CMPL    (R9), #3			 ;FILE_TYPE, #3			       1566 	       03	     69  D1   00017
	BEQL    1$				 ;1$				      	    			     1B  13   0001A
	MOVC5   #0, (SP), #0, #80, (R7)		 ;#0, (SP), #0, #80, $RMS_PTR	       1570 	       6E	     00  2C   0001C
						 ;					    	0050   8F	     00       0001F
						 ;					    			     67       00023
	MOVW    #20483, (R7)			 ;#20483, $RMS_PTR		      	    	       67     5003   8F  B0   00024
	MOVL    #16777216, 4(R7)		 ;#16777216, $RMS_PTR+4		      	    	  04   A7 01000000   8F  D0   00029
	MOVB    #2, 22(R7)			 ;#2, $RMS_PTR+22		      	    	  16   A7	     02  90   00031
	BRB     2$				 ;2$				      	    			     19  11   00035
1$:	MOVC5   #0, (SP), #0, #80, (R7)		 ;#0, (SP), #0, #80, $RMS_PTR	       1575 	       6E	     00  2C   00037
						 ;					    	0050   8F	     00       0003A
						 ;					    			     67       0003E
	MOVW    #20483, (R7)			 ;#20483, $RMS_PTR		      	    	       67     5003   8F  B0   0003F
	MOVL    #16777216, 4(R7)		 ;#16777216, $RMS_PTR+4		      	    	  04   A7 01000000   8F  D0   00044
	MOVB    #34, 22(R7)			 ;#34, $RMS_PTR+22		      	    	  16   A7	     22  90   0004C
2$:	MOVB    #4, 31(R7)			 ;#4, $RMS_PTR+31		      	    	  1F   A7	     04  90   00050
	MOVAB   244(R7), 36(R7)			 ;FILE_XABFHC, $RMS_PTR+36	      	    	  24   A7     00F4   C7  9E   00054
	MOVAB   80(R7), 40(R7)			 ;FILE_NAM, $RMS_PTR+40		       1570 	  28   A7	50   A7  9E   0005A
	MOVC5   #0, (SP), #0, #44, 244(R7)	 ;#0, (SP), #0, #44, $RMS_PTR	       1578 	       6E	     00  2C   0005F
						 ;					    	       2C	     00       00062
						 ;					    		      00F4   C7       00064
	MOVW    #11293, 244(R7)			 ;#11293, $RMS_PTR		      	    	00F4   C7     2C1D   8F  B0   00067
	PUSHL   R7				 ;R7				       1579 			     57  DD   0006E
	CALLS   #1, G^SYS$OPEN			 ;#1, SYS$OPEN			      	    00000000G  00	     01  FB   00070
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   00077
	CMPL    R6, #65537			 ;STATUS, #65537		       1581 00010001   8F	     56  D1   0007A
	BEQL    3$				 ;3$				      	    			     0C  13   00081
	CMPL    R6, #98353			 ;STATUS, #98353		      	    00018031   8F	     56  D1   00083
	BEQL    3$				 ;3$				      	    			     03  13   0008A
	BRW     9$				 ;9$				      	    			   0092  31   0008C
3$:	CMPL    (R9), #3			 ;FILE_TYPE, #3			       1591 	       03	     69  D1   0008F
	BNEQ    4$				 ;4$				      	    			     07  12   00092
	MOVZWL  #512, R0			 ;#512, R0			      	    	       50     0200   8F  3C   00094
	BRB     5$				 ;5$				      	    			     05  11   00099
4$:	MOVZWL  254(R7), R0			 ;FILE_XABFHC+10, R0		      	    	       50     00FE   C7  3C   0009B
5$:	MOVL    R0, 300(R7)			 ;R0, REC_SIZE			      	    	012C   C7	     50  D0   000A0
	BNEQ    6$				 ;6$				       1593 			     07  12   000A5
	MOVZWL  #4096, 300(R7)			 ;#4096, REC_SIZE		      	    	012C   C7     1000   8F  3C   000A7
6$:	PUSHAB  304(R7)				 ;REC_ADDRESS			       1595 		      0130   C7  9F   000AE
	PUSHAB  300(R7)				 ;REC_SIZE			      	    		      012C   C7  9F   000B2
	CALLS   #2, (R8)			 ;#2, LIB$GET_VM		      	    	       68	     02  FB   000B6
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   000B9
	MOVZBL  63(R7), 308(R7)			 ;FILE_FAB+63, FIX_SIZE		       1599 	0134   C7	3F   A7  9A   000BC
	BEQL    7$				 ;7$				       1601 			     0E  13   000C2
	PUSHAB  312(R7)				 ;FIX_ADDRESS			       1604 		      0138   C7  9F   000C4
	PUSHAB  308(R7)				 ;FIX_SIZE			      	    		      0134   C7  9F   000C8
	CALLS   #2, (R8)			 ;#2, LIB$GET_VM		      	    	       68	     02  FB   000CC
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   000CF
7$:	MOVC5   #0, (SP), #0, #68, 176(R7)	 ;#0, (SP), #0, #68, $RMS_PTR	       1611 	       6E	     00  2C   000D2
						 ;					    	0044   8F	     00       000D5
						 ;					    		      00B0   C7       000D9
	MOVW    #17409, 176(R7)			 ;#17409, $RMS_PTR		      	    	00B0   C7     4401   8F  B0   000DC
	MOVL    #1048576, 180(R7)		 ;#1048576, $RMS_PTR+4		      	    	00B4   C7 00100000   8F  D0   000E3
	CLRB    206(R7)				 ;$RMS_PTR+30			      	    		      00CE   C7  94   000EC
	MOVW    300(R7), 208(R7)		 ;REC_SIZE, $RMS_PTR+32		      	    	00D0   C7     012C   C7  B0   000F0
	MOVL    304(R7), 212(R7)		 ;REC_ADDRESS, $RMS_PTR+36	      	    	00D4   C7     0130   C7  D0   000F7
	MOVAB   (R7), 236(R7)			 ;FILE_FAB, $RMS_PTR+60		      	    	00EC   C7	     67  9E   000FE
	TSTL    308(R7)				 ;FIX_SIZE			       1613 		      0134   C7  D5   00103
	BEQL    8$				 ;8$				      	    			     07  13   00107
	MOVL    312(R7), 220(R7)		 ;FIX_ADDRESS, FILE_RAB+44	      	    	00DC   C7     0138   C7  D0   00109
8$:	PUSHAB  176(R7)				 ;FILE_RAB			       1616 		      00B0   C7  9F   00110
	CALLS   #1, G^SYS$CONNECT		 ;#1, SYS$CONNECT		      	    00000000G  00	     01  FB   00114
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   0011B
	BLBS    R6, 10$				 ;STATUS, 10$			       1618 	       11	     56  E8   0011E
9$:	PUSHL   R6				 ;STATUS			       1621 			     56  DD   00121
	CALLS   #1, G^U.6			 ;#1, U.6			      	    00000000V  00	     01  FB   00123
	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       1622 	       50 00000000G  8F  D0   0012A
	RET     				 ;				      	    				 04   00131
10$:	MNEGL   #1, 296(R7)			 ;#1, FILE_REC_COUNT		       1625 	0128   C7	     01  CE   00132
	CLRL    24(R7)				 ;FILE_FAB+24			       1626 			18   A7  D4   00137
	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       1627 	       50 00000000G  8F  D0   0013A
	RET     				 ;				      	    				 04   00141

; Routine Size:  322 bytes,    Routine Base:  $CODE$ + 04D5


;   1629  1	 %SBTTL 'FILE_OPEN'
;   1630  1	 
;   1631  1	GLOBAL ROUTINE FILE_OPEN (FUNCTION) =
;   1632  1	 
;   1633  1	!++
;   1634  1	! FUNCTIONAL DESCRIPTION:
;   1635  1	!
;   1636  1	!	This routine will open a file for reading or writing depending on
;   1637  1	!	the function that is passed this routine.  It will handle wildcards
;   1638  1	!	on the read function.
;   1639  1	!
;   1640  1	! CALLING SEQUENCE:
;   1641  1	!
;   1642  1	!	status = FILE_OPEN(FUNCTION);
;   1643  1	!
;   1644  1	! INPUT PARAMETERS:
;   1645  1	!
;   1646  1	!	FUNCTION - Function to do.  Either FNC_READ or FNC_WRITE.
;   1647  1	!
;   1648  1	! IMPLICIT INPUTS:
;   1649  1	!
;   1650  1	!	FILE_NAME and FILE_SIZE set up with the file name and the length
;   1651  1	!	of the name.
;   1652  1	!
;   1653  1	! OUTPUT PARAMETERS:
;   1654  1	!
;   1655  1	!	None.
;   1656  1	!
;   1657  1	! IMPLICIT OUTPUTS:
;   1658  1	!
;   1659  1	!	FILE_NAME and FILE_SIZE set up with the file name and the length
;   1660  1	!	of the name.
;   1661  1	!
;   1662  1	! COMPLETION CODES:
;   1663  1	!
;   1664  1	!   KER_NORMAL - File opened correctly.
;   1665  1	!   KER_RMS32 - Problem processing the file.
;   1666  1	!   KER_INTERNALERR - Internal Kermit-32 error.
;   1667  1	!
;   1668  1	! SIDE EFFECTS:
;   1669  1	!
;   1670  1	!	None.
;   1671  1	!
;   1672  1	!--
;   1673  1	 
;   1674  2	    BEGIN
;   1675  2	!
;   1676  2	! Completion codes returned:
;   1677  2	!
;   1678  2	    EXTERNAL LITERAL
;   1679  2		KER_NORMAL,				! Normal return
;   1680  2		KER_INTERNALERR,			! Internal error
;   1681  2		KER_RMS32;				! RMS-32 error
;   1682  2	 
;   1683  2	    EXTERNAL ROUTINE
;   1684  2		TT_TEXT : NOVALUE;	! Output an ASCIZ string
;   1685  2	 
;   1686  2	    EXTERNAL ROUTINE
;   1687  2	!
;   1688  2	! This external routine is called to perform any checks on the file
;   1689  2	! specification that the user wishes.  It must return a true value
;   1690  2	! if the access is to be allowed, and a false value (error code) if
;   1691  2	! access is to be denied.  The error code may be any valid system wide
;   1692  2	! error code, any Kermit-32 error code (KER_xxx) or a user specific code,
;   1693  2	! provided a message file defining the error code is loaded with Kermit-32.
;   1694  2	!
;   1695  2	! The routine is called as:
;   1696  2	!
;   1697  2	!	STATUS = USER_FILE_CHECK ( FILE NAME DESCRIPTOR, READ/WRITE FLAG)
;   1698  2	!
;   1699  2	! The file name descriptor points to the file specification supplied by
;   1700  2	! the user.  The read/write flag is TRUE if the file is being read, and
;   1701  2	! false if it is being written.
;   1702  2	!
;   1703  2		USER_FILE_CHECK : ADDRESSING_MODE(GENERAL) WEAK;
;   1704  2	 
;   1705  2	    LOCAL
;   1706  2		STATUS,					! Random status values
;   1707  2		ITMLST : VECTOR [4, LONG],		! For GETDVI call
;   1708  2		SIZE : WORD;				! Size of resulting file name
;   1709  2	 
;   1710  2	!
;   1711  2	! Assume we can do searches
;   1712  2	!
;   1713  2	    SEARCH_FLAG = TRUE;
;   1714  2	    DEV_CLASS = DC$_DISK;			! Assume disk file
;   1715  2	!
;   1716  2	! Now do the function dependent processing
;   1717  2	!
;   1718  2	    FILE_MODE = .FUNCTION;
;   1719  2	    FILE_DESC [DSC$W_LENGTH] = .FILE_SIZE;	! Length of file name
;   1720  2	!
;   1721  2	! Call user routine (if any)
;   1722  2	!
;   1723  2	    IF USER_FILE_CHECK NEQ 0
;   1724  2	    THEN
;   1725  3		BEGIN
;   1726  3		STATUS = USER_FILE_CHECK (FILE_DESC, %REF (.FILE_MODE EQL FNC_READ));
;   1727  3		IF NOT .STATUS
;   1728  3		THEN
;   1729  4		    BEGIN
;   1730  4		    LIB$SIGNAL (.STATUS);
;   1731  4		    RETURN .STATUS;
;   1732  3		    END;
;   1733  2		END;
;   1734  2	!
;   1735  2	! Select the correct routine depending on if we are reading or writing.
;   1736  2	!
;   1737  2	 
;   1738  2	    SELECTONE .FUNCTION OF
;   1739  2		SET
;   1740  2	 
;   1741  2		[FNC_READ] :
;   1742  3		    BEGIN
;   1743  3	!
;   1744  3	! Determine device type
;   1745  3	!
;   1746  3		    ITMLST [0] = DVI$_DEVCLASS^16 + 4;	! Want device class
;   1747  3		    ITMLST [1] = DEV_CLASS;		! Put it there
;   1748  3		    ITMLST [2] = ITMLST [2];		! Put the size here
;   1749  3		    ITMLST [3] = 0;			! End the list
;   1750  3		    STATUS = $GETDVIW (DEVNAM = FILE_DESC, ITMLST = ITMLST);
;   1751  3	!
;   1752  3	! If not a disk, can't do search
;   1753  3	!
;   1754  3		    IF .STATUS AND .DEV_CLASS NEQ DC$_DISK THEN SEARCH_FLAG = FALSE;
;   1755  3	 
;   1756  3	!
;   1757  3	! Now set up the FAB with the information it needs.
;   1758  3	!
; P 1759  3		    $FAB_INIT (FAB = FILE_FAB, FOP = NAM, FNA = FILE_NAME, FNS = .FILE_SIZE,
;   1760  3			NAM = FILE_NAM, DNM = '.;0');
;   1761  3	!
;   1762  3	! Now initialize the NAM block
;   1763  3	!
; P 1764  3		    $NAM_INIT (NAM = FILE_NAM, RSA = RES_STR, RSS = NAM$C_MAXRSS, ESA = EXP_STR,
;   1765  3			ESS = NAM$C_MAXRSS);
;   1766  3	!
;   1767  3	! First parse the file specification.
;   1768  3	!
;   1769  3		    STATUS = $PARSE (FAB = FILE_FAB);
;   1770  3	 
;   1771  3		    IF NOT .STATUS
;   1772  3		    THEN
;   1773  4			BEGIN
;   1774  4			FILE_ERROR (.STATUS);
;   1775  4			RETURN KER_RMS32;
;   1776  3			END;
;   1777  3	 
;   1778  3		    IF .SEARCH_FLAG
;   1779  3		    THEN
;   1780  4			BEGIN
;   1781  4			STATUS = $SEARCH (FAB = FILE_FAB);
;   1782  4	 
;   1783  4			IF NOT .STATUS
;   1784  4			THEN
;   1785  5			    BEGIN
;   1786  5			    FILE_ERROR (.STATUS);
;   1787  5			    RETURN KER_RMS32;
;   1788  4			    END;
;   1789  4	 
;   1790  3			END;
;   1791  3	 
;   1792  3	!
;   1793  3	! We now have an expanded file specification that we can use to process
;   1794  3	! the file.
;   1795  3	!
;   1796  3		    STATUS = OPEN_READING ();		! Open the file
;   1797  3	 
;   1798  3		    IF NOT .STATUS THEN RETURN .STATUS;	! If we couldn't, pass error back
;   1799  3	 
;   1800  3	!
;   1801  3	! Tell user what name we ended up with for storing the file
;   1802  3	!
;   1803  3	 
;   1804  3		    IF ( NOT .CONNECT_FLAG) AND .TY_FIL
;   1805  3		    THEN
;   1806  4			BEGIN
;   1807  4	 
;   1808  4			IF .FILE_NAM [NAM$B_RSS] GTR 0
;   1809  4			THEN
;   1810  5			    BEGIN
;   1811  5			    CH$WCHAR (CHR_NUL,
;   1812  5				CH$PTR (.FILE_NAM [NAM$L_RSA],
;   1813  5				    .FILE_NAM [NAM$B_RSL]));
;   1814  5			    TT_TEXT (.FILE_NAM [NAM$L_RSA]);
;   1815  5			    END
;   1816  4			ELSE
;   1817  5			    BEGIN
;   1818  5			    CH$WCHAR (CHR_NUL,
;   1819  5				CH$PTR (.FILE_NAM [NAM$L_ESA],
;   1820  5				    .FILE_NAM [NAM$B_ESL]));
;   1821  5			    TT_TEXT (.FILE_NAM [NAM$L_ESA]);
;   1822  4			    END;
;   1823  4	 
;   1824  4			TT_TEXT (UPLIT (%ASCIZ' as '));
;   1825  3			END;
;   1826  3	 
;   1827  2		    END;				! End of [FNC_READ]
;   1828  2	 
;   1829  2		[FNC_WRITE] :
;   1830  3		    BEGIN
;   1831  3	 
;   1832  3		    SELECTONE .FILE_TYPE OF
;   1833  3			SET
;   1834  3	 
;   1835  3			[FILE_ASC] :
;   1836  4			    BEGIN
; P 1837  4			    $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
; P 1838  4				FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
;   1839  4				ORG = SEQ, RFM = VAR, RAT = CR);
;   1840  3			    END;
;   1841  3	 
;   1842  3			[FILE_BIN] :
;   1843  4			    BEGIN
; P 1844  4			    $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
; P 1845  4				FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
;   1846  4				ORG = SEQ, RFM = VAR);
;   1847  3			    END;
;   1848  3	
;   1849  3			[FILE_FIX] :
;   1850  4			    BEGIN
; P 1851  4			    $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
; P 1852  4				FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
; P 1853  4				ORG = SEQ, RFM = FIX, MRS = (IF .file_blocksize_set 
; P 1854  4	                                                       THEN .file_blocksize
;   1855  4	                                                       ELSE 512));
;   1856  3			    END;
;   1857  3	 
;   1858  3			[FILE_BLK] :
;   1859  4			    BEGIN
; P 1860  4			    $FAB_INIT (FAB = FILE_FAB, FAC = (PUT, BIO), FNA = FILE_NAME,
;   1861  4				FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM);
;   1862  3			    END;
;   1863  3			TES;
;   1864  3	 
;   1865  3	!
;   1866  3	! If we had an alternate file name from the receive command, use it
;   1867  3	! instead of what KERMSG has told us.
;   1868  3	!
;   1869  3	 
;   1870  3		    IF .ALT_FILE_SIZE GTR 0
;   1871  3		    THEN
;   1872  4			BEGIN
;   1873  4			LOCAL
;   1874  4			    ALT_FILE_DESC : BLOCK [8, BYTE];
;   1875  4	 
;   1876  4			ALT_FILE_DESC = .FILE_DESC;
;   1877  4			ALT_FILE_DESC [DSC$W_LENGTH] = .ALT_FILE_SIZE;
;   1878  4			ALT_FILE_DESC [DSC$A_POINTER] = ALT_FILE_NAME;
;   1879  4			IF USER_FILE_CHECK NEQ 0
;   1880  4			THEN
;   1881  5			    BEGIN
;   1882  5			    STATUS = USER_FILE_CHECK (ALT_FILE_DESC, %REF (.FILE_MODE EQL FNC_READ));
;   1883  5			    IF NOT .STATUS
;   1884  5			    THEN
;   1885  6				BEGIN
;   1886  6				LIB$SIGNAL (.STATUS);
;   1887  6				RETURN .STATUS;
;   1888  5				END;
;   1889  4			    END;
;   1890  4			FILE_FAB [FAB$L_FNA] = ALT_FILE_NAME;
;   1891  4			FILE_FAB [FAB$B_FNS] = .ALT_FILE_SIZE;
;   1892  3			END;
;   1893  3	 
; P 1894  3		    $NAM_INIT (NAM = FILE_NAM, ESA = EXP_STR, ESS = NAM$C_MAXRSS, RSA = RES_STR,
;   1895  3			RSS = NAM$C_MAXRSS);
;   1896  3	!
;   1897  3	! Now allocate a buffer for the records
;   1898  3	!
;   1899  3	! Determine correct buffer size
;   1900  3	 
;   1901  3		    SELECTONE .FILE_TYPE OF
;   1902  3			SET
;   1903  3	 
;   1904  3			[FILE_ASC] :
;   1905  3			    REC_SIZE = MAX_REC_LENGTH;
;   1906  3	 
;   1907  3			[FILE_BIN] :
;   1908  4			    REC_SIZE = (IF .file_blocksize_set THEN .file_blocksize
;   1909  3	                                                       ELSE 510);
;   1910  3	
;   1911  3			[FILE_BLK] :
;   1912  3			    REC_SIZE = 512;
;   1913  3	
;   1914  3	                [FILE_FIX] :
;   1915  4	                    REC_SIZE =  (IF .file_blocksize_set THEN .file_blocksize
;   1916  3	                                                        ELSE 512);
;   1917  3	
;   1918  3			TES;
;   1919  3	 
;   1920  3		    STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
;   1921  3	!
;   1922  3	! Now create the file
;   1923  3	!
;   1924  3		    STATUS = $CREATE (FAB = FILE_FAB);
;   1925  3	 
;   1926  3		    IF NOT .STATUS
;   1927  3		    THEN
;   1928  4			BEGIN
;   1929  4			FILE_ERROR (.STATUS);
;   1930  4			RETURN KER_RMS32;
;   1931  3			END;
;   1932  3	 
; P 1933  3		    $RAB_INIT (RAB = FILE_RAB, FAB = FILE_FAB, RAC = SEQ, RBF = .REC_ADDRESS,
;   1934  3			ROP = <NLK, WAT>);
;   1935  3		    STATUS = $CONNECT (RAB = FILE_RAB);
;   1936  3	 
;   1937  3		    IF NOT .STATUS
;   1938  3		    THEN
;   1939  4			BEGIN
;   1940  4			FILE_ERROR (.STATUS);
;   1941  4			RETURN KER_RMS32;
;   1942  3			END;
;   1943  3	 
;   1944  3	!
;   1945  3	! Set the initial state into the FAB field.  This is used to remember
;   1946  3	! whether we need to ignore the line feed which follows a carriage return.
;   1947  3	!
;   1948  3		    FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
;   1949  3		    FILE_REC_COUNT = 0;
;   1950  3		    FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
;   1951  3	!
;   1952  3	! Tell user what name we ended up with for storing the file
;   1953  3	!
;   1954  3	 
;   1955  3		    IF ( NOT .CONNECT_FLAG) AND .TY_FIL
;   1956  3		    THEN
;   1957  4			BEGIN
;   1958  4			TT_TEXT (UPLIT (%ASCIZ' as '));
;   1959  4	 
;   1960  4			IF .FILE_NAM [NAM$B_RSL] GTR 0
;   1961  4			THEN
;   1962  5			    BEGIN
;   1963  5			    CH$WCHAR (CHR_NUL,
;   1964  5				CH$PTR (.FILE_NAM [NAM$L_RSA],
;   1965  5				    .FILE_NAM [NAM$B_RSL]));
;   1966  5			    TT_TEXT (.FILE_NAM [NAM$L_RSA]);
;   1967  5			    END
;   1968  4			ELSE
;   1969  5			    BEGIN
;   1970  5			    CH$WCHAR (CHR_NUL,
;   1971  5				CH$PTR (.FILE_NAM [NAM$L_ESA],
;   1972  5				    .FILE_NAM [NAM$B_ESL]));
;   1973  5			    TT_TEXT (.FILE_NAM [NAM$L_ESA]);
;   1974  4			    END;
;   1975  4	 
;   1976  4			TT_OUTPUT ();
;   1977  3			END;
;   1978  3	 
;   1979  2		    END;
;   1980  2	 
;   1981  2		[OTHERWISE] :
;   1982  2		    RETURN KER_INTERNALERR;
;   1983  2		TES;
;   1984  2	 
;   1985  2	!
;   1986  2	! Copy the file name based on the type of file name we are to use.
;   1987  2	! The possibilities are:
;   1988  2	!		Normal - Just copy name and type
;   1989  2	!		Full - Copy entire name string (either resultant or expanded)
;   1990  2	!		Untranslated - Copy string from name on (includes version, etc.)
;   1991  2	 
;   1992  2	    IF .DEV_CLASS EQL DC$_MAILBOX
;   1993  2	    THEN
;   1994  3		BEGIN
;   1995  3		SIZE = 0;
;   1996  3		FILE_NAME = 0;
;   1997  3		END
;   1998  2	    ELSE
;   1999  2	 
;   2000  2		SELECTONE .FIL_NORMAL_FORM OF
;   2001  2		    SET
;   2002  2	 
;   2003  2		    [FNM_FULL] :
;   2004  3			BEGIN
;   2005  3	 
;   2006  3			IF .FILE_NAM [NAM$B_RSL] GTR 0
;   2007  3			THEN
;   2008  4			    BEGIN
;   2009  4			    CH$COPY (.FILE_NAM [NAM$B_RSL], CH$PTR (.FILE_NAM [NAM$L_RSA]),
;   2010  4				CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
;   2011  4			    SIZE = .FILE_NAM [NAM$B_RSL];
;   2012  4			    END
;   2013  3			ELSE
;   2014  4			    BEGIN
;   2015  4			    CH$COPY (.FILE_NAM [NAM$B_ESL], CH$PTR (.FILE_NAM [NAM$L_ESA]),
;   2016  4				CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
;   2017  4			    SIZE = .FILE_NAM [NAM$B_ESL];
;   2018  4			    END
;   2019  4	 
;   2020  2			END;
;   2021  2	 
;   2022  2		    [FNM_NORMAL, FNM_UNTRAN] :
;   2023  3			BEGIN
;   2024  3			CH$COPY (.FILE_NAM [NAM$B_NAME], CH$PTR (.FILE_NAM [NAM$L_NAME]),
;   2025  3			    .FILE_NAM [NAM$B_TYPE], CH$PTR (.FILE_NAM [NAM$L_TYPE]), CHR_NUL,
;   2026  3			    MAX_FILE_NAME, CH$PTR (FILE_NAME));
;   2027  3			SIZE = .FILE_NAM [NAM$B_NAME] + .FILE_NAM [NAM$B_TYPE];
;   2028  2			END;
;   2029  2		    TES;
;   2030  2	 
;   2031  2	    IF .SIZE GTR MAX_FILE_NAME THEN FILE_SIZE = MAX_FILE_NAME ELSE FILE_SIZE = .SIZE;
;   2032  2	 
;   2033  2	    RETURN KER_NORMAL;
;   2034  1	    END;					! End of FILE_OPEN



	.PSECT  $PLIT$,NOWRT,NOEXE,2

P.AAA:	.ASCII  \.;0\				 ;				      	    			  30  3B  2E  00000
	.BLKB   1									   ;				      00003
P.AAB:	.ASCII  \ as \<0><0><0><0>		 ;				      	      00  00  00  00  20  73  61  20  00004
P.AAC:	.ASCII  \ as \<0><0><0><0>		 ;				      	      00  00  00  00  20  73  61  20  0000C

U.41=		    U.10
U.42=		    U.11
U.43=		    U.10
U.44=		    U.10
U.45=		    U.10
U.46=		    U.10
U.47=		    U.11
U.48=		    U.12
	.EXTRN  KER_INTERNALERR, TT_TEXT, SYS$GETDVIW, SYS$PARSE, SYS$SEARCH, SYS$CREATE
	.WEAK   USER_FILE_CHECK

	.PSECT  $CODE$,NOWRT,2

	.ENTRY  FILE_OPEN, ^M<R2,R3,R4,R5,R6,R7,-;FILE_OPEN, Save R2,R3,R4,R5,R6,R7,-  1631 			       0FFC   00000
		R8,R9,R10,R11>			 ;R8,R9,R10,R11
	SUBL2   #28, SP				 ;#28, SP			      	    	       5E	     1C  C2   00002
	MOVL    #1, G^U.7			 ;#1, U.7			       1713 00000000'  00	     01  D0   00005
	MOVL    #1, G^U.8			 ;#1, U.8			       1714 00000000'  00	     01  D0   0000C
	MOVL    4(AP), R2			 ;FUNCTION, R2			       1718 	       52	04   AC  D0   00013
	MOVL    R2, G^U.14			 ;R2, U.14			      	    00000000'  00	     52  D0   00017
	MOVW    G^FILE_SIZE, G^FILE_DESC	 ;FILE_SIZE, FILE_DESC		       1719 00000000'  00 00000000G  00  B0   0001E
	MOVAB   G^USER_FILE_CHECK, R0		 ;USER_FILE_CHECK, R0		       1723 	       50 00000000G  00  9E   00029
	CLRL    R8				 ;R8				      	    			     58  D4   00030
	TSTL    R0				 ;R0				      	    			     50  D5   00032
	BEQL    2$				 ;2$				      	    			     26  13   00034
	INCL    R8				 ;R8				      	    			     58  D6   00036
	CLRL    (SP)				 ;(SP)				       1726 			     6E  D4   00038
	TSTL    G^U.14				 ;U.14				      	    		  00000000'  00  D5   0003A
	BNEQ    1$				 ;1$				      	    			     02  12   00040
	INCL    (SP)				 ;(SP)				      	    			     6E  D6   00042
1$:	PUSHL   SP				 ;SP				      	    			     5E  DD   00044
	PUSHAB  G^FILE_DESC			 ;FILE_DESC			      	    		  00000000'  00  9F   00046
	CALLS   #2, G^USER_FILE_CHECK		 ;#2, USER_FILE_CHECK		      	    00000000G  00	     02  FB   0004C
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   00053
	BLBS    R7, 2$				 ;STATUS, 2$			       1727 	       03	     57  E8   00056
	BRW     22$				 ;22$				      	    			   02F7  31   00059
2$:	TSTL    R2				 ;R2				       1741 			     52  D5   0005C
	BEQL    3$				 ;3$				      	    			     03  13   0005E
	BRW     11$				 ;11$				      	    			   016B  31   00060
3$:	MOVL    #262148, 12(SP)			 ;#262148, ITMLST		       1746 	  0C   AE 00040004   8F  D0   00063
	MOVAB   G^U.8, 16(SP)			 ;U.8, ITMLST+4			       1747 	  10   AE 00000000'  00  9E   0006B
	MOVAB   20(SP), 20(SP)			 ;ITMLST+8, ITMLST+8		       1748 	  14   AE	14   AE  9E   00073
	CLRL    24(SP)				 ;ITMLST+12			       1749 			18   AE  D4   00078
	CLRQ    -(SP)				 ;-(SP)				       1750 			     7E  7C   0007B
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   0007D
	PUSHAB  28(SP)				 ;ITMLST			      	    			1C   AE  9F   0007F
	PUSHAB  G^FILE_DESC			 ;FILE_DESC			      	    		  00000000'  00  9F   00082
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   00088
	CALLS   #8, G^SYS$GETDVIW		 ;#8, SYS$GETDVIW		      	    00000000G  00	     08  FB   0008A
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   00091
	BLBC    R7, 4$				 ;STATUS, 4$			       1754 	       0F	     57  E9   00094
	CMPL    G^U.8, #1			 ;U.8, #1			      	    	       01 00000000'  00  D1   00097
	BEQL    4$				 ;4$				      	    			     06  13   0009E
	CLRL    G^U.7				 ;U.7				      	    		  00000000'  00  D4   000A0
4$:	MOVC5   #0, (SP), #0, #80, G^U.41	 ;#0, (SP), #0, #80, U.41	       1760 	       6E	     00  2C   000A6
						 ;					    	0050   8F	     00       000A9
						 ;					    		  00000000'  00       000AD
	MOVW    #20483, G^U.41			 ;#20483, U.41			      	    00000000'  00     5003   8F  B0   000B2
	MOVL    #16777216, G^U.41+4		 ;#16777216, U.41+4		      	    00000000'  00 01000000   8F  D0   000BB
	MOVB    #2, G^U.41+22			 ;#2, U.41+22			      	    00000000'  00	     02  90   000C6
	MOVB    #2, G^U.41+31			 ;#2, U.41+31			      	    00000000'  00	     02  90   000CD
	MOVAB   G^U.11, G^U.41+40		 ;U.11, U.41+40			      	    00000000'  00 00000000'  00  9E   000D4
	MOVAB   G^FILE_NAME, G^U.41+44		 ;FILE_NAME, U.41+44		      	    00000000'  00 00000000G  00  9E   000DF
	MOVAB   G^P.AAA, G^U.41+48		 ;P.AAA, U.41+48		      	    00000000'  00 00000000'  00  9E   000EA
	MOVB    G^FILE_SIZE, G^U.41+52		 ;FILE_SIZE, U.41+52		      	    00000000'  00 00000000G  00  90   000F5
	MOVB    #3, G^U.41+53			 ;#3, U.41+53			      	    00000000'  00	     03  90   00100
	MOVC5   #0, (SP), #0, #96, G^U.42	 ;#0, (SP), #0, #96, U.42	       1765 	       6E	     00  2C   00107
						 ;					    	0060   8F	     00       0010A
						 ;					    		  00000000'  00       0010E
	MOVW    #24578, G^U.42			 ;#24578, U.42			      	    00000000'  00     6002   8F  B0   00113
	MNEGB   #1, G^U.42+2			 ;#1, U.42+2			      	    00000000'  00	     01  8E   0011C
	MOVAB   G^U.22, G^U.42+4		 ;U.22, U.42+4			      	    00000000'  00 00000000'  00  9E   00123
	MNEGB   #1, G^U.42+10			 ;#1, U.42+10			      	    00000000'  00	     01  8E   0012E
	MOVAB   G^U.21, G^U.42+12		 ;U.21, U.42+12			      	    00000000'  00 00000000'  00  9E   00135
	PUSHAB  G^U.10				 ;U.10				       1769 		  00000000'  00  9F   00140
	CALLS   #1, G^SYS$PARSE			 ;#1, SYS$PARSE			      	    00000000G  00	     01  FB   00146
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   0014D
	BLBC    R7, 5$				 ;STATUS, 5$			       1771 	       17	     57  E9   00150
	BLBC    G^U.7, 6$			 ;U.7, 6$			       1778 	       16 00000000'  00  E9   00153
	PUSHAB  G^U.10				 ;U.10				       1781 		  00000000'  00  9F   0015A
	CALLS   #1, G^SYS$SEARCH		 ;#1, SYS$SEARCH		      	    00000000G  00	     01  FB   00160
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   00167
5$:	BLBS    R7, 6$				 ;STATUS, 6$			       1783 	       03	     57  E8   0016A
	BRW     33$				 ;33$				      	    			   0312  31   0016D
6$:	CALLS   #0, W^U.35			 ;#0, U.35			       1796 	FD49   CF	     00  FB   00170
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   00175
	BLBS    R7, 7$				 ;STATUS, 7$			       1798 	       03	     57  E8   00178
	BRW     23$				 ;23$				      	    			   01DE  31   0017B
7$:	BLBS    G^CONNECT_FLAG, 10$		 ;CONNECT_FLAG, 10$		       1804 	       46 00000000G  00  E8   0017E
	BLBC    G^TY_FIL, 10$			 ;TY_FIL, 10$			      	    	       3F 00000000G  00  E9   00185
	TSTB    G^U.11+2			 ;U.11+2			       1808 		  00000000'  00  95   0018C
	BEQL    8$				 ;8$				      	    			     10  13   00192
	MOVL    G^U.11+4, R0			 ;U.11+4, R0			       1812 	       50 00000000'  00  D0   00194
	MOVZBL  G^U.11+3, R1			 ;U.11+3, R1			       1813 	       51 00000000'  00  9A   0019B
	BRB     9$				 ;9$				      	    			     0E  11   001A2
8$:	MOVL    G^U.11+12, R0			 ;U.11+12, R0			       1819 	       50 00000000'  00  D0   001A4
	MOVZBL  G^U.11+11, R1			 ;U.11+11, R1			       1820 	       51 00000000'  00  9A   001AB
9$:	CLRB    (R1)[R0]			 ;(R1)[R0]			      	    			   6140  94   001B2
	PUSHL   R0				 ;R0				       1821 			     50  DD   001B5
	CALLS   #1, G^TT_TEXT			 ;#1, TT_TEXT			      	    00000000G  00	     01  FB   001B7
	PUSHAB  G^P.AAB				 ;P.AAB				       1824 		  00000000'  00  9F   001BE
	CALLS   #1, G^TT_TEXT			 ;#1, TT_TEXT			      	    00000000G  00	     01  FB   001C4
10$:	BRW     38$				 ;38$				       1738 			   0335  31   001CB
11$:	CMPL    R2, #1				 ;R2, #1			       1829 	       01	     52  D1   001CE
	BEQL    12$				 ;12$				      	    			     03  13   001D1
	BRW     37$				 ;37$				      	    			   0325  31   001D3
12$:	MOVL    G^FILE_TYPE, R6			 ;FILE_TYPE, R6			       1832 	       56 00000000'  00  D0   001D6
	CMPL    R6, #1				 ;R6, #1			       1835 	       01	     56  D1   001DD
	BNEQ    13$				 ;13$				      	    			     32  12   001E0
	MOVC5   #0, (SP), #0, #80, G^U.43	 ;#0, (SP), #0, #80, U.43	       1839 	       6E	     00  2C   001E2
						 ;					    	0050   8F	     00       001E5
						 ;					    		  00000000'  00       001E9
	MOVW    #20483, G^U.43			 ;#20483, U.43			      	    00000000'  00     5003   8F  B0   001EE
	MOVL    #270532674, G^U.43+4		 ;#270532674, U.43+4		      	    00000000'  00 10200042   8F  D0   001F7
	MOVB    #1, G^U.43+22			 ;#1, U.43+22			      	    00000000'  00	     01  90   00202
	MOVW    #512, G^U.43+29			 ;#512, U.43+29			      	    00000000'  00     0200   8F  B0   00209
	BRB     14$				 ;14$				      	    			     32  11   00212
13$:	CMPL    R6, #2				 ;R6, #2			       1842 	       02	     56  D1   00214
	BNEQ    15$				 ;15$				      	    			     30  12   00217
	MOVC5   #0, (SP), #0, #80, G^U.44	 ;#0, (SP), #0, #80, U.44	       1846 	       6E	     00  2C   00219
						 ;					    	0050   8F	     00       0021C
						 ;					    		  00000000'  00       00220
	MOVW    #20483, G^U.44			 ;#20483, U.44			      	    00000000'  00     5003   8F  B0   00225
	MOVL    #270532674, G^U.44+4		 ;#270532674, U.44+4		      	    00000000'  00 10200042   8F  D0   0022E
	MOVB    #1, G^U.44+22			 ;#1, U.44+22			      	    00000000'  00	     01  90   00239
	CLRB    G^U.44+29			 ;U.44+29			      	    		  00000000'  00  94   00240
14$:	BRW     19$				 ;19$				      	    			   00A4  31   00246
15$:	CMPL    R6, #4				 ;R6, #4			       1849 	       04	     56  D1   00249
	BNEQ    18$				 ;18$				      	    			     73  12   0024C
	MOVC5   #0, (SP), #0, #80, G^U.45	 ;#0, (SP), #0, #80, U.45	       1855 	       6E	     00  2C   0024E
						 ;					    	0050   8F	     00       00251
						 ;					    		  00000000'  00       00255
	MOVW    #20483, G^U.45			 ;#20483, U.45			      	    00000000'  00     5003   8F  B0   0025A
	MOVL    #270532674, G^U.45+4		 ;#270532674, U.45+4		      	    00000000'  00 10200042   8F  D0   00263
	MOVB    #1, G^U.45+22			 ;#1, U.45+22			      	    00000000'  00	     01  90   0026E
	CLRB    G^U.45+29			 ;U.45+29			      	    		  00000000'  00  94   00275
	MOVB    #1, G^U.45+31			 ;#1, U.45+31			      	    00000000'  00	     01  90   0027B
	MOVAB   G^U.11, G^U.45+40		 ;U.11, U.45+40			      	    00000000'  00 00000000'  00  9E   00282
	MOVAB   G^FILE_NAME, G^U.45+44		 ;FILE_NAME, U.45+44		      	    00000000'  00 00000000G  00  9E   0028D
	MOVB    G^FILE_SIZE, G^U.45+52		 ;FILE_SIZE, U.45+52		      	    00000000'  00 00000000G  00  90   00298
	BLBC    G^FILE_BLOCKSIZE_SET, 16$	 ;FILE_BLOCKSIZE_SET, 16$	      	    	       09 00000000'  00  E9   002A3
	MOVL    G^FILE_BLOCKSIZE, R0		 ;FILE_BLOCKSIZE, R0		      	    	       50 00000000'  00  D0   002AA
	BRB     17$				 ;17$				      	    			     05  11   002B1
16$:	MOVZWL  #512, R0			 ;#512, R0			      	    	       50     0200   8F  3C   002B3
17$:	MOVW    R0, G^U.45+54			 ;R0, U.45+54			      	    00000000'  00	     50  B0   002B8
	BRB     20$				 ;20$				      	    			     54  11   002BF
18$:	CMPL    R6, #3				 ;R6, #3			       1858 	       03	     56  D1   002C1
	BNEQ    20$				 ;20$				      	    			     4F  12   002C4
	MOVC5   #0, (SP), #0, #80, G^U.46	 ;#0, (SP), #0, #80, U.46	       1861 	       6E	     00  2C   002C6
						 ;					    	0050   8F	     00       002C9
						 ;					    		  00000000'  00       002CD
	MOVW    #20483, G^U.46			 ;#20483, U.46			      	    00000000'  00     5003   8F  B0   002D2
	MOVL    #270532674, G^U.46+4		 ;#270532674, U.46+4		      	    00000000'  00 10200042   8F  D0   002DB
	MOVB    #33, G^U.46+22			 ;#33, U.46+22			      	    00000000'  00	     21  90   002E6
19$:	MOVB    #2, G^U.46+31			 ;#2, U.46+31			      	    00000000'  00	     02  90   002ED
	MOVAB   G^U.11, G^U.46+40		 ;U.11, U.46+40			      	    00000000'  00 00000000'  00  9E   002F4
	MOVAB   G^FILE_NAME, G^U.46+44		 ;FILE_NAME, U.46+44		      	    00000000'  00 00000000G  00  9E   002FF
	MOVB    G^FILE_SIZE, G^U.46+52		 ;FILE_SIZE, U.46+52		      	    00000000'  00 00000000G  00  90   0030A
20$:	MOVL    G^ALT_FILE_SIZE, R0		 ;ALT_FILE_SIZE, R0		       1870 	       50 00000000G  00  D0   00315
	BLEQ    25$				 ;25$				      	    			     58  15   0031C
	MOVL    G^FILE_DESC, 4(SP)		 ;FILE_DESC, ALT_FILE_DESC	       1876 	  04   AE 00000000'  00  D0   0031E
	MOVW    R0, 4(SP)			 ;R0, ALT_FILE_DESC		       1877 	  04   AE	     50  B0   00326
	MOVAB   G^ALT_FILE_NAME, 8(SP)		 ;ALT_FILE_NAME, ALT_FILE_DESC+4       1878 	  08   AE 00000000G  00  9E   0032A
	BLBC    R8, 24$				 ;R8, 24$			       1879 	       2B	     58  E9   00332
	CLRL    (SP)				 ;(SP)				       1882 			     6E  D4   00335
	TSTL    G^U.14				 ;U.14				      	    		  00000000'  00  D5   00337
	BNEQ    21$				 ;21$				      	    			     02  12   0033D
	INCL    (SP)				 ;(SP)				      	    			     6E  D6   0033F
21$:	PUSHL   SP				 ;SP				      	    			     5E  DD   00341
	PUSHAB  8(SP)				 ;ALT_FILE_DESC			      	    			08   AE  9F   00343
	CALLS   #2, G^USER_FILE_CHECK		 ;#2, USER_FILE_CHECK		      	    00000000G  00	     02  FB   00346
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   0034D
	BLBS    R7, 24$				 ;STATUS, 24$			       1883 	       0D	     57  E8   00350
22$:	PUSHL   R7				 ;STATUS			       1886 			     57  DD   00353
	CALLS   #1, G^LIB$SIGNAL		 ;#1, LIB$SIGNAL		      	    00000000G  00	     01  FB   00355
23$:	MOVL    R7, R0				 ;STATUS, R0			       1887 	       50	     57  D0   0035C
	RET     				 ;				      	    				 04   0035F
24$:	MOVAB   G^ALT_FILE_NAME, G^U.10+44	 ;ALT_FILE_NAME, U.10+44	       1890 00000000'  00 00000000G  00  9E   00360
	MOVB    G^ALT_FILE_SIZE, G^U.10+52	 ;ALT_FILE_SIZE, U.10+52	       1891 00000000'  00 00000000G  00  90   0036B
25$:	MOVC5   #0, (SP), #0, #96, G^U.47	 ;#0, (SP), #0, #96, U.47	       1895 	       6E	     00  2C   00376
						 ;					    	0060   8F	     00       00379
						 ;					    		  00000000'  00       0037D
	MOVW    #24578, G^U.47			 ;#24578, U.47			      	    00000000'  00     6002   8F  B0   00382
	MNEGB   #1, G^U.47+2			 ;#1, U.47+2			      	    00000000'  00	     01  8E   0038B
	MOVAB   G^U.22, G^U.47+4		 ;U.22, U.47+4			      	    00000000'  00 00000000'  00  9E   00392
	MNEGB   #1, G^U.47+10			 ;#1, U.47+10			      	    00000000'  00	     01  8E   0039D
	MOVAB   G^U.21, G^U.47+12		 ;U.21, U.47+12			      	    00000000'  00 00000000'  00  9E   003A4
	MOVL    G^FILE_TYPE, R0			 ;FILE_TYPE, R0			       1901 	       50 00000000'  00  D0   003AF
	CMPL    R0, #1				 ;R0, #1			       1904 	       01	     50  D1   003B6
	BNEQ    26$				 ;26$				      	    			     0B  12   003B9
	MOVZWL  #4096, G^U.17			 ;#4096, U.17			       1905 00000000'  00     1000   8F  3C   003BB
	BRB     32$				 ;32$				      	    			     44  11   003C4
26$:	CMPL    R0, #2				 ;R0, #2			       1907 	       02	     50  D1   003C6
	BNEQ    27$				 ;27$				      	    			     0E  12   003C9
	BLBS    G^FILE_BLOCKSIZE_SET, 29$	 ;FILE_BLOCKSIZE_SET, 29$	       1908 	       23 00000000'  00  E8   003CB
	MOVZWL  #510, R0			 ;#510, R0			       1909 	       50     01FE   8F  3C   003D2
	BRB     31$				 ;31$				       1908 			     2A  11   003D7
27$:	CMPL    R0, #3				 ;R0, #3			       1911 	       03	     50  D1   003D9
	BNEQ    28$				 ;28$				      	    			     0B  12   003DC
	MOVZWL  #512, G^U.17			 ;#512, U.17			       1912 00000000'  00     0200   8F  3C   003DE
	BRB     32$				 ;32$				      	    			     21  11   003E7
28$:	CMPL    R0, #4				 ;R0, #4			       1914 	       04	     50  D1   003E9
	BNEQ    32$				 ;32$				      	    			     1C  12   003EC
	BLBC    G^FILE_BLOCKSIZE_SET, 30$	 ;FILE_BLOCKSIZE_SET, 30$	       1915 	       09 00000000'  00  E9   003EE
29$:	MOVL    G^FILE_BLOCKSIZE, R0		 ;FILE_BLOCKSIZE, R0		      	    	       50 00000000'  00  D0   003F5
	BRB     31$				 ;31$				      	    			     05  11   003FC
30$:	MOVZWL  #512, R0			 ;#512, R0			       1916 	       50     0200   8F  3C   003FE
31$:	MOVL    R0, G^U.17			 ;R0, U.17			       1915 00000000'  00	     50  D0   00403
32$:	PUSHAB  G^U.18				 ;U.18				       1920 		  00000000'  00  9F   0040A
	PUSHAB  G^U.17				 ;U.17				      	    		  00000000'  00  9F   00410
	CALLS   #2, G^LIB$GET_VM		 ;#2, LIB$GET_VM		      	    00000000G  00	     02  FB   00416
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   0041D
	PUSHAB  G^U.10				 ;U.10				       1924 		  00000000'  00  9F   00420
	CALLS   #1, G^SYS$CREATE		 ;#1, SYS$CREATE		      	    00000000G  00	     01  FB   00426
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   0042D
	BLBC    R7, 33$				 ;STATUS, 33$			       1926 	       4F	     57  E9   00430
	MOVC5   #0, (SP), #0, #68, G^U.48	 ;#0, (SP), #0, #68, U.48	       1934 	       6E	     00  2C   00433
						 ;					    	0044   8F	     00       00436
						 ;					    		  00000000'  00       0043A
	MOVW    #17409, G^U.48			 ;#17409, U.48			      	    00000000'  00     4401   8F  B0   0043F
	MOVL    #1179648, G^U.48+4		 ;#1179648, U.48+4		      	    00000000'  00 00120000   8F  D0   00448
	CLRB    G^U.48+30			 ;U.48+30			      	    		  00000000'  00  94   00453
	MOVL    G^U.18, G^U.48+40		 ;U.18, U.48+40			      	    00000000'  00 00000000'  00  D0   00459
	MOVAB   G^U.10, G^U.48+60		 ;U.10, U.48+60			      	    00000000'  00 00000000'  00  9E   00464
	PUSHAB  G^U.12				 ;U.12				       1935 		  00000000'  00  9F   0046F
	CALLS   #1, G^SYS$CONNECT		 ;#1, SYS$CONNECT		      	    00000000G  00	     01  FB   00475
	MOVL    R0, R7				 ;R0, STATUS			      	    	       57	     50  D0   0047C
	BLBS    R7, 34$				 ;STATUS, 34$			       1937 	       11	     57  E8   0047F
33$:	PUSHL   R7				 ;STATUS			       1940 			     57  DD   00482
	CALLS   #1, G^U.6			 ;#1, U.6			      	    00000000V  00	     01  FB   00484
	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       1941 	       50 00000000G  8F  D0   0048B
	RET     				 ;				      	    				 04   00492
34$:	MOVL    #2, G^U.10+24			 ;#2, U.10+24			       1948 00000000'  00	     02  D0   00493
	CLRL    G^U.16				 ;U.16				       1949 		  00000000'  00  D4   0049A
	MOVL    G^U.18, G^U.15			 ;U.18, U.15			       1950 00000000'  00 00000000'  00  D0   004A0
	BLBS    G^CONNECT_FLAG, 38$		 ;CONNECT_FLAG, 38$		       1955 	       51 00000000G  00  E8   004AB
	BLBC    G^TY_FIL, 38$			 ;TY_FIL, 38$			      	    	       4A 00000000G  00  E9   004B2
	PUSHAB  G^P.AAC				 ;P.AAC				       1958 		  00000000'  00  9F   004B9
	CALLS   #1, G^TT_TEXT			 ;#1, TT_TEXT			      	    00000000G  00	     01  FB   004BF
	MOVZBL  G^U.11+3, R1			 ;U.11+3, R1			       1960 	       51 00000000'  00  9A   004C6
	BLEQ    35$				 ;35$				      	    			     09  15   004CD
	MOVL    G^U.11+4, R0			 ;U.11+4, R0			       1964 	       50 00000000'  00  D0   004CF
	BRB     36$				 ;36$				       1965 			     0E  11   004D6
35$:	MOVL    G^U.11+12, R0			 ;U.11+12, R0			       1971 	       50 00000000'  00  D0   004D8
	MOVZBL  G^U.11+11, R1			 ;U.11+11, R1			       1972 	       51 00000000'  00  9A   004DF
36$:	CLRB    (R1)[R0]			 ;(R1)[R0]			      	    			   6140  94   004E6
	PUSHL   R0				 ;R0				       1973 			     50  DD   004E9
	CALLS   #1, G^TT_TEXT			 ;#1, TT_TEXT			      	    00000000G  00	     01  FB   004EB
	CALLS   #0, G^TT_OUTPUT			 ;#0, TT_OUTPUT			       1976 00000000G  00	     00  FB   004F2
	BRB     38$				 ;38$				       1738 			     08  11   004F9
37$:	MOVL    #KER_INTERNALERR, R0		 ;#KER_INTERNALERR, R0		       1982 	       50 00000000G  8F  D0   004FB
	RET     				 ;				      	    				 04   00502
38$:	CMPL    G^U.8, #160			 ;U.8, #160			       1992 000000A0   8F 00000000'  00  D1   00503
	BNEQ    39$				 ;39$				      	    			     0A  12   0050E
	CLRW    R6				 ;SIZE				       1995 			     56  B4   00510
	CLRL    G^FILE_NAME			 ;FILE_NAME			       1996 		  00000000G  00  D4   00512
	BRB     42$				 ;42$				      	    			     3B  11   00518
39$:	MOVL    G^FIL_NORMAL_FORM, R0		 ;FIL_NORMAL_FORM, R0		       2000 	       50 00000000G  00  D0   0051A
	CMPL    R0, #2				 ;R0, #2			       2003 	       02	     50  D1   00521
	BNEQ    43$				 ;43$				      	    			     31  12   00524
	MOVZBL  G^U.11+3, R7			 ;U.11+3, R7			       2006 	       57 00000000'  00  9A   00526
	BLEQ    40$				 ;40$				      	    			     09  15   0052D
	MOVL    G^U.11+4, R0			 ;U.11+4, R0			       2009 	       50 00000000'  00  D0   0052F
	BRB     41$				 ;41$				       2010 			     0E  11   00536
40$:	MOVZBL  G^U.11+11, R7			 ;U.11+11, R7			       2015 	       57 00000000'  00  9A   00538
	MOVL    G^U.11+12, R0			 ;U.11+12, R0			      	    	       50 00000000'  00  D0   0053F
41$:	MOVC5   R7, (R0), #0, #132, G^FILE_NAME  ;R7, (R0), #0, #132, FILE_NAME        2016 	       60	     57  2C   00546
						 ;					    	0084   8F	     00       00549
						 ;					    		  00000000G  00       0054D
	MOVW    R7, R6				 ;R7, SIZE			       2017 	       56	     57  B0   00552
42$:	BRB     46$				 ;46$				       2000 			     49  11   00555
43$:	CMPL    R0, #1				 ;R0, #1			       2022 	       01	     50  D1   00557
	BEQL    44$				 ;44$				      	    			     05  13   0055A
	CMPL    R0, #4				 ;R0, #4			      	    	       04	     50  D1   0055C
	BNEQ    46$				 ;46$				      	    			     3F  12   0055F
44$:	MOVZBL  G^U.11+59, R9			 ;U.11+59, R9			       2024 	       59 00000000'  00  9A   00561
	MOVL    G^U.11+76, R0			 ;U.11+76, R0			      	    	       50 00000000'  00  D0   00568
	MOVZBL  G^U.11+60, R8			 ;U.11+60, R8			       2025 	       58 00000000'  00  9A   0056F
	MOVL    G^U.11+80, R11			 ;U.11+80, R11			      	    	       5B 00000000'  00  D0   00576
	MOVZBL  #132, R10			 ;#132, R10			       2026 	       5A	84   8F  9A   0057D
	MOVAB   G^FILE_NAME, R7			 ;FILE_NAME, R7			      	    	       57 00000000G  00  9E   00581
	MOVC5   R9, (R0), #0, R10, (R7)		 ;R9, (R0), #0, R10, (R7)	      	    	       60	     59  2C   00588
						 ;					    	       5A	     00       0058B
						 ;					    			     67       0058D
	BGEQ    45$				 ;45$				      	    			     0C  18   0058E
	ADDL2   R9, R7				 ;R9, R7			      	    	       57	     59  C0   00590
	SUBL2   R9, R10				 ;R9, R10			      	    	       5A	     59  C2   00593
	MOVC5   R8, (R11), #0, R10, (R7)	 ;R8, (R11), #0, R10, (R7)	      	    	       6B	     58  2C   00596
						 ;					    	       5A	     00       00599
						 ;					    			     67       0059B
45$:	ADDW3   R8, R9, R6			 ;R8, R9, SIZE			       2027 	       59	     58  A1   0059C
						 ;					    			     56       0059F
46$:	CMPW    R6, #132			 ;SIZE, #132			       2031 	0084   8F	     56  B1   005A0
	BLEQU   47$				 ;47$				      	    			     0A  1B   005A5
	MOVZBL  #132, G^FILE_SIZE		 ;#132, FILE_SIZE		      	    00000000G  00	84   8F  9A   005A7
	BRB     48$				 ;48$				      	    			     07  11   005AF
47$:	MOVZWL  R6, G^FILE_SIZE			 ;SIZE, FILE_SIZE		      	    00000000G  00	     56  3C   005B1
48$:	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       2033 	       50 00000000G  8F  D0   005B8
	RET     				 ;				      	    				 04   005BF

; Routine Size:  1472 bytes,    Routine Base:  $CODE$ + 0617


;   2035  1	 
;   2036  1	 %SBTTL 'FILE_CLOSE'
;   2037  1	 
;   2038  1	GLOBAL ROUTINE FILE_CLOSE (ABORT_FLAG) =
;   2039  1	 
;   2040  1	!++
;   2041  1	! FUNCTIONAL DESCRIPTION:
;   2042  1	!
;   2043  1	!	This routine will close a file that was opened by FILE_OPEN.
;   2044  1	!	It assumes any data associated with the file is stored in this
;   2045  1	!	module, since this routine is called by KERMSG.
;   2046  1	!
;   2047  1	! CALLING SEQUENCE:
;   2048  1	!
;   2049  1	!	FILE_CLOSE();
;   2050  1	!
;   2051  1	! INPUT PARAMETERS:
;   2052  1	!
;   2053  1	!	ABORT_FLAG - True if file should not be saved.
;   2054  1	!
;   2055  1	! IMPLICIT INPUTS:
;   2056  1	!
;   2057  1	!	None.
;   2058  1	!
;   2059  1	! OUTPUT PARAMETERS:
;   2060  1	!
;   2061  1	!	None.
;   2062  1	!
;   2063  1	! IMPLICIT OUTPUTS:
;   2064  1	!
;   2065  1	!	None.
;   2066  1	!
;   2067  1	! COMPLETION CODES:
;   2068  1	!
;   2069  1	!	None.
;   2070  1	!
;   2071  1	! SIDE EFFECTS:
;   2072  1	!
;   2073  1	!	None.
;   2074  1	!
;   2075  1	!--
;   2076  1	 
;   2077  2	    BEGIN
;   2078  2	!
;   2079  2	! Completion codes returned:
;   2080  2	!
;   2081  2	    EXTERNAL LITERAL
;   2082  2		KER_NORMAL,				! Normal return
;   2083  2		KER_RMS32;				! RMS-32 error
;   2084  2	 
;   2085  2	    LOCAL
;   2086  2		STATUS;					! Random status values
;   2087  2	 
;   2088  2	!
;   2089  2	! If there might be something left to write
;   2090  2	 
;   2091  2	!
;   2092  2	 
;   2093  3	    IF .FILE_MODE EQL FNC_WRITE AND (.FILE_REC_COUNT GTR 0 OR .FILE_FAB [FAB$L_CTX] NEQ
;   2094  3		F_STATE_DATA)
;   2095  2	    THEN
;   2096  3		BEGIN
;   2097  3	 
;   2098  3		SELECTONE .FILE_TYPE OF
;   2099  3		    SET
;   2100  3	 
;   2101  3		    [FILE_FIX] :
;   2102  4			BEGIN
;   2103  4	 
;   2104  4			INCR I FROM .FILE_REC_COUNT TO .REC_SIZE - 1 DO
;   2105  4			    CH$WCHAR_A (CHR_NUL, FILE_REC_POINTER);
;   2106  4			FILE_REC_COUNT = .REC_SIZE;		    ! Store the byte count
;   2107  4			STATUS = DUMP_BUFFER ();
;   2108  3			END;
;   2109  3	 
;   2110  3		    [FILE_ASC, FILE_BIN] :
;   2111  3			STATUS = DUMP_BUFFER ();
;   2112  3	 
;   2113  3		    [FILE_BLK] :
;   2114  4			BEGIN
;   2115  4			FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
;   2116  4			STATUS = $WRITE (RAB = FILE_RAB);
;   2117  4	 
;   2118  4			IF NOT .STATUS
;   2119  4			THEN
;   2120  5			    BEGIN
;   2121  5			    FILE_ERROR (.STATUS);
;   2122  5			    STATUS = KER_RMS32;
;   2123  5			    END
;   2124  4			ELSE
;   2125  4			    STATUS = KER_NORMAL;
;   2126  4	 
;   2127  3			END;
;   2128  3		    TES;
;   2129  3	 
;   2130  3		IF NOT .STATUS THEN RETURN .STATUS;
;   2131  3	 
;   2132  2		END;
;   2133  2	 
;   2134  2	!
;   2135  2	! If reading from a mailbox, read until EOF to allow the process on the other
;   2136  2	! end to terminal gracefully.
;   2137  2	!
;   2138  2	 
;   2139  2	    IF .FILE_MODE EQL FNC_READ AND .DEV_CLASS EQL DC$_MAILBOX AND NOT .EOF_FLAG
;   2140  2	    THEN
;   2141  2	 
;   2142  2		DO
;   2143  2		    STATUS = GET_BUFFER ()
;   2144  2		UNTIL ( NOT .STATUS) OR .EOF_FLAG;
;   2145  2	 
;   2146  2	    STATUS = LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
;   2147  2	 
;   2148  2	    IF .FIX_SIZE NEQ 0 THEN STATUS = LIB$FREE_VM (FIX_SIZE, FIX_ADDRESS);
;   2149  2	 
;   2150  2	    IF .ABORT_FLAG AND .FILE_MODE EQL FNC_WRITE
;   2151  2	    THEN
;   2152  2		FILE_FAB [FAB$V_DLT] = TRUE
;   2153  2	    ELSE
;   2154  2		FILE_FAB [FAB$V_DLT] = FALSE;
;   2155  2	 
;   2156  2	    STATUS = $CLOSE (FAB = FILE_FAB);
;   2157  2	    EOF_FLAG = FALSE;
;   2158  2	 
;   2159  2	    IF NOT .STATUS
;   2160  2	    THEN
;   2161  3		BEGIN
;   2162  3		FILE_ERROR (.STATUS);
;   2163  3		RETURN KER_RMS32;
;   2164  3		END
;   2165  2	    ELSE
;   2166  2		RETURN KER_NORMAL;
;   2167  2	 
;   2168  1	    END;					! End of FILE_CLOSE



	.EXTRN  SYS$CLOSE

	.ENTRY  FILE_CLOSE, ^M<R2,R3,R4,R5,R6,-  ;FILE_CLOSE, Save R2,R3,R4,R5,R6,R7   2038 			       00FC   00000
		R7>				 ;
	MOVAB   G^LIB$FREE_VM, R7		 ;LIB$FREE_VM, R7		      	    	       57 00000000G  00  9E   00002
	MOVL    #KER_NORMAL, R6			 ;#KER_NORMAL, R6		      	    	       56 00000000G  8F  D0   00009
	MOVL    #KER_RMS32, R5			 ;#KER_RMS32, R5		      	    	       55 00000000G  8F  D0   00010
	MOVAB   G^U.6, R4			 ;U.6, R4			      	    	       54 00000000V  00  9E   00017
	MOVAB   G^U.16, R3			 ;U.16, R3			      	    	       53 00000000'  00  9E   0001E
	CMPL    -8(R3), #1			 ;FILE_MODE, #1			       2093 	       01	F8   A3  D1   00025
	BNEQ    9$				 ;9$				      	    			     73  12   00029
	TSTL    (R3)				 ;FILE_REC_COUNT		      	    			     63  D5   0002B
	BGTR    1$				 ;1$				      	    			     07  14   0002D
	CMPL    -272(R3), #2			 ;FILE_FAB+24, #2		       2094 	       02     FEF0   C3  D1   0002F
	BEQL    9$				 ;9$				      	    			     68  13   00034
1$:	MOVL    G^FILE_TYPE, R0			 ;FILE_TYPE, R0			       2098 	       50 00000000'  00  D0   00036
	CMPL    R0, #4				 ;R0, #4			       2101 	       04	     50  D1   0003D
	BNEQ    4$				 ;4$				      	    			     1C  12   00040
	MOVL    4(R3), R1			 ;REC_SIZE, R1			       2104 	       51	04   A3  D0   00042
	SUBL3   #1, (R3), R2			 ;#1, FILE_REC_COUNT, I		      	    	       63	     01  C3   00046
						 ;					    			     52       00049
	BRB     3$				 ;3$				      	    			     09  11   0004A
2$:	MOVL    -4(R3), R0			 ;FILE_REC_POINTER, R0		       2105 	       50	FC   A3  D0   0004C
	CLRB    (R0)				 ;(R0)				      	    			     60  94   00050
	INCL    -4(R3)				 ;FILE_REC_POINTER		      	    			FC   A3  D6   00052
3$:	AOBLSS  R1, R2, 2$			 ;R1, I, 2$			      	    	       52	     51  F2   00055
						 ;					    			     F3       00058
	MOVL    R1, (R3)			 ;R1, FILE_REC_COUNT		       2106 	       63	     51  D0   00059
	BRB     5$				 ;5$				       2107 			     09  11   0005C
4$:	TSTL    R0				 ;R0				       2110 			     50  D5   0005E
	BLEQ    6$				 ;6$				      	    			     0F  15   00060
	CMPL    R0, #2				 ;R0, #2			      	    	       02	     50  D1   00062
	BGTR    6$				 ;6$				      	    			     0A  14   00065
5$:	CALLS   #0, W^U.2			 ;#0, U.2			       2111 	F858   CF	     00  FB   00067
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   0006C
	BRB     8$				 ;8$				      	    			     26  11   0006F
6$:	CMPL    R0, #3				 ;R0, #3			       2113 	       03	     50  D1   00071
	BNEQ    8$				 ;8$				      	    			     21  12   00074
	MOVW    (R3), -86(R3)			 ;FILE_REC_COUNT, FILE_RAB+34	       2115 	  AA   A3	     63  B0   00076
	PUSHAB  -120(R3)			 ;FILE_RAB			       2116 			88   A3  9F   0007A
	CALLS   #1, G^SYS$WRITE			 ;#1, SYS$WRITE			      	    00000000G  00	     01  FB   0007D
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00084
	BLBS    R2, 7$				 ;STATUS, 7$			       2118 	       0A	     52  E8   00087
	PUSHL   R2				 ;STATUS			       2121 			     52  DD   0008A
	CALLS   #1, (R4)			 ;#1, FILE_ERROR		      	    	       64	     01  FB   0008C
	MOVL    R5, R2				 ;R5, STATUS			       2122 	       52	     55  D0   0008F
	BRB     8$				 ;8$				      	    			     03  11   00092
7$:	MOVL    R6, R2				 ;R6, STATUS			       2125 	       52	     56  D0   00094
8$:	BLBS    R2, 9$				 ;STATUS, 9$			       2130 	       04	     52  E8   00097
	MOVL    R2, R0				 ;STATUS, R0			      	    	       50	     52  D0   0009A
	RET     				 ;				      	    				 04   0009D
9$:	TSTL    -8(R3)				 ;FILE_MODE			       2139 			F8   A3  D5   0009E
	BNEQ    11$				 ;11$				      	    			     20  12   000A1
	CMPL    -304(R3), #160			 ;DEV_CLASS, #160		      	    000000A0   8F     FED0   C3  D1   000A3
	BNEQ    11$				 ;11$				      	    			     15  12   000AC
	BLBS    -300(R3), 11$			 ;EOF_FLAG, 11$			      	    	       10     FED4   C3  E8   000AE
10$:	CALLS   #0, W^U.3			 ;#0, U.3			       2143 	F6E0   CF	     00  FB   000B3
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   000B8
	BLBC    R2, 11$				 ;STATUS, 11$			       2144 	       05	     52  E9   000BB
	BLBC    -300(R3), 10$			 ;EOF_FLAG, 10$			      	    	       F0     FED4   C3  E9   000BE
11$:	PUSHAB  8(R3)				 ;REC_ADDRESS			       2146 			08   A3  9F   000C3
	PUSHAB  4(R3)				 ;REC_SIZE			      	    			04   A3  9F   000C6
	CALLS   #2, (R7)			 ;#2, LIB$FREE_VM		      	    	       67	     02  FB   000C9
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   000CC
	TSTL    12(R3)				 ;FIX_SIZE			       2148 			0C   A3  D5   000CF
	BEQL    12$				 ;12$				      	    			     0C  13   000D2
	PUSHAB  16(R3)				 ;FIX_ADDRESS			      	    			10   A3  9F   000D4
	PUSHAB  12(R3)				 ;FIX_SIZE			      	    			0C   A3  9F   000D7
	CALLS   #2, (R7)			 ;#2, LIB$FREE_VM		      	    	       67	     02  FB   000DA
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   000DD
12$:	BLBC    4(AP), 13$			 ;ABORT_FLAG, 13$		       2150 	       0E	04   AC  E9   000E0
	CMPL    -8(R3), #1			 ;FILE_MODE, #1			      	    	       01	F8   A3  D1   000E4
	BNEQ    13$				 ;13$				      	    			     08  12   000E8
	BISB2   #128, -291(R3)			 ;#128, FILE_FAB+5		       2152 	FEDD   C3	80   8F  88   000EA
	BRB     14$				 ;14$				      	    			     06  11   000F0
13$:	BICB2   #128, -291(R3)			 ;#128, FILE_FAB+5		       2154 	FEDD   C3	80   8F  8A   000F2
14$:	PUSHAB  -296(R3)			 ;FILE_FAB			       2156 		      FED8   C3  9F   000F8
	CALLS   #1, G^SYS$CLOSE			 ;#1, SYS$CLOSE			      	    00000000G  00	     01  FB   000FC
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00103
	CLRL    -300(R3)			 ;EOF_FLAG			       2157 		      FED4   C3  D4   00106
	BLBS    R2, 15$				 ;STATUS, 15$			       2159 	       09	     52  E8   0010A
	PUSHL   R2				 ;STATUS			       2162 			     52  DD   0010D
	CALLS   #1, (R4)			 ;#1, FILE_ERROR		      	    	       64	     01  FB   0010F
	MOVL    R5, R0				 ;R5, R0			       2163 	       50	     55  D0   00112
	RET     				 ;				      	    				 04   00115
15$:	MOVL    R6, R0				 ;R6, R0			       2166 	       50	     56  D0   00116
	RET     				 ;				      	    				 04   00119

; Routine Size:  282 bytes,    Routine Base:  $CODE$ + 0BD7


;   2169  1	 
;   2170  1	 %SBTTL 'NEXT_FILE'
;   2171  1	 
;   2172  1	GLOBAL ROUTINE NEXT_FILE =
;   2173  1	 
;   2174  1	!++
;   2175  1	! FUNCTIONAL DESCRIPTION:
;   2176  1	!
;   2177  1	!	This routine will cause the next file to be opened.  It will
;   2178  1	!	call the RMS-32 routine $SEARCH and $OPEN for the file.
;   2179  1	!
;   2180  1	! CALLING SEQUENCE:
;   2181  1	!
;   2182  1	!	STATUS = NEXT_FILE;
;   2183  1	!
;   2184  1	! INPUT PARAMETERS:
;   2185  1	!
;   2186  1	!	None.
;   2187  1	!
;   2188  1	! IMPLICIT INPUTS:
;   2189  1	!
;   2190  1	!	FAB/NAM blocks set up from previous processing.
;   2191  1	!
;   2192  1	! OUTPUT PARAMETERS:
;   2193  1	!
;   2194  1	!	None.
;   2195  1	!
;   2196  1	! IMPLICIT OUTPUTS:
;   2197  1	!
;   2198  1	!	FAB/NAM blocks set up for the next file.
;   2199  1	!
;   2200  1	! COMPLETION CODES:
;   2201  1	!
;   2202  1	!	TRUE - There is a next file.
;   2203  1	!	KER_RMS32 - No next file.
;   2204  1	!
;   2205  1	! SIDE EFFECTS:
;   2206  1	!
;   2207  1	!	None.
;   2208  1	!
;   2209  1	!--
;   2210  1	 
;   2211  2	    BEGIN
;   2212  2	!
;   2213  2	! Completion codes returned:
;   2214  2	!
;   2215  2	    EXTERNAL LITERAL
;   2216  2		KER_NORMAL,				! Normal return
;   2217  2		KER_NOMORFILES,				! No more files to read
;   2218  2		KER_RMS32;				! RMS-32 error
;   2219  2	 
;   2220  2	    EXTERNAL ROUTINE
;   2221  2		TT_TEXT : NOVALUE;			! Output an ASCIZ string
;   2222  2	 
;   2223  2	    LOCAL
;   2224  2		SIZE : WORD,				! Size of the $FAO string
;   2225  2		STATUS;					! Random status values
;   2226  2	 
;   2227  2	!
;   2228  2	! If we can't do a search, just return no more files
;   2229  2	!
;   2230  2	 
;   2231  2	    IF NOT .SEARCH_FLAG THEN RETURN KER_NOMORFILES;
;   2232  2	 
;   2233  2	!
;   2234  2	! Now search for the next file that we want to process.
;   2235  2	!
;   2236  2	    STATUS = $SEARCH (FAB = FILE_FAB);
;   2237  2	 
;   2238  2	    IF .STATUS EQL RMS$_NMF THEN RETURN KER_NOMORFILES;
;   2239  2	 
;   2240  2	    IF NOT .STATUS
;   2241  2	    THEN
;   2242  3		BEGIN
;   2243  3		FILE_ERROR (.STATUS);
;   2244  3		RETURN KER_RMS32;
;   2245  2		END;
;   2246  2	 
;   2247  2	!
;   2248  2	! Now we have the new file name.  All that we have to do is open the file
;   2249  2	! for reading now.
;   2250  2	!
;   2251  2	    STATUS = OPEN_READING ();
;   2252  2	 
;   2253  2	    IF NOT .STATUS THEN RETURN .STATUS;
;   2254  2	 
;   2255  2	!
;   2256  2	! Copy the file name based on the type of file name we are to use.
;   2257  2	! The possibilities are:
;   2258  2	!		Normal - Just copy name and type
;   2259  2	!		Full - Copy entire name string (either resultant or expanded)
;   2260  2	!		Untranslated - Copy string from name on (includes version, etc.)
;   2261  2	 
;   2262  2	    SELECTONE .FIL_NORMAL_FORM OF
;   2263  2		SET
;   2264  2	 
;   2265  2		[FNM_FULL] :
;   2266  3		    BEGIN
;   2267  3	 
;   2268  3		    IF .FILE_NAM [NAM$B_RSL] GTR 0
;   2269  3		    THEN
;   2270  4			BEGIN
;   2271  4			CH$COPY (.FILE_NAM [NAM$B_RSL], CH$PTR (.FILE_NAM [NAM$L_RSA]), CHR_NUL,
;   2272  4			    MAX_FILE_NAME, CH$PTR (FILE_NAME));
;   2273  4			SIZE = .FILE_NAM [NAM$B_RSL];
;   2274  4			END
;   2275  3		    ELSE
;   2276  4			BEGIN
;   2277  4			CH$COPY (.FILE_NAM [NAM$B_ESL], CH$PTR (.FILE_NAM [NAM$L_ESA]), CHR_NUL,
;   2278  4			    MAX_FILE_NAME, CH$PTR (FILE_NAME));
;   2279  4			SIZE = .FILE_NAM [NAM$B_ESL];
;   2280  4			END
;   2281  4	 
;   2282  2		    END;
;   2283  2	 
;   2284  2		[FNM_NORMAL, FNM_UNTRAN] :
;   2285  3		    BEGIN
;   2286  3		    CH$COPY (.FILE_NAM [NAM$B_NAME], CH$PTR (.FILE_NAM [NAM$L_NAME]),
;   2287  3			.FILE_NAM [NAM$B_TYPE], CH$PTR (.FILE_NAM [NAM$L_TYPE]), CHR_NUL,
;   2288  3			MAX_FILE_NAME, CH$PTR (FILE_NAME));
;   2289  3		    SIZE = .FILE_NAM [NAM$B_NAME] + .FILE_NAM [NAM$B_TYPE];
;   2290  2		    END;
;   2291  2		TES;
;   2292  2	 
;   2293  2	    IF .SIZE GTR MAX_FILE_NAME THEN FILE_SIZE = MAX_FILE_NAME ELSE FILE_SIZE = .SIZE;
;   2294  2	 
;   2295  2	!
;   2296  2	! Put prompt for NEXT_FILE sending in here
;   2297  2	!
;   2298  2		IF ( NOT .CONNECT_FLAG) AND .TY_FIL
;   2299  2		THEN
;   2300  3		    BEGIN
;   2301  3		    TT_TEXT (UPLIT (%ASCIZ 'Sending: '));
;   2302  3		    .FILE_NAM [NAM$L_RSA] + .FILE_NAM [NAM$B_RSL] = 0;
;   2303  3		    TT_TEXT (.FILE_NAM [NAM$L_RSA]);
;   2304  3		    TT_TEXT (UPLIT (%ASCIZ ' as '));
;   2305  3		    TT_OUTPUT ();
;   2306  2		    END;
;   2307  2	 
;   2308  2	    RETURN KER_NORMAL;
;   2309  1	    END;					! End of NEXT_FILE



	.PSECT  $PLIT$,NOWRT,NOEXE,2

P.AAD:	.ASCII  \Sending: \<0><0><0>		 ;				      	      3A  67  6E  69  64  6E  65  53  00014
						 ;					    		      00  00  00  20  0001C
P.AAE:	.ASCII  \ as \<0><0><0><0>		 ;				      	      00  00  00  00  20  73  61  20  00020

	.EXTRN  KER_NOMORFILES

	.PSECT  $CODE$,NOWRT,2

	.ENTRY  NEXT_FILE, ^M<R2,R3,R4,R5,R6,R7,-;NEXT_FILE, Save R2,R3,R4,R5,R6,R7,-  2172 			       0FFC   00000
		R8,R9,R10,R11>			 ;R8,R9,R10,R11
	BLBC    G^U.7, 1$			 ;U.7, 1$			       2231 	       19 00000000'  00  E9   00002
	PUSHAB  G^U.10				 ;U.10				       2236 		  00000000'  00  9F   00009
	CALLS   #1, G^SYS$SEARCH		 ;#1, SYS$SEARCH		      	    00000000G  00	     01  FB   0000F
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00016
	CMPL    R2, #99018			 ;STATUS, #99018		       2238 000182CA   8F	     52  D1   00019
	BNEQ    2$				 ;2$				      	    			     08  12   00020
1$:	MOVL    #KER_NOMORFILES, R0		 ;#KER_NOMORFILES, R0		      	    	       50 00000000G  8F  D0   00022
	RET     				 ;				      	    				 04   00029
2$:	BLBS    R2, 3$				 ;STATUS, 3$			       2240 	       11	     52  E8   0002A
	PUSHL   R2				 ;STATUS			       2243 			     52  DD   0002D
	CALLS   #1, G^U.6			 ;#1, U.6			      	    00000000V  00	     01  FB   0002F
	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       2244 	       50 00000000G  8F  D0   00036
	RET     				 ;				      	    				 04   0003D
3$:	CALLS   #0, W^U.35			 ;#0, U.35			       2251 	F7A1   CF	     00  FB   0003E
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00043
	BLBS    R2, 4$				 ;STATUS, 4$			       2253 	       04	     52  E8   00046
	MOVL    R2, R0				 ;STATUS, R0			      	    	       50	     52  D0   00049
	RET     				 ;				      	    				 04   0004C
4$:	MOVL    G^FIL_NORMAL_FORM, R0		 ;FIL_NORMAL_FORM, R0		       2262 	       50 00000000G  00  D0   0004D
	CMPL    R0, #2				 ;R0, #2			       2265 	       02	     50  D1   00054
	BNEQ    7$				 ;7$				      	    			     31  12   00057
	MOVZBL  G^U.11+3, R6			 ;U.11+3, R6			       2268 	       56 00000000'  00  9A   00059
	BLEQ    5$				 ;5$				      	    			     09  15   00060
	MOVL    G^U.11+4, R0			 ;U.11+4, R0			       2271 	       50 00000000'  00  D0   00062
	BRB     6$				 ;6$				       2272 			     0E  11   00069
5$:	MOVZBL  G^U.11+11, R6			 ;U.11+11, R6			       2277 	       56 00000000'  00  9A   0006B
	MOVL    G^U.11+12, R0			 ;U.11+12, R0			      	    	       50 00000000'  00  D0   00072
6$:	MOVC5   R6, (R0), #0, #132, G^FILE_NAME  ;R6, (R0), #0, #132, FILE_NAME        2278 	       60	     56  2C   00079
						 ;					    	0084   8F	     00       0007C
						 ;					    		  00000000G  00       00080
	MOVW    R6, R7				 ;R6, SIZE			       2279 	       57	     56  B0   00085
	BRB     10$				 ;10$				       2262 			     49  11   00088
7$:	CMPL    R0, #1				 ;R0, #1			       2284 	       01	     50  D1   0008A
	BEQL    8$				 ;8$				      	    			     05  13   0008D
	CMPL    R0, #4				 ;R0, #4			      	    	       04	     50  D1   0008F
	BNEQ    10$				 ;10$				      	    			     3F  12   00092
8$:	MOVZBL  G^U.11+59, R11			 ;U.11+59, R11			       2286 	       5B 00000000'  00  9A   00094
	MOVL    G^U.11+76, R0			 ;U.11+76, R0			      	    	       50 00000000'  00  D0   0009B
	MOVZBL  G^U.11+60, R10			 ;U.11+60, R10			       2287 	       5A 00000000'  00  9A   000A2
	MOVL    G^U.11+80, R9			 ;U.11+80, R9			      	    	       59 00000000'  00  D0   000A9
	MOVZBL  #132, R8			 ;#132, R8			       2288 	       58	84   8F  9A   000B0
	MOVAB   G^FILE_NAME, R6			 ;FILE_NAME, R6			      	    	       56 00000000G  00  9E   000B4
	MOVC5   R11, (R0), #0, R8, (R6)		 ;R11, (R0), #0, R8, (R6)	      	    	       60	     5B  2C   000BB
						 ;					    	       58	     00       000BE
						 ;					    			     66       000C0
	BGEQ    9$				 ;9$				      	    			     0C  18   000C1
	ADDL2   R11, R6				 ;R11, R6			      	    	       56	     5B  C0   000C3
	SUBL2   R11, R8				 ;R11, R8			      	    	       58	     5B  C2   000C6
	MOVC5   R10, (R9), #0, R8, (R6)		 ;R10, (R9), #0, R8, (R6)	      	    	       69	     5A  2C   000C9
						 ;					    	       58	     00       000CC
						 ;					    			     66       000CE
9$:	ADDW3   R10, R11, R7			 ;R10, R11, SIZE		       2289 	       5B	     5A  A1   000CF
						 ;					    			     57       000D2
10$:	CMPW    R7, #132			 ;SIZE, #132			       2293 	0084   8F	     57  B1   000D3
	BLEQU   11$				 ;11$				      	    			     0A  1B   000D8
	MOVZBL  #132, G^FILE_SIZE		 ;#132, FILE_SIZE		      	    00000000G  00	84   8F  9A   000DA
	BRB     12$				 ;12$				      	    			     07  11   000E2
11$:	MOVZWL  R7, G^FILE_SIZE			 ;SIZE, FILE_SIZE		      	    00000000G  00	     57  3C   000E4
12$:	BLBS    G^CONNECT_FLAG, 13$		 ;CONNECT_FLAG, 13$		       2298 	       44 00000000G  00  E8   000EB
	BLBC    G^TY_FIL, 13$			 ;TY_FIL, 13$			      	    	       3D 00000000G  00  E9   000F2
	PUSHAB  G^P.AAD				 ;P.AAD				       2301 		  00000000'  00  9F   000F9
	CALLS   #1, G^TT_TEXT			 ;#1, TT_TEXT			      	    00000000G  00	     01  FB   000FF
	MOVL    G^U.11+4, R0			 ;U.11+4, R0			       2302 	       50 00000000'  00  D0   00106
	MOVZBL  G^U.11+3, R1			 ;U.11+3, R1			      	    	       51 00000000'  00  9A   0010D
	PUSHAB  (R1)[R0]			 ;(R1)[R0]			      	    			   6140  9F   00114
	CLRL    @(SP)+				 ;@(SP)+			      	    			     9E  D4   00117
	PUSHL   R0				 ;R0				       2303 			     50  DD   00119
	CALLS   #1, G^TT_TEXT			 ;#1, TT_TEXT			      	    00000000G  00	     01  FB   0011B
	PUSHAB  G^P.AAE				 ;P.AAE				       2304 		  00000000'  00  9F   00122
	CALLS   #1, G^TT_TEXT			 ;#1, TT_TEXT			      	    00000000G  00	     01  FB   00128
	CALLS   #0, G^TT_OUTPUT			 ;#0, TT_OUTPUT			       2305 00000000G  00	     00  FB   0012F
13$:	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       2308 	       50 00000000G  8F  D0   00136
	RET     				 ;				      	    				 04   0013D

; Routine Size:  318 bytes,    Routine Base:  $CODE$ + 0CF1


;   2310  1	 
;   2311  1	 %SBTTL 'LOG_OPEN - Open a log file'
;   2312  1	 
;   2313  1	GLOBAL ROUTINE LOG_OPEN (LOG_DESC, LOG_FAB, LOG_RAB) =
;   2314  1	 
;   2315  1	!++
;   2316  1	! FUNCTIONAL DESCRIPTION:
;   2317  1	!
;   2318  1	! CALLING SEQUENCE:
;   2319  1	!
;   2320  1	!	STATUS = LOG_OPEN (LOG_DESC, LOG_FAB, LOG_RAB)
;   2321  1	!
;   2322  1	! INPUT PARAMETERS:
;   2323  1	!
;   2324  1	!	LOG_DESC - Address of descriptor for file name to be opened
;   2325  1	!
;   2326  1	!	LOG_FAB - Address of FAB for file
;   2327  1	!
;   2328  1	!	LOG_RAB - Address of RAB for file
;   2329  1	!
;   2330  1	! IMPLICIT INPUTS:
;   2331  1	!
;   2332  1	!	None.
;   2333  1	!
;   2334  1	! OUPTUT PARAMETERS:
;   2335  1	!
;   2336  1	!	LOG_FAB and LOG_RAB updated.
;   2337  1	!
;   2338  1	! IMPLICIT OUTPUTS:
;   2339  1	!
;   2340  1	!	None.
;   2341  1	!
;   2342  1	! COMPLETION CODES:
;   2343  1	!
;   2344  1	!	Error code or true.
;   2345  1	!
;   2346  1	! SIDE EFFECTS:
;   2347  1	!
;   2348  1	!	None.
;   2349  1	!
;   2350  1	!--
;   2351  1	 
;   2352  2	    BEGIN
;   2353  2	!
;   2354  2	! Completion codes returned:
;   2355  2	!
;   2356  2	    EXTERNAL LITERAL
;   2357  2		KER_NORMAL,				! Normal return
;   2358  2		KER_RMS32;				! RMS-32 error
;   2359  2	 
;   2360  2	    MAP
;   2361  2		LOG_DESC : REF BLOCK [8, BYTE],		! Name descriptor
;   2362  2		LOG_FAB : REF $FAB_DECL,		! FAB for file
;   2363  2		LOG_RAB : REF $RAB_DECL;		! RAB for file
;   2364  2	 
;   2365  2	    LOCAL
;   2366  2		STATUS,					! Random status values
;   2367  2		REC_ADDRESS,				! Address of record buffer
;   2368  2		REC_SIZE;				! Size of record buffer
;   2369  2	 
;   2370  2	!
;   2371  2	! Get memory for records
;   2372  2	!
;   2373  2	    REC_SIZE = LOG_BUFF_SIZE;
;   2374  2	    STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
;   2375  2	 
;   2376  2	    IF NOT .STATUS
;   2377  2	    THEN
;   2378  3		BEGIN
;   2379  3		LIB$SIGNAL (.STATUS);
;   2380  3		RETURN .STATUS;
;   2381  2		END;
;   2382  2	 
;   2383  2	!
;   2384  2	! Initialize the FAB and RAB
;   2385  2	!
; P 2386  2	    $FAB_INIT (FAB = .LOG_FAB, FAC = PUT, FNA = .LOG_DESC [DSC$A_POINTER],
; P 2387  2		FNS = .LOG_DESC [DSC$W_LENGTH], FOP = (MXV, CBT, SQO, TEF), ORG = SEQ, RFM = VAR,
;   2388  2		RAT = CR, CTX = 0, DNA = UPLIT (%ASCII'.LOG'), DNS = 4);
;   2389  2	    STATUS = $CREATE (FAB = .LOG_FAB);
;   2390  2	 
;   2391  2	    IF NOT .STATUS
;   2392  2	    THEN
;   2393  3		BEGIN
;   2394  3		FILE_ERROR (.STATUS);
;   2395  3		LIB$FREE_VM (REC_SIZE, REC_ADDRESS);	! Dump record buffer
;   2396  3		RETURN KER_RMS32;
;   2397  2		END;
;   2398  2	 
; P 2399  2	    $RAB_INIT (RAB = .LOG_RAB, FAB = .LOG_FAB, RAC = SEQ, RBF = .REC_ADDRESS,
;   2400  2		RSZ = .REC_SIZE, UBF = .REC_ADDRESS, USZ = .REC_SIZE, ROP = <NLK, WAT>, CTX = 0);
;   2401  2	    STATUS = $CONNECT (RAB = .LOG_RAB);
;   2402  2	 
;   2403  2	    IF NOT .STATUS
;   2404  2	    THEN
;   2405  3		BEGIN
;   2406  3		FILE_ERROR (.STATUS);
;   2407  3		LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
;   2408  3		$CLOSE (FAB = .LOG_FAB);
;   2409  3		RETURN KER_RMS32;
;   2410  3		END
;   2411  2	    ELSE
;   2412  2		RETURN .STATUS;
;   2413  2	 
;   2414  1	    END;					! End of LOG_OPEN



	.PSECT  $PLIT$,NOWRT,NOEXE,2

P.AAF:	.ASCII  \.LOG\				 ;				      	    		      47  4F  4C  2E  00028



	.PSECT  $CODE$,NOWRT,2

	.ENTRY  LOG_OPEN, ^M<R2,R3,R4,R5,R6,R7,- ;LOG_OPEN, Save R2,R3,R4,R5,R6,R7,-   2313 			       07FC   00000
		R8,R9,R10>			 ;R8,R9,R10
	MOVAB   G^LIB$FREE_VM, R10		 ;LIB$FREE_VM, R10		      	    	       5A 00000000G  00  9E   00002
	MOVAB   G^U.6, R9			 ;U.6, R9			      	    	       59 00000000V  00  9E   00009
	SUBL2   #8, SP				 ;#8, SP			      	    	       5E	     08  C2   00010
	MOVZWL  #256, 4(SP)			 ;#256, REC_SIZE		       2373 	  04   AE     0100   8F  3C   00013
	PUSHL   SP				 ;SP				       2374 			     5E  DD   00019
	PUSHAB  8(SP)				 ;REC_SIZE			      	    			08   AE  9F   0001B
	CALLS   #2, G^LIB$GET_VM		 ;#2, LIB$GET_VM		      	    00000000G  00	     02  FB   0001E
	MOVL    R0, R8				 ;R0, STATUS			      	    	       58	     50  D0   00025
	BLBS    R8, 1$				 ;STATUS, 1$			       2376 	       0C	     58  E8   00028
	PUSHL   R8				 ;STATUS			       2379 			     58  DD   0002B
	CALLS   #1, G^LIB$SIGNAL		 ;#1, LIB$SIGNAL		      	    00000000G  00	     01  FB   0002D
	BRW     4$				 ;4$				       2380 			   00BD  31   00034
1$:	MOVL    8(AP), R7			 ;LOG_FAB, R7			       2388 	       57	08   AC  D0   00037
	MOVC5   #0, (SP), #0, #80, (R7)		 ;#0, (SP), #0, #80, (R7)	      	    	       6E	     00  2C   0003B
						 ;					    	0050   8F	     00       0003E
						 ;					    			     67       00042
	MOVW    #20483, (R7)			 ;#20483, (R7)			      	    	       67     5003   8F  B0   00043
	MOVL    #270532674, 4(R7)		 ;#270532674, 4(R7)		      	    	  04   A7 10200042   8F  D0   00048
	MOVB    #1, 22(R7)			 ;#1, 22(R7)			      	    	  16   A7	     01  90   00050
	MOVW    #512, 29(R7)			 ;#512, 29(R7)			      	    	  1D   A7     0200   8F  B0   00054
	MOVB    #2, 31(R7)			 ;#2, 31(R7)			      	    	  1F   A7	     02  90   0005A
	MOVL    4(AP), R0			 ;LOG_DESC, R0			      	    	       50	04   AC  D0   0005E
	MOVL    4(R0), 44(R7)			 ;4(R0), 44(R7)			      	    	  2C   A7	04   A0  D0   00062
	MOVAB   G^P.AAF, 48(R7)			 ;P.AAF, 48(R7)			      	    	  30   A7 00000000'  00  9E   00067
	MOVB    (R0), 52(R7)			 ;(R0), 52(R7)			      	    	  34   A7	     60  90   0006F
	MOVB    #4, 53(R7)			 ;#4, 53(R7)			      	    	  35   A7	     04  90   00073
	PUSHL   R7				 ;R7				       2389 			     57  DD   00077
	CALLS   #1, G^SYS$CREATE		 ;#1, SYS$CREATE		      	    00000000G  00	     01  FB   00079
	MOVL    R0, R8				 ;R0, STATUS			      	    	       58	     50  D0   00080
	BLBS    R8, 2$				 ;STATUS, 2$			       2391 	       0F	     58  E8   00083
	PUSHL   R8				 ;STATUS			       2394 			     58  DD   00086
	CALLS   #1, (R9)			 ;#1, FILE_ERROR		      	    	       69	     01  FB   00088
	PUSHL   SP				 ;SP				       2395 			     5E  DD   0008B
	PUSHAB  8(SP)				 ;REC_SIZE			      	    			08   AE  9F   0008D
	CALLS   #2, (R10)			 ;#2, LIB$FREE_VM		      	    	       6A	     02  FB   00090
	BRB     3$				 ;3$				       2396 			     57  11   00093
2$:	MOVL    12(AP), R6			 ;LOG_RAB, R6			       2400 	       56	0C   AC  D0   00095
	MOVC5   #0, (SP), #0, #68, (R6)		 ;#0, (SP), #0, #68, (R6)	      	    	       6E	     00  2C   00099
						 ;					    	0044   8F	     00       0009C
						 ;					    			     66       000A0
	MOVW    #17409, (R6)			 ;#17409, (R6)			      	    	       66     4401   8F  B0   000A1
	MOVL    #1179648, 4(R6)			 ;#1179648, 4(R6)		      	    	  04   A6 00120000   8F  D0   000A6
	CLRB    30(R6)				 ;30(R6)			      	    			1E   A6  94   000AE
	MOVW    4(SP), 32(R6)			 ;REC_SIZE, 32(R6)		      	    	  20   A6	04   AE  B0   000B1
	MOVW    4(SP), 34(R6)			 ;REC_SIZE, 34(R6)		      	    	  22   A6	04   AE  B0   000B6
	MOVL    (SP), 36(R6)			 ;REC_ADDRESS, 36(R6)		      	    	  24   A6	     6E  D0   000BB
	MOVL    (SP), 40(R6)			 ;REC_ADDRESS, 40(R6)		      	    	  28   A6	     6E  D0   000BF
	MOVL    R7, 60(R6)			 ;R7, 60(R6)			      	    	  3C   A6	     57  D0   000C3
	PUSHL   R6				 ;R6				       2401 			     56  DD   000C7
	CALLS   #1, G^SYS$CONNECT		 ;#1, SYS$CONNECT		      	    00000000G  00	     01  FB   000C9
	MOVL    R0, R8				 ;R0, STATUS			      	    	       58	     50  D0   000D0
	BLBS    R8, 4$				 ;STATUS, 4$			       2403 	       1E	     58  E8   000D3
	PUSHL   R8				 ;STATUS			       2406 			     58  DD   000D6
	CALLS   #1, (R9)			 ;#1, FILE_ERROR		      	    	       69	     01  FB   000D8
	PUSHL   SP				 ;SP				       2407 			     5E  DD   000DB
	PUSHAB  8(SP)				 ;REC_SIZE			      	    			08   AE  9F   000DD
	CALLS   #2, (R10)			 ;#2, LIB$FREE_VM		      	    	       6A	     02  FB   000E0
	PUSHL   R7				 ;R7				       2408 			     57  DD   000E3
	CALLS   #1, G^SYS$CLOSE			 ;#1, SYS$CLOSE			      	    00000000G  00	     01  FB   000E5
3$:	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       2409 	       50 00000000G  8F  D0   000EC
	RET     				 ;				      	    				 04   000F3
4$:	MOVL    R8, R0				 ;STATUS, R0			      	    	       50	     58  D0   000F4
	RET     				 ;				       2412 				 04   000F7

; Routine Size:  248 bytes,    Routine Base:  $CODE$ + 0E2F


;   2415  1	 
;   2416  1	 %SBTTL 'LOG_CLOSE - Close a log file'
;   2417  1	 
;   2418  1	GLOBAL ROUTINE LOG_CLOSE (LOG_FAB, LOG_RAB) =
;   2419  1	 
;   2420  1	!++
;   2421  1	! FUNCTIONAL DESCRIPTION:
;   2422  1	!
;   2423  1	! This routine will close an open log file.  It will also ensure that
;   2424  1	!the last buffer gets dumped.
;   2425  1	!
;   2426  1	! CALLING SEQUENCE:
;   2427  1	!
;   2428  1	!	STATUS = LOG_CLOSE (LOG_FAB, LOG_RAB);
;   2429  1	!
;   2430  1	! INPUT PARAMETERS:
;   2431  1	!
;   2432  1	!	LOG_FAB - Address of log file FAB
;   2433  1	!
;   2434  1	!	LOG_RAB - Address of log file RAB
;   2435  1	!
;   2436  1	! IMPLICIT INPUTS:
;   2437  1	!
;   2438  1	!	None.
;   2439  1	!
;   2440  1	! OUPTUT PARAMETERS:
;   2441  1	!
;   2442  1	!	None.
;   2443  1	!
;   2444  1	! IMPLICIT OUTPUTS:
;   2445  1	!
;   2446  1	!	None.
;   2447  1	!
;   2448  1	! COMPLETION CODES:
;   2449  1	!
;   2450  1	!	Resulting status.
;   2451  1	!
;   2452  1	! SIDE EFFECTS:
;   2453  1	!
;   2454  1	!	None.
;   2455  1	!
;   2456  1	!--
;   2457  1	 
;   2458  2	    BEGIN
;   2459  2	!
;   2460  2	! Completion codes returned:
;   2461  2	!
;   2462  2	    EXTERNAL LITERAL
;   2463  2		KER_RMS32;				! RMS-32 error
;   2464  2	 
;   2465  2	    MAP
;   2466  2		LOG_FAB : REF $FAB_DECL,		! FAB for log file
;   2467  2		LOG_RAB : REF $RAB_DECL;		! RAB for log file
;   2468  2	 
;   2469  2	    LOCAL
;   2470  2		STATUS,					! Random status values
;   2471  2		REC_ADDRESS,				! Address of record buffer
;   2472  2		REC_SIZE;				! Size of record buffer
;   2473  2	 
;   2474  2	!
;   2475  2	! First write out any outstanding data
;   2476  2	!
;   2477  2	 
;   2478  2	    IF .LOG_RAB [RAB$L_CTX] GTR 0 THEN LOG_PUT (.LOG_RAB);	! Dump current buffer
;   2479  2	 
;   2480  2	!
;   2481  2	! Return the buffer
;   2482  2	!
;   2483  2	    REC_SIZE = LOG_BUFF_SIZE;			! Get size of buffer
;   2484  2	    REC_ADDRESS = .LOG_RAB [RAB$L_RBF];		! And address
;   2485  2	    LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
;   2486  2	!
;   2487  2	! Now disconnect the RAB
;   2488  2	!
;   2489  2	    STATUS = $DISCONNECT (RAB = .LOG_RAB);
;   2490  2	 
;   2491  2	    IF NOT .STATUS
;   2492  2	    THEN
;   2493  3		BEGIN
;   2494  3		FILE_ERROR (.STATUS);
;   2495  3		RETURN KER_RMS32;
;   2496  2		END;
;   2497  2	 
;   2498  2	!
;   2499  2	! Now we can close the file
;   2500  2	!
;   2501  2	    STATUS = $CLOSE (FAB = .LOG_FAB);
;   2502  2	 
;   2503  2	    IF NOT .STATUS THEN FILE_ERROR (.STATUS);
;   2504  2	 
;   2505  2	!
;   2506  2	! And return the result
;   2507  2	!
;   2508  2	    RETURN .STATUS;
;   2509  1	    END;					! End of LOG_CLOSE



	.EXTRN  SYS$DISCONNECT

	.ENTRY  LOG_CLOSE, ^M<R2,R3>		 ;LOG_CLOSE, Save R2,R3		       2418 			       000C   00000
	MOVAB   G^U.6, R3			 ;U.6, R3			      	    	       53 00000000V  00  9E   00002
	SUBL2   #8, SP				 ;#8, SP			      	    	       5E	     08  C2   00009
	MOVL    8(AP), R2			 ;LOG_RAB, R2			       2478 	       52	08   AC  D0   0000C
	TSTL    24(R2)				 ;24(R2)			      	    			18   A2  D5   00010
	BLEQ    1$				 ;1$				      	    			     09  15   00013
	PUSHL   R2				 ;R2				      	    			     52  DD   00015
	CALLS   #1, G^U.1			 ;#1, U.1			      	    00000000V  00	     01  FB   00017
1$:	MOVZWL  #256, 4(SP)			 ;#256, REC_SIZE		       2483 	  04   AE     0100   8F  3C   0001E
	MOVL    40(R2), (SP)			 ;40(R2), REC_ADDRESS		       2484 	       6E	28   A2  D0   00024
	PUSHL   SP				 ;SP				       2485 			     5E  DD   00028
	PUSHAB  8(SP)				 ;REC_SIZE			      	    			08   AE  9F   0002A
	CALLS   #2, G^LIB$FREE_VM		 ;#2, LIB$FREE_VM		      	    00000000G  00	     02  FB   0002D
	PUSHL   R2				 ;R2				       2489 			     52  DD   00034
	CALLS   #1, G^SYS$DISCONNECT		 ;#1, SYS$DISCONNECT		      	    00000000G  00	     01  FB   00036
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   0003D
	BLBS    R2, 2$				 ;STATUS, 2$			       2491 	       0D	     52  E8   00040
	PUSHL   R2				 ;STATUS			       2494 			     52  DD   00043
	CALLS   #1, (R3)			 ;#1, FILE_ERROR		      	    	       63	     01  FB   00045
	MOVL    #KER_RMS32, R0			 ;#KER_RMS32, R0		       2495 	       50 00000000G  8F  D0   00048
	RET     				 ;				      	    				 04   0004F
2$:	PUSHL   4(AP)				 ;LOG_FAB			       2501 			04   AC  DD   00050
	CALLS   #1, G^SYS$CLOSE			 ;#1, SYS$CLOSE			      	    00000000G  00	     01  FB   00053
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   0005A
	BLBS    R2, 3$				 ;STATUS, 3$			       2503 	       05	     52  E8   0005D
	PUSHL   R2				 ;STATUS			      	    			     52  DD   00060
	CALLS   #1, (R3)			 ;#1, FILE_ERROR		      	    	       63	     01  FB   00062
3$:	MOVL    R2, R0				 ;STATUS, R0			       2508 	       50	     52  D0   00065
	RET     				 ;				      	    				 04   00068

; Routine Size:  105 bytes,    Routine Base:  $CODE$ + 0F27


;   2510  1	 
;   2511  1	 %SBTTL 'LOG_CHAR - Log a character to a file'
;   2512  1	 
;   2513  1	GLOBAL ROUTINE LOG_CHAR (CH, LOG_RAB) =
;   2514  1	 
;   2515  1	!++
;   2516  1	! FUNCTIONAL DESCRIPTION:
;   2517  1	!
;   2518  1	! This routine will write one character to an open log file.
;   2519  1	!If the buffer becomes filled, it will dump it.  It will also
;   2520  1	!dump the buffer if a carriage return line feed is seen.
;   2521  1	!
;   2522  1	! CALLING SEQUENCE:
;   2523  1	!
;   2524  1	!	STATUS = LOG_CHAR (.CH, LOG_RAB);
;   2525  1	!
;   2526  1	! INPUT PARAMETERS:
;   2527  1	!
;   2528  1	!	CH - The character to write to the file.
;   2529  1	!
;   2530  1	!	LOG_RAB - The address of the log file RAB.
;   2531  1	!
;   2532  1	! IMPLICIT INPUTS:
;   2533  1	!
;   2534  1	!	None.
;   2535  1	!
;   2536  1	! OUPTUT PARAMETERS:
;   2537  1	!
;   2538  1	!	None.
;   2539  1	!
;   2540  1	! IMPLICIT OUTPUTS:
;   2541  1	!
;   2542  1	!	None.
;   2543  1	!
;   2544  1	! COMPLETION CODES:
;   2545  1	!
;   2546  1	!	Any error returned by LOG_PUT, else TRUE.
;   2547  1	!
;   2548  1	! SIDE EFFECTS:
;   2549  1	!
;   2550  1	!	None.
;   2551  1	!
;   2552  1	!--
;   2553  1	 
;   2554  2	    BEGIN
;   2555  2	!
;   2556  2	! Completion codes returned:
;   2557  2	!
;   2558  2	    EXTERNAL LITERAL
;   2559  2		KER_NORMAL;				! Normal return
;   2560  2	 
;   2561  2	    MAP
;   2562  2		LOG_RAB : REF $RAB_DECL;		! Log file RAB
;   2563  2	 
;   2564  2	    LOCAL
;   2565  2		STATUS;					! Random status value
;   2566  2	 
;   2567  2	!
;   2568  2	! If this character is a line feed, and previous was a carriage return, then
;   2569  2	! dump the buffer and return.
;   2570  2	!
;   2571  2	 
;   2572  2	    IF .CH EQL CHR_LFD
;   2573  2	    THEN
;   2574  3		BEGIN
;   2575  3	!
;   2576  3	! If we seem to have overfilled the buffer, that is because we saw a CR
;   2577  3	! last, and had no place to put it.  Just reset the size and dump the buffer.
;   2578  3	!
;   2579  3	 
;   2580  3		IF .LOG_RAB [RAB$L_CTX] GTR LOG_BUFF_SIZE
;   2581  3		THEN
;   2582  4		    BEGIN
;   2583  4		    LOG_RAB [RAB$L_CTX] = LOG_BUFF_SIZE;
;   2584  4		    RETURN LOG_PUT (.LOG_RAB);
;   2585  3		    END;
;   2586  3	 
;   2587  3	!
;   2588  3	! If last character in buffer is a CR, then dump buffer without the CR
;   2589  3	!
;   2590  3	 
;   2591  3		IF CH$RCHAR (CH$PTR (.LOG_RAB [RAB$L_RBF], .LOG_RAB [RAB$L_CTX] - 1)) EQL CHR_CRT
;   2592  3		THEN
;   2593  4		    BEGIN
;   2594  4		    LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] - 1;
;   2595  4		    RETURN LOG_PUT (.LOG_RAB);
;   2596  3		    END;
;   2597  3	 
;   2598  2		END;
;   2599  2	 
;   2600  2	!
;   2601  2	! Don't need to dump buffer because of end of line problems.  Check if
;   2602  2	! the buffer is full.
;   2603  2	!
;   2604  2	 
;   2605  2	    IF .LOG_RAB [RAB$L_CTX] GEQ LOG_BUFF_SIZE
;   2606  2	    THEN
;   2607  3		BEGIN
;   2608  3	!
;   2609  3	! If character we want to store is a carriage return, then just count it and
;   2610  3	! don't dump the buffer yet.
;   2611  3	!
;   2612  3	 
;   2613  3		IF .CH EQL CHR_CRT
;   2614  3		THEN
;   2615  4		    BEGIN
;   2616  4		    LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] + 1;
;   2617  4		    RETURN KER_NORMAL;
;   2618  3		    END;
;   2619  3	 
;   2620  3	!
;   2621  3	! We must dump the buffer to make room for more characters
;   2622  3	!
;   2623  3		STATUS = LOG_PUT (.LOG_RAB);
;   2624  3	 
;   2625  3		IF NOT .STATUS THEN RETURN .STATUS;
;   2626  3	 
;   2627  2		END;
;   2628  2	 
;   2629  2	!
;   2630  2	! Here when we have some room to store the character
;   2631  2	!
;   2632  2	    CH$WCHAR (.CH, CH$PTR (.LOG_RAB [RAB$L_RBF], .LOG_RAB [RAB$L_CTX]));
;   2633  2	    LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] + 1;
;   2634  2	    RETURN KER_NORMAL;
;   2635  1	    END;					! End of LOG_CHAR





	.ENTRY  LOG_CHAR, ^M<R2,R3>		 ;LOG_CHAR, Save R2,R3		       2513 			       000C   00000
	MOVAB   G^U.1, R3			 ;U.1, R3			      	    	       53 00000000V  00  9E   00002
	CMPL    4(AP), #10			 ;CH, #10			       2572 	       0A	04   AC  D1   00009
	BNEQ    3$				 ;3$				      	    			     2B  12   0000D
	MOVL    8(AP), R2			 ;LOG_RAB, R2			       2580 	       52	08   AC  D0   0000F
	CMPL    24(R2), #256			 ;24(R2), #256			      	    00000100   8F	18   A2  D1   00013
	BLEQ    1$				 ;1$				      	    			     08  15   0001B
	MOVZWL  #256, 24(R2)			 ;#256, 24(R2)			       2583 	  18   A2     0100   8F  3C   0001D
	BRB     2$				 ;2$				       2584 			     0F  11   00023
1$:	ADDL3   24(R2), 40(R2), R0		 ;24(R2), 40(R2), R0		       2591 	  28   A2	18   A2  C1   00025
						 ;					    			     50       0002A
	CMPB    -1(R0), #13			 ;-1(R0), #13			      	    	       0D	FF   A0  91   0002B
	BNEQ    3$				 ;3$				      	    			     09  12   0002F
	DECL    24(R2)				 ;24(R2)			       2594 			18   A2  D7   00031
2$:	PUSHL   R2				 ;R2				       2595 			     52  DD   00034
	CALLS   #1, (R3)			 ;#1, LOG_PUT			      	    	       63	     01  FB   00036
	RET     				 ;				      	    				 04   00039
3$:	MOVL    8(AP), R2			 ;LOG_RAB, R2			       2605 	       52	08   AC  D0   0003A
	CMPL    24(R2), #256			 ;24(R2), #256			      	    00000100   8F	18   A2  D1   0003E
	BLSS    4$				 ;4$				      	    			     0E  19   00046
	CMPL    4(AP), #13			 ;CH, #13			       2613 	       0D	04   AC  D1   00048
	BEQL    5$				 ;5$				      	    			     12  13   0004C
	PUSHL   R2				 ;R2				       2623 			     52  DD   0004E
	CALLS   #1, (R3)			 ;#1, LOG_PUT			      	    	       63	     01  FB   00050
	BLBC    R0, 6$				 ;STATUS, 6$			       2625 	       14	     50  E9   00053
4$:	ADDL3   24(R2), 40(R2), R0		 ;24(R2), 40(R2), R0		       2632 	  28   A2	18   A2  C1   00056
						 ;					    			     50       0005B
	MOVB    4(AP), (R0)			 ;CH, (R0)			      	    	       60	04   AC  90   0005C
5$:	INCL    24(R2)				 ;24(R2)			       2633 			18   A2  D6   00060
	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       2634 	       50 00000000G  8F  D0   00063
6$:	RET     				 ;				      	    				 04   0006A

; Routine Size:  107 bytes,    Routine Base:  $CODE$ + 0F90


;   2636  1	 
;   2637  1	 %SBTTL 'LOG_LINE - Log a line to a log file'
;   2638  1	 
;   2639  1	GLOBAL ROUTINE LOG_LINE (LINE_DESC, LOG_RAB) =
;   2640  1	 
;   2641  1	!++
;   2642  1	! FUNCTIONAL DESCRIPTION:
;   2643  1	!
;   2644  1	! This routine will write an entire line to a log file.  And previously
;   2645  1	! written characters will be dumped first.
;   2646  1	!
;   2647  1	! CALLING SEQUENCE:
;   2648  1	!
;   2649  1	!	STATUS = LOG_LINE (LINE_DESC, LOG_RAB);
;   2650  1	!
;   2651  1	! INPUT PARAMETERS:
;   2652  1	!
;   2653  1	!	LINE_DESC - Address of descriptor for string to be written
;   2654  1	!
;   2655  1	!	LOG_RAB - RAB for log file
;   2656  1	!
;   2657  1	! IMPLICIT INPUTS:
;   2658  1	!
;   2659  1	!	None.
;   2660  1	!
;   2661  1	! OUPTUT PARAMETERS:
;   2662  1	!
;   2663  1	!	None.
;   2664  1	!
;   2665  1	! IMPLICIT OUTPUTS:
;   2666  1	!
;   2667  1	!	None.
;   2668  1	!
;   2669  1	! COMPLETION CODES:
;   2670  1	!
;   2671  1	!   KER_NORMAL or LOG_PUT error code.
;   2672  1	!
;   2673  1	! SIDE EFFECTS:
;   2674  1	!
;   2675  1	!	None.
;   2676  1	!
;   2677  1	!--
;   2678  1	 
;   2679  2	    BEGIN
;   2680  2	 
;   2681  2	    MAP
;   2682  2		LINE_DESC : REF BLOCK [8, BYTE],	! Descriptor for string
;   2683  2		LOG_RAB : REF $RAB_DECL;		! RAB for file
;   2684  2	 
;   2685  2	    LOCAL
;   2686  2		STATUS;					! Random status value
;   2687  2	 
;   2688  2	!
;   2689  2	! First check if anything is already in the buffer
;   2690  2	!
;   2691  2	 
;   2692  2	    IF .LOG_RAB [RAB$L_CTX] GTR 0
;   2693  2	    THEN
;   2694  3		BEGIN
;   2695  3		STATUS = LOG_PUT (.LOG_RAB);		! Yes, write it out
;   2696  3	 
;   2697  3		IF NOT .STATUS THEN RETURN .STATUS;	! Pass back any errors
;   2698  3	 
;   2699  2		END;
;   2700  2	 
;   2701  2	!
;   2702  2	! Copy the data to the buffer
;   2703  2	!
;   2704  2	    CH$COPY (.LINE_DESC [DSC$W_LENGTH], CH$PTR (.LINE_DESC [DSC$A_POINTER]), CHR_NUL,
;   2705  2		LOG_BUFF_SIZE, CH$PTR (.LOG_RAB [RAB$L_RBF]));
;   2706  2	 
;   2707  2	    IF .LINE_DESC [DSC$W_LENGTH] GTR LOG_BUFF_SIZE
;   2708  2	    THEN
;   2709  2		LOG_RAB [RAB$L_CTX] = LOG_BUFF_SIZE
;   2710  2	    ELSE
;   2711  2		LOG_RAB [RAB$L_CTX] = .LINE_DESC [DSC$W_LENGTH];
;   2712  2	 
;   2713  2	!
;   2714  2	! Now just dump the buffer
;   2715  2	!
;   2716  2	    RETURN LOG_PUT (.LOG_RAB);
;   2717  1	    END;					! End of LOG_LINE





	.ENTRY  LOG_LINE, ^M<R2,R3,R4,R5,R6,R7,- ;LOG_LINE, Save R2,R3,R4,R5,R6,R7,R8  2639 			       01FC   00000
		R8>				 ;
	MOVAB   G^U.1, R8			 ;U.1, R8			      	    	       58 00000000V  00  9E   00002
	MOVL    8(AP), R6			 ;LOG_RAB, R6			       2692 	       56	08   AC  D0   00009
	TSTL    24(R6)				 ;24(R6)			      	    			18   A6  D5   0000D
	BLEQ    1$				 ;1$				      	    			     08  15   00010
	PUSHL   R6				 ;R6				       2695 			     56  DD   00012
	CALLS   #1, (R8)			 ;#1, LOG_PUT			      	    	       68	     01  FB   00014
	BLBC    R0, 4$				 ;STATUS, 4$			       2697 	       26	     50  E9   00017
1$:	MOVL    4(AP), R7			 ;LINE_DESC, R7			       2704 	       57	04   AC  D0   0001A
	MOVC5   (R7), @4(R7), #0, #256, @40(R6)  ;(R7), @4(R7), #0, #256, @40(R6)      2705 	  04   B7	     67  2C   0001E
						 ;					    	0100   8F	     00       00022
						 ;					    			28   B6       00026
	CMPW    (R7), #256			 ;(R7), #256			       2707 	0100   8F	     67  B1   00028
	BLEQU   2$				 ;2$				      	    			     08  1B   0002D
	MOVZWL  #256, 24(R6)			 ;#256, 24(R6)			       2709 	  18   A6     0100   8F  3C   0002F
	BRB     3$				 ;3$				      	    			     04  11   00035
2$:	MOVZWL  (R7), 24(R6)			 ;(R7), 24(R6)			       2711 	  18   A6	     67  3C   00037
3$:	PUSHL   R6				 ;R6				       2716 			     56  DD   0003B
	CALLS   #1, (R8)			 ;#1, LOG_PUT			      	    	       68	     01  FB   0003D
4$:	RET     				 ;				      	    				 04   00040

; Routine Size:  65 bytes,    Routine Base:  $CODE$ + 0FFB


;   2718  1	 %SBTTL 'LOG_FAOL - Log an FAO string to the log file'
;   2719  1	 
;   2720  1	GLOBAL ROUTINE LOG_FAOL (FAOL_DESC, FAOL_PARAMS, LOG_RAB) =
;   2721  1	 
;   2722  1	!++
;   2723  1	! FUNCTIONAL DESCRIPTION:
;   2724  1	!
;   2725  1	! This routine will write an FAOL string to the output file.
;   2726  1	!
;   2727  1	! CALLING SEQUENCE:
;   2728  1	!
;   2729  1	!	STATUS = LOG_FAOL (FAOL_DESC, FAOL_PARAMS, LOG_RAB);
;   2730  1	!
;   2731  1	! INPUT PARAMETERS:
;   2732  1	!
;   2733  1	!	FAOL_DESC - Address of descriptor for string to be written
;   2734  1	!
;   2735  1	!	FAOL_PARAMS - Parameter list for FAOL call
;   2736  1	!
;   2737  1	!	LOG_RAB - RAB for log file
;   2738  1	!
;   2739  1	! IMPLICIT INPUTS:
;   2740  1	!
;   2741  1	!	None.
;   2742  1	!
;   2743  1	! OUPTUT PARAMETERS:
;   2744  1	!
;   2745  1	!	None.
;   2746  1	!
;   2747  1	! IMPLICIT OUTPUTS:
;   2748  1	!
;   2749  1	!	None.
;   2750  1	!
;   2751  1	! COMPLETION CODES:
;   2752  1	!
;   2753  1	!	KER_NORMAL or $FAOL or LOG_PUT error code.
;   2754  1	!
;   2755  1	! SIDE EFFECTS:
;   2756  1	!
;   2757  1	!	None.
;   2758  1	!
;   2759  1	!--
;   2760  1	 
;   2761  2	    BEGIN
;   2762  2	!
;   2763  2	! Completion codes returned:
;   2764  2	!
;   2765  2	    EXTERNAL LITERAL
;   2766  2		KER_NORMAL;				! Normal return
;   2767  2	 
;   2768  2	    MAP
;   2769  2		FAOL_DESC : REF BLOCK [8, BYTE],	! Descriptor for string
;   2770  2		LOG_RAB : REF $RAB_DECL;		! RAB for file
;   2771  2	 
;   2772  2	    LITERAL
;   2773  2		FAOL_BUFSIZ = 256;			! Length of buffer
;   2774  2	 
;   2775  2	    LOCAL
;   2776  2		FAOL_BUFFER : VECTOR [FAOL_BUFSIZ, BYTE], ! Buffer for FAOL output
;   2777  2		FAOL_BUF_DESC : BLOCK [8, BYTE],	! Descriptor for buffer
;   2778  2		STATUS;					! Random status value
;   2779  2	 
;   2780  2	!
;   2781  2	! Initialize descriptor for buffer
;   2782  2	!
;   2783  2	    FAOL_BUF_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
;   2784  2	    FAOL_BUF_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   2785  2	    FAOL_BUF_DESC [DSC$A_POINTER] = FAOL_BUFFER;
;   2786  2	    FAOL_BUF_DESC [DSC$W_LENGTH] = FAOL_BUFSIZ;
;   2787  2	!
;   2788  2	! Now do the FAOL to generate the full text
;   2789  2	!
; P 2790  2	    STATUS = $FAOL (CTRSTR = .FAOL_DESC, OUTBUF = FAOL_BUF_DESC,
;   2791  2		OUTLEN = FAOL_BUF_DESC [DSC$W_LENGTH], PRMLST = .FAOL_PARAMS);
;   2792  2	    IF NOT .STATUS THEN RETURN .STATUS;
;   2793  2	!
;   2794  2	! Dump the text into the file
;   2795  2	!
;   2796  2	    INCR I FROM 1 TO .FAOL_BUF_DESC [DSC$W_LENGTH] DO
;   2797  3		BEGIN
;   2798  3		STATUS = LOG_CHAR ( .FAOL_BUFFER [.I - 1], .LOG_RAB);
;   2799  3		IF NOT .STATUS THEN RETURN .STATUS;
;   2800  2		END;
;   2801  2	 
;   2802  2	    RETURN KER_NORMAL;
;   2803  2	 
;   2804  1	    END;					! End of LOG_FAOL



	.EXTRN  SYS$FAOL

	.ENTRY  LOG_FAOL, ^M<R2,R3>		 ;LOG_FAOL, Save R2,R3		       2720 			       000C   00000
	MOVAB   -260(SP), SP			 ;-260(SP), SP			      	    	       5E     FEFC   CE  9E   00002
	PUSHL   #17694976			 ;#17694976			       2786 		  010E0100   8F  DD   00007
	MOVAB   8(SP), 4(SP)			 ;FAOL_BUFFER, FAOL_BUF_DESC+4	       2785 	  04   AE	08   AE  9E   0000D
	PUSHL   8(AP)				 ;FAOL_PARAMS			       2791 			08   AC  DD   00012
	PUSHAB  4(SP)				 ;FAOL_BUF_DESC			      	    			04   AE  9F   00015
	PUSHAB  8(SP)				 ;FAOL_BUF_DESC			      	    			08   AE  9F   00018
	PUSHL   4(AP)				 ;FAOL_DESC			      	    			04   AC  DD   0001B
	CALLS   #4, G^SYS$FAOL			 ;#4, SYS$FAOL			      	    00000000G  00	     04  FB   0001E
	BLBC    R0, 3$				 ;STATUS, 3$			       2792 	       22	     50  E9   00025
	MOVZWL  (SP), R3			 ;FAOL_BUF_DESC, R3		       2796 	       53	     6E  3C   00028
	CLRL    R2				 ;I				      	    			     52  D4   0002B
	BRB     2$				 ;2$				      	    			     10  11   0002D
1$:	PUSHL   12(AP)				 ;LOG_RAB			       2798 			0C   AC  DD   0002F
	MOVZBL  11(SP)[R2], -(SP)		 ;FAOL_BUFFER-1[I], -(SP)	      	    	       7E	0B AE42  9A   00032
	CALLS   #2, W^LOG_CHAR			 ;#2, LOG_CHAR			      	    	FF18   CF	     02  FB   00037
	BLBC    R0, 3$				 ;STATUS, 3$			       2799 	       0B	     50  E9   0003C
2$:	AOBLEQ  R3, R2, 1$			 ;R3, I, 1$			       2796 	       52	     53  F3   0003F
						 ;					    			     EC       00042
	MOVL    #KER_NORMAL, R0			 ;#KER_NORMAL, R0		       2802 	       50 00000000G  8F  D0   00043
3$:	RET     				 ;				      	    				 04   0004A

; Routine Size:  75 bytes,    Routine Base:  $CODE$ + 103C


;   2805  1	 
;   2806  1	 %SBTTL 'LOG_PUT - Write a record buffer for a log file'
;   2807  1	ROUTINE LOG_PUT (LOG_RAB) =
;   2808  1	 
;   2809  1	!++
;   2810  1	! FUNCTIONAL DESCRIPTION:
;   2811  1	!
;   2812  1	! This routine will output one buffer for a log file.
;   2813  1	!
;   2814  1	! CALLING SEQUENCE:
;   2815  1	!
;   2816  1	!	STATUS = LOG_PUT (LOG_RAB);
;   2817  1	!
;   2818  1	! INPUT PARAMETERS:
;   2819  1	!
;   2820  1	!	LOG_RAB - RAB for log file.
;   2821  1	!
;   2822  1	! IMPLICIT INPUTS:
;   2823  1	!
;   2824  1	!	None.
;   2825  1	!
;   2826  1	! OUPTUT PARAMETERS:
;   2827  1	!
;   2828  1	!	None.
;   2829  1	!
;   2830  1	! IMPLICIT OUTPUTS:
;   2831  1	!
;   2832  1	!	None.
;   2833  1	!
;   2834  1	! COMPLETION CODES:
;   2835  1	!
;   2836  1	!	Status value from RMS
;   2837  1	!
;   2838  1	! SIDE EFFECTS:
;   2839  1	!
;   2840  1	!	None.
;   2841  1	!
;   2842  1	!--
;   2843  1	 
;   2844  2	    BEGIN
;   2845  2	 
;   2846  2	    MAP
;   2847  2		LOG_RAB : REF $RAB_DECL;		! RAB for file
;   2848  2	 
;   2849  2	!
;   2850  2	! Calculate record size
;   2851  2	!
;   2852  2	    LOG_RAB [RAB$W_RSZ] = .LOG_RAB [RAB$L_CTX];
;   2853  2	    LOG_RAB [RAB$W_USZ] = .LOG_RAB [RAB$W_RSZ];
;   2854  2	!
;   2855  2	! Buffer will be empty when we finish
;   2856  2	!
;   2857  2	    LOG_RAB [RAB$L_CTX] = 0;
;   2858  2	!
;   2859  2	! And call RMS to write the buffer
;   2860  2	!
;   2861  2	    RETURN $PUT (RAB = .LOG_RAB);
;   2862  1	    END;					! End of LOG_PUT





;LOG_PUT
U.1:	.WORD   ^M<>				 ;Save nothing			       2807 			       0000   00000
	MOVL    4(AP), R0			 ;LOG_RAB, R0			       2852 	       50	04   AC  D0   00002
	MOVW    24(R0), 34(R0)			 ;24(R0), 34(R0)		      	    	  22   A0	18   A0  B0   00006
	MOVW    34(R0), 32(R0)			 ;34(R0), 32(R0)		       2853 	  20   A0	22   A0  B0   0000B
	CLRL    24(R0)				 ;24(R0)			       2857 			18   A0  D4   00010
	PUSHL   R0				 ;R0				       2861 			     50  DD   00013
	CALLS   #1, G^SYS$PUT			 ;#1, SYS$PUT			      	    00000000G  00	     01  FB   00015
	RET     				 ;				      	    				 04   0001C

; Routine Size:  29 bytes,    Routine Base:  $CODE$ + 1087


;   2863  1	 %SBTTL 'FILE_ERROR - Error processing for all RMS errors'
;   2864  1	ROUTINE FILE_ERROR (STATUS) : NOVALUE =
;   2865  1	 
;   2866  1	!++
;   2867  1	! FUNCTIONAL DESCRIPTION:
;   2868  1	!
;   2869  1	!	This routine will process all of the RMS-32 error returns.  It will
;   2870  1	!	get the text for the error and then it will issue a KER_ERROR for
;   2871  1	!	the RMS failure.
;   2872  1	!
;   2873  1	! CALLING SEQUENCE:
;   2874  1	!
;   2875  1	!	FILE_ERROR();
;   2876  1	!
;   2877  1	! INPUT PARAMETERS:
;   2878  1	!
;   2879  1	!	None.
;   2880  1	!
;   2881  1	! IMPLICIT INPUTS:
;   2882  1	!
;   2883  1	!	STATUS - RMS error status.
;   2884  1	!	FILE_NAME - File name and extension.
;   2885  1	!	FILE_SIZE - Size of the thing in FILE_NAME.
;   2886  1	!
;   2887  1	! OUTPUT PARAMETERS:
;   2888  1	!
;   2889  1	!	None.
;   2890  1	!
;   2891  1	! IMPLICIT OUTPUTS:
;   2892  1	!
;   2893  1	!	None.
;   2894  1	!
;   2895  1	! COMPLETION CODES:
;   2896  1	!
;   2897  1	!	None.
;   2898  1	!
;   2899  1	! SIDE EFFECTS:
;   2900  1	!
;   2901  1	!	None.
;   2902  1	!
;   2903  1	!--
;   2904  1	 
;   2905  2	    BEGIN
;   2906  2	!
;   2907  2	! KERMIT completion codes 
;   2908  2	!
;   2909  2	    EXTERNAL LITERAL
;   2910  2		KER_RMS32;				! RMS-32 error
;   2911  2	 
;   2912  2	    LOCAL
;   2913  2		ERR_BUFFER : VECTOR [CH$ALLOCATION (MAX_MSG)],
;   2914  2		ERR_DESC : BLOCK [8, BYTE] PRESET	! String descriptor to
;   2915  2		       ([DSC$B_CLASS ] = DSC$K_CLASS_S,	!  the error buffer
;   2916  2			[DSC$B_DTYPE ] = DSC$K_DTYPE_T,	!  standard string
;   2917  2			[DSC$W_LENGTH ] = MAX_MSG,	!  descriptor
;   2918  2			[DSC$A_POINTER ] = ERR_BUFFER);
;   2919  2	 
; P 2920  2	    $GETMSG (MSGID = .STATUS,
; P 2921  2	             MSGLEN = ERR_DESC [DSC$W_LENGTH],
; P 2922  2	             BUFADR = ERR_DESC, 
;   2923  2	             FLAGS = 1);
;   2924  2	    LIB$SIGNAL (KER_RMS32, 2, ERR_DESC, FILE_DESC);
;   2925  1	    END;					! End of FILE_ERROR



	.EXTRN  SYS$GETMSG

;FILE_ERROR
U.6:	.WORD   ^M<>				 ;Save nothing			       2864 			       0000   00000
	MOVAB   -1008(SP), SP			 ;-1008(SP), SP			      	    	       5E     FC10   CE  9E   00002
	PUSHL   #17695722			 ;#17695722			       2918 		  010E03EA   8F  DD   00007
	MOVAB   8(SP), 4(SP)			 ;ERR_BUFFER, ERR_DESC+4	      	    	  04   AE	08   AE  9E   0000D
	MOVQ    #1, -(SP)			 ;#1, -(SP)			       2923 	       7E	     01  7D   00012
	PUSHAB  8(SP)				 ;ERR_DESC			      	    			08   AE  9F   00015
	PUSHAB  12(SP)				 ;ERR_DESC			      	    			0C   AE  9F   00018
	PUSHL   4(AP)				 ;STATUS			      	    			04   AC  DD   0001B
	CALLS   #5, G^SYS$GETMSG		 ;#5, SYS$GETMSG		      	    00000000G  00	     05  FB   0001E
	PUSHAB  G^FILE_DESC			 ;FILE_DESC			       2924 		  00000000'  00  9F   00025
	PUSHAB  4(SP)				 ;ERR_DESC			      	    			04   AE  9F   0002B
	PUSHL   #2				 ;#2				      	    			     02  DD   0002E
	PUSHL   #KER_RMS32			 ;#KER_RMS32			      	    		  00000000G  8F  DD   00030
	CALLS   #4, G^LIB$SIGNAL		 ;#4, LIB$SIGNAL		      	    00000000G  00	     04  FB   00036
	RET     				 ;				       2925 				 04   0003D

; Routine Size:  62 bytes,    Routine Base:  $CODE$ + 10A4


;   2926  1	 %SBTTL 'End of KERFIL'
;   2927  1	END						! End of module
;   2928  1	 
;   2929  0	ELUDOM






;				       PSECT SUMMARY
;
;	Name			 Bytes			       Attributes
;
;  $OWN$			      857  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
;  $GLOBAL$			       20  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
;  $CODE$			     4322  NOVEC,NOWRT,  RD ,  EXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
;  .  ABS  .			        0  NOVEC,NOWRT,NORD ,NOEXE,NOSHR,  LCL,  ABS,  CON,NOPIC,ALIGN(0)
;  $PLIT$			       44  NOVEC,NOWRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)




;				Library Statistics
;
;					     -------- Symbols --------	    Pages	Processing
;	File				     Total    Loaded   Percent      Mapped	Time
;
;  SYS$COMMON:[SYSLIB]STARLET.L32;2	     12540       136         1       721          00:00.4







;					COMMAND QUALIFIERS

;	BLIS/LIS/MACH=(ASSEM,UNIQUE)/SOURCE=NOHEAD VMSFIL.BLI

; Compilation Complete

	.END
