;   0001  0	MODULE KERSYS (IDENT = '3.1.066'
;   0002  0			) =
;   0003  1	BEGIN
;   0004  1	
;   0005  1	!++
;   0006  1	! FACILITY:
;   0007  1	!   KERMIT-32
;   0008  1	!
;   0009  1	! ABSTRACT:
;   0010  1	!   KERMIT-32 is an implementation of the KERMIT protocal to allow the
;   0011  1	!   transfer of files from micro computers to the DECsystem-10, DECSYSTEM-20
;   0012  1	!   and now the VAX/VMS systems.
;   0013  1	!
;   0014  1	! ENVIRONMENT:
;   0015  1	!   User mode
;   0016  1	!
;   0017  1	! AUTHOR: Robert C. McQueen, Nick Bush, CREATION DATE: 24-January-1983
;   0018  1	!
;   0019  1	! MODIFIED BY:
;   0020  1	!
;   0021  1	!--
;   0022  1	
;   0023  1	%SBTTL 'Table of Contents'
;   0024  1	%SBTTL 'Revision History'
;   0025  1	
;   0026  1	!++
;   0027  1	!
;   0028  1	! 2.0.032	By: Nick Bush			On: 25-Feb-1984
;   0029  1	!		Add code for LOCAL and REMOTE commands.  These depend
;   0030  1	!		upon support in KERMSG and KERSYS.
;   0031  1	!
;   0032  1	! 3.0.045	Start of version 3.
;   0033  1	!
;   0034  1	! 3.1.057	By: Nick Bush				On: 21-Feb-1985
;   0035  1	!		Determine VMS version on startup and remember for later
;   0036  1	!		use.  Use it in KERSYS to determine whether we will need
;   0037  1	!		to force an end-of-file on the mailbox when the subprocess
;   0038  1	!		on the other end goes away.
;   0039  1	!
;   0040  1	! 3.1.064	By: Nick Bush				On: 30-March-1985
;   0041  1	!		Fix LIB$SPAWN call to set SYS$INPUT for the subprocess
;   0042  1	!		to be NLA0: so that it doesn't try to input from the
;   0043  1	!		terminal.
;   0044  1	!
;   0045  1	! 3.1.066	By: Nick Bush				On: 22-April-1985
;   0046  1	!		Don't use NLA0: as SYS$INPUT when spawning things under VMS 3.
;   0047  1	!--
;   0048  1	
;   0049  1	%SBTTL 'Include files'
;   0050  1	!
;   0051  1	! INCLUDE FILES:
;   0052  1	!
;   0053  1	
;   0054  1	LIBRARY 'SYS$LIBRARY:STARLET';
;   0055  1	
;   0056  1	LIBRARY 'SYS$LIBRARY:TPAMAC';
;   0057  1	
;   0058  1	REQUIRE 'KERCOM';				! Common definitions
;   0266  1	
;   0267  1	REQUIRE 'KERERR';				! Error message symbol definitions
;   0332  1	
;   0333  1	%SBTTL 'Storage -- Local'
;   0334  1	!
;   0335  1	! OWN STORAGE:
;   0336  1	!
;   0337  1	
;   0338  1	OWN
;   0339  1	    VMS_VERSION,				! Major version number of VMS
;   0340  1	    ORG_DEFAULT_DIR_TEXT : VECTOR [MAX_FILE_NAME, BYTE],	! Text of default dir
;   0341  1	    ORG_DEFAULT_DIR : BLOCK [8, BYTE],		! Original default directory
;   0342  1	    ORG_DEFAULT_DEV_TEXT : VECTOR [MAX_FILE_NAME, BYTE],	! Text of default device
;   0343  1	    ORG_DEFAULT_DEV : BLOCK [8, BYTE],		! Descriptor for orginal default device
;   0344  1	    TIMER_HANDLE;				! Handle for timer
;   0345  1	
;   0346  1	!<BLF/FORMAT>
;   0347  1	%SBTTL 'External routines'
;   0348  1	!
;   0349  1	! EXTERNAL REFERENCES:
;   0350  1	!
;   0351  1	
;   0352  1	EXTERNAL ROUTINE
;   0353  1	!
;   0354  1	! Library routines
;   0355  1	!
;   0356  1	    LIB$SIGNAL : ADDRESSING_MODE (GENERAL) NOVALUE,
;   0357  1	    LIB$INIT_TIMER : ADDRESSING_MODE (GENERAL),
;   0358  1	    LIB$STAT_TIMER : ADDRESSING_MODE (GENERAL),
;   0359  1	    LIB$EDIV : ADDRESSING_MODE (GENERAL),
;   0360  1	    LIB$SPAWN : ADDRESSING_MODE (GENERAL),
;   0361  1	    OTS$CVT_L_TZ : ADDRESSING_MODE (GENERAL) NOVALUE,
;   0362  1	    LIB$SET_LOGICAL : ADDRESSING_MODE (GENERAL),
;   0363  1	    SYS$SETDDIR : ADDRESSING_MODE (GENERAL),
;   0364  1	!
;   0365  1	! KERTT - Text processing
;   0366  1	!
;   0367  1	    TT_INIT : NOVALUE,				! Initialization routine
;   0368  1	    TT_TEXT : NOVALUE,				! Output a text string
;   0369  1	    TT_NUMBER : NOVALUE,			! Output a number
;   0370  1	    TT_CHAR : NOVALUE,				! Output a single character
;   0371  1	    TT_OUTPUT : NOVALUE,			! Routine to dump the current
;   0372  1	    						!  text line.
;   0373  1	    TT_CRLF : NOVALUE;				! Output the line
;   0374  1	
;   0375  1	%SBTTL 'External storage'
;   0376  1	!
;   0377  1	! EXTERNAL Storage:
;   0378  1	!
;   0379  1	
;   0380  1	EXTERNAL
;   0381  1	!
;   0382  1	! KERMSG storage
;   0383  1	!
;   0384  1	    GEN_1DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],	! Data for generic command
;   0385  1	    GEN_1SIZE,					! Size of data in GEN_1DATA
;   0386  1	    GEN_2DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],	! Second argument for generic command
;   0387  1	    GEN_2SIZE,					! Size of data in GEN_2DATA
;   0388  1	    GEN_3DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],	! Third arg for generic command
;   0389  1	    GEN_3SIZE,					! Size of data in GEN_3DATA
;   0390  1	!
;   0391  1	! Misc constants.
;   0392  1	!
;   0393  1	    FILE_SIZE,					! Number of characters in FILE_NAME
;   0394  1	    FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)];
;   0395  1	
;   0396  1	%SBTTL 'SY_INIT - Initialize KERSYS'
;   0397  1	
;   0398  1	GLOBAL ROUTINE SY_INIT : NOVALUE =
;   0399  1	
;   0400  1	!++
;   0401  1	! FUNCTIONAL DESCRIPTION:
;   0402  1	!
;   0403  1	! This routine will initialize the module KERSYS.
;   0404  1	!
;   0405  1	! CALLING SEQUENCE:
;   0406  1	!
;   0407  1	!	SY_INIT ();
;   0408  1	!
;   0409  1	! INPUT PARAMETERS:
;   0410  1	!
;   0411  1	!	None.
;   0412  1	!
;   0413  1	! IMPLICIT INPUTS:
;   0414  1	!
;   0415  1	!	None.
;   0416  1	!
;   0417  1	! OUPTUT PARAMETERS:
;   0418  1	!
;   0419  1	!	None.
;   0420  1	!
;   0421  1	! IMPLICIT OUTPUTS:
;   0422  1	!
;   0423  1	!	None.
;   0424  1	!
;   0425  1	! COMPLETION CODES:
;   0426  1	!
;   0427  1	!	None.
;   0428  1	!
;   0429  1	! SIDE EFFECTS:
;   0430  1	!
;   0431  1	!	KERSYS storage initialized
;   0432  1	!
;   0433  1	!--
;   0434  1	
;   0435  2	    BEGIN
;   0436  2	
;   0437  2	    LITERAL
;   0438  2		SYI_EFN = 10;			    ! EFN to use for $GETSYI
;   0439  2	
;   0440  2	    LOCAL
;   0441  2		VERSION_STRING : VECTOR [8, BYTE],  ! Return version string here
;   0442  2		VERSION_LENGTH,			    ! And length here
;   0443  2		SYI_ITEM_LIST : BLOCK [16, BYTE],   ! Argument list for $GETSYI
;   0444  2		LENGTH,				    ! Length of default dir returned
;   0445  2		STATUS;
;   0446  2	!
;   0447  2	! Set up arg list for $GETSYI
;   0448  2	!
;   0449  2	    SYI_ITEM_LIST [0, 0, 16, 0] = 8;	! We expect an 8-byte string
;   0450  2	    SYI_ITEM_LIST [2, 0, 16, 0] = SYI$_VERSION; ! Want the VMS version
;   0451  2	    SYI_ITEM_LIST [4, 0, 32, 0] = VERSION_STRING; ! Put it here
;   0452  2	    SYI_ITEM_LIST [8, 0, 32, 0] = VERSION_LENGTH; ! Length goes here
;   0453  2	    SYI_ITEM_LIST [12, 0, 32, 0] = 0;	! End the list
;   0454  2	    STATUS = $GETSYI (EFN=SYI_EFN, ITMLST=SYI_ITEM_LIST); ! Get the data
;   0455  2	    IF NOT .STATUS			! If we can't get the version
;   0456  2	    THEN
;   0457  2		VMS_VERSION = 0		! Assume very old VMS?
;   0458  2	    ELSE
;   0459  3		BEGIN
;   0460  3		STATUS = $WAITFR (EFN=SYI_EFN);	! Wait for completion
;   0461  3		IF .STATUS			! If we got it
;   0462  3		THEN
;   0463  4		    BEGIN
;   0464  4		    IF .VERSION_STRING [0] GEQ %C'0' AND
;   0465  4			.VERSION_STRING [0] LEQ %C'9'	! If first character is numeric
;   0466  4		    THEN
;   0467  4			VMS_VERSION = (.VERSION_STRING[0] - %C'0')*10	! save first digit
;   0468  4		    ELSE
;   0469  4			VMS_VERSION = 0;	    ! No first digit, store 0
;   0470  4		    VMS_VERSION = .VMS_VERSION + .VERSION_STRING[1] - %C'0' ! Get rest of version
;   0471  4		    END
;   0472  3		ELSE
;   0473  3		    VMS_VERSION = 0;		! Can't get version?
;   0474  2		END;
;   0475  2	!
;   0476  2	! Initialize the timer we will use
;   0477  2	!
;   0478  2	    TIMER_HANDLE = 0;				! Clear to get free block
;   0479  2	    STATUS = LIB$INIT_TIMER (TIMER_HANDLE);	! Initialize
;   0480  2	!
;   0481  2	! Set up original default directory
;   0482  2	!
;   0483  2	    ORG_DEFAULT_DIR [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0484  2	    ORG_DEFAULT_DIR [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0485  2	    ORG_DEFAULT_DIR [DSC$W_LENGTH] = MAX_FILE_NAME;
;   0486  2	    ORG_DEFAULT_DIR [DSC$A_POINTER] = ORG_DEFAULT_DIR_TEXT;
;   0487  2	    STATUS = SYS$SETDDIR (0, LENGTH, ORG_DEFAULT_DIR);
;   0488  2	
;   0489  2	    IF .STATUS THEN ORG_DEFAULT_DIR [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DIR [DSC$W_LENGTH] = 0;
;   0490  2	!
;   0491  2	! Get original default device
;   0492  2	!
;   0493  2	    ORG_DEFAULT_DEV [DSC$B_CLASS] = DSC$K_CLASS_S;
;   0494  2	    ORG_DEFAULT_DEV [DSC$B_DTYPE] = DSC$K_DTYPE_T;
;   0495  2	    ORG_DEFAULT_DEV [DSC$W_LENGTH] = MAX_FILE_NAME;
;   0496  2	    ORG_DEFAULT_DEV [DSC$A_POINTER] = ORG_DEFAULT_DEV_TEXT;
;   0497  2	    STATUS = $TRNLOG (LOGNAM = %ASCID'SYS$DISK', RSLBUF = ORG_DEFAULT_DEV, RSLLEN = LENGTH);
;   0498  2	
;   0499  2	    IF .STATUS THEN ORG_DEFAULT_DEV [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DEV [DSC$W_LENGTH] = 0;
;   0500  2	
;   0501  1	    END;					! End of SY_INIT


	.TITLE  KERSYS
	.IDENT  \3.1.066\

	.PSECT  $PLIT$,NOWRT,NOEXE,2

P.AAB:	.ASCII  \SYS$DISK\			     ;									      ;
P.AAA:	.LONG   17694728			     ;									      ;
	.ADDRESS P.AAB				     ;									      ;

	.PSECT  $OWN$,NOEXE,2

;VMS_VERSION
U.1:	.BLKB   4
;ORG_DEFAULT_DIR_TEXT
U.2:	.BLKB   132
;ORG_DEFAULT_DIR
U.3:	.BLKB   8
;ORG_DEFAULT_DEV_TEXT
U.4:	.BLKB   132
;ORG_DEFAULT_DEV
U.5:	.BLKB   8
;TIMER_HANDLE
U.6:	.BLKB   4

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==	    96
	.EXTRN  LIB$SIGNAL, LIB$INIT_TIMER, LIB$STAT_TIMER, LIB$EDIV, LIB$SPAWN, OTS$CVT_L_TZ, LIB$SET_LOGICAL
	.EXTRN  SYS$SETDDIR, TT_INIT, TT_TEXT, TT_NUMBER, TT_CHAR, TT_OUTPUT, TT_CRLF, GEN_1DATA, GEN_1SIZE
	.EXTRN  GEN_2DATA, GEN_2SIZE, GEN_3DATA, GEN_3SIZE, FILE_SIZE, FILE_NAME, SYS$GETSYI, SYS$WAITFR
	.EXTRN  SYS$TRNLOG

	.PSECT  $CODE$,NOWRT,2

	.ENTRY  SY_INIT, ^M<R2>			     ;SY_INIT, Save R2							      ; 0398
	MOVAB   W^U.1, R2			     ;U.1, R2								      ;
	SUBL2   #32, SP				     ;#32, SP								      ;
	MOVL    #268435464, 8(SP)		     ;#268435464, SYI_ITEM_LIST						      ; 0449
	MOVAB   24(SP), 12(SP)			     ;VERSION_STRING, SYI_ITEM_LIST+4					      ; 0451
	MOVAB   (SP), 16(SP)			     ;VERSION_LENGTH, SYI_ITEM_LIST+8					      ; 0452
	CLRL    20(SP)				     ;SYI_ITEM_LIST+12							      ; 0453
	CLRQ    -(SP)				     ;-(SP)								      ; 0454
	CLRL    -(SP)				     ;-(SP)								      ;
	PUSHAB  20(SP)				     ;SYI_ITEM_LIST							      ;
	CLRQ    -(SP)				     ;-(SP)								      ;
	PUSHL   #10				     ;#10								      ;
	CALLS   #7, G^SYS$GETSYI		     ;#7, SYS$GETSYI							      ;
	BLBC    R0, 3$				     ;STATUS, 3$							      ; 0455
	PUSHL   #10				     ;#10								      ; 0460
	CALLS   #1, G^SYS$WAITFR		     ;#1, SYS$WAITFR							      ;
	BLBC    R0, 3$				     ;STATUS, 3$							      ; 0461
	CMPB    24(SP), #48			     ;VERSION_STRING, #48						      ; 0464
	BLSSU   1$				     ;1$								      ;
	CMPB    24(SP), #57			     ;VERSION_STRING, #57						      ; 0465
	BGTRU   1$				     ;1$								      ;
	MOVZBL  24(SP), R1			     ;VERSION_STRING, R1						      ; 0467
	SUBL2   #48, R1				     ;#48, R1								      ;
	MULL3   #10, R1, (R2)			     ;#10, R1, VMS_VERSION						      ;
	BRB     2$				     ;2$								      ;
1$:	CLRL    (R2)				     ;VMS_VERSION							      ; 0469
2$:	MOVZBL  25(SP), R1			     ;VERSION_STRING+1, R1						      ; 0470
	ADDL2   (R2), R1			     ;VMS_VERSION, R1							      ;
	MOVAB   -48(R1), (R2)			     ;-48(R1), VMS_VERSION						      ;
	BRB     4$				     ;4$								      ;
3$:	CLRL    (R2)				     ;VMS_VERSION							      ; 0473
4$:	CLRL    284(R2)				     ;TIMER_HANDLE							      ; 0478
	PUSHAB  284(R2)				     ;TIMER_HANDLE							      ; 0479
	CALLS   #1, G^LIB$INIT_TIMER		     ;#1, LIB$INIT_TIMER						      ;
	MOVL    #17694852, 136(R2)		     ;#17694852, ORG_DEFAULT_DIR					      ; 0485
	MOVAB   4(R2), 140(R2)			     ;ORG_DEFAULT_DIR_TEXT, ORG_DEFAULT_DIR+4				      ; 0486
	PUSHAB  136(R2)				     ;ORG_DEFAULT_DIR							      ; 0487
	PUSHAB  8(SP)				     ;LENGTH								      ;
	CLRL    -(SP)				     ;-(SP)								      ;
	CALLS   #3, G^SYS$SETDDIR		     ;#3, SYS$SETDDIR							      ;
	BLBC    R0, 5$				     ;STATUS, 5$							      ; 0489
	MOVW    4(SP), 136(R2)			     ;LENGTH, ORG_DEFAULT_DIR						      ;
	BRB     6$				     ;6$								      ;
5$:	CLRW    136(R2)				     ;ORG_DEFAULT_DIR							      ;
6$:	MOVL    #17694852, 276(R2)		     ;#17694852, ORG_DEFAULT_DEV					      ; 0495
	MOVAB   144(R2), 280(R2)		     ;ORG_DEFAULT_DEV_TEXT, ORG_DEFAULT_DEV+4				      ; 0496
	CLRQ    -(SP)				     ;-(SP)								      ; 0497
	CLRL    -(SP)				     ;-(SP)								      ;
	PUSHAB  276(R2)				     ;ORG_DEFAULT_DEV							      ;
	PUSHAB  20(SP)				     ;LENGTH								      ;
	PUSHAB  W^P.AAA				     ;P.AAA								      ;
	CALLS   #6, G^SYS$TRNLOG		     ;#6, SYS$TRNLOG							      ;
	BLBC    R0, 7$				     ;STATUS, 7$							      ; 0499
	MOVW    4(SP), 276(R2)			     ;LENGTH, ORG_DEFAULT_DEV						      ;
	RET     				     ;									      ;
7$:	CLRW    276(R2)				     ;ORG_DEFAULT_DEV							      ;
	RET     				     ;									      ; 0501

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


;   0502  1	
;   0503  1	%SBTTL 'SY_LOGOUT - delete the process.'
;   0504  1	
;   0505  1	GLOBAL ROUTINE SY_LOGOUT : NOVALUE =
;   0506  1	
;   0507  1	!++
;   0508  1	! FUNCTIONAL DESCRIPTION:
;   0509  1	!
;   0510  1	!	This routine will delete this process.
;   0511  1	!
;   0512  1	! CALLING SEQUENCE:
;   0513  1	!
;   0514  1	!	SY_LOGOUT ();
;   0515  1	!
;   0516  1	! INPUT PARAMETERS:
;   0517  1	!
;   0518  1	!	None.
;   0519  1	!
;   0520  1	! IMPLICIT INPUTS:
;   0521  1	!
;   0522  1	!	None.
;   0523  1	!
;   0524  1	! OUTPUT PARAMETERS:
;   0525  1	!
;   0526  1	!	None.
;   0527  1	!
;   0528  1	! IMPLICIT OUTPUTS:
;   0529  1	!
;   0530  1	!	None.
;   0531  1	!
;   0532  1	! COMPLETION CODES:
;   0533  1	!
;   0534  1	!	None.
;   0535  1	!
;   0536  1	! SIDE EFFECTS:
;   0537  1	!
;   0538  1	!	None.
;   0539  1	!
;   0540  1	!--
;   0541  1	
;   0542  2	    BEGIN
;   0543  2	    $DELPRC ();
;   0544  1	    END;					! End of SY_LOGOUT



	.EXTRN  SYS$DELPRC

	.ENTRY  SY_LOGOUT, ^M<>			     ;SY_LOGOUT, Save nothing						      ; 0505
	CLRQ    -(SP)				     ;-(SP)								      ; 0543
	CALLS   #2, G^SYS$DELPRC		     ;#2, SYS$DELPRC							      ;
	RET     				     ;									      ; 0544

; Routine Size:  12 bytes,    Routine Base:  $CODE$ + 00DB


;   0545  1	
;   0546  1	%SBTTL 'SY_GENERIC - Perform a generic command'
;   0547  1	
;   0548  1	GLOBAL ROUTINE SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN) =
;   0549  1	
;   0550  1	!++
;   0551  1	! FUNCTIONAL DESCRIPTION:
;   0552  1	!
;   0553  1	! This routine will perform a generic command.
;   0554  1	!
;   0555  1	! CALLING SEQUENCE:
;   0556  1	!
;   0557  1	!	SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN);
;   0558  1	!
;   0559  1	! INPUT PARAMETERS:
;   0560  1	!
;   0561  1	!	GCMD_TYPE - GC_xxx value for command to be performed
;   0562  1	!	STRING_ADDRESS - Place to return address of string result
;   0563  1	!	STRING_LENGTH - Place to return length of string result
;   0564  1	!	GET_CHR_RTN - Place to return address of a get a character routine
;   0565  1	!
;   0566  1	! IMPLICIT INPUTS:
;   0567  1	!
;   0568  1	!	None.
;   0569  1	!
;   0570  1	! OUTPUT PARAMETERS:
;   0571  1	!
;   0572  1	!	Returns KER_xxx status
;   0573  1	!
;   0574  1	! IMPLICIT OUTPUTS:
;   0575  1	!
;   0576  1	!	None.
;   0577  1	!
;   0578  1	! COMPLETION CODES:
;   0579  1	!
;   0580  1	!	None.
;   0581  1	!
;   0582  1	! SIDE EFFECTS:
;   0583  1	!
;   0584  1	!	None.
;   0585  1	!
;   0586  1	!--
;   0587  1	
;   0588  2	    BEGIN
;   0589  2	
;   0590  2	    LITERAL
;   0591  2		MAX_CMD_LEN = 2*MAX_MSG,		! Max command length
;   0592  2		MAX_MBX_LEN = 20;			! Max mailbox name length
;   0593  2	
;   0594  2	    OWN
;   0595  2		RSP_TEXT : VECTOR [MAX_CMD_LEN, BYTE],	! Return text
;   0596  2		RSP_LEN;				! Length of return text
;   0597  2	
;   0598  2	    LOCAL
;   0599  2		STATUS,					! Status results
;   0600  2		FLAGS,					! Flag word for LIB$SPAWN
;   0601  2		OUR_PID,				! Our PID value
;   0602  2		ITMLST : VECTOR [4, LONG],		! GETJPI argument
;   0603  2		POINTER,				! Character pointer
;   0604  2		MBX_CHAN,				! Channel for mail box
;   0605  2		COMMAND_LENGTH,				! Length of command string
;   0606  2		COMMAND_DESC : BLOCK [8, BYTE],		! Descriptor for command string
;   0607  2		COMMAND_STR : VECTOR [MAX_CMD_LEN, BYTE],	! Actual command string
;   0608  2		MBX_DESC : BLOCK [8, BYTE],		! Mailbox equivalence name
;   0609  2		MBX_NAME : VECTOR [MAX_MBX_LEN, BYTE];	! Storage for MBX name
;   0610  2	
;   0611  2	    ROUTINE PROCESS_COMPLETION_AST (MBX_CHAN) =
;   0612  2	!
;   0613  2	! This routine is called upon process completion (of the process we spawned
;   0614  2	! to perform the command).  It will ensure that the mailbox gets an end-of-file.
;   0615  2	!
;   0616  3		BEGIN
;   0617  3		RETURN $QIO (CHAN = .MBX_CHAN, FUNC = IO$_WRITEOF);	! Write the EOF
;   0618  2		END;



	.PSECT  $OWN$,NOEXE,2

;RSP_TEXT
U.10:	.BLKB   192
;RSP_LEN
U.11:	.BLKB   4

	.EXTRN  SYS$QIO

	.PSECT  $CODE$,NOWRT,2

;PROCESS_COMPLETION_AST
U.12:	.WORD   ^M<>				     ;Save nothing							      ; 0611
	CLRQ    -(SP)				     ;-(SP)								      ; 0617
	CLRQ    -(SP)				     ;-(SP)								      ;
	CLRQ    -(SP)				     ;-(SP)								      ;
	CLRQ    -(SP)				     ;-(SP)								      ;
	MOVQ    #40, -(SP)			     ;#40, -(SP)							      ;
	PUSHL   4(AP)				     ;MBX_CHAN								      ;
	CLRL    -(SP)				     ;-(SP)								      ;
	CALLS   #12, G^SYS$QIO			     ;#12, SYS$QIO							      ;
	RET     				     ;									      ; 0618

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


;   0619  2	    ROUTINE CONCAT (SRC_ADR, SRC_LEN, DST_PTR, DST_LEN) : NOVALUE =
;   0620  2	!
;   0621  2	! This routine is called to concatenate a string onto the current string
;   0622  2	!
;   0623  3		BEGIN
;   0624  3	
;   0625  3		LOCAL
;   0626  3		    LENGTH;				! Length we will actually move
;   0627  3	
;   0628  3		LENGTH = .SRC_LEN;			! Get total length
;   0629  3	
;   0630  3		IF .LENGTH GTR MAX_CMD_LEN - ..DST_LEN THEN LENGTH = MAX_CMD_LEN - ..DST_LEN;
;   0631  3	
;   0632  3		CH$MOVE (.LENGTH, CH$PTR (.SRC_ADR), ..DST_PTR);
;   0633  3		.DST_PTR = CH$PLUS (.LENGTH, ..DST_PTR);
;   0634  3		.DST_LEN = ..DST_LEN + .LENGTH;		! Update length
;   0635  2		END;





;CONCAT
U.13:	.WORD   ^M<R2,R3,R4,R5,R6,R7>		     ;Save R2,R3,R4,R5,R6,R7						      ; 0619
	MOVL    8(AP), R7			     ;SRC_LEN, LENGTH							      ; 0628
	SUBL3   #192, @16(AP), R1		     ;#192, @DST_LEN, R1						      ; 0630
	MNEGL   R1, R0				     ;R1, R0								      ;
	CMPL    R7, R0				     ;LENGTH, R0							      ;
	BLEQ    1$				     ;1$								      ;
	MNEGL   R1, R7				     ;R1, LENGTH							      ;
1$:	MOVL    12(AP), R6			     ;DST_PTR, R6							      ; 0632
	MOVC3   R7, @4(AP), @0(R6)		     ;LENGTH, @SRC_ADR, @0(R6)						      ;
	ADDL2   R7, (R6)			     ;LENGTH, (R6)							      ; 0633
	ADDL2   R7, @16(AP)			     ;LENGTH, @DST_LEN							      ; 0634
	RET     				     ;									      ; 0635

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


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



	.PSECT  $PLIT$,NOWRT,NOEXE,2

P.AAC:	.ASCII  \ \<0><0><0>			     ;									      ;
P.AAE:	.ASCII  \SYS$DISK\			     ;									      ;
P.AAD:	.LONG   17694728			     ;									      ;
	.ADDRESS P.AAE				     ;									      ;
P.AAF:	.ASCII  \Default directory set to \<0><0><0> ;									      ;
P.AAG:	.ASCII  \ \<0><0><0>			     ;									      ;
P.AAH:	.ASCII  \ "\<0><0>			     ;									      ;
P.AAI:	.ASCII  \"\<0><0><0>			     ;									      ;
P.AAJ:	.ASCII  \KERMIT$MBX_\<0>		     ;									      ;
P.AAL:	.ASCII  \NLA0:\<0><0><0>		     ;									      ;
P.AAK:	.LONG   17694725			     ;									      ;
	.ADDRESS P.AAL				     ;									      ;

	.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,R7,R8,-;SY_GENERIC, Save R2,R3,R4,R5,R6,R7,R8,R9,R10,R11			      ; 0548
		R9,R10,R11>			     ;									      ;
	MOVAB   W^P.AAC, R11			     ;P.AAC, R11							      ;
	MOVAB   W^GEN_1DATA, R10		     ;GEN_1DATA, R10							      ;
	MOVAB   W^GEN_1SIZE, R9			     ;GEN_1SIZE, R9							      ;
	MOVAB   W^U.11, R8			     ;U.11, R8								      ;
	MOVAB   B^U.13, R7			     ;U.13, R7								      ;
	MOVAB   -708(SP), SP			     ;-708(SP), SP							      ;
	MOVW    #270, -22(FP)			     ;#270, COMMAND_DESC+2						      ; 0640
	CLRL    -(SP)				     ;COMMAND_LENGTH							      ; 0641
	MOVAB   -216(FP), -20(FP)		     ;COMMAND_STR, COMMAND_DESC+4					      ; 0642
	MOVAB   -216(FP), 4(SP)			     ;COMMAND_STR, POINTER						      ; 0643
	CASEL   4(AP), #1, #18			     ;GCMD_TYPE, #1, #18						      ; 0648
1$:	.WORD   2$-1$,-				     ;2$-1$,-								      ;
		14$-1$,-			     ;14$-1$,-								      ;
		15$-1$,-			     ;15$-1$,-								      ;
		13$-1$,-			     ;13$-1$,-								      ;
		22$-1$,-			     ;22$-1$,-								      ;
		18$-1$,-			     ;18$-1$,-								      ;
		2$-1$,-				     ;2$-1$,-								      ;
		2$-1$,-				     ;2$-1$,-								      ;
		4$-1$,-				     ;4$-1$,-								      ;
		20$-1$,-			     ;20$-1$,-								      ;
		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							      ; 0860
	CALLS   #1, G^LIB$SIGNAL		     ;#1, LIB$SIGNAL							      ;
	MOVL    #134316210, R0			     ;#134316210, R0							      ; 0861
	RET     				     ;									      ;
3$:	PUSHL   SP				     ;SP								      ; 0657
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_COPY_CMD, -(SP)		     ;GEN_COPY_CMD, -(SP)						      ;
	PUSHL   W^GEN_COPY_CMD+4		     ;GEN_COPY_CMD+4							      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0658
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   (R9)				     ;GEN_1SIZE								      ;
	PUSHL   R10				     ;R10								      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0659
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   #1				     ;#1								      ;
	PUSHL   R11				     ;R11								      ;
	BRW     25$				     ;25$								      ;
4$:	MOVW    #270, 22(SP)			     ;#270, DIR_DESC+2							      ; 0675
	MOVW    #270, 30(SP)			     ;#270, DEV_DESC+2							      ; 0677
	MOVL    (R9), R6			     ;GEN_1SIZE, R6							      ; 0679
	BGTR    5$				     ;5$								      ;
	BRW     8$				     ;8$								      ;
5$:	MOVC5   #0, (SP), #0, #80, -324(FP)	     ;#0, (SP), #0, #80, $RMS_PTR					      ; 0682
	MOVW    #20483, -324(FP)		     ;#20483, $RMS_PTR							      ;
	MOVL    #16777216, -320(FP)		     ;#16777216, $RMS_PTR+4						      ;
	MOVB    #2, -302(FP)			     ;#2, $RMS_PTR+22							      ;
	MOVB    #2, -293(FP)			     ;#2, $RMS_PTR+31							      ;
	MOVAB   292(SP), -284(FP)		     ;DIR_NAM, $RMS_PTR+40						      ;
	MOVAB   (R10), -280(FP)			     ;GEN_1DATA, $RMS_PTR+44						      ;
	MOVB    R6, -272(FP)			     ;R6, $RMS_PTR+52							      ;
	MOVC5   #0, (SP), #0, #96, 292(SP)	     ;#0, (SP), #0, #96, $RMS_PTR					      ; 0683
	MOVW    #24578, 292(SP)			     ;#24578, $RMS_PTR							      ;
	MNEGB   #1, 302(SP)			     ;#1, $RMS_PTR+10							      ;
	MOVAB   36(SP), 304(SP)			     ;EXP_STR, $RMS_PTR+12						      ;
	PUSHAB  -324(FP)			     ;DIR_FAB								      ; 0684
	CALLS   #1, G^SYS$PARSE			     ;#1, SYS$PARSE							      ;
	MOVL    R0, R6				     ;R0, STATUS							      ;
	BLBC    R6, 10$				     ;STATUS, 10$							      ; 0686
	MOVZBL  348(SP), R0			     ;DIR_NAM+56, R0							      ; 0693
	BLEQ    6$				     ;6$								      ;
	MOVL    -356(FP), 32(SP)		     ;DIR_NAM+64, DEV_DESC+4						      ; 0696
	MOVZBL  349(SP), R1			     ;DIR_NAM+57, R1							      ; 0697
	ADDW3   R1, R0, 28(SP)			     ;R1, R0, DEV_DESC							      ;
	BRB     7$				     ;7$								      ; 0693
6$:	MOVZBW  349(SP), 28(SP)			     ;DIR_NAM+57, DEV_DESC						      ; 0701
	MOVL    -352(FP), 32(SP)		     ;DIR_NAM+68, DEV_DESC+4						      ; 0702
7$:	MOVZBW  350(SP), 20(SP)			     ;DIR_NAM+58, DIR_DESC						      ; 0705
	MOVL    -348(FP), 24(SP)		     ;DIR_NAM+72, DIR_DESC+4						      ; 0706
	BRB     9$				     ;9$								      ; 0679
8$:	MOVW    -344(R8), 20(SP)		     ;ORG_DEFAULT_DIR, DIR_DESC						      ; 0710
	MOVL    -340(R8), 24(SP)		     ;ORG_DEFAULT_DIR+4, DIR_DESC+4					      ; 0711
	MOVW    -204(R8), 28(SP)		     ;ORG_DEFAULT_DEV, DEV_DESC						      ; 0712
	MOVL    -200(R8), 32(SP)		     ;ORG_DEFAULT_DEV+4, DEV_DESC+4					      ; 0713
9$:	PUSHAB  28(SP)				     ;DEV_DESC								      ; 0716
	PUSHAB  12(R11)				     ;P.AAD								      ;
	CALLS   #2, G^LIB$SET_LOGICAL		     ;#2, LIB$SET_LOGICAL						      ;
	MOVL    R0, R6				     ;R0, STATUS							      ;
	BLBC    R6, 11$				     ;STATUS, 11$							      ; 0718
	CLRQ    -(SP)				     ;-(SP)								      ; 0725
	PUSHAB  28(SP)				     ;DIR_DESC								      ;
	CALLS   #3, G^SYS$SETDDIR		     ;#3, SYS$SETDDIR							      ;
	MOVL    R0, R6				     ;R0, STATUS							      ;
10$:	BLBC    R6, 11$				     ;STATUS, 11$							      ; 0727
	MOVAB   (R10), 24(SP)			     ;GEN_1DATA, DIR_DESC+4						      ; 0734
	MOVZBW  #96, 20(SP)			     ;#96, DIR_DESC							      ; 0735
	PUSHAB  20(SP)				     ;DIR_DESC								      ; 0736
	PUSHAB  24(SP)				     ;DIR_DESC								      ;
	CLRL    -(SP)				     ;-(SP)								      ;
	CALLS   #3, G^SYS$SETDDIR		     ;#3, SYS$SETDDIR							      ;
	MOVL    R0, R6				     ;R0, STATUS							      ;
11$:	BLBS    R6, 12$				     ;STATUS, 12$							      ; 0738
	BRW     32$				     ;32$								      ;
12$:	MOVAB   -192(R8), 4(SP)			     ;RSP_TEXT, POINTER							      ; 0745
	CLRL    (R8)				     ;RSP_LEN								      ; 0746
	PUSHL   R8				     ;R8								      ; 0747
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   #25				     ;#25								      ;
	PUSHAB  20(R11)				     ;P.AAF								      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   R8				     ;R8								      ; 0748
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  36(SP), -(SP)			     ;DEV_DESC, -(SP)							      ;
	PUSHL   44(SP)				     ;DEV_DESC+4							      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   R8				     ;R8								      ; 0749
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  28(SP), -(SP)			     ;DIR_DESC, -(SP)							      ;
	PUSHL   36(SP)				     ;DIR_DESC+4							      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	MOVAB   -192(R8), @8(AP)		     ;RSP_TEXT, @STRING_ADDRESS						      ; 0750
	MOVL    (R8), @12(AP)			     ;RSP_LEN, @STRING_LENGTH						      ; 0751
	BRB     19$				     ;19$								      ; 0752
13$:	PUSHL   SP				     ;SP								      ; 0761
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_DELETE_CMD, -(SP)		     ;GEN_DELETE_CMD, -(SP)						      ;
	PUSHL   W^GEN_DELETE_CMD+4		     ;GEN_DELETE_CMD+4							      ;
	BRB     17$				     ;17$								      ;
14$:	PUSHL   SP				     ;SP								      ; 0771
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_DIR_CMD, -(SP)		     ;GEN_DIR_CMD, -(SP)						      ;
	PUSHL   W^GEN_DIR_CMD+4			     ;GEN_DIR_CMD+4							      ;
	BRB     17$				     ;17$								      ;
15$:	TSTL    (R9)				     ;GEN_1SIZE								      ; 0782
	BGTR    16$				     ;16$								      ;
	PUSHL   SP				     ;SP								      ; 0785
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_USG_CMD, -(SP)		     ;GEN_USG_CMD, -(SP)						      ;
	PUSHL   W^GEN_USG_CMD+4			     ;GEN_USG_CMD+4							      ;
	BRW     27$				     ;27$								      ;
16$:	PUSHL   SP				     ;SP								      ; 0789
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_USG_ARG_CMD, -(SP)	     ;GEN_USG_ARG_CMD, -(SP)						      ;
	PUSHL   W^GEN_USG_ARG_CMD+4		     ;GEN_USG_ARG_CMD+4							      ;
17$:	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	BRW     26$				     ;26$								      ; 0791
18$:	MOVL    W^GEN_HELP_TEXT+4, @8(AP)	     ;GEN_HELP_TEXT+4, @STRING_ADDRESS					      ; 0802
	MOVZWL  W^GEN_HELP_TEXT, @12(AP)	     ;GEN_HELP_TEXT, @STRING_LENGTH					      ; 0803
19$:	BRB     23$				     ;23$								      ; 0804
20$:	PUSHL   SP				     ;SP								      ; 0813
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_REN_CMD, -(SP)		     ;GEN_REN_CMD, -(SP)						      ;
	PUSHL   W^GEN_REN_CMD+4			     ;GEN_REN_CMD+4							      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0814
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   (R9)				     ;GEN_1SIZE								      ;
	PUSHL   R10				     ;R10								      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0815
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   #1				     ;#1								      ;
	PUSHAB  48(R11)				     ;P.AAG								      ;
	BRB     25$				     ;25$								      ;
21$:	PUSHL   SP				     ;SP								      ; 0825
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_SEND_CMD, -(SP)		     ;GEN_SEND_CMD, -(SP)						      ;
	PUSHL   W^GEN_SEND_CMD+4		     ;GEN_SEND_CMD+4							      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0826
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   (R9)				     ;GEN_1SIZE								      ;
	PUSHL   R10				     ;R10								      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0827
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   #2				     ;#2								      ;
	PUSHAB  52(R11)				     ;P.AAH								      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0828
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   W^GEN_2SIZE			     ;GEN_2SIZE								      ;
	PUSHAB  W^GEN_2DATA			     ;GEN_2DATA								      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0829
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   #1				     ;#1								      ;
	PUSHAB  56(R11)				     ;P.AAI								      ;
	BRB     27$				     ;27$								      ;
22$:	MOVC5   (R9), (R10), #0, #132, W^FILE_NAME   ;GEN_1SIZE, GEN_1DATA, #0, #132, FILE_NAME				      ; 0838
	MOVL    (R9), W^FILE_SIZE		     ;GEN_1SIZE, FILE_SIZE						      ; 0839
23$:	MOVL    #134316043, R0			     ;#134316043, R0							      ; 0840
	RET     				     ;									      ;
24$:	PUSHL   SP				     ;SP								      ; 0849
	PUSHAB  8(SP)				     ;POINTER								      ;
	MOVZWL  W^GEN_WHO_CMD, -(SP)		     ;GEN_WHO_CMD, -(SP)						      ;
	PUSHL   W^GEN_WHO_CMD+4			     ;GEN_WHO_CMD+4							      ;
	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0850
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   (R9)				     ;GEN_1SIZE								      ;
	PUSHL   R10				     ;R10								      ;
25$:	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	PUSHL   SP				     ;SP								      ; 0851
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   W^GEN_2SIZE			     ;GEN_2SIZE								      ;
	PUSHAB  W^GEN_2DATA			     ;GEN_2DATA								      ;
	BRB     27$				     ;27$								      ;
26$:	PUSHL   SP				     ;SP								      ; 0856
	PUSHAB  8(SP)				     ;POINTER								      ;
	PUSHL   (R9)				     ;GEN_1SIZE								      ;
	PUSHL   R10				     ;R10								      ;
27$:	CALLS   #4, (R7)			     ;#4, CONCAT							      ;
	MOVW    (SP), -24(FP)			     ;COMMAND_LENGTH, COMMAND_DESC					      ; 0870
	MOVL    #51970052, -16(FP)		     ;#51970052, ITMLST							      ; 0871
	MOVAB   8(SP), -12(FP)			     ;OUR_PID, ITMLST+4							      ; 0872
	MOVAB   -8(FP), -8(FP)			     ;ITMLST+8, ITMLST+8						      ; 0873
	CLRL    -4(FP)				     ;ITMLST+12								      ; 0874
	CLRQ    -(SP)				     ;-(SP)								      ; 0875
	CLRL    -(SP)				     ;-(SP)								      ;
	PUSHAB  -16(FP)				     ;ITMLST								      ;
	CLRQ    -(SP)				     ;-(SP)								      ;
	CLRL    -(SP)				     ;-(SP)								      ;
	CALLS   #7, G^SYS$GETJPI		     ;#7, SYS$GETJPI							      ;
	MOVC5   #11, 60(R11), #0, #20, -244(FP)      ;#11, P.AAJ, #0, #20, MBX_NAME					      ; 0877
	MOVL    #17694728, -224(FP)		     ;#17694728, MBX_DESC						      ; 0880
	MOVAB   -233(FP), -220(FP)		     ;MBX_NAME+11, MBX_DESC+4						      ; 0881
	PUSHL   #8				     ;#8								      ; 0882
	PUSHAB  -224(FP)			     ;MBX_DESC								      ;
	PUSHAB  16(SP)				     ;OUR_PID								      ;
	CALLS   #3, G^OTS$CVT_L_TZ		     ;#3, OTS$CVT_L_TZ							      ;
	MOVW    #19, -224(FP)			     ;#19, MBX_DESC							      ; 0883
	MOVAB   -244(FP), -220(FP)		     ;MBX_NAME, MBX_DESC+4						      ; 0884
	PUSHAB  -224(FP)			     ;MBX_DESC								      ; 0885
	CLRQ    -(SP)				     ;-(SP)								      ;
	CLRQ    -(SP)				     ;-(SP)								      ;
	PUSHAB  32(SP)				     ;MBX_CHAN								      ;
	CLRL    -(SP)				     ;-(SP)								      ;
	CALLS   #7, G^SYS$CREMBX		     ;#7, SYS$CREMBX							      ;
	MOVL    R0, R6				     ;R0, STATUS							      ;
	BLBC    R6, 32$				     ;STATUS, 32$							      ; 0887
	MOVB    #58, -225(FP)			     ;#58, MBX_NAME+19							      ; 0894
	MOVW    #20, -224(FP)			     ;#20, MBX_DESC							      ; 0895
	MOVC5   #19, -244(FP), #0, #132, W^FILE_NAME ;#19, MBX_NAME, #0, #132, FILE_NAME				      ; 0896
	MOVL    #19, W^FILE_SIZE		     ;#19, FILE_SIZE							      ; 0897
	MOVL    #1, 16(SP)			     ;#1, FLAGS								      ; 0898
	PUSHL   12(SP)				     ;MBX_CHAN								      ; 0917
	CLRL    R1				     ;R1								      ; 0912
	CMPL    -480(R8), #3			     ;VMS_VERSION, #3							      ;
	BGTR    28$				     ;28$								      ;
	INCL    R1				     ;R1								      ;
	MOVAB   -26(R7), R0			     ;PROCESS_COMPLETION_AST, R0					      ;
	PUSHL   R0				     ;R0								      ;
	BRB     29$				     ;29$								      ;
28$:	CLRL    -(SP)				     ;-(SP)								      ;
29$:	CLRQ    -(SP)				     ;-(SP)								      ; 0899
	CLRQ    -(SP)				     ;-(SP)								      ;
	PUSHAB  40(SP)				     ;FLAGS								      ;
	PUSHAB  -224(FP)			     ;MBX_DESC								      ;
	BLBC    R1, 30$				     ;R1, 30$								      ; 0901
	CLRL    -(SP)				     ;-(SP)								      ;
	BRB     31$				     ;31$								      ;
30$:	MOVAB   80(R11), R0			     ;P.AAK, R0								      ; 0904
	PUSHL   R0				     ;R0								      ;
31$:	PUSHAB  -24(FP)				     ;COMMAND_DESC							      ; 0899
	CALLS   #10, G^LIB$SPAWN		     ;#10, LIB$SPAWN							      ;
	MOVL    R0, R6				     ;R0, STATUS							      ;
	BLBS    R6, 33$				     ;STATUS, 33$							      ; 0919
32$:	PUSHL   R6				     ;STATUS								      ;
	CALLS   #1, G^LIB$SIGNAL		     ;#1, LIB$SIGNAL							      ;
33$:	MOVL    R6, R0				     ;STATUS, R0							      ; 0921
	RET     				     ;									      ; 0922

; Routine Size:  989 bytes,    Routine Base:  $CODE$ + 012D


;   0923  1	
;   0924  1	%SBTTL 'SY_DISMISS - Sleep for N seconds'
;   0925  1	
;   0926  1	GLOBAL ROUTINE SY_DISMISS (SECONDS) : NOVALUE =
;   0927  1	
;   0928  1	!++
;   0929  1	! FUNCTIONAL DESCRIPTION:
;   0930  1	!
;   0931  1	!	This routine is called to cause KERMIT to sleep for the
;   0932  1	!	specified number of seconds.
;   0933  1	!
;   0934  1	! CALLING SEQUENCE:
;   0935  1	!
;   0936  1	!	SY_DISMISS(Number of seconds);
;   0937  1	!
;   0938  1	! INPUT PARAMETERS:
;   0939  1	!
;   0940  1	!	Number of seconds to sleep.
;   0941  1	!
;   0942  1	! IMPLICIT INPUTS:
;   0943  1	!
;   0944  1	!	None.
;   0945  1	!
;   0946  1	! OUTPUT PARAMETERS:
;   0947  1	!
;   0948  1	!	None.
;   0949  1	!
;   0950  1	! IMPLICIT OUTPUTS:
;   0951  1	!
;   0952  1	!	None.
;   0953  1	!
;   0954  1	! COMPLETION CODES:
;   0955  1	!
;   0956  1	!	None.
;   0957  1	!
;   0958  1	! SIDE EFFECTS:
;   0959  1	!
;   0960  1	!	None.
;   0961  1	!
;   0962  1	!--
;   0963  1	
;   0964  2	    BEGIN
;   0965  2	
;   0966  2	    LOCAL
;   0967  2		STATUS,
;   0968  2		TOTAL_TIME : VECTOR [2, LONG];		! Quad word for length of time to sleep
;   0969  2	
;   0970  2	    IF .SECONDS EQL 0 THEN RETURN KER_NORMAL;
;   0971  2	
;   0972  2	    TOTAL_TIME [0] = -.SECONDS*10*1000*1000;
;   0973  2	    TOTAL_TIME [1] = -1;
;   0974  2	    STATUS = $SETIMR (EFN = 1, DAYTIM = TOTAL_TIME);
;   0975  2	
;   0976  2	    IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
;   0977  2	
;   0978  2	    STATUS = $WAITFR (EFN = 1);
;   0979  2	
;   0980  2	    IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
;   0981  2	
;   0982  1	    END;					! End of SY_DISMISS(time)



	.EXTRN  SYS$SETIMR

	.ENTRY  SY_DISMISS, ^M<R2,R3>		     ;SY_DISMISS, Save R2,R3						      ; 0926
	MOVAB   G^LIB$SIGNAL, R3		     ;LIB$SIGNAL, R3							      ;
	SUBL2   #8, SP				     ;#8, SP								      ;
	TSTL    4(AP)				     ;SECONDS								      ; 0970
	BEQL    2$				     ;2$								      ;
	MULL3   #10000000, 4(AP), R0		     ;#10000000, SECONDS, R0						      ; 0972
	MNEGL   R0, (SP)			     ;R0, TOTAL_TIME							      ;
	MNEGL   #1, 4(SP)			     ;#1, TOTAL_TIME+4							      ; 0973
	CLRQ    -(SP)				     ;-(SP)								      ; 0974
	PUSHAB  8(SP)				     ;TOTAL_TIME							      ;
	PUSHL   #1				     ;#1								      ;
	CALLS   #4, G^SYS$SETIMR		     ;#4, SYS$SETIMR							      ;
	MOVL    R0, R2				     ;R0, STATUS							      ;
	BLBS    R2, 1$				     ;STATUS, 1$							      ; 0976
	PUSHL   R2				     ;STATUS								      ;
	CALLS   #1, (R3)			     ;#1, LIB$SIGNAL							      ;
1$:	PUSHL   #1				     ;#1								      ; 0978
	CALLS   #1, G^SYS$WAITFR		     ;#1, SYS$WAITFR							      ;
	MOVL    R0, R2				     ;R0, STATUS							      ;
	BLBS    R2, 2$				     ;STATUS, 2$							      ; 0980
	PUSHL   R2				     ;STATUS								      ;
	CALLS   #1, (R3)			     ;#1, LIB$SIGNAL							      ;
2$:	RET     				     ;									      ; 0982

; Routine Size:  79 bytes,    Routine Base:  $CODE$ + 050A


;   0983  1	
;   0984  1	%SBTTL 'SY_TIME - Return elapsed time'
;   0985  1	
;   0986  1	GLOBAL ROUTINE SY_TIME =
;   0987  1	
;   0988  1	!++
;   0989  1	! FUNCTIONAL DESCRIPTION:
;   0990  1	!
;   0991  1	!	This routine will return the elapsed time to the calling routine.
;   0992  1	!	This will allow for the calculation of the effective baud rate.
;   0993  1	!
;   0994  1	! CALLING SEQUENCE:
;   0995  1	!
;   0996  1	!	TIME = SY_TIME ();
;   0997  1	!
;   0998  1	! INPUT PARAMETERS:
;   0999  1	!
;   1000  1	!	None.
;   1001  1	!
;   1002  1	! IMPLICIT INPUTS:
;   1003  1	!
;   1004  1	!	None.
;   1005  1	!
;   1006  1	! OUTPUT PARAMETERS:
;   1007  1	!
;   1008  1	!	Time in milliseconds.
;   1009  1	!
;   1010  1	! IMPLICIT OUTPUTS:
;   1011  1	!
;   1012  1	!	None.
;   1013  1	!
;   1014  1	! COMPLETION CODES:
;   1015  1	!
;   1016  1	!	None.
;   1017  1	!
;   1018  1	! SIDE EFFECTS:
;   1019  1	!
;   1020  1	!	None.
;   1021  1	!
;   1022  1	!--
;   1023  1	
;   1024  2	    BEGIN
;   1025  2	!
;   1026  2	! Local storage
;   1027  2	!
;   1028  2	
;   1029  2	    LOCAL
;   1030  2		STATUS,					! Status returned by lower level
;   1031  2		TIMER_MILLI_SECONDS,			! Time in milliseconds
;   1032  2		TIMER_REMAINDER,			! Remainder on EDIV
;   1033  2		TIMER_VALUE : VECTOR [2, LONG],		! Quad word TIME value
;   1034  2		TEN_FOURTH : VECTOR [2, LONG],		! to hold 10**4
;   1035  2		TIMER_CODE;				! Type of TIMER request
;   1036  2	
;   1037  2	!
;   1038  2	! Set up the type of request we want (elapsed time)
;   1039  2	!
;   1040  2	    TIMER_CODE = 1;
;   1041  2	!
;   1042  2	! Get the elapsed time from VMS
;   1043  2	!
;   1044  2	    STATUS = LIB$STAT_TIMER (TIMER_CODE, TIMER_VALUE, TIMER_HANDLE);
;   1045  2	
;   1046  2	    IF NOT .STATUS THEN RETURN 0;
;   1047  2	
;   1048  2	!
;   1049  2	! Compute the LONG word value from the QUAD word given
;   1050  2	!
;   1051  2	    TEN_FOURTH [0] = 1000*10;
;   1052  2	    TEN_FOURTH [1] = 0;
;   1053  2	    STATUS = LIB$EDIV (TEN_FOURTH, TIMER_VALUE, TIMER_MILLI_SECONDS, TIMER_REMAINDER);
;   1054  2	
;   1055  2	    IF NOT .STATUS THEN RETURN 0;
;   1056  2	
;   1057  2	    RETURN .TIMER_MILLI_SECONDS;
;   1058  1	    END;					! End of SY_TIME





	.ENTRY  SY_TIME, ^M<>			     ;SY_TIME, Save nothing						      ; 0986
	SUBL2   #24, SP				     ;#24, SP								      ;
	PUSHL   #1				     ;#1								      ; 1040
	PUSHAB  W^U.6				     ;U.6								      ; 1044
	PUSHAB  24(SP)				     ;TIMER_VALUE							      ;
	PUSHAB  8(SP)				     ;TIMER_CODE							      ;
	CALLS   #3, G^LIB$STAT_TIMER		     ;#3, LIB$STAT_TIMER						      ;
	BLBC    R0, 1$				     ;STATUS, 1$							      ; 1046
	MOVZWL  #10000, 12(SP)			     ;#10000, TEN_FOURTH						      ; 1051
	CLRL    16(SP)				     ;TEN_FOURTH+4							      ; 1052
	PUSHAB  4(SP)				     ;TIMER_REMAINDER							      ; 1053
	PUSHAB  12(SP)				     ;TIMER_MILLI_SECONDS						      ;
	PUSHAB  28(SP)				     ;TIMER_VALUE							      ;
	PUSHAB  24(SP)				     ;TEN_FOURTH							      ;
	CALLS   #4, G^LIB$EDIV			     ;#4, LIB$EDIV							      ;
	BLBC    R0, 1$				     ;STATUS, 1$							      ; 1055
	MOVL    8(SP), R0			     ;TIMER_MILLI_SECONDS, R0						      ; 1057
	RET     				     ;									      ;
1$:	CLRL    R0				     ;R0								      ; 1058
	RET     				     ;									      ;

; Routine Size:  66 bytes,    Routine Base:  $CODE$ + 0559


;   1059  1	
;   1060  1	%SBTTL 'End of KERSYS.BLI'
;   1061  1	END						! End of module
;   1062  1	
;   1063  0	ELUDOM






;				       PSECT SUMMARY
;
;	Name			 Bytes			       Attributes
;
;  $OWN$			      484  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$			     1435  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;1	      9776        84         0       581          00:00.8
;  SYS$COMMON:[SYSLIB]TPAMAC.L32;1	        42         0         0        14          00:00.1







;					COMMAND QUALIFIERS

;	BLISS VMSSYS/LIST=VMSSYS.MAR/MACHINE_CODE=(ASSEM,NOBINARY,UNIQUE)/NOOBJECT/SOURCE=NOHEADER

; Compilation Complete

	.END
