;   0001  0	MODULE KERSYS (IDENT = '3.3.113',
;   0002  0	    ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)
;   0003  0			) =
;   0004  1	BEGIN
;   0005  1	 
;   0006  1	!++
;   0007  1	! FACILITY:
;   0008  1	!   KERMIT-32
;   0009  1	!
;   0010  1	! ABSTRACT:
;   0011  1	!   KERMIT-32 is an implementation of the KERMIT protocal to allow the
;   0012  1	!   transfer of files from micro computers to the DECsystem-10, DECSYSTEM-20
;   0013  1	!   and now the VAX/VMS systems.
;   0014  1	!
;   0015  1	! ENVIRONMENT:
;   0016  1	!   User mode
;   0017  1	!
;   0018  1	! AUTHOR: Robert C. McQueen, Nick Bush, CREATION DATE: 24-January-1983
;   0019  1	!
;   0020  1	! MODIFIED BY:
;   0021  1	!
;   0022  1	!--
;   0023  1	 
;   0024  1	 %SBTTL 'Table of Contents'
;   0025  1	 %SBTTL 'Revision History'
;   0026  1	 
;   0027  1	!++
;   0028  1	!
;   0029  1	! 2.0.032	By: Nick Bush			On: 25-Feb-1984
;   0030  1	!		Add code for LOCAL and REMOTE commands.  These depend
;   0031  1	!		upon support in KERMSG and KERSYS.
;   0032  1	!
;   0033  1	! 3.0.045	Start of version 3.
;   0034  1	!
;   0035  1	! 3.1.057	By: Nick Bush				On: 21-Feb-1985
;   0036  1	!		Determine VMS version on startup and remember for later
;   0037  1	!		use.  Use it in KERSYS to determine whether we will need
;   0038  1	!		to force an end-of-file on the mailbox when the subprocess
;   0039  1	!		on the other end goes away.
;   0040  1	!
;   0041  1	! 3.1.064	By: Nick Bush				On: 30-March-1985
;   0042  1	!		Fix LIB$SPAWN call to set SYS$INPUT for the subprocess
;   0043  1	!		to be NLA0: so that it doesn't try to input from the
;   0044  1	!		terminal.
;   0045  1	!
;   0046  1	! 3.1.066	By: Nick Bush				On: 22-April-1985
;   0047  1	!		Don't use NLA0: as SYS$INPUT when spawning things under VMS 3.
;   0048  1	!
;   0049  1	! Start of version 3.3
;   0050  1	!
;   0051  1	! 3.3.101	By: Robert McQueen			On: 2-July-1986
;   0052  1	!		Change from $TRNLOG system service calls to LIB$SYS_TRNLOG
;   0053  1	!		library routine calls.
;   0054  1	!
;   0055  1	! 3.3.108	By: Antonino N. Mione			On: 8-Sep-1986
;   0056  1	!		Make KERMIT-32 close the terminal (so the terminal
;   0057  1	!		parameters are appropriately reset) upon reciept of 
;   0058  1	!		a GENERIC LOGOUT packet.
;   0059  1	!
;   0060  1	! 3.3.113	JHW0002		Jonathan Welch,		5-May-1988 11:48
;   0061  1	!		Modified SY_TIME to use $GETTIM as opposed to the LIB$timer
;   0062  1	!		routines (which broke when their method of calculating
;   0063  1	!		time differences changed in V4.4?).
;   0064  1	!
;   0065  1	!		Removed the call to LIB$INIT_TIMER in SY_INIT.
;   0066  1	!--
;   0067  1	 
;   0068  1	 %SBTTL 'Include files'
;   0069  1	!
;   0070  1	! INCLUDE FILES:
;   0071  1	!
;   0072  1	 
;   0073  1	LIBRARY 'SYS$LIBRARY:STARLET';
;   0074  1	 
;   0075  1	LIBRARY 'SYS$LIBRARY:TPAMAC';
;   0076  1	 
;   0077  1	REQUIRE 'KERCOM';				! Common definitions
;   0286  1	 
;   0287  1	REQUIRE 'KERERR';				! Error message symbol definitions
;   0353  1	 
;   0354  1	 %SBTTL 'Storage -- Local'
;   0355  1	!
;   0356  1	! OWN STORAGE:
;   0357  1	!
;   0358  1	 
;   0359  1	OWN
;   0360  1	    VMS_VERSION,				! Major version number of VMS
;   0361  1	    ORG_DEFAULT_DIR_TEXT : VECTOR [MAX_FILE_NAME, BYTE],	! Text of default dir
;   0362  1	    ORG_DEFAULT_DIR : BLOCK [8, BYTE],		! Original default directory
;   0363  1	    ORG_DEFAULT_DEV_TEXT : VECTOR [MAX_FILE_NAME, BYTE],	! Text of default device
;   0364  1	    ORG_DEFAULT_DEV : BLOCK [8, BYTE],		! Descriptor for orginal default device
;   0365  1	    Subtrahend : VECTOR [2, LONG];		! Constant to subtract from system time.
;   0366  1	 
;   0367  1	!<BLF/FORMAT>
;   0368  1	 %SBTTL 'External routines'
;   0369  1	!
;   0370  1	! EXTERNAL REFERENCES:
;   0371  1	!
;   0372  1	 
;   0373  1	EXTERNAL ROUTINE
;   0374  1	!
;   0375  1	! Library routines
;   0376  1	!
;   0377  1	    LIB$EDIV : ADDRESSING_MODE (GENERAL),
;   0378  1	    LIB$SET_LOGICAL : ADDRESSING_MODE (GENERAL),
;   0379  1	    LIB$SIGNAL : ADDRESSING_MODE (GENERAL) NOVALUE,
;   0380  1	    LIB$SPAWN : ADDRESSING_MODE (GENERAL),
;   0381  1	    LIB$SUBX : ADDRESSING_MODE (GENERAL),
;   0382  1	    OTS$CVT_L_TZ : ADDRESSING_MODE (GENERAL) NOVALUE,
;   0383  1	    SYS$SETDDIR : ADDRESSING_MODE (GENERAL),
;   0384  1	    SYS$GETTIM : ADDRESSING_MODE (GENERAL),
;   0385  1	!
;   0386  1	! KERTRM - Terminal handling routines
;   0387  1	!
;   0388  1	    TERM_CLOSE,					! Close terminal and restore characteristics
;   0389  1	 
;   0390  1	!
;   0391  1	! KERTT - Text processing
;   0392  1	!
;   0393  1	    TT_INIT : NOVALUE,				! Initialization routine
;   0394  1	    TT_TEXT : NOVALUE,				! Output a text string
;   0395  1	    TT_NUMBER : NOVALUE,			! Output a number
;   0396  1	    TT_CHAR : NOVALUE,				! Output a single character
;   0397  1	    TT_OUTPUT : NOVALUE,			! Routine to dump the current
;   0398  1	    						!  text line.
;   0399  1	    TT_CRLF : NOVALUE;				! Output the line
;   0400  1	 
;   0401  1	 %SBTTL 'External storage'
;   0402  1	!
;   0403  1	! EXTERNAL Storage:
;   0404  1	!
;   0405  1	 
;   0406  1	EXTERNAL
;   0407  1	!
;   0408  1	! KERMSG storage
;   0409  1	!
;   0410  1	    GEN_1DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],	! Data for generic command
;   0411  1	    GEN_1SIZE,					! Size of data in GEN_1DATA
;   0412  1	    GEN_2DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],	! Second argument for generic command
;   0413  1	    GEN_2SIZE,					! Size of data in GEN_2DATA
;   0414  1	    GEN_3DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],	! Third arg for generic command
;   0415  1	    GEN_3SIZE,					! Size of data in GEN_3DATA
;   0416  1	!
;   0417  1	! Misc constants.
;   0418  1	!
;   0419  1	    FILE_SIZE,					! Number of characters in FILE_NAME
;   0420  1	    FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)];
;   0421  1	 
;   0422  1	 %SBTTL 'SY_INIT - Initialize KERSYS'
;   0423  1	 
;   0424  1	GLOBAL ROUTINE SY_INIT : NOVALUE =
;   0425  1	 
;   0426  1	!++
;   0427  1	! FUNCTIONAL DESCRIPTION:
;   0428  1	!
;   0429  1	! This routine will initialize the module KERSYS.
;   0430  1	!
;   0431  1	! CALLING SEQUENCE:
;   0432  1	!
;   0433  1	!	SY_INIT ();
;   0434  1	!
;   0435  1	! INPUT PARAMETERS:
;   0436  1	!
;   0437  1	!	None.
;   0438  1	!
;   0439  1	! IMPLICIT INPUTS:
;   0440  1	!
;   0441  1	!	None.
;   0442  1	!
;   0443  1	! OUPTUT PARAMETERS:
;   0444  1	!
;   0445  1	!	None.
;   0446  1	!
;   0447  1	! IMPLICIT OUTPUTS:
;   0448  1	!
;   0449  1	!	None.
;   0450  1	!
;   0451  1	! COMPLETION CODES:
;   0452  1	!
;   0453  1	!	None.
;   0454  1	!
;   0455  1	! SIDE EFFECTS:
;   0456  1	!
;   0457  1	!	KERSYS storage initialized
;   0458  1	!
;   0459  1	!--
;   0460  1	 
;   0461  2	    BEGIN
;   0462  2	 
;   0463  2	    LITERAL
;   0464  2		SYI_EFN = 10;			    ! EFN to use for $GETSYI
;   0465  2	 
;   0466  2	    LOCAL
;   0467  2		VERSION_STRING : VECTOR [8, BYTE],  ! Return version string here
;   0468  2		VERSION_LENGTH,			    ! And length here
;   0469  2		SYI_ITEM_LIST : BLOCK [16, BYTE],   ! Argument list for $GETSYI
;   0470  2		LENGTH,				    ! Length of default dir returned
;   0471  2		STATUS;
;   0472  2	 
;   0473  2	    EXTERNAL ROUTINE
;   0474  2		LIB$SYS_TRNLOG : ADDRESSING_MODE(GENERAL);
;   0475  2	 
;   0476  2	!
;   0477  2	! Set up arg list for $GETSYI
;   0478  2	!
;   0479  2	    SYI_ITEM_LIST [0, 0, 16, 0] = 8;	! We expect an 8-byte string
;   0480  2	    SYI_ITEM_LIST [2, 0, 16, 0] = SYI$_VERSION; ! Want the VMS version
;   0481  2	    SYI_ITEM_LIST [4, 0, 32, 0] = VERSION_STRING; ! Put it here
;   0482  2	    SYI_ITEM_LIST [8, 0, 32, 0] = VERSION_LENGTH; ! Length goes here
;   0483  2	    SYI_ITEM_LIST [12, 0, 32, 0] = 0;	! End the list
;   0484  2	    STATUS = $GETSYI (EFN=SYI_EFN, ITMLST=SYI_ITEM_LIST); ! Get the data
;   0485  2	    IF NOT .STATUS			! If we can't get the version
;   0486  2	    THEN
;   0487  2		VMS_VERSION = 0		! Assume very old VMS?
;   0488  2	    ELSE
;   0489  3		BEGIN
;   0490  3		STATUS = $WAITFR (EFN=SYI_EFN);	! Wait for completion
;   0491  3		IF .STATUS			! If we got it
;   0492  3		THEN
;   0493  4		    BEGIN
;   0494  4		    IF .VERSION_STRING [0] GEQ %C'0' AND
;   0495  4			.VERSION_STRING [0] LEQ %C'9'	! If first character is numeric
;   0496  4		    THEN
;   0497  4			VMS_VERSION = (.VERSION_STRING[0] - %C'0')*10	! save first digit
;   0498  4		    ELSE
;   0499  4			VMS_VERSION = 0;	    ! No first digit, store 0
;   0500  4		    VMS_VERSION = .VMS_VERSION + .VERSION_STRING[1] - %C'0' ! Get rest of version
;   0501  4		    END
;   0502  3		ELSE
;   0503  3		    VMS_VERSION = 0;		! Can't get version?
;   0504  2		END;
;   0505  2	!
;   0506  2	! Set up original default directory
;   0507  2	!
;   0508  2	    ORG_DEFAULT_DIR [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0509  2	    ORG_DEFAULT_DIR [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0510  2	    ORG_DEFAULT_DIR [DSC$W_LENGTH] = MAX_FILE_NAME;
;   0511  2	    ORG_DEFAULT_DIR [DSC$A_POINTER] = ORG_DEFAULT_DIR_TEXT;
;   0512  2	    STATUS = SYS$SETDDIR (0, LENGTH, ORG_DEFAULT_DIR);
;   0513  2	 
;   0514  2	    IF .STATUS THEN ORG_DEFAULT_DIR [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DIR [DSC$W_LENGTH] = 0;
;   0515  2	!
;   0516  2	! Get original default device
;   0517  2	!
;   0518  2	    ORG_DEFAULT_DEV [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0519  2	    ORG_DEFAULT_DEV [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0520  2	    ORG_DEFAULT_DEV [DSC$W_LENGTH] = MAX_FILE_NAME;
;   0521  2	    ORG_DEFAULT_DEV [DSC$A_POINTER] = ORG_DEFAULT_DEV_TEXT;
;   0522  2	    STATUS = LIB$SYS_TRNLOG (%ASCID'SYS$DISK', LENGTH, ORG_DEFAULT_DEV);
;   0523  2	 
;   0524  2	    IF .STATUS EQL SS$_NOTRAN			! No translation?
;   0525  2	    THEN
;   0526  2		LENGTH = 0;				! Yes, set the length to zero
;   0527  2	    IF .STATUS THEN ORG_DEFAULT_DEV [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DEV [DSC$W_LENGTH] = 0;
;   0528  2	 
;   0529  1	    END;					! End of SY_INIT


	.TITLE  KERSYS
	.IDENT  \3.3.113\

	.PSECT  $OWN$,NOEXE,2

;VMS_VERSION
U.1:	.BLKB   4									   ;				      00000
;ORG_DEFAULT_DIR_TEXT
U.2:	.BLKB   132									   ;				      00004
;ORG_DEFAULT_DIR
U.3:	.BLKB   8									   ;				      00088
;ORG_DEFAULT_DEV_TEXT
U.4:	.BLKB   132									   ;				      00090
;ORG_DEFAULT_DEV
U.5:	.BLKB   8									   ;				      00114
;SUBTRAHEND
U.6:	.BLKB   8									   ;				      0011C

	.PSECT  $PLIT$,NOWRT,NOEXE,2

P.AAB:	.ASCII  \SYS$DISK\			 ;				      	      4B  53  49  44  24  53  59  53  00000
P.AAA:	.LONG   17694728			 ;				      	    			    010E0008  00008
	.ADDRESS P.AAB				 ;				      	    			    00000000' 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  LIB$EDIV, LIB$SET_LOGICAL, LIB$SIGNAL, LIB$SPAWN, LIB$SUBX, OTS$CVT_L_TZ, SYS$SETDDIR
	.EXTRN  SYS$GETTIM, TERM_CLOSE, TT_INIT, TT_TEXT, TT_NUMBER, TT_CHAR, TT_OUTPUT, TT_CRLF, GEN_1DATA
	.EXTRN  GEN_1SIZE, GEN_2DATA, GEN_2SIZE, GEN_3DATA, GEN_3SIZE, FILE_SIZE, FILE_NAME, LIB$SYS_TRNLOG
	.EXTRN  SYS$GETSYI, SYS$WAITFR

	.PSECT  $CODE$,NOWRT,2

	.ENTRY  SY_INIT, ^M<R2>			 ;SY_INIT, Save R2		       0424 			       0004   00000
	MOVAB   G^U.1, R2			 ;U.1, R2			      	    	       52 00000000'  00  9E   00002
	SUBL2   #32, SP				 ;#32, SP			      	    	       5E	     20  C2   00009
	MOVL    #268435464, 8(SP)		 ;#268435464, SYI_ITEM_LIST	       0480 	  08   AE 10000008   8F  D0   0000C
	MOVAB   24(SP), 12(SP)			 ;VERSION_STRING, SYI_ITEM_LIST+4      0481 	  0C   AE	18   AE  9E   00014
	MOVAB   (SP), 16(SP)			 ;VERSION_LENGTH, SYI_ITEM_LIST+8      0482 	  10   AE	     6E  9E   00019
	CLRL    20(SP)				 ;SYI_ITEM_LIST+12		       0483 			14   AE  D4   0001D
	CLRQ    -(SP)				 ;-(SP)				       0484 			     7E  7C   00020
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   00022
	PUSHAB  20(SP)				 ;SYI_ITEM_LIST			      	    			14   AE  9F   00024
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   00027
	PUSHL   #10				 ;#10				      	    			     0A  DD   00029
	CALLS   #7, G^SYS$GETSYI		 ;#7, SYS$GETSYI		      	    00000000G  00	     07  FB   0002B
	BLBC    R0, 3$				 ;STATUS, 3$			       0485 	       34	     50  E9   00032
	PUSHL   #10				 ;#10				       0490 			     0A  DD   00035
	CALLS   #1, G^SYS$WAITFR		 ;#1, SYS$WAITFR		      	    00000000G  00	     01  FB   00037
	BLBC    R0, 3$				 ;STATUS, 3$			       0491 	       28	     50  E9   0003E
	CMPB    24(SP), #48			 ;VERSION_STRING, #48		       0494 	       30	18   AE  91   00041
	BLSSU   1$				 ;1$				      	    			     13  1F   00045
	CMPB    24(SP), #57			 ;VERSION_STRING, #57		       0495 	       39	18   AE  91   00047
	BGTRU   1$				 ;1$				      	    			     0D  1A   0004B
	MOVZBL  24(SP), R1			 ;VERSION_STRING, R1		       0497 	       51	18   AE  9A   0004D
	SUBL2   #48, R1				 ;#48, R1			      	    	       51	     30  C2   00051
	MULL3   #10, R1, (R2)			 ;#10, R1, VMS_VERSION		      	    	       51	     0A  C5   00054
						 ;					    			     62       00057
	BRB     2$				 ;2$				      	    			     02  11   00058
1$:	CLRL    (R2)				 ;VMS_VERSION			       0499 			     62  D4   0005A
2$:	MOVZBL  25(SP), R1			 ;VERSION_STRING+1, R1		       0500 	       51	19   AE  9A   0005C
	ADDL2   (R2), R1			 ;VMS_VERSION, R1		      	    	       51	     62  C0   00060
	MOVAB   -48(R1), (R2)			 ;-48(R1), VMS_VERSION		      	    	       62	D0   A1  9E   00063
	BRB     4$				 ;4$				      	    			     02  11   00067
3$:	CLRL    (R2)				 ;VMS_VERSION			       0503 			     62  D4   00069
4$:	MOVL    #17694852, 136(R2)		 ;#17694852, ORG_DEFAULT_DIR	       0510 	0088   C2 010E0084   8F  D0   0006B
	MOVAB   4(R2), 140(R2)			 ;ORG_DEFAULT_DIR_TEXT, -	       0511 	008C   C2	04   A2  9E   00074
						 ;ORG_DEFAULT_DIR+4
	PUSHAB  136(R2)				 ;ORG_DEFAULT_DIR		       0512 		      0088   C2  9F   0007A
	PUSHAB  8(SP)				 ;LENGTH			      	    			08   AE  9F   0007E
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   00081
	CALLS   #3, G^SYS$SETDDIR		 ;#3, SYS$SETDDIR		      	    00000000G  00	     03  FB   00083
	BLBC    R0, 5$				 ;STATUS, 5$			       0514 	       08	     50  E9   0008A
	MOVW    4(SP), 136(R2)			 ;LENGTH, ORG_DEFAULT_DIR	      	    	0088   C2	04   AE  B0   0008D
	BRB     6$				 ;6$				      	    			     04  11   00093
5$:	CLRW    136(R2)				 ;ORG_DEFAULT_DIR		      	    		      0088   C2  B4   00095
6$:	MOVL    #17694852, 276(R2)		 ;#17694852, ORG_DEFAULT_DEV	       0520 	0114   C2 010E0084   8F  D0   00099
	MOVAB   144(R2), 280(R2)		 ;ORG_DEFAULT_DEV_TEXT, -	       0521 	0118   C2     0090   C2  9E   000A2
						 ;ORG_DEFAULT_DEV+4
	PUSHAB  276(R2)				 ;ORG_DEFAULT_DEV		       0522 		      0114   C2  9F   000A9
	PUSHAB  8(SP)				 ;LENGTH			      	    			08   AE  9F   000AD
	PUSHAB  G^P.AAA				 ;P.AAA				      	    		  00000000'  00  9F   000B0
	CALLS   #3, G^LIB$SYS_TRNLOG		 ;#3, LIB$SYS_TRNLOG		      	    00000000G  00	     03  FB   000B6
	CMPL    R0, #1577			 ;STATUS, #1577			       0524 00000629   8F	     50  D1   000BD
	BNEQ    7$				 ;7$				      	    			     03  12   000C4
	CLRL    4(SP)				 ;LENGTH			       0526 			04   AE  D4   000C6
7$:	BLBC    R0, 8$				 ;STATUS, 8$			       0527 	       07	     50  E9   000C9
	MOVW    4(SP), 276(R2)			 ;LENGTH, ORG_DEFAULT_DEV	      	    	0114   C2	04   AE  B0   000CC
	RET     				 ;				      	    				 04   000D2
8$:	CLRW    276(R2)				 ;ORG_DEFAULT_DEV		      	    		      0114   C2  B4   000D3
	RET     				 ;				       0529 				 04   000D7

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


;   0530  1	 
;   0531  1	 %SBTTL 'SY_LOGOUT - delete the process.'
;   0532  1	 
;   0533  1	GLOBAL ROUTINE SY_LOGOUT : NOVALUE =
;   0534  1	 
;   0535  1	!++
;   0536  1	! FUNCTIONAL DESCRIPTION:
;   0537  1	!
;   0538  1	!	This routine will delete this process.
;   0539  1	!
;   0540  1	! CALLING SEQUENCE:
;   0541  1	!
;   0542  1	!	SY_LOGOUT ();
;   0543  1	!
;   0544  1	! INPUT PARAMETERS:
;   0545  1	!
;   0546  1	!	None.
;   0547  1	!
;   0548  1	! IMPLICIT INPUTS:
;   0549  1	!
;   0550  1	!	None.
;   0551  1	!
;   0552  1	! OUTPUT PARAMETERS:
;   0553  1	!
;   0554  1	!	None.
;   0555  1	!
;   0556  1	! IMPLICIT OUTPUTS:
;   0557  1	!
;   0558  1	!	None.
;   0559  1	!
;   0560  1	! COMPLETION CODES:
;   0561  1	!
;   0562  1	!	None.
;   0563  1	!
;   0564  1	! SIDE EFFECTS:
;   0565  1	!
;   0566  1	!	None.
;   0567  1	!
;   0568  1	!--
;   0569  1	 
;   0570  2	    BEGIN
;   0571  2	    TERM_CLOSE();				![108] Close the terminal early
;   0572  2	    $DELPRC ();
;   0573  1	    END;					! End of SY_LOGOUT



	.EXTRN  SYS$DELPRC

	.ENTRY  SY_LOGOUT, ^M<>			 ;SY_LOGOUT, Save nothing	       0533 			       0000   00000
	CALLS   #0, G^TERM_CLOSE		 ;#0, TERM_CLOSE		       0571 00000000G  00	     00  FB   00002
	CLRQ    -(SP)				 ;-(SP)				       0572 			     7E  7C   00009
	CALLS   #2, G^SYS$DELPRC		 ;#2, SYS$DELPRC		      	    00000000G  00	     02  FB   0000B
	RET     				 ;				       0573 				 04   00012

; Routine Size:  19 bytes,    Routine Base:  $CODE$ + 00D8


;   0574  1	 
;   0575  1	 %SBTTL 'SY_GENERIC - Perform a generic command'
;   0576  1	 
;   0577  1	GLOBAL ROUTINE SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN) =
;   0578  1	 
;   0579  1	!++
;   0580  1	! FUNCTIONAL DESCRIPTION:
;   0581  1	!
;   0582  1	! This routine will perform a generic command.
;   0583  1	!
;   0584  1	! CALLING SEQUENCE:
;   0585  1	!
;   0586  1	!	SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN);
;   0587  1	!
;   0588  1	! INPUT PARAMETERS:
;   0589  1	!
;   0590  1	!	GCMD_TYPE - GC_xxx value for command to be performed
;   0591  1	!	STRING_ADDRESS - Place to return address of string result
;   0592  1	!	STRING_LENGTH - Place to return length of string result
;   0593  1	!	GET_CHR_RTN - Place to return address of a get a character routine
;   0594  1	!
;   0595  1	! IMPLICIT INPUTS:
;   0596  1	!
;   0597  1	!	None.
;   0598  1	!
;   0599  1	! OUTPUT PARAMETERS:
;   0600  1	!
;   0601  1	!	Returns KER_xxx status
;   0602  1	!
;   0603  1	! IMPLICIT OUTPUTS:
;   0604  1	!
;   0605  1	!	None.
;   0606  1	!
;   0607  1	! COMPLETION CODES:
;   0608  1	!
;   0609  1	!	None.
;   0610  1	!
;   0611  1	! SIDE EFFECTS:
;   0612  1	!
;   0613  1	!	None.
;   0614  1	!
;   0615  1	!--
;   0616  1	 
;   0617  2	    BEGIN
;   0618  2	 
;   0619  2	    LITERAL
;   0620  2		MAX_CMD_LEN = 2*MAX_MSG,		! Max command length
;   0621  2		MAX_MBX_LEN = 20;			! Max mailbox name length
;   0622  2	 
;   0623  2	    OWN
;   0624  2		RSP_TEXT : VECTOR [MAX_CMD_LEN, BYTE],	! Return text
;   0625  2		RSP_LEN;				! Length of return text
;   0626  2	 
;   0627  2	    LOCAL
;   0628  2		STATUS,					! Status results
;   0629  2		FLAGS,					! Flag word for LIB$SPAWN
;   0630  2		OUR_PID,				! Our PID value
;   0631  2		ITMLST : VECTOR [4, LONG],		! GETJPI argument
;   0632  2		POINTER,				! Character pointer
;   0633  2		MBX_CHAN,				! Channel for mail box
;   0634  2		COMMAND_LENGTH,				! Length of command string
;   0635  2		COMMAND_DESC : BLOCK [8, BYTE],		! Descriptor for command string
;   0636  2		COMMAND_STR : VECTOR [MAX_CMD_LEN, BYTE],	! Actual command string
;   0637  2		MBX_DESC : BLOCK [8, BYTE],		! Mailbox equivalence name
;   0638  2		MBX_NAME : VECTOR [MAX_MBX_LEN, BYTE];	! Storage for MBX name
;   0639  2	 
;   0640  2	    ROUTINE PROCESS_COMPLETION_AST (MBX_CHAN) =
;   0641  2	!
;   0642  2	! This routine is called upon process completion (of the process we spawned
;   0643  2	! to perform the command).  It will ensure that the mailbox gets an end-of-file.
;   0644  2	!
;   0645  3		BEGIN
;   0646  3		RETURN $QIO (CHAN = .MBX_CHAN, FUNC = IO$_WRITEOF);	! Write the EOF
;   0647  2		END;



	.PSECT  $OWN$,NOEXE,2

;RSP_TEXT
U.10:	.BLKB   2004									   ;				      00124
;RSP_LEN
U.11:	.BLKB   4									   ;				      008F8

	.EXTRN  SYS$QIO

	.PSECT  $CODE$,NOWRT,2

;PROCESS_COMPLETION_AST
U.12:	.WORD   ^M<>				 ;Save nothing			       0640 			       0000   00000
	CLRQ    -(SP)				 ;-(SP)				       0646 			     7E  7C   00002
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   00004
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   00006
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   00008
	MOVQ    #40, -(SP)			 ;#40, -(SP)			      	    	       7E	     28  7D   0000A
	PUSHL   4(AP)				 ;MBX_CHAN			      	    			04   AC  DD   0000D
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   00010
	CALLS   #12, G^SYS$QIO			 ;#12, SYS$QIO			      	    00000000G  00	     0C  FB   00012
	RET     				 ;				      	    				 04   00019

; Routine Size:  26 bytes,    Routine Base:  $CODE$ + 00EB


;   0648  2	    ROUTINE CONCAT (SRC_ADR, SRC_LEN, DST_PTR, DST_LEN) : NOVALUE =
;   0649  2	!
;   0650  2	! This routine is called to concatenate a string onto the current string
;   0651  2	!
;   0652  3		BEGIN
;   0653  3	 
;   0654  3		LOCAL
;   0655  3		    LENGTH;				! Length we will actually move
;   0656  3	 
;   0657  3		LENGTH = .SRC_LEN;			! Get total length
;   0658  3	 
;   0659  3		IF .LENGTH GTR MAX_CMD_LEN - ..DST_LEN THEN LENGTH = MAX_CMD_LEN - ..DST_LEN;
;   0660  3	 
;   0661  3		CH$MOVE (.LENGTH, CH$PTR (.SRC_ADR), ..DST_PTR);
;   0662  3		.DST_PTR = CH$PLUS (.LENGTH, ..DST_PTR);
;   0663  3		.DST_LEN = ..DST_LEN + .LENGTH;		! Update length
;   0664  2		END;





;CONCAT
U.13:	.WORD   ^M<R2,R3,R4,R5,R6,R7>		 ;Save R2,R3,R4,R5,R6,R7	       0648 			       00FC   00000
	MOVL    8(AP), R7			 ;SRC_LEN, LENGTH		       0657 	       57	08   AC  D0   00002
	SUBL3   #2004, @16(AP), R1		 ;#2004, @DST_LEN, R1		       0659 	  10   BC 000007D4   8F  C3   00006
						 ;					    			     51       0000E
	MNEGL   R1, R0				 ;R1, R0			      	    	       50	     51  CE   0000F
	CMPL    R7, R0				 ;LENGTH, R0			      	    	       50	     57  D1   00012
	BLEQ    1$				 ;1$				      	    			     03  15   00015
	MNEGL   R1, R7				 ;R1, LENGTH			      	    	       57	     51  CE   00017
1$:	MOVL    12(AP), R6			 ;DST_PTR, R6			       0661 	       56	0C   AC  D0   0001A
	MOVC3   R7, @4(AP), @0(R6)		 ;LENGTH, @SRC_ADR, @0(R6)	      	    	  04   BC	     57  28   0001E
						 ;					    			00   B6       00022
	ADDL2   R7, (R6)			 ;LENGTH, (R6)			       0662 	       66	     57  C0   00024
	ADDL2   R7, @16(AP)			 ;LENGTH, @DST_LEN		       0663 	  10   BC	     57  C0   00027
	RET     				 ;				       0664 				 04   0002B

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


;   0665  2	!
;   0666  2	! Initialize the command descriptor
;   0667  2	!
;   0668  2	    COMMAND_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0669  2	    COMMAND_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0670  2	    COMMAND_LENGTH = 0;				! Nothing here yet
;   0671  2	    COMMAND_DESC [DSC$A_POINTER] = COMMAND_STR;	! Point at string storage
;   0672  2	    POINTER = CH$PTR (COMMAND_STR);
;   0673  2	!
;   0674  2	! Determine what to do with the command
;   0675  2	!
;   0676  2	 
;   0677  2	    CASE .GCMD_TYPE FROM GC_MIN TO GC_MAX OF
;   0678  2		SET
;   0679  2	 
;   0680  2		[GC_COPY] :
;   0681  3		    BEGIN
;   0682  3	 
;   0683  3		    EXTERNAL
;   0684  3			GEN_COPY_CMD : BLOCK [8, BYTE];
;   0685  3	 
;   0686  3		    CONCAT (.GEN_COPY_CMD [DSC$A_POINTER], .GEN_COPY_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
;   0687  3		    CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0688  3		    CONCAT (UPLIT (%ASCII' '), 1, POINTER, COMMAND_LENGTH);
;   0689  3		    CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
;   0690  2		    END;
;   0691  2	 
;   0692  2		[GC_CONNECT] :
;   0693  3		    BEGIN
;   0694  3	 
;   0695  3		    LOCAL
;   0696  3			LENGTH,
;   0697  3			DIR_FAB : $FAB_DECL,		! FAB for $PARSE
;   0698  3			DIR_NAM : $NAM_DECL,		! NAM for $PARSE
;   0699  3			EXP_STR : VECTOR [NAM$C_MAXRSS, BYTE],	! Expanded file spec
;   0700  3			DEV_DESC : BLOCK [8, BYTE],	! Descriptor for device name
;   0701  3			DIR_DESC : BLOCK [8, BYTE];
;   0702  3	 
;   0703  3		    DIR_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0704  3		    DIR_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0705  3		    DEV_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0706  3		    DEV_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0707  3	 
;   0708  3		    IF .GEN_1SIZE GTR 0
;   0709  3		    THEN
;   0710  4			BEGIN
;   0711  4			$FAB_INIT (FAB = DIR_FAB, FOP = NAM, NAM = DIR_NAM, FNA = GEN_1DATA, FNS = .GEN_1SIZE);
;   0712  4			$NAM_INIT (NAM = DIR_NAM, ESA = EXP_STR, ESS = NAM$C_MAXRSS);
;   0713  4			STATUS = $PARSE (FAB = DIR_FAB);
;   0714  4	 
;   0715  4			IF NOT .STATUS
;   0716  4			THEN
;   0717  5			    BEGIN
;   0718  5			    LIB$SIGNAL (.STATUS);
;   0719  5			    RETURN .STATUS;
;   0720  4			    END;
;   0721  4	 
;   0722  4			IF .DIR_NAM [NAM$B_NODE] GTR 0
;   0723  4			THEN
;   0724  5			    BEGIN
;   0725  5			    DEV_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_NODE];
;   0726  5			    DEV_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_NODE] + .DIR_NAM [NAM$B_DEV];
;   0727  5			    END
;   0728  4			ELSE
;   0729  5			    BEGIN
;   0730  5			    DEV_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_DEV];
;   0731  5			    DEV_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_DEV];
;   0732  4			    END;
;   0733  4	 
;   0734  4			DIR_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_DIR];
;   0735  4			DIR_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_DIR];
;   0736  4			END
;   0737  3		    ELSE
;   0738  4			BEGIN
;   0739  4			DIR_DESC [DSC$W_LENGTH] = .ORG_DEFAULT_DIR [DSC$W_LENGTH];
;   0740  4			DIR_DESC [DSC$A_POINTER] = .ORG_DEFAULT_DIR [DSC$A_POINTER];
;   0741  4			DEV_DESC [DSC$W_LENGTH] = .ORG_DEFAULT_DEV [DSC$W_LENGTH];
;   0742  4			DEV_DESC [DSC$A_POINTER] = .ORG_DEFAULT_DEV [DSC$A_POINTER];
;   0743  3			END;
;   0744  3	 
;   0745  3		    STATUS = LIB$SET_LOGICAL (%ASCID'SYS$DISK', DEV_DESC);
;   0746  3	 
;   0747  3		    IF NOT .STATUS
;   0748  3		    THEN
;   0749  4			BEGIN
;   0750  4			LIB$SIGNAL (.STATUS);
;   0751  4			RETURN .STATUS;
;   0752  3			END;
;   0753  3	 
;   0754  3		    STATUS = SYS$SETDDIR (DIR_DESC, 0, 0);
;   0755  3	 
;   0756  3		    IF NOT .STATUS
;   0757  3		    THEN
;   0758  4			BEGIN
;   0759  4			LIB$SIGNAL (.STATUS);
;   0760  4			RETURN .STATUS;
;   0761  3			END;
;   0762  3	 
;   0763  3		    DIR_DESC [DSC$A_POINTER] = GEN_1DATA;
;   0764  3		    DIR_DESC [DSC$W_LENGTH] = MAX_MSG;
;   0765  3		    STATUS = SYS$SETDDIR (0, DIR_DESC [DSC$W_LENGTH], DIR_DESC);
;   0766  3	 
;   0767  3		    IF NOT .STATUS
;   0768  3		    THEN
;   0769  4			BEGIN
;   0770  4			LIB$SIGNAL (.STATUS);
;   0771  4			RETURN .STATUS;
;   0772  3			END;
;   0773  3	 
;   0774  3		    POINTER = CH$PTR (RSP_TEXT);
;   0775  3		    RSP_LEN = 0;
;   0776  3		    CONCAT (UPLIT (%ASCII'Default directory set to '), 25, POINTER, RSP_LEN);
;   0777  3		    CONCAT (.DEV_DESC [DSC$A_POINTER], .DEV_DESC [DSC$W_LENGTH], POINTER, RSP_LEN);
;   0778  3		    CONCAT (.DIR_DESC [DSC$A_POINTER], .DIR_DESC [DSC$W_LENGTH], POINTER, RSP_LEN);
;   0779  3		    .STRING_ADDRESS = RSP_TEXT;
;   0780  3		    .STRING_LENGTH = .RSP_LEN;
;   0781  3		    RETURN KER_NORMAL;
;   0782  2		    END;
;   0783  2	 
;   0784  2		[GC_DELETE] :
;   0785  3		    BEGIN
;   0786  3	 
;   0787  3		    EXTERNAL
;   0788  3			GEN_DELETE_CMD : BLOCK [8, BYTE];
;   0789  3	 
;   0790  3		    CONCAT (.GEN_DELETE_CMD [DSC$A_POINTER], .GEN_DELETE_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
;   0791  3		    CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0792  2		    END;
;   0793  2	 
;   0794  2		[GC_DIRECTORY] :
;   0795  3		    BEGIN
;   0796  3	 
;   0797  3		    EXTERNAL
;   0798  3			GEN_DIR_CMD : BLOCK [8, BYTE];
;   0799  3	 
;   0800  3		    CONCAT (.GEN_DIR_CMD [DSC$A_POINTER], .GEN_DIR_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
;   0801  3		    CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0802  2		    END;
;   0803  2	 
;   0804  2		[GC_DISK_USAGE] :
;   0805  3		    BEGIN
;   0806  3	 
;   0807  3		    EXTERNAL
;   0808  3			GEN_USG_CMD : BLOCK [8, BYTE],	! Command without arg
;   0809  3			GEN_USG_ARG_CMD : BLOCK [8, BYTE];	! Command with arg
;   0810  3	 
;   0811  3		    IF .GEN_1SIZE LEQ 0
;   0812  3		    THEN
;   0813  4			BEGIN
;   0814  4			CONCAT (.GEN_USG_CMD [DSC$A_POINTER], .GEN_USG_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
;   0815  4			END
;   0816  3		    ELSE
;   0817  4			BEGIN
;   0818  4			CONCAT (.GEN_USG_ARG_CMD [DSC$A_POINTER], .GEN_USG_ARG_CMD [DSC$W_LENGTH], POINTER,
;   0819  4			    COMMAND_LENGTH);
;   0820  4			CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0821  3			END;
;   0822  3	 
;   0823  2		    END;
;   0824  2	 
;   0825  2		[GC_HELP] :
;   0826  3		    BEGIN
;   0827  3	 
;   0828  3		    EXTERNAL
;   0829  3			GEN_HELP_TEXT : BLOCK [8, BYTE];
;   0830  3	 
;   0831  3		    .STRING_ADDRESS = .GEN_HELP_TEXT [DSC$A_POINTER];
;   0832  3		    .STRING_LENGTH = .GEN_HELP_TEXT [DSC$W_LENGTH];
;   0833  3		    RETURN KER_NORMAL;
;   0834  2		    END;
;   0835  2	 
;   0836  2		[GC_RENAME] :
;   0837  3		    BEGIN
;   0838  3	 
;   0839  3		    EXTERNAL
;   0840  3			GEN_REN_CMD : BLOCK [8, BYTE];
;   0841  3	 
;   0842  3		    CONCAT (.GEN_REN_CMD [DSC$A_POINTER], .GEN_REN_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
;   0843  3		    CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0844  3		    CONCAT (UPLIT (%ASCII' '), 1, POINTER, COMMAND_LENGTH);
;   0845  3		    CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
;   0846  2		    END;
;   0847  2	 
;   0848  2		[GC_SEND_MSG] :
;   0849  3		    BEGIN
;   0850  3	 
;   0851  3		    EXTERNAL
;   0852  3			GEN_SEND_CMD : BLOCK [8, BYTE];
;   0853  3	 
;   0854  3		    CONCAT (.GEN_SEND_CMD [DSC$A_POINTER], .GEN_SEND_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
;   0855  3		    CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0856  3		    CONCAT (UPLIT (%ASCII' "'), 2, POINTER, COMMAND_LENGTH);
;   0857  3		    CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
;   0858  3		    CONCAT (UPLIT (%ASCII'"'), 1, POINTER, COMMAND_LENGTH);
;   0859  2		    END;
;   0860  2	 
;   0861  2		[GC_TYPE] :
;   0862  2	!
;   0863  2	! While KERMSG handles this for server requests, COMND_LOCAL in KERMIT does
;   0864  2	! not.  Therefore, set up the request to open the correct file.
;   0865  2	!
;   0866  3		    BEGIN
;   0867  3		    CH$COPY (.GEN_1SIZE, GEN_1DATA, CHR_NUL, MAX_FILE_NAME, FILE_NAME);
;   0868  3		    FILE_SIZE = .GEN_1SIZE;
;   0869  3		    RETURN KER_NORMAL;
;   0870  2		    END;
;   0871  2	 
;   0872  2		[GC_WHO] :
;   0873  3		    BEGIN
;   0874  3	 
;   0875  3		    EXTERNAL
;   0876  3			GEN_WHO_CMD : BLOCK [8, BYTE];
;   0877  3	 
;   0878  3		    CONCAT (.GEN_WHO_CMD [DSC$A_POINTER], .GEN_WHO_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
;   0879  3		    CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0880  3		    CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
;   0881  2		    END;
;   0882  2	 
;   0883  2		[GC_COMMAND] :
;   0884  2	! Host command.  Just pass it to the process
;   0885  2		    CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
;   0886  2	 
;   0887  2		[INRANGE, OUTRANGE] :
;   0888  3		    BEGIN
;   0889  3		    LIB$SIGNAL (KER_UNIMPLGEN);
;   0890  3		    RETURN KER_UNIMPLGEN;		! We don't do any
;   0891  2		    END;
;   0892  2		TES;
;   0893  2	 
;   0894  2	!
;   0895  2	! If we fall out of the case statement, we need to create a mailbox and
;   0896  2	! spawn a process to perform the command with its output going to the
;   0897  2	! mailbox
;   0898  2	!
;   0899  2	    COMMAND_DESC [DSC$W_LENGTH] = .COMMAND_LENGTH;	! Copy command length
;   0900  2	    ITMLST [0] = JPI$_PID^16 + 4;		! Get PID
;   0901  2	    ITMLST [1] = OUR_PID;			! Into OUR_PID
;   0902  2	    ITMLST [2] = ITMLST [2];			! Get length here
;   0903  2	    ITMLST [3] = 0;				! End of list
;   0904  2	    $GETJPI (ITMLST = ITMLST);			! Get info for us
;   0905  2	    CH$COPY (11, CH$PTR (UPLIT (%ASCII'KERMIT$MBX_')), CHR_NUL, ! Build name
;   0906  2		MAX_MBX_LEN, CH$PTR (MBX_NAME));	! for mailbox
;   0907  2	    MBX_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0908  2	    MBX_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0909  2	    MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN - 12;	! MBX name length
;   0910  2	    MBX_DESC [DSC$A_POINTER] = MBX_NAME + 11;	! Where to build rest of name
;   0911  2	    OTS$CVT_L_TZ (OUR_PID, MBX_DESC, MAX_MBX_LEN - 12);	! Generate rest of name
;   0912  2	    MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN - 1;	! Set total length for create
;   0913  2	    MBX_DESC [DSC$A_POINTER] = MBX_NAME;	! Point at start of name
;   0914  2	    STATUS = $CREMBX (CHAN = MBX_CHAN, LOGNAM = MBX_DESC);
;   0915  2	 
;   0916  2	    IF NOT .STATUS
;   0917  2	    THEN
;   0918  3		BEGIN
;   0919  3		LIB$SIGNAL (.STATUS);
;   0920  3		RETURN .STATUS;
;   0921  2		END;
;   0922  2	 
;   0923  2	    MBX_NAME [MAX_MBX_LEN - 1] = %C':';		! Terminate with colon
;   0924  2	    MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN;	! Set total length including colon
;   0925  2	    CH$COPY (MAX_MBX_LEN - 1, CH$PTR (MBX_NAME), CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
;   0926  2	    FILE_SIZE = MAX_MBX_LEN - 1;		! Set up FILE_NAME
;   0927  2	    FLAGS = 1;					! Don't wait for process
;   0928  2	    STATUS = LIB$SPAWN (			! Spawn a DCL subprocess
;   0929  2		COMMAND_DESC,				!  to do this command
;   0930  3		(IF .VMS_VERSION LEQ 3			! If old VMS
;   0931  3		 THEN
;   0932  3		     0					! Then no SYS$INPUT arg
;   0933  3		 ELSE
;   0934  2		     %ASCID'NLA0:'),			!  no SYS$INPUT
;   0935  2		MBX_DESC,				!  set SYS$OUTPUT to mailbox
;   0936  2		FLAGS,					!  don't wait for process to complete
;   0937  2		0,					!  Process name
;   0938  2		0,					!  process id
;   0939  2		0,					!  completion status
;   0940  2		0,					!  ?
;   0941  3		(IF .VMS_VERSION LEQ 3			! If VMS 3 or earlier
;   0942  3		 THEN
;   0943  3		    PROCESS_COMPLETION_AST		!  We need to force eof
;   0944  3		 ELSE					!  when process finishes
;   0945  2		    0),					!  4.0 and on we get one free
;   0946  2		.MBX_CHAN);				!  feed ast routine this value
;   0947  2	 
;   0948  2	    IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
;   0949  2	 
;   0950  2	    RETURN .STATUS;
;   0951  1	    END;					! End of SY_GENERIC



	.PSECT  $PLIT$,NOWRT,NOEXE,2

P.AAC:	.ASCII  \ \<0><0><0>			 ;				      	    		      00  00  00  20  00010
P.AAE:	.ASCII  \SYS$DISK\			 ;				      	      4B  53  49  44  24  53  59  53  00014
P.AAD:	.LONG   17694728			 ;				      	    			    010E0008  0001C
	.ADDRESS P.AAE				 ;				      	    			    00000000' 00020
P.AAF:	.ASCII  \Default directory set to \<0><0><0>
						 ;				      	      20  74  6C  75  61  66  65  44  00024
						 ;					      72  6F  74  63  65  72  69  64  0002C
						 ;					      6F  74  20  74  65  73  20  79  00034
						 ;					    		      00  00  00  20  0003C
P.AAG:	.ASCII  \ \<0><0><0>			 ;				      	    		      00  00  00  20  00040
P.AAH:	.ASCII  \ "\<0><0>			 ;				      	    		      00  00  22  20  00044
P.AAI:	.ASCII  \"\<0><0><0>			 ;				      	    		      00  00  00  22  00048
P.AAJ:	.ASCII  \KERMIT$MBX_\<0>		 ;				      	      4D  24  54  49  4D  52  45  4B  0004C
						 ;					    		      00  5F  58  42  00054
P.AAL:	.ASCII  \NLA0:\<0><0><0>		 ;				      	      00  00  00  3A  30  41  4C  4E  00058
P.AAK:	.LONG   17694725			 ;				      	    			    010E0005  00060
	.ADDRESS P.AAL				 ;				      	    			    00000000' 00064

	.EXTRN  GEN_COPY_CMD, SYS$PARSE, GEN_DELETE_CMD, GEN_DIR_CMD, GEN_USG_CMD, GEN_USG_ARG_CMD
	.EXTRN  GEN_HELP_TEXT, GEN_REN_CMD, GEN_SEND_CMD, GEN_WHO_CMD, SYS$GETJPI, SYS$CREMBX

	.PSECT  $CODE$,NOWRT,2

	.ENTRY  SY_GENERIC, ^M<R2,R3,R4,R5,R6,-  ;SY_GENERIC, Save R2,R3,R4,R5,R6,R7,- 0577 			       0FFC   00000
		R7,R8,R9,R10,R11>		 ;R8,R9,R10,R11
	MOVAB   G^P.AAC, R11			 ;P.AAC, R11			      	    	       5B 00000000'  00  9E   00002
	MOVAB   G^GEN_1DATA, R10		 ;GEN_1DATA, R10		      	    	       5A 00000000G  00  9E   00009
	MOVAB   G^GEN_1SIZE, R9			 ;GEN_1SIZE, R9			      	    	       59 00000000G  00  9E   00010
	MOVAB   G^U.11, R8			 ;U.11, R8			      	    	       58 00000000'  00  9E   00017
	MOVAB   B^U.13, R7			 ;U.13, R7			      	    	       57	B3   AF  9E   0001E
	MOVAB   -2520(SP), SP			 ;-2520(SP), SP			      	    	       5E     F628   CE  9E   00022
	MOVW    #270, -22(FP)			 ;#270, COMMAND_DESC+2		       0669 	  EA   AD     010E   8F  B0   00027
	CLRL    -(SP)				 ;COMMAND_LENGTH		       0670 			     7E  D4   0002D
	MOVAB   496(SP), -20(FP)		 ;COMMAND_STR, COMMAND_DESC+4	       0671 	  EC   AD     01F0   CE  9E   0002F
	MOVAB   496(SP), 4(SP)			 ;COMMAND_STR, POINTER		       0672 	  04   AE     01F0   CE  9E   00035
	CASEL   4(AP), #1, #18			 ;GCMD_TYPE, #1, #18		       0677 	       01	04   AC  CF   0003B
						 ;					    			     12       0003F
1$:	.WORD   2$-1$,-				 ;2$-1$,-			      	    	     01C3	   0026       00040
		14$-1$,-			 ;14$-1$,-				    	     01AF	   01D7       00044
		15$-1$,-			 ;15$-1$,-				    	     0208	   0297       00048
		13$-1$,-			 ;13$-1$,-				    	     0026	   0026       0004C
		22$-1$,-			 ;22$-1$,-				    	     021B	   0068       00050
		18$-1$,-			 ;18$-1$,-				    	     02B5	   003B       00054
		2$-1$,-				 ;2$-1$,-				    	     0026	   0249       00058
		2$-1$,-				 ;2$-1$,-				    	     0026	   02E9       0005C
		4$-1$,-				 ;4$-1$,-				    	     0026	   0026       00060
		20$-1$,-			 ;20$-1$,-				    			   0026       00064
		3$-1$,-				 ;3$-1$,-
		24$-1$,-			 ;24$-1$,-
		21$-1$,-			 ;21$-1$,-
		2$-1$,-				 ;2$-1$,-
		26$-1$,-			 ;26$-1$,-
		2$-1$,-				 ;2$-1$,-
		2$-1$,-				 ;2$-1$,-
		2$-1$,-				 ;2$-1$,-
		2$-1$				 ;2$-1$
2$:	PUSHL   #134316210			 ;#134316210			       0889 		  080180B2   8F  DD   00066
	CALLS   #1, G^LIB$SIGNAL		 ;#1, LIB$SIGNAL		      	    00000000G  00	     01  FB   0006C
	MOVL    #134316210, R0			 ;#134316210, R0		       0890 	       50 080180B2   8F  D0   00073
	RET     				 ;				      	    				 04   0007A
3$:	PUSHL   SP				 ;SP				       0686 			     5E  DD   0007B
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0007D
	MOVZWL  G^GEN_COPY_CMD, -(SP)		 ;GEN_COPY_CMD, -(SP)		      	    	       7E 00000000G  00  3C   00080
	PUSHL   G^GEN_COPY_CMD+4		 ;GEN_COPY_CMD+4		      	    		  00000000G  00  DD   00087
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   0008D
	PUSHL   SP				 ;SP				       0687 			     5E  DD   00090
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   00092
	PUSHL   (R9)				 ;GEN_1SIZE			      	    			     69  DD   00095
	PUSHL   R10				 ;R10				      	    			     5A  DD   00097
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   00099
	PUSHL   SP				 ;SP				       0688 			     5E  DD   0009C
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0009E
	PUSHL   #1				 ;#1				      	    			     01  DD   000A1
	PUSHL   R11				 ;R11				      	    			     5B  DD   000A3
	BRW     25$				 ;25$				      	    			   026B  31   000A5
4$:	MOVW    #270, 22(SP)			 ;#270, DIR_DESC+2		       0704 	  16   AE     010E   8F  B0   000A8
	MOVW    #270, 30(SP)			 ;#270, DEV_DESC+2		       0706 	  1E   AE     010E   8F  B0   000AE
	MOVL    (R9), R6			 ;GEN_1SIZE, R6			       0708 	       56	     69  D0   000B4
	BGTR    5$				 ;5$				      	    			     03  14   000B7
	BRW     8$				 ;8$				      	    			   0095  31   000B9
5$:	MOVC5   #0, (SP), #0, #80, 388(SP)	 ;#0, (SP), #0, #80, $RMS_PTR	       0711 	       6E	     00  2C   000BC
						 ;					    	0050   8F	     00       000BF
						 ;					    		      0184   CE       000C3
	MOVW    #20483, 388(SP)			 ;#20483, $RMS_PTR		      	    	0184   CE     5003   8F  B0   000C6
	MOVL    #16777216, 392(SP)		 ;#16777216, $RMS_PTR+4		      	    	0188   CE 01000000   8F  D0   000CD
	MOVB    #2, 410(SP)			 ;#2, $RMS_PTR+22		      	    	019A   CE	     02  90   000D6
	MOVB    #2, 419(SP)			 ;#2, $RMS_PTR+31		      	    	01A3   CE	     02  90   000DB
	MOVAB   292(SP), 428(SP)		 ;DIR_NAM, $RMS_PTR+40		      	    	01AC   CE     0124   CE  9E   000E0
	MOVAB   (R10), 432(SP)			 ;GEN_1DATA, $RMS_PTR+44	      	    	01B0   CE	     6A  9E   000E7
	MOVB    R6, 440(SP)			 ;R6, $RMS_PTR+52		      	    	01B8   CE	     56  90   000EC
	MOVC5   #0, (SP), #0, #96, 292(SP)	 ;#0, (SP), #0, #96, $RMS_PTR	       0712 	       6E	     00  2C   000F1
						 ;					    	0060   8F	     00       000F4
						 ;					    		      0124   CE       000F8
	MOVW    #24578, 292(SP)			 ;#24578, $RMS_PTR		      	    	0124   CE     6002   8F  B0   000FB
	MNEGB   #1, 302(SP)			 ;#1, $RMS_PTR+10		      	    	012E   CE	     01  8E   00102
	MOVAB   36(SP), 304(SP)			 ;EXP_STR, $RMS_PTR+12		      	    	0130   CE	24   AE  9E   00107
	PUSHAB  388(SP)				 ;DIR_FAB			       0713 		      0184   CE  9F   0010D
	CALLS   #1, G^SYS$PARSE			 ;#1, SYS$PARSE			      	    00000000G  00	     01  FB   00111
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   00118
	BLBC    R6, 10$				 ;STATUS, 10$			       0715 	       6D	     56  E9   0011B
	MOVZBL  348(SP), R0			 ;DIR_NAM+56, R0		       0722 	       50     015C   CE  9A   0011E
	BLEQ    6$				 ;6$				      	    			     12  15   00123
	MOVL    356(SP), 32(SP)			 ;DIR_NAM+64, DEV_DESC+4	       0725 	  20   AE     0164   CE  D0   00125
	MOVZBL  349(SP), R1			 ;DIR_NAM+57, R1		       0726 	       51     015D   CE  9A   0012B
	ADDW3   R1, R0, 28(SP)			 ;R1, R0, DEV_DESC		      	    	       50	     51  A1   00130
						 ;					    			1C   AE       00133
	BRB     7$				 ;7$				      	    			     0C  11   00135
6$:	MOVZBW  349(SP), 28(SP)			 ;DIR_NAM+57, DEV_DESC		       0730 	  1C   AE     015D   CE  9B   00137
	MOVL    360(SP), 32(SP)			 ;DIR_NAM+68, DEV_DESC+4	       0731 	  20   AE     0168   CE  D0   0013D
7$:	MOVZBW  350(SP), 20(SP)			 ;DIR_NAM+58, DIR_DESC		       0734 	  14   AE     015E   CE  9B   00143
	MOVL    364(SP), 24(SP)			 ;DIR_NAM+72, DIR_DESC+4	       0735 	  18   AE     016C   CE  D0   00149
	BRB     9$				 ;9$				      	    			     18  11   0014F
8$:	MOVW    -2160(R8), 20(SP)		 ;ORG_DEFAULT_DIR, DIR_DESC	       0739 	  14   AE     F790   C8  B0   00151
	MOVL    -2156(R8), 24(SP)		 ;ORG_DEFAULT_DIR+4, DIR_DESC+4        0740 	  18   AE     F794   C8  D0   00157
	MOVW    -2020(R8), 28(SP)		 ;ORG_DEFAULT_DEV, DEV_DESC	       0741 	  1C   AE     F81C   C8  B0   0015D
	MOVL    -2016(R8), 32(SP)		 ;ORG_DEFAULT_DEV+4, DEV_DESC+4        0742 	  20   AE     F820   C8  D0   00163
9$:	PUSHAB  28(SP)				 ;DEV_DESC			       0745 			1C   AE  9F   00169
	PUSHAB  12(R11)				 ;P.AAD				      	    			0C   AB  9F   0016C
	CALLS   #2, G^LIB$SET_LOGICAL		 ;#2, LIB$SET_LOGICAL		      	    00000000G  00	     02  FB   0016F
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   00176
	BLBC    R6, 11$				 ;STATUS, 11$			       0747 	       2E	     56  E9   00179
	CLRQ    -(SP)				 ;-(SP)				       0754 			     7E  7C   0017C
	PUSHAB  28(SP)				 ;DIR_DESC			      	    			1C   AE  9F   0017E
	CALLS   #3, G^SYS$SETDDIR		 ;#3, SYS$SETDDIR		      	    00000000G  00	     03  FB   00181
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   00188
10$:	BLBC    R6, 11$				 ;STATUS, 11$			       0756 	       1C	     56  E9   0018B
	MOVAB   (R10), 24(SP)			 ;GEN_1DATA, DIR_DESC+4		       0763 	  18   AE	     6A  9E   0018E
	MOVW    #1002, 20(SP)			 ;#1002, DIR_DESC		       0764 	  14   AE     03EA   8F  B0   00192
	PUSHAB  20(SP)				 ;DIR_DESC			       0765 			14   AE  9F   00198
	PUSHAB  24(SP)				 ;DIR_DESC			      	    			18   AE  9F   0019B
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   0019E
	CALLS   #3, G^SYS$SETDDIR		 ;#3, SYS$SETDDIR		      	    00000000G  00	     03  FB   001A0
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   001A7
11$:	BLBS    R6, 12$				 ;STATUS, 12$			       0767 	       03	     56  E8   001AA
	BRW     32$				 ;32$				      	    			   0262  31   001AD
12$:	MOVAB   -2004(R8), 4(SP)		 ;RSP_TEXT, POINTER		       0774 	  04   AE     F82C   C8  9E   001B0
	CLRL    (R8)				 ;RSP_LEN			       0775 			     68  D4   001B6
	PUSHL   R8				 ;R8				       0776 			     58  DD   001B8
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   001BA
	PUSHL   #25				 ;#25				      	    			     19  DD   001BD
	PUSHAB  20(R11)				 ;P.AAF				      	    			14   AB  9F   001BF
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   001C2
	PUSHL   R8				 ;R8				       0777 			     58  DD   001C5
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   001C7
	MOVZWL  36(SP), -(SP)			 ;DEV_DESC, -(SP)		      	    	       7E	24   AE  3C   001CA
	PUSHL   44(SP)				 ;DEV_DESC+4			      	    			2C   AE  DD   001CE
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   001D1
	PUSHL   R8				 ;R8				       0778 			     58  DD   001D4
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   001D6
	MOVZWL  28(SP), -(SP)			 ;DIR_DESC, -(SP)		      	    	       7E	1C   AE  3C   001D9
	PUSHL   36(SP)				 ;DIR_DESC+4			      	    			24   AE  DD   001DD
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   001E0
	MOVAB   -2004(R8), @8(AP)		 ;RSP_TEXT, @STRING_ADDRESS	       0779 	  08   BC     F82C   C8  9E   001E3
	MOVL    (R8), @12(AP)			 ;RSP_LEN, @STRING_LENGTH	       0780 	  0C   BC	     68  D0   001E9
	BRB     19$				 ;19$				       0781 			     69  11   001ED
13$:	PUSHL   SP				 ;SP				       0790 			     5E  DD   001EF
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   001F1
	MOVZWL  G^GEN_DELETE_CMD, -(SP)		 ;GEN_DELETE_CMD, -(SP)		      	    	       7E 00000000G  00  3C   001F4
	PUSHL   G^GEN_DELETE_CMD+4		 ;GEN_DELETE_CMD+4		      	    		  00000000G  00  DD   001FB
	BRB     17$				 ;17$				      	    			     3F  11   00201
14$:	PUSHL   SP				 ;SP				       0800 			     5E  DD   00203
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   00205
	MOVZWL  G^GEN_DIR_CMD, -(SP)		 ;GEN_DIR_CMD, -(SP)		      	    	       7E 00000000G  00  3C   00208
	PUSHL   G^GEN_DIR_CMD+4			 ;GEN_DIR_CMD+4			      	    		  00000000G  00  DD   0020F
	BRB     17$				 ;17$				      	    			     2B  11   00215
15$:	TSTL    (R9)				 ;GEN_1SIZE			       0811 			     69  D5   00217
	BGTR    16$				 ;16$				      	    			     15  14   00219
	PUSHL   SP				 ;SP				       0814 			     5E  DD   0021B
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0021D
	MOVZWL  G^GEN_USG_CMD, -(SP)		 ;GEN_USG_CMD, -(SP)		      	    	       7E 00000000G  00  3C   00220
	PUSHL   G^GEN_USG_CMD+4			 ;GEN_USG_CMD+4			      	    		  00000000G  00  DD   00227
	BRW     27$				 ;27$				      	    			   0102  31   0022D
16$:	PUSHL   SP				 ;SP				       0819 			     5E  DD   00230
	PUSHAB  8(SP)				 ;POINTER			       0818 			08   AE  9F   00232
	MOVZWL  G^GEN_USG_ARG_CMD, -(SP)	 ;GEN_USG_ARG_CMD, -(SP)	      	    	       7E 00000000G  00  3C   00235
	PUSHL   G^GEN_USG_ARG_CMD+4		 ;GEN_USG_ARG_CMD+4		      	    		  00000000G  00  DD   0023C
17$:	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   00242
	BRW     26$				 ;26$				       0820 			   00E1  31   00245
18$:	MOVL    G^GEN_HELP_TEXT+4, @8(AP)	 ;GEN_HELP_TEXT+4, @STRING_ADDRESS     0831 	  08   BC 00000000G  00  D0   00248
	MOVZWL  G^GEN_HELP_TEXT, @12(AP)	 ;GEN_HELP_TEXT, @STRING_LENGTH        0832 	  0C   BC 00000000G  00  3C   00250
19$:	BRW     23$				 ;23$				       0833 			   0092  31   00258
20$:	PUSHL   SP				 ;SP				       0842 			     5E  DD   0025B
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0025D
	MOVZWL  G^GEN_REN_CMD, -(SP)		 ;GEN_REN_CMD, -(SP)		      	    	       7E 00000000G  00  3C   00260
	PUSHL   G^GEN_REN_CMD+4			 ;GEN_REN_CMD+4			      	    		  00000000G  00  DD   00267
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   0026D
	PUSHL   SP				 ;SP				       0843 			     5E  DD   00270
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   00272
	PUSHL   (R9)				 ;GEN_1SIZE			      	    			     69  DD   00275
	PUSHL   R10				 ;R10				      	    			     5A  DD   00277
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   00279
	PUSHL   SP				 ;SP				       0844 			     5E  DD   0027C
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0027E
	PUSHL   #1				 ;#1				      	    			     01  DD   00281
	PUSHAB  48(R11)				 ;P.AAG				      	    			30   AB  9F   00283
	BRW     25$				 ;25$				      	    			   008A  31   00286
21$:	PUSHL   SP				 ;SP				       0854 			     5E  DD   00289
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0028B
	MOVZWL  G^GEN_SEND_CMD, -(SP)		 ;GEN_SEND_CMD, -(SP)		      	    	       7E 00000000G  00  3C   0028E
	PUSHL   G^GEN_SEND_CMD+4		 ;GEN_SEND_CMD+4		      	    		  00000000G  00  DD   00295
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   0029B
	PUSHL   SP				 ;SP				       0855 			     5E  DD   0029E
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   002A0
	PUSHL   (R9)				 ;GEN_1SIZE			      	    			     69  DD   002A3
	PUSHL   R10				 ;R10				      	    			     5A  DD   002A5
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   002A7
	PUSHL   SP				 ;SP				       0856 			     5E  DD   002AA
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   002AC
	PUSHL   #2				 ;#2				      	    			     02  DD   002AF
	PUSHAB  52(R11)				 ;P.AAH				      	    			34   AB  9F   002B1
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   002B4
	PUSHL   SP				 ;SP				       0857 			     5E  DD   002B7
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   002B9
	PUSHL   G^GEN_2SIZE			 ;GEN_2SIZE			      	    		  00000000G  00  DD   002BC
	PUSHAB  G^GEN_2DATA			 ;GEN_2DATA			      	    		  00000000G  00  9F   002C2
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   002C8
	PUSHL   SP				 ;SP				       0858 			     5E  DD   002CB
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   002CD
	PUSHL   #1				 ;#1				      	    			     01  DD   002D0
	PUSHAB  56(R11)				 ;P.AAI				      	    			38   AB  9F   002D2
	BRB     27$				 ;27$				      	    			     5B  11   002D5
22$:	MOVL    (R9), R6			 ;GEN_1SIZE, R6			       0867 	       56	     69  D0   002D7
	MOVC5   R6, (R10), #0, #132, G^FILE_NAME ;R6, GEN_1DATA, #0, #132, FILE_NAME  	    	       6A	     56  2C   002DA
						 ;					    	0084   8F	     00       002DD
						 ;					    		  00000000G  00       002E1
	MOVL    R6, G^FILE_SIZE			 ;R6, FILE_SIZE			       0868 00000000G  00	     56  D0   002E6
23$:	MOVL    #134316043, R0			 ;#134316043, R0		       0869 	       50 0801800B   8F  D0   002ED
	RET     				 ;				      	    				 04   002F4
24$:	PUSHL   SP				 ;SP				       0878 			     5E  DD   002F5
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   002F7
	MOVZWL  G^GEN_WHO_CMD, -(SP)		 ;GEN_WHO_CMD, -(SP)		      	    	       7E 00000000G  00  3C   002FA
	PUSHL   G^GEN_WHO_CMD+4			 ;GEN_WHO_CMD+4			      	    		  00000000G  00  DD   00301
	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   00307
	PUSHL   SP				 ;SP				       0879 			     5E  DD   0030A
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0030C
	PUSHL   (R9)				 ;GEN_1SIZE			      	    			     69  DD   0030F
	PUSHL   R10				 ;R10				      	    			     5A  DD   00311
25$:	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   00313
	PUSHL   SP				 ;SP				       0880 			     5E  DD   00316
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   00318
	PUSHL   G^GEN_2SIZE			 ;GEN_2SIZE			      	    		  00000000G  00  DD   0031B
	PUSHAB  G^GEN_2DATA			 ;GEN_2DATA			      	    		  00000000G  00  9F   00321
	BRB     27$				 ;27$				      	    			     09  11   00327
26$:	PUSHL   SP				 ;SP				       0885 			     5E  DD   00329
	PUSHAB  8(SP)				 ;POINTER			      	    			08   AE  9F   0032B
	PUSHL   (R9)				 ;GEN_1SIZE			      	    			     69  DD   0032E
	PUSHL   R10				 ;R10				      	    			     5A  DD   00330
27$:	CALLS   #4, (R7)			 ;#4, CONCAT			      	    	       67	     04  FB   00332
	MOVW    (SP), -24(FP)			 ;COMMAND_LENGTH, COMMAND_DESC	       0899 	  E8   AD	     6E  B0   00335
	MOVL    #51970052, -16(FP)		 ;#51970052, ITMLST		       0900 	  F0   AD 03190004   8F  D0   00339
	MOVAB   8(SP), -12(FP)			 ;OUR_PID, ITMLST+4		       0901 	  F4   AD	08   AE  9E   00341
	MOVAB   -8(FP), -8(FP)			 ;ITMLST+8, ITMLST+8		       0902 	  F8   AD	F8   AD  9E   00346
	CLRL    -4(FP)				 ;ITMLST+12			       0903 			FC   AD  D4   0034B
	CLRQ    -(SP)				 ;-(SP)				       0904 			     7E  7C   0034E
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   00350
	PUSHAB  -16(FP)				 ;ITMLST			      	    			F0   AD  9F   00352
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   00355
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   00357
	CALLS   #7, G^SYS$GETJPI		 ;#7, SYS$GETJPI		      	    00000000G  00	     07  FB   00359
	MOVC5   #11, 60(R11), #0, #20, 468(SP)	 ;#11, P.AAJ, #0, #20, MBX_NAME        0906 	  3C   AB	     0B  2C   00360
						 ;					    	       14	     00       00364
						 ;					    		      01D4   CE       00366
	MOVL    #17694728, 488(SP)		 ;#17694728, MBX_DESC		       0909 	01E8   CE 010E0008   8F  D0   00369
	MOVAB   479(SP), 492(SP)		 ;MBX_NAME+11, MBX_DESC+4	       0910 	01EC   CE     01DF   CE  9E   00372
	PUSHL   #8				 ;#8				       0911 			     08  DD   00379
	PUSHAB  492(SP)				 ;MBX_DESC			      	    		      01EC   CE  9F   0037B
	PUSHAB  16(SP)				 ;OUR_PID			      	    			10   AE  9F   0037F
	CALLS   #3, G^OTS$CVT_L_TZ		 ;#3, OTS$CVT_L_TZ		      	    00000000G  00	     03  FB   00382
	MOVW    #19, 488(SP)			 ;#19, MBX_DESC			       0912 	01E8   CE	     13  B0   00389
	MOVAB   468(SP), 492(SP)		 ;MBX_NAME, MBX_DESC+4		       0913 	01EC   CE     01D4   CE  9E   0038E
	PUSHAB  488(SP)				 ;MBX_DESC			       0914 		      01E8   CE  9F   00395
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   00399
	CLRQ    -(SP)				 ;-(SP)				      	    			     7E  7C   0039B
	PUSHAB  32(SP)				 ;MBX_CHAN			      	    			20   AE  9F   0039D
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   003A0
	CALLS   #7, G^SYS$CREMBX		 ;#7, SYS$CREMBX		      	    00000000G  00	     07  FB   003A2
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   003A9
	BLBC    R6, 32$				 ;STATUS, 32$			       0916 	       63	     56  E9   003AC
	MOVB    #58, 487(SP)			 ;#58, MBX_NAME+19		       0923 	01E7   CE	     3A  90   003AF
	MOVW    #20, 488(SP)			 ;#20, MBX_DESC			       0924 	01E8   CE	     14  B0   003B4
	MOVC5   #19, 468(SP), #0, #132, -	 ;#19, MBX_NAME, #0, #132, FILE_NAME   0925 	01D4   CE	     13  2C   003B9
		G^FILE_NAME			 ;					    	0084   8F	     00       003BE
						 ;					    		  00000000G  00       003C2
	MOVL    #19, G^FILE_SIZE		 ;#19, FILE_SIZE		       0926 00000000G  00	     13  D0   003C7
	MOVL    #1, 16(SP)			 ;#1, FLAGS			       0927 	  10   AE	     01  D0   003CE
	PUSHL   12(SP)				 ;MBX_CHAN			       0946 			0C   AE  DD   003D2
	CLRL    R1				 ;R1				       0941 			     51  D4   003D5
	CMPL    -2296(R8), #3			 ;VMS_VERSION, #3		      	    	       03     F708   C8  D1   003D7
	BGTR    28$				 ;28$				      	    			     0A  14   003DC
	INCL    R1				 ;R1				      	    			     51  D6   003DE
	MOVAB   -26(R7), R0			 ;PROCESS_COMPLETION_AST, R0	       0943 	       50	E6   A7  9E   003E0
	PUSHL   R0				 ;R0				      	    			     50  DD   003E4
	BRB     29$				 ;29$				      	    			     02  11   003E6
28$:	CLRL    -(SP)				 ;-(SP)				       0945 			     7E  D4   003E8
29$:	CLRQ    -(SP)				 ;-(SP)				       0939 			     7E  7C   003EA
	CLRQ    -(SP)				 ;-(SP)				       0937 			     7E  7C   003EC
	PUSHAB  40(SP)				 ;FLAGS				       0936 			28   AE  9F   003EE
	PUSHAB  516(SP)				 ;MBX_DESC			       0935 		      0204   CE  9F   003F1
	BLBC    R1, 30$				 ;R1, 30$			       0930 	       04	     51  E9   003F5
	CLRL    -(SP)				 ;-(SP)				       0932 			     7E  D4   003F8
	BRB     31$				 ;31$				      	    			     06  11   003FA
30$:	MOVAB   80(R11), R0			 ;P.AAK, R0			       0934 	       50	50   AB  9E   003FC
	PUSHL   R0				 ;R0				      	    			     50  DD   00400
31$:	PUSHAB  -24(FP)				 ;COMMAND_DESC			       0929 			E8   AD  9F   00402
	CALLS   #10, G^LIB$SPAWN		 ;#10, LIB$SPAWN		      	    00000000G  00	     0A  FB   00405
	MOVL    R0, R6				 ;R0, STATUS			      	    	       56	     50  D0   0040C
	BLBS    R6, 33$				 ;STATUS, 33$			       0948 	       09	     56  E8   0040F
32$:	PUSHL   R6				 ;STATUS			      	    			     56  DD   00412
	CALLS   #1, G^LIB$SIGNAL		 ;#1, LIB$SIGNAL		      	    00000000G  00	     01  FB   00414
33$:	MOVL    R6, R0				 ;STATUS, R0			       0950 	       50	     56  D0   0041B
	RET     				 ;				      	    				 04   0041E

; Routine Size:  1055 bytes,    Routine Base:  $CODE$ + 0131


;   0952  1	 
;   0953  1	 %SBTTL 'SY_DISMISS - Sleep for N seconds'
;   0954  1	 
;   0955  1	GLOBAL ROUTINE SY_DISMISS (SECONDS) : NOVALUE =
;   0956  1	 
;   0957  1	!++
;   0958  1	! FUNCTIONAL DESCRIPTION:
;   0959  1	!
;   0960  1	!	This routine is called to cause KERMIT to sleep for the
;   0961  1	!	specified number of seconds.
;   0962  1	!
;   0963  1	! CALLING SEQUENCE:
;   0964  1	!
;   0965  1	!	SY_DISMISS(Number of seconds);
;   0966  1	!
;   0967  1	! INPUT PARAMETERS:
;   0968  1	!
;   0969  1	!	Number of seconds to sleep.
;   0970  1	!
;   0971  1	! IMPLICIT INPUTS:
;   0972  1	!
;   0973  1	!	None.
;   0974  1	!
;   0975  1	! OUTPUT PARAMETERS:
;   0976  1	!
;   0977  1	!	None.
;   0978  1	!
;   0979  1	! IMPLICIT OUTPUTS:
;   0980  1	!
;   0981  1	!	None.
;   0982  1	!
;   0983  1	! COMPLETION CODES:
;   0984  1	!
;   0985  1	!	None.
;   0986  1	!
;   0987  1	! SIDE EFFECTS:
;   0988  1	!
;   0989  1	!	None.
;   0990  1	!
;   0991  1	!--
;   0992  1	 
;   0993  2	    BEGIN
;   0994  2	 
;   0995  2	    LOCAL
;   0996  2		STATUS,
;   0997  2		TOTAL_TIME : VECTOR [2, LONG];		! Quad word for length of time to sleep
;   0998  2	 
;   0999  2	    IF .SECONDS EQL 0 THEN RETURN KER_NORMAL;
;   1000  2	 
;   1001  2	    TOTAL_TIME [0] = -.SECONDS*10*1000*1000;
;   1002  2	    TOTAL_TIME [1] = -1;
;   1003  2	    STATUS = $SETIMR (EFN = 1, DAYTIM = TOTAL_TIME);
;   1004  2	 
;   1005  2	    IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
;   1006  2	 
;   1007  2	    STATUS = $WAITFR (EFN = 1);
;   1008  2	 
;   1009  2	    IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
;   1010  2	 
;   1011  1	    END;					! End of SY_DISMISS(time)



	.EXTRN  SYS$SETIMR

	.ENTRY  SY_DISMISS, ^M<R2,R3>		 ;SY_DISMISS, Save R2,R3	       0955 			       000C   00000
	MOVAB   G^LIB$SIGNAL, R3		 ;LIB$SIGNAL, R3		      	    	       53 00000000G  00  9E   00002
	SUBL2   #8, SP				 ;#8, SP			      	    	       5E	     08  C2   00009
	TSTL    4(AP)				 ;SECONDS			       0999 			04   AC  D5   0000C
	BEQL    2$				 ;2$				      	    			     3F  13   0000F
	MULL3   #10000000, 4(AP), R0		 ;#10000000, SECONDS, R0	       1001 	  04   AC 00989680   8F  C5   00011
						 ;					    			     50       00019
	MNEGL   R0, (SP)			 ;R0, TOTAL_TIME		      	    	       6E	     50  CE   0001A
	MNEGL   #1, 4(SP)			 ;#1, TOTAL_TIME+4		       1002 	  04   AE	     01  CE   0001D
	CLRQ    -(SP)				 ;-(SP)				       1003 			     7E  7C   00021
	CLRL    -(SP)				 ;-(SP)				      	    			     7E  D4   00023
	PUSHAB  12(SP)				 ;TOTAL_TIME			      	    			0C   AE  9F   00025
	PUSHL   #1				 ;#1				      	    			     01  DD   00028
	CALLS   #5, G^SYS$SETIMR		 ;#5, SYS$SETIMR		      	    00000000G  00	     05  FB   0002A
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00031
	BLBS    R2, 1$				 ;STATUS, 1$			       1005 	       05	     52  E8   00034
	PUSHL   R2				 ;STATUS			      	    			     52  DD   00037
	CALLS   #1, (R3)			 ;#1, LIB$SIGNAL		      	    	       63	     01  FB   00039
1$:	PUSHL   #1				 ;#1				       1007 			     01  DD   0003C
	CALLS   #1, G^SYS$WAITFR		 ;#1, SYS$WAITFR		      	    00000000G  00	     01  FB   0003E
	MOVL    R0, R2				 ;R0, STATUS			      	    	       52	     50  D0   00045
	BLBS    R2, 2$				 ;STATUS, 2$			       1009 	       05	     52  E8   00048
	PUSHL   R2				 ;STATUS			      	    			     52  DD   0004B
	CALLS   #1, (R3)			 ;#1, LIB$SIGNAL		      	    	       63	     01  FB   0004D
2$:	RET     				 ;				       1011 				 04   00050

; Routine Size:  81 bytes,    Routine Base:  $CODE$ + 0550


;   1012  1	 
;   1013  1	 %SBTTL 'SY_TIME - Return abbreviated system time'
;   1014  1	 
;   1015  1	GLOBAL ROUTINE SY_TIME =
;   1016  1	 
;   1017  1	!++
;   1018  1	! FUNCTIONAL DESCRIPTION:
;   1019  1	!
;   1020  1	!	This routine will return the system time to the calling routine.
;   1021  1	!	This will allow for the calculation of the effective baud rate.
;   1022  1	!
;   1023  1	! CALLING SEQUENCE:
;   1024  1	!
;   1025  1	!	TIME = SY_TIME ();
;   1026  1	!
;   1027  1	! INPUT PARAMETERS:
;   1028  1	!
;   1029  1	!	None.
;   1030  1	!
;   1031  1	! IMPLICIT INPUTS:
;   1032  1	!
;   1033  1	!	None.
;   1034  1	!
;   1035  1	! OUTPUT PARAMETERS:
;   1036  1	!
;   1037  1	!	Time in milliseconds.
;   1038  1	!
;   1039  1	! IMPLICIT OUTPUTS:
;   1040  1	!
;   1041  1	!	None.
;   1042  1	!
;   1043  1	! COMPLETION CODES:
;   1044  1	!
;   1045  1	!	None.
;   1046  1	!
;   1047  1	! SIDE EFFECTS:
;   1048  1	!
;   1049  1	!	None.
;   1050  1	!
;   1051  1	!--
;   1052  1	 
;   1053  2	    BEGIN
;   1054  2	!
;   1055  2	! Local storage
;   1056  2	!
;   1057  2	 
;   1058  2	    LOCAL
;   1059  2		Adjusted_Time : VECTOR [2, LONG],	! System time - a constant.
;   1060  2		MILLI_SECONDS,				! Time in milliseconds
;   1061  2		REMAINDER,				! Remainder on EDIV
;   1062  2		STATUS,					! Status returned by lower level
;   1063  2		Time : VECTOR [2, LONG],		! Quadword to hold system time.
;   1064  2		TEN_FOURTH : VECTOR [2, LONG];		! to hold 10**4
;   1065  2	
;   1066  2	!
;   1067  2	! LIB$EDIV will fail if the system time is too large, so we need
;   1068  2	! to subtract some large constant from it - might as well use
;   1069  2	! the current time.
;   1070  2	!
;   1071  2	
;   1072  2	    IF .Subtrahend [0] EQL 0 AND .Subtrahend [1] EQL 0
;   1073  2	    THEN
;   1074  3	        BEGIN
;   1075  3	        STATUS = SYS$GETTIM(Subtrahend);
;   1076  3	        IF NOT .STATUS THEN RETURN 0;
;   1077  2	        END;
;   1078  2	!
;   1079  2	! Get the VMS system time.
;   1080  2	!
;   1081  2	    STATUS = SYS$GETTIM(Time);
;   1082  2	    IF NOT .STATUS THEN RETURN 0;
;   1083  2	 
;   1084  2	!
;   1085  2	! Compute the longword value from the quadword returned.
;   1086  2	!
;   1087  2	    Status = LIB$SUBX(Time, Subtrahend, Adjusted_Time);
;   1088  2	    IF NOT .STATUS THEN RETURN 0;
;   1089  2	
;   1090  2	    TEN_FOURTH [0] = 1000*10;
;   1091  2	    TEN_FOURTH [1] = 0;
;   1092  2	    STATUS = LIB$EDIV (TEN_FOURTH, Adjusted_Time, MILLI_SECONDS, REMAINDER);
;   1093  2	 
;   1094  2	    IF NOT .STATUS AND .Status NEQ SS$_INTOVF THEN RETURN 0;
;   1095  2	 
;   1096  2	    RETURN .MILLI_SECONDS;
;   1097  1	    END;					! End of SY_TIME





	.ENTRY  SY_TIME, ^M<R2,R3>		 ;SY_TIME, Save R2,R3		       1015 			       000C   00000
	MOVAB   G^SYS$GETTIM, R3		 ;SYS$GETTIM, R3		      	    	       53 00000000G  00  9E   00002
	MOVAB   G^U.6, R2			 ;U.6, R2			      	    	       52 00000000'  00  9E   00009
	SUBL2   #32, SP				 ;#32, SP			      	    	       5E	     20  C2   00010
	TSTL    (R2)				 ;SUBTRAHEND			       1072 			     62  D5   00013
	BNEQ    1$				 ;1$				      	    			     0D  12   00015
	TSTL    4(R2)				 ;SUBTRAHEND+4			      	    			04   A2  D5   00017
	BNEQ    1$				 ;1$				      	    			     08  12   0001A
	PUSHL   R2				 ;R2				       1075 			     52  DD   0001C
	CALLS   #1, (R3)			 ;#1, SYS$GETTIM		      	    	       63	     01  FB   0001E
	BLBC    R0, 3$				 ;STATUS, 3$			       1076 	       47	     50  E9   00021
1$:	PUSHAB  16(SP)				 ;TIME				       1081 			10   AE  9F   00024
	CALLS   #1, (R3)			 ;#1, SYS$GETTIM		      	    	       63	     01  FB   00027
	BLBC    R0, 3$				 ;STATUS, 3$			       1082 	       3E	     50  E9   0002A
	PUSHAB  24(SP)				 ;ADJUSTED_TIME			       1087 			18   AE  9F   0002D
	PUSHL   R2				 ;R2				      	    			     52  DD   00030
	PUSHAB  24(SP)				 ;TIME				      	    			18   AE  9F   00032
	CALLS   #3, G^LIB$SUBX			 ;#3, LIB$SUBX			      	    00000000G  00	     03  FB   00035
	BLBC    R0, 3$				 ;STATUS, 3$			       1088 	       2C	     50  E9   0003C
	MOVZWL  #10000, 8(SP)			 ;#10000, TEN_FOURTH		       1090 	  08   AE     2710   8F  3C   0003F
	CLRL    12(SP)				 ;TEN_FOURTH+4			       1091 			0C   AE  D4   00045
	PUSHL   SP				 ;SP				       1092 			     5E  DD   00048
	PUSHAB  8(SP)				 ;MILLI_SECONDS			      	    			08   AE  9F   0004A
	PUSHAB  32(SP)				 ;ADJUSTED_TIME			      	    			20   AE  9F   0004D
	PUSHAB  20(SP)				 ;TEN_FOURTH			      	    			14   AE  9F   00050
	CALLS   #4, G^LIB$EDIV			 ;#4, LIB$EDIV			      	    00000000G  00	     04  FB   00053
	BLBS    R0, 2$				 ;STATUS, 2$			       1094 	       09	     50  E8   0005A
	CMPL    R0, #1148			 ;STATUS, #1148			      	    0000047C   8F	     50  D1   0005D
	BNEQ    3$				 ;3$				      	    			     05  12   00064
2$:	MOVL    4(SP), R0			 ;MILLI_SECONDS, R0		       1096 	       50	04   AE  D0   00066
	RET     				 ;				      	    				 04   0006A
3$:	CLRL    R0				 ;R0				      	    			     50  D4   0006B
	RET     				 ;				      	    				 04   0006D

; Routine Size:  110 bytes,    Routine Base:  $CODE$ + 05A1


;   1098  1	 
;   1099  1	 %SBTTL 'End of KERSYS.BLI'
;   1100  1	END						! End of module
;   1101  1	 
;   1102  0	ELUDOM






;				       PSECT SUMMARY
;
;	Name			 Bytes			       Attributes
;
;  $OWN$			     2300  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
;  $PLIT$			      104  NOVEC,NOWRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
;  $CODE$			     1551  NOVEC,NOWRT,  RD ,  EXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
;  .  ABS  .			        0  NOVEC,NOWRT,NORD ,NOEXE,NOSHR,  LCL,  ABS,  CON,NOPIC,ALIGN(0)




;				Library Statistics
;
;					     -------- Symbols --------	    Pages	Processing
;	File				     Total    Loaded   Percent      Mapped	Time
;
;  SYS$COMMON:[SYSLIB]STARLET.L32;4	     15754        86         0       919          00:00.4
;  SYS$COMMON:[SYSLIB]TPAMAC.L32;4	        43         0         0        15          00:00.1







;					COMMAND QUALIFIERS

;	BLI/LIS/MAC=(ASSEM,UNIQ)/SOUR:NOHEAD VMSSYS

; Compilation Complete

	.END
