home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / pub / vmskermit32 / vmssys.mar < prev    next >
Text File  |  2020-01-01  |  67KB  |  1,464 lines

  1. ;   0001  0    MODULE KERSYS (IDENT = '3.3.113',
  2. ;   0002  0        ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)
  3. ;   0003  0            ) =
  4. ;   0004  1    BEGIN
  5. ;   0005  1     
  6. ;   0006  1    !++
  7. ;   0007  1    ! FACILITY:
  8. ;   0008  1    !   KERMIT-32
  9. ;   0009  1    !
  10. ;   0010  1    ! ABSTRACT:
  11. ;   0011  1    !   KERMIT-32 is an implementation of the KERMIT protocal to allow the
  12. ;   0012  1    !   transfer of files from micro computers to the DECsystem-10, DECSYSTEM-20
  13. ;   0013  1    !   and now the VAX/VMS systems.
  14. ;   0014  1    !
  15. ;   0015  1    ! ENVIRONMENT:
  16. ;   0016  1    !   User mode
  17. ;   0017  1    !
  18. ;   0018  1    ! AUTHOR: Robert C. McQueen, Nick Bush, CREATION DATE: 24-January-1983
  19. ;   0019  1    !
  20. ;   0020  1    ! MODIFIED BY:
  21. ;   0021  1    !
  22. ;   0022  1    !--
  23. ;   0023  1     
  24. ;   0024  1     %SBTTL 'Table of Contents'
  25. ;   0025  1     %SBTTL 'Revision History'
  26. ;   0026  1     
  27. ;   0027  1    !++
  28. ;   0028  1    !
  29. ;   0029  1    ! 2.0.032    By: Nick Bush            On: 25-Feb-1984
  30. ;   0030  1    !        Add code for LOCAL and REMOTE commands.  These depend
  31. ;   0031  1    !        upon support in KERMSG and KERSYS.
  32. ;   0032  1    !
  33. ;   0033  1    ! 3.0.045    Start of version 3.
  34. ;   0034  1    !
  35. ;   0035  1    ! 3.1.057    By: Nick Bush                On: 21-Feb-1985
  36. ;   0036  1    !        Determine VMS version on startup and remember for later
  37. ;   0037  1    !        use.  Use it in KERSYS to determine whether we will need
  38. ;   0038  1    !        to force an end-of-file on the mailbox when the subprocess
  39. ;   0039  1    !        on the other end goes away.
  40. ;   0040  1    !
  41. ;   0041  1    ! 3.1.064    By: Nick Bush                On: 30-March-1985
  42. ;   0042  1    !        Fix LIB$SPAWN call to set SYS$INPUT for the subprocess
  43. ;   0043  1    !        to be NLA0: so that it doesn't try to input from the
  44. ;   0044  1    !        terminal.
  45. ;   0045  1    !
  46. ;   0046  1    ! 3.1.066    By: Nick Bush                On: 22-April-1985
  47. ;   0047  1    !        Don't use NLA0: as SYS$INPUT when spawning things under VMS 3.
  48. ;   0048  1    !
  49. ;   0049  1    ! Start of version 3.3
  50. ;   0050  1    !
  51. ;   0051  1    ! 3.3.101    By: Robert McQueen            On: 2-July-1986
  52. ;   0052  1    !        Change from $TRNLOG system service calls to LIB$SYS_TRNLOG
  53. ;   0053  1    !        library routine calls.
  54. ;   0054  1    !
  55. ;   0055  1    ! 3.3.108    By: Antonino N. Mione            On: 8-Sep-1986
  56. ;   0056  1    !        Make KERMIT-32 close the terminal (so the terminal
  57. ;   0057  1    !        parameters are appropriately reset) upon reciept of 
  58. ;   0058  1    !        a GENERIC LOGOUT packet.
  59. ;   0059  1    !
  60. ;   0060  1    ! 3.3.113    JHW0002        Jonathan Welch,        5-May-1988 11:48
  61. ;   0061  1    !        Modified SY_TIME to use $GETTIM as opposed to the LIB$timer
  62. ;   0062  1    !        routines (which broke when their method of calculating
  63. ;   0063  1    !        time differences changed in V4.4?).
  64. ;   0064  1    !
  65. ;   0065  1    !        Removed the call to LIB$INIT_TIMER in SY_INIT.
  66. ;   0066  1    !--
  67. ;   0067  1     
  68. ;   0068  1     %SBTTL 'Include files'
  69. ;   0069  1    !
  70. ;   0070  1    ! INCLUDE FILES:
  71. ;   0071  1    !
  72. ;   0072  1     
  73. ;   0073  1    LIBRARY 'SYS$LIBRARY:STARLET';
  74. ;   0074  1     
  75. ;   0075  1    LIBRARY 'SYS$LIBRARY:TPAMAC';
  76. ;   0076  1     
  77. ;   0077  1    REQUIRE 'KERCOM';                ! Common definitions
  78. ;   0286  1     
  79. ;   0287  1    REQUIRE 'KERERR';                ! Error message symbol definitions
  80. ;   0353  1     
  81. ;   0354  1     %SBTTL 'Storage -- Local'
  82. ;   0355  1    !
  83. ;   0356  1    ! OWN STORAGE:
  84. ;   0357  1    !
  85. ;   0358  1     
  86. ;   0359  1    OWN
  87. ;   0360  1        VMS_VERSION,                ! Major version number of VMS
  88. ;   0361  1        ORG_DEFAULT_DIR_TEXT : VECTOR [MAX_FILE_NAME, BYTE],    ! Text of default dir
  89. ;   0362  1        ORG_DEFAULT_DIR : BLOCK [8, BYTE],        ! Original default directory
  90. ;   0363  1        ORG_DEFAULT_DEV_TEXT : VECTOR [MAX_FILE_NAME, BYTE],    ! Text of default device
  91. ;   0364  1        ORG_DEFAULT_DEV : BLOCK [8, BYTE],        ! Descriptor for orginal default device
  92. ;   0365  1        Subtrahend : VECTOR [2, LONG];        ! Constant to subtract from system time.
  93. ;   0366  1     
  94. ;   0367  1    !<BLF/FORMAT>
  95. ;   0368  1     %SBTTL 'External routines'
  96. ;   0369  1    !
  97. ;   0370  1    ! EXTERNAL REFERENCES:
  98. ;   0371  1    !
  99. ;   0372  1     
  100. ;   0373  1    EXTERNAL ROUTINE
  101. ;   0374  1    !
  102. ;   0375  1    ! Library routines
  103. ;   0376  1    !
  104. ;   0377  1        LIB$EDIV : ADDRESSING_MODE (GENERAL),
  105. ;   0378  1        LIB$SET_LOGICAL : ADDRESSING_MODE (GENERAL),
  106. ;   0379  1        LIB$SIGNAL : ADDRESSING_MODE (GENERAL) NOVALUE,
  107. ;   0380  1        LIB$SPAWN : ADDRESSING_MODE (GENERAL),
  108. ;   0381  1        LIB$SUBX : ADDRESSING_MODE (GENERAL),
  109. ;   0382  1        OTS$CVT_L_TZ : ADDRESSING_MODE (GENERAL) NOVALUE,
  110. ;   0383  1        SYS$SETDDIR : ADDRESSING_MODE (GENERAL),
  111. ;   0384  1        SYS$GETTIM : ADDRESSING_MODE (GENERAL),
  112. ;   0385  1    !
  113. ;   0386  1    ! KERTRM - Terminal handling routines
  114. ;   0387  1    !
  115. ;   0388  1        TERM_CLOSE,                    ! Close terminal and restore characteristics
  116. ;   0389  1     
  117. ;   0390  1    !
  118. ;   0391  1    ! KERTT - Text processing
  119. ;   0392  1    !
  120. ;   0393  1        TT_INIT : NOVALUE,                ! Initialization routine
  121. ;   0394  1        TT_TEXT : NOVALUE,                ! Output a text string
  122. ;   0395  1        TT_NUMBER : NOVALUE,            ! Output a number
  123. ;   0396  1        TT_CHAR : NOVALUE,                ! Output a single character
  124. ;   0397  1        TT_OUTPUT : NOVALUE,            ! Routine to dump the current
  125. ;   0398  1                                !  text line.
  126. ;   0399  1        TT_CRLF : NOVALUE;                ! Output the line
  127. ;   0400  1     
  128. ;   0401  1     %SBTTL 'External storage'
  129. ;   0402  1    !
  130. ;   0403  1    ! EXTERNAL Storage:
  131. ;   0404  1    !
  132. ;   0405  1     
  133. ;   0406  1    EXTERNAL
  134. ;   0407  1    !
  135. ;   0408  1    ! KERMSG storage
  136. ;   0409  1    !
  137. ;   0410  1        GEN_1DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Data for generic command
  138. ;   0411  1        GEN_1SIZE,                    ! Size of data in GEN_1DATA
  139. ;   0412  1        GEN_2DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Second argument for generic command
  140. ;   0413  1        GEN_2SIZE,                    ! Size of data in GEN_2DATA
  141. ;   0414  1        GEN_3DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Third arg for generic command
  142. ;   0415  1        GEN_3SIZE,                    ! Size of data in GEN_3DATA
  143. ;   0416  1    !
  144. ;   0417  1    ! Misc constants.
  145. ;   0418  1    !
  146. ;   0419  1        FILE_SIZE,                    ! Number of characters in FILE_NAME
  147. ;   0420  1        FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)];
  148. ;   0421  1     
  149. ;   0422  1     %SBTTL 'SY_INIT - Initialize KERSYS'
  150. ;   0423  1     
  151. ;   0424  1    GLOBAL ROUTINE SY_INIT : NOVALUE =
  152. ;   0425  1     
  153. ;   0426  1    !++
  154. ;   0427  1    ! FUNCTIONAL DESCRIPTION:
  155. ;   0428  1    !
  156. ;   0429  1    ! This routine will initialize the module KERSYS.
  157. ;   0430  1    !
  158. ;   0431  1    ! CALLING SEQUENCE:
  159. ;   0432  1    !
  160. ;   0433  1    !    SY_INIT ();
  161. ;   0434  1    !
  162. ;   0435  1    ! INPUT PARAMETERS:
  163. ;   0436  1    !
  164. ;   0437  1    !    None.
  165. ;   0438  1    !
  166. ;   0439  1    ! IMPLICIT INPUTS:
  167. ;   0440  1    !
  168. ;   0441  1    !    None.
  169. ;   0442  1    !
  170. ;   0443  1    ! OUPTUT PARAMETERS:
  171. ;   0444  1    !
  172. ;   0445  1    !    None.
  173. ;   0446  1    !
  174. ;   0447  1    ! IMPLICIT OUTPUTS:
  175. ;   0448  1    !
  176. ;   0449  1    !    None.
  177. ;   0450  1    !
  178. ;   0451  1    ! COMPLETION CODES:
  179. ;   0452  1    !
  180. ;   0453  1    !    None.
  181. ;   0454  1    !
  182. ;   0455  1    ! SIDE EFFECTS:
  183. ;   0456  1    !
  184. ;   0457  1    !    KERSYS storage initialized
  185. ;   0458  1    !
  186. ;   0459  1    !--
  187. ;   0460  1     
  188. ;   0461  2        BEGIN
  189. ;   0462  2     
  190. ;   0463  2        LITERAL
  191. ;   0464  2        SYI_EFN = 10;                ! EFN to use for $GETSYI
  192. ;   0465  2     
  193. ;   0466  2        LOCAL
  194. ;   0467  2        VERSION_STRING : VECTOR [8, BYTE],  ! Return version string here
  195. ;   0468  2        VERSION_LENGTH,                ! And length here
  196. ;   0469  2        SYI_ITEM_LIST : BLOCK [16, BYTE],   ! Argument list for $GETSYI
  197. ;   0470  2        LENGTH,                    ! Length of default dir returned
  198. ;   0471  2        STATUS;
  199. ;   0472  2     
  200. ;   0473  2        EXTERNAL ROUTINE
  201. ;   0474  2        LIB$SYS_TRNLOG : ADDRESSING_MODE(GENERAL);
  202. ;   0475  2     
  203. ;   0476  2    !
  204. ;   0477  2    ! Set up arg list for $GETSYI
  205. ;   0478  2    !
  206. ;   0479  2        SYI_ITEM_LIST [0, 0, 16, 0] = 8;    ! We expect an 8-byte string
  207. ;   0480  2        SYI_ITEM_LIST [2, 0, 16, 0] = SYI$_VERSION; ! Want the VMS version
  208. ;   0481  2        SYI_ITEM_LIST [4, 0, 32, 0] = VERSION_STRING; ! Put it here
  209. ;   0482  2        SYI_ITEM_LIST [8, 0, 32, 0] = VERSION_LENGTH; ! Length goes here
  210. ;   0483  2        SYI_ITEM_LIST [12, 0, 32, 0] = 0;    ! End the list
  211. ;   0484  2        STATUS = $GETSYI (EFN=SYI_EFN, ITMLST=SYI_ITEM_LIST); ! Get the data
  212. ;   0485  2        IF NOT .STATUS            ! If we can't get the version
  213. ;   0486  2        THEN
  214. ;   0487  2        VMS_VERSION = 0        ! Assume very old VMS?
  215. ;   0488  2        ELSE
  216. ;   0489  3        BEGIN
  217. ;   0490  3        STATUS = $WAITFR (EFN=SYI_EFN);    ! Wait for completion
  218. ;   0491  3        IF .STATUS            ! If we got it
  219. ;   0492  3        THEN
  220. ;   0493  4            BEGIN
  221. ;   0494  4            IF .VERSION_STRING [0] GEQ %C'0' AND
  222. ;   0495  4            .VERSION_STRING [0] LEQ %C'9'    ! If first character is numeric
  223. ;   0496  4            THEN
  224. ;   0497  4            VMS_VERSION = (.VERSION_STRING[0] - %C'0')*10    ! save first digit
  225. ;   0498  4            ELSE
  226. ;   0499  4            VMS_VERSION = 0;        ! No first digit, store 0
  227. ;   0500  4            VMS_VERSION = .VMS_VERSION + .VERSION_STRING[1] - %C'0' ! Get rest of version
  228. ;   0501  4            END
  229. ;   0502  3        ELSE
  230. ;   0503  3            VMS_VERSION = 0;        ! Can't get version?
  231. ;   0504  2        END;
  232. ;   0505  2    !
  233. ;   0506  2    ! Set up original default directory
  234. ;   0507  2    !
  235. ;   0508  2        ORG_DEFAULT_DIR [DSC$B_CLASS] = DSC$K_CLASS_S;
  236. ;   0509  2        ORG_DEFAULT_DIR [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  237. ;   0510  2        ORG_DEFAULT_DIR [DSC$W_LENGTH] = MAX_FILE_NAME;
  238. ;   0511  2        ORG_DEFAULT_DIR [DSC$A_POINTER] = ORG_DEFAULT_DIR_TEXT;
  239. ;   0512  2        STATUS = SYS$SETDDIR (0, LENGTH, ORG_DEFAULT_DIR);
  240. ;   0513  2     
  241. ;   0514  2        IF .STATUS THEN ORG_DEFAULT_DIR [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DIR [DSC$W_LENGTH] = 0;
  242. ;   0515  2    !
  243. ;   0516  2    ! Get original default device
  244. ;   0517  2    !
  245. ;   0518  2        ORG_DEFAULT_DEV [DSC$B_CLASS] = DSC$K_CLASS_S;
  246. ;   0519  2        ORG_DEFAULT_DEV [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  247. ;   0520  2        ORG_DEFAULT_DEV [DSC$W_LENGTH] = MAX_FILE_NAME;
  248. ;   0521  2        ORG_DEFAULT_DEV [DSC$A_POINTER] = ORG_DEFAULT_DEV_TEXT;
  249. ;   0522  2        STATUS = LIB$SYS_TRNLOG (%ASCID'SYS$DISK', LENGTH, ORG_DEFAULT_DEV);
  250. ;   0523  2     
  251. ;   0524  2        IF .STATUS EQL SS$_NOTRAN            ! No translation?
  252. ;   0525  2        THEN
  253. ;   0526  2        LENGTH = 0;                ! Yes, set the length to zero
  254. ;   0527  2        IF .STATUS THEN ORG_DEFAULT_DEV [DSC$W_LENGTH] = .LENGTH ELSE ORG_DEFAULT_DEV [DSC$W_LENGTH] = 0;
  255. ;   0528  2     
  256. ;   0529  1        END;                    ! End of SY_INIT
  257.  
  258.  
  259.     .TITLE  KERSYS
  260.     .IDENT  \3.3.113\
  261.  
  262.     .PSECT  $OWN$,NOEXE,2
  263.  
  264. ;VMS_VERSION
  265. U.1:    .BLKB   4                                       ;                      00000
  266. ;ORG_DEFAULT_DIR_TEXT
  267. U.2:    .BLKB   132                                       ;                      00004
  268. ;ORG_DEFAULT_DIR
  269. U.3:    .BLKB   8                                       ;                      00088
  270. ;ORG_DEFAULT_DEV_TEXT
  271. U.4:    .BLKB   132                                       ;                      00090
  272. ;ORG_DEFAULT_DEV
  273. U.5:    .BLKB   8                                       ;                      00114
  274. ;SUBTRAHEND
  275. U.6:    .BLKB   8                                       ;                      0011C
  276.  
  277.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  278.  
  279. P.AAB:    .ASCII  \SYS$DISK\             ;                                4B  53  49  44  24  53  59  53  00000
  280. P.AAA:    .LONG   17694728             ;                                              010E0008  00008
  281.     .ADDRESS P.AAB                 ;                                              00000000' 0000C
  282.  
  283. FNM_NORMAL==        1
  284. FNM_FULL==        2
  285. FNM_UNTRAN==        4
  286. PR_MIN==        0
  287. PR_NONE==        0
  288. PR_MARK==        1
  289. PR_EVEN==        2
  290. PR_ODD==        3
  291. PR_SPACE==        4
  292. PR_MAX==        4
  293. GC_MIN==        1
  294. GC_EXIT==        1
  295. GC_DIRECTORY==        2
  296. GC_DISK_USAGE==     3
  297. GC_DELETE==        4
  298. GC_TYPE==        5
  299. GC_HELP==        6
  300. GC_LOGOUT==        7
  301. GC_LGN==        8
  302. GC_CONNECT==        9
  303. GC_RENAME==        10
  304. GC_COPY==        11
  305. GC_WHO==        12
  306. GC_SEND_MSG==        13
  307. GC_STATUS==        14
  308. GC_COMMAND==        15
  309. GC_KERMIT==        16
  310. GC_JOURNAL==        17
  311. GC_VARIABLE==        18
  312. GC_PROGRAM==        19
  313. GC_MAX==        19
  314. DP_FULL==        0
  315. DP_HALF==        1
  316. CHK_1CHAR==        49
  317. CHK_2CHAR==        50
  318. CHK_CRC==        51
  319. MAX_MSG==        1002
  320.     .EXTRN  LIB$EDIV, LIB$SET_LOGICAL, LIB$SIGNAL, LIB$SPAWN, LIB$SUBX, OTS$CVT_L_TZ, SYS$SETDDIR
  321.     .EXTRN  SYS$GETTIM, TERM_CLOSE, TT_INIT, TT_TEXT, TT_NUMBER, TT_CHAR, TT_OUTPUT, TT_CRLF, GEN_1DATA
  322.     .EXTRN  GEN_1SIZE, GEN_2DATA, GEN_2SIZE, GEN_3DATA, GEN_3SIZE, FILE_SIZE, FILE_NAME, LIB$SYS_TRNLOG
  323.     .EXTRN  SYS$GETSYI, SYS$WAITFR
  324.  
  325.     .PSECT  $CODE$,NOWRT,2
  326.  
  327.     .ENTRY  SY_INIT, ^M<R2>             ;SY_INIT, Save R2               0424                    0004   00000
  328.     MOVAB   G^U.1, R2             ;U.1, R2                                     52 00000000'  00  9E   00002
  329.     SUBL2   #32, SP                 ;#32, SP                                     5E         20  C2   00009
  330.     MOVL    #268435464, 8(SP)         ;#268435464, SYI_ITEM_LIST           0480       08   AE 10000008   8F  D0   0000C
  331.     MOVAB   24(SP), 12(SP)             ;VERSION_STRING, SYI_ITEM_LIST+4      0481       0C   AE    18   AE  9E   00014
  332.     MOVAB   (SP), 16(SP)             ;VERSION_LENGTH, SYI_ITEM_LIST+8      0482       10   AE         6E  9E   00019
  333.     CLRL    20(SP)                 ;SYI_ITEM_LIST+12               0483             14   AE  D4   0001D
  334.     CLRQ    -(SP)                 ;-(SP)                       0484                  7E  7C   00020
  335.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00022
  336.     PUSHAB  20(SP)                 ;SYI_ITEM_LIST                                      14   AE  9F   00024
  337.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   00027
  338.     PUSHL   #10                 ;#10                                               0A  DD   00029
  339.     CALLS   #7, G^SYS$GETSYI         ;#7, SYS$GETSYI                      00000000G  00         07  FB   0002B
  340.     BLBC    R0, 3$                 ;STATUS, 3$                   0485            34         50  E9   00032
  341.     PUSHL   #10                 ;#10                       0490                  0A  DD   00035
  342.     CALLS   #1, G^SYS$WAITFR         ;#1, SYS$WAITFR                      00000000G  00         01  FB   00037
  343.     BLBC    R0, 3$                 ;STATUS, 3$                   0491            28         50  E9   0003E
  344.     CMPB    24(SP), #48             ;VERSION_STRING, #48               0494            30    18   AE  91   00041
  345.     BLSSU   1$                 ;1$                                               13  1F   00045
  346.     CMPB    24(SP), #57             ;VERSION_STRING, #57               0495            39    18   AE  91   00047
  347.     BGTRU   1$                 ;1$                                               0D  1A   0004B
  348.     MOVZBL  24(SP), R1             ;VERSION_STRING, R1               0497            51    18   AE  9A   0004D
  349.     SUBL2   #48, R1                 ;#48, R1                                     51         30  C2   00051
  350.     MULL3   #10, R1, (R2)             ;#10, R1, VMS_VERSION                                 51         0A  C5   00054
  351.                          ;                                         62       00057
  352.     BRB     2$                 ;2$                                               02  11   00058
  353. 1$:    CLRL    (R2)                 ;VMS_VERSION                   0499                  62  D4   0005A
  354. 2$:    MOVZBL  25(SP), R1             ;VERSION_STRING+1, R1               0500            51    19   AE  9A   0005C
  355.     ADDL2   (R2), R1             ;VMS_VERSION, R1                                 51         62  C0   00060
  356.     MOVAB   -48(R1), (R2)             ;-48(R1), VMS_VERSION                                 62    D0   A1  9E   00063
  357.     BRB     4$                 ;4$                                               02  11   00067
  358. 3$:    CLRL    (R2)                 ;VMS_VERSION                   0503                  62  D4   00069
  359. 4$:    MOVL    #17694852, 136(R2)         ;#17694852, ORG_DEFAULT_DIR           0510     0088   C2 010E0084   8F  D0   0006B
  360.     MOVAB   4(R2), 140(R2)             ;ORG_DEFAULT_DIR_TEXT, -           0511     008C   C2    04   A2  9E   00074
  361.                          ;ORG_DEFAULT_DIR+4
  362.     PUSHAB  136(R2)                 ;ORG_DEFAULT_DIR               0512               0088   C2  9F   0007A
  363.     PUSHAB  8(SP)                 ;LENGTH                                      08   AE  9F   0007E
  364.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00081
  365.     CALLS   #3, G^SYS$SETDDIR         ;#3, SYS$SETDDIR                      00000000G  00         03  FB   00083
  366.     BLBC    R0, 5$                 ;STATUS, 5$                   0514            08         50  E9   0008A
  367.     MOVW    4(SP), 136(R2)             ;LENGTH, ORG_DEFAULT_DIR                      0088   C2    04   AE  B0   0008D
  368.     BRB     6$                 ;6$                                               04  11   00093
  369. 5$:    CLRW    136(R2)                 ;ORG_DEFAULT_DIR                                    0088   C2  B4   00095
  370. 6$:    MOVL    #17694852, 276(R2)         ;#17694852, ORG_DEFAULT_DEV           0520     0114   C2 010E0084   8F  D0   00099
  371.     MOVAB   144(R2), 280(R2)         ;ORG_DEFAULT_DEV_TEXT, -           0521     0118   C2     0090   C2  9E   000A2
  372.                          ;ORG_DEFAULT_DEV+4
  373.     PUSHAB  276(R2)                 ;ORG_DEFAULT_DEV               0522               0114   C2  9F   000A9
  374.     PUSHAB  8(SP)                 ;LENGTH                                      08   AE  9F   000AD
  375.     PUSHAB  G^P.AAA                 ;P.AAA                                        00000000'  00  9F   000B0
  376.     CALLS   #3, G^LIB$SYS_TRNLOG         ;#3, LIB$SYS_TRNLOG                      00000000G  00         03  FB   000B6
  377.     CMPL    R0, #1577             ;STATUS, #1577                   0524 00000629   8F         50  D1   000BD
  378.     BNEQ    7$                 ;7$                                               03  12   000C4
  379.     CLRL    4(SP)                 ;LENGTH                   0526             04   AE  D4   000C6
  380. 7$:    BLBC    R0, 8$                 ;STATUS, 8$                   0527            07         50  E9   000C9
  381.     MOVW    4(SP), 276(R2)             ;LENGTH, ORG_DEFAULT_DEV                      0114   C2    04   AE  B0   000CC
  382.     RET                      ;                                               04   000D2
  383. 8$:    CLRW    276(R2)                 ;ORG_DEFAULT_DEV                                    0114   C2  B4   000D3
  384.     RET                      ;                       0529                  04   000D7
  385.  
  386. ; Routine Size:  216 bytes,    Routine Base:  $CODE$ + 0000
  387.  
  388.  
  389. ;   0530  1     
  390. ;   0531  1     %SBTTL 'SY_LOGOUT - delete the process.'
  391. ;   0532  1     
  392. ;   0533  1    GLOBAL ROUTINE SY_LOGOUT : NOVALUE =
  393. ;   0534  1     
  394. ;   0535  1    !++
  395. ;   0536  1    ! FUNCTIONAL DESCRIPTION:
  396. ;   0537  1    !
  397. ;   0538  1    !    This routine will delete this process.
  398. ;   0539  1    !
  399. ;   0540  1    ! CALLING SEQUENCE:
  400. ;   0541  1    !
  401. ;   0542  1    !    SY_LOGOUT ();
  402. ;   0543  1    !
  403. ;   0544  1    ! INPUT PARAMETERS:
  404. ;   0545  1    !
  405. ;   0546  1    !    None.
  406. ;   0547  1    !
  407. ;   0548  1    ! IMPLICIT INPUTS:
  408. ;   0549  1    !
  409. ;   0550  1    !    None.
  410. ;   0551  1    !
  411. ;   0552  1    ! OUTPUT PARAMETERS:
  412. ;   0553  1    !
  413. ;   0554  1    !    None.
  414. ;   0555  1    !
  415. ;   0556  1    ! IMPLICIT OUTPUTS:
  416. ;   0557  1    !
  417. ;   0558  1    !    None.
  418. ;   0559  1    !
  419. ;   0560  1    ! COMPLETION CODES:
  420. ;   0561  1    !
  421. ;   0562  1    !    None.
  422. ;   0563  1    !
  423. ;   0564  1    ! SIDE EFFECTS:
  424. ;   0565  1    !
  425. ;   0566  1    !    None.
  426. ;   0567  1    !
  427. ;   0568  1    !--
  428. ;   0569  1     
  429. ;   0570  2        BEGIN
  430. ;   0571  2        TERM_CLOSE();                ![108] Close the terminal early
  431. ;   0572  2        $DELPRC ();
  432. ;   0573  1        END;                    ! End of SY_LOGOUT
  433.  
  434.  
  435.  
  436.     .EXTRN  SYS$DELPRC
  437.  
  438.     .ENTRY  SY_LOGOUT, ^M<>             ;SY_LOGOUT, Save nothing           0533                    0000   00000
  439.     CALLS   #0, G^TERM_CLOSE         ;#0, TERM_CLOSE               0571 00000000G  00         00  FB   00002
  440.     CLRQ    -(SP)                 ;-(SP)                       0572                  7E  7C   00009
  441.     CALLS   #2, G^SYS$DELPRC         ;#2, SYS$DELPRC                      00000000G  00         02  FB   0000B
  442.     RET                      ;                       0573                  04   00012
  443.  
  444. ; Routine Size:  19 bytes,    Routine Base:  $CODE$ + 00D8
  445.  
  446.  
  447. ;   0574  1     
  448. ;   0575  1     %SBTTL 'SY_GENERIC - Perform a generic command'
  449. ;   0576  1     
  450. ;   0577  1    GLOBAL ROUTINE SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN) =
  451. ;   0578  1     
  452. ;   0579  1    !++
  453. ;   0580  1    ! FUNCTIONAL DESCRIPTION:
  454. ;   0581  1    !
  455. ;   0582  1    ! This routine will perform a generic command.
  456. ;   0583  1    !
  457. ;   0584  1    ! CALLING SEQUENCE:
  458. ;   0585  1    !
  459. ;   0586  1    !    SY_GENERIC (GCMD_TYPE, STRING_ADDRESS, STRING_LENGTH, GET_CHR_RTN);
  460. ;   0587  1    !
  461. ;   0588  1    ! INPUT PARAMETERS:
  462. ;   0589  1    !
  463. ;   0590  1    !    GCMD_TYPE - GC_xxx value for command to be performed
  464. ;   0591  1    !    STRING_ADDRESS - Place to return address of string result
  465. ;   0592  1    !    STRING_LENGTH - Place to return length of string result
  466. ;   0593  1    !    GET_CHR_RTN - Place to return address of a get a character routine
  467. ;   0594  1    !
  468. ;   0595  1    ! IMPLICIT INPUTS:
  469. ;   0596  1    !
  470. ;   0597  1    !    None.
  471. ;   0598  1    !
  472. ;   0599  1    ! OUTPUT PARAMETERS:
  473. ;   0600  1    !
  474. ;   0601  1    !    Returns KER_xxx status
  475. ;   0602  1    !
  476. ;   0603  1    ! IMPLICIT OUTPUTS:
  477. ;   0604  1    !
  478. ;   0605  1    !    None.
  479. ;   0606  1    !
  480. ;   0607  1    ! COMPLETION CODES:
  481. ;   0608  1    !
  482. ;   0609  1    !    None.
  483. ;   0610  1    !
  484. ;   0611  1    ! SIDE EFFECTS:
  485. ;   0612  1    !
  486. ;   0613  1    !    None.
  487. ;   0614  1    !
  488. ;   0615  1    !--
  489. ;   0616  1     
  490. ;   0617  2        BEGIN
  491. ;   0618  2     
  492. ;   0619  2        LITERAL
  493. ;   0620  2        MAX_CMD_LEN = 2*MAX_MSG,        ! Max command length
  494. ;   0621  2        MAX_MBX_LEN = 20;            ! Max mailbox name length
  495. ;   0622  2     
  496. ;   0623  2        OWN
  497. ;   0624  2        RSP_TEXT : VECTOR [MAX_CMD_LEN, BYTE],    ! Return text
  498. ;   0625  2        RSP_LEN;                ! Length of return text
  499. ;   0626  2     
  500. ;   0627  2        LOCAL
  501. ;   0628  2        STATUS,                    ! Status results
  502. ;   0629  2        FLAGS,                    ! Flag word for LIB$SPAWN
  503. ;   0630  2        OUR_PID,                ! Our PID value
  504. ;   0631  2        ITMLST : VECTOR [4, LONG],        ! GETJPI argument
  505. ;   0632  2        POINTER,                ! Character pointer
  506. ;   0633  2        MBX_CHAN,                ! Channel for mail box
  507. ;   0634  2        COMMAND_LENGTH,                ! Length of command string
  508. ;   0635  2        COMMAND_DESC : BLOCK [8, BYTE],        ! Descriptor for command string
  509. ;   0636  2        COMMAND_STR : VECTOR [MAX_CMD_LEN, BYTE],    ! Actual command string
  510. ;   0637  2        MBX_DESC : BLOCK [8, BYTE],        ! Mailbox equivalence name
  511. ;   0638  2        MBX_NAME : VECTOR [MAX_MBX_LEN, BYTE];    ! Storage for MBX name
  512. ;   0639  2     
  513. ;   0640  2        ROUTINE PROCESS_COMPLETION_AST (MBX_CHAN) =
  514. ;   0641  2    !
  515. ;   0642  2    ! This routine is called upon process completion (of the process we spawned
  516. ;   0643  2    ! to perform the command).  It will ensure that the mailbox gets an end-of-file.
  517. ;   0644  2    !
  518. ;   0645  3        BEGIN
  519. ;   0646  3        RETURN $QIO (CHAN = .MBX_CHAN, FUNC = IO$_WRITEOF);    ! Write the EOF
  520. ;   0647  2        END;
  521.  
  522.  
  523.  
  524.     .PSECT  $OWN$,NOEXE,2
  525.  
  526. ;RSP_TEXT
  527. U.10:    .BLKB   2004                                       ;                      00124
  528. ;RSP_LEN
  529. U.11:    .BLKB   4                                       ;                      008F8
  530.  
  531.     .EXTRN  SYS$QIO
  532.  
  533.     .PSECT  $CODE$,NOWRT,2
  534.  
  535. ;PROCESS_COMPLETION_AST
  536. U.12:    .WORD   ^M<>                 ;Save nothing                   0640                    0000   00000
  537.     CLRQ    -(SP)                 ;-(SP)                       0646                  7E  7C   00002
  538.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   00004
  539.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   00006
  540.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   00008
  541.     MOVQ    #40, -(SP)             ;#40, -(SP)                                     7E         28  7D   0000A
  542.     PUSHL   4(AP)                 ;MBX_CHAN                                      04   AC  DD   0000D
  543.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00010
  544.     CALLS   #12, G^SYS$QIO             ;#12, SYS$QIO                          00000000G  00         0C  FB   00012
  545.     RET                      ;                                               04   00019
  546.  
  547. ; Routine Size:  26 bytes,    Routine Base:  $CODE$ + 00EB
  548.  
  549.  
  550. ;   0648  2        ROUTINE CONCAT (SRC_ADR, SRC_LEN, DST_PTR, DST_LEN) : NOVALUE =
  551. ;   0649  2    !
  552. ;   0650  2    ! This routine is called to concatenate a string onto the current string
  553. ;   0651  2    !
  554. ;   0652  3        BEGIN
  555. ;   0653  3     
  556. ;   0654  3        LOCAL
  557. ;   0655  3            LENGTH;                ! Length we will actually move
  558. ;   0656  3     
  559. ;   0657  3        LENGTH = .SRC_LEN;            ! Get total length
  560. ;   0658  3     
  561. ;   0659  3        IF .LENGTH GTR MAX_CMD_LEN - ..DST_LEN THEN LENGTH = MAX_CMD_LEN - ..DST_LEN;
  562. ;   0660  3     
  563. ;   0661  3        CH$MOVE (.LENGTH, CH$PTR (.SRC_ADR), ..DST_PTR);
  564. ;   0662  3        .DST_PTR = CH$PLUS (.LENGTH, ..DST_PTR);
  565. ;   0663  3        .DST_LEN = ..DST_LEN + .LENGTH;        ! Update length
  566. ;   0664  2        END;
  567.  
  568.  
  569.  
  570.  
  571.  
  572. ;CONCAT
  573. U.13:    .WORD   ^M<R2,R3,R4,R5,R6,R7>         ;Save R2,R3,R4,R5,R6,R7           0648                    00FC   00000
  574.     MOVL    8(AP), R7             ;SRC_LEN, LENGTH               0657            57    08   AC  D0   00002
  575.     SUBL3   #2004, @16(AP), R1         ;#2004, @DST_LEN, R1               0659       10   BC 000007D4   8F  C3   00006
  576.                          ;                                         51       0000E
  577.     MNEGL   R1, R0                 ;R1, R0                                     50         51  CE   0000F
  578.     CMPL    R7, R0                 ;LENGTH, R0                                     50         57  D1   00012
  579.     BLEQ    1$                 ;1$                                               03  15   00015
  580.     MNEGL   R1, R7                 ;R1, LENGTH                                     57         51  CE   00017
  581. 1$:    MOVL    12(AP), R6             ;DST_PTR, R6                   0661            56    0C   AC  D0   0001A
  582.     MOVC3   R7, @4(AP), @0(R6)         ;LENGTH, @SRC_ADR, @0(R6)                        04   BC         57  28   0001E
  583.                          ;                                    00   B6       00022
  584.     ADDL2   R7, (R6)             ;LENGTH, (R6)                   0662            66         57  C0   00024
  585.     ADDL2   R7, @16(AP)             ;LENGTH, @DST_LEN               0663       10   BC         57  C0   00027
  586.     RET                      ;                       0664                  04   0002B
  587.  
  588. ; Routine Size:  44 bytes,    Routine Base:  $CODE$ + 0105
  589.  
  590.  
  591. ;   0665  2    !
  592. ;   0666  2    ! Initialize the command descriptor
  593. ;   0667  2    !
  594. ;   0668  2        COMMAND_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
  595. ;   0669  2        COMMAND_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  596. ;   0670  2        COMMAND_LENGTH = 0;                ! Nothing here yet
  597. ;   0671  2        COMMAND_DESC [DSC$A_POINTER] = COMMAND_STR;    ! Point at string storage
  598. ;   0672  2        POINTER = CH$PTR (COMMAND_STR);
  599. ;   0673  2    !
  600. ;   0674  2    ! Determine what to do with the command
  601. ;   0675  2    !
  602. ;   0676  2     
  603. ;   0677  2        CASE .GCMD_TYPE FROM GC_MIN TO GC_MAX OF
  604. ;   0678  2        SET
  605. ;   0679  2     
  606. ;   0680  2        [GC_COPY] :
  607. ;   0681  3            BEGIN
  608. ;   0682  3     
  609. ;   0683  3            EXTERNAL
  610. ;   0684  3            GEN_COPY_CMD : BLOCK [8, BYTE];
  611. ;   0685  3     
  612. ;   0686  3            CONCAT (.GEN_COPY_CMD [DSC$A_POINTER], .GEN_COPY_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
  613. ;   0687  3            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  614. ;   0688  3            CONCAT (UPLIT (%ASCII' '), 1, POINTER, COMMAND_LENGTH);
  615. ;   0689  3            CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
  616. ;   0690  2            END;
  617. ;   0691  2     
  618. ;   0692  2        [GC_CONNECT] :
  619. ;   0693  3            BEGIN
  620. ;   0694  3     
  621. ;   0695  3            LOCAL
  622. ;   0696  3            LENGTH,
  623. ;   0697  3            DIR_FAB : $FAB_DECL,        ! FAB for $PARSE
  624. ;   0698  3            DIR_NAM : $NAM_DECL,        ! NAM for $PARSE
  625. ;   0699  3            EXP_STR : VECTOR [NAM$C_MAXRSS, BYTE],    ! Expanded file spec
  626. ;   0700  3            DEV_DESC : BLOCK [8, BYTE],    ! Descriptor for device name
  627. ;   0701  3            DIR_DESC : BLOCK [8, BYTE];
  628. ;   0702  3     
  629. ;   0703  3            DIR_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
  630. ;   0704  3            DIR_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  631. ;   0705  3            DEV_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
  632. ;   0706  3            DEV_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  633. ;   0707  3     
  634. ;   0708  3            IF .GEN_1SIZE GTR 0
  635. ;   0709  3            THEN
  636. ;   0710  4            BEGIN
  637. ;   0711  4            $FAB_INIT (FAB = DIR_FAB, FOP = NAM, NAM = DIR_NAM, FNA = GEN_1DATA, FNS = .GEN_1SIZE);
  638. ;   0712  4            $NAM_INIT (NAM = DIR_NAM, ESA = EXP_STR, ESS = NAM$C_MAXRSS);
  639. ;   0713  4            STATUS = $PARSE (FAB = DIR_FAB);
  640. ;   0714  4     
  641. ;   0715  4            IF NOT .STATUS
  642. ;   0716  4            THEN
  643. ;   0717  5                BEGIN
  644. ;   0718  5                LIB$SIGNAL (.STATUS);
  645. ;   0719  5                RETURN .STATUS;
  646. ;   0720  4                END;
  647. ;   0721  4     
  648. ;   0722  4            IF .DIR_NAM [NAM$B_NODE] GTR 0
  649. ;   0723  4            THEN
  650. ;   0724  5                BEGIN
  651. ;   0725  5                DEV_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_NODE];
  652. ;   0726  5                DEV_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_NODE] + .DIR_NAM [NAM$B_DEV];
  653. ;   0727  5                END
  654. ;   0728  4            ELSE
  655. ;   0729  5                BEGIN
  656. ;   0730  5                DEV_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_DEV];
  657. ;   0731  5                DEV_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_DEV];
  658. ;   0732  4                END;
  659. ;   0733  4     
  660. ;   0734  4            DIR_DESC [DSC$W_LENGTH] = .DIR_NAM [NAM$B_DIR];
  661. ;   0735  4            DIR_DESC [DSC$A_POINTER] = .DIR_NAM [NAM$L_DIR];
  662. ;   0736  4            END
  663. ;   0737  3            ELSE
  664. ;   0738  4            BEGIN
  665. ;   0739  4            DIR_DESC [DSC$W_LENGTH] = .ORG_DEFAULT_DIR [DSC$W_LENGTH];
  666. ;   0740  4            DIR_DESC [DSC$A_POINTER] = .ORG_DEFAULT_DIR [DSC$A_POINTER];
  667. ;   0741  4            DEV_DESC [DSC$W_LENGTH] = .ORG_DEFAULT_DEV [DSC$W_LENGTH];
  668. ;   0742  4            DEV_DESC [DSC$A_POINTER] = .ORG_DEFAULT_DEV [DSC$A_POINTER];
  669. ;   0743  3            END;
  670. ;   0744  3     
  671. ;   0745  3            STATUS = LIB$SET_LOGICAL (%ASCID'SYS$DISK', DEV_DESC);
  672. ;   0746  3     
  673. ;   0747  3            IF NOT .STATUS
  674. ;   0748  3            THEN
  675. ;   0749  4            BEGIN
  676. ;   0750  4            LIB$SIGNAL (.STATUS);
  677. ;   0751  4            RETURN .STATUS;
  678. ;   0752  3            END;
  679. ;   0753  3     
  680. ;   0754  3            STATUS = SYS$SETDDIR (DIR_DESC, 0, 0);
  681. ;   0755  3     
  682. ;   0756  3            IF NOT .STATUS
  683. ;   0757  3            THEN
  684. ;   0758  4            BEGIN
  685. ;   0759  4            LIB$SIGNAL (.STATUS);
  686. ;   0760  4            RETURN .STATUS;
  687. ;   0761  3            END;
  688. ;   0762  3     
  689. ;   0763  3            DIR_DESC [DSC$A_POINTER] = GEN_1DATA;
  690. ;   0764  3            DIR_DESC [DSC$W_LENGTH] = MAX_MSG;
  691. ;   0765  3            STATUS = SYS$SETDDIR (0, DIR_DESC [DSC$W_LENGTH], DIR_DESC);
  692. ;   0766  3     
  693. ;   0767  3            IF NOT .STATUS
  694. ;   0768  3            THEN
  695. ;   0769  4            BEGIN
  696. ;   0770  4            LIB$SIGNAL (.STATUS);
  697. ;   0771  4            RETURN .STATUS;
  698. ;   0772  3            END;
  699. ;   0773  3     
  700. ;   0774  3            POINTER = CH$PTR (RSP_TEXT);
  701. ;   0775  3            RSP_LEN = 0;
  702. ;   0776  3            CONCAT (UPLIT (%ASCII'Default directory set to '), 25, POINTER, RSP_LEN);
  703. ;   0777  3            CONCAT (.DEV_DESC [DSC$A_POINTER], .DEV_DESC [DSC$W_LENGTH], POINTER, RSP_LEN);
  704. ;   0778  3            CONCAT (.DIR_DESC [DSC$A_POINTER], .DIR_DESC [DSC$W_LENGTH], POINTER, RSP_LEN);
  705. ;   0779  3            .STRING_ADDRESS = RSP_TEXT;
  706. ;   0780  3            .STRING_LENGTH = .RSP_LEN;
  707. ;   0781  3            RETURN KER_NORMAL;
  708. ;   0782  2            END;
  709. ;   0783  2     
  710. ;   0784  2        [GC_DELETE] :
  711. ;   0785  3            BEGIN
  712. ;   0786  3     
  713. ;   0787  3            EXTERNAL
  714. ;   0788  3            GEN_DELETE_CMD : BLOCK [8, BYTE];
  715. ;   0789  3     
  716. ;   0790  3            CONCAT (.GEN_DELETE_CMD [DSC$A_POINTER], .GEN_DELETE_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
  717. ;   0791  3            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  718. ;   0792  2            END;
  719. ;   0793  2     
  720. ;   0794  2        [GC_DIRECTORY] :
  721. ;   0795  3            BEGIN
  722. ;   0796  3     
  723. ;   0797  3            EXTERNAL
  724. ;   0798  3            GEN_DIR_CMD : BLOCK [8, BYTE];
  725. ;   0799  3     
  726. ;   0800  3            CONCAT (.GEN_DIR_CMD [DSC$A_POINTER], .GEN_DIR_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
  727. ;   0801  3            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  728. ;   0802  2            END;
  729. ;   0803  2     
  730. ;   0804  2        [GC_DISK_USAGE] :
  731. ;   0805  3            BEGIN
  732. ;   0806  3     
  733. ;   0807  3            EXTERNAL
  734. ;   0808  3            GEN_USG_CMD : BLOCK [8, BYTE],    ! Command without arg
  735. ;   0809  3            GEN_USG_ARG_CMD : BLOCK [8, BYTE];    ! Command with arg
  736. ;   0810  3     
  737. ;   0811  3            IF .GEN_1SIZE LEQ 0
  738. ;   0812  3            THEN
  739. ;   0813  4            BEGIN
  740. ;   0814  4            CONCAT (.GEN_USG_CMD [DSC$A_POINTER], .GEN_USG_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
  741. ;   0815  4            END
  742. ;   0816  3            ELSE
  743. ;   0817  4            BEGIN
  744. ;   0818  4            CONCAT (.GEN_USG_ARG_CMD [DSC$A_POINTER], .GEN_USG_ARG_CMD [DSC$W_LENGTH], POINTER,
  745. ;   0819  4                COMMAND_LENGTH);
  746. ;   0820  4            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  747. ;   0821  3            END;
  748. ;   0822  3     
  749. ;   0823  2            END;
  750. ;   0824  2     
  751. ;   0825  2        [GC_HELP] :
  752. ;   0826  3            BEGIN
  753. ;   0827  3     
  754. ;   0828  3            EXTERNAL
  755. ;   0829  3            GEN_HELP_TEXT : BLOCK [8, BYTE];
  756. ;   0830  3     
  757. ;   0831  3            .STRING_ADDRESS = .GEN_HELP_TEXT [DSC$A_POINTER];
  758. ;   0832  3            .STRING_LENGTH = .GEN_HELP_TEXT [DSC$W_LENGTH];
  759. ;   0833  3            RETURN KER_NORMAL;
  760. ;   0834  2            END;
  761. ;   0835  2     
  762. ;   0836  2        [GC_RENAME] :
  763. ;   0837  3            BEGIN
  764. ;   0838  3     
  765. ;   0839  3            EXTERNAL
  766. ;   0840  3            GEN_REN_CMD : BLOCK [8, BYTE];
  767. ;   0841  3     
  768. ;   0842  3            CONCAT (.GEN_REN_CMD [DSC$A_POINTER], .GEN_REN_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
  769. ;   0843  3            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  770. ;   0844  3            CONCAT (UPLIT (%ASCII' '), 1, POINTER, COMMAND_LENGTH);
  771. ;   0845  3            CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
  772. ;   0846  2            END;
  773. ;   0847  2     
  774. ;   0848  2        [GC_SEND_MSG] :
  775. ;   0849  3            BEGIN
  776. ;   0850  3     
  777. ;   0851  3            EXTERNAL
  778. ;   0852  3            GEN_SEND_CMD : BLOCK [8, BYTE];
  779. ;   0853  3     
  780. ;   0854  3            CONCAT (.GEN_SEND_CMD [DSC$A_POINTER], .GEN_SEND_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
  781. ;   0855  3            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  782. ;   0856  3            CONCAT (UPLIT (%ASCII' "'), 2, POINTER, COMMAND_LENGTH);
  783. ;   0857  3            CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
  784. ;   0858  3            CONCAT (UPLIT (%ASCII'"'), 1, POINTER, COMMAND_LENGTH);
  785. ;   0859  2            END;
  786. ;   0860  2     
  787. ;   0861  2        [GC_TYPE] :
  788. ;   0862  2    !
  789. ;   0863  2    ! While KERMSG handles this for server requests, COMND_LOCAL in KERMIT does
  790. ;   0864  2    ! not.  Therefore, set up the request to open the correct file.
  791. ;   0865  2    !
  792. ;   0866  3            BEGIN
  793. ;   0867  3            CH$COPY (.GEN_1SIZE, GEN_1DATA, CHR_NUL, MAX_FILE_NAME, FILE_NAME);
  794. ;   0868  3            FILE_SIZE = .GEN_1SIZE;
  795. ;   0869  3            RETURN KER_NORMAL;
  796. ;   0870  2            END;
  797. ;   0871  2     
  798. ;   0872  2        [GC_WHO] :
  799. ;   0873  3            BEGIN
  800. ;   0874  3     
  801. ;   0875  3            EXTERNAL
  802. ;   0876  3            GEN_WHO_CMD : BLOCK [8, BYTE];
  803. ;   0877  3     
  804. ;   0878  3            CONCAT (.GEN_WHO_CMD [DSC$A_POINTER], .GEN_WHO_CMD [DSC$W_LENGTH], POINTER, COMMAND_LENGTH);
  805. ;   0879  3            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  806. ;   0880  3            CONCAT (GEN_2DATA, .GEN_2SIZE, POINTER, COMMAND_LENGTH);
  807. ;   0881  2            END;
  808. ;   0882  2     
  809. ;   0883  2        [GC_COMMAND] :
  810. ;   0884  2    ! Host command.  Just pass it to the process
  811. ;   0885  2            CONCAT (GEN_1DATA, .GEN_1SIZE, POINTER, COMMAND_LENGTH);
  812. ;   0886  2     
  813. ;   0887  2        [INRANGE, OUTRANGE] :
  814. ;   0888  3            BEGIN
  815. ;   0889  3            LIB$SIGNAL (KER_UNIMPLGEN);
  816. ;   0890  3            RETURN KER_UNIMPLGEN;        ! We don't do any
  817. ;   0891  2            END;
  818. ;   0892  2        TES;
  819. ;   0893  2     
  820. ;   0894  2    !
  821. ;   0895  2    ! If we fall out of the case statement, we need to create a mailbox and
  822. ;   0896  2    ! spawn a process to perform the command with its output going to the
  823. ;   0897  2    ! mailbox
  824. ;   0898  2    !
  825. ;   0899  2        COMMAND_DESC [DSC$W_LENGTH] = .COMMAND_LENGTH;    ! Copy command length
  826. ;   0900  2        ITMLST [0] = JPI$_PID^16 + 4;        ! Get PID
  827. ;   0901  2        ITMLST [1] = OUR_PID;            ! Into OUR_PID
  828. ;   0902  2        ITMLST [2] = ITMLST [2];            ! Get length here
  829. ;   0903  2        ITMLST [3] = 0;                ! End of list
  830. ;   0904  2        $GETJPI (ITMLST = ITMLST);            ! Get info for us
  831. ;   0905  2        CH$COPY (11, CH$PTR (UPLIT (%ASCII'KERMIT$MBX_')), CHR_NUL, ! Build name
  832. ;   0906  2        MAX_MBX_LEN, CH$PTR (MBX_NAME));    ! for mailbox
  833. ;   0907  2        MBX_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
  834. ;   0908  2        MBX_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  835. ;   0909  2        MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN - 12;    ! MBX name length
  836. ;   0910  2        MBX_DESC [DSC$A_POINTER] = MBX_NAME + 11;    ! Where to build rest of name
  837. ;   0911  2        OTS$CVT_L_TZ (OUR_PID, MBX_DESC, MAX_MBX_LEN - 12);    ! Generate rest of name
  838. ;   0912  2        MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN - 1;    ! Set total length for create
  839. ;   0913  2        MBX_DESC [DSC$A_POINTER] = MBX_NAME;    ! Point at start of name
  840. ;   0914  2        STATUS = $CREMBX (CHAN = MBX_CHAN, LOGNAM = MBX_DESC);
  841. ;   0915  2     
  842. ;   0916  2        IF NOT .STATUS
  843. ;   0917  2        THEN
  844. ;   0918  3        BEGIN
  845. ;   0919  3        LIB$SIGNAL (.STATUS);
  846. ;   0920  3        RETURN .STATUS;
  847. ;   0921  2        END;
  848. ;   0922  2     
  849. ;   0923  2        MBX_NAME [MAX_MBX_LEN - 1] = %C':';        ! Terminate with colon
  850. ;   0924  2        MBX_DESC [DSC$W_LENGTH] = MAX_MBX_LEN;    ! Set total length including colon
  851. ;   0925  2        CH$COPY (MAX_MBX_LEN - 1, CH$PTR (MBX_NAME), CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
  852. ;   0926  2        FILE_SIZE = MAX_MBX_LEN - 1;        ! Set up FILE_NAME
  853. ;   0927  2        FLAGS = 1;                    ! Don't wait for process
  854. ;   0928  2        STATUS = LIB$SPAWN (            ! Spawn a DCL subprocess
  855. ;   0929  2        COMMAND_DESC,                !  to do this command
  856. ;   0930  3        (IF .VMS_VERSION LEQ 3            ! If old VMS
  857. ;   0931  3         THEN
  858. ;   0932  3             0                    ! Then no SYS$INPUT arg
  859. ;   0933  3         ELSE
  860. ;   0934  2             %ASCID'NLA0:'),            !  no SYS$INPUT
  861. ;   0935  2        MBX_DESC,                !  set SYS$OUTPUT to mailbox
  862. ;   0936  2        FLAGS,                    !  don't wait for process to complete
  863. ;   0937  2        0,                    !  Process name
  864. ;   0938  2        0,                    !  process id
  865. ;   0939  2        0,                    !  completion status
  866. ;   0940  2        0,                    !  ?
  867. ;   0941  3        (IF .VMS_VERSION LEQ 3            ! If VMS 3 or earlier
  868. ;   0942  3         THEN
  869. ;   0943  3            PROCESS_COMPLETION_AST        !  We need to force eof
  870. ;   0944  3         ELSE                    !  when process finishes
  871. ;   0945  2            0),                    !  4.0 and on we get one free
  872. ;   0946  2        .MBX_CHAN);                !  feed ast routine this value
  873. ;   0947  2     
  874. ;   0948  2        IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
  875. ;   0949  2     
  876. ;   0950  2        RETURN .STATUS;
  877. ;   0951  1        END;                    ! End of SY_GENERIC
  878.  
  879.  
  880.  
  881.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  882.  
  883. P.AAC:    .ASCII  \ \<0><0><0>             ;                                            00  00  00  20  00010
  884. P.AAE:    .ASCII  \SYS$DISK\             ;                                4B  53  49  44  24  53  59  53  00014
  885. P.AAD:    .LONG   17694728             ;                                              010E0008  0001C
  886.     .ADDRESS P.AAE                 ;                                              00000000' 00020
  887. P.AAF:    .ASCII  \Default directory set to \<0><0><0>
  888.                          ;                                20  74  6C  75  61  66  65  44  00024
  889.                          ;                          72  6F  74  63  65  72  69  64  0002C
  890.                          ;                          6F  74  20  74  65  73  20  79  00034
  891.                          ;                                      00  00  00  20  0003C
  892. P.AAG:    .ASCII  \ \<0><0><0>             ;                                            00  00  00  20  00040
  893. P.AAH:    .ASCII  \ "\<0><0>             ;                                            00  00  22  20  00044
  894. P.AAI:    .ASCII  \"\<0><0><0>             ;                                            00  00  00  22  00048
  895. P.AAJ:    .ASCII  \KERMIT$MBX_\<0>         ;                                4D  24  54  49  4D  52  45  4B  0004C
  896.                          ;                                      00  5F  58  42  00054
  897. P.AAL:    .ASCII  \NLA0:\<0><0><0>         ;                                00  00  00  3A  30  41  4C  4E  00058
  898. P.AAK:    .LONG   17694725             ;                                              010E0005  00060
  899.     .ADDRESS P.AAL                 ;                                              00000000' 00064
  900.  
  901.     .EXTRN  GEN_COPY_CMD, SYS$PARSE, GEN_DELETE_CMD, GEN_DIR_CMD, GEN_USG_CMD, GEN_USG_ARG_CMD
  902.     .EXTRN  GEN_HELP_TEXT, GEN_REN_CMD, GEN_SEND_CMD, GEN_WHO_CMD, SYS$GETJPI, SYS$CREMBX
  903.  
  904.     .PSECT  $CODE$,NOWRT,2
  905.  
  906.     .ENTRY  SY_GENERIC, ^M<R2,R3,R4,R5,R6,-  ;SY_GENERIC, Save R2,R3,R4,R5,R6,R7,- 0577                    0FFC   00000
  907.         R7,R8,R9,R10,R11>         ;R8,R9,R10,R11
  908.     MOVAB   G^P.AAC, R11             ;P.AAC, R11                                     5B 00000000'  00  9E   00002
  909.     MOVAB   G^GEN_1DATA, R10         ;GEN_1DATA, R10                                 5A 00000000G  00  9E   00009
  910.     MOVAB   G^GEN_1SIZE, R9             ;GEN_1SIZE, R9                                     59 00000000G  00  9E   00010
  911.     MOVAB   G^U.11, R8             ;U.11, R8                                     58 00000000'  00  9E   00017
  912.     MOVAB   B^U.13, R7             ;U.13, R7                                     57    B3   AF  9E   0001E
  913.     MOVAB   -2520(SP), SP             ;-2520(SP), SP                                     5E     F628   CE  9E   00022
  914.     MOVW    #270, -22(FP)             ;#270, COMMAND_DESC+2               0669       EA   AD     010E   8F  B0   00027
  915.     CLRL    -(SP)                 ;COMMAND_LENGTH               0670                  7E  D4   0002D
  916.     MOVAB   496(SP), -20(FP)         ;COMMAND_STR, COMMAND_DESC+4           0671       EC   AD     01F0   CE  9E   0002F
  917.     MOVAB   496(SP), 4(SP)             ;COMMAND_STR, POINTER               0672       04   AE     01F0   CE  9E   00035
  918.     CASEL   4(AP), #1, #18             ;GCMD_TYPE, #1, #18               0677            01    04   AC  CF   0003B
  919.                          ;                                         12       0003F
  920. 1$:    .WORD   2$-1$,-                 ;2$-1$,-                                   01C3       0026       00040
  921.         14$-1$,-             ;14$-1$,-                             01AF       01D7       00044
  922.         15$-1$,-             ;15$-1$,-                             0208       0297       00048
  923.         13$-1$,-             ;13$-1$,-                             0026       0026       0004C
  924.         22$-1$,-             ;22$-1$,-                             021B       0068       00050
  925.         18$-1$,-             ;18$-1$,-                             02B5       003B       00054
  926.         2$-1$,-                 ;2$-1$,-                             0026       0249       00058
  927.         2$-1$,-                 ;2$-1$,-                             0026       02E9       0005C
  928.         4$-1$,-                 ;4$-1$,-                             0026       0026       00060
  929.         20$-1$,-             ;20$-1$,-                                   0026       00064
  930.         3$-1$,-                 ;3$-1$,-
  931.         24$-1$,-             ;24$-1$,-
  932.         21$-1$,-             ;21$-1$,-
  933.         2$-1$,-                 ;2$-1$,-
  934.         26$-1$,-             ;26$-1$,-
  935.         2$-1$,-                 ;2$-1$,-
  936.         2$-1$,-                 ;2$-1$,-
  937.         2$-1$,-                 ;2$-1$,-
  938.         2$-1$                 ;2$-1$
  939. 2$:    PUSHL   #134316210             ;#134316210                   0889           080180B2   8F  DD   00066
  940.     CALLS   #1, G^LIB$SIGNAL         ;#1, LIB$SIGNAL                      00000000G  00         01  FB   0006C
  941.     MOVL    #134316210, R0             ;#134316210, R0               0890            50 080180B2   8F  D0   00073
  942.     RET                      ;                                               04   0007A
  943. 3$:    PUSHL   SP                 ;SP                       0686                  5E  DD   0007B
  944.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0007D
  945.     MOVZWL  G^GEN_COPY_CMD, -(SP)         ;GEN_COPY_CMD, -(SP)                                 7E 00000000G  00  3C   00080
  946.     PUSHL   G^GEN_COPY_CMD+4         ;GEN_COPY_CMD+4                                00000000G  00  DD   00087
  947.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   0008D
  948.     PUSHL   SP                 ;SP                       0687                  5E  DD   00090
  949.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   00092
  950.     PUSHL   (R9)                 ;GEN_1SIZE                                           69  DD   00095
  951.     PUSHL   R10                 ;R10                                               5A  DD   00097
  952.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   00099
  953.     PUSHL   SP                 ;SP                       0688                  5E  DD   0009C
  954.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0009E
  955.     PUSHL   #1                 ;#1                                               01  DD   000A1
  956.     PUSHL   R11                 ;R11                                               5B  DD   000A3
  957.     BRW     25$                 ;25$                                             026B  31   000A5
  958. 4$:    MOVW    #270, 22(SP)             ;#270, DIR_DESC+2               0704       16   AE     010E   8F  B0   000A8
  959.     MOVW    #270, 30(SP)             ;#270, DEV_DESC+2               0706       1E   AE     010E   8F  B0   000AE
  960.     MOVL    (R9), R6             ;GEN_1SIZE, R6                   0708            56         69  D0   000B4
  961.     BGTR    5$                 ;5$                                               03  14   000B7
  962.     BRW     8$                 ;8$                                             0095  31   000B9
  963. 5$:    MOVC5   #0, (SP), #0, #80, 388(SP)     ;#0, (SP), #0, #80, $RMS_PTR           0711            6E         00  2C   000BC
  964.                          ;                            0050   8F         00       000BF
  965.                          ;                                      0184   CE       000C3
  966.     MOVW    #20483, 388(SP)             ;#20483, $RMS_PTR                          0184   CE     5003   8F  B0   000C6
  967.     MOVL    #16777216, 392(SP)         ;#16777216, $RMS_PTR+4                          0188   CE 01000000   8F  D0   000CD
  968.     MOVB    #2, 410(SP)             ;#2, $RMS_PTR+22                          019A   CE         02  90   000D6
  969.     MOVB    #2, 419(SP)             ;#2, $RMS_PTR+31                          01A3   CE         02  90   000DB
  970.     MOVAB   292(SP), 428(SP)         ;DIR_NAM, $RMS_PTR+40                          01AC   CE     0124   CE  9E   000E0
  971.     MOVAB   (R10), 432(SP)             ;GEN_1DATA, $RMS_PTR+44                      01B0   CE         6A  9E   000E7
  972.     MOVB    R6, 440(SP)             ;R6, $RMS_PTR+52                          01B8   CE         56  90   000EC
  973.     MOVC5   #0, (SP), #0, #96, 292(SP)     ;#0, (SP), #0, #96, $RMS_PTR           0712            6E         00  2C   000F1
  974.                          ;                            0060   8F         00       000F4
  975.                          ;                                      0124   CE       000F8
  976.     MOVW    #24578, 292(SP)             ;#24578, $RMS_PTR                          0124   CE     6002   8F  B0   000FB
  977.     MNEGB   #1, 302(SP)             ;#1, $RMS_PTR+10                          012E   CE         01  8E   00102
  978.     MOVAB   36(SP), 304(SP)             ;EXP_STR, $RMS_PTR+12                          0130   CE    24   AE  9E   00107
  979.     PUSHAB  388(SP)                 ;DIR_FAB                   0713               0184   CE  9F   0010D
  980.     CALLS   #1, G^SYS$PARSE             ;#1, SYS$PARSE                          00000000G  00         01  FB   00111
  981.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   00118
  982.     BLBC    R6, 10$                 ;STATUS, 10$                   0715            6D         56  E9   0011B
  983.     MOVZBL  348(SP), R0             ;DIR_NAM+56, R0               0722            50     015C   CE  9A   0011E
  984.     BLEQ    6$                 ;6$                                               12  15   00123
  985.     MOVL    356(SP), 32(SP)             ;DIR_NAM+64, DEV_DESC+4           0725       20   AE     0164   CE  D0   00125
  986.     MOVZBL  349(SP), R1             ;DIR_NAM+57, R1               0726            51     015D   CE  9A   0012B
  987.     ADDW3   R1, R0, 28(SP)             ;R1, R0, DEV_DESC                                 50         51  A1   00130
  988.                          ;                                    1C   AE       00133
  989.     BRB     7$                 ;7$                                               0C  11   00135
  990. 6$:    MOVZBW  349(SP), 28(SP)             ;DIR_NAM+57, DEV_DESC               0730       1C   AE     015D   CE  9B   00137
  991.     MOVL    360(SP), 32(SP)             ;DIR_NAM+68, DEV_DESC+4           0731       20   AE     0168   CE  D0   0013D
  992. 7$:    MOVZBW  350(SP), 20(SP)             ;DIR_NAM+58, DIR_DESC               0734       14   AE     015E   CE  9B   00143
  993.     MOVL    364(SP), 24(SP)             ;DIR_NAM+72, DIR_DESC+4           0735       18   AE     016C   CE  D0   00149
  994.     BRB     9$                 ;9$                                               18  11   0014F
  995. 8$:    MOVW    -2160(R8), 20(SP)         ;ORG_DEFAULT_DIR, DIR_DESC           0739       14   AE     F790   C8  B0   00151
  996.     MOVL    -2156(R8), 24(SP)         ;ORG_DEFAULT_DIR+4, DIR_DESC+4        0740       18   AE     F794   C8  D0   00157
  997.     MOVW    -2020(R8), 28(SP)         ;ORG_DEFAULT_DEV, DEV_DESC           0741       1C   AE     F81C   C8  B0   0015D
  998.     MOVL    -2016(R8), 32(SP)         ;ORG_DEFAULT_DEV+4, DEV_DESC+4        0742       20   AE     F820   C8  D0   00163
  999. 9$:    PUSHAB  28(SP)                 ;DEV_DESC                   0745             1C   AE  9F   00169
  1000.     PUSHAB  12(R11)                 ;P.AAD                                          0C   AB  9F   0016C
  1001.     CALLS   #2, G^LIB$SET_LOGICAL         ;#2, LIB$SET_LOGICAL                      00000000G  00         02  FB   0016F
  1002.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   00176
  1003.     BLBC    R6, 11$                 ;STATUS, 11$                   0747            2E         56  E9   00179
  1004.     CLRQ    -(SP)                 ;-(SP)                       0754                  7E  7C   0017C
  1005.     PUSHAB  28(SP)                 ;DIR_DESC                                      1C   AE  9F   0017E
  1006.     CALLS   #3, G^SYS$SETDDIR         ;#3, SYS$SETDDIR                      00000000G  00         03  FB   00181
  1007.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   00188
  1008. 10$:    BLBC    R6, 11$                 ;STATUS, 11$                   0756            1C         56  E9   0018B
  1009.     MOVAB   (R10), 24(SP)             ;GEN_1DATA, DIR_DESC+4               0763       18   AE         6A  9E   0018E
  1010.     MOVW    #1002, 20(SP)             ;#1002, DIR_DESC               0764       14   AE     03EA   8F  B0   00192
  1011.     PUSHAB  20(SP)                 ;DIR_DESC                   0765             14   AE  9F   00198
  1012.     PUSHAB  24(SP)                 ;DIR_DESC                                      18   AE  9F   0019B
  1013.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   0019E
  1014.     CALLS   #3, G^SYS$SETDDIR         ;#3, SYS$SETDDIR                      00000000G  00         03  FB   001A0
  1015.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   001A7
  1016. 11$:    BLBS    R6, 12$                 ;STATUS, 12$                   0767            03         56  E8   001AA
  1017.     BRW     32$                 ;32$                                             0262  31   001AD
  1018. 12$:    MOVAB   -2004(R8), 4(SP)         ;RSP_TEXT, POINTER               0774       04   AE     F82C   C8  9E   001B0
  1019.     CLRL    (R8)                 ;RSP_LEN                   0775                  68  D4   001B6
  1020.     PUSHL   R8                 ;R8                       0776                  58  DD   001B8
  1021.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   001BA
  1022.     PUSHL   #25                 ;#25                                               19  DD   001BD
  1023.     PUSHAB  20(R11)                 ;P.AAF                                          14   AB  9F   001BF
  1024.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   001C2
  1025.     PUSHL   R8                 ;R8                       0777                  58  DD   001C5
  1026.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   001C7
  1027.     MOVZWL  36(SP), -(SP)             ;DEV_DESC, -(SP)                                 7E    24   AE  3C   001CA
  1028.     PUSHL   44(SP)                 ;DEV_DESC+4                                      2C   AE  DD   001CE
  1029.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   001D1
  1030.     PUSHL   R8                 ;R8                       0778                  58  DD   001D4
  1031.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   001D6
  1032.     MOVZWL  28(SP), -(SP)             ;DIR_DESC, -(SP)                                 7E    1C   AE  3C   001D9
  1033.     PUSHL   36(SP)                 ;DIR_DESC+4                                      24   AE  DD   001DD
  1034.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   001E0
  1035.     MOVAB   -2004(R8), @8(AP)         ;RSP_TEXT, @STRING_ADDRESS           0779       08   BC     F82C   C8  9E   001E3
  1036.     MOVL    (R8), @12(AP)             ;RSP_LEN, @STRING_LENGTH           0780       0C   BC         68  D0   001E9
  1037.     BRB     19$                 ;19$                       0781                  69  11   001ED
  1038. 13$:    PUSHL   SP                 ;SP                       0790                  5E  DD   001EF
  1039.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   001F1
  1040.     MOVZWL  G^GEN_DELETE_CMD, -(SP)         ;GEN_DELETE_CMD, -(SP)                                 7E 00000000G  00  3C   001F4
  1041.     PUSHL   G^GEN_DELETE_CMD+4         ;GEN_DELETE_CMD+4                                00000000G  00  DD   001FB
  1042.     BRB     17$                 ;17$                                               3F  11   00201
  1043. 14$:    PUSHL   SP                 ;SP                       0800                  5E  DD   00203
  1044.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   00205
  1045.     MOVZWL  G^GEN_DIR_CMD, -(SP)         ;GEN_DIR_CMD, -(SP)                                 7E 00000000G  00  3C   00208
  1046.     PUSHL   G^GEN_DIR_CMD+4             ;GEN_DIR_CMD+4                                    00000000G  00  DD   0020F
  1047.     BRB     17$                 ;17$                                               2B  11   00215
  1048. 15$:    TSTL    (R9)                 ;GEN_1SIZE                   0811                  69  D5   00217
  1049.     BGTR    16$                 ;16$                                               15  14   00219
  1050.     PUSHL   SP                 ;SP                       0814                  5E  DD   0021B
  1051.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0021D
  1052.     MOVZWL  G^GEN_USG_CMD, -(SP)         ;GEN_USG_CMD, -(SP)                                 7E 00000000G  00  3C   00220
  1053.     PUSHL   G^GEN_USG_CMD+4             ;GEN_USG_CMD+4                                    00000000G  00  DD   00227
  1054.     BRW     27$                 ;27$                                             0102  31   0022D
  1055. 16$:    PUSHL   SP                 ;SP                       0819                  5E  DD   00230
  1056.     PUSHAB  8(SP)                 ;POINTER                   0818             08   AE  9F   00232
  1057.     MOVZWL  G^GEN_USG_ARG_CMD, -(SP)     ;GEN_USG_ARG_CMD, -(SP)                             7E 00000000G  00  3C   00235
  1058.     PUSHL   G^GEN_USG_ARG_CMD+4         ;GEN_USG_ARG_CMD+4                                00000000G  00  DD   0023C
  1059. 17$:    CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   00242
  1060.     BRW     26$                 ;26$                       0820                00E1  31   00245
  1061. 18$:    MOVL    G^GEN_HELP_TEXT+4, @8(AP)     ;GEN_HELP_TEXT+4, @STRING_ADDRESS     0831       08   BC 00000000G  00  D0   00248
  1062.     MOVZWL  G^GEN_HELP_TEXT, @12(AP)     ;GEN_HELP_TEXT, @STRING_LENGTH        0832       0C   BC 00000000G  00  3C   00250
  1063. 19$:    BRW     23$                 ;23$                       0833                0092  31   00258
  1064. 20$:    PUSHL   SP                 ;SP                       0842                  5E  DD   0025B
  1065.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0025D
  1066.     MOVZWL  G^GEN_REN_CMD, -(SP)         ;GEN_REN_CMD, -(SP)                                 7E 00000000G  00  3C   00260
  1067.     PUSHL   G^GEN_REN_CMD+4             ;GEN_REN_CMD+4                                    00000000G  00  DD   00267
  1068.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   0026D
  1069.     PUSHL   SP                 ;SP                       0843                  5E  DD   00270
  1070.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   00272
  1071.     PUSHL   (R9)                 ;GEN_1SIZE                                           69  DD   00275
  1072.     PUSHL   R10                 ;R10                                               5A  DD   00277
  1073.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   00279
  1074.     PUSHL   SP                 ;SP                       0844                  5E  DD   0027C
  1075.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0027E
  1076.     PUSHL   #1                 ;#1                                               01  DD   00281
  1077.     PUSHAB  48(R11)                 ;P.AAG                                          30   AB  9F   00283
  1078.     BRW     25$                 ;25$                                             008A  31   00286
  1079. 21$:    PUSHL   SP                 ;SP                       0854                  5E  DD   00289
  1080.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0028B
  1081.     MOVZWL  G^GEN_SEND_CMD, -(SP)         ;GEN_SEND_CMD, -(SP)                                 7E 00000000G  00  3C   0028E
  1082.     PUSHL   G^GEN_SEND_CMD+4         ;GEN_SEND_CMD+4                                00000000G  00  DD   00295
  1083.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   0029B
  1084.     PUSHL   SP                 ;SP                       0855                  5E  DD   0029E
  1085.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   002A0
  1086.     PUSHL   (R9)                 ;GEN_1SIZE                                           69  DD   002A3
  1087.     PUSHL   R10                 ;R10                                               5A  DD   002A5
  1088.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   002A7
  1089.     PUSHL   SP                 ;SP                       0856                  5E  DD   002AA
  1090.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   002AC
  1091.     PUSHL   #2                 ;#2                                               02  DD   002AF
  1092.     PUSHAB  52(R11)                 ;P.AAH                                          34   AB  9F   002B1
  1093.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   002B4
  1094.     PUSHL   SP                 ;SP                       0857                  5E  DD   002B7
  1095.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   002B9
  1096.     PUSHL   G^GEN_2SIZE             ;GEN_2SIZE                                    00000000G  00  DD   002BC
  1097.     PUSHAB  G^GEN_2DATA             ;GEN_2DATA                                    00000000G  00  9F   002C2
  1098.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   002C8
  1099.     PUSHL   SP                 ;SP                       0858                  5E  DD   002CB
  1100.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   002CD
  1101.     PUSHL   #1                 ;#1                                               01  DD   002D0
  1102.     PUSHAB  56(R11)                 ;P.AAI                                          38   AB  9F   002D2
  1103.     BRB     27$                 ;27$                                               5B  11   002D5
  1104. 22$:    MOVL    (R9), R6             ;GEN_1SIZE, R6                   0867            56         69  D0   002D7
  1105.     MOVC5   R6, (R10), #0, #132, G^FILE_NAME ;R6, GEN_1DATA, #0, #132, FILE_NAME                     6A         56  2C   002DA
  1106.                          ;                            0084   8F         00       002DD
  1107.                          ;                                  00000000G  00       002E1
  1108.     MOVL    R6, G^FILE_SIZE             ;R6, FILE_SIZE                   0868 00000000G  00         56  D0   002E6
  1109. 23$:    MOVL    #134316043, R0             ;#134316043, R0               0869            50 0801800B   8F  D0   002ED
  1110.     RET                      ;                                               04   002F4
  1111. 24$:    PUSHL   SP                 ;SP                       0878                  5E  DD   002F5
  1112.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   002F7
  1113.     MOVZWL  G^GEN_WHO_CMD, -(SP)         ;GEN_WHO_CMD, -(SP)                                 7E 00000000G  00  3C   002FA
  1114.     PUSHL   G^GEN_WHO_CMD+4             ;GEN_WHO_CMD+4                                    00000000G  00  DD   00301
  1115.     CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   00307
  1116.     PUSHL   SP                 ;SP                       0879                  5E  DD   0030A
  1117.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0030C
  1118.     PUSHL   (R9)                 ;GEN_1SIZE                                           69  DD   0030F
  1119.     PUSHL   R10                 ;R10                                               5A  DD   00311
  1120. 25$:    CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   00313
  1121.     PUSHL   SP                 ;SP                       0880                  5E  DD   00316
  1122.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   00318
  1123.     PUSHL   G^GEN_2SIZE             ;GEN_2SIZE                                    00000000G  00  DD   0031B
  1124.     PUSHAB  G^GEN_2DATA             ;GEN_2DATA                                    00000000G  00  9F   00321
  1125.     BRB     27$                 ;27$                                               09  11   00327
  1126. 26$:    PUSHL   SP                 ;SP                       0885                  5E  DD   00329
  1127.     PUSHAB  8(SP)                 ;POINTER                                      08   AE  9F   0032B
  1128.     PUSHL   (R9)                 ;GEN_1SIZE                                           69  DD   0032E
  1129.     PUSHL   R10                 ;R10                                               5A  DD   00330
  1130. 27$:    CALLS   #4, (R7)             ;#4, CONCAT                                     67         04  FB   00332
  1131.     MOVW    (SP), -24(FP)             ;COMMAND_LENGTH, COMMAND_DESC           0899       E8   AD         6E  B0   00335
  1132.     MOVL    #51970052, -16(FP)         ;#51970052, ITMLST               0900       F0   AD 03190004   8F  D0   00339
  1133.     MOVAB   8(SP), -12(FP)             ;OUR_PID, ITMLST+4               0901       F4   AD    08   AE  9E   00341
  1134.     MOVAB   -8(FP), -8(FP)             ;ITMLST+8, ITMLST+8               0902       F8   AD    F8   AD  9E   00346
  1135.     CLRL    -4(FP)                 ;ITMLST+12                   0903             FC   AD  D4   0034B
  1136.     CLRQ    -(SP)                 ;-(SP)                       0904                  7E  7C   0034E
  1137.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00350
  1138.     PUSHAB  -16(FP)                 ;ITMLST                                      F0   AD  9F   00352
  1139.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   00355
  1140.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00357
  1141.     CALLS   #7, G^SYS$GETJPI         ;#7, SYS$GETJPI                      00000000G  00         07  FB   00359
  1142.     MOVC5   #11, 60(R11), #0, #20, 468(SP)     ;#11, P.AAJ, #0, #20, MBX_NAME        0906       3C   AB         0B  2C   00360
  1143.                          ;                                   14         00       00364
  1144.                          ;                                      01D4   CE       00366
  1145.     MOVL    #17694728, 488(SP)         ;#17694728, MBX_DESC               0909     01E8   CE 010E0008   8F  D0   00369
  1146.     MOVAB   479(SP), 492(SP)         ;MBX_NAME+11, MBX_DESC+4           0910     01EC   CE     01DF   CE  9E   00372
  1147.     PUSHL   #8                 ;#8                       0911                  08  DD   00379
  1148.     PUSHAB  492(SP)                 ;MBX_DESC                                        01EC   CE  9F   0037B
  1149.     PUSHAB  16(SP)                 ;OUR_PID                                      10   AE  9F   0037F
  1150.     CALLS   #3, G^OTS$CVT_L_TZ         ;#3, OTS$CVT_L_TZ                      00000000G  00         03  FB   00382
  1151.     MOVW    #19, 488(SP)             ;#19, MBX_DESC                   0912     01E8   CE         13  B0   00389
  1152.     MOVAB   468(SP), 492(SP)         ;MBX_NAME, MBX_DESC+4               0913     01EC   CE     01D4   CE  9E   0038E
  1153.     PUSHAB  488(SP)                 ;MBX_DESC                   0914               01E8   CE  9F   00395
  1154.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   00399
  1155.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   0039B
  1156.     PUSHAB  32(SP)                 ;MBX_CHAN                                      20   AE  9F   0039D
  1157.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   003A0
  1158.     CALLS   #7, G^SYS$CREMBX         ;#7, SYS$CREMBX                      00000000G  00         07  FB   003A2
  1159.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   003A9
  1160.     BLBC    R6, 32$                 ;STATUS, 32$                   0916            63         56  E9   003AC
  1161.     MOVB    #58, 487(SP)             ;#58, MBX_NAME+19               0923     01E7   CE         3A  90   003AF
  1162.     MOVW    #20, 488(SP)             ;#20, MBX_DESC                   0924     01E8   CE         14  B0   003B4
  1163.     MOVC5   #19, 468(SP), #0, #132, -     ;#19, MBX_NAME, #0, #132, FILE_NAME   0925     01D4   CE         13  2C   003B9
  1164.         G^FILE_NAME             ;                            0084   8F         00       003BE
  1165.                          ;                                  00000000G  00       003C2
  1166.     MOVL    #19, G^FILE_SIZE         ;#19, FILE_SIZE               0926 00000000G  00         13  D0   003C7
  1167.     MOVL    #1, 16(SP)             ;#1, FLAGS                   0927       10   AE         01  D0   003CE
  1168.     PUSHL   12(SP)                 ;MBX_CHAN                   0946             0C   AE  DD   003D2
  1169.     CLRL    R1                 ;R1                       0941                  51  D4   003D5
  1170.     CMPL    -2296(R8), #3             ;VMS_VERSION, #3                                 03     F708   C8  D1   003D7
  1171.     BGTR    28$                 ;28$                                               0A  14   003DC
  1172.     INCL    R1                 ;R1                                               51  D6   003DE
  1173.     MOVAB   -26(R7), R0             ;PROCESS_COMPLETION_AST, R0           0943            50    E6   A7  9E   003E0
  1174.     PUSHL   R0                 ;R0                                               50  DD   003E4
  1175.     BRB     29$                 ;29$                                               02  11   003E6
  1176. 28$:    CLRL    -(SP)                 ;-(SP)                       0945                  7E  D4   003E8
  1177. 29$:    CLRQ    -(SP)                 ;-(SP)                       0939                  7E  7C   003EA
  1178.     CLRQ    -(SP)                 ;-(SP)                       0937                  7E  7C   003EC
  1179.     PUSHAB  40(SP)                 ;FLAGS                       0936             28   AE  9F   003EE
  1180.     PUSHAB  516(SP)                 ;MBX_DESC                   0935               0204   CE  9F   003F1
  1181.     BLBC    R1, 30$                 ;R1, 30$                   0930            04         51  E9   003F5
  1182.     CLRL    -(SP)                 ;-(SP)                       0932                  7E  D4   003F8
  1183.     BRB     31$                 ;31$                                               06  11   003FA
  1184. 30$:    MOVAB   80(R11), R0             ;P.AAK, R0                   0934            50    50   AB  9E   003FC
  1185.     PUSHL   R0                 ;R0                                               50  DD   00400
  1186. 31$:    PUSHAB  -24(FP)                 ;COMMAND_DESC                   0929             E8   AD  9F   00402
  1187.     CALLS   #10, G^LIB$SPAWN         ;#10, LIB$SPAWN                      00000000G  00         0A  FB   00405
  1188.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   0040C
  1189.     BLBS    R6, 33$                 ;STATUS, 33$                   0948            09         56  E8   0040F
  1190. 32$:    PUSHL   R6                 ;STATUS                                           56  DD   00412
  1191.     CALLS   #1, G^LIB$SIGNAL         ;#1, LIB$SIGNAL                      00000000G  00         01  FB   00414
  1192. 33$:    MOVL    R6, R0                 ;STATUS, R0                   0950            50         56  D0   0041B
  1193.     RET                      ;                                               04   0041E
  1194.  
  1195. ; Routine Size:  1055 bytes,    Routine Base:  $CODE$ + 0131
  1196.  
  1197.  
  1198. ;   0952  1     
  1199. ;   0953  1     %SBTTL 'SY_DISMISS - Sleep for N seconds'
  1200. ;   0954  1     
  1201. ;   0955  1    GLOBAL ROUTINE SY_DISMISS (SECONDS) : NOVALUE =
  1202. ;   0956  1     
  1203. ;   0957  1    !++
  1204. ;   0958  1    ! FUNCTIONAL DESCRIPTION:
  1205. ;   0959  1    !
  1206. ;   0960  1    !    This routine is called to cause KERMIT to sleep for the
  1207. ;   0961  1    !    specified number of seconds.
  1208. ;   0962  1    !
  1209. ;   0963  1    ! CALLING SEQUENCE:
  1210. ;   0964  1    !
  1211. ;   0965  1    !    SY_DISMISS(Number of seconds);
  1212. ;   0966  1    !
  1213. ;   0967  1    ! INPUT PARAMETERS:
  1214. ;   0968  1    !
  1215. ;   0969  1    !    Number of seconds to sleep.
  1216. ;   0970  1    !
  1217. ;   0971  1    ! IMPLICIT INPUTS:
  1218. ;   0972  1    !
  1219. ;   0973  1    !    None.
  1220. ;   0974  1    !
  1221. ;   0975  1    ! OUTPUT PARAMETERS:
  1222. ;   0976  1    !
  1223. ;   0977  1    !    None.
  1224. ;   0978  1    !
  1225. ;   0979  1    ! IMPLICIT OUTPUTS:
  1226. ;   0980  1    !
  1227. ;   0981  1    !    None.
  1228. ;   0982  1    !
  1229. ;   0983  1    ! COMPLETION CODES:
  1230. ;   0984  1    !
  1231. ;   0985  1    !    None.
  1232. ;   0986  1    !
  1233. ;   0987  1    ! SIDE EFFECTS:
  1234. ;   0988  1    !
  1235. ;   0989  1    !    None.
  1236. ;   0990  1    !
  1237. ;   0991  1    !--
  1238. ;   0992  1     
  1239. ;   0993  2        BEGIN
  1240. ;   0994  2     
  1241. ;   0995  2        LOCAL
  1242. ;   0996  2        STATUS,
  1243. ;   0997  2        TOTAL_TIME : VECTOR [2, LONG];        ! Quad word for length of time to sleep
  1244. ;   0998  2     
  1245. ;   0999  2        IF .SECONDS EQL 0 THEN RETURN KER_NORMAL;
  1246. ;   1000  2     
  1247. ;   1001  2        TOTAL_TIME [0] = -.SECONDS*10*1000*1000;
  1248. ;   1002  2        TOTAL_TIME [1] = -1;
  1249. ;   1003  2        STATUS = $SETIMR (EFN = 1, DAYTIM = TOTAL_TIME);
  1250. ;   1004  2     
  1251. ;   1005  2        IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
  1252. ;   1006  2     
  1253. ;   1007  2        STATUS = $WAITFR (EFN = 1);
  1254. ;   1008  2     
  1255. ;   1009  2        IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
  1256. ;   1010  2     
  1257. ;   1011  1        END;                    ! End of SY_DISMISS(time)
  1258.  
  1259.  
  1260.  
  1261.     .EXTRN  SYS$SETIMR
  1262.  
  1263.     .ENTRY  SY_DISMISS, ^M<R2,R3>         ;SY_DISMISS, Save R2,R3           0955                    000C   00000
  1264.     MOVAB   G^LIB$SIGNAL, R3         ;LIB$SIGNAL, R3                                 53 00000000G  00  9E   00002
  1265.     SUBL2   #8, SP                 ;#8, SP                                     5E         08  C2   00009
  1266.     TSTL    4(AP)                 ;SECONDS                   0999             04   AC  D5   0000C
  1267.     BEQL    2$                 ;2$                                               3F  13   0000F
  1268.     MULL3   #10000000, 4(AP), R0         ;#10000000, SECONDS, R0           1001       04   AC 00989680   8F  C5   00011
  1269.                          ;                                         50       00019
  1270.     MNEGL   R0, (SP)             ;R0, TOTAL_TIME                                 6E         50  CE   0001A
  1271.     MNEGL   #1, 4(SP)             ;#1, TOTAL_TIME+4               1002       04   AE         01  CE   0001D
  1272.     CLRQ    -(SP)                 ;-(SP)                       1003                  7E  7C   00021
  1273.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00023
  1274.     PUSHAB  12(SP)                 ;TOTAL_TIME                                      0C   AE  9F   00025
  1275.     PUSHL   #1                 ;#1                                               01  DD   00028
  1276.     CALLS   #5, G^SYS$SETIMR         ;#5, SYS$SETIMR                      00000000G  00         05  FB   0002A
  1277.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00031
  1278.     BLBS    R2, 1$                 ;STATUS, 1$                   1005            05         52  E8   00034
  1279.     PUSHL   R2                 ;STATUS                                           52  DD   00037
  1280.     CALLS   #1, (R3)             ;#1, LIB$SIGNAL                                 63         01  FB   00039
  1281. 1$:    PUSHL   #1                 ;#1                       1007                  01  DD   0003C
  1282.     CALLS   #1, G^SYS$WAITFR         ;#1, SYS$WAITFR                      00000000G  00         01  FB   0003E
  1283.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00045
  1284.     BLBS    R2, 2$                 ;STATUS, 2$                   1009            05         52  E8   00048
  1285.     PUSHL   R2                 ;STATUS                                           52  DD   0004B
  1286.     CALLS   #1, (R3)             ;#1, LIB$SIGNAL                                 63         01  FB   0004D
  1287. 2$:    RET                      ;                       1011                  04   00050
  1288.  
  1289. ; Routine Size:  81 bytes,    Routine Base:  $CODE$ + 0550
  1290.  
  1291.  
  1292. ;   1012  1     
  1293. ;   1013  1     %SBTTL 'SY_TIME - Return abbreviated system time'
  1294. ;   1014  1     
  1295. ;   1015  1    GLOBAL ROUTINE SY_TIME =
  1296. ;   1016  1     
  1297. ;   1017  1    !++
  1298. ;   1018  1    ! FUNCTIONAL DESCRIPTION:
  1299. ;   1019  1    !
  1300. ;   1020  1    !    This routine will return the system time to the calling routine.
  1301. ;   1021  1    !    This will allow for the calculation of the effective baud rate.
  1302. ;   1022  1    !
  1303. ;   1023  1    ! CALLING SEQUENCE:
  1304. ;   1024  1    !
  1305. ;   1025  1    !    TIME = SY_TIME ();
  1306. ;   1026  1    !
  1307. ;   1027  1    ! INPUT PARAMETERS:
  1308. ;   1028  1    !
  1309. ;   1029  1    !    None.
  1310. ;   1030  1    !
  1311. ;   1031  1    ! IMPLICIT INPUTS:
  1312. ;   1032  1    !
  1313. ;   1033  1    !    None.
  1314. ;   1034  1    !
  1315. ;   1035  1    ! OUTPUT PARAMETERS:
  1316. ;   1036  1    !
  1317. ;   1037  1    !    Time in milliseconds.
  1318. ;   1038  1    !
  1319. ;   1039  1    ! IMPLICIT OUTPUTS:
  1320. ;   1040  1    !
  1321. ;   1041  1    !    None.
  1322. ;   1042  1    !
  1323. ;   1043  1    ! COMPLETION CODES:
  1324. ;   1044  1    !
  1325. ;   1045  1    !    None.
  1326. ;   1046  1    !
  1327. ;   1047  1    ! SIDE EFFECTS:
  1328. ;   1048  1    !
  1329. ;   1049  1    !    None.
  1330. ;   1050  1    !
  1331. ;   1051  1    !--
  1332. ;   1052  1     
  1333. ;   1053  2        BEGIN
  1334. ;   1054  2    !
  1335. ;   1055  2    ! Local storage
  1336. ;   1056  2    !
  1337. ;   1057  2     
  1338. ;   1058  2        LOCAL
  1339. ;   1059  2        Adjusted_Time : VECTOR [2, LONG],    ! System time - a constant.
  1340. ;   1060  2        MILLI_SECONDS,                ! Time in milliseconds
  1341. ;   1061  2        REMAINDER,                ! Remainder on EDIV
  1342. ;   1062  2        STATUS,                    ! Status returned by lower level
  1343. ;   1063  2        Time : VECTOR [2, LONG],        ! Quadword to hold system time.
  1344. ;   1064  2        TEN_FOURTH : VECTOR [2, LONG];        ! to hold 10**4
  1345. ;   1065  2    
  1346. ;   1066  2    !
  1347. ;   1067  2    ! LIB$EDIV will fail if the system time is too large, so we need
  1348. ;   1068  2    ! to subtract some large constant from it - might as well use
  1349. ;   1069  2    ! the current time.
  1350. ;   1070  2    !
  1351. ;   1071  2    
  1352. ;   1072  2        IF .Subtrahend [0] EQL 0 AND .Subtrahend [1] EQL 0
  1353. ;   1073  2        THEN
  1354. ;   1074  3            BEGIN
  1355. ;   1075  3            STATUS = SYS$GETTIM(Subtrahend);
  1356. ;   1076  3            IF NOT .STATUS THEN RETURN 0;
  1357. ;   1077  2            END;
  1358. ;   1078  2    !
  1359. ;   1079  2    ! Get the VMS system time.
  1360. ;   1080  2    !
  1361. ;   1081  2        STATUS = SYS$GETTIM(Time);
  1362. ;   1082  2        IF NOT .STATUS THEN RETURN 0;
  1363. ;   1083  2     
  1364. ;   1084  2    !
  1365. ;   1085  2    ! Compute the longword value from the quadword returned.
  1366. ;   1086  2    !
  1367. ;   1087  2        Status = LIB$SUBX(Time, Subtrahend, Adjusted_Time);
  1368. ;   1088  2        IF NOT .STATUS THEN RETURN 0;
  1369. ;   1089  2    
  1370. ;   1090  2        TEN_FOURTH [0] = 1000*10;
  1371. ;   1091  2        TEN_FOURTH [1] = 0;
  1372. ;   1092  2        STATUS = LIB$EDIV (TEN_FOURTH, Adjusted_Time, MILLI_SECONDS, REMAINDER);
  1373. ;   1093  2     
  1374. ;   1094  2        IF NOT .STATUS AND .Status NEQ SS$_INTOVF THEN RETURN 0;
  1375. ;   1095  2     
  1376. ;   1096  2        RETURN .MILLI_SECONDS;
  1377. ;   1097  1        END;                    ! End of SY_TIME
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.     .ENTRY  SY_TIME, ^M<R2,R3>         ;SY_TIME, Save R2,R3               1015                    000C   00000
  1384.     MOVAB   G^SYS$GETTIM, R3         ;SYS$GETTIM, R3                                 53 00000000G  00  9E   00002
  1385.     MOVAB   G^U.6, R2             ;U.6, R2                                     52 00000000'  00  9E   00009
  1386.     SUBL2   #32, SP                 ;#32, SP                                     5E         20  C2   00010
  1387.     TSTL    (R2)                 ;SUBTRAHEND                   1072                  62  D5   00013
  1388.     BNEQ    1$                 ;1$                                               0D  12   00015
  1389.     TSTL    4(R2)                 ;SUBTRAHEND+4                                      04   A2  D5   00017
  1390.     BNEQ    1$                 ;1$                                               08  12   0001A
  1391.     PUSHL   R2                 ;R2                       1075                  52  DD   0001C
  1392.     CALLS   #1, (R3)             ;#1, SYS$GETTIM                                 63         01  FB   0001E
  1393.     BLBC    R0, 3$                 ;STATUS, 3$                   1076            47         50  E9   00021
  1394. 1$:    PUSHAB  16(SP)                 ;TIME                       1081             10   AE  9F   00024
  1395.     CALLS   #1, (R3)             ;#1, SYS$GETTIM                                 63         01  FB   00027
  1396.     BLBC    R0, 3$                 ;STATUS, 3$                   1082            3E         50  E9   0002A
  1397.     PUSHAB  24(SP)                 ;ADJUSTED_TIME                   1087             18   AE  9F   0002D
  1398.     PUSHL   R2                 ;R2                                               52  DD   00030
  1399.     PUSHAB  24(SP)                 ;TIME                                          18   AE  9F   00032
  1400.     CALLS   #3, G^LIB$SUBX             ;#3, LIB$SUBX                          00000000G  00         03  FB   00035
  1401.     BLBC    R0, 3$                 ;STATUS, 3$                   1088            2C         50  E9   0003C
  1402.     MOVZWL  #10000, 8(SP)             ;#10000, TEN_FOURTH               1090       08   AE     2710   8F  3C   0003F
  1403.     CLRL    12(SP)                 ;TEN_FOURTH+4                   1091             0C   AE  D4   00045
  1404.     PUSHL   SP                 ;SP                       1092                  5E  DD   00048
  1405.     PUSHAB  8(SP)                 ;MILLI_SECONDS                                      08   AE  9F   0004A
  1406.     PUSHAB  32(SP)                 ;ADJUSTED_TIME                                      20   AE  9F   0004D
  1407.     PUSHAB  20(SP)                 ;TEN_FOURTH                                      14   AE  9F   00050
  1408.     CALLS   #4, G^LIB$EDIV             ;#4, LIB$EDIV                          00000000G  00         04  FB   00053
  1409.     BLBS    R0, 2$                 ;STATUS, 2$                   1094            09         50  E8   0005A
  1410.     CMPL    R0, #1148             ;STATUS, #1148                          0000047C   8F         50  D1   0005D
  1411.     BNEQ    3$                 ;3$                                               05  12   00064
  1412. 2$:    MOVL    4(SP), R0             ;MILLI_SECONDS, R0               1096            50    04   AE  D0   00066
  1413.     RET                      ;                                               04   0006A
  1414. 3$:    CLRL    R0                 ;R0                                               50  D4   0006B
  1415.     RET                      ;                                               04   0006D
  1416.  
  1417. ; Routine Size:  110 bytes,    Routine Base:  $CODE$ + 05A1
  1418.  
  1419.  
  1420. ;   1098  1     
  1421. ;   1099  1     %SBTTL 'End of KERSYS.BLI'
  1422. ;   1100  1    END                        ! End of module
  1423. ;   1101  1     
  1424. ;   1102  0    ELUDOM
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431. ;                       PSECT SUMMARY
  1432. ;
  1433. ;    Name             Bytes                   Attributes
  1434. ;
  1435. ;  $OWN$                 2300  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  1436. ;  $PLIT$                  104  NOVEC,NOWRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  1437. ;  $CODE$                 1551  NOVEC,NOWRT,  RD ,  EXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  1438. ;  .  ABS  .                    0  NOVEC,NOWRT,NORD ,NOEXE,NOSHR,  LCL,  ABS,  CON,NOPIC,ALIGN(0)
  1439.  
  1440.  
  1441.  
  1442.  
  1443. ;                Library Statistics
  1444. ;
  1445. ;                         -------- Symbols --------        Pages    Processing
  1446. ;    File                     Total    Loaded   Percent      Mapped    Time
  1447. ;
  1448. ;  SYS$COMMON:[SYSLIB]STARLET.L32;4         15754        86         0       919          00:00.4
  1449. ;  SYS$COMMON:[SYSLIB]TPAMAC.L32;4            43         0         0        15          00:00.1
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457. ;                    COMMAND QUALIFIERS
  1458.  
  1459. ;    BLI/LIS/MAC=(ASSEM,UNIQ)/SOUR:NOHEAD VMSSYS
  1460.  
  1461. ; Compilation Complete
  1462.  
  1463.     .END
  1464.