home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / b / vmsfil.mar < prev    next >
Text File  |  2020-01-01  |  176KB  |  4,157 lines

  1. ;   0001  0    MODULE KERFIL (IDENT = '3.3.119',
  2. ;   0002  0        ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)) =
  3. ;   0003  1    BEGIN
  4. ;   0004  1    !<BLF/WIDTH:90>
  5. ;   0005  1     
  6. ;   0006  1    !++
  7. ;   0007  1    ! FACILITY:
  8. ;   0008  1    !    KERMIT-32 Microcomputer to mainframe file transfer utility.
  9. ;   0009  1    !
  10. ;   0010  1    ! ABSTRACT:
  11. ;   0011  1    !    KERFIL contains all of the file processing for KERMIT-32.  This
  12. ;   0012  1    !    module contains the routines to input/output characters to files
  13. ;   0013  1    !    and to open and close the files.
  14. ;   0014  1    !
  15. ;   0015  1    ! ENVIRONMENT:
  16. ;   0016  1    !    VAX/VMS user mode.
  17. ;   0017  1    !
  18. ;   0018  1    ! AUTHOR: Robert C. McQueen, CREATION DATE: 28-March-1983
  19. ;   0019  1    !
  20. ;   0020  1    !--
  21. ;   0021  1     
  22. ;   0022  1     %SBTTL 'Table of Contents'
  23. ;   0023  1     %SBTTL 'Revision History'
  24. ;   0024  1     
  25. ;   0025  1    !++
  26. ;   0026  1    !
  27. ;   0027  1    ! 1.0.000    By: Robert C. McQueen        On: 28-March-1983
  28. ;   0028  1    !        Create this module.
  29. ;   0029  1    ! 1.0.001    By: Robert C. McQueen        On: 4-April-1983
  30. ;   0030  1    !        Remove checks for <FF> in the input data stream.
  31. ;   0031  1    !
  32. ;   0032  1    ! 1.0.002    By: Robert C. McQueen        On: 31-May-1983
  33. ;   0033  1    !        Fix a bad check in wildcard processing.
  34. ;   0034  1    !
  35. ;   0035  1    ! 1.0.003    By: Nick Bush            On: 13-June-1983
  36. ;   0036  1    !        Add default file spec of .;0 so that wild-carded
  37. ;   0037  1    !        file types don't cause all version of a file to
  38. ;   0038  1    !        be transferred.
  39. ;   0039  1    !
  40. ;   0040  1    ! 1.0.004    By: Robert C. McQueen        On: 20-July-1983
  41. ;   0041  1    !        Strip off the parity bit on the compares for incoming ASCII
  42. ;   0042  1    !        files.
  43. ;   0043  1    !
  44. ;   0044  1    ! 1.2.005    By: Robert C. McQueen        On: 15-August-1983
  45. ;   0045  1    !        Attempt to improve the GET%FILE and make it smaller.
  46. ;   0046  1    !        Also start the implementation of the BLOCK file processing.
  47. ;   0047  1    !
  48. ;   0048  1    ! 2.0.006    Release VAX/VMS Kermit-32 version 2.0
  49. ;   0049  1    !
  50. ;   0050  1    ! 2.0.016    By: Nick Bush            On: 4-Dec-1983
  51. ;   0051  1    !        Change how binary files are written to (hopefully) improve
  52. ;   0052  1    !        the performance.  We will now use 510 records and only
  53. ;   0053  1    !        write out the record when it is filled (instead of writing
  54. ;   0054  1    !        one record per packet).  This should cut down on the overhead
  55. ;   0055  1    !        substantially.
  56. ;   0056  1    !
  57. ;   0057  1    ! 2.0.017    By: Nick Bush            On: 9-Dec-1983
  58. ;   0058  1    !        Fix processing for VFC format files.  Also fix GET_ASCII
  59. ;   0059  1    !        for PRN and FTN record types.  Change GET_ASCII so that
  60. ;   0060  1    !        'normal' CR records get sent with trailing CRLF's instead
  61. ;   0061  1    !        of <LF>record<CR>.  That was confusing too many people.
  62. ;   0062  1    !
  63. ;   0063  1    ! 2.0.022    By: Nick Bush            On: 15-Dec-1983
  64. ;   0064  1    !        Add Fixed record size (512 byte) format for writing files.
  65. ;   0065  1    !        This can be used for .EXE files.  Also clean up writing
  66. ;   0066  1    !        ASCII files so that we don't lose any characters.
  67. ;   0067  1    !
  68. ;   0068  1    ! 2.0.024    By: Robert C. McQueen        On: 19-Dec-1983
  69. ;   0069  1    !        Delete FILE_DUMP.
  70. ;   0070  1    !
  71. ;   0071  1    ! 2.0.026    By: Nick Bush            On: 3-Jan-1983
  72. ;   0072  1    !        Add options for format of file specification to be
  73. ;   0073  1    !        sent in file header packets.  Also type out full file
  74. ;   0074  1    !        specification being sent/received instead of just
  75. ;   0075  1    !        the name we are telling the other end to use.
  76. ;   0076  1    !
  77. ;   0077  1    ! 2.0.030    By: Nick Bush            On: 3-Feb-1983
  78. ;   0078  1    !        Add the capability of receiving a file with a different
  79. ;   0079  1    !        name than given by KERMSG.  The RECEIVE and GET commands
  80. ;   0080  1    !        now really are different.
  81. ;   0081  1    !
  82. ;   0082  1    ! 2.0.035    By: Nick Bush                On: 8-March-1984
  83. ;   0083  1    !        Add LOG SESSION command to set a log file for CONNECT.
  84. ;   0084  1    !        While we are doing so, clean up the command parsing a little
  85. ;   0085  1    !        so that we don't have as many COPY_xxx routines.
  86. ;   0086  1    !
  87. ;   0087  1    ! 2.0.036    By: Nick Bush                On: 15-March-1984
  88. ;   0088  1    !        Fix PUT_FILE to correctly handle carriage returns which are
  89. ;   0089  1    !        not followed by line feeds.  Count was being decremented
  90. ;   0090  1    !        Instead of incremented.
  91. ;   0091  1    !
  92. ;   0092  1    ! 2.0.040    By: Nick Bush                On: 22-March-1984
  93. ;   0093  1    !        Fix processing of FORTRAN carriage control to handle lines
  94. ;   0094  1    !        which do not contain the carriage control character (i.e., zero
  95. ;   0095  1    !        length records).  Previously, this type of record was sending
  96. ;   0096  1    !        infinite nulls.
  97. ;   0097  1    !
  98. ;   0098  1    ! 3.0.045    Start of version 3.
  99. ;   0099  1    !
  100. ;   0100  1    ! 3.0.046    By: Nick Bush                On: 29-March-1984
  101. ;   0101  1    !        Fix debugging log file to correctly set/clear file open
  102. ;   0102  1    !        flag.  Also make log files default to .LOG.
  103. ;   0103  1    !
  104. ;   0104  1    ! 3.0.050    By: Nick Bush                On: 2-April-1984
  105. ;   0105  1    !        Add SET SERVER_TIMER to determine period between idle naks.
  106. ;   0106  1    !        Also allow for a routine to process file specs before
  107. ;   0107  1    !        FILE_OPEN uses them.  This allows individual sites to
  108. ;   0108  1    !        restrict the format of file specifications used by Kermit.
  109. ;   0109  1    !
  110. ;   0110  1    ! 3.1.053    By: Robert C. McQueen            On: 9-July-1984
  111. ;   0111  1    !        Fix FORTRAN carriage control processing to pass along
  112. ;   0112  1    !        any character from the carriage control column that is
  113. ;   0113  1    !        not really carriage control.
  114. ;   0114  1    !
  115. ;   0115  1    ! Start version 3.2
  116. ;   0116  1    !
  117. ;   0117  1    ! 3.2.067    By: Robert C. McQueen            On: 8-May-1985
  118. ;   0118  1    !        Use $GETDVIW instead of $GETDVI.
  119. ;   0119  1    !
  120. ;   0120  1    ! 3.2.070    By: David Stevens            On: 16-July-1985
  121. ;   0121  1    !        Put "Sending: " prompt into NEXT_FILE routine, to make
  122. ;   0122  1    !        VMS KERMIT similar to KERMIT-10.
  123. ;   0123  1    !
  124. ;   0124  1    ! 3.2.077    By: Robert McQueen            On: 8-May-1986
  125. ;   0125  1    !        Fix FORTRAN CC once and for all (I hope).
  126. ;   0126  1    !
  127. ;   0127  1    ! Start of version 3.3
  128. ;   0128  1    !
  129. ;   0129  1    ! 3.3.105    By: Robert McQueen            On: 8-July-1986
  130. ;   0130  1    !        Do some clean up and attempt to fix LINK-W-TRUNC errors
  131. ;   0131  1    !        from a BLISS-32 bug.
  132. ;   0132  1    !
  133. ;   0133  1    ! 3.3.106    By: Robert McQueen            On: 8-July-1986
  134. ;   0134  1    !        Fix problem of closing a fixed file and losing data.
  135. ;   0135  1    !
  136. ;   0136  1    ! 3.3.111    By: Robert McQueen            On: 2-Oct-1986
  137. ;   0137  1    !        Make Kermit-32 not eat the parity from a CR if a LF doesn't
  138. ;   0138  1    !        follow it when writing an ASCII file.
  139. ;   0139  1    !
  140. ;   0140  1    ! 3.3.112    JHW0001        Jonathan H. Welch,     28-Apr-1988 12:11
  141. ;   0141  1    !        Fix the message generated in NEXT_FILE so that the
  142. ;   0142  1    !        filenames displayed (i.e. Sending: foo.bar;1 as foo.bar)
  143. ;   0143  1    !        are always terminated by a null (ASCIZ).
  144. ;   0144  1    !
  145. ;   0145  1    ! 3.3.117    JHW006        Jonathan H. Welch,    12-May-1988
  146. ;   0146  1    !        Calls to LIB$SIGNAL with multiple arguments were
  147. ;   0147  1    !        not coded correctly.  For calls with multiple arguments
  148. ;   0148  1    !        an argument count was added.
  149. ;   0149  1    !        Minor changes to KERM_HANDLER to make use of the changed
  150. ;   0150  1    !        argument passing method.
  151. ;   0151  1    !
  152. ;   0152  1    ! 3.3.118    JHW010        Jonathan H. Welch,    23-Apr-1990 09:42
  153. ;   0153  1    !        Added SET FILE BLOCKSIZE nnn (where nnn is the record size
  154. ;   0154  1    !        in bytes) command for incoming BINARY and FIXED file transfers.
  155. ;   0155  1    !        If no blocksize has been specified the old behavior (510 byte
  156. ;   0156  1    !        records plus 2 bytes (for CR/LF) for BINARY files and 512
  157. ;   0157  1    !        byte records for FIXED files will be used.
  158. ;   0158  1    !        Also modified SHOW FILE to display record size when appropriate.
  159. ;   0159  1    !
  160. ;   0160  1    ! 3.3.119    JHW015        Jonathan H. Welch,    16-Jul-1990 15:30
  161. ;   0161  1    !        Fixed the logic in GET_ASCII which was causing an infinite
  162. ;   0162  1    !        loop for files with print file carriage control.
  163. ;   0163  1    !--
  164. ;   0164  1     
  165. ;   0165  1     %SBTTL 'Forward definitions'
  166. ;   0166  1     
  167. ;   0167  1    FORWARD ROUTINE
  168. ;   0168  1        LOG_PUT,                    ! Write a buffer out
  169. ;   0169  1        DUMP_BUFFER,                ! Worker routine for FILE_DUMP.
  170. ;   0170  1        GET_BUFFER,                    ! Routine to do $GET
  171. ;   0171  1        GET_ASCII,                    ! Get an ASCII character
  172. ;   0172  1        GET_BLOCK,                    ! Get a block character
  173. ;   0173  1        FILE_ERROR : NOVALUE;            ! Error processing routine
  174. ;   0174  1     
  175. ;   0175  1     %SBTTL 'Require/Library files'
  176. ;   0176  1    !
  177. ;   0177  1    ! INCLUDE FILES:
  178. ;   0178  1    !
  179. ;   0179  1     
  180. ;   0180  1    LIBRARY 'SYS$LIBRARY:STARLET';
  181. ;   0181  1     
  182. ;   0182  1    REQUIRE 'KERCOM.REQ';
  183. ;   0391  1     
  184. ;   0392  1     %SBTTL 'Macro definitions'
  185. ;   0393  1    !
  186. ;   0394  1    ! MACROS:
  187. ;   0395  1    !
  188. ;   0396  1     %SBTTL 'Literal symbol definitions'
  189. ;   0397  1    !
  190. ;   0398  1    ! EQUATED SYMBOLS:
  191. ;   0399  1    !
  192. ;   0400  1    !
  193. ;   0401  1    ! Various states for reading the data from the file
  194. ;   0402  1    !
  195. ;   0403  1     
  196. ;   0404  1    LITERAL
  197. ;   0405  1        F_STATE_PRE = 0,                ! Prefix state
  198. ;   0406  1        F_STATE_PRE1 = 1,                ! Other prefix state
  199. ;   0407  1        F_STATE_DATA = 2,                ! Data processing state
  200. ;   0408  1        F_STATE_POST = 3,                ! Postfix processing state
  201. ;   0409  1        F_STATE_POST1 = 4,                ! Secondary postfix processing state
  202. ;   0410  1        F_STATE_MIN = 0,                ! Min state number
  203. ;   0411  1        F_STATE_MAX = 4;                ! Max state number
  204. ;   0412  1     
  205. ;   0413  1    !
  206. ;   0414  1    ! Buffer size for log file
  207. ;   0415  1    !
  208. ;   0416  1     
  209. ;   0417  1    LITERAL
  210. ;   0418  1        LOG_BUFF_SIZE = 256;            ! Number of bytes in log file buffer
  211. ;   0419  1     
  212. ;   0420  1     %SBTTL 'Local storage'
  213. ;   0421  1    !
  214. ;   0422  1    ! OWN STORAGE:
  215. ;   0423  1    !
  216. ;   0424  1     
  217. ;   0425  1    OWN
  218. ;   0426  1        SEARCH_FLAG,                ! Can/cannot do $SEARCH
  219. ;   0427  1        DEV_CLASS,                    ! Type of device we are reading
  220. ;   0428  1        EOF_FLAG,                    ! End of file reached.
  221. ;   0429  1        FILE_FAB : $FAB_DECL,            ! FAB for file processing
  222. ;   0430  1        FILE_NAM : $NAM_DECL,            ! NAM for file processing
  223. ;   0431  1        FILE_RAB : $RAB_DECL,            ! RAB for file processing
  224. ;   0432  1        FILE_XABFHC : $XABFHC_DECL,            ! XAB for file processing
  225. ;   0433  1        FILE_MODE,                    ! Mode of file (reading/writing)
  226. ;   0434  1        FILE_REC_POINTER,                ! Pointer to the record information
  227. ;   0435  1        FILE_REC_COUNT,                ! Count of the number of bytes
  228. ;   0436  1        REC_SIZE : LONG,                ! Record size
  229. ;   0437  1        REC_ADDRESS : LONG,                ! Record address
  230. ;   0438  1        FIX_SIZE : LONG,                ! Fixed control region size
  231. ;   0439  1        FIX_ADDRESS : LONG,            ! Address of buffer for fixed control region
  232. ;   0440  1        EXP_STR : VECTOR [CH$ALLOCATION (NAM$C_MAXRSS)],
  233. ;   0441  1        RES_STR : VECTOR [CH$ALLOCATION (NAM$C_MAXRSS)],
  234. ;   0442  1        RES_STR_D : BLOCK [8, BYTE];        ! Descriptor for the string
  235. ;   0443  1     
  236. ;   0444  1     %SBTTL 'Global storage'
  237. ;   0445  1    !
  238. ;   0446  1    ! Global storage:
  239. ;   0447  1    !
  240. ;   0448  1     
  241. ;   0449  1    GLOBAL
  242. ;   0450  1    
  243. ;   0451  1        file_blocksize,                ! Block size of for BINARY and FIXED files.
  244. ;   0452  1        file_blocksize_set,                ! 0=user has not specified a blocksize, 1=user has specified a blocksize
  245. ;   0453  1        FILE_TYPE,                    ! Type of file being xfered
  246. ;   0454  1        FILE_DESC : BLOCK [8, BYTE];        ! File name descriptor
  247. ;   0455  1     
  248. ;   0456  1     %SBTTL 'External routines and storage'
  249. ;   0457  1    !
  250. ;   0458  1    ! EXTERNAL REFERENCES:
  251. ;   0459  1    !
  252. ;   0460  1    !
  253. ;   0461  1    ! Storage in KERMSG
  254. ;   0462  1    !
  255. ;   0463  1     
  256. ;   0464  1    EXTERNAL
  257. ;   0465  1        ALT_FILE_SIZE,                ! Number of characters in FILE_NAME
  258. ;   0466  1        ALT_FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],    ! Storage
  259. ;   0467  1        FILE_SIZE,                    ! Number of characters in FILE_NAME
  260. ;   0468  1        FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],
  261. ;   0469  1        TY_FIL,                ! Flag that file names are being typed
  262. ;   0470  1        CONNECT_FLAG,    ! Indicator of whether we have a terminal to type on
  263. ;   0471  1        FIL_NORMAL_FORM;                ! File specification type
  264. ;   0472  1     
  265. ;   0473  1    !
  266. ;   0474  1    !  Routines in KERTT
  267. ;   0475  1    !
  268. ;   0476  1     
  269. ;   0477  1    EXTERNAL ROUTINE
  270. ;   0478  1        TT_OUTPUT : NOVALUE;    ! Force buffered output
  271. ;   0479  1     
  272. ;   0480  1    !
  273. ;   0481  1    ! System libraries
  274. ;   0482  1    !
  275. ;   0483  1     
  276. ;   0484  1    EXTERNAL ROUTINE
  277. ;   0485  1        LIB$GET_VM : ADDRESSING_MODE (GENERAL),
  278. ;   0486  1        LIB$FREE_VM : ADDRESSING_MODE (GENERAL),
  279. ;   0487  1        LIB$SIGNAL : ADDRESSING_MODE (GENERAL) NOVALUE;
  280. ;   0488  1     
  281. ;   0489  1     %SBTTL 'File processing -- FILE_INIT - Initialization'
  282. ;   0490  1     
  283. ;   0491  1    GLOBAL ROUTINE FILE_INIT : NOVALUE =
  284. ;   0492  1     
  285. ;   0493  1    !++
  286. ;   0494  1    ! FUNCTIONAL DESCRIPTION:
  287. ;   0495  1    !
  288. ;   0496  1    !    This routine will initialize some of the storage in the file processing
  289. ;   0497  1    !    module.
  290. ;   0498  1    !
  291. ;   0499  1    ! CALLING SEQUENCE:
  292. ;   0500  1    !
  293. ;   0501  1    !    FILE_INIT();
  294. ;   0502  1    !
  295. ;   0503  1    ! INPUT PARAMETERS:
  296. ;   0504  1    !
  297. ;   0505  1    !    None.
  298. ;   0506  1    !
  299. ;   0507  1    ! IMPLICIT INPUTS:
  300. ;   0508  1    !
  301. ;   0509  1    !    None.
  302. ;   0510  1    !
  303. ;   0511  1    ! OUTPUT PARAMETERS:
  304. ;   0512  1    !
  305. ;   0513  1    !    None.
  306. ;   0514  1    !
  307. ;   0515  1    ! IMPLICIT OUTPUTS:
  308. ;   0516  1    !
  309. ;   0517  1    !    None.
  310. ;   0518  1    !
  311. ;   0519  1    ! COMPLETION CODES:
  312. ;   0520  1    !
  313. ;   0521  1    !    None.
  314. ;   0522  1    !
  315. ;   0523  1    ! SIDE EFFECTS:
  316. ;   0524  1    !
  317. ;   0525  1    !    None.
  318. ;   0526  1    !
  319. ;   0527  1    !--
  320. ;   0528  1     
  321. ;   0529  2        BEGIN
  322. ;   0530  2        FILE_TYPE = FILE_ASC;
  323. ;   0531  2        file_blocksize = 512;
  324. ;   0532  2        file_blocksize_set = 0;
  325. ;   0533  2    
  326. ;   0534  2    ! Now set up the file specification descriptor
  327. ;   0535  2        FILE_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
  328. ;   0536  2        FILE_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  329. ;   0537  2        FILE_DESC [DSC$A_POINTER] = FILE_NAME;
  330. ;   0538  2        FILE_DESC [DSC$W_LENGTH] = 0;
  331. ;   0539  2        EOF_FLAG = FALSE;
  332. ;   0540  1        END;                    ! End of FILE_INIT
  333.  
  334.  
  335.     .TITLE  KERFIL
  336.     .IDENT  \3.3.119\
  337.  
  338.     .PSECT  $OWN$,NOEXE,2
  339.  
  340. ;SEARCH_FLAG
  341. U.7:    .BLKB   4                                       ;                      00000
  342. ;DEV_CLASS
  343. U.8:    .BLKB   4                                       ;                      00004
  344. ;EOF_FLAG
  345. U.9:    .BLKB   4                                       ;                      00008
  346. ;FILE_FAB
  347. U.10:    .BLKB   80                                       ;                      0000C
  348. ;FILE_NAM
  349. U.11:    .BLKB   96                                       ;                      0005C
  350. ;FILE_RAB
  351. U.12:    .BLKB   68                                       ;                      000BC
  352. ;FILE_XABFHC
  353. U.13:    .BLKB   44                                       ;                      00100
  354. ;FILE_MODE
  355. U.14:    .BLKB   4                                       ;                      0012C
  356. ;FILE_REC_POINTER
  357. U.15:    .BLKB   4                                       ;                      00130
  358. ;FILE_REC_COUNT
  359. U.16:    .BLKB   4                                       ;                      00134
  360. ;REC_SIZE
  361. U.17:    .BLKB   4                                       ;                      00138
  362. ;REC_ADDRESS
  363. U.18:    .BLKB   4                                       ;                      0013C
  364. ;FIX_SIZE
  365. U.19:    .BLKB   4                                       ;                      00140
  366. ;FIX_ADDRESS
  367. U.20:    .BLKB   4                                       ;                      00144
  368. ;EXP_STR
  369. U.21:    .BLKB   256                                       ;                      00148
  370. ;RES_STR
  371. U.22:    .BLKB   256                                       ;                      00248
  372. ;RES_STR_D
  373. U.23:    .BLKB   8                                       ;                      00348
  374.  
  375.     .PSECT  $GLOBAL$,NOEXE,2
  376.  
  377. FILE_BLOCKSIZE::
  378.     .BLKB   4                                       ;                      00000
  379. FILE_BLOCKSIZE_SET::
  380.     .BLKB   4                                       ;                      00004
  381. FILE_TYPE::
  382.     .BLKB   4                                       ;                      00008
  383. FILE_DESC::
  384.     .BLKB   8                                       ;                      0000C
  385.  
  386. FNM_NORMAL==        1
  387. FNM_FULL==        2
  388. FNM_UNTRAN==        4
  389. PR_MIN==        0
  390. PR_NONE==        0
  391. PR_MARK==        1
  392. PR_EVEN==        2
  393. PR_ODD==        3
  394. PR_SPACE==        4
  395. PR_MAX==        4
  396. GC_MIN==        1
  397. GC_EXIT==        1
  398. GC_DIRECTORY==        2
  399. GC_DISK_USAGE==     3
  400. GC_DELETE==        4
  401. GC_TYPE==        5
  402. GC_HELP==        6
  403. GC_LOGOUT==        7
  404. GC_LGN==        8
  405. GC_CONNECT==        9
  406. GC_RENAME==        10
  407. GC_COPY==        11
  408. GC_WHO==        12
  409. GC_SEND_MSG==        13
  410. GC_STATUS==        14
  411. GC_COMMAND==        15
  412. GC_KERMIT==        16
  413. GC_JOURNAL==        17
  414. GC_VARIABLE==        18
  415. GC_PROGRAM==        19
  416. GC_MAX==        19
  417. DP_FULL==        0
  418. DP_HALF==        1
  419. CHK_1CHAR==        49
  420. CHK_2CHAR==        50
  421. CHK_CRC==        51
  422. MAX_MSG==        1002
  423.     .EXTRN  ALT_FILE_SIZE, ALT_FILE_NAME, FILE_SIZE, FILE_NAME, TY_FIL, CONNECT_FLAG, FIL_NORMAL_FORM
  424.     .EXTRN  TT_OUTPUT, LIB$GET_VM, LIB$FREE_VM, LIB$SIGNAL
  425.  
  426.     .PSECT  $CODE$,NOWRT,2
  427.  
  428.     .ENTRY  FILE_INIT, ^M<R2>         ;FILE_INIT, Save R2               0491                    0004   00000
  429.     MOVAB   G^FILE_TYPE, R2             ;FILE_TYPE, R2                                     52 00000000'  00  9E   00002
  430.     MOVL    #1, (R2)             ;#1, FILE_TYPE                   0530            62         01  D0   00009
  431.     MOVZWL  #512, -8(R2)             ;#512, FILE_BLOCKSIZE               0531       F8   A2     0200   8F  3C   0000C
  432.     CLRL    -4(R2)                 ;FILE_BLOCKSIZE_SET               0532             FC   A2  D4   00012
  433.     MOVL    #17694720, 4(R2)         ;#17694720, FILE_DESC               0538       04   A2 010E0000   8F  D0   00015
  434.     MOVAB   G^FILE_NAME, 8(R2)         ;FILE_NAME, FILE_DESC+4           0537       08   A2 00000000G  00  9E   0001D
  435.     CLRL    G^U.9                 ;U.9                       0539           00000000'  00  D4   00025
  436.     RET                      ;                       0540                  04   0002B
  437.  
  438. ; Routine Size:  44 bytes,    Routine Base:  $CODE$ + 0000
  439.  
  440.  
  441. ;   0541  1     
  442. ;   0542  1     %SBTTL 'GET_FILE'
  443. ;   0543  1     
  444. ;   0544  1    GLOBAL ROUTINE GET_FILE (CHARACTER) =
  445. ;   0545  1     
  446. ;   0546  1    !++
  447. ;   0547  1    ! FUNCTIONAL DESCRIPTION:
  448. ;   0548  1    !
  449. ;   0549  1    !    This routine will return a character from the input file.
  450. ;   0550  1    !    The character will be stored into the location specified by
  451. ;   0551  1    !    CHARACTER.
  452. ;   0552  1    !
  453. ;   0553  1    ! CALLING SEQUENCE:
  454. ;   0554  1    !
  455. ;   0555  1    !    GET_FILE (LOCATION_TO_STORE_CHAR);
  456. ;   0556  1    !
  457. ;   0557  1    ! INPUT PARAMETERS:
  458. ;   0558  1    !
  459. ;   0559  1    !    LOCATION_TO_STORE_CHAR - This is the address to store the character
  460. ;   0560  1    !        into.
  461. ;   0561  1    !
  462. ;   0562  1    ! IMPLICIT INPUTS:
  463. ;   0563  1    !
  464. ;   0564  1    !    None.
  465. ;   0565  1    !
  466. ;   0566  1    ! OUTPUT PARAMETERS:
  467. ;   0567  1    !
  468. ;   0568  1    !    Character stored into the location specified.
  469. ;   0569  1    !
  470. ;   0570  1    ! IMPLICIT OUTPUTS:
  471. ;   0571  1    !
  472. ;   0572  1    !    None.
  473. ;   0573  1    !
  474. ;   0574  1    ! COMPLETION CODES:
  475. ;   0575  1    !
  476. ;   0576  1    !    True - Character stored into the location specified.
  477. ;   0577  1    !    False - End of file reached.
  478. ;   0578  1    !
  479. ;   0579  1    ! SIDE EFFECTS:
  480. ;   0580  1    !
  481. ;   0581  1    !    None.
  482. ;   0582  1    !
  483. ;   0583  1    !--
  484. ;   0584  1     
  485. ;   0585  2        BEGIN
  486. ;   0586  2    !
  487. ;   0587  2    ! Define the various condition codes that we check for in this routine
  488. ;   0588  2    !
  489. ;   0589  2        EXTERNAL LITERAL
  490. ;   0590  2        KER_EOF;                ! End of file
  491. ;   0591  2     
  492. ;   0592  2        LOCAL
  493. ;   0593  2        STATUS;                    ! Random status values
  494. ;   0594  2     
  495. ;   0595  2        IF .EOF_FLAG THEN RETURN KER_EOF;
  496. ;   0596  2     
  497. ;   0597  2        SELECTONE .FILE_TYPE OF
  498. ;   0598  2        SET
  499. ;   0599  2     
  500. ;   0600  2        [FILE_ASC, FILE_BIN, FILE_FIX] :
  501. ;   0601  2            STATUS = GET_ASCII (.CHARACTER);
  502. ;   0602  2     
  503. ;   0603  2        [FILE_BLK] :
  504. ;   0604  2            STATUS = GET_BLOCK (.CHARACTER);
  505. ;   0605  2        TES;
  506. ;   0606  2     
  507. ;   0607  2        RETURN .STATUS;
  508. ;   0608  1        END;                    ! End of GET_FILE
  509.  
  510.  
  511.  
  512.     .EXTRN  KER_EOF
  513.  
  514.     .ENTRY  GET_FILE, ^M<>             ;GET_FILE, Save nothing           0544                    0000   00000
  515.     BLBC    G^U.9, 1$             ;U.9, 1$                   0595            08 00000000'  00  E9   00002
  516.     MOVL    #KER_EOF, R0             ;#KER_EOF, R0                                     50 00000000G  8F  D0   00009
  517.     RET                      ;                                               04   00010
  518. 1$:    MOVL    G^FILE_TYPE, R0             ;FILE_TYPE, R0                   0597            50 00000000'  00  D0   00011
  519.     BLEQ    2$                 ;2$                       0600                  05  15   00018
  520.     CMPL    R0, #2                 ;R0, #2                                     02         50  D1   0001A
  521.     BLEQ    3$                 ;3$                                               05  15   0001D
  522. 2$:    CMPL    R0, #4                 ;R0, #4                                     04         50  D1   0001F
  523.     BNEQ    4$                 ;4$                                               0B  12   00022
  524. 3$:    PUSHL   4(AP)                 ;CHARACTER                   0601             04   AC  DD   00024
  525.     CALLS   #1, G^U.4             ;#1, U.4                          00000000V  00         01  FB   00027
  526.     RET                      ;                                               04   0002E
  527. 4$:    CMPL    R0, #3                 ;R0, #3                   0603            03         50  D1   0002F
  528.     BNEQ    5$                 ;5$                                               0A  12   00032
  529.     PUSHL   4(AP)                 ;CHARACTER                   0604             04   AC  DD   00034
  530.     CALLS   #1, G^U.5             ;#1, U.5                          00000000V  00         01  FB   00037
  531. 5$:    RET                      ;                       0607                  04   0003E
  532.  
  533. ; Routine Size:  63 bytes,    Routine Base:  $CODE$ + 002C
  534.  
  535.  
  536. ;   0609  1     %SBTTL 'GET_ASCII - Get a character from an ASCII file'
  537. ;   0610  1    ROUTINE GET_ASCII (CHARACTER) =
  538. ;   0611  1     
  539. ;   0612  1    !++
  540. ;   0613  1    ! FUNCTIONAL DESCRIPTION:
  541. ;   0614  1    !
  542. ;   0615  1    ! CALLING SEQUENCE:
  543. ;   0616  1    !
  544. ;   0617  1    ! INPUT PARAMETERS:
  545. ;   0618  1    !
  546. ;   0619  1    !    None.
  547. ;   0620  1    !
  548. ;   0621  1    ! IMPLICIT INPUTS:
  549. ;   0622  1    !
  550. ;   0623  1    !    None.
  551. ;   0624  1    !
  552. ;   0625  1    ! OUPTUT PARAMETERS:
  553. ;   0626  1    !
  554. ;   0627  1    !    None.
  555. ;   0628  1    !
  556. ;   0629  1    ! IMPLICIT OUTPUTS:
  557. ;   0630  1    !
  558. ;   0631  1    !    None.
  559. ;   0632  1    !
  560. ;   0633  1    ! COMPLETION CODES:
  561. ;   0634  1    !
  562. ;   0635  1    !   KER_EOF -  End of file encountered
  563. ;   0636  1    !   KER_ILLFILTYP - Illegal file type
  564. ;   0637  1    !   KER_NORMAL - Normal return
  565. ;   0638  1    !
  566. ;   0639  1    ! SIDE EFFECTS:
  567. ;   0640  1    !
  568. ;   0641  1    !    None.
  569. ;   0642  1    !
  570. ;   0643  1    !--
  571. ;   0644  1     
  572. ;   0645  2        BEGIN
  573. ;   0646  2    !
  574. ;   0647  2    ! Status codes that are returned by this module
  575. ;   0648  2    !
  576. ;   0649  2        EXTERNAL LITERAL
  577. ;   0650  2        KER_EOF,            ! End of file encountered
  578. ;   0651  2        KER_ILLFILTYP,            ! Illegal file type
  579. ;   0652  2        KER_NORMAL;            ! Normal return
  580. ;   0653  2     
  581. ;   0654  2        OWN
  582. ;   0655  2        CC_COUNT,            ! Count of the number of CC things to output
  583. ;   0656  2        CC_TYPE;            ! Type of carriage control being processed.
  584. ;   0657  2     
  585. ;   0658  2        LOCAL
  586. ;   0659  2        STATUS,                    ! For status values
  587. ;   0660  2        RAT;
  588. ;   0661  2     %SBTTL 'GET_FTN_FILE_CHARACTER - Get a character from an Fortran carriage control file'
  589. ;   0662  2    ROUTINE GET_FTN_FILE_CHARACTER (CHARACTER) = 
  590. ;   0663  2    !++
  591. ;   0664  2    ! FUNCTIONAL DESCRIPTION:
  592. ;   0665  2    !
  593. ;   0666  2    !   This routine will get a character from a FORTRAN carriage control file.
  594. ;   0667  2    !   A FORTRAN carriage control file is one with FAB$M_FTN on in the FAB$B_RAT
  595. ;   0668  2    !   field.
  596. ;   0669  2    !
  597. ;   0670  2    ! FORMAL PARAMETERS:
  598. ;   0671  2    !
  599. ;   0672  2    !   CHARACTER - Address of where to store the character
  600. ;   0673  2    !
  601. ;   0674  2    ! IMPLICIT INPUTS:
  602. ;   0675  2    !
  603. ;   0676  2    !   CC_TYPE - Carriage control type
  604. ;   0677  2    !
  605. ;   0678  2    ! IMPLICIT OUTPUTS:
  606. ;   0679  2    !
  607. ;   0680  2    !   CC_TYPE - Updated if this is the first characte of the record
  608. ;   0681  2    !
  609. ;   0682  2    ! COMPLETION_CODES:
  610. ;   0683  2    !
  611. ;   0684  2    !   System service or Kermit status code
  612. ;   0685  2    !
  613. ;   0686  2    ! SIDE EFFECTS:
  614. ;   0687  2    !
  615. ;   0688  2    !   Next buffer can be read from the data file.
  616. ;   0689  2    !--
  617. ;   0690  3        BEGIN
  618. ;   0691  3    !
  619. ;   0692  3    ! Dispatch according to the state of the file being read.  Beginning of
  620. ;   0693  3    ! record, middle of record, end of record
  621. ;   0694  3    !
  622. ;   0695  3        WHILE TRUE DO
  623. ;   0696  3        CASE .FILE_FAB[FAB$L_CTX] FROM F_STATE_MIN TO F_STATE_MAX OF
  624. ;   0697  3            SET
  625. ;   0698  3    !
  626. ;   0699  3    ! Here at the beginning of a record.  We must read the buffer from the file
  627. ;   0700  3    ! at this point.  Once the buffer is read we must then determine what to do
  628. ;   0701  3    ! with the FORTRAN carriage control that at the beginning of the buffer.
  629. ;   0702  3    !
  630. ;   0703  3            [F_STATE_PRE ]:
  631. ;   0704  4            BEGIN    
  632. ;   0705  4    !
  633. ;   0706  4    ! Local variables
  634. ;   0707  4    !
  635. ;   0708  4            LOCAL
  636. ;   0709  4                STATUS;                ! Status returned by the
  637. ;   0710  4                                !  GET_BUFFER routine
  638. ;   0711  4    !
  639. ;   0712  4    ! Get the buffer
  640. ;   0713  4    !
  641. ;   0714  4            STATUS = GET_BUFFER ();            ! Get a buffer from the system
  642. ;   0715  5            IF (NOT .STATUS)            ! If this call failed
  643. ;   0716  5                OR (.STATUS EQL KER_EOF)        !  or we got an EOF
  644. ;   0717  4            THEN
  645. ;   0718  4                RETURN .STATUS;            ! Just return the status
  646. ;   0719  4    !
  647. ;   0720  4    ! Here with a valid buffer full of data all set to be decoded
  648. ;   0721  4    !
  649. ;   0722  4            IF .FILE_REC_COUNT LEQ 0        ! If nothing, use a space
  650. ;   0723  4            THEN                    !  for the carriage control
  651. ;   0724  4                CC_TYPE = %C' '
  652. ;   0725  4            ELSE
  653. ;   0726  5                BEGIN
  654. ;   0727  5                CC_TYPE = CH$RCHAR_A (FILE_REC_POINTER);
  655. ;   0728  5                FILE_REC_COUNT = .FILE_REC_COUNT - 1;
  656. ;   0729  4                END;
  657. ;   0730  4    !
  658. ;   0731  4    ! Dispatch on the type of carriage control that we are processing
  659. ;   0732  4    !
  660. ;   0733  4            SELECTONE .CC_TYPE OF
  661. ;   0734  4                SET
  662. ;   0735  4    !
  663. ;   0736  4    ! All of these just output:
  664. ;   0737  4    !   <DATA> <Carriage-control>
  665. ;   0738  4    !
  666. ;   0739  4                [CHR_NUL, %C'+'] :
  667. ;   0740  5                BEGIN
  668. ;   0741  5                FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  669. ;   0742  4                END;
  670. ;   0743  4    !
  671. ;   0744  4    ! This outputs:
  672. ;   0745  4    !   <LF><DATA><CR>
  673. ;   0746  4    !
  674. ;   0747  4                [%C'$', %C' '] :
  675. ;   0748  5                BEGIN
  676. ;   0749  5                .CHARACTER = CHR_LFD;
  677. ;   0750  5                FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  678. ;   0751  5                RETURN KER_NORMAL;
  679. ;   0752  4                END;
  680. ;   0753  4    !
  681. ;   0754  4    ! This outputs:
  682. ;   0755  4    !   <LF><LF><DATA><CR>
  683. ;   0756  4    !
  684. ;   0757  4                [%C'0'] :
  685. ;   0758  5                BEGIN
  686. ;   0759  5                .CHARACTER = CHR_LFD;
  687. ;   0760  5                FILE_FAB [FAB$L_CTX] = F_STATE_PRE1;
  688. ;   0761  5                RETURN KER_NORMAL;
  689. ;   0762  4                END;
  690. ;   0763  4    !
  691. ;   0764  4    ! This outputs:
  692. ;   0765  4    !   <FORM FEED><DATA><CR>
  693. ;   0766  4    !
  694. ;   0767  4                [%C'1'] :
  695. ;   0768  5                BEGIN
  696. ;   0769  5                .CHARACTER = CHR_FFD;
  697. ;   0770  5                FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  698. ;   0771  5                RETURN KER_NORMAL;
  699. ;   0772  4                END;
  700. ;   0773  4    !
  701. ;   0774  4    ! If we don't know the type of carriage control, then just return the
  702. ;   0775  4    ! character we read as data and set the carriage control to be space
  703. ;   0776  4    ! to fool the post processing of the record
  704. ;   0777  4    !
  705. ;   0778  4                [OTHERWISE] :
  706. ;   0779  5                BEGIN
  707. ;   0780  5                .CHARACTER = .CC_TYPE;        ! Return the character
  708. ;   0781  5                CC_TYPE = %C' ';        ! Treat as space
  709. ;   0782  5                FILE_REC_POINTER = CH$PLUS(.FILE_REC_POINTER,-1);
  710. ;   0783  5                FILE_REC_COUNT = .FILE_REC_COUNT + 1;
  711. ;   0784  5                FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  712. ;   0785  5                RETURN KER_NORMAL
  713. ;   0786  4                END;
  714. ;   0787  4                TES;
  715. ;   0788  4     
  716. ;   0789  3            END;
  717. ;   0790  3    !
  718. ;   0791  3    ! Here to add the second LF for the double spacing FORTRAN carriage control
  719. ;   0792  3    !
  720. ;   0793  3            [F_STATE_PRE1 ]:
  721. ;   0794  4            BEGIN
  722. ;   0795  4            .CHARACTER = CHR_LFD;
  723. ;   0796  4            FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  724. ;   0797  4            RETURN KER_NORMAL;
  725. ;   0798  3            END;
  726. ;   0799  3    !
  727. ;   0800  3    ! Here to read the data of the record
  728. ;   0801  3    !
  729. ;   0802  3            [F_STATE_DATA]:
  730. ;   0803  4            BEGIN
  731. ;   0804  4    !
  732. ;   0805  4    ! Here to read the data of the record and return it to the caller
  733. ;   0806  4    ! This section can only return KER_NORMAL to the caller
  734. ;   0807  4    !
  735. ;   0808  4            IF .FILE_REC_COUNT LEQ 0        ! Anything left in the buffer
  736. ;   0809  4            THEN
  737. ;   0810  4                FILE_FAB [FAB$L_CTX] = F_STATE_POST    ! No, do post processing
  738. ;   0811  4            ELSE
  739. ;   0812  5                BEGIN
  740. ;   0813  5                .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);    ! Get a character
  741. ;   0814  5                FILE_REC_COUNT = .FILE_REC_COUNT - 1;   ! Decrement the count
  742. ;   0815  5                RETURN KER_NORMAL;            ! Give a good return
  743. ;   0816  4                END;
  744. ;   0817  3            END;
  745. ;   0818  3    !
  746. ;   0819  3    ! Here to do post processing of the record.  At this point we are going
  747. ;   0820  3    ! to store either nothing as the post fix, a carriage return for overprinting
  748. ;   0821  3    ! or a carriage return and then a line feed in the POST1 state.
  749. ;   0822  3    !
  750. ;   0823  3            [F_STATE_POST ]:
  751. ;   0824  4            BEGIN
  752. ;   0825  4            SELECTONE .CC_TYPE OF
  753. ;   0826  4                SET
  754. ;   0827  4    !
  755. ;   0828  4    ! This stat is for no carriage control on the record.  This is for
  756. ;   0829  4    ! 'null' carriage control (VMS manual states: "Null carriage control 
  757. ;   0830  4    ! (print buffer contents.)" and for prompt carriage control.
  758. ;   0831  4    !
  759. ;   0832  4                [CHR_NUL, %C'$' ]:
  760. ;   0833  5                BEGIN
  761. ;   0834  5                FILE_FAB [FAB$L_CTX] = F_STATE_PRE
  762. ;   0835  4                END;
  763. ;   0836  4    !
  764. ;   0837  4    ! This is the normal state, that causes the postfix for the data to be
  765. ;   0838  4    ! a line feed.  
  766. ;   0839  4    !
  767. ;   0840  4                [%C'0', %C'1', %C' ', %C'+' ]:
  768. ;   0841  5                BEGIN
  769. ;   0842  5                .CHARACTER = CHR_CRT;
  770. ;   0843  5                FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
  771. ;   0844  5                RETURN KER_NORMAL
  772. ;   0845  4                END;
  773. ;   0846  4                TES;
  774. ;   0847  4     
  775. ;   0848  3            END;
  776. ;   0849  3    !
  777. ;   0850  3    ! Here if we are in a state that this routine doesn't set.  Just assume that
  778. ;   0851  3    ! something screwed up and give an illegal file type return to the caller
  779. ;   0852  3    !
  780. ;   0853  3            [INRANGE, OUTRANGE]:
  781. ;   0854  3            RETURN KER_ILLFILTYP;
  782. ;   0855  3     
  783. ;   0856  3            TES
  784. ;   0857  2        END;
  785.  
  786.  
  787.  
  788.     .PSECT  $OWN$,NOEXE,2
  789.  
  790. ;CC_COUNT
  791. U.30:    .BLKB   4                                       ;                      00350
  792. ;CC_TYPE
  793. U.31:    .BLKB   4                                       ;                      00354
  794.  
  795.     .EXTRN  KER_ILLFILTYP, KER_NORMAL
  796.  
  797.     .PSECT  $CODE$,NOWRT,2
  798.  
  799. ;GET_FTN_FILE_CHARACTER
  800. U.32:    .WORD   ^M<R2>                 ;Save R2                   0662                    0004   00000
  801.     MOVAB   G^U.10+24, R2             ;U.10+24, R2                                     52 00000000'  00  9E   00002
  802. 1$:    CASEL   (R2), #0, #4             ;FILE_FAB+24, #0, #4               0696            00         62  CF   00009
  803.                          ;                                         04       0000C
  804. 2$:    .WORD   4$-2$,-                 ;4$-2$,-                                   008D       0012       0000D
  805.         14$-2$,-             ;14$-2$,-                             00B4       0096       00011
  806.         16$-2$,-             ;16$-2$,-                                   000A       00015
  807.         18$-2$,-             ;18$-2$,-
  808.         3$-2$                 ;3$-2$
  809. 3$:    MOVL    #KER_ILLFILTYP, R0         ;#KER_ILLFILTYP, R0               0854            50 00000000G  8F  D0   00017
  810.     RET                      ;                                               04   0001E
  811. 4$:    CALLS   #0, G^U.3             ;#0, U.3                   0714 00000000V  00         00  FB   0001F
  812.     BLBS    R0, 5$                 ;STATUS, 5$                   0715            01         50  E8   00026
  813.     RET                      ;                                               04   00029
  814. 5$:    CMPL    R0, #KER_EOF             ;STATUS, #KER_EOF               0716 00000000G  8F         50  D1   0002A
  815.     BNEQ    6$                 ;6$                                               01  12   00031
  816.     RET                      ;                                               04   00033
  817. 6$:    TSTL    272(R2)                 ;FILE_REC_COUNT               0722               0110   C2  D5   00034
  818.     BGTR    7$                 ;7$                                               07  14   00038
  819.     MOVL    #32, 816(R2)             ;#32, CC_TYPE                   0724     0330   C2         20  D0   0003A
  820.     BRB     8$                 ;8$                                               12  11   0003F
  821. 7$:    MOVL    268(R2), R0             ;FILE_REC_POINTER, R0               0727            50     010C   C2  D0   00041
  822.     MOVZBL  (R0), 816(R2)             ;(R0), CC_TYPE                              0330   C2         60  9A   00046
  823.     INCL    268(R2)                 ;FILE_REC_POINTER                                    010C   C2  D6   0004B
  824.     DECL    272(R2)                 ;FILE_REC_COUNT               0728               0110   C2  D7   0004F
  825. 8$:    MOVL    816(R2), R0             ;CC_TYPE, R0                   0733            50     0330   C2  D0   00053
  826.     BEQL    9$                 ;9$                       0739                  05  13   00058
  827.     CMPL    R0, #43                 ;R0, #43                                     2B         50  D1   0005A
  828.     BNEQ    11$                 ;11$                                               05  12   0005D
  829. 9$:    MOVL    #2, (R2)             ;#2, FILE_FAB+24               0741            62         02  D0   0005F
  830. 10$:    BRB     1$                 ;1$                                               A5  11   00062
  831. 11$:    CMPL    R0, #32                 ;R0, #32                   0747            20         50  D1   00064
  832.     BEQL    14$                 ;14$                                               31  13   00067
  833.     CMPL    R0, #36                 ;R0, #36                                     24         50  D1   00069
  834.     BEQL    14$                 ;14$                                               2C  13   0006C
  835.     CMPL    R0, #48                 ;R0, #48                   0757            30         50  D1   0006E
  836.     BNEQ    12$                 ;12$                                               09  12   00071
  837.     MOVL    #10, @4(AP)             ;#10, @CHARACTER               0759       04   BC         0A  D0   00073
  838.     MOVL    #1, (R2)             ;#1, FILE_FAB+24               0760            62         01  D0   00077
  839.     BRB     22$                 ;22$                       0761                  72  11   0007A
  840. 12$:    CMPL    R0, #49                 ;R0, #49                   0767            31         50  D1   0007C
  841.     BNEQ    13$                 ;13$                                               06  12   0007F
  842.     MOVL    #12, @4(AP)             ;#12, @CHARACTER               0769       04   BC         0C  D0   00081
  843.     BRB     15$                 ;15$                       0770                  17  11   00085
  844. 13$:    MOVL    R0, @4(AP)             ;R0, @CHARACTER               0780       04   BC         50  D0   00087
  845.     MOVL    #32, 816(R2)             ;#32, CC_TYPE                   0781     0330   C2         20  D0   0008B
  846.     DECL    268(R2)                 ;FILE_REC_POINTER               0782               010C   C2  D7   00090
  847.     INCL    272(R2)                 ;FILE_REC_COUNT               0783               0110   C2  D6   00094
  848.     BRB     15$                 ;15$                       0784                  04  11   00098
  849. 14$:    MOVL    #10, @4(AP)             ;#10, @CHARACTER               0795       04   BC         0A  D0   0009A
  850. 15$:    MOVL    #2, (R2)             ;#2, FILE_FAB+24               0796            62         02  D0   0009E
  851.     BRB     22$                 ;22$                       0797                  4B  11   000A1
  852. 16$:    TSTL    272(R2)                 ;FILE_REC_COUNT               0808               0110   C2  D5   000A3
  853.     BGTR    17$                 ;17$                                               05  14   000A7
  854.     MOVL    #3, (R2)             ;#3, FILE_FAB+24               0810            62         03  D0   000A9
  855.     BRB     10$                 ;10$                                               B4  11   000AC
  856. 17$:    MOVL    268(R2), R0             ;FILE_REC_POINTER, R0               0813            50     010C   C2  D0   000AE
  857.     MOVZBL  (R0), @4(AP)             ;(R0), @CHARACTER                            04   BC         60  9A   000B3
  858.     INCL    268(R2)                 ;FILE_REC_POINTER                                    010C   C2  D6   000B7
  859.     DECL    272(R2)                 ;FILE_REC_COUNT               0814               0110   C2  D7   000BB
  860.     BRB     22$                 ;22$                       0815                  2D  11   000BF
  861. 18$:    MOVL    816(R2), R0             ;CC_TYPE, R0                   0825            50     0330   C2  D0   000C1
  862.     BEQL    19$                 ;19$                       0832                  05  13   000C6
  863.     CMPL    R0, #36                 ;R0, #36                                     24         50  D1   000C8
  864.     BNEQ    20$                 ;20$                                               04  12   000CB
  865. 19$:    CLRL    (R2)                 ;FILE_FAB+24                   0834                  62  D4   000CD
  866.     BRB     10$                 ;10$                                               91  11   000CF
  867. 20$:    CMPL    R0, #32                 ;R0, #32                   0840            20         50  D1   000D1
  868.     BEQL    21$                 ;21$                                               12  13   000D4
  869.     CMPL    R0, #43                 ;R0, #43                                     2B         50  D1   000D6
  870.     BEQL    21$                 ;21$                                               0D  13   000D9
  871.     CMPL    R0, #48                 ;R0, #48                                     30         50  D1   000DB
  872.     BLSS    10$                 ;10$                                               82  19   000DE
  873.     CMPL    R0, #49                 ;R0, #49                                     31         50  D1   000E0
  874.     BLEQ    21$                 ;21$                                               03  15   000E3
  875.     BRW     1$                 ;1$                                             FF21  31   000E5
  876. 21$:    MOVL    #13, @4(AP)             ;#13, @CHARACTER               0842       04   BC         0D  D0   000E8
  877.     CLRL    (R2)                 ;FILE_FAB+24                   0843                  62  D4   000EC
  878. 22$:    MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               0844            50 00000000G  8F  D0   000EE
  879.     RET                      ;                       0857                  04   000F5
  880.  
  881. ; Routine Size:  246 bytes,    Routine Base:  $CODE$ + 006B
  882.  
  883.  
  884. ;   0858  2     %SBTTL 'GET_ASCII - Main logic'
  885. ;   0859  2        RAT = .FILE_FAB [FAB$B_RAT] AND ( NOT FAB$M_BLK);
  886. ;   0860  2     
  887. ;   0861  2        IF .DEV_CLASS EQL DC$_MAILBOX THEN RAT = FAB$M_CR;    ! Mailbox needs CR's
  888. ;   0862  2     
  889. ;   0863  2        WHILE TRUE DO
  890. ;   0864  3        BEGIN
  891. ;   0865  3     
  892. ;   0866  3        SELECTONE .RAT OF
  893. ;   0867  3            SET
  894. ;   0868  3            
  895. ;   0869  3            [FAB$M_FTN ]:
  896. ;   0870  4            BEGIN
  897. ;   0871  4            RETURN GET_FTN_FILE_CHARACTER (.CHARACTER)
  898. ;   0872  3            END;
  899. ;   0873  3     
  900. ;   0874  3            [FAB$M_PRN, FAB$M_CR] :
  901. ;   0875  3     
  902. ;   0876  3            CASE .FILE_FAB [FAB$L_CTX] FROM F_STATE_MIN TO F_STATE_MAX OF
  903. ;   0877  3                SET
  904. ;   0878  3     
  905. ;   0879  3                [F_STATE_PRE] :
  906. ;   0880  4                BEGIN
  907. ;   0881  4                STATUS = GET_BUFFER ();
  908. ;   0882  4     
  909. ;   0883  4                IF NOT .STATUS OR .STATUS EQL KER_EOF THEN RETURN .STATUS;
  910. ;   0884  4     
  911. ;   0885  4                SELECTONE .RAT OF
  912. ;   0886  4                    SET
  913. ;   0887  4     
  914. ;   0888  4                    [FAB$M_CR] :
  915. ;   0889  5                    BEGIN
  916. ;   0890  5                    FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  917. ;   0891  4                    END;
  918. ;   0892  4     
  919. ;   0893  4                    [FAB$M_PRN] :
  920. ;   0894  5                    BEGIN
  921. ;   0895  5     
  922. ;   0896  5                    LOCAL
  923. ;   0897  5                        TEMP_POINTER;
  924. ;   0898  5     
  925. ;   0899  5                    TEMP_POINTER = CH$PTR (.FILE_RAB [RAB$L_RHB]);
  926. ;   0900  5                    CC_COUNT = CH$RCHAR_A (TEMP_POINTER);
  927. ;   0901  5                    CC_TYPE = CH$RCHAR_A (TEMP_POINTER);
  928. ;   0902  5     
  929. ;   0903  5                    IF .CC_COUNT<7, 1> EQL 0
  930. ;   0904  5                    THEN
  931. ;   0905  6                        BEGIN
  932. ;   0906  6     
  933. ;   0907  6                        IF .CC_COUNT<0, 7> NEQ 0
  934. ;   0908  6                        THEN
  935. ;   0909  7                        BEGIN
  936. ;   0910  7                        .CHARACTER = CHR_LFD;
  937. ;   0911  7                        CC_COUNT = .CC_COUNT - 1;
  938. ;   0912  7     
  939. ;   0913  7                        IF .CC_COUNT GTR 0
  940. ;   0914  7                        THEN
  941. ;   0915  7                            FILE_FAB [FAB$L_CTX] = F_STATE_PRE1
  942. ;   0916  7                        ELSE
  943. ;   0917  7                            FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  944. ;   0918  7     
  945. ;   0919  7                        RETURN KER_NORMAL;
  946. ;   0920  7                        END
  947. ;   0921  6                        ELSE
  948. ;   0922  6                        FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  949. ;   0923  6     
  950. ;   0924  6                        END
  951. ;   0925  5                    ELSE
  952. ;   0926  6                        BEGIN
  953. ;   0927  6     
  954. ;   0928  6                        SELECTONE .CC_COUNT<5, 2> OF
  955. ;   0929  6                        SET
  956. ;   0930  6     
  957. ;   0931  6                        [%B'00'] :
  958. ;   0932  7                            BEGIN
  959. ;   0933  7                            .CHARACTER = .CC_COUNT<0, 5>;
  960. ;   0934  7                            FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  961. ;   0935  7                            RETURN KER_NORMAL;
  962. ;   0936  6                            END;
  963. ;   0937  6     
  964. ;   0938  6                        [%B'10'] :
  965. ;   0939  7                            BEGIN
  966. ;   0940  7                            .CHARACTER = .CC_COUNT<0, 5> + 128;
  967. ;   0941  7                            FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  968. ;   0942  7                            RETURN KER_NORMAL;
  969. ;   0943  6                            END;
  970. ;   0944  6     
  971. ;   0945  6                        [OTHERWISE, %B'11'] :
  972. ;   0946  6                            RETURN KER_ILLFILTYP;
  973. ;   0947  6                        TES;
  974. ;   0948  5                        END;
  975. ;   0949  4                    END;
  976. ;   0950  4                    TES;
  977. ;   0951  4     
  978. ;   0952  3                END;
  979. ;   0953  3     
  980. ;   0954  3                [F_STATE_PRE1] :
  981. ;   0955  3     
  982. ;   0956  3                IF .RAT EQL FAB$M_PRN
  983. ;   0957  3                THEN
  984. ;   0958  4                    BEGIN
  985. ;   0959  4                    .CHARACTER = CHR_LFD;
  986. ;   0960  4                    CC_COUNT = .CC_COUNT - 1;
  987. ;   0961  4     
  988. ;   0962  4                    IF .CC_COUNT LEQ 0 THEN FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  989. ;   0963  4     
  990. ;   0964  4                    RETURN KER_NORMAL;
  991. ;   0965  4                    END
  992. ;   0966  3                ELSE
  993. ;   0967  3                    RETURN KER_ILLFILTYP;
  994. ;   0968  3     
  995. ;   0969  3                [F_STATE_DATA] :
  996. ;   0970  4                BEGIN
  997. ;   0971  4     
  998. ;   0972  4                IF .FILE_REC_COUNT LEQ 0
  999. ;   0973  4                THEN
  1000. ;   0974  4                    FILE_FAB [FAB$L_CTX] = F_STATE_POST
  1001. ;   0975  4                ELSE
  1002. ;   0976  5                    BEGIN
  1003. ;   0977  5                    .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
  1004. ;   0978  5                    FILE_REC_COUNT = .FILE_REC_COUNT - 1;
  1005. ;   0979  5                    RETURN KER_NORMAL;
  1006. ;   0980  4                    END;
  1007. ;   0981  4     
  1008. ;   0982  3                END;
  1009. ;   0983  3     
  1010. ;   0984  3                [F_STATE_POST] :
  1011. ;   0985  4                BEGIN
  1012. ;   0986  4     
  1013. ;   0987  4                SELECTONE .RAT OF
  1014. ;   0988  4                    SET
  1015. ;   0989  4     
  1016. ;   0990  4                    [FAB$M_CR] :
  1017. ;   0991  5                    BEGIN
  1018. ;   0992  5                    .CHARACTER = CHR_CRT;
  1019. ;   0993  5                    FILE_FAB [FAB$L_CTX] = F_STATE_POST1;
  1020. ;   0994  5                            ! So we get a line feed
  1021. ;   0995  5                    RETURN KER_NORMAL;
  1022. ;   0996  4                    END;
  1023. ;   0997  4     
  1024. ;   0998  4     
  1025. ;   0999  4                    [FAB$M_PRN] :
  1026. ;   1000  5                    BEGIN
  1027. ;   1001  5     
  1028. ;   1002  5                    IF .CC_TYPE<7, 1> EQL 0
  1029. ;   1003  5                    THEN
  1030. ;   1004  6                        BEGIN
  1031. ;   1005  6     
  1032. ;   1006  6                        IF .CC_TYPE<0, 7> NEQ 0
  1033. ;   1007  6                        THEN
  1034. ;   1008  7                        BEGIN
  1035. ;   1009  7                        .CHARACTER = CHR_LFD;
  1036. ;   1010  7                        CC_COUNT = .CC_TYPE;
  1037. ;   1011  7                        FILE_FAB [FAB$L_CTX] = F_STATE_POST1;
  1038. ;   1012  7                                            RETURN KER_NORMAL;
  1039. ;   1013  7                        END
  1040. ;   1014  6                        ELSE
  1041. ;   1015  6                        FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
  1042. ;   1016  6                        END
  1043. ;   1017  5                    ELSE
  1044. ;   1018  6                        BEGIN
  1045. ;   1019  6     
  1046. ;   1020  6                        SELECTONE .CC_TYPE<5, 2> OF
  1047. ;   1021  6                        SET
  1048. ;   1022  6     
  1049. ;   1023  6                        [%B'00'] :
  1050. ;   1024  7                            BEGIN
  1051. ;   1025  7                            .CHARACTER = .CC_TYPE<0, 5>;
  1052. ;   1026  7                            FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
  1053. ;   1027  7                            RETURN KER_NORMAL;
  1054. ;   1028  6                            END;
  1055. ;   1029  6     
  1056. ;   1030  6                        [%B'10'] :
  1057. ;   1031  7                            BEGIN
  1058. ;   1032  7                            .CHARACTER = .CC_TYPE<0, 5> + 128;
  1059. ;   1033  7                            FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
  1060. ;   1034  7                            RETURN KER_NORMAL;
  1061. ;   1035  6                            END;
  1062. ;   1036  6     
  1063. ;   1037  6                        [OTHERWISE, %B'11'] :
  1064. ;   1038  6                            RETURN KER_ILLFILTYP;
  1065. ;   1039  6                        TES;
  1066. ;   1040  6     
  1067. ;   1041  5                        END;
  1068. ;   1042  5     
  1069. ;   1043  4                    END;
  1070. ;   1044  4                    TES;        ! End SELECTONE .RAT
  1071. ;   1045  4     
  1072. ;   1046  3                END;
  1073. ;   1047  3     
  1074. ;   1048  3                [F_STATE_POST1] :
  1075. ;   1049  3     
  1076. ;   1050  3                IF .RAT EQL FAB$M_PRN
  1077. ;   1051  3                THEN
  1078. ;   1052  4                    BEGIN
  1079. ;   1053  4                    .CHARACTER = CHR_LFD;
  1080. ;   1054  4                    CC_COUNT = .CC_COUNT - 1;
  1081. ;   1055  4     
  1082. ;   1056  4                    IF .CC_COUNT LEQ -1
  1083. ;   1057  4                    THEN
  1084. ;   1058  5                    BEGIN
  1085. ;   1059  5                    .CHARACTER = CHR_CRT;
  1086. ;   1060  5    !                FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  1087. ;   1061  5                    FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
  1088. ;   1062  4                    END;
  1089. ;   1063  4     
  1090. ;   1064  4                    RETURN KER_NORMAL;
  1091. ;   1065  4                    END
  1092. ;   1066  3                ELSE
  1093. ;   1067  3    !
  1094. ;   1068  3    ! Generate line feed after CR for funny files
  1095. ;   1069  3    !
  1096. ;   1070  3     
  1097. ;   1071  4                    IF (.RAT EQL FAB$M_CR)
  1098. ;   1072  3                    THEN
  1099. ;   1073  4                    BEGIN
  1100. ;   1074  4                    .CHARACTER = CHR_LFD;    ! Return a line feed
  1101. ;   1075  4                    FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
  1102. ;   1076  4                            ! Next we get data
  1103. ;   1077  4                    RETURN KER_NORMAL;
  1104. ;   1078  4                    END
  1105. ;   1079  3                    ELSE
  1106. ;   1080  3                    RETURN KER_ILLFILTYP;
  1107. ;   1081  3     
  1108. ;   1082  3                TES;            ! End of CASE .STATE
  1109. ;   1083  3     
  1110. ;   1084  3            [OTHERWISE] :
  1111. ;   1085  4            BEGIN
  1112. ;   1086  4     
  1113. ;   1087  4            WHILE .FILE_REC_COUNT LEQ 0 DO
  1114. ;   1088  5                BEGIN
  1115. ;   1089  5                STATUS = GET_BUFFER ();
  1116. ;   1090  5     
  1117. ;   1091  5                IF NOT .STATUS OR .STATUS EQL KER_EOF THEN RETURN .STATUS;
  1118. ;   1092  5     
  1119. ;   1093  4                END;
  1120. ;   1094  4     
  1121. ;   1095  4            FILE_REC_COUNT = .FILE_REC_COUNT - 1;
  1122. ;   1096  4            .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
  1123. ;   1097  4            RETURN KER_NORMAL;
  1124. ;   1098  3            END;
  1125. ;   1099  3            TES;                ! End of SELECTONE .RAT
  1126. ;   1100  3     
  1127. ;   1101  2        END;                    ! End WHILE TRUE DO loop
  1128. ;   1102  2     
  1129. ;   1103  2        RETURN KER_ILLFILTYP;            ! Shouldn't get here
  1130. ;   1104  1        END;                    ! End of GET_ASCII
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136. ;GET_ASCII
  1137. U.4:    .WORD   ^M<R2,R3,R4,R5,R6>         ;Save R2,R3,R4,R5,R6               0610                    007C   00000
  1138.     MOVL    #KER_EOF, R6             ;#KER_EOF, R6                                     56 00000000G  8F  D0   00002
  1139.     MOVAB   G^U.3, R5             ;U.3, R5                                     55 00000000V  00  9E   00009
  1140.     MOVAB   G^U.30, R4             ;U.30, R4                                     54 00000000'  00  9E   00010
  1141.     MOVZBL  -806(R4), R2             ;FILE_FAB+30, RAT               0859            52     FCDA   C4  9A   00017
  1142.     BICL2   #8, R2                 ;#8, RAT                                     52         08  CA   0001C
  1143.     CMPL    -844(R4), #160             ;DEV_CLASS, #160               0861 000000A0   8F     FCB4   C4  D1   0001F
  1144.     BNEQ    1$                 ;1$                                               03  12   00028
  1145.     MOVL    #2, R2                 ;#2, RAT                                     52         02  D0   0002A
  1146. 1$:    CMPL    R2, #1                 ;RAT, #1                   0869            01         52  D1   0002D
  1147.     BNEQ    2$                 ;2$                                               09  12   00030
  1148.     PUSHL   4(AP)                 ;CHARACTER                   0871             04   AC  DD   00032
  1149.     CALLS   #1, W^U.32             ;#1, U.32                              FED0   CF         01  FB   00035
  1150.     RET                      ;                                               04   0003A
  1151. 2$:    CMPL    R2, #2                 ;RAT, #2                   0874            02         52  D1   0003B
  1152.     BEQL    3$                 ;3$                                               08  13   0003E
  1153.     CMPL    R2, #4                 ;RAT, #4                                     04         52  D1   00040
  1154.     BEQL    3$                 ;3$                                               03  13   00043
  1155.     BRW     31$                 ;31$                                             0128  31   00045
  1156. 3$:    CASEL   -812(R4), #0, #4         ;FILE_FAB+24, #0, #4               0876            00     FCD4   C4  CF   00048
  1157.                          ;                                         04       0004D
  1158. 4$:    .WORD   5$-4$,-                 ;5$-4$,-                                   0075       000A       0004E
  1159.         12$-4$,-             ;12$-4$,-                             00A8       0088       00052
  1160.         15$-4$,-             ;15$-4$,-                                   0101       00056
  1161.         18$-4$,-             ;18$-4$,-
  1162.         27$-4$                 ;27$-4$
  1163. 5$:    CALLS   #0, (R5)             ;#0, GET_BUFFER               0881            65         00  FB   00058
  1164.     MOVL    R0, R3                 ;R0, STATUS                                     53         50  D0   0005B
  1165.     BLBS    R3, 7$                 ;STATUS, 7$                   0883            03         53  E8   0005E
  1166. 6$:    BRW     32$                 ;32$                                             0120  31   00061
  1167. 7$:    CMPL    R3, R6                 ;STATUS, R6                                     56         53  D1   00064
  1168.     BEQL    6$                 ;6$                                               F8  13   00067
  1169.     CMPL    R2, #2                 ;RAT, #2                   0888            02         52  D1   00069
  1170.     BEQL    8$                 ;8$                                               2A  13   0006C
  1171.     CMPL    R2, #4                 ;RAT, #4                   0893            04         52  D1   0006E
  1172.     BNEQ    1$                 ;1$                                               BA  12   00071
  1173.     MOVL    -616(R4), R0             ;FILE_RAB+44, TEMP_POINTER           0899            50     FD98   C4  D0   00073
  1174.     MOVZBL  (R0)+, (R4)             ;(TEMP_POINTER)+, CC_COUNT           0900            64         80  9A   00078
  1175.     MOVZBL  (R0)+, 4(R4)             ;(TEMP_POINTER)+, CC_TYPE           0901       04   A4         80  9A   0007B
  1176.     TSTB    (R4)                 ;CC_COUNT                   0903                  64  95   0007F
  1177.     BLSS    10$                 ;10$                                               1C  19   00081
  1178.     BITB    (R4), #127             ;CC_COUNT, #127               0907       7F   8F         64  93   00083
  1179.     BEQL    8$                 ;8$                                               0F  13   00087
  1180.     MOVL    #10, @4(AP)             ;#10, @CHARACTER               0910       04   BC         0A  D0   00089
  1181.     DECL    (R4)                 ;CC_COUNT                   0911                  64  D7   0008D
  1182.     BLEQ    14$                 ;14$                       0913                  3E  15   0008F
  1183.     MOVL    #1, -812(R4)             ;#1, FILE_FAB+24               0915     FCD4   C4         01  D0   00091
  1184.     BRB     17$                 ;17$                                               5C  11   00096
  1185. 8$:    MOVL    #2, -812(R4)             ;#2, FILE_FAB+24               0922     FCD4   C4         02  D0   00098
  1186. 9$:    BRB     1$                 ;1$                                               8E  11   0009D
  1187. 10$:    EXTZV   #5, #2, (R4), R0         ;#5, #2, CC_COUNT, R0               0928            02         05  EF   0009F
  1188.                          ;                                   50         64       000A2
  1189.     BNEQ    11$                 ;11$                       0931                  08  12   000A4
  1190.     EXTZV   #0, #5, (R4), @4(AP)         ;#0, #5, CC_COUNT, @CHARACTER           0933            05         00  EF   000A6
  1191.                          ;                              04   BC         64       000A9
  1192.     BRB     14$                 ;14$                       0934                  21  11   000AC
  1193. 11$:    CMPL    R0, #2                 ;R0, #2                   0938            02         50  D1   000AE
  1194.     BNEQ    13$                 ;13$                                               13  12   000B1
  1195.     EXTZV   #0, #5, (R4), @4(AP)         ;#0, #5, CC_COUNT, @CHARACTER           0940            05         00  EF   000B3
  1196.                          ;                              04   BC         64       000B6
  1197.     ADDL2   #128, @4(AP)             ;#128, @CHARACTER                            04   BC 00000080   8F  C0   000B9
  1198.     BRB     14$                 ;14$                       0941                  0C  11   000C1
  1199. 12$:    CMPL    R2, #4                 ;RAT, #4                   0956            04         52  D1   000C3
  1200. 13$:    BNEQ    26$                 ;26$                                               74  12   000C6
  1201.     MOVL    #10, @4(AP)             ;#10, @CHARACTER               0959       04   BC         0A  D0   000C8
  1202.     SOBGTR  (R4), 21$             ;CC_COUNT, 21$                   0960            50         64  F5   000CC
  1203. 14$:    MOVL    #2, -812(R4)             ;#2, FILE_FAB+24               0962     FCD4   C4         02  D0   000CF
  1204.     BRB     21$                 ;21$                       0964                  49  11   000D4
  1205. 15$:    TSTL    -540(R4)             ;FILE_REC_COUNT               0972               FDE4   C4  D5   000D6
  1206.     BGTR    16$                 ;16$                                               07  14   000DA
  1207.     MOVL    #3, -812(R4)             ;#3, FILE_FAB+24               0974     FCD4   C4         03  D0   000DC
  1208.     BRB     23$                 ;23$                                               42  11   000E1
  1209. 16$:    MOVL    -544(R4), R0             ;FILE_REC_POINTER, R0               0977            50     FDE0   C4  D0   000E3
  1210.     MOVZBL  (R0), @4(AP)             ;(R0), @CHARACTER                            04   BC         60  9A   000E8
  1211.     INCL    -544(R4)             ;FILE_REC_POINTER                                    FDE0   C4  D6   000EC
  1212.     DECL    -540(R4)             ;FILE_REC_COUNT               0978               FDE4   C4  D7   000F0
  1213. 17$:    BRB     30$                 ;30$                       0979                  78  11   000F4
  1214. 18$:    CMPL    R2, #2                 ;RAT, #2                   0990            02         52  D1   000F6
  1215.     BNEQ    19$                 ;19$                                               06  12   000F9
  1216.     MOVL    #13, @4(AP)             ;#13, @CHARACTER               0992       04   BC         0D  D0   000FB
  1217.     BRB     20$                 ;20$                       0993                  19  11   000FF
  1218. 19$:    CMPL    R2, #4                 ;RAT, #4                   0999            04         52  D1   00101
  1219.     BNEQ    9$                 ;9$                                               97  12   00104
  1220.     TSTB    4(R4)                 ;CC_TYPE                   1002             04   A4  95   00106
  1221.     BLSS    24$                 ;24$                                               1D  19   00109
  1222.     BITB    4(R4), #127             ;CC_TYPE, #127                   1006       7F   8F    04   A4  93   0010B
  1223.     BEQL    22$                 ;22$                                               0F  13   00110
  1224.     MOVL    #10, @4(AP)             ;#10, @CHARACTER               1009       04   BC         0A  D0   00112
  1225.     MOVL    4(R4), (R4)             ;CC_TYPE, CC_COUNT               1010            64    04   A4  D0   00116
  1226. 20$:    MOVL    #4, -812(R4)             ;#4, FILE_FAB+24               1011     FCD4   C4         04  D0   0011A
  1227. 21$:    BRB     34$                 ;34$                       1012                  78  11   0011F
  1228. 22$:    CLRL    -812(R4)             ;FILE_FAB+24                   1015               FCD4   C4  D4   00121
  1229. 23$:    BRW     1$                 ;1$                                             FF05  31   00125
  1230. 24$:    EXTZV   #5, #2, 4(R4), R0         ;#5, #2, CC_TYPE, R0               1020            02         05  EF   00128
  1231.                          ;                                   50    04   A4       0012B
  1232.     BNEQ    25$                 ;25$                       1023                  09  12   0012E
  1233.     EXTZV   #0, #5, 4(R4), @4(AP)         ;#0, #5, CC_TYPE, @CHARACTER           1025            05         00  EF   00130
  1234.                          ;                              04   BC    04   A4       00133
  1235.     BRB     29$                 ;29$                       1026                  31  11   00137
  1236. 25$:    CMPL    R0, #2                 ;R0, #2                   1030            02         50  D1   00139
  1237. 26$:    BNEQ    35$                 ;35$                                               63  12   0013C
  1238.     EXTZV   #0, #5, 4(R4), @4(AP)         ;#0, #5, CC_TYPE, @CHARACTER           1032            05         00  EF   0013E
  1239.                          ;                              04   BC    04   A4       00141
  1240.     ADDL2   #128, @4(AP)             ;#128, @CHARACTER                            04   BC 00000080   8F  C0   00145
  1241.     BRB     29$                 ;29$                       1033                  1B  11   0014D
  1242. 27$:    CMPL    R2, #4                 ;RAT, #4                   1050            04         52  D1   0014F
  1243.     BNEQ    28$                 ;28$                                               0D  12   00152
  1244.     MOVL    #10, @4(AP)             ;#10, @CHARACTER               1053       04   BC         0A  D0   00154
  1245.     SOBGEQ  (R4), 34$             ;CC_COUNT, 34$                   1054            3E         64  F4   00158
  1246.     MOVL    #13, @4(AP)             ;#13, @CHARACTER               1059       04   BC         0D  D0   0015B
  1247.     BRB     29$                 ;29$                       1061                  09  11   0015F
  1248. 28$:    CMPL    R2, #2                 ;RAT, #2                   1071            02         52  D1   00161
  1249.     BNEQ    35$                 ;35$                                               3B  12   00164
  1250.     MOVL    #10, @4(AP)             ;#10, @CHARACTER               1074       04   BC         0A  D0   00166
  1251. 29$:    CLRL    -812(R4)             ;FILE_FAB+24                   1075               FCD4   C4  D4   0016A
  1252. 30$:    BRB     34$                 ;34$                       1077                  29  11   0016E
  1253. 31$:    TSTL    -540(R4)             ;FILE_REC_COUNT               1087               FDE4   C4  D5   00170
  1254.     BGTR    33$                 ;33$                                               12  14   00174
  1255.     CALLS   #0, (R5)             ;#0, GET_BUFFER               1089            65         00  FB   00176
  1256.     MOVL    R0, R3                 ;R0, STATUS                                     53         50  D0   00179
  1257.     BLBC    R3, 32$                 ;STATUS, 32$                   1091            05         53  E9   0017C
  1258.     CMPL    R3, R6                 ;STATUS, R6                                     56         53  D1   0017F
  1259.     BNEQ    31$                 ;31$                                               EC  12   00182
  1260. 32$:    MOVL    R3, R0                 ;STATUS, R0                                     50         53  D0   00184
  1261.     RET                      ;                                               04   00187
  1262. 33$:    DECL    -540(R4)             ;FILE_REC_COUNT               1095               FDE4   C4  D7   00188
  1263.     MOVL    -544(R4), R0             ;FILE_REC_POINTER, R0               1096            50     FDE0   C4  D0   0018C
  1264.     MOVZBL  (R0), @4(AP)             ;(R0), @CHARACTER                            04   BC         60  9A   00191
  1265.     INCL    -544(R4)             ;FILE_REC_POINTER                                    FDE0   C4  D6   00195
  1266. 34$:    MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               1097            50 00000000G  8F  D0   00199
  1267.     RET                      ;                                               04   001A0
  1268. 35$:    MOVL    #KER_ILLFILTYP, R0         ;#KER_ILLFILTYP, R0               1103            50 00000000G  8F  D0   001A1
  1269.     RET                      ;                                               04   001A8
  1270.  
  1271. ; Routine Size:  425 bytes,    Routine Base:  $CODE$ + 0161
  1272.  
  1273.  
  1274. ;   1105  1     %SBTTL 'GET_BLOCK - Get a character from a BLOCKed file'
  1275. ;   1106  1    ROUTINE GET_BLOCK (CHARACTER) =
  1276. ;   1107  1     
  1277. ;   1108  1    !++
  1278. ;   1109  1    ! FUNCTIONAL DESCRIPTION:
  1279. ;   1110  1    !
  1280. ;   1111  1    !    This routine will return the next byte from a blocked file.  This
  1281. ;   1112  1    !    routine will use the $READ RMS call to get the next byte from the
  1282. ;   1113  1    !    file.  This way all RMS header information can be passed to the
  1283. ;   1114  1    !    other file system.
  1284. ;   1115  1    !
  1285. ;   1116  1    ! CALLING SEQUENCE:
  1286. ;   1117  1    !
  1287. ;   1118  1    !    STATUS = GET_BLOCK(CHARACTER);
  1288. ;   1119  1    !
  1289. ;   1120  1    ! INPUT PARAMETERS:
  1290. ;   1121  1    !
  1291. ;   1122  1    !    CHARACTER - Address to store the character in.
  1292. ;   1123  1    !
  1293. ;   1124  1    ! IMPLICIT INPUTS:
  1294. ;   1125  1    !
  1295. ;   1126  1    !    REC_POINTER - Pointer into the record.
  1296. ;   1127  1    !    REC_ADDRESS - Address of the record.
  1297. ;   1128  1    !    REC_COUNT - Count of the number of bytes left in the record.
  1298. ;   1129  1    !
  1299. ;   1130  1    ! OUPTUT PARAMETERS:
  1300. ;   1131  1    !
  1301. ;   1132  1    !    None.
  1302. ;   1133  1    !
  1303. ;   1134  1    ! IMPLICIT OUTPUTS:
  1304. ;   1135  1    !
  1305. ;   1136  1    !    None.
  1306. ;   1137  1    !
  1307. ;   1138  1    ! COMPLETION CODES:
  1308. ;   1139  1    !
  1309. ;   1140  1    !   KER_NORMAL - Got a byte
  1310. ;   1141  1    !   KER_EOF - End of file gotten.
  1311. ;   1142  1    !   KER_RMS32 - RMS error
  1312. ;   1143  1    !
  1313. ;   1144  1    ! SIDE EFFECTS:
  1314. ;   1145  1    !
  1315. ;   1146  1    !    None.
  1316. ;   1147  1    !
  1317. ;   1148  1    !--
  1318. ;   1149  1     
  1319. ;   1150  2        BEGIN
  1320. ;   1151  2    !
  1321. ;   1152  2    ! Status codes returned by this module
  1322. ;   1153  2    !
  1323. ;   1154  2        EXTERNAL LITERAL
  1324. ;   1155  2        KER_RMS32,                ! RMS error encountered
  1325. ;   1156  2        KER_EOF,                ! End of file encountered
  1326. ;   1157  2        KER_NORMAL;                ! Normal return
  1327. ;   1158  2     
  1328. ;   1159  2        LOCAL
  1329. ;   1160  2        STATUS;                    ! Random status values
  1330. ;   1161  2     
  1331. ;   1162  2        WHILE .FILE_REC_COUNT LEQ 0 DO
  1332. ;   1163  3        BEGIN
  1333. ;   1164  3        STATUS = $READ (RAB = FILE_RAB);
  1334. ;   1165  3     
  1335. ;   1166  3        IF NOT .STATUS
  1336. ;   1167  3        THEN
  1337. ;   1168  3     
  1338. ;   1169  3            IF .STATUS EQL RMS$_EOF
  1339. ;   1170  3            THEN
  1340. ;   1171  4            BEGIN
  1341. ;   1172  4            EOF_FLAG = TRUE;
  1342. ;   1173  4            RETURN KER_EOF;
  1343. ;   1174  4            END
  1344. ;   1175  3            ELSE
  1345. ;   1176  4            BEGIN
  1346. ;   1177  4            FILE_ERROR (.STATUS);
  1347. ;   1178  4            EOF_FLAG = TRUE;
  1348. ;   1179  4            RETURN KER_RMS32;
  1349. ;   1180  3            END;
  1350. ;   1181  3     
  1351. ;   1182  3        FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
  1352. ;   1183  3        FILE_REC_COUNT = .FILE_RAB [RAB$W_RSZ];
  1353. ;   1184  2        END;
  1354. ;   1185  2     
  1355. ;   1186  2        FILE_REC_COUNT = .FILE_REC_COUNT - 1;
  1356. ;   1187  2        .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
  1357. ;   1188  2        RETURN KER_NORMAL;
  1358. ;   1189  1        END;                    ! End of GET_BLOCK
  1359.  
  1360.  
  1361.  
  1362.     .EXTRN  KER_RMS32, SYS$READ
  1363.  
  1364. ;GET_BLOCK
  1365. U.5:    .WORD   ^M<R2,R3>             ;Save R2,R3                   1106                    000C   00000
  1366.     MOVAB   G^U.16, R3             ;U.16, R3                                     53 00000000'  00  9E   00002
  1367. 1$:    TSTL    (R3)                 ;FILE_REC_COUNT               1162                  63  D5   00009
  1368.     BGTR    5$                 ;5$                                               43  14   0000B
  1369.     PUSHAB  -120(R3)             ;FILE_RAB                   1164             88   A3  9F   0000D
  1370.     CALLS   #1, G^SYS$READ             ;#1, SYS$READ                          00000000G  00         01  FB   00010
  1371.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00017
  1372.     BLBS    R2, 4$                 ;STATUS, 4$                   1166            28         52  E8   0001A
  1373.     CMPL    R2, #98938             ;STATUS, #98938               1169 0001827A   8F         52  D1   0001D
  1374.     BNEQ    2$                 ;2$                                               09  12   00024
  1375.     MOVL    #KER_EOF, R0             ;#KER_EOF, R0                   1173            50 00000000G  8F  D0   00026
  1376.     BRB     3$                 ;3$                                               10  11   0002D
  1377. 2$:    PUSHL   R2                 ;STATUS                   1177                  52  DD   0002F
  1378.     CALLS   #1, G^U.6             ;#1, U.6                          00000000V  00         01  FB   00031
  1379.     MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               1179            50 00000000G  8F  D0   00038
  1380. 3$:    MOVL    #1, -300(R3)             ;#1, EOF_FLAG                   1172     FED4   C3         01  D0   0003F
  1381.     RET                      ;                       1179                  04   00044
  1382. 4$:    MOVL    8(R3), -4(R3)             ;REC_ADDRESS, FILE_REC_POINTER        1182       FC   A3    08   A3  D0   00045
  1383.     MOVZWL  -86(R3), (R3)             ;FILE_RAB+34, FILE_REC_COUNT           1183            63    AA   A3  3C   0004A
  1384.     BRB     1$                 ;1$                                               B9  11   0004E
  1385. 5$:    DECL    (R3)                 ;FILE_REC_COUNT               1186                  63  D7   00050
  1386.     MOVL    -4(R3), R0             ;FILE_REC_POINTER, R0               1187            50    FC   A3  D0   00052
  1387.     MOVZBL  (R0), @4(AP)             ;(R0), @CHARACTER                            04   BC         60  9A   00056
  1388.     INCL    -4(R3)                 ;FILE_REC_POINTER                                  FC   A3  D6   0005A
  1389.     MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               1188            50 00000000G  8F  D0   0005D
  1390.     RET                      ;                                               04   00064
  1391.  
  1392. ; Routine Size:  101 bytes,    Routine Base:  $CODE$ + 030A
  1393.  
  1394.  
  1395. ;   1190  1     %SBTTL 'GET_BUFFER - Routine to read a buffer.'
  1396. ;   1191  1    ROUTINE GET_BUFFER =
  1397. ;   1192  1     
  1398. ;   1193  1    !++
  1399. ;   1194  1    ! FUNCTIONAL DESCRIPTION:
  1400. ;   1195  1    !
  1401. ;   1196  1    !    This routine will read a buffer from the disk file.  It will
  1402. ;   1197  1    !    return various status depending if there was an error reading
  1403. ;   1198  1    !    the disk file or if the end of file is reached.
  1404. ;   1199  1    !
  1405. ;   1200  1    ! CALLING SEQUENCE:
  1406. ;   1201  1    !
  1407. ;   1202  1    !    STATUS = GET_BUFFER ();
  1408. ;   1203  1    !
  1409. ;   1204  1    ! INPUT PARAMETERS:
  1410. ;   1205  1    !
  1411. ;   1206  1    !    None.
  1412. ;   1207  1    !
  1413. ;   1208  1    ! IMPLICIT INPUTS:
  1414. ;   1209  1    !
  1415. ;   1210  1    !    None.
  1416. ;   1211  1    !
  1417. ;   1212  1    ! OUTPUT PARAMETERS:
  1418. ;   1213  1    !
  1419. ;   1214  1    !    None.
  1420. ;   1215  1    !
  1421. ;   1216  1    ! IMPLICIT OUTPUTS:
  1422. ;   1217  1    !
  1423. ;   1218  1    !    FILE_REC_POINTER - Pointer into the record.
  1424. ;   1219  1    !    FILE_REC_COUNT - Count of the number of bytes in the record.
  1425. ;   1220  1    !
  1426. ;   1221  1    ! COMPLETION CODES:
  1427. ;   1222  1    !
  1428. ;   1223  1    !    KER_NORMAL - Got a buffer
  1429. ;   1224  1    !    KER_EOF - End of file reached.
  1430. ;   1225  1    !    KER_RMS32 - RMS error
  1431. ;   1226  1    !
  1432. ;   1227  1    ! SIDE EFFECTS:
  1433. ;   1228  1    !
  1434. ;   1229  1    !    None.
  1435. ;   1230  1    !
  1436. ;   1231  1    !--
  1437. ;   1232  1     
  1438. ;   1233  2        BEGIN
  1439. ;   1234  2    !
  1440. ;   1235  2    ! The following are the various status values returned by this routien
  1441. ;   1236  2    !
  1442. ;   1237  2        EXTERNAL LITERAL
  1443. ;   1238  2        KER_NORMAL,                ! Normal return
  1444. ;   1239  2        KER_EOF,                ! End of file
  1445. ;   1240  2        KER_RMS32;                ! RMS error encountered
  1446. ;   1241  2     
  1447. ;   1242  2        LOCAL
  1448. ;   1243  2        STATUS;                    ! Random status values
  1449. ;   1244  2     
  1450. ;   1245  2        STATUS = $GET (RAB = FILE_RAB);
  1451. ;   1246  2     
  1452. ;   1247  2        IF NOT .STATUS
  1453. ;   1248  2        THEN
  1454. ;   1249  2     
  1455. ;   1250  2        IF .STATUS EQL RMS$_EOF
  1456. ;   1251  2        THEN
  1457. ;   1252  3            BEGIN
  1458. ;   1253  3            EOF_FLAG = TRUE;
  1459. ;   1254  3            RETURN KER_EOF;
  1460. ;   1255  3            END
  1461. ;   1256  2        ELSE
  1462. ;   1257  3            BEGIN
  1463. ;   1258  3            FILE_ERROR (.STATUS);
  1464. ;   1259  3            EOF_FLAG = TRUE;
  1465. ;   1260  3            RETURN KER_RMS32;
  1466. ;   1261  2            END;
  1467. ;   1262  2     
  1468. ;   1263  2        FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
  1469. ;   1264  2        FILE_REC_COUNT = .FILE_RAB [RAB$W_RSZ];
  1470. ;   1265  2        RETURN KER_NORMAL;
  1471. ;   1266  1        END;
  1472.  
  1473.  
  1474.  
  1475.     .EXTRN  SYS$GET
  1476.  
  1477. ;GET_BUFFER
  1478. U.3:    .WORD   ^M<R2>                 ;Save R2                   1191                    0004   00000
  1479.     MOVAB   G^U.12, R2             ;U.12, R2                                     52 00000000'  00  9E   00002
  1480.     PUSHL   R2                 ;R2                       1245                  52  DD   00009
  1481.     CALLS   #1, G^SYS$GET             ;#1, SYS$GET                          00000000G  00         01  FB   0000B
  1482.     BLBS    R0, 3$                 ;STATUS, 3$                   1247            28         50  E8   00012
  1483.     CMPL    R0, #98938             ;STATUS, #98938               1250 0001827A   8F         50  D1   00015
  1484.     BNEQ    1$                 ;1$                                               09  12   0001C
  1485.     MOVL    #KER_EOF, R0             ;#KER_EOF, R0                   1254            50 00000000G  8F  D0   0001E
  1486.     BRB     2$                 ;2$                                               10  11   00025
  1487. 1$:    PUSHL   R0                 ;STATUS                   1258                  50  DD   00027
  1488.     CALLS   #1, G^U.6             ;#1, U.6                          00000000V  00         01  FB   00029
  1489.     MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               1260            50 00000000G  8F  D0   00030
  1490. 2$:    MOVL    #1, -180(R2)             ;#1, EOF_FLAG                   1253     FF4C   C2         01  D0   00037
  1491.     RET                      ;                       1260                  04   0003C
  1492. 3$:    MOVL    128(R2), 116(R2)         ;REC_ADDRESS, FILE_REC_POINTER        1263       74   A2     0080   C2  D0   0003D
  1493.     MOVZWL  34(R2), 120(R2)             ;FILE_RAB+34, FILE_REC_COUNT           1264       78   A2    22   A2  3C   00043
  1494.     MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               1265            50 00000000G  8F  D0   00048
  1495.     RET                      ;                                               04   0004F
  1496.  
  1497. ; Routine Size:  80 bytes,    Routine Base:  $CODE$ + 036F
  1498.  
  1499.  
  1500. ;   1267  1     %SBTTL 'PUT_FILE'
  1501. ;   1268  1     
  1502. ;   1269  1    GLOBAL ROUTINE PUT_FILE (CHARACTER) =
  1503. ;   1270  1     
  1504. ;   1271  1    !++
  1505. ;   1272  1    ! FUNCTIONAL DESCRIPTION:
  1506. ;   1273  1    !
  1507. ;   1274  1    !    This routine will store a character into the record buffer
  1508. ;   1275  1    !    that we are building.  It will output the buffer to disk
  1509. ;   1276  1    !    when the end of line characters are found.
  1510. ;   1277  1    !
  1511. ;   1278  1    ! CALLING SEQUENCE:
  1512. ;   1279  1    !
  1513. ;   1280  1    !    STATUS = PUT_FILE(Character);
  1514. ;   1281  1    !
  1515. ;   1282  1    ! INPUT PARAMETERS:
  1516. ;   1283  1    !
  1517. ;   1284  1    !    Character - Address of the character to output in the file.
  1518. ;   1285  1    !
  1519. ;   1286  1    ! IMPLICIT INPUTS:
  1520. ;   1287  1    !
  1521. ;   1288  1    !    None.
  1522. ;   1289  1    !
  1523. ;   1290  1    ! OUTPUT PARAMETERS:
  1524. ;   1291  1    !
  1525. ;   1292  1    !    Status - True if no problems writing the character
  1526. ;   1293  1    !         False if there were problems writing the character.
  1527. ;   1294  1    !
  1528. ;   1295  1    ! IMPLICIT OUTPUTS:
  1529. ;   1296  1    !
  1530. ;   1297  1    !    None.
  1531. ;   1298  1    !
  1532. ;   1299  1    ! COMPLETION CODES:
  1533. ;   1300  1    !
  1534. ;   1301  1    !    None.
  1535. ;   1302  1    !
  1536. ;   1303  1    ! SIDE EFFECTS:
  1537. ;   1304  1    !
  1538. ;   1305  1    !    None.
  1539. ;   1306  1    !
  1540. ;   1307  1    !--
  1541. ;   1308  1     
  1542. ;   1309  2        BEGIN
  1543. ;   1310  2    !
  1544. ;   1311  2    ! Completion codes
  1545. ;   1312  2    !
  1546. ;   1313  2        EXTERNAL LITERAL
  1547. ;   1314  2        KER_REC_TOO_BIG,            ! Record too big
  1548. ;   1315  2        KER_NORMAL;                ! Normal return
  1549. ;   1316  2    !
  1550. ;   1317  2    ! Local variables
  1551. ;   1318  2    !
  1552. ;   1319  2        OWN
  1553. ;   1320  2        SAVED_CHARACTER : UNSIGNED BYTE;    ! Character we may have to
  1554. ;   1321  2                            !  write later on
  1555. ;   1322  2        LOCAL
  1556. ;   1323  2        STATUS;                    ! Random status values
  1557. ;   1324  2     
  1558. ;   1325  2        SELECTONE .FILE_TYPE OF
  1559. ;   1326  2        SET
  1560. ;   1327  2     
  1561. ;   1328  2        [FILE_ASC] :
  1562. ;   1329  3            BEGIN
  1563. ;   1330  3    !
  1564. ;   1331  3    ! If the last character was a carriage return and this is a line feed,
  1565. ;   1332  3    ! we will just dump the record.  Otherwise, if the last character was
  1566. ;   1333  3    ! a carriage return, output both it and the current one.
  1567. ;   1334  3    !
  1568. ;   1335  3     
  1569. ;   1336  3            IF .FILE_FAB [FAB$L_CTX] NEQ F_STATE_DATA
  1570. ;   1337  3            THEN
  1571. ;   1338  4            BEGIN
  1572. ;   1339  4     
  1573. ;   1340  4            IF (.CHARACTER AND %O'177') EQL CHR_LFD
  1574. ;   1341  4            THEN
  1575. ;   1342  5                BEGIN
  1576. ;   1343  5                FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  1577. ;   1344  5                RETURN DUMP_BUFFER ();
  1578. ;   1345  5                END
  1579. ;   1346  4            ELSE
  1580. ;   1347  5                BEGIN
  1581. ;   1348  5     
  1582. ;   1349  5                IF .FILE_REC_COUNT GEQ .REC_SIZE
  1583. ;   1350  5                THEN
  1584. ;   1351  6                BEGIN
  1585. ;   1352  6                LIB$SIGNAL (KER_REC_TOO_BIG);
  1586. ;   1353  6                RETURN KER_REC_TOO_BIG;
  1587. ;   1354  5                END;
  1588. ;   1355  5     
  1589. ;   1356  5                CH$WCHAR_A (.SAVED_CHARACTER, FILE_REC_POINTER);
  1590. ;   1357  5                            ! Store the carriage return we deferred
  1591. ;   1358  5                FILE_REC_COUNT = .FILE_REC_COUNT + 1;
  1592. ;   1359  5                FILE_FAB [FAB$L_CTX] = F_STATE_DATA;    ! Back to normal data
  1593. ;   1360  4                END;
  1594. ;   1361  4     
  1595. ;   1362  3            END;
  1596. ;   1363  3     
  1597. ;   1364  3    !
  1598. ;   1365  3    ! Here when last character was written to the file normally.  Check if
  1599. ;   1366  3    ! this character might be the end of a record (or at least the start of
  1600. ;   1367  3    ! end.
  1601. ;   1368  3    !
  1602. ;   1369  3     
  1603. ;   1370  3            IF (.CHARACTER AND %O'177') EQL CHR_CRT
  1604. ;   1371  3            THEN
  1605. ;   1372  4            BEGIN
  1606. ;   1373  4            SAVED_CHARACTER = .CHARACTER;        ! Save the character for later
  1607. ;   1374  4            FILE_FAB [FAB$L_CTX] = F_STATE_POST;    ! Remember we saw this
  1608. ;   1375  4            RETURN KER_NORMAL;        ! And delay until next character
  1609. ;   1376  3            END;
  1610. ;   1377  3     
  1611. ;   1378  3            IF .FILE_REC_COUNT GEQ .REC_SIZE
  1612. ;   1379  3            THEN
  1613. ;   1380  4            BEGIN
  1614. ;   1381  4            LIB$SIGNAL (KER_REC_TOO_BIG);
  1615. ;   1382  4            RETURN KER_REC_TOO_BIG;
  1616. ;   1383  3            END;
  1617. ;   1384  3     
  1618. ;   1385  3            FILE_REC_COUNT = .FILE_REC_COUNT + 1;
  1619. ;   1386  3            CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
  1620. ;   1387  2            END;
  1621. ;   1388  2     
  1622. ;   1389  2        [FILE_BIN, FILE_FIX] :
  1623. ;   1390  3            BEGIN
  1624. ;   1391  3     
  1625. ;   1392  3            IF .FILE_REC_COUNT GEQ .REC_SIZE
  1626. ;   1393  3            THEN
  1627. ;   1394  4            BEGIN
  1628. ;   1395  4            STATUS = DUMP_BUFFER ();
  1629. ;   1396  4     
  1630. ;   1397  4            IF NOT .STATUS
  1631. ;   1398  4            THEN
  1632. ;   1399  5                BEGIN
  1633. ;   1400  5                LIB$SIGNAL (.STATUS);
  1634. ;   1401  5                RETURN .STATUS;
  1635. ;   1402  4                END;
  1636. ;   1403  4     
  1637. ;   1404  3            END;
  1638. ;   1405  3     
  1639. ;   1406  3            FILE_REC_COUNT = .FILE_REC_COUNT + 1;
  1640. ;   1407  3            CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
  1641. ;   1408  2            END;
  1642. ;   1409  2     
  1643. ;   1410  2        [FILE_BLK] :
  1644. ;   1411  3            BEGIN
  1645. ;   1412  3     
  1646. ;   1413  3            IF .FILE_REC_COUNT GEQ .REC_SIZE
  1647. ;   1414  3            THEN
  1648. ;   1415  4            BEGIN
  1649. ;   1416  4            FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
  1650. ;   1417  4            STATUS = $WRITE (RAB = FILE_RAB);
  1651. ;   1418  4            FILE_REC_COUNT = 0;
  1652. ;   1419  4            FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
  1653. ;   1420  3            END;
  1654. ;   1421  3     
  1655. ;   1422  3            FILE_REC_COUNT = .FILE_REC_COUNT + 1;
  1656. ;   1423  3            CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
  1657. ;   1424  2            END;
  1658. ;   1425  2        TES;
  1659. ;   1426  2     
  1660. ;   1427  2        RETURN KER_NORMAL;
  1661. ;   1428  1        END;                    ! End of PUT_FILE
  1662.  
  1663.  
  1664.  
  1665.     .PSECT  $OWN$,NOEXE,2
  1666.  
  1667. ;SAVED_CHARACTER
  1668. U.34:    .BLKB   1                                       ;                      00358
  1669.  
  1670.     .EXTRN  KER_REC_TOO_BIG, SYS$WRITE
  1671.  
  1672.     .PSECT  $CODE$,NOWRT,2
  1673.  
  1674.     .ENTRY  PUT_FILE, ^M<R2,R3,R4,R5,R6>     ;PUT_FILE, Save R2,R3,R4,R5,R6        1269                    007C   00000
  1675.     MOVAB   G^LIB$SIGNAL, R6         ;LIB$SIGNAL, R6                                 56 00000000G  00  9E   00002
  1676.     MOVL    #KER_REC_TOO_BIG, R5         ;#KER_REC_TOO_BIG, R5                                 55 00000000G  8F  D0   00009
  1677.     MOVAB   G^U.2, R4             ;U.2, R4                                     54 00000000V  00  9E   00010
  1678.     MOVAB   G^U.16, R3             ;U.16, R3                                     53 00000000'  00  9E   00017
  1679.     MOVL    G^FILE_TYPE, R0             ;FILE_TYPE, R0                   1325            50 00000000'  00  D0   0001E
  1680.     CMPL    R0, #1                 ;R0, #1                   1328            01         50  D1   00025
  1681.     BNEQ    5$                 ;5$                                               55  12   00028
  1682.     CMPL    -272(R3), #2             ;FILE_FAB+24, #2               1336            02     FEF0   C3  D1   0002A
  1683.     BEQL    2$                 ;2$                                               2A  13   0002F
  1684.     CMPZV   #0, #7, 4(AP), #10         ;#0, #7, CHARACTER, #10           1340            07         00  ED   00031
  1685.                          ;                                   0A    04   AC       00034
  1686.     BNEQ    1$                 ;1$                                               09  12   00037
  1687.     MOVL    #2, -272(R3)             ;#2, FILE_FAB+24               1343     FEF0   C3         02  D0   00039
  1688.     CALLS   #0, (R4)             ;#0, DUMP_BUFFER               1344            64         00  FB   0003E
  1689.     RET                      ;                                               04   00041
  1690. 1$:    CMPL    (R3), 4(R3)             ;FILE_REC_COUNT, REC_SIZE           1349       04   A3         63  D1   00042
  1691.     BGEQ    4$                 ;4$                                               2E  18   00046
  1692.     MOVL    -4(R3), R0             ;FILE_REC_POINTER, R0               1356            50    FC   A3  D0   00048
  1693.     MOVB    548(R3), (R0)             ;SAVED_CHARACTER, (R0)                                 60     0224   C3  90   0004C
  1694.     INCL    -4(R3)                 ;FILE_REC_POINTER                                  FC   A3  D6   00051
  1695.     INCL    (R3)                 ;FILE_REC_COUNT               1358                  63  D6   00054
  1696.     MOVL    #2, -272(R3)             ;#2, FILE_FAB+24               1359     FEF0   C3         02  D0   00056
  1697. 2$:    CMPZV   #0, #7, 4(AP), #13         ;#0, #7, CHARACTER, #13           1370            07         00  ED   0005B
  1698.                          ;                                   0D    04   AC       0005E
  1699.     BNEQ    3$                 ;3$                                               0D  12   00061
  1700.     MOVB    4(AP), 548(R3)             ;CHARACTER, SAVED_CHARACTER           1373     0224   C3    04   AC  90   00063
  1701.     MOVL    #3, -272(R3)             ;#3, FILE_FAB+24               1374     FEF0   C3         03  D0   00069
  1702.     BRB     9$                 ;9$                       1375                  64  11   0006E
  1703. 3$:    CMPL    (R3), 4(R3)             ;FILE_REC_COUNT, REC_SIZE           1378       04   A3         63  D1   00070
  1704.     BLSS    8$                 ;8$                                               51  19   00074
  1705. 4$:    PUSHL   R5                 ;R5                       1381                  55  DD   00076
  1706.     CALLS   #1, (R6)             ;#1, LIB$SIGNAL                                 66         01  FB   00078
  1707.     MOVL    R5, R0                 ;R5, R0                   1382            50         55  D0   0007B
  1708.     RET                      ;                                               04   0007E
  1709. 5$:    CMPL    R0, #2                 ;R0, #2                   1389            02         50  D1   0007F
  1710.     BEQL    6$                 ;6$                                               05  13   00082
  1711.     CMPL    R0, #4                 ;R0, #4                                     04         50  D1   00084
  1712.     BNEQ    7$                 ;7$                                               18  12   00087
  1713. 6$:    CMPL    (R3), 4(R3)             ;FILE_REC_COUNT, REC_SIZE           1392       04   A3         63  D1   00089
  1714.     BLSS    8$                 ;8$                                               38  19   0008D
  1715.     CALLS   #0, (R4)             ;#0, DUMP_BUFFER               1395            64         00  FB   0008F
  1716.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00092
  1717.     BLBS    R2, 8$                 ;STATUS, 8$                   1397            2F         52  E8   00095
  1718.     PUSHL   R2                 ;STATUS                   1400                  52  DD   00098
  1719.     CALLS   #1, (R6)             ;#1, LIB$SIGNAL                                 66         01  FB   0009A
  1720.     MOVL    R2, R0                 ;STATUS, R0                   1401            50         52  D0   0009D
  1721.     RET                      ;                                               04   000A0
  1722. 7$:    CMPL    R0, #3                 ;R0, #3                   1410            03         50  D1   000A1
  1723.     BNEQ    9$                 ;9$                                               2E  12   000A4
  1724.     MOVL    (R3), R0             ;FILE_REC_COUNT, R0               1413            50         63  D0   000A6
  1725.     CMPL    R0, 4(R3)             ;R0, REC_SIZE                                04   A3         50  D1   000A9
  1726.     BLSS    8$                 ;8$                                               18  19   000AD
  1727.     MOVW    R0, -86(R3)             ;R0, FILE_RAB+34               1416       AA   A3         50  B0   000AF
  1728.     PUSHAB  -120(R3)             ;FILE_RAB                   1417             88   A3  9F   000B3
  1729.     CALLS   #1, G^SYS$WRITE             ;#1, SYS$WRITE                          00000000G  00         01  FB   000B6
  1730.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   000BD
  1731.     CLRL    (R3)                 ;FILE_REC_COUNT               1418                  63  D4   000C0
  1732.     MOVL    8(R3), -4(R3)             ;REC_ADDRESS, FILE_REC_POINTER        1419       FC   A3    08   A3  D0   000C2
  1733. 8$:    INCL    (R3)                 ;FILE_REC_COUNT               1422                  63  D6   000C7
  1734.     MOVL    -4(R3), R0             ;FILE_REC_POINTER, R0               1423            50    FC   A3  D0   000C9
  1735.     MOVB    4(AP), (R0)             ;CHARACTER, (R0)                                 60    04   AC  90   000CD
  1736.     INCL    -4(R3)                 ;FILE_REC_POINTER                                  FC   A3  D6   000D1
  1737. 9$:    MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               1427            50 00000000G  8F  D0   000D4
  1738.     RET                      ;                                               04   000DB
  1739.  
  1740. ; Routine Size:  220 bytes,    Routine Base:  $CODE$ + 03BF
  1741.  
  1742.  
  1743. ;   1429  1     
  1744. ;   1430  1     %SBTTL 'DUMP_BUFFER - Dump the current record to disk'
  1745. ;   1431  1    ROUTINE DUMP_BUFFER =
  1746. ;   1432  1     
  1747. ;   1433  1    !++
  1748. ;   1434  1    ! FUNCTIONAL DESCRIPTION:
  1749. ;   1435  1    !
  1750. ;   1436  1    !    This routine will dump the current record to disk.  It doesn't
  1751. ;   1437  1    !    care what type of file you are writing, unlike FILE_DUMP.
  1752. ;   1438  1    !
  1753. ;   1439  1    ! CALLING SEQUENCE:
  1754. ;   1440  1    !
  1755. ;   1441  1    !    STATUS = DUMP_BUFFER();
  1756. ;   1442  1    !
  1757. ;   1443  1    ! INPUT PARAMETERS:
  1758. ;   1444  1    !
  1759. ;   1445  1    !    None.
  1760. ;   1446  1    !
  1761. ;   1447  1    ! IMPLICIT INPUTS:
  1762. ;   1448  1    !
  1763. ;   1449  1    !    None.
  1764. ;   1450  1    !
  1765. ;   1451  1    ! OUTPUT PARAMETERS:
  1766. ;   1452  1    !
  1767. ;   1453  1    !    None.
  1768. ;   1454  1    !
  1769. ;   1455  1    ! IMPLICIT OUTPUTS:
  1770. ;   1456  1    !
  1771. ;   1457  1    !    None.
  1772. ;   1458  1    !
  1773. ;   1459  1    ! COMPLETION CODES:
  1774. ;   1460  1    !
  1775. ;   1461  1    !    KER_NORMAL - Output went ok.
  1776. ;   1462  1    !    KER_RMS32 - RMS-32 error.
  1777. ;   1463  1    !
  1778. ;   1464  1    ! SIDE EFFECTS:
  1779. ;   1465  1    !
  1780. ;   1466  1    !    None.
  1781. ;   1467  1    !
  1782. ;   1468  1    !--
  1783. ;   1469  1     
  1784. ;   1470  2        BEGIN
  1785. ;   1471  2    !
  1786. ;   1472  2    ! Completion codes returned:
  1787. ;   1473  2    !
  1788. ;   1474  2        EXTERNAL LITERAL
  1789. ;   1475  2        KER_NORMAL,                ! Normal return
  1790. ;   1476  2        KER_RMS32;                ! RMS-32 error
  1791. ;   1477  2    !
  1792. ;   1478  2    ! Local variables
  1793. ;   1479  2    !
  1794. ;   1480  2        LOCAL
  1795. ;   1481  2        STATUS;                    ! Random status values
  1796. ;   1482  2     
  1797. ;   1483  2    !
  1798. ;   1484  2    ! First update the record length
  1799. ;   1485  2    !
  1800. ;   1486  2        FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
  1801. ;   1487  2    !
  1802. ;   1488  2    ! Now output the record to the file
  1803. ;   1489  2    !
  1804. ;   1490  2        STATUS = $PUT (RAB = FILE_RAB);
  1805. ;   1491  2    !
  1806. ;   1492  2    ! Update the pointers first
  1807. ;   1493  2    !
  1808. ;   1494  2        FILE_REC_COUNT = 0;
  1809. ;   1495  2        FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
  1810. ;   1496  2    !
  1811. ;   1497  2    ! Now determine if we failed attempting to write the record
  1812. ;   1498  2    !
  1813. ;   1499  2     
  1814. ;   1500  2        IF NOT .STATUS
  1815. ;   1501  2        THEN
  1816. ;   1502  3        BEGIN
  1817. ;   1503  3        FILE_ERROR (.STATUS);
  1818. ;   1504  3        RETURN KER_RMS32
  1819. ;   1505  2        END;
  1820. ;   1506  2     
  1821. ;   1507  2        RETURN KER_NORMAL
  1822. ;   1508  1        END;                    ! End of DUMP_BUFFER
  1823.  
  1824.  
  1825.  
  1826.     .EXTRN  SYS$PUT
  1827.  
  1828. ;DUMP_BUFFER
  1829. U.2:    .WORD   ^M<R2>                 ;Save R2                   1431                    0004   00000
  1830.     MOVAB   G^U.16, R2             ;U.16, R2                                     52 00000000'  00  9E   00002
  1831.     MOVW    (R2), -86(R2)             ;FILE_REC_COUNT, FILE_RAB+34           1486       AA   A2         62  B0   00009
  1832.     PUSHAB  -120(R2)             ;FILE_RAB                   1490             88   A2  9F   0000D
  1833.     CALLS   #1, G^SYS$PUT             ;#1, SYS$PUT                          00000000G  00         01  FB   00010
  1834.     CLRL    (R2)                 ;FILE_REC_COUNT               1494                  62  D4   00017
  1835.     MOVL    8(R2), -4(R2)             ;REC_ADDRESS, FILE_REC_POINTER        1495       FC   A2    08   A2  D0   00019
  1836.     BLBS    R0, 1$                 ;STATUS, 1$                   1500            11         50  E8   0001E
  1837.     PUSHL   R0                 ;STATUS                   1503                  50  DD   00021
  1838.     CALLS   #1, G^U.6             ;#1, U.6                          00000000V  00         01  FB   00023
  1839.     MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               1504            50 00000000G  8F  D0   0002A
  1840.     RET                      ;                                               04   00031
  1841. 1$:    MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               1507            50 00000000G  8F  D0   00032
  1842.     RET                      ;                                               04   00039
  1843.  
  1844. ; Routine Size:  58 bytes,    Routine Base:  $CODE$ + 049B
  1845.  
  1846.  
  1847. ;   1509  1     %SBTTL 'OPEN_READING'
  1848. ;   1510  1    ROUTINE OPEN_READING =
  1849. ;   1511  1     
  1850. ;   1512  1    !++
  1851. ;   1513  1    ! FUNCTIONAL DESCRIPTION:
  1852. ;   1514  1    !
  1853. ;   1515  1    !    This routine will open a file for reading.  It will return either
  1854. ;   1516  1    !    true or false to the called depending on the success of the
  1855. ;   1517  1    !    operation.
  1856. ;   1518  1    !
  1857. ;   1519  1    ! CALLING SEQUENCE:
  1858. ;   1520  1    !
  1859. ;   1521  1    !    status = OPEN_READING();
  1860. ;   1522  1    !
  1861. ;   1523  1    ! INPUT PARAMETERS:
  1862. ;   1524  1    !
  1863. ;   1525  1    !    None.
  1864. ;   1526  1    !
  1865. ;   1527  1    ! IMPLICIT INPUTS:
  1866. ;   1528  1    !
  1867. ;   1529  1    !    None.
  1868. ;   1530  1    !
  1869. ;   1531  1    ! OUTPUT PARAMETERS:
  1870. ;   1532  1    !
  1871. ;   1533  1    !    None.
  1872. ;   1534  1    !
  1873. ;   1535  1    ! IMPLICIT OUTPUTS:
  1874. ;   1536  1    !
  1875. ;   1537  1    !    None.
  1876. ;   1538  1    !
  1877. ;   1539  1    ! COMPLETION CODES:
  1878. ;   1540  1    !
  1879. ;   1541  1    !   KER_NORMAL - Normal return
  1880. ;   1542  1    !   KER_RMS32 - RMS error encountered
  1881. ;   1543  1    !
  1882. ;   1544  1    ! SIDE EFFECTS:
  1883. ;   1545  1    !
  1884. ;   1546  1    !    None.
  1885. ;   1547  1    !
  1886. ;   1548  1    !--
  1887. ;   1549  1     
  1888. ;   1550  2        BEGIN
  1889. ;   1551  2    !
  1890. ;   1552  2    ! Completion codes returned:
  1891. ;   1553  2    !
  1892. ;   1554  2        EXTERNAL LITERAL
  1893. ;   1555  2        KER_NORMAL,                ! Normal return
  1894. ;   1556  2        KER_RMS32;                ! RMS-32 error
  1895. ;   1557  2     
  1896. ;   1558  2        LOCAL
  1897. ;   1559  2        STATUS;                    ! Random status values
  1898. ;   1560  2     
  1899. ;   1561  2    !
  1900. ;   1562  2    ! We now have an expanded file specification that we can use to process
  1901. ;   1563  2    ! the file.
  1902. ;   1564  2    !
  1903. ;   1565  2     
  1904. ;   1566  2        IF .FILE_TYPE NEQ FILE_BLK
  1905. ;   1567  2        THEN
  1906. ;   1568  3        BEGIN
  1907. ; P 1569  3        $FAB_INIT (FAB = FILE_FAB, FAC = GET, FOP = NAM, RFM = STM, NAM = FILE_NAM,
  1908. ;   1570  3            XAB = FILE_XABFHC);
  1909. ;   1571  3        END
  1910. ;   1572  2        ELSE
  1911. ;   1573  3        BEGIN
  1912. ; P 1574  3        $FAB_INIT (FAB = FILE_FAB, FAC = (GET, BIO), FOP = NAM, RFM = STM,
  1913. ;   1575  3            NAM = FILE_NAM, XAB = FILE_XABFHC);
  1914. ;   1576  2        END;
  1915. ;   1577  2     
  1916. ;   1578  2        $XABFHC_INIT (XAB = FILE_XABFHC);
  1917. ;   1579  2        STATUS = $OPEN (FAB = FILE_FAB);
  1918. ;   1580  2     
  1919. ;   1581  3        IF (.STATUS NEQ RMS$_NORMAL AND .STATUS NEQ RMS$_KFF)
  1920. ;   1582  2        THEN
  1921. ;   1583  3        BEGIN
  1922. ;   1584  3        FILE_ERROR (.STATUS);
  1923. ;   1585  3        RETURN KER_RMS32;
  1924. ;   1586  2        END;
  1925. ;   1587  2     
  1926. ;   1588  2    !
  1927. ;   1589  2    ! Now allocate a buffer for the records
  1928. ;   1590  2    !
  1929. ;   1591  2        REC_SIZE = (IF .FILE_TYPE EQL FILE_BLK THEN 512 ELSE .FILE_XABFHC [XAB$W_LRL]);
  1930. ;   1592  2     
  1931. ;   1593  2        IF .REC_SIZE EQL 0 THEN REC_SIZE = MAX_REC_LENGTH;
  1932. ;   1594  2     
  1933. ;   1595  2        STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
  1934. ;   1596  2    !
  1935. ;   1597  2    ! Determine if we need a buffer for the fixed control area
  1936. ;   1598  2    !
  1937. ;   1599  2        FIX_SIZE = .FILE_FAB [FAB$B_FSZ];
  1938. ;   1600  2     
  1939. ;   1601  2        IF .FIX_SIZE NEQ 0
  1940. ;   1602  2        THEN
  1941. ;   1603  3        BEGIN
  1942. ;   1604  3        STATUS = LIB$GET_VM (FIX_SIZE, FIX_ADDRESS);
  1943. ;   1605  2        END;
  1944. ;   1606  2     
  1945. ;   1607  2    !
  1946. ;   1608  2    ! Initialize the RAB for the $CONNECT RMS call
  1947. ;   1609  2    !
  1948. ; P 1610  2        $RAB_INIT (RAB = FILE_RAB, FAB = FILE_FAB, RAC = SEQ, ROP = NLK, UBF = .REC_ADDRESS,
  1949. ;   1611  2        USZ = .REC_SIZE);
  1950. ;   1612  2     
  1951. ;   1613  2        IF .FIX_SIZE NEQ 0 THEN FILE_RAB [RAB$L_RHB] = .FIX_ADDRESS;
  1952. ;   1614  2     
  1953. ;   1615  2                            ! Store header address
  1954. ;   1616  2        STATUS = $CONNECT (RAB = FILE_RAB);
  1955. ;   1617  2     
  1956. ;   1618  2        IF NOT .STATUS
  1957. ;   1619  2        THEN
  1958. ;   1620  3        BEGIN
  1959. ;   1621  3        FILE_ERROR (.STATUS);
  1960. ;   1622  3        RETURN KER_RMS32;
  1961. ;   1623  2        END;
  1962. ;   1624  2     
  1963. ;   1625  2        FILE_REC_COUNT = -1;
  1964. ;   1626  2        FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
  1965. ;   1627  2        RETURN KER_NORMAL;
  1966. ;   1628  1        END;                    ! End of OPEN_READING
  1967.  
  1968.  
  1969.  
  1970. U.36=            U.10
  1971. U.37=            U.10
  1972. U.38=            U.13
  1973. U.39=            U.12
  1974.     .EXTRN  SYS$OPEN, SYS$CONNECT
  1975.  
  1976. ;OPEN_READING
  1977. U.35:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9>     ;Save R2,R3,R4,R5,R6,R7,R8,R9           1510                    03FC   00000
  1978.     MOVAB   G^FILE_TYPE, R9             ;FILE_TYPE, R9                                     59 00000000'  00  9E   00002
  1979.     MOVAB   G^LIB$GET_VM, R8         ;LIB$GET_VM, R8                                 58 00000000G  00  9E   00009
  1980.     MOVAB   G^U.36, R7             ;U.36, R7                                     57 00000000'  00  9E   00010
  1981.     CMPL    (R9), #3             ;FILE_TYPE, #3                   1566            03         69  D1   00017
  1982.     BEQL    1$                 ;1$                                               1B  13   0001A
  1983.     MOVC5   #0, (SP), #0, #80, (R7)         ;#0, (SP), #0, #80, $RMS_PTR           1570            6E         00  2C   0001C
  1984.                          ;                            0050   8F         00       0001F
  1985.                          ;                                         67       00023
  1986.     MOVW    #20483, (R7)             ;#20483, $RMS_PTR                                 67     5003   8F  B0   00024
  1987.     MOVL    #16777216, 4(R7)         ;#16777216, $RMS_PTR+4                            04   A7 01000000   8F  D0   00029
  1988.     MOVB    #2, 22(R7)             ;#2, $RMS_PTR+22                            16   A7         02  90   00031
  1989.     BRB     2$                 ;2$                                               19  11   00035
  1990. 1$:    MOVC5   #0, (SP), #0, #80, (R7)         ;#0, (SP), #0, #80, $RMS_PTR           1575            6E         00  2C   00037
  1991.                          ;                            0050   8F         00       0003A
  1992.                          ;                                         67       0003E
  1993.     MOVW    #20483, (R7)             ;#20483, $RMS_PTR                                 67     5003   8F  B0   0003F
  1994.     MOVL    #16777216, 4(R7)         ;#16777216, $RMS_PTR+4                            04   A7 01000000   8F  D0   00044
  1995.     MOVB    #34, 22(R7)             ;#34, $RMS_PTR+22                            16   A7         22  90   0004C
  1996. 2$:    MOVB    #4, 31(R7)             ;#4, $RMS_PTR+31                            1F   A7         04  90   00050
  1997.     MOVAB   244(R7), 36(R7)             ;FILE_XABFHC, $RMS_PTR+36                        24   A7     00F4   C7  9E   00054
  1998.     MOVAB   80(R7), 40(R7)             ;FILE_NAM, $RMS_PTR+40               1570       28   A7    50   A7  9E   0005A
  1999.     MOVC5   #0, (SP), #0, #44, 244(R7)     ;#0, (SP), #0, #44, $RMS_PTR           1578            6E         00  2C   0005F
  2000.                          ;                                   2C         00       00062
  2001.                          ;                                      00F4   C7       00064
  2002.     MOVW    #11293, 244(R7)             ;#11293, $RMS_PTR                          00F4   C7     2C1D   8F  B0   00067
  2003.     PUSHL   R7                 ;R7                       1579                  57  DD   0006E
  2004.     CALLS   #1, G^SYS$OPEN             ;#1, SYS$OPEN                          00000000G  00         01  FB   00070
  2005.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   00077
  2006.     CMPL    R6, #65537             ;STATUS, #65537               1581 00010001   8F         56  D1   0007A
  2007.     BEQL    3$                 ;3$                                               0C  13   00081
  2008.     CMPL    R6, #98353             ;STATUS, #98353                      00018031   8F         56  D1   00083
  2009.     BEQL    3$                 ;3$                                               03  13   0008A
  2010.     BRW     9$                 ;9$                                             0092  31   0008C
  2011. 3$:    CMPL    (R9), #3             ;FILE_TYPE, #3                   1591            03         69  D1   0008F
  2012.     BNEQ    4$                 ;4$                                               07  12   00092
  2013.     MOVZWL  #512, R0             ;#512, R0                                     50     0200   8F  3C   00094
  2014.     BRB     5$                 ;5$                                               05  11   00099
  2015. 4$:    MOVZWL  254(R7), R0             ;FILE_XABFHC+10, R0                                 50     00FE   C7  3C   0009B
  2016. 5$:    MOVL    R0, 300(R7)             ;R0, REC_SIZE                              012C   C7         50  D0   000A0
  2017.     BNEQ    6$                 ;6$                       1593                  07  12   000A5
  2018.     MOVZWL  #4096, 300(R7)             ;#4096, REC_SIZE                          012C   C7     1000   8F  3C   000A7
  2019. 6$:    PUSHAB  304(R7)                 ;REC_ADDRESS                   1595               0130   C7  9F   000AE
  2020.     PUSHAB  300(R7)                 ;REC_SIZE                                        012C   C7  9F   000B2
  2021.     CALLS   #2, (R8)             ;#2, LIB$GET_VM                                 68         02  FB   000B6
  2022.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   000B9
  2023.     MOVZBL  63(R7), 308(R7)             ;FILE_FAB+63, FIX_SIZE               1599     0134   C7    3F   A7  9A   000BC
  2024.     BEQL    7$                 ;7$                       1601                  0E  13   000C2
  2025.     PUSHAB  312(R7)                 ;FIX_ADDRESS                   1604               0138   C7  9F   000C4
  2026.     PUSHAB  308(R7)                 ;FIX_SIZE                                        0134   C7  9F   000C8
  2027.     CALLS   #2, (R8)             ;#2, LIB$GET_VM                                 68         02  FB   000CC
  2028.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   000CF
  2029. 7$:    MOVC5   #0, (SP), #0, #68, 176(R7)     ;#0, (SP), #0, #68, $RMS_PTR           1611            6E         00  2C   000D2
  2030.                          ;                            0044   8F         00       000D5
  2031.                          ;                                      00B0   C7       000D9
  2032.     MOVW    #17409, 176(R7)             ;#17409, $RMS_PTR                          00B0   C7     4401   8F  B0   000DC
  2033.     MOVL    #1048576, 180(R7)         ;#1048576, $RMS_PTR+4                          00B4   C7 00100000   8F  D0   000E3
  2034.     CLRB    206(R7)                 ;$RMS_PTR+30                                        00CE   C7  94   000EC
  2035.     MOVW    300(R7), 208(R7)         ;REC_SIZE, $RMS_PTR+32                          00D0   C7     012C   C7  B0   000F0
  2036.     MOVL    304(R7), 212(R7)         ;REC_ADDRESS, $RMS_PTR+36                      00D4   C7     0130   C7  D0   000F7
  2037.     MOVAB   (R7), 236(R7)             ;FILE_FAB, $RMS_PTR+60                          00EC   C7         67  9E   000FE
  2038.     TSTL    308(R7)                 ;FIX_SIZE                   1613               0134   C7  D5   00103
  2039.     BEQL    8$                 ;8$                                               07  13   00107
  2040.     MOVL    312(R7), 220(R7)         ;FIX_ADDRESS, FILE_RAB+44                      00DC   C7     0138   C7  D0   00109
  2041. 8$:    PUSHAB  176(R7)                 ;FILE_RAB                   1616               00B0   C7  9F   00110
  2042.     CALLS   #1, G^SYS$CONNECT         ;#1, SYS$CONNECT                      00000000G  00         01  FB   00114
  2043.     MOVL    R0, R6                 ;R0, STATUS                                     56         50  D0   0011B
  2044.     BLBS    R6, 10$                 ;STATUS, 10$                   1618            11         56  E8   0011E
  2045. 9$:    PUSHL   R6                 ;STATUS                   1621                  56  DD   00121
  2046.     CALLS   #1, G^U.6             ;#1, U.6                          00000000V  00         01  FB   00123
  2047.     MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               1622            50 00000000G  8F  D0   0012A
  2048.     RET                      ;                                               04   00131
  2049. 10$:    MNEGL   #1, 296(R7)             ;#1, FILE_REC_COUNT               1625     0128   C7         01  CE   00132
  2050.     CLRL    24(R7)                 ;FILE_FAB+24                   1626             18   A7  D4   00137
  2051.     MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               1627            50 00000000G  8F  D0   0013A
  2052.     RET                      ;                                               04   00141
  2053.  
  2054. ; Routine Size:  322 bytes,    Routine Base:  $CODE$ + 04D5
  2055.  
  2056.  
  2057. ;   1629  1     %SBTTL 'FILE_OPEN'
  2058. ;   1630  1     
  2059. ;   1631  1    GLOBAL ROUTINE FILE_OPEN (FUNCTION) =
  2060. ;   1632  1     
  2061. ;   1633  1    !++
  2062. ;   1634  1    ! FUNCTIONAL DESCRIPTION:
  2063. ;   1635  1    !
  2064. ;   1636  1    !    This routine will open a file for reading or writing depending on
  2065. ;   1637  1    !    the function that is passed this routine.  It will handle wildcards
  2066. ;   1638  1    !    on the read function.
  2067. ;   1639  1    !
  2068. ;   1640  1    ! CALLING SEQUENCE:
  2069. ;   1641  1    !
  2070. ;   1642  1    !    status = FILE_OPEN(FUNCTION);
  2071. ;   1643  1    !
  2072. ;   1644  1    ! INPUT PARAMETERS:
  2073. ;   1645  1    !
  2074. ;   1646  1    !    FUNCTION - Function to do.  Either FNC_READ or FNC_WRITE.
  2075. ;   1647  1    !
  2076. ;   1648  1    ! IMPLICIT INPUTS:
  2077. ;   1649  1    !
  2078. ;   1650  1    !    FILE_NAME and FILE_SIZE set up with the file name and the length
  2079. ;   1651  1    !    of the name.
  2080. ;   1652  1    !
  2081. ;   1653  1    ! OUTPUT PARAMETERS:
  2082. ;   1654  1    !
  2083. ;   1655  1    !    None.
  2084. ;   1656  1    !
  2085. ;   1657  1    ! IMPLICIT OUTPUTS:
  2086. ;   1658  1    !
  2087. ;   1659  1    !    FILE_NAME and FILE_SIZE set up with the file name and the length
  2088. ;   1660  1    !    of the name.
  2089. ;   1661  1    !
  2090. ;   1662  1    ! COMPLETION CODES:
  2091. ;   1663  1    !
  2092. ;   1664  1    !   KER_NORMAL - File opened correctly.
  2093. ;   1665  1    !   KER_RMS32 - Problem processing the file.
  2094. ;   1666  1    !   KER_INTERNALERR - Internal Kermit-32 error.
  2095. ;   1667  1    !
  2096. ;   1668  1    ! SIDE EFFECTS:
  2097. ;   1669  1    !
  2098. ;   1670  1    !    None.
  2099. ;   1671  1    !
  2100. ;   1672  1    !--
  2101. ;   1673  1     
  2102. ;   1674  2        BEGIN
  2103. ;   1675  2    !
  2104. ;   1676  2    ! Completion codes returned:
  2105. ;   1677  2    !
  2106. ;   1678  2        EXTERNAL LITERAL
  2107. ;   1679  2        KER_NORMAL,                ! Normal return
  2108. ;   1680  2        KER_INTERNALERR,            ! Internal error
  2109. ;   1681  2        KER_RMS32;                ! RMS-32 error
  2110. ;   1682  2     
  2111. ;   1683  2        EXTERNAL ROUTINE
  2112. ;   1684  2        TT_TEXT : NOVALUE;    ! Output an ASCIZ string
  2113. ;   1685  2     
  2114. ;   1686  2        EXTERNAL ROUTINE
  2115. ;   1687  2    !
  2116. ;   1688  2    ! This external routine is called to perform any checks on the file
  2117. ;   1689  2    ! specification that the user wishes.  It must return a true value
  2118. ;   1690  2    ! if the access is to be allowed, and a false value (error code) if
  2119. ;   1691  2    ! access is to be denied.  The error code may be any valid system wide
  2120. ;   1692  2    ! error code, any Kermit-32 error code (KER_xxx) or a user specific code,
  2121. ;   1693  2    ! provided a message file defining the error code is loaded with Kermit-32.
  2122. ;   1694  2    !
  2123. ;   1695  2    ! The routine is called as:
  2124. ;   1696  2    !
  2125. ;   1697  2    !    STATUS = USER_FILE_CHECK ( FILE NAME DESCRIPTOR, READ/WRITE FLAG)
  2126. ;   1698  2    !
  2127. ;   1699  2    ! The file name descriptor points to the file specification supplied by
  2128. ;   1700  2    ! the user.  The read/write flag is TRUE if the file is being read, and
  2129. ;   1701  2    ! false if it is being written.
  2130. ;   1702  2    !
  2131. ;   1703  2        USER_FILE_CHECK : ADDRESSING_MODE(GENERAL) WEAK;
  2132. ;   1704  2     
  2133. ;   1705  2        LOCAL
  2134. ;   1706  2        STATUS,                    ! Random status values
  2135. ;   1707  2        ITMLST : VECTOR [4, LONG],        ! For GETDVI call
  2136. ;   1708  2        SIZE : WORD;                ! Size of resulting file name
  2137. ;   1709  2     
  2138. ;   1710  2    !
  2139. ;   1711  2    ! Assume we can do searches
  2140. ;   1712  2    !
  2141. ;   1713  2        SEARCH_FLAG = TRUE;
  2142. ;   1714  2        DEV_CLASS = DC$_DISK;            ! Assume disk file
  2143. ;   1715  2    !
  2144. ;   1716  2    ! Now do the function dependent processing
  2145. ;   1717  2    !
  2146. ;   1718  2        FILE_MODE = .FUNCTION;
  2147. ;   1719  2        FILE_DESC [DSC$W_LENGTH] = .FILE_SIZE;    ! Length of file name
  2148. ;   1720  2    !
  2149. ;   1721  2    ! Call user routine (if any)
  2150. ;   1722  2    !
  2151. ;   1723  2        IF USER_FILE_CHECK NEQ 0
  2152. ;   1724  2        THEN
  2153. ;   1725  3        BEGIN
  2154. ;   1726  3        STATUS = USER_FILE_CHECK (FILE_DESC, %REF (.FILE_MODE EQL FNC_READ));
  2155. ;   1727  3        IF NOT .STATUS
  2156. ;   1728  3        THEN
  2157. ;   1729  4            BEGIN
  2158. ;   1730  4            LIB$SIGNAL (.STATUS);
  2159. ;   1731  4            RETURN .STATUS;
  2160. ;   1732  3            END;
  2161. ;   1733  2        END;
  2162. ;   1734  2    !
  2163. ;   1735  2    ! Select the correct routine depending on if we are reading or writing.
  2164. ;   1736  2    !
  2165. ;   1737  2     
  2166. ;   1738  2        SELECTONE .FUNCTION OF
  2167. ;   1739  2        SET
  2168. ;   1740  2     
  2169. ;   1741  2        [FNC_READ] :
  2170. ;   1742  3            BEGIN
  2171. ;   1743  3    !
  2172. ;   1744  3    ! Determine device type
  2173. ;   1745  3    !
  2174. ;   1746  3            ITMLST [0] = DVI$_DEVCLASS^16 + 4;    ! Want device class
  2175. ;   1747  3            ITMLST [1] = DEV_CLASS;        ! Put it there
  2176. ;   1748  3            ITMLST [2] = ITMLST [2];        ! Put the size here
  2177. ;   1749  3            ITMLST [3] = 0;            ! End the list
  2178. ;   1750  3            STATUS = $GETDVIW (DEVNAM = FILE_DESC, ITMLST = ITMLST);
  2179. ;   1751  3    !
  2180. ;   1752  3    ! If not a disk, can't do search
  2181. ;   1753  3    !
  2182. ;   1754  3            IF .STATUS AND .DEV_CLASS NEQ DC$_DISK THEN SEARCH_FLAG = FALSE;
  2183. ;   1755  3     
  2184. ;   1756  3    !
  2185. ;   1757  3    ! Now set up the FAB with the information it needs.
  2186. ;   1758  3    !
  2187. ; P 1759  3            $FAB_INIT (FAB = FILE_FAB, FOP = NAM, FNA = FILE_NAME, FNS = .FILE_SIZE,
  2188. ;   1760  3            NAM = FILE_NAM, DNM = '.;0');
  2189. ;   1761  3    !
  2190. ;   1762  3    ! Now initialize the NAM block
  2191. ;   1763  3    !
  2192. ; P 1764  3            $NAM_INIT (NAM = FILE_NAM, RSA = RES_STR, RSS = NAM$C_MAXRSS, ESA = EXP_STR,
  2193. ;   1765  3            ESS = NAM$C_MAXRSS);
  2194. ;   1766  3    !
  2195. ;   1767  3    ! First parse the file specification.
  2196. ;   1768  3    !
  2197. ;   1769  3            STATUS = $PARSE (FAB = FILE_FAB);
  2198. ;   1770  3     
  2199. ;   1771  3            IF NOT .STATUS
  2200. ;   1772  3            THEN
  2201. ;   1773  4            BEGIN
  2202. ;   1774  4            FILE_ERROR (.STATUS);
  2203. ;   1775  4            RETURN KER_RMS32;
  2204. ;   1776  3            END;
  2205. ;   1777  3     
  2206. ;   1778  3            IF .SEARCH_FLAG
  2207. ;   1779  3            THEN
  2208. ;   1780  4            BEGIN
  2209. ;   1781  4            STATUS = $SEARCH (FAB = FILE_FAB);
  2210. ;   1782  4     
  2211. ;   1783  4            IF NOT .STATUS
  2212. ;   1784  4            THEN
  2213. ;   1785  5                BEGIN
  2214. ;   1786  5                FILE_ERROR (.STATUS);
  2215. ;   1787  5                RETURN KER_RMS32;
  2216. ;   1788  4                END;
  2217. ;   1789  4     
  2218. ;   1790  3            END;
  2219. ;   1791  3     
  2220. ;   1792  3    !
  2221. ;   1793  3    ! We now have an expanded file specification that we can use to process
  2222. ;   1794  3    ! the file.
  2223. ;   1795  3    !
  2224. ;   1796  3            STATUS = OPEN_READING ();        ! Open the file
  2225. ;   1797  3     
  2226. ;   1798  3            IF NOT .STATUS THEN RETURN .STATUS;    ! If we couldn't, pass error back
  2227. ;   1799  3     
  2228. ;   1800  3    !
  2229. ;   1801  3    ! Tell user what name we ended up with for storing the file
  2230. ;   1802  3    !
  2231. ;   1803  3     
  2232. ;   1804  3            IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  2233. ;   1805  3            THEN
  2234. ;   1806  4            BEGIN
  2235. ;   1807  4     
  2236. ;   1808  4            IF .FILE_NAM [NAM$B_RSS] GTR 0
  2237. ;   1809  4            THEN
  2238. ;   1810  5                BEGIN
  2239. ;   1811  5                CH$WCHAR (CHR_NUL,
  2240. ;   1812  5                CH$PTR (.FILE_NAM [NAM$L_RSA],
  2241. ;   1813  5                    .FILE_NAM [NAM$B_RSL]));
  2242. ;   1814  5                TT_TEXT (.FILE_NAM [NAM$L_RSA]);
  2243. ;   1815  5                END
  2244. ;   1816  4            ELSE
  2245. ;   1817  5                BEGIN
  2246. ;   1818  5                CH$WCHAR (CHR_NUL,
  2247. ;   1819  5                CH$PTR (.FILE_NAM [NAM$L_ESA],
  2248. ;   1820  5                    .FILE_NAM [NAM$B_ESL]));
  2249. ;   1821  5                TT_TEXT (.FILE_NAM [NAM$L_ESA]);
  2250. ;   1822  4                END;
  2251. ;   1823  4     
  2252. ;   1824  4            TT_TEXT (UPLIT (%ASCIZ' as '));
  2253. ;   1825  3            END;
  2254. ;   1826  3     
  2255. ;   1827  2            END;                ! End of [FNC_READ]
  2256. ;   1828  2     
  2257. ;   1829  2        [FNC_WRITE] :
  2258. ;   1830  3            BEGIN
  2259. ;   1831  3     
  2260. ;   1832  3            SELECTONE .FILE_TYPE OF
  2261. ;   1833  3            SET
  2262. ;   1834  3     
  2263. ;   1835  3            [FILE_ASC] :
  2264. ;   1836  4                BEGIN
  2265. ; P 1837  4                $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
  2266. ; P 1838  4                FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
  2267. ;   1839  4                ORG = SEQ, RFM = VAR, RAT = CR);
  2268. ;   1840  3                END;
  2269. ;   1841  3     
  2270. ;   1842  3            [FILE_BIN] :
  2271. ;   1843  4                BEGIN
  2272. ; P 1844  4                $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
  2273. ; P 1845  4                FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
  2274. ;   1846  4                ORG = SEQ, RFM = VAR);
  2275. ;   1847  3                END;
  2276. ;   1848  3    
  2277. ;   1849  3            [FILE_FIX] :
  2278. ;   1850  4                BEGIN
  2279. ; P 1851  4                $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
  2280. ; P 1852  4                FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
  2281. ; P 1853  4                ORG = SEQ, RFM = FIX, MRS = (IF .file_blocksize_set 
  2282. ; P 1854  4                                                           THEN .file_blocksize
  2283. ;   1855  4                                                           ELSE 512));
  2284. ;   1856  3                END;
  2285. ;   1857  3     
  2286. ;   1858  3            [FILE_BLK] :
  2287. ;   1859  4                BEGIN
  2288. ; P 1860  4                $FAB_INIT (FAB = FILE_FAB, FAC = (PUT, BIO), FNA = FILE_NAME,
  2289. ;   1861  4                FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM);
  2290. ;   1862  3                END;
  2291. ;   1863  3            TES;
  2292. ;   1864  3     
  2293. ;   1865  3    !
  2294. ;   1866  3    ! If we had an alternate file name from the receive command, use it
  2295. ;   1867  3    ! instead of what KERMSG has told us.
  2296. ;   1868  3    !
  2297. ;   1869  3     
  2298. ;   1870  3            IF .ALT_FILE_SIZE GTR 0
  2299. ;   1871  3            THEN
  2300. ;   1872  4            BEGIN
  2301. ;   1873  4            LOCAL
  2302. ;   1874  4                ALT_FILE_DESC : BLOCK [8, BYTE];
  2303. ;   1875  4     
  2304. ;   1876  4            ALT_FILE_DESC = .FILE_DESC;
  2305. ;   1877  4            ALT_FILE_DESC [DSC$W_LENGTH] = .ALT_FILE_SIZE;
  2306. ;   1878  4            ALT_FILE_DESC [DSC$A_POINTER] = ALT_FILE_NAME;
  2307. ;   1879  4            IF USER_FILE_CHECK NEQ 0
  2308. ;   1880  4            THEN
  2309. ;   1881  5                BEGIN
  2310. ;   1882  5                STATUS = USER_FILE_CHECK (ALT_FILE_DESC, %REF (.FILE_MODE EQL FNC_READ));
  2311. ;   1883  5                IF NOT .STATUS
  2312. ;   1884  5                THEN
  2313. ;   1885  6                BEGIN
  2314. ;   1886  6                LIB$SIGNAL (.STATUS);
  2315. ;   1887  6                RETURN .STATUS;
  2316. ;   1888  5                END;
  2317. ;   1889  4                END;
  2318. ;   1890  4            FILE_FAB [FAB$L_FNA] = ALT_FILE_NAME;
  2319. ;   1891  4            FILE_FAB [FAB$B_FNS] = .ALT_FILE_SIZE;
  2320. ;   1892  3            END;
  2321. ;   1893  3     
  2322. ; P 1894  3            $NAM_INIT (NAM = FILE_NAM, ESA = EXP_STR, ESS = NAM$C_MAXRSS, RSA = RES_STR,
  2323. ;   1895  3            RSS = NAM$C_MAXRSS);
  2324. ;   1896  3    !
  2325. ;   1897  3    ! Now allocate a buffer for the records
  2326. ;   1898  3    !
  2327. ;   1899  3    ! Determine correct buffer size
  2328. ;   1900  3     
  2329. ;   1901  3            SELECTONE .FILE_TYPE OF
  2330. ;   1902  3            SET
  2331. ;   1903  3     
  2332. ;   1904  3            [FILE_ASC] :
  2333. ;   1905  3                REC_SIZE = MAX_REC_LENGTH;
  2334. ;   1906  3     
  2335. ;   1907  3            [FILE_BIN] :
  2336. ;   1908  4                REC_SIZE = (IF .file_blocksize_set THEN .file_blocksize
  2337. ;   1909  3                                                           ELSE 510);
  2338. ;   1910  3    
  2339. ;   1911  3            [FILE_BLK] :
  2340. ;   1912  3                REC_SIZE = 512;
  2341. ;   1913  3    
  2342. ;   1914  3                    [FILE_FIX] :
  2343. ;   1915  4                        REC_SIZE =  (IF .file_blocksize_set THEN .file_blocksize
  2344. ;   1916  3                                                            ELSE 512);
  2345. ;   1917  3    
  2346. ;   1918  3            TES;
  2347. ;   1919  3     
  2348. ;   1920  3            STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
  2349. ;   1921  3    !
  2350. ;   1922  3    ! Now create the file
  2351. ;   1923  3    !
  2352. ;   1924  3            STATUS = $CREATE (FAB = FILE_FAB);
  2353. ;   1925  3     
  2354. ;   1926  3            IF NOT .STATUS
  2355. ;   1927  3            THEN
  2356. ;   1928  4            BEGIN
  2357. ;   1929  4            FILE_ERROR (.STATUS);
  2358. ;   1930  4            RETURN KER_RMS32;
  2359. ;   1931  3            END;
  2360. ;   1932  3     
  2361. ; P 1933  3            $RAB_INIT (RAB = FILE_RAB, FAB = FILE_FAB, RAC = SEQ, RBF = .REC_ADDRESS,
  2362. ;   1934  3            ROP = <NLK, WAT>);
  2363. ;   1935  3            STATUS = $CONNECT (RAB = FILE_RAB);
  2364. ;   1936  3     
  2365. ;   1937  3            IF NOT .STATUS
  2366. ;   1938  3            THEN
  2367. ;   1939  4            BEGIN
  2368. ;   1940  4            FILE_ERROR (.STATUS);
  2369. ;   1941  4            RETURN KER_RMS32;
  2370. ;   1942  3            END;
  2371. ;   1943  3     
  2372. ;   1944  3    !
  2373. ;   1945  3    ! Set the initial state into the FAB field.  This is used to remember
  2374. ;   1946  3    ! whether we need to ignore the line feed which follows a carriage return.
  2375. ;   1947  3    !
  2376. ;   1948  3            FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
  2377. ;   1949  3            FILE_REC_COUNT = 0;
  2378. ;   1950  3            FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
  2379. ;   1951  3    !
  2380. ;   1952  3    ! Tell user what name we ended up with for storing the file
  2381. ;   1953  3    !
  2382. ;   1954  3     
  2383. ;   1955  3            IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  2384. ;   1956  3            THEN
  2385. ;   1957  4            BEGIN
  2386. ;   1958  4            TT_TEXT (UPLIT (%ASCIZ' as '));
  2387. ;   1959  4     
  2388. ;   1960  4            IF .FILE_NAM [NAM$B_RSL] GTR 0
  2389. ;   1961  4            THEN
  2390. ;   1962  5                BEGIN
  2391. ;   1963  5                CH$WCHAR (CHR_NUL,
  2392. ;   1964  5                CH$PTR (.FILE_NAM [NAM$L_RSA],
  2393. ;   1965  5                    .FILE_NAM [NAM$B_RSL]));
  2394. ;   1966  5                TT_TEXT (.FILE_NAM [NAM$L_RSA]);
  2395. ;   1967  5                END
  2396. ;   1968  4            ELSE
  2397. ;   1969  5                BEGIN
  2398. ;   1970  5                CH$WCHAR (CHR_NUL,
  2399. ;   1971  5                CH$PTR (.FILE_NAM [NAM$L_ESA],
  2400. ;   1972  5                    .FILE_NAM [NAM$B_ESL]));
  2401. ;   1973  5                TT_TEXT (.FILE_NAM [NAM$L_ESA]);
  2402. ;   1974  4                END;
  2403. ;   1975  4     
  2404. ;   1976  4            TT_OUTPUT ();
  2405. ;   1977  3            END;
  2406. ;   1978  3     
  2407. ;   1979  2            END;
  2408. ;   1980  2     
  2409. ;   1981  2        [OTHERWISE] :
  2410. ;   1982  2            RETURN KER_INTERNALERR;
  2411. ;   1983  2        TES;
  2412. ;   1984  2     
  2413. ;   1985  2    !
  2414. ;   1986  2    ! Copy the file name based on the type of file name we are to use.
  2415. ;   1987  2    ! The possibilities are:
  2416. ;   1988  2    !        Normal - Just copy name and type
  2417. ;   1989  2    !        Full - Copy entire name string (either resultant or expanded)
  2418. ;   1990  2    !        Untranslated - Copy string from name on (includes version, etc.)
  2419. ;   1991  2     
  2420. ;   1992  2        IF .DEV_CLASS EQL DC$_MAILBOX
  2421. ;   1993  2        THEN
  2422. ;   1994  3        BEGIN
  2423. ;   1995  3        SIZE = 0;
  2424. ;   1996  3        FILE_NAME = 0;
  2425. ;   1997  3        END
  2426. ;   1998  2        ELSE
  2427. ;   1999  2     
  2428. ;   2000  2        SELECTONE .FIL_NORMAL_FORM OF
  2429. ;   2001  2            SET
  2430. ;   2002  2     
  2431. ;   2003  2            [FNM_FULL] :
  2432. ;   2004  3            BEGIN
  2433. ;   2005  3     
  2434. ;   2006  3            IF .FILE_NAM [NAM$B_RSL] GTR 0
  2435. ;   2007  3            THEN
  2436. ;   2008  4                BEGIN
  2437. ;   2009  4                CH$COPY (.FILE_NAM [NAM$B_RSL], CH$PTR (.FILE_NAM [NAM$L_RSA]),
  2438. ;   2010  4                CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
  2439. ;   2011  4                SIZE = .FILE_NAM [NAM$B_RSL];
  2440. ;   2012  4                END
  2441. ;   2013  3            ELSE
  2442. ;   2014  4                BEGIN
  2443. ;   2015  4                CH$COPY (.FILE_NAM [NAM$B_ESL], CH$PTR (.FILE_NAM [NAM$L_ESA]),
  2444. ;   2016  4                CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
  2445. ;   2017  4                SIZE = .FILE_NAM [NAM$B_ESL];
  2446. ;   2018  4                END
  2447. ;   2019  4     
  2448. ;   2020  2            END;
  2449. ;   2021  2     
  2450. ;   2022  2            [FNM_NORMAL, FNM_UNTRAN] :
  2451. ;   2023  3            BEGIN
  2452. ;   2024  3            CH$COPY (.FILE_NAM [NAM$B_NAME], CH$PTR (.FILE_NAM [NAM$L_NAME]),
  2453. ;   2025  3                .FILE_NAM [NAM$B_TYPE], CH$PTR (.FILE_NAM [NAM$L_TYPE]), CHR_NUL,
  2454. ;   2026  3                MAX_FILE_NAME, CH$PTR (FILE_NAME));
  2455. ;   2027  3            SIZE = .FILE_NAM [NAM$B_NAME] + .FILE_NAM [NAM$B_TYPE];
  2456. ;   2028  2            END;
  2457. ;   2029  2            TES;
  2458. ;   2030  2     
  2459. ;   2031  2        IF .SIZE GTR MAX_FILE_NAME THEN FILE_SIZE = MAX_FILE_NAME ELSE FILE_SIZE = .SIZE;
  2460. ;   2032  2     
  2461. ;   2033  2        RETURN KER_NORMAL;
  2462. ;   2034  1        END;                    ! End of FILE_OPEN
  2463.  
  2464.  
  2465.  
  2466.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  2467.  
  2468. P.AAA:    .ASCII  \.;0\                 ;                                            30  3B  2E  00000
  2469.     .BLKB   1                                       ;                      00003
  2470. P.AAB:    .ASCII  \ as \<0><0><0><0>         ;                                00  00  00  00  20  73  61  20  00004
  2471. P.AAC:    .ASCII  \ as \<0><0><0><0>         ;                                00  00  00  00  20  73  61  20  0000C
  2472.  
  2473. U.41=            U.10
  2474. U.42=            U.11
  2475. U.43=            U.10
  2476. U.44=            U.10
  2477. U.45=            U.10
  2478. U.46=            U.10
  2479. U.47=            U.11
  2480. U.48=            U.12
  2481.     .EXTRN  KER_INTERNALERR, TT_TEXT, SYS$GETDVIW, SYS$PARSE, SYS$SEARCH, SYS$CREATE
  2482.     .WEAK   USER_FILE_CHECK
  2483.  
  2484.     .PSECT  $CODE$,NOWRT,2
  2485.  
  2486.     .ENTRY  FILE_OPEN, ^M<R2,R3,R4,R5,R6,R7,-;FILE_OPEN, Save R2,R3,R4,R5,R6,R7,-  1631                    0FFC   00000
  2487.         R8,R9,R10,R11>             ;R8,R9,R10,R11
  2488.     SUBL2   #28, SP                 ;#28, SP                                     5E         1C  C2   00002
  2489.     MOVL    #1, G^U.7             ;#1, U.7                   1713 00000000'  00         01  D0   00005
  2490.     MOVL    #1, G^U.8             ;#1, U.8                   1714 00000000'  00         01  D0   0000C
  2491.     MOVL    4(AP), R2             ;FUNCTION, R2                   1718            52    04   AC  D0   00013
  2492.     MOVL    R2, G^U.14             ;R2, U.14                          00000000'  00         52  D0   00017
  2493.     MOVW    G^FILE_SIZE, G^FILE_DESC     ;FILE_SIZE, FILE_DESC               1719 00000000'  00 00000000G  00  B0   0001E
  2494.     MOVAB   G^USER_FILE_CHECK, R0         ;USER_FILE_CHECK, R0               1723            50 00000000G  00  9E   00029
  2495.     CLRL    R8                 ;R8                                               58  D4   00030
  2496.     TSTL    R0                 ;R0                                               50  D5   00032
  2497.     BEQL    2$                 ;2$                                               26  13   00034
  2498.     INCL    R8                 ;R8                                               58  D6   00036
  2499.     CLRL    (SP)                 ;(SP)                       1726                  6E  D4   00038
  2500.     TSTL    G^U.14                 ;U.14                                        00000000'  00  D5   0003A
  2501.     BNEQ    1$                 ;1$                                               02  12   00040
  2502.     INCL    (SP)                 ;(SP)                                               6E  D6   00042
  2503. 1$:    PUSHL   SP                 ;SP                                               5E  DD   00044
  2504.     PUSHAB  G^FILE_DESC             ;FILE_DESC                                    00000000'  00  9F   00046
  2505.     CALLS   #2, G^USER_FILE_CHECK         ;#2, USER_FILE_CHECK                      00000000G  00         02  FB   0004C
  2506.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   00053
  2507.     BLBS    R7, 2$                 ;STATUS, 2$                   1727            03         57  E8   00056
  2508.     BRW     22$                 ;22$                                             02F7  31   00059
  2509. 2$:    TSTL    R2                 ;R2                       1741                  52  D5   0005C
  2510.     BEQL    3$                 ;3$                                               03  13   0005E
  2511.     BRW     11$                 ;11$                                             016B  31   00060
  2512. 3$:    MOVL    #262148, 12(SP)             ;#262148, ITMLST               1746       0C   AE 00040004   8F  D0   00063
  2513.     MOVAB   G^U.8, 16(SP)             ;U.8, ITMLST+4                   1747       10   AE 00000000'  00  9E   0006B
  2514.     MOVAB   20(SP), 20(SP)             ;ITMLST+8, ITMLST+8               1748       14   AE    14   AE  9E   00073
  2515.     CLRL    24(SP)                 ;ITMLST+12                   1749             18   AE  D4   00078
  2516.     CLRQ    -(SP)                 ;-(SP)                       1750                  7E  7C   0007B
  2517.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   0007D
  2518.     PUSHAB  28(SP)                 ;ITMLST                                      1C   AE  9F   0007F
  2519.     PUSHAB  G^FILE_DESC             ;FILE_DESC                                    00000000'  00  9F   00082
  2520.     CLRQ    -(SP)                 ;-(SP)                                               7E  7C   00088
  2521.     CALLS   #8, G^SYS$GETDVIW         ;#8, SYS$GETDVIW                      00000000G  00         08  FB   0008A
  2522.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   00091
  2523.     BLBC    R7, 4$                 ;STATUS, 4$                   1754            0F         57  E9   00094
  2524.     CMPL    G^U.8, #1             ;U.8, #1                                     01 00000000'  00  D1   00097
  2525.     BEQL    4$                 ;4$                                               06  13   0009E
  2526.     CLRL    G^U.7                 ;U.7                                        00000000'  00  D4   000A0
  2527. 4$:    MOVC5   #0, (SP), #0, #80, G^U.41     ;#0, (SP), #0, #80, U.41           1760            6E         00  2C   000A6
  2528.                          ;                            0050   8F         00       000A9
  2529.                          ;                                  00000000'  00       000AD
  2530.     MOVW    #20483, G^U.41             ;#20483, U.41                          00000000'  00     5003   8F  B0   000B2
  2531.     MOVL    #16777216, G^U.41+4         ;#16777216, U.41+4                      00000000'  00 01000000   8F  D0   000BB
  2532.     MOVB    #2, G^U.41+22             ;#2, U.41+22                          00000000'  00         02  90   000C6
  2533.     MOVB    #2, G^U.41+31             ;#2, U.41+31                          00000000'  00         02  90   000CD
  2534.     MOVAB   G^U.11, G^U.41+40         ;U.11, U.41+40                          00000000'  00 00000000'  00  9E   000D4
  2535.     MOVAB   G^FILE_NAME, G^U.41+44         ;FILE_NAME, U.41+44                      00000000'  00 00000000G  00  9E   000DF
  2536.     MOVAB   G^P.AAA, G^U.41+48         ;P.AAA, U.41+48                      00000000'  00 00000000'  00  9E   000EA
  2537.     MOVB    G^FILE_SIZE, G^U.41+52         ;FILE_SIZE, U.41+52                      00000000'  00 00000000G  00  90   000F5
  2538.     MOVB    #3, G^U.41+53             ;#3, U.41+53                          00000000'  00         03  90   00100
  2539.     MOVC5   #0, (SP), #0, #96, G^U.42     ;#0, (SP), #0, #96, U.42           1765            6E         00  2C   00107
  2540.                          ;                            0060   8F         00       0010A
  2541.                          ;                                  00000000'  00       0010E
  2542.     MOVW    #24578, G^U.42             ;#24578, U.42                          00000000'  00     6002   8F  B0   00113
  2543.     MNEGB   #1, G^U.42+2             ;#1, U.42+2                          00000000'  00         01  8E   0011C
  2544.     MOVAB   G^U.22, G^U.42+4         ;U.22, U.42+4                          00000000'  00 00000000'  00  9E   00123
  2545.     MNEGB   #1, G^U.42+10             ;#1, U.42+10                          00000000'  00         01  8E   0012E
  2546.     MOVAB   G^U.21, G^U.42+12         ;U.21, U.42+12                          00000000'  00 00000000'  00  9E   00135
  2547.     PUSHAB  G^U.10                 ;U.10                       1769           00000000'  00  9F   00140
  2548.     CALLS   #1, G^SYS$PARSE             ;#1, SYS$PARSE                          00000000G  00         01  FB   00146
  2549.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   0014D
  2550.     BLBC    R7, 5$                 ;STATUS, 5$                   1771            17         57  E9   00150
  2551.     BLBC    G^U.7, 6$             ;U.7, 6$                   1778            16 00000000'  00  E9   00153
  2552.     PUSHAB  G^U.10                 ;U.10                       1781           00000000'  00  9F   0015A
  2553.     CALLS   #1, G^SYS$SEARCH         ;#1, SYS$SEARCH                      00000000G  00         01  FB   00160
  2554.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   00167
  2555. 5$:    BLBS    R7, 6$                 ;STATUS, 6$                   1783            03         57  E8   0016A
  2556.     BRW     33$                 ;33$                                             0312  31   0016D
  2557. 6$:    CALLS   #0, W^U.35             ;#0, U.35                   1796     FD49   CF         00  FB   00170
  2558.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   00175
  2559.     BLBS    R7, 7$                 ;STATUS, 7$                   1798            03         57  E8   00178
  2560.     BRW     23$                 ;23$                                             01DE  31   0017B
  2561. 7$:    BLBS    G^CONNECT_FLAG, 10$         ;CONNECT_FLAG, 10$               1804            46 00000000G  00  E8   0017E
  2562.     BLBC    G^TY_FIL, 10$             ;TY_FIL, 10$                                     3F 00000000G  00  E9   00185
  2563.     TSTB    G^U.11+2             ;U.11+2                   1808           00000000'  00  95   0018C
  2564.     BEQL    8$                 ;8$                                               10  13   00192
  2565.     MOVL    G^U.11+4, R0             ;U.11+4, R0                   1812            50 00000000'  00  D0   00194
  2566.     MOVZBL  G^U.11+3, R1             ;U.11+3, R1                   1813            51 00000000'  00  9A   0019B
  2567.     BRB     9$                 ;9$                                               0E  11   001A2
  2568. 8$:    MOVL    G^U.11+12, R0             ;U.11+12, R0                   1819            50 00000000'  00  D0   001A4
  2569.     MOVZBL  G^U.11+11, R1             ;U.11+11, R1                   1820            51 00000000'  00  9A   001AB
  2570. 9$:    CLRB    (R1)[R0]             ;(R1)[R0]                                         6140  94   001B2
  2571.     PUSHL   R0                 ;R0                       1821                  50  DD   001B5
  2572.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   001B7
  2573.     PUSHAB  G^P.AAB                 ;P.AAB                       1824           00000000'  00  9F   001BE
  2574.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   001C4
  2575. 10$:    BRW     38$                 ;38$                       1738                0335  31   001CB
  2576. 11$:    CMPL    R2, #1                 ;R2, #1                   1829            01         52  D1   001CE
  2577.     BEQL    12$                 ;12$                                               03  13   001D1
  2578.     BRW     37$                 ;37$                                             0325  31   001D3
  2579. 12$:    MOVL    G^FILE_TYPE, R6             ;FILE_TYPE, R6                   1832            56 00000000'  00  D0   001D6
  2580.     CMPL    R6, #1                 ;R6, #1                   1835            01         56  D1   001DD
  2581.     BNEQ    13$                 ;13$                                               32  12   001E0
  2582.     MOVC5   #0, (SP), #0, #80, G^U.43     ;#0, (SP), #0, #80, U.43           1839            6E         00  2C   001E2
  2583.                          ;                            0050   8F         00       001E5
  2584.                          ;                                  00000000'  00       001E9
  2585.     MOVW    #20483, G^U.43             ;#20483, U.43                          00000000'  00     5003   8F  B0   001EE
  2586.     MOVL    #270532674, G^U.43+4         ;#270532674, U.43+4                      00000000'  00 10200042   8F  D0   001F7
  2587.     MOVB    #1, G^U.43+22             ;#1, U.43+22                          00000000'  00         01  90   00202
  2588.     MOVW    #512, G^U.43+29             ;#512, U.43+29                          00000000'  00     0200   8F  B0   00209
  2589.     BRB     14$                 ;14$                                               32  11   00212
  2590. 13$:    CMPL    R6, #2                 ;R6, #2                   1842            02         56  D1   00214
  2591.     BNEQ    15$                 ;15$                                               30  12   00217
  2592.     MOVC5   #0, (SP), #0, #80, G^U.44     ;#0, (SP), #0, #80, U.44           1846            6E         00  2C   00219
  2593.                          ;                            0050   8F         00       0021C
  2594.                          ;                                  00000000'  00       00220
  2595.     MOVW    #20483, G^U.44             ;#20483, U.44                          00000000'  00     5003   8F  B0   00225
  2596.     MOVL    #270532674, G^U.44+4         ;#270532674, U.44+4                      00000000'  00 10200042   8F  D0   0022E
  2597.     MOVB    #1, G^U.44+22             ;#1, U.44+22                          00000000'  00         01  90   00239
  2598.     CLRB    G^U.44+29             ;U.44+29                                    00000000'  00  94   00240
  2599. 14$:    BRW     19$                 ;19$                                             00A4  31   00246
  2600. 15$:    CMPL    R6, #4                 ;R6, #4                   1849            04         56  D1   00249
  2601.     BNEQ    18$                 ;18$                                               73  12   0024C
  2602.     MOVC5   #0, (SP), #0, #80, G^U.45     ;#0, (SP), #0, #80, U.45           1855            6E         00  2C   0024E
  2603.                          ;                            0050   8F         00       00251
  2604.                          ;                                  00000000'  00       00255
  2605.     MOVW    #20483, G^U.45             ;#20483, U.45                          00000000'  00     5003   8F  B0   0025A
  2606.     MOVL    #270532674, G^U.45+4         ;#270532674, U.45+4                      00000000'  00 10200042   8F  D0   00263
  2607.     MOVB    #1, G^U.45+22             ;#1, U.45+22                          00000000'  00         01  90   0026E
  2608.     CLRB    G^U.45+29             ;U.45+29                                    00000000'  00  94   00275
  2609.     MOVB    #1, G^U.45+31             ;#1, U.45+31                          00000000'  00         01  90   0027B
  2610.     MOVAB   G^U.11, G^U.45+40         ;U.11, U.45+40                          00000000'  00 00000000'  00  9E   00282
  2611.     MOVAB   G^FILE_NAME, G^U.45+44         ;FILE_NAME, U.45+44                      00000000'  00 00000000G  00  9E   0028D
  2612.     MOVB    G^FILE_SIZE, G^U.45+52         ;FILE_SIZE, U.45+52                      00000000'  00 00000000G  00  90   00298
  2613.     BLBC    G^FILE_BLOCKSIZE_SET, 16$     ;FILE_BLOCKSIZE_SET, 16$                             09 00000000'  00  E9   002A3
  2614.     MOVL    G^FILE_BLOCKSIZE, R0         ;FILE_BLOCKSIZE, R0                                 50 00000000'  00  D0   002AA
  2615.     BRB     17$                 ;17$                                               05  11   002B1
  2616. 16$:    MOVZWL  #512, R0             ;#512, R0                                     50     0200   8F  3C   002B3
  2617. 17$:    MOVW    R0, G^U.45+54             ;R0, U.45+54                          00000000'  00         50  B0   002B8
  2618.     BRB     20$                 ;20$                                               54  11   002BF
  2619. 18$:    CMPL    R6, #3                 ;R6, #3                   1858            03         56  D1   002C1
  2620.     BNEQ    20$                 ;20$                                               4F  12   002C4
  2621.     MOVC5   #0, (SP), #0, #80, G^U.46     ;#0, (SP), #0, #80, U.46           1861            6E         00  2C   002C6
  2622.                          ;                            0050   8F         00       002C9
  2623.                          ;                                  00000000'  00       002CD
  2624.     MOVW    #20483, G^U.46             ;#20483, U.46                          00000000'  00     5003   8F  B0   002D2
  2625.     MOVL    #270532674, G^U.46+4         ;#270532674, U.46+4                      00000000'  00 10200042   8F  D0   002DB
  2626.     MOVB    #33, G^U.46+22             ;#33, U.46+22                          00000000'  00         21  90   002E6
  2627. 19$:    MOVB    #2, G^U.46+31             ;#2, U.46+31                          00000000'  00         02  90   002ED
  2628.     MOVAB   G^U.11, G^U.46+40         ;U.11, U.46+40                          00000000'  00 00000000'  00  9E   002F4
  2629.     MOVAB   G^FILE_NAME, G^U.46+44         ;FILE_NAME, U.46+44                      00000000'  00 00000000G  00  9E   002FF
  2630.     MOVB    G^FILE_SIZE, G^U.46+52         ;FILE_SIZE, U.46+52                      00000000'  00 00000000G  00  90   0030A
  2631. 20$:    MOVL    G^ALT_FILE_SIZE, R0         ;ALT_FILE_SIZE, R0               1870            50 00000000G  00  D0   00315
  2632.     BLEQ    25$                 ;25$                                               58  15   0031C
  2633.     MOVL    G^FILE_DESC, 4(SP)         ;FILE_DESC, ALT_FILE_DESC           1876       04   AE 00000000'  00  D0   0031E
  2634.     MOVW    R0, 4(SP)             ;R0, ALT_FILE_DESC               1877       04   AE         50  B0   00326
  2635.     MOVAB   G^ALT_FILE_NAME, 8(SP)         ;ALT_FILE_NAME, ALT_FILE_DESC+4       1878       08   AE 00000000G  00  9E   0032A
  2636.     BLBC    R8, 24$                 ;R8, 24$                   1879            2B         58  E9   00332
  2637.     CLRL    (SP)                 ;(SP)                       1882                  6E  D4   00335
  2638.     TSTL    G^U.14                 ;U.14                                        00000000'  00  D5   00337
  2639.     BNEQ    21$                 ;21$                                               02  12   0033D
  2640.     INCL    (SP)                 ;(SP)                                               6E  D6   0033F
  2641. 21$:    PUSHL   SP                 ;SP                                               5E  DD   00341
  2642.     PUSHAB  8(SP)                 ;ALT_FILE_DESC                                      08   AE  9F   00343
  2643.     CALLS   #2, G^USER_FILE_CHECK         ;#2, USER_FILE_CHECK                      00000000G  00         02  FB   00346
  2644.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   0034D
  2645.     BLBS    R7, 24$                 ;STATUS, 24$                   1883            0D         57  E8   00350
  2646. 22$:    PUSHL   R7                 ;STATUS                   1886                  57  DD   00353
  2647.     CALLS   #1, G^LIB$SIGNAL         ;#1, LIB$SIGNAL                      00000000G  00         01  FB   00355
  2648. 23$:    MOVL    R7, R0                 ;STATUS, R0                   1887            50         57  D0   0035C
  2649.     RET                      ;                                               04   0035F
  2650. 24$:    MOVAB   G^ALT_FILE_NAME, G^U.10+44     ;ALT_FILE_NAME, U.10+44           1890 00000000'  00 00000000G  00  9E   00360
  2651.     MOVB    G^ALT_FILE_SIZE, G^U.10+52     ;ALT_FILE_SIZE, U.10+52           1891 00000000'  00 00000000G  00  90   0036B
  2652. 25$:    MOVC5   #0, (SP), #0, #96, G^U.47     ;#0, (SP), #0, #96, U.47           1895            6E         00  2C   00376
  2653.                          ;                            0060   8F         00       00379
  2654.                          ;                                  00000000'  00       0037D
  2655.     MOVW    #24578, G^U.47             ;#24578, U.47                          00000000'  00     6002   8F  B0   00382
  2656.     MNEGB   #1, G^U.47+2             ;#1, U.47+2                          00000000'  00         01  8E   0038B
  2657.     MOVAB   G^U.22, G^U.47+4         ;U.22, U.47+4                          00000000'  00 00000000'  00  9E   00392
  2658.     MNEGB   #1, G^U.47+10             ;#1, U.47+10                          00000000'  00         01  8E   0039D
  2659.     MOVAB   G^U.21, G^U.47+12         ;U.21, U.47+12                          00000000'  00 00000000'  00  9E   003A4
  2660.     MOVL    G^FILE_TYPE, R0             ;FILE_TYPE, R0                   1901            50 00000000'  00  D0   003AF
  2661.     CMPL    R0, #1                 ;R0, #1                   1904            01         50  D1   003B6
  2662.     BNEQ    26$                 ;26$                                               0B  12   003B9
  2663.     MOVZWL  #4096, G^U.17             ;#4096, U.17                   1905 00000000'  00     1000   8F  3C   003BB
  2664.     BRB     32$                 ;32$                                               44  11   003C4
  2665. 26$:    CMPL    R0, #2                 ;R0, #2                   1907            02         50  D1   003C6
  2666.     BNEQ    27$                 ;27$                                               0E  12   003C9
  2667.     BLBS    G^FILE_BLOCKSIZE_SET, 29$     ;FILE_BLOCKSIZE_SET, 29$           1908            23 00000000'  00  E8   003CB
  2668.     MOVZWL  #510, R0             ;#510, R0                   1909            50     01FE   8F  3C   003D2
  2669.     BRB     31$                 ;31$                       1908                  2A  11   003D7
  2670. 27$:    CMPL    R0, #3                 ;R0, #3                   1911            03         50  D1   003D9
  2671.     BNEQ    28$                 ;28$                                               0B  12   003DC
  2672.     MOVZWL  #512, G^U.17             ;#512, U.17                   1912 00000000'  00     0200   8F  3C   003DE
  2673.     BRB     32$                 ;32$                                               21  11   003E7
  2674. 28$:    CMPL    R0, #4                 ;R0, #4                   1914            04         50  D1   003E9
  2675.     BNEQ    32$                 ;32$                                               1C  12   003EC
  2676.     BLBC    G^FILE_BLOCKSIZE_SET, 30$     ;FILE_BLOCKSIZE_SET, 30$           1915            09 00000000'  00  E9   003EE
  2677. 29$:    MOVL    G^FILE_BLOCKSIZE, R0         ;FILE_BLOCKSIZE, R0                                 50 00000000'  00  D0   003F5
  2678.     BRB     31$                 ;31$                                               05  11   003FC
  2679. 30$:    MOVZWL  #512, R0             ;#512, R0                   1916            50     0200   8F  3C   003FE
  2680. 31$:    MOVL    R0, G^U.17             ;R0, U.17                   1915 00000000'  00         50  D0   00403
  2681. 32$:    PUSHAB  G^U.18                 ;U.18                       1920           00000000'  00  9F   0040A
  2682.     PUSHAB  G^U.17                 ;U.17                                        00000000'  00  9F   00410
  2683.     CALLS   #2, G^LIB$GET_VM         ;#2, LIB$GET_VM                      00000000G  00         02  FB   00416
  2684.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   0041D
  2685.     PUSHAB  G^U.10                 ;U.10                       1924           00000000'  00  9F   00420
  2686.     CALLS   #1, G^SYS$CREATE         ;#1, SYS$CREATE                      00000000G  00         01  FB   00426
  2687.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   0042D
  2688.     BLBC    R7, 33$                 ;STATUS, 33$                   1926            4F         57  E9   00430
  2689.     MOVC5   #0, (SP), #0, #68, G^U.48     ;#0, (SP), #0, #68, U.48           1934            6E         00  2C   00433
  2690.                          ;                            0044   8F         00       00436
  2691.                          ;                                  00000000'  00       0043A
  2692.     MOVW    #17409, G^U.48             ;#17409, U.48                          00000000'  00     4401   8F  B0   0043F
  2693.     MOVL    #1179648, G^U.48+4         ;#1179648, U.48+4                      00000000'  00 00120000   8F  D0   00448
  2694.     CLRB    G^U.48+30             ;U.48+30                                    00000000'  00  94   00453
  2695.     MOVL    G^U.18, G^U.48+40         ;U.18, U.48+40                          00000000'  00 00000000'  00  D0   00459
  2696.     MOVAB   G^U.10, G^U.48+60         ;U.10, U.48+60                          00000000'  00 00000000'  00  9E   00464
  2697.     PUSHAB  G^U.12                 ;U.12                       1935           00000000'  00  9F   0046F
  2698.     CALLS   #1, G^SYS$CONNECT         ;#1, SYS$CONNECT                      00000000G  00         01  FB   00475
  2699.     MOVL    R0, R7                 ;R0, STATUS                                     57         50  D0   0047C
  2700.     BLBS    R7, 34$                 ;STATUS, 34$                   1937            11         57  E8   0047F
  2701. 33$:    PUSHL   R7                 ;STATUS                   1940                  57  DD   00482
  2702.     CALLS   #1, G^U.6             ;#1, U.6                          00000000V  00         01  FB   00484
  2703.     MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               1941            50 00000000G  8F  D0   0048B
  2704.     RET                      ;                                               04   00492
  2705. 34$:    MOVL    #2, G^U.10+24             ;#2, U.10+24                   1948 00000000'  00         02  D0   00493
  2706.     CLRL    G^U.16                 ;U.16                       1949           00000000'  00  D4   0049A
  2707.     MOVL    G^U.18, G^U.15             ;U.18, U.15                   1950 00000000'  00 00000000'  00  D0   004A0
  2708.     BLBS    G^CONNECT_FLAG, 38$         ;CONNECT_FLAG, 38$               1955            51 00000000G  00  E8   004AB
  2709.     BLBC    G^TY_FIL, 38$             ;TY_FIL, 38$                                     4A 00000000G  00  E9   004B2
  2710.     PUSHAB  G^P.AAC                 ;P.AAC                       1958           00000000'  00  9F   004B9
  2711.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   004BF
  2712.     MOVZBL  G^U.11+3, R1             ;U.11+3, R1                   1960            51 00000000'  00  9A   004C6
  2713.     BLEQ    35$                 ;35$                                               09  15   004CD
  2714.     MOVL    G^U.11+4, R0             ;U.11+4, R0                   1964            50 00000000'  00  D0   004CF
  2715.     BRB     36$                 ;36$                       1965                  0E  11   004D6
  2716. 35$:    MOVL    G^U.11+12, R0             ;U.11+12, R0                   1971            50 00000000'  00  D0   004D8
  2717.     MOVZBL  G^U.11+11, R1             ;U.11+11, R1                   1972            51 00000000'  00  9A   004DF
  2718. 36$:    CLRB    (R1)[R0]             ;(R1)[R0]                                         6140  94   004E6
  2719.     PUSHL   R0                 ;R0                       1973                  50  DD   004E9
  2720.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   004EB
  2721.     CALLS   #0, G^TT_OUTPUT             ;#0, TT_OUTPUT                   1976 00000000G  00         00  FB   004F2
  2722.     BRB     38$                 ;38$                       1738                  08  11   004F9
  2723. 37$:    MOVL    #KER_INTERNALERR, R0         ;#KER_INTERNALERR, R0               1982            50 00000000G  8F  D0   004FB
  2724.     RET                      ;                                               04   00502
  2725. 38$:    CMPL    G^U.8, #160             ;U.8, #160                   1992 000000A0   8F 00000000'  00  D1   00503
  2726.     BNEQ    39$                 ;39$                                               0A  12   0050E
  2727.     CLRW    R6                 ;SIZE                       1995                  56  B4   00510
  2728.     CLRL    G^FILE_NAME             ;FILE_NAME                   1996           00000000G  00  D4   00512
  2729.     BRB     42$                 ;42$                                               3B  11   00518
  2730. 39$:    MOVL    G^FIL_NORMAL_FORM, R0         ;FIL_NORMAL_FORM, R0               2000            50 00000000G  00  D0   0051A
  2731.     CMPL    R0, #2                 ;R0, #2                   2003            02         50  D1   00521
  2732.     BNEQ    43$                 ;43$                                               31  12   00524
  2733.     MOVZBL  G^U.11+3, R7             ;U.11+3, R7                   2006            57 00000000'  00  9A   00526
  2734.     BLEQ    40$                 ;40$                                               09  15   0052D
  2735.     MOVL    G^U.11+4, R0             ;U.11+4, R0                   2009            50 00000000'  00  D0   0052F
  2736.     BRB     41$                 ;41$                       2010                  0E  11   00536
  2737. 40$:    MOVZBL  G^U.11+11, R7             ;U.11+11, R7                   2015            57 00000000'  00  9A   00538
  2738.     MOVL    G^U.11+12, R0             ;U.11+12, R0                                     50 00000000'  00  D0   0053F
  2739. 41$:    MOVC5   R7, (R0), #0, #132, G^FILE_NAME  ;R7, (R0), #0, #132, FILE_NAME        2016            60         57  2C   00546
  2740.                          ;                            0084   8F         00       00549
  2741.                          ;                                  00000000G  00       0054D
  2742.     MOVW    R7, R6                 ;R7, SIZE                   2017            56         57  B0   00552
  2743. 42$:    BRB     46$                 ;46$                       2000                  49  11   00555
  2744. 43$:    CMPL    R0, #1                 ;R0, #1                   2022            01         50  D1   00557
  2745.     BEQL    44$                 ;44$                                               05  13   0055A
  2746.     CMPL    R0, #4                 ;R0, #4                                     04         50  D1   0055C
  2747.     BNEQ    46$                 ;46$                                               3F  12   0055F
  2748. 44$:    MOVZBL  G^U.11+59, R9             ;U.11+59, R9                   2024            59 00000000'  00  9A   00561
  2749.     MOVL    G^U.11+76, R0             ;U.11+76, R0                                     50 00000000'  00  D0   00568
  2750.     MOVZBL  G^U.11+60, R8             ;U.11+60, R8                   2025            58 00000000'  00  9A   0056F
  2751.     MOVL    G^U.11+80, R11             ;U.11+80, R11                                     5B 00000000'  00  D0   00576
  2752.     MOVZBL  #132, R10             ;#132, R10                   2026            5A    84   8F  9A   0057D
  2753.     MOVAB   G^FILE_NAME, R7             ;FILE_NAME, R7                                     57 00000000G  00  9E   00581
  2754.     MOVC5   R9, (R0), #0, R10, (R7)         ;R9, (R0), #0, R10, (R7)                             60         59  2C   00588
  2755.                          ;                                   5A         00       0058B
  2756.                          ;                                         67       0058D
  2757.     BGEQ    45$                 ;45$                                               0C  18   0058E
  2758.     ADDL2   R9, R7                 ;R9, R7                                     57         59  C0   00590
  2759.     SUBL2   R9, R10                 ;R9, R10                                     5A         59  C2   00593
  2760.     MOVC5   R8, (R11), #0, R10, (R7)     ;R8, (R11), #0, R10, (R7)                             6B         58  2C   00596
  2761.                          ;                                   5A         00       00599
  2762.                          ;                                         67       0059B
  2763. 45$:    ADDW3   R8, R9, R6             ;R8, R9, SIZE                   2027            59         58  A1   0059C
  2764.                          ;                                         56       0059F
  2765. 46$:    CMPW    R6, #132             ;SIZE, #132                   2031     0084   8F         56  B1   005A0
  2766.     BLEQU   47$                 ;47$                                               0A  1B   005A5
  2767.     MOVZBL  #132, G^FILE_SIZE         ;#132, FILE_SIZE                      00000000G  00    84   8F  9A   005A7
  2768.     BRB     48$                 ;48$                                               07  11   005AF
  2769. 47$:    MOVZWL  R6, G^FILE_SIZE             ;SIZE, FILE_SIZE                      00000000G  00         56  3C   005B1
  2770. 48$:    MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               2033            50 00000000G  8F  D0   005B8
  2771.     RET                      ;                                               04   005BF
  2772.  
  2773. ; Routine Size:  1472 bytes,    Routine Base:  $CODE$ + 0617
  2774.  
  2775.  
  2776. ;   2035  1     
  2777. ;   2036  1     %SBTTL 'FILE_CLOSE'
  2778. ;   2037  1     
  2779. ;   2038  1    GLOBAL ROUTINE FILE_CLOSE (ABORT_FLAG) =
  2780. ;   2039  1     
  2781. ;   2040  1    !++
  2782. ;   2041  1    ! FUNCTIONAL DESCRIPTION:
  2783. ;   2042  1    !
  2784. ;   2043  1    !    This routine will close a file that was opened by FILE_OPEN.
  2785. ;   2044  1    !    It assumes any data associated with the file is stored in this
  2786. ;   2045  1    !    module, since this routine is called by KERMSG.
  2787. ;   2046  1    !
  2788. ;   2047  1    ! CALLING SEQUENCE:
  2789. ;   2048  1    !
  2790. ;   2049  1    !    FILE_CLOSE();
  2791. ;   2050  1    !
  2792. ;   2051  1    ! INPUT PARAMETERS:
  2793. ;   2052  1    !
  2794. ;   2053  1    !    ABORT_FLAG - True if file should not be saved.
  2795. ;   2054  1    !
  2796. ;   2055  1    ! IMPLICIT INPUTS:
  2797. ;   2056  1    !
  2798. ;   2057  1    !    None.
  2799. ;   2058  1    !
  2800. ;   2059  1    ! OUTPUT PARAMETERS:
  2801. ;   2060  1    !
  2802. ;   2061  1    !    None.
  2803. ;   2062  1    !
  2804. ;   2063  1    ! IMPLICIT OUTPUTS:
  2805. ;   2064  1    !
  2806. ;   2065  1    !    None.
  2807. ;   2066  1    !
  2808. ;   2067  1    ! COMPLETION CODES:
  2809. ;   2068  1    !
  2810. ;   2069  1    !    None.
  2811. ;   2070  1    !
  2812. ;   2071  1    ! SIDE EFFECTS:
  2813. ;   2072  1    !
  2814. ;   2073  1    !    None.
  2815. ;   2074  1    !
  2816. ;   2075  1    !--
  2817. ;   2076  1     
  2818. ;   2077  2        BEGIN
  2819. ;   2078  2    !
  2820. ;   2079  2    ! Completion codes returned:
  2821. ;   2080  2    !
  2822. ;   2081  2        EXTERNAL LITERAL
  2823. ;   2082  2        KER_NORMAL,                ! Normal return
  2824. ;   2083  2        KER_RMS32;                ! RMS-32 error
  2825. ;   2084  2     
  2826. ;   2085  2        LOCAL
  2827. ;   2086  2        STATUS;                    ! Random status values
  2828. ;   2087  2     
  2829. ;   2088  2    !
  2830. ;   2089  2    ! If there might be something left to write
  2831. ;   2090  2     
  2832. ;   2091  2    !
  2833. ;   2092  2     
  2834. ;   2093  3        IF .FILE_MODE EQL FNC_WRITE AND (.FILE_REC_COUNT GTR 0 OR .FILE_FAB [FAB$L_CTX] NEQ
  2835. ;   2094  3        F_STATE_DATA)
  2836. ;   2095  2        THEN
  2837. ;   2096  3        BEGIN
  2838. ;   2097  3     
  2839. ;   2098  3        SELECTONE .FILE_TYPE OF
  2840. ;   2099  3            SET
  2841. ;   2100  3     
  2842. ;   2101  3            [FILE_FIX] :
  2843. ;   2102  4            BEGIN
  2844. ;   2103  4     
  2845. ;   2104  4            INCR I FROM .FILE_REC_COUNT TO .REC_SIZE - 1 DO
  2846. ;   2105  4                CH$WCHAR_A (CHR_NUL, FILE_REC_POINTER);
  2847. ;   2106  4            FILE_REC_COUNT = .REC_SIZE;            ! Store the byte count
  2848. ;   2107  4            STATUS = DUMP_BUFFER ();
  2849. ;   2108  3            END;
  2850. ;   2109  3     
  2851. ;   2110  3            [FILE_ASC, FILE_BIN] :
  2852. ;   2111  3            STATUS = DUMP_BUFFER ();
  2853. ;   2112  3     
  2854. ;   2113  3            [FILE_BLK] :
  2855. ;   2114  4            BEGIN
  2856. ;   2115  4            FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
  2857. ;   2116  4            STATUS = $WRITE (RAB = FILE_RAB);
  2858. ;   2117  4     
  2859. ;   2118  4            IF NOT .STATUS
  2860. ;   2119  4            THEN
  2861. ;   2120  5                BEGIN
  2862. ;   2121  5                FILE_ERROR (.STATUS);
  2863. ;   2122  5                STATUS = KER_RMS32;
  2864. ;   2123  5                END
  2865. ;   2124  4            ELSE
  2866. ;   2125  4                STATUS = KER_NORMAL;
  2867. ;   2126  4     
  2868. ;   2127  3            END;
  2869. ;   2128  3            TES;
  2870. ;   2129  3     
  2871. ;   2130  3        IF NOT .STATUS THEN RETURN .STATUS;
  2872. ;   2131  3     
  2873. ;   2132  2        END;
  2874. ;   2133  2     
  2875. ;   2134  2    !
  2876. ;   2135  2    ! If reading from a mailbox, read until EOF to allow the process on the other
  2877. ;   2136  2    ! end to terminal gracefully.
  2878. ;   2137  2    !
  2879. ;   2138  2     
  2880. ;   2139  2        IF .FILE_MODE EQL FNC_READ AND .DEV_CLASS EQL DC$_MAILBOX AND NOT .EOF_FLAG
  2881. ;   2140  2        THEN
  2882. ;   2141  2     
  2883. ;   2142  2        DO
  2884. ;   2143  2            STATUS = GET_BUFFER ()
  2885. ;   2144  2        UNTIL ( NOT .STATUS) OR .EOF_FLAG;
  2886. ;   2145  2     
  2887. ;   2146  2        STATUS = LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
  2888. ;   2147  2     
  2889. ;   2148  2        IF .FIX_SIZE NEQ 0 THEN STATUS = LIB$FREE_VM (FIX_SIZE, FIX_ADDRESS);
  2890. ;   2149  2     
  2891. ;   2150  2        IF .ABORT_FLAG AND .FILE_MODE EQL FNC_WRITE
  2892. ;   2151  2        THEN
  2893. ;   2152  2        FILE_FAB [FAB$V_DLT] = TRUE
  2894. ;   2153  2        ELSE
  2895. ;   2154  2        FILE_FAB [FAB$V_DLT] = FALSE;
  2896. ;   2155  2     
  2897. ;   2156  2        STATUS = $CLOSE (FAB = FILE_FAB);
  2898. ;   2157  2        EOF_FLAG = FALSE;
  2899. ;   2158  2     
  2900. ;   2159  2        IF NOT .STATUS
  2901. ;   2160  2        THEN
  2902. ;   2161  3        BEGIN
  2903. ;   2162  3        FILE_ERROR (.STATUS);
  2904. ;   2163  3        RETURN KER_RMS32;
  2905. ;   2164  3        END
  2906. ;   2165  2        ELSE
  2907. ;   2166  2        RETURN KER_NORMAL;
  2908. ;   2167  2     
  2909. ;   2168  1        END;                    ! End of FILE_CLOSE
  2910.  
  2911.  
  2912.  
  2913.     .EXTRN  SYS$CLOSE
  2914.  
  2915.     .ENTRY  FILE_CLOSE, ^M<R2,R3,R4,R5,R6,-  ;FILE_CLOSE, Save R2,R3,R4,R5,R6,R7   2038                    00FC   00000
  2916.         R7>                 ;
  2917.     MOVAB   G^LIB$FREE_VM, R7         ;LIB$FREE_VM, R7                                 57 00000000G  00  9E   00002
  2918.     MOVL    #KER_NORMAL, R6             ;#KER_NORMAL, R6                                 56 00000000G  8F  D0   00009
  2919.     MOVL    #KER_RMS32, R5             ;#KER_RMS32, R5                                 55 00000000G  8F  D0   00010
  2920.     MOVAB   G^U.6, R4             ;U.6, R4                                     54 00000000V  00  9E   00017
  2921.     MOVAB   G^U.16, R3             ;U.16, R3                                     53 00000000'  00  9E   0001E
  2922.     CMPL    -8(R3), #1             ;FILE_MODE, #1                   2093            01    F8   A3  D1   00025
  2923.     BNEQ    9$                 ;9$                                               73  12   00029
  2924.     TSTL    (R3)                 ;FILE_REC_COUNT                                       63  D5   0002B
  2925.     BGTR    1$                 ;1$                                               07  14   0002D
  2926.     CMPL    -272(R3), #2             ;FILE_FAB+24, #2               2094            02     FEF0   C3  D1   0002F
  2927.     BEQL    9$                 ;9$                                               68  13   00034
  2928. 1$:    MOVL    G^FILE_TYPE, R0             ;FILE_TYPE, R0                   2098            50 00000000'  00  D0   00036
  2929.     CMPL    R0, #4                 ;R0, #4                   2101            04         50  D1   0003D
  2930.     BNEQ    4$                 ;4$                                               1C  12   00040
  2931.     MOVL    4(R3), R1             ;REC_SIZE, R1                   2104            51    04   A3  D0   00042
  2932.     SUBL3   #1, (R3), R2             ;#1, FILE_REC_COUNT, I                                 63         01  C3   00046
  2933.                          ;                                         52       00049
  2934.     BRB     3$                 ;3$                                               09  11   0004A
  2935. 2$:    MOVL    -4(R3), R0             ;FILE_REC_POINTER, R0               2105            50    FC   A3  D0   0004C
  2936.     CLRB    (R0)                 ;(R0)                                               60  94   00050
  2937.     INCL    -4(R3)                 ;FILE_REC_POINTER                                  FC   A3  D6   00052
  2938. 3$:    AOBLSS  R1, R2, 2$             ;R1, I, 2$                                     52         51  F2   00055
  2939.                          ;                                         F3       00058
  2940.     MOVL    R1, (R3)             ;R1, FILE_REC_COUNT               2106            63         51  D0   00059
  2941.     BRB     5$                 ;5$                       2107                  09  11   0005C
  2942. 4$:    TSTL    R0                 ;R0                       2110                  50  D5   0005E
  2943.     BLEQ    6$                 ;6$                                               0F  15   00060
  2944.     CMPL    R0, #2                 ;R0, #2                                     02         50  D1   00062
  2945.     BGTR    6$                 ;6$                                               0A  14   00065
  2946. 5$:    CALLS   #0, W^U.2             ;#0, U.2                   2111     F858   CF         00  FB   00067
  2947.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   0006C
  2948.     BRB     8$                 ;8$                                               26  11   0006F
  2949. 6$:    CMPL    R0, #3                 ;R0, #3                   2113            03         50  D1   00071
  2950.     BNEQ    8$                 ;8$                                               21  12   00074
  2951.     MOVW    (R3), -86(R3)             ;FILE_REC_COUNT, FILE_RAB+34           2115       AA   A3         63  B0   00076
  2952.     PUSHAB  -120(R3)             ;FILE_RAB                   2116             88   A3  9F   0007A
  2953.     CALLS   #1, G^SYS$WRITE             ;#1, SYS$WRITE                          00000000G  00         01  FB   0007D
  2954.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00084
  2955.     BLBS    R2, 7$                 ;STATUS, 7$                   2118            0A         52  E8   00087
  2956.     PUSHL   R2                 ;STATUS                   2121                  52  DD   0008A
  2957.     CALLS   #1, (R4)             ;#1, FILE_ERROR                                 64         01  FB   0008C
  2958.     MOVL    R5, R2                 ;R5, STATUS                   2122            52         55  D0   0008F
  2959.     BRB     8$                 ;8$                                               03  11   00092
  2960. 7$:    MOVL    R6, R2                 ;R6, STATUS                   2125            52         56  D0   00094
  2961. 8$:    BLBS    R2, 9$                 ;STATUS, 9$                   2130            04         52  E8   00097
  2962.     MOVL    R2, R0                 ;STATUS, R0                                     50         52  D0   0009A
  2963.     RET                      ;                                               04   0009D
  2964. 9$:    TSTL    -8(R3)                 ;FILE_MODE                   2139             F8   A3  D5   0009E
  2965.     BNEQ    11$                 ;11$                                               20  12   000A1
  2966.     CMPL    -304(R3), #160             ;DEV_CLASS, #160                      000000A0   8F     FED0   C3  D1   000A3
  2967.     BNEQ    11$                 ;11$                                               15  12   000AC
  2968.     BLBS    -300(R3), 11$             ;EOF_FLAG, 11$                                     10     FED4   C3  E8   000AE
  2969. 10$:    CALLS   #0, W^U.3             ;#0, U.3                   2143     F6E0   CF         00  FB   000B3
  2970.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   000B8
  2971.     BLBC    R2, 11$                 ;STATUS, 11$                   2144            05         52  E9   000BB
  2972.     BLBC    -300(R3), 10$             ;EOF_FLAG, 10$                                     F0     FED4   C3  E9   000BE
  2973. 11$:    PUSHAB  8(R3)                 ;REC_ADDRESS                   2146             08   A3  9F   000C3
  2974.     PUSHAB  4(R3)                 ;REC_SIZE                                      04   A3  9F   000C6
  2975.     CALLS   #2, (R7)             ;#2, LIB$FREE_VM                                 67         02  FB   000C9
  2976.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   000CC
  2977.     TSTL    12(R3)                 ;FIX_SIZE                   2148             0C   A3  D5   000CF
  2978.     BEQL    12$                 ;12$                                               0C  13   000D2
  2979.     PUSHAB  16(R3)                 ;FIX_ADDRESS                                      10   A3  9F   000D4
  2980.     PUSHAB  12(R3)                 ;FIX_SIZE                                      0C   A3  9F   000D7
  2981.     CALLS   #2, (R7)             ;#2, LIB$FREE_VM                                 67         02  FB   000DA
  2982.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   000DD
  2983. 12$:    BLBC    4(AP), 13$             ;ABORT_FLAG, 13$               2150            0E    04   AC  E9   000E0
  2984.     CMPL    -8(R3), #1             ;FILE_MODE, #1                                     01    F8   A3  D1   000E4
  2985.     BNEQ    13$                 ;13$                                               08  12   000E8
  2986.     BISB2   #128, -291(R3)             ;#128, FILE_FAB+5               2152     FEDD   C3    80   8F  88   000EA
  2987.     BRB     14$                 ;14$                                               06  11   000F0
  2988. 13$:    BICB2   #128, -291(R3)             ;#128, FILE_FAB+5               2154     FEDD   C3    80   8F  8A   000F2
  2989. 14$:    PUSHAB  -296(R3)             ;FILE_FAB                   2156               FED8   C3  9F   000F8
  2990.     CALLS   #1, G^SYS$CLOSE             ;#1, SYS$CLOSE                          00000000G  00         01  FB   000FC
  2991.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00103
  2992.     CLRL    -300(R3)             ;EOF_FLAG                   2157               FED4   C3  D4   00106
  2993.     BLBS    R2, 15$                 ;STATUS, 15$                   2159            09         52  E8   0010A
  2994.     PUSHL   R2                 ;STATUS                   2162                  52  DD   0010D
  2995.     CALLS   #1, (R4)             ;#1, FILE_ERROR                                 64         01  FB   0010F
  2996.     MOVL    R5, R0                 ;R5, R0                   2163            50         55  D0   00112
  2997.     RET                      ;                                               04   00115
  2998. 15$:    MOVL    R6, R0                 ;R6, R0                   2166            50         56  D0   00116
  2999.     RET                      ;                                               04   00119
  3000.  
  3001. ; Routine Size:  282 bytes,    Routine Base:  $CODE$ + 0BD7
  3002.  
  3003.  
  3004. ;   2169  1     
  3005. ;   2170  1     %SBTTL 'NEXT_FILE'
  3006. ;   2171  1     
  3007. ;   2172  1    GLOBAL ROUTINE NEXT_FILE =
  3008. ;   2173  1     
  3009. ;   2174  1    !++
  3010. ;   2175  1    ! FUNCTIONAL DESCRIPTION:
  3011. ;   2176  1    !
  3012. ;   2177  1    !    This routine will cause the next file to be opened.  It will
  3013. ;   2178  1    !    call the RMS-32 routine $SEARCH and $OPEN for the file.
  3014. ;   2179  1    !
  3015. ;   2180  1    ! CALLING SEQUENCE:
  3016. ;   2181  1    !
  3017. ;   2182  1    !    STATUS = NEXT_FILE;
  3018. ;   2183  1    !
  3019. ;   2184  1    ! INPUT PARAMETERS:
  3020. ;   2185  1    !
  3021. ;   2186  1    !    None.
  3022. ;   2187  1    !
  3023. ;   2188  1    ! IMPLICIT INPUTS:
  3024. ;   2189  1    !
  3025. ;   2190  1    !    FAB/NAM blocks set up from previous processing.
  3026. ;   2191  1    !
  3027. ;   2192  1    ! OUTPUT PARAMETERS:
  3028. ;   2193  1    !
  3029. ;   2194  1    !    None.
  3030. ;   2195  1    !
  3031. ;   2196  1    ! IMPLICIT OUTPUTS:
  3032. ;   2197  1    !
  3033. ;   2198  1    !    FAB/NAM blocks set up for the next file.
  3034. ;   2199  1    !
  3035. ;   2200  1    ! COMPLETION CODES:
  3036. ;   2201  1    !
  3037. ;   2202  1    !    TRUE - There is a next file.
  3038. ;   2203  1    !    KER_RMS32 - No next file.
  3039. ;   2204  1    !
  3040. ;   2205  1    ! SIDE EFFECTS:
  3041. ;   2206  1    !
  3042. ;   2207  1    !    None.
  3043. ;   2208  1    !
  3044. ;   2209  1    !--
  3045. ;   2210  1     
  3046. ;   2211  2        BEGIN
  3047. ;   2212  2    !
  3048. ;   2213  2    ! Completion codes returned:
  3049. ;   2214  2    !
  3050. ;   2215  2        EXTERNAL LITERAL
  3051. ;   2216  2        KER_NORMAL,                ! Normal return
  3052. ;   2217  2        KER_NOMORFILES,                ! No more files to read
  3053. ;   2218  2        KER_RMS32;                ! RMS-32 error
  3054. ;   2219  2     
  3055. ;   2220  2        EXTERNAL ROUTINE
  3056. ;   2221  2        TT_TEXT : NOVALUE;            ! Output an ASCIZ string
  3057. ;   2222  2     
  3058. ;   2223  2        LOCAL
  3059. ;   2224  2        SIZE : WORD,                ! Size of the $FAO string
  3060. ;   2225  2        STATUS;                    ! Random status values
  3061. ;   2226  2     
  3062. ;   2227  2    !
  3063. ;   2228  2    ! If we can't do a search, just return no more files
  3064. ;   2229  2    !
  3065. ;   2230  2     
  3066. ;   2231  2        IF NOT .SEARCH_FLAG THEN RETURN KER_NOMORFILES;
  3067. ;   2232  2     
  3068. ;   2233  2    !
  3069. ;   2234  2    ! Now search for the next file that we want to process.
  3070. ;   2235  2    !
  3071. ;   2236  2        STATUS = $SEARCH (FAB = FILE_FAB);
  3072. ;   2237  2     
  3073. ;   2238  2        IF .STATUS EQL RMS$_NMF THEN RETURN KER_NOMORFILES;
  3074. ;   2239  2     
  3075. ;   2240  2        IF NOT .STATUS
  3076. ;   2241  2        THEN
  3077. ;   2242  3        BEGIN
  3078. ;   2243  3        FILE_ERROR (.STATUS);
  3079. ;   2244  3        RETURN KER_RMS32;
  3080. ;   2245  2        END;
  3081. ;   2246  2     
  3082. ;   2247  2    !
  3083. ;   2248  2    ! Now we have the new file name.  All that we have to do is open the file
  3084. ;   2249  2    ! for reading now.
  3085. ;   2250  2    !
  3086. ;   2251  2        STATUS = OPEN_READING ();
  3087. ;   2252  2     
  3088. ;   2253  2        IF NOT .STATUS THEN RETURN .STATUS;
  3089. ;   2254  2     
  3090. ;   2255  2    !
  3091. ;   2256  2    ! Copy the file name based on the type of file name we are to use.
  3092. ;   2257  2    ! The possibilities are:
  3093. ;   2258  2    !        Normal - Just copy name and type
  3094. ;   2259  2    !        Full - Copy entire name string (either resultant or expanded)
  3095. ;   2260  2    !        Untranslated - Copy string from name on (includes version, etc.)
  3096. ;   2261  2     
  3097. ;   2262  2        SELECTONE .FIL_NORMAL_FORM OF
  3098. ;   2263  2        SET
  3099. ;   2264  2     
  3100. ;   2265  2        [FNM_FULL] :
  3101. ;   2266  3            BEGIN
  3102. ;   2267  3     
  3103. ;   2268  3            IF .FILE_NAM [NAM$B_RSL] GTR 0
  3104. ;   2269  3            THEN
  3105. ;   2270  4            BEGIN
  3106. ;   2271  4            CH$COPY (.FILE_NAM [NAM$B_RSL], CH$PTR (.FILE_NAM [NAM$L_RSA]), CHR_NUL,
  3107. ;   2272  4                MAX_FILE_NAME, CH$PTR (FILE_NAME));
  3108. ;   2273  4            SIZE = .FILE_NAM [NAM$B_RSL];
  3109. ;   2274  4            END
  3110. ;   2275  3            ELSE
  3111. ;   2276  4            BEGIN
  3112. ;   2277  4            CH$COPY (.FILE_NAM [NAM$B_ESL], CH$PTR (.FILE_NAM [NAM$L_ESA]), CHR_NUL,
  3113. ;   2278  4                MAX_FILE_NAME, CH$PTR (FILE_NAME));
  3114. ;   2279  4            SIZE = .FILE_NAM [NAM$B_ESL];
  3115. ;   2280  4            END
  3116. ;   2281  4     
  3117. ;   2282  2            END;
  3118. ;   2283  2     
  3119. ;   2284  2        [FNM_NORMAL, FNM_UNTRAN] :
  3120. ;   2285  3            BEGIN
  3121. ;   2286  3            CH$COPY (.FILE_NAM [NAM$B_NAME], CH$PTR (.FILE_NAM [NAM$L_NAME]),
  3122. ;   2287  3            .FILE_NAM [NAM$B_TYPE], CH$PTR (.FILE_NAM [NAM$L_TYPE]), CHR_NUL,
  3123. ;   2288  3            MAX_FILE_NAME, CH$PTR (FILE_NAME));
  3124. ;   2289  3            SIZE = .FILE_NAM [NAM$B_NAME] + .FILE_NAM [NAM$B_TYPE];
  3125. ;   2290  2            END;
  3126. ;   2291  2        TES;
  3127. ;   2292  2     
  3128. ;   2293  2        IF .SIZE GTR MAX_FILE_NAME THEN FILE_SIZE = MAX_FILE_NAME ELSE FILE_SIZE = .SIZE;
  3129. ;   2294  2     
  3130. ;   2295  2    !
  3131. ;   2296  2    ! Put prompt for NEXT_FILE sending in here
  3132. ;   2297  2    !
  3133. ;   2298  2        IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  3134. ;   2299  2        THEN
  3135. ;   2300  3            BEGIN
  3136. ;   2301  3            TT_TEXT (UPLIT (%ASCIZ 'Sending: '));
  3137. ;   2302  3            .FILE_NAM [NAM$L_RSA] + .FILE_NAM [NAM$B_RSL] = 0;
  3138. ;   2303  3            TT_TEXT (.FILE_NAM [NAM$L_RSA]);
  3139. ;   2304  3            TT_TEXT (UPLIT (%ASCIZ ' as '));
  3140. ;   2305  3            TT_OUTPUT ();
  3141. ;   2306  2            END;
  3142. ;   2307  2     
  3143. ;   2308  2        RETURN KER_NORMAL;
  3144. ;   2309  1        END;                    ! End of NEXT_FILE
  3145.  
  3146.  
  3147.  
  3148.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  3149.  
  3150. P.AAD:    .ASCII  \Sending: \<0><0><0>         ;                                3A  67  6E  69  64  6E  65  53  00014
  3151.                          ;                                      00  00  00  20  0001C
  3152. P.AAE:    .ASCII  \ as \<0><0><0><0>         ;                                00  00  00  00  20  73  61  20  00020
  3153.  
  3154.     .EXTRN  KER_NOMORFILES
  3155.  
  3156.     .PSECT  $CODE$,NOWRT,2
  3157.  
  3158.     .ENTRY  NEXT_FILE, ^M<R2,R3,R4,R5,R6,R7,-;NEXT_FILE, Save R2,R3,R4,R5,R6,R7,-  2172                    0FFC   00000
  3159.         R8,R9,R10,R11>             ;R8,R9,R10,R11
  3160.     BLBC    G^U.7, 1$             ;U.7, 1$                   2231            19 00000000'  00  E9   00002
  3161.     PUSHAB  G^U.10                 ;U.10                       2236           00000000'  00  9F   00009
  3162.     CALLS   #1, G^SYS$SEARCH         ;#1, SYS$SEARCH                      00000000G  00         01  FB   0000F
  3163.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00016
  3164.     CMPL    R2, #99018             ;STATUS, #99018               2238 000182CA   8F         52  D1   00019
  3165.     BNEQ    2$                 ;2$                                               08  12   00020
  3166. 1$:    MOVL    #KER_NOMORFILES, R0         ;#KER_NOMORFILES, R0                                 50 00000000G  8F  D0   00022
  3167.     RET                      ;                                               04   00029
  3168. 2$:    BLBS    R2, 3$                 ;STATUS, 3$                   2240            11         52  E8   0002A
  3169.     PUSHL   R2                 ;STATUS                   2243                  52  DD   0002D
  3170.     CALLS   #1, G^U.6             ;#1, U.6                          00000000V  00         01  FB   0002F
  3171.     MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               2244            50 00000000G  8F  D0   00036
  3172.     RET                      ;                                               04   0003D
  3173. 3$:    CALLS   #0, W^U.35             ;#0, U.35                   2251     F7A1   CF         00  FB   0003E
  3174.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00043
  3175.     BLBS    R2, 4$                 ;STATUS, 4$                   2253            04         52  E8   00046
  3176.     MOVL    R2, R0                 ;STATUS, R0                                     50         52  D0   00049
  3177.     RET                      ;                                               04   0004C
  3178. 4$:    MOVL    G^FIL_NORMAL_FORM, R0         ;FIL_NORMAL_FORM, R0               2262            50 00000000G  00  D0   0004D
  3179.     CMPL    R0, #2                 ;R0, #2                   2265            02         50  D1   00054
  3180.     BNEQ    7$                 ;7$                                               31  12   00057
  3181.     MOVZBL  G^U.11+3, R6             ;U.11+3, R6                   2268            56 00000000'  00  9A   00059
  3182.     BLEQ    5$                 ;5$                                               09  15   00060
  3183.     MOVL    G^U.11+4, R0             ;U.11+4, R0                   2271            50 00000000'  00  D0   00062
  3184.     BRB     6$                 ;6$                       2272                  0E  11   00069
  3185. 5$:    MOVZBL  G^U.11+11, R6             ;U.11+11, R6                   2277            56 00000000'  00  9A   0006B
  3186.     MOVL    G^U.11+12, R0             ;U.11+12, R0                                     50 00000000'  00  D0   00072
  3187. 6$:    MOVC5   R6, (R0), #0, #132, G^FILE_NAME  ;R6, (R0), #0, #132, FILE_NAME        2278            60         56  2C   00079
  3188.                          ;                            0084   8F         00       0007C
  3189.                          ;                                  00000000G  00       00080
  3190.     MOVW    R6, R7                 ;R6, SIZE                   2279            57         56  B0   00085
  3191.     BRB     10$                 ;10$                       2262                  49  11   00088
  3192. 7$:    CMPL    R0, #1                 ;R0, #1                   2284            01         50  D1   0008A
  3193.     BEQL    8$                 ;8$                                               05  13   0008D
  3194.     CMPL    R0, #4                 ;R0, #4                                     04         50  D1   0008F
  3195.     BNEQ    10$                 ;10$                                               3F  12   00092
  3196. 8$:    MOVZBL  G^U.11+59, R11             ;U.11+59, R11                   2286            5B 00000000'  00  9A   00094
  3197.     MOVL    G^U.11+76, R0             ;U.11+76, R0                                     50 00000000'  00  D0   0009B
  3198.     MOVZBL  G^U.11+60, R10             ;U.11+60, R10                   2287            5A 00000000'  00  9A   000A2
  3199.     MOVL    G^U.11+80, R9             ;U.11+80, R9                                     59 00000000'  00  D0   000A9
  3200.     MOVZBL  #132, R8             ;#132, R8                   2288            58    84   8F  9A   000B0
  3201.     MOVAB   G^FILE_NAME, R6             ;FILE_NAME, R6                                     56 00000000G  00  9E   000B4
  3202.     MOVC5   R11, (R0), #0, R8, (R6)         ;R11, (R0), #0, R8, (R6)                             60         5B  2C   000BB
  3203.                          ;                                   58         00       000BE
  3204.                          ;                                         66       000C0
  3205.     BGEQ    9$                 ;9$                                               0C  18   000C1
  3206.     ADDL2   R11, R6                 ;R11, R6                                     56         5B  C0   000C3
  3207.     SUBL2   R11, R8                 ;R11, R8                                     58         5B  C2   000C6
  3208.     MOVC5   R10, (R9), #0, R8, (R6)         ;R10, (R9), #0, R8, (R6)                             69         5A  2C   000C9
  3209.                          ;                                   58         00       000CC
  3210.                          ;                                         66       000CE
  3211. 9$:    ADDW3   R10, R11, R7             ;R10, R11, SIZE               2289            5B         5A  A1   000CF
  3212.                          ;                                         57       000D2
  3213. 10$:    CMPW    R7, #132             ;SIZE, #132                   2293     0084   8F         57  B1   000D3
  3214.     BLEQU   11$                 ;11$                                               0A  1B   000D8
  3215.     MOVZBL  #132, G^FILE_SIZE         ;#132, FILE_SIZE                      00000000G  00    84   8F  9A   000DA
  3216.     BRB     12$                 ;12$                                               07  11   000E2
  3217. 11$:    MOVZWL  R7, G^FILE_SIZE             ;SIZE, FILE_SIZE                      00000000G  00         57  3C   000E4
  3218. 12$:    BLBS    G^CONNECT_FLAG, 13$         ;CONNECT_FLAG, 13$               2298            44 00000000G  00  E8   000EB
  3219.     BLBC    G^TY_FIL, 13$             ;TY_FIL, 13$                                     3D 00000000G  00  E9   000F2
  3220.     PUSHAB  G^P.AAD                 ;P.AAD                       2301           00000000'  00  9F   000F9
  3221.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   000FF
  3222.     MOVL    G^U.11+4, R0             ;U.11+4, R0                   2302            50 00000000'  00  D0   00106
  3223.     MOVZBL  G^U.11+3, R1             ;U.11+3, R1                                     51 00000000'  00  9A   0010D
  3224.     PUSHAB  (R1)[R0]             ;(R1)[R0]                                         6140  9F   00114
  3225.     CLRL    @(SP)+                 ;@(SP)+                                           9E  D4   00117
  3226.     PUSHL   R0                 ;R0                       2303                  50  DD   00119
  3227.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   0011B
  3228.     PUSHAB  G^P.AAE                 ;P.AAE                       2304           00000000'  00  9F   00122
  3229.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   00128
  3230.     CALLS   #0, G^TT_OUTPUT             ;#0, TT_OUTPUT                   2305 00000000G  00         00  FB   0012F
  3231. 13$:    MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               2308            50 00000000G  8F  D0   00136
  3232.     RET                      ;                                               04   0013D
  3233.  
  3234. ; Routine Size:  318 bytes,    Routine Base:  $CODE$ + 0CF1
  3235.  
  3236.  
  3237. ;   2310  1     
  3238. ;   2311  1     %SBTTL 'LOG_OPEN - Open a log file'
  3239. ;   2312  1     
  3240. ;   2313  1    GLOBAL ROUTINE LOG_OPEN (LOG_DESC, LOG_FAB, LOG_RAB) =
  3241. ;   2314  1     
  3242. ;   2315  1    !++
  3243. ;   2316  1    ! FUNCTIONAL DESCRIPTION:
  3244. ;   2317  1    !
  3245. ;   2318  1    ! CALLING SEQUENCE:
  3246. ;   2319  1    !
  3247. ;   2320  1    !    STATUS = LOG_OPEN (LOG_DESC, LOG_FAB, LOG_RAB)
  3248. ;   2321  1    !
  3249. ;   2322  1    ! INPUT PARAMETERS:
  3250. ;   2323  1    !
  3251. ;   2324  1    !    LOG_DESC - Address of descriptor for file name to be opened
  3252. ;   2325  1    !
  3253. ;   2326  1    !    LOG_FAB - Address of FAB for file
  3254. ;   2327  1    !
  3255. ;   2328  1    !    LOG_RAB - Address of RAB for file
  3256. ;   2329  1    !
  3257. ;   2330  1    ! IMPLICIT INPUTS:
  3258. ;   2331  1    !
  3259. ;   2332  1    !    None.
  3260. ;   2333  1    !
  3261. ;   2334  1    ! OUPTUT PARAMETERS:
  3262. ;   2335  1    !
  3263. ;   2336  1    !    LOG_FAB and LOG_RAB updated.
  3264. ;   2337  1    !
  3265. ;   2338  1    ! IMPLICIT OUTPUTS:
  3266. ;   2339  1    !
  3267. ;   2340  1    !    None.
  3268. ;   2341  1    !
  3269. ;   2342  1    ! COMPLETION CODES:
  3270. ;   2343  1    !
  3271. ;   2344  1    !    Error code or true.
  3272. ;   2345  1    !
  3273. ;   2346  1    ! SIDE EFFECTS:
  3274. ;   2347  1    !
  3275. ;   2348  1    !    None.
  3276. ;   2349  1    !
  3277. ;   2350  1    !--
  3278. ;   2351  1     
  3279. ;   2352  2        BEGIN
  3280. ;   2353  2    !
  3281. ;   2354  2    ! Completion codes returned:
  3282. ;   2355  2    !
  3283. ;   2356  2        EXTERNAL LITERAL
  3284. ;   2357  2        KER_NORMAL,                ! Normal return
  3285. ;   2358  2        KER_RMS32;                ! RMS-32 error
  3286. ;   2359  2     
  3287. ;   2360  2        MAP
  3288. ;   2361  2        LOG_DESC : REF BLOCK [8, BYTE],        ! Name descriptor
  3289. ;   2362  2        LOG_FAB : REF $FAB_DECL,        ! FAB for file
  3290. ;   2363  2        LOG_RAB : REF $RAB_DECL;        ! RAB for file
  3291. ;   2364  2     
  3292. ;   2365  2        LOCAL
  3293. ;   2366  2        STATUS,                    ! Random status values
  3294. ;   2367  2        REC_ADDRESS,                ! Address of record buffer
  3295. ;   2368  2        REC_SIZE;                ! Size of record buffer
  3296. ;   2369  2     
  3297. ;   2370  2    !
  3298. ;   2371  2    ! Get memory for records
  3299. ;   2372  2    !
  3300. ;   2373  2        REC_SIZE = LOG_BUFF_SIZE;
  3301. ;   2374  2        STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
  3302. ;   2375  2     
  3303. ;   2376  2        IF NOT .STATUS
  3304. ;   2377  2        THEN
  3305. ;   2378  3        BEGIN
  3306. ;   2379  3        LIB$SIGNAL (.STATUS);
  3307. ;   2380  3        RETURN .STATUS;
  3308. ;   2381  2        END;
  3309. ;   2382  2     
  3310. ;   2383  2    !
  3311. ;   2384  2    ! Initialize the FAB and RAB
  3312. ;   2385  2    !
  3313. ; P 2386  2        $FAB_INIT (FAB = .LOG_FAB, FAC = PUT, FNA = .LOG_DESC [DSC$A_POINTER],
  3314. ; P 2387  2        FNS = .LOG_DESC [DSC$W_LENGTH], FOP = (MXV, CBT, SQO, TEF), ORG = SEQ, RFM = VAR,
  3315. ;   2388  2        RAT = CR, CTX = 0, DNA = UPLIT (%ASCII'.LOG'), DNS = 4);
  3316. ;   2389  2        STATUS = $CREATE (FAB = .LOG_FAB);
  3317. ;   2390  2     
  3318. ;   2391  2        IF NOT .STATUS
  3319. ;   2392  2        THEN
  3320. ;   2393  3        BEGIN
  3321. ;   2394  3        FILE_ERROR (.STATUS);
  3322. ;   2395  3        LIB$FREE_VM (REC_SIZE, REC_ADDRESS);    ! Dump record buffer
  3323. ;   2396  3        RETURN KER_RMS32;
  3324. ;   2397  2        END;
  3325. ;   2398  2     
  3326. ; P 2399  2        $RAB_INIT (RAB = .LOG_RAB, FAB = .LOG_FAB, RAC = SEQ, RBF = .REC_ADDRESS,
  3327. ;   2400  2        RSZ = .REC_SIZE, UBF = .REC_ADDRESS, USZ = .REC_SIZE, ROP = <NLK, WAT>, CTX = 0);
  3328. ;   2401  2        STATUS = $CONNECT (RAB = .LOG_RAB);
  3329. ;   2402  2     
  3330. ;   2403  2        IF NOT .STATUS
  3331. ;   2404  2        THEN
  3332. ;   2405  3        BEGIN
  3333. ;   2406  3        FILE_ERROR (.STATUS);
  3334. ;   2407  3        LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
  3335. ;   2408  3        $CLOSE (FAB = .LOG_FAB);
  3336. ;   2409  3        RETURN KER_RMS32;
  3337. ;   2410  3        END
  3338. ;   2411  2        ELSE
  3339. ;   2412  2        RETURN .STATUS;
  3340. ;   2413  2     
  3341. ;   2414  1        END;                    ! End of LOG_OPEN
  3342.  
  3343.  
  3344.  
  3345.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  3346.  
  3347. P.AAF:    .ASCII  \.LOG\                 ;                                            47  4F  4C  2E  00028
  3348.  
  3349.  
  3350.  
  3351.     .PSECT  $CODE$,NOWRT,2
  3352.  
  3353.     .ENTRY  LOG_OPEN, ^M<R2,R3,R4,R5,R6,R7,- ;LOG_OPEN, Save R2,R3,R4,R5,R6,R7,-   2313                    07FC   00000
  3354.         R8,R9,R10>             ;R8,R9,R10
  3355.     MOVAB   G^LIB$FREE_VM, R10         ;LIB$FREE_VM, R10                                 5A 00000000G  00  9E   00002
  3356.     MOVAB   G^U.6, R9             ;U.6, R9                                     59 00000000V  00  9E   00009
  3357.     SUBL2   #8, SP                 ;#8, SP                                     5E         08  C2   00010
  3358.     MOVZWL  #256, 4(SP)             ;#256, REC_SIZE               2373       04   AE     0100   8F  3C   00013
  3359.     PUSHL   SP                 ;SP                       2374                  5E  DD   00019
  3360.     PUSHAB  8(SP)                 ;REC_SIZE                                      08   AE  9F   0001B
  3361.     CALLS   #2, G^LIB$GET_VM         ;#2, LIB$GET_VM                      00000000G  00         02  FB   0001E
  3362.     MOVL    R0, R8                 ;R0, STATUS                                     58         50  D0   00025
  3363.     BLBS    R8, 1$                 ;STATUS, 1$                   2376            0C         58  E8   00028
  3364.     PUSHL   R8                 ;STATUS                   2379                  58  DD   0002B
  3365.     CALLS   #1, G^LIB$SIGNAL         ;#1, LIB$SIGNAL                      00000000G  00         01  FB   0002D
  3366.     BRW     4$                 ;4$                       2380                00BD  31   00034
  3367. 1$:    MOVL    8(AP), R7             ;LOG_FAB, R7                   2388            57    08   AC  D0   00037
  3368.     MOVC5   #0, (SP), #0, #80, (R7)         ;#0, (SP), #0, #80, (R7)                             6E         00  2C   0003B
  3369.                          ;                            0050   8F         00       0003E
  3370.                          ;                                         67       00042
  3371.     MOVW    #20483, (R7)             ;#20483, (R7)                                     67     5003   8F  B0   00043
  3372.     MOVL    #270532674, 4(R7)         ;#270532674, 4(R7)                            04   A7 10200042   8F  D0   00048
  3373.     MOVB    #1, 22(R7)             ;#1, 22(R7)                                16   A7         01  90   00050
  3374.     MOVW    #512, 29(R7)             ;#512, 29(R7)                                1D   A7     0200   8F  B0   00054
  3375.     MOVB    #2, 31(R7)             ;#2, 31(R7)                                1F   A7         02  90   0005A
  3376.     MOVL    4(AP), R0             ;LOG_DESC, R0                                     50    04   AC  D0   0005E
  3377.     MOVL    4(R0), 44(R7)             ;4(R0), 44(R7)                                2C   A7    04   A0  D0   00062
  3378.     MOVAB   G^P.AAF, 48(R7)             ;P.AAF, 48(R7)                                30   A7 00000000'  00  9E   00067
  3379.     MOVB    (R0), 52(R7)             ;(R0), 52(R7)                                34   A7         60  90   0006F
  3380.     MOVB    #4, 53(R7)             ;#4, 53(R7)                                35   A7         04  90   00073
  3381.     PUSHL   R7                 ;R7                       2389                  57  DD   00077
  3382.     CALLS   #1, G^SYS$CREATE         ;#1, SYS$CREATE                      00000000G  00         01  FB   00079
  3383.     MOVL    R0, R8                 ;R0, STATUS                                     58         50  D0   00080
  3384.     BLBS    R8, 2$                 ;STATUS, 2$                   2391            0F         58  E8   00083
  3385.     PUSHL   R8                 ;STATUS                   2394                  58  DD   00086
  3386.     CALLS   #1, (R9)             ;#1, FILE_ERROR                                 69         01  FB   00088
  3387.     PUSHL   SP                 ;SP                       2395                  5E  DD   0008B
  3388.     PUSHAB  8(SP)                 ;REC_SIZE                                      08   AE  9F   0008D
  3389.     CALLS   #2, (R10)             ;#2, LIB$FREE_VM                                 6A         02  FB   00090
  3390.     BRB     3$                 ;3$                       2396                  57  11   00093
  3391. 2$:    MOVL    12(AP), R6             ;LOG_RAB, R6                   2400            56    0C   AC  D0   00095
  3392.     MOVC5   #0, (SP), #0, #68, (R6)         ;#0, (SP), #0, #68, (R6)                             6E         00  2C   00099
  3393.                          ;                            0044   8F         00       0009C
  3394.                          ;                                         66       000A0
  3395.     MOVW    #17409, (R6)             ;#17409, (R6)                                     66     4401   8F  B0   000A1
  3396.     MOVL    #1179648, 4(R6)             ;#1179648, 4(R6)                            04   A6 00120000   8F  D0   000A6
  3397.     CLRB    30(R6)                 ;30(R6)                                      1E   A6  94   000AE
  3398.     MOVW    4(SP), 32(R6)             ;REC_SIZE, 32(R6)                            20   A6    04   AE  B0   000B1
  3399.     MOVW    4(SP), 34(R6)             ;REC_SIZE, 34(R6)                            22   A6    04   AE  B0   000B6
  3400.     MOVL    (SP), 36(R6)             ;REC_ADDRESS, 36(R6)                            24   A6         6E  D0   000BB
  3401.     MOVL    (SP), 40(R6)             ;REC_ADDRESS, 40(R6)                            28   A6         6E  D0   000BF
  3402.     MOVL    R7, 60(R6)             ;R7, 60(R6)                                3C   A6         57  D0   000C3
  3403.     PUSHL   R6                 ;R6                       2401                  56  DD   000C7
  3404.     CALLS   #1, G^SYS$CONNECT         ;#1, SYS$CONNECT                      00000000G  00         01  FB   000C9
  3405.     MOVL    R0, R8                 ;R0, STATUS                                     58         50  D0   000D0
  3406.     BLBS    R8, 4$                 ;STATUS, 4$                   2403            1E         58  E8   000D3
  3407.     PUSHL   R8                 ;STATUS                   2406                  58  DD   000D6
  3408.     CALLS   #1, (R9)             ;#1, FILE_ERROR                                 69         01  FB   000D8
  3409.     PUSHL   SP                 ;SP                       2407                  5E  DD   000DB
  3410.     PUSHAB  8(SP)                 ;REC_SIZE                                      08   AE  9F   000DD
  3411.     CALLS   #2, (R10)             ;#2, LIB$FREE_VM                                 6A         02  FB   000E0
  3412.     PUSHL   R7                 ;R7                       2408                  57  DD   000E3
  3413.     CALLS   #1, G^SYS$CLOSE             ;#1, SYS$CLOSE                          00000000G  00         01  FB   000E5
  3414. 3$:    MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               2409            50 00000000G  8F  D0   000EC
  3415.     RET                      ;                                               04   000F3
  3416. 4$:    MOVL    R8, R0                 ;STATUS, R0                                     50         58  D0   000F4
  3417.     RET                      ;                       2412                  04   000F7
  3418.  
  3419. ; Routine Size:  248 bytes,    Routine Base:  $CODE$ + 0E2F
  3420.  
  3421.  
  3422. ;   2415  1     
  3423. ;   2416  1     %SBTTL 'LOG_CLOSE - Close a log file'
  3424. ;   2417  1     
  3425. ;   2418  1    GLOBAL ROUTINE LOG_CLOSE (LOG_FAB, LOG_RAB) =
  3426. ;   2419  1     
  3427. ;   2420  1    !++
  3428. ;   2421  1    ! FUNCTIONAL DESCRIPTION:
  3429. ;   2422  1    !
  3430. ;   2423  1    ! This routine will close an open log file.  It will also ensure that
  3431. ;   2424  1    !the last buffer gets dumped.
  3432. ;   2425  1    !
  3433. ;   2426  1    ! CALLING SEQUENCE:
  3434. ;   2427  1    !
  3435. ;   2428  1    !    STATUS = LOG_CLOSE (LOG_FAB, LOG_RAB);
  3436. ;   2429  1    !
  3437. ;   2430  1    ! INPUT PARAMETERS:
  3438. ;   2431  1    !
  3439. ;   2432  1    !    LOG_FAB - Address of log file FAB
  3440. ;   2433  1    !
  3441. ;   2434  1    !    LOG_RAB - Address of log file RAB
  3442. ;   2435  1    !
  3443. ;   2436  1    ! IMPLICIT INPUTS:
  3444. ;   2437  1    !
  3445. ;   2438  1    !    None.
  3446. ;   2439  1    !
  3447. ;   2440  1    ! OUPTUT PARAMETERS:
  3448. ;   2441  1    !
  3449. ;   2442  1    !    None.
  3450. ;   2443  1    !
  3451. ;   2444  1    ! IMPLICIT OUTPUTS:
  3452. ;   2445  1    !
  3453. ;   2446  1    !    None.
  3454. ;   2447  1    !
  3455. ;   2448  1    ! COMPLETION CODES:
  3456. ;   2449  1    !
  3457. ;   2450  1    !    Resulting status.
  3458. ;   2451  1    !
  3459. ;   2452  1    ! SIDE EFFECTS:
  3460. ;   2453  1    !
  3461. ;   2454  1    !    None.
  3462. ;   2455  1    !
  3463. ;   2456  1    !--
  3464. ;   2457  1     
  3465. ;   2458  2        BEGIN
  3466. ;   2459  2    !
  3467. ;   2460  2    ! Completion codes returned:
  3468. ;   2461  2    !
  3469. ;   2462  2        EXTERNAL LITERAL
  3470. ;   2463  2        KER_RMS32;                ! RMS-32 error
  3471. ;   2464  2     
  3472. ;   2465  2        MAP
  3473. ;   2466  2        LOG_FAB : REF $FAB_DECL,        ! FAB for log file
  3474. ;   2467  2        LOG_RAB : REF $RAB_DECL;        ! RAB for log file
  3475. ;   2468  2     
  3476. ;   2469  2        LOCAL
  3477. ;   2470  2        STATUS,                    ! Random status values
  3478. ;   2471  2        REC_ADDRESS,                ! Address of record buffer
  3479. ;   2472  2        REC_SIZE;                ! Size of record buffer
  3480. ;   2473  2     
  3481. ;   2474  2    !
  3482. ;   2475  2    ! First write out any outstanding data
  3483. ;   2476  2    !
  3484. ;   2477  2     
  3485. ;   2478  2        IF .LOG_RAB [RAB$L_CTX] GTR 0 THEN LOG_PUT (.LOG_RAB);    ! Dump current buffer
  3486. ;   2479  2     
  3487. ;   2480  2    !
  3488. ;   2481  2    ! Return the buffer
  3489. ;   2482  2    !
  3490. ;   2483  2        REC_SIZE = LOG_BUFF_SIZE;            ! Get size of buffer
  3491. ;   2484  2        REC_ADDRESS = .LOG_RAB [RAB$L_RBF];        ! And address
  3492. ;   2485  2        LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
  3493. ;   2486  2    !
  3494. ;   2487  2    ! Now disconnect the RAB
  3495. ;   2488  2    !
  3496. ;   2489  2        STATUS = $DISCONNECT (RAB = .LOG_RAB);
  3497. ;   2490  2     
  3498. ;   2491  2        IF NOT .STATUS
  3499. ;   2492  2        THEN
  3500. ;   2493  3        BEGIN
  3501. ;   2494  3        FILE_ERROR (.STATUS);
  3502. ;   2495  3        RETURN KER_RMS32;
  3503. ;   2496  2        END;
  3504. ;   2497  2     
  3505. ;   2498  2    !
  3506. ;   2499  2    ! Now we can close the file
  3507. ;   2500  2    !
  3508. ;   2501  2        STATUS = $CLOSE (FAB = .LOG_FAB);
  3509. ;   2502  2     
  3510. ;   2503  2        IF NOT .STATUS THEN FILE_ERROR (.STATUS);
  3511. ;   2504  2     
  3512. ;   2505  2    !
  3513. ;   2506  2    ! And return the result
  3514. ;   2507  2    !
  3515. ;   2508  2        RETURN .STATUS;
  3516. ;   2509  1        END;                    ! End of LOG_CLOSE
  3517.  
  3518.  
  3519.  
  3520.     .EXTRN  SYS$DISCONNECT
  3521.  
  3522.     .ENTRY  LOG_CLOSE, ^M<R2,R3>         ;LOG_CLOSE, Save R2,R3               2418                    000C   00000
  3523.     MOVAB   G^U.6, R3             ;U.6, R3                                     53 00000000V  00  9E   00002
  3524.     SUBL2   #8, SP                 ;#8, SP                                     5E         08  C2   00009
  3525.     MOVL    8(AP), R2             ;LOG_RAB, R2                   2478            52    08   AC  D0   0000C
  3526.     TSTL    24(R2)                 ;24(R2)                                      18   A2  D5   00010
  3527.     BLEQ    1$                 ;1$                                               09  15   00013
  3528.     PUSHL   R2                 ;R2                                               52  DD   00015
  3529.     CALLS   #1, G^U.1             ;#1, U.1                          00000000V  00         01  FB   00017
  3530. 1$:    MOVZWL  #256, 4(SP)             ;#256, REC_SIZE               2483       04   AE     0100   8F  3C   0001E
  3531.     MOVL    40(R2), (SP)             ;40(R2), REC_ADDRESS               2484            6E    28   A2  D0   00024
  3532.     PUSHL   SP                 ;SP                       2485                  5E  DD   00028
  3533.     PUSHAB  8(SP)                 ;REC_SIZE                                      08   AE  9F   0002A
  3534.     CALLS   #2, G^LIB$FREE_VM         ;#2, LIB$FREE_VM                      00000000G  00         02  FB   0002D
  3535.     PUSHL   R2                 ;R2                       2489                  52  DD   00034
  3536.     CALLS   #1, G^SYS$DISCONNECT         ;#1, SYS$DISCONNECT                      00000000G  00         01  FB   00036
  3537.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   0003D
  3538.     BLBS    R2, 2$                 ;STATUS, 2$                   2491            0D         52  E8   00040
  3539.     PUSHL   R2                 ;STATUS                   2494                  52  DD   00043
  3540.     CALLS   #1, (R3)             ;#1, FILE_ERROR                                 63         01  FB   00045
  3541.     MOVL    #KER_RMS32, R0             ;#KER_RMS32, R0               2495            50 00000000G  8F  D0   00048
  3542.     RET                      ;                                               04   0004F
  3543. 2$:    PUSHL   4(AP)                 ;LOG_FAB                   2501             04   AC  DD   00050
  3544.     CALLS   #1, G^SYS$CLOSE             ;#1, SYS$CLOSE                          00000000G  00         01  FB   00053
  3545.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   0005A
  3546.     BLBS    R2, 3$                 ;STATUS, 3$                   2503            05         52  E8   0005D
  3547.     PUSHL   R2                 ;STATUS                                           52  DD   00060
  3548.     CALLS   #1, (R3)             ;#1, FILE_ERROR                                 63         01  FB   00062
  3549. 3$:    MOVL    R2, R0                 ;STATUS, R0                   2508            50         52  D0   00065
  3550.     RET                      ;                                               04   00068
  3551.  
  3552. ; Routine Size:  105 bytes,    Routine Base:  $CODE$ + 0F27
  3553.  
  3554.  
  3555. ;   2510  1     
  3556. ;   2511  1     %SBTTL 'LOG_CHAR - Log a character to a file'
  3557. ;   2512  1     
  3558. ;   2513  1    GLOBAL ROUTINE LOG_CHAR (CH, LOG_RAB) =
  3559. ;   2514  1     
  3560. ;   2515  1    !++
  3561. ;   2516  1    ! FUNCTIONAL DESCRIPTION:
  3562. ;   2517  1    !
  3563. ;   2518  1    ! This routine will write one character to an open log file.
  3564. ;   2519  1    !If the buffer becomes filled, it will dump it.  It will also
  3565. ;   2520  1    !dump the buffer if a carriage return line feed is seen.
  3566. ;   2521  1    !
  3567. ;   2522  1    ! CALLING SEQUENCE:
  3568. ;   2523  1    !
  3569. ;   2524  1    !    STATUS = LOG_CHAR (.CH, LOG_RAB);
  3570. ;   2525  1    !
  3571. ;   2526  1    ! INPUT PARAMETERS:
  3572. ;   2527  1    !
  3573. ;   2528  1    !    CH - The character to write to the file.
  3574. ;   2529  1    !
  3575. ;   2530  1    !    LOG_RAB - The address of the log file RAB.
  3576. ;   2531  1    !
  3577. ;   2532  1    ! IMPLICIT INPUTS:
  3578. ;   2533  1    !
  3579. ;   2534  1    !    None.
  3580. ;   2535  1    !
  3581. ;   2536  1    ! OUPTUT PARAMETERS:
  3582. ;   2537  1    !
  3583. ;   2538  1    !    None.
  3584. ;   2539  1    !
  3585. ;   2540  1    ! IMPLICIT OUTPUTS:
  3586. ;   2541  1    !
  3587. ;   2542  1    !    None.
  3588. ;   2543  1    !
  3589. ;   2544  1    ! COMPLETION CODES:
  3590. ;   2545  1    !
  3591. ;   2546  1    !    Any error returned by LOG_PUT, else TRUE.
  3592. ;   2547  1    !
  3593. ;   2548  1    ! SIDE EFFECTS:
  3594. ;   2549  1    !
  3595. ;   2550  1    !    None.
  3596. ;   2551  1    !
  3597. ;   2552  1    !--
  3598. ;   2553  1     
  3599. ;   2554  2        BEGIN
  3600. ;   2555  2    !
  3601. ;   2556  2    ! Completion codes returned:
  3602. ;   2557  2    !
  3603. ;   2558  2        EXTERNAL LITERAL
  3604. ;   2559  2        KER_NORMAL;                ! Normal return
  3605. ;   2560  2     
  3606. ;   2561  2        MAP
  3607. ;   2562  2        LOG_RAB : REF $RAB_DECL;        ! Log file RAB
  3608. ;   2563  2     
  3609. ;   2564  2        LOCAL
  3610. ;   2565  2        STATUS;                    ! Random status value
  3611. ;   2566  2     
  3612. ;   2567  2    !
  3613. ;   2568  2    ! If this character is a line feed, and previous was a carriage return, then
  3614. ;   2569  2    ! dump the buffer and return.
  3615. ;   2570  2    !
  3616. ;   2571  2     
  3617. ;   2572  2        IF .CH EQL CHR_LFD
  3618. ;   2573  2        THEN
  3619. ;   2574  3        BEGIN
  3620. ;   2575  3    !
  3621. ;   2576  3    ! If we seem to have overfilled the buffer, that is because we saw a CR
  3622. ;   2577  3    ! last, and had no place to put it.  Just reset the size and dump the buffer.
  3623. ;   2578  3    !
  3624. ;   2579  3     
  3625. ;   2580  3        IF .LOG_RAB [RAB$L_CTX] GTR LOG_BUFF_SIZE
  3626. ;   2581  3        THEN
  3627. ;   2582  4            BEGIN
  3628. ;   2583  4            LOG_RAB [RAB$L_CTX] = LOG_BUFF_SIZE;
  3629. ;   2584  4            RETURN LOG_PUT (.LOG_RAB);
  3630. ;   2585  3            END;
  3631. ;   2586  3     
  3632. ;   2587  3    !
  3633. ;   2588  3    ! If last character in buffer is a CR, then dump buffer without the CR
  3634. ;   2589  3    !
  3635. ;   2590  3     
  3636. ;   2591  3        IF CH$RCHAR (CH$PTR (.LOG_RAB [RAB$L_RBF], .LOG_RAB [RAB$L_CTX] - 1)) EQL CHR_CRT
  3637. ;   2592  3        THEN
  3638. ;   2593  4            BEGIN
  3639. ;   2594  4            LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] - 1;
  3640. ;   2595  4            RETURN LOG_PUT (.LOG_RAB);
  3641. ;   2596  3            END;
  3642. ;   2597  3     
  3643. ;   2598  2        END;
  3644. ;   2599  2     
  3645. ;   2600  2    !
  3646. ;   2601  2    ! Don't need to dump buffer because of end of line problems.  Check if
  3647. ;   2602  2    ! the buffer is full.
  3648. ;   2603  2    !
  3649. ;   2604  2     
  3650. ;   2605  2        IF .LOG_RAB [RAB$L_CTX] GEQ LOG_BUFF_SIZE
  3651. ;   2606  2        THEN
  3652. ;   2607  3        BEGIN
  3653. ;   2608  3    !
  3654. ;   2609  3    ! If character we want to store is a carriage return, then just count it and
  3655. ;   2610  3    ! don't dump the buffer yet.
  3656. ;   2611  3    !
  3657. ;   2612  3     
  3658. ;   2613  3        IF .CH EQL CHR_CRT
  3659. ;   2614  3        THEN
  3660. ;   2615  4            BEGIN
  3661. ;   2616  4            LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] + 1;
  3662. ;   2617  4            RETURN KER_NORMAL;
  3663. ;   2618  3            END;
  3664. ;   2619  3     
  3665. ;   2620  3    !
  3666. ;   2621  3    ! We must dump the buffer to make room for more characters
  3667. ;   2622  3    !
  3668. ;   2623  3        STATUS = LOG_PUT (.LOG_RAB);
  3669. ;   2624  3     
  3670. ;   2625  3        IF NOT .STATUS THEN RETURN .STATUS;
  3671. ;   2626  3     
  3672. ;   2627  2        END;
  3673. ;   2628  2     
  3674. ;   2629  2    !
  3675. ;   2630  2    ! Here when we have some room to store the character
  3676. ;   2631  2    !
  3677. ;   2632  2        CH$WCHAR (.CH, CH$PTR (.LOG_RAB [RAB$L_RBF], .LOG_RAB [RAB$L_CTX]));
  3678. ;   2633  2        LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] + 1;
  3679. ;   2634  2        RETURN KER_NORMAL;
  3680. ;   2635  1        END;                    ! End of LOG_CHAR
  3681.  
  3682.  
  3683.  
  3684.  
  3685.  
  3686.     .ENTRY  LOG_CHAR, ^M<R2,R3>         ;LOG_CHAR, Save R2,R3               2513                    000C   00000
  3687.     MOVAB   G^U.1, R3             ;U.1, R3                                     53 00000000V  00  9E   00002
  3688.     CMPL    4(AP), #10             ;CH, #10                   2572            0A    04   AC  D1   00009
  3689.     BNEQ    3$                 ;3$                                               2B  12   0000D
  3690.     MOVL    8(AP), R2             ;LOG_RAB, R2                   2580            52    08   AC  D0   0000F
  3691.     CMPL    24(R2), #256             ;24(R2), #256                          00000100   8F    18   A2  D1   00013
  3692.     BLEQ    1$                 ;1$                                               08  15   0001B
  3693.     MOVZWL  #256, 24(R2)             ;#256, 24(R2)                   2583       18   A2     0100   8F  3C   0001D
  3694.     BRB     2$                 ;2$                       2584                  0F  11   00023
  3695. 1$:    ADDL3   24(R2), 40(R2), R0         ;24(R2), 40(R2), R0               2591       28   A2    18   A2  C1   00025
  3696.                          ;                                         50       0002A
  3697.     CMPB    -1(R0), #13             ;-1(R0), #13                                     0D    FF   A0  91   0002B
  3698.     BNEQ    3$                 ;3$                                               09  12   0002F
  3699.     DECL    24(R2)                 ;24(R2)                   2594             18   A2  D7   00031
  3700. 2$:    PUSHL   R2                 ;R2                       2595                  52  DD   00034
  3701.     CALLS   #1, (R3)             ;#1, LOG_PUT                                     63         01  FB   00036
  3702.     RET                      ;                                               04   00039
  3703. 3$:    MOVL    8(AP), R2             ;LOG_RAB, R2                   2605            52    08   AC  D0   0003A
  3704.     CMPL    24(R2), #256             ;24(R2), #256                          00000100   8F    18   A2  D1   0003E
  3705.     BLSS    4$                 ;4$                                               0E  19   00046
  3706.     CMPL    4(AP), #13             ;CH, #13                   2613            0D    04   AC  D1   00048
  3707.     BEQL    5$                 ;5$                                               12  13   0004C
  3708.     PUSHL   R2                 ;R2                       2623                  52  DD   0004E
  3709.     CALLS   #1, (R3)             ;#1, LOG_PUT                                     63         01  FB   00050
  3710.     BLBC    R0, 6$                 ;STATUS, 6$                   2625            14         50  E9   00053
  3711. 4$:    ADDL3   24(R2), 40(R2), R0         ;24(R2), 40(R2), R0               2632       28   A2    18   A2  C1   00056
  3712.                          ;                                         50       0005B
  3713.     MOVB    4(AP), (R0)             ;CH, (R0)                                     60    04   AC  90   0005C
  3714. 5$:    INCL    24(R2)                 ;24(R2)                   2633             18   A2  D6   00060
  3715.     MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               2634            50 00000000G  8F  D0   00063
  3716. 6$:    RET                      ;                                               04   0006A
  3717.  
  3718. ; Routine Size:  107 bytes,    Routine Base:  $CODE$ + 0F90
  3719.  
  3720.  
  3721. ;   2636  1     
  3722. ;   2637  1     %SBTTL 'LOG_LINE - Log a line to a log file'
  3723. ;   2638  1     
  3724. ;   2639  1    GLOBAL ROUTINE LOG_LINE (LINE_DESC, LOG_RAB) =
  3725. ;   2640  1     
  3726. ;   2641  1    !++
  3727. ;   2642  1    ! FUNCTIONAL DESCRIPTION:
  3728. ;   2643  1    !
  3729. ;   2644  1    ! This routine will write an entire line to a log file.  And previously
  3730. ;   2645  1    ! written characters will be dumped first.
  3731. ;   2646  1    !
  3732. ;   2647  1    ! CALLING SEQUENCE:
  3733. ;   2648  1    !
  3734. ;   2649  1    !    STATUS = LOG_LINE (LINE_DESC, LOG_RAB);
  3735. ;   2650  1    !
  3736. ;   2651  1    ! INPUT PARAMETERS:
  3737. ;   2652  1    !
  3738. ;   2653  1    !    LINE_DESC - Address of descriptor for string to be written
  3739. ;   2654  1    !
  3740. ;   2655  1    !    LOG_RAB - RAB for log file
  3741. ;   2656  1    !
  3742. ;   2657  1    ! IMPLICIT INPUTS:
  3743. ;   2658  1    !
  3744. ;   2659  1    !    None.
  3745. ;   2660  1    !
  3746. ;   2661  1    ! OUPTUT PARAMETERS:
  3747. ;   2662  1    !
  3748. ;   2663  1    !    None.
  3749. ;   2664  1    !
  3750. ;   2665  1    ! IMPLICIT OUTPUTS:
  3751. ;   2666  1    !
  3752. ;   2667  1    !    None.
  3753. ;   2668  1    !
  3754. ;   2669  1    ! COMPLETION CODES:
  3755. ;   2670  1    !
  3756. ;   2671  1    !   KER_NORMAL or LOG_PUT error code.
  3757. ;   2672  1    !
  3758. ;   2673  1    ! SIDE EFFECTS:
  3759. ;   2674  1    !
  3760. ;   2675  1    !    None.
  3761. ;   2676  1    !
  3762. ;   2677  1    !--
  3763. ;   2678  1     
  3764. ;   2679  2        BEGIN
  3765. ;   2680  2     
  3766. ;   2681  2        MAP
  3767. ;   2682  2        LINE_DESC : REF BLOCK [8, BYTE],    ! Descriptor for string
  3768. ;   2683  2        LOG_RAB : REF $RAB_DECL;        ! RAB for file
  3769. ;   2684  2     
  3770. ;   2685  2        LOCAL
  3771. ;   2686  2        STATUS;                    ! Random status value
  3772. ;   2687  2     
  3773. ;   2688  2    !
  3774. ;   2689  2    ! First check if anything is already in the buffer
  3775. ;   2690  2    !
  3776. ;   2691  2     
  3777. ;   2692  2        IF .LOG_RAB [RAB$L_CTX] GTR 0
  3778. ;   2693  2        THEN
  3779. ;   2694  3        BEGIN
  3780. ;   2695  3        STATUS = LOG_PUT (.LOG_RAB);        ! Yes, write it out
  3781. ;   2696  3     
  3782. ;   2697  3        IF NOT .STATUS THEN RETURN .STATUS;    ! Pass back any errors
  3783. ;   2698  3     
  3784. ;   2699  2        END;
  3785. ;   2700  2     
  3786. ;   2701  2    !
  3787. ;   2702  2    ! Copy the data to the buffer
  3788. ;   2703  2    !
  3789. ;   2704  2        CH$COPY (.LINE_DESC [DSC$W_LENGTH], CH$PTR (.LINE_DESC [DSC$A_POINTER]), CHR_NUL,
  3790. ;   2705  2        LOG_BUFF_SIZE, CH$PTR (.LOG_RAB [RAB$L_RBF]));
  3791. ;   2706  2     
  3792. ;   2707  2        IF .LINE_DESC [DSC$W_LENGTH] GTR LOG_BUFF_SIZE
  3793. ;   2708  2        THEN
  3794. ;   2709  2        LOG_RAB [RAB$L_CTX] = LOG_BUFF_SIZE
  3795. ;   2710  2        ELSE
  3796. ;   2711  2        LOG_RAB [RAB$L_CTX] = .LINE_DESC [DSC$W_LENGTH];
  3797. ;   2712  2     
  3798. ;   2713  2    !
  3799. ;   2714  2    ! Now just dump the buffer
  3800. ;   2715  2    !
  3801. ;   2716  2        RETURN LOG_PUT (.LOG_RAB);
  3802. ;   2717  1        END;                    ! End of LOG_LINE
  3803.  
  3804.  
  3805.  
  3806.  
  3807.  
  3808.     .ENTRY  LOG_LINE, ^M<R2,R3,R4,R5,R6,R7,- ;LOG_LINE, Save R2,R3,R4,R5,R6,R7,R8  2639                    01FC   00000
  3809.         R8>                 ;
  3810.     MOVAB   G^U.1, R8             ;U.1, R8                                     58 00000000V  00  9E   00002
  3811.     MOVL    8(AP), R6             ;LOG_RAB, R6                   2692            56    08   AC  D0   00009
  3812.     TSTL    24(R6)                 ;24(R6)                                      18   A6  D5   0000D
  3813.     BLEQ    1$                 ;1$                                               08  15   00010
  3814.     PUSHL   R6                 ;R6                       2695                  56  DD   00012
  3815.     CALLS   #1, (R8)             ;#1, LOG_PUT                                     68         01  FB   00014
  3816.     BLBC    R0, 4$                 ;STATUS, 4$                   2697            26         50  E9   00017
  3817. 1$:    MOVL    4(AP), R7             ;LINE_DESC, R7                   2704            57    04   AC  D0   0001A
  3818.     MOVC5   (R7), @4(R7), #0, #256, @40(R6)  ;(R7), @4(R7), #0, #256, @40(R6)      2705       04   B7         67  2C   0001E
  3819.                          ;                            0100   8F         00       00022
  3820.                          ;                                    28   B6       00026
  3821.     CMPW    (R7), #256             ;(R7), #256                   2707     0100   8F         67  B1   00028
  3822.     BLEQU   2$                 ;2$                                               08  1B   0002D
  3823.     MOVZWL  #256, 24(R6)             ;#256, 24(R6)                   2709       18   A6     0100   8F  3C   0002F
  3824.     BRB     3$                 ;3$                                               04  11   00035
  3825. 2$:    MOVZWL  (R7), 24(R6)             ;(R7), 24(R6)                   2711       18   A6         67  3C   00037
  3826. 3$:    PUSHL   R6                 ;R6                       2716                  56  DD   0003B
  3827.     CALLS   #1, (R8)             ;#1, LOG_PUT                                     68         01  FB   0003D
  3828. 4$:    RET                      ;                                               04   00040
  3829.  
  3830. ; Routine Size:  65 bytes,    Routine Base:  $CODE$ + 0FFB
  3831.  
  3832.  
  3833. ;   2718  1     %SBTTL 'LOG_FAOL - Log an FAO string to the log file'
  3834. ;   2719  1     
  3835. ;   2720  1    GLOBAL ROUTINE LOG_FAOL (FAOL_DESC, FAOL_PARAMS, LOG_RAB) =
  3836. ;   2721  1     
  3837. ;   2722  1    !++
  3838. ;   2723  1    ! FUNCTIONAL DESCRIPTION:
  3839. ;   2724  1    !
  3840. ;   2725  1    ! This routine will write an FAOL string to the output file.
  3841. ;   2726  1    !
  3842. ;   2727  1    ! CALLING SEQUENCE:
  3843. ;   2728  1    !
  3844. ;   2729  1    !    STATUS = LOG_FAOL (FAOL_DESC, FAOL_PARAMS, LOG_RAB);
  3845. ;   2730  1    !
  3846. ;   2731  1    ! INPUT PARAMETERS:
  3847. ;   2732  1    !
  3848. ;   2733  1    !    FAOL_DESC - Address of descriptor for string to be written
  3849. ;   2734  1    !
  3850. ;   2735  1    !    FAOL_PARAMS - Parameter list for FAOL call
  3851. ;   2736  1    !
  3852. ;   2737  1    !    LOG_RAB - RAB for log file
  3853. ;   2738  1    !
  3854. ;   2739  1    ! IMPLICIT INPUTS:
  3855. ;   2740  1    !
  3856. ;   2741  1    !    None.
  3857. ;   2742  1    !
  3858. ;   2743  1    ! OUPTUT PARAMETERS:
  3859. ;   2744  1    !
  3860. ;   2745  1    !    None.
  3861. ;   2746  1    !
  3862. ;   2747  1    ! IMPLICIT OUTPUTS:
  3863. ;   2748  1    !
  3864. ;   2749  1    !    None.
  3865. ;   2750  1    !
  3866. ;   2751  1    ! COMPLETION CODES:
  3867. ;   2752  1    !
  3868. ;   2753  1    !    KER_NORMAL or $FAOL or LOG_PUT error code.
  3869. ;   2754  1    !
  3870. ;   2755  1    ! SIDE EFFECTS:
  3871. ;   2756  1    !
  3872. ;   2757  1    !    None.
  3873. ;   2758  1    !
  3874. ;   2759  1    !--
  3875. ;   2760  1     
  3876. ;   2761  2        BEGIN
  3877. ;   2762  2    !
  3878. ;   2763  2    ! Completion codes returned:
  3879. ;   2764  2    !
  3880. ;   2765  2        EXTERNAL LITERAL
  3881. ;   2766  2        KER_NORMAL;                ! Normal return
  3882. ;   2767  2     
  3883. ;   2768  2        MAP
  3884. ;   2769  2        FAOL_DESC : REF BLOCK [8, BYTE],    ! Descriptor for string
  3885. ;   2770  2        LOG_RAB : REF $RAB_DECL;        ! RAB for file
  3886. ;   2771  2     
  3887. ;   2772  2        LITERAL
  3888. ;   2773  2        FAOL_BUFSIZ = 256;            ! Length of buffer
  3889. ;   2774  2     
  3890. ;   2775  2        LOCAL
  3891. ;   2776  2        FAOL_BUFFER : VECTOR [FAOL_BUFSIZ, BYTE], ! Buffer for FAOL output
  3892. ;   2777  2        FAOL_BUF_DESC : BLOCK [8, BYTE],    ! Descriptor for buffer
  3893. ;   2778  2        STATUS;                    ! Random status value
  3894. ;   2779  2     
  3895. ;   2780  2    !
  3896. ;   2781  2    ! Initialize descriptor for buffer
  3897. ;   2782  2    !
  3898. ;   2783  2        FAOL_BUF_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
  3899. ;   2784  2        FAOL_BUF_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
  3900. ;   2785  2        FAOL_BUF_DESC [DSC$A_POINTER] = FAOL_BUFFER;
  3901. ;   2786  2        FAOL_BUF_DESC [DSC$W_LENGTH] = FAOL_BUFSIZ;
  3902. ;   2787  2    !
  3903. ;   2788  2    ! Now do the FAOL to generate the full text
  3904. ;   2789  2    !
  3905. ; P 2790  2        STATUS = $FAOL (CTRSTR = .FAOL_DESC, OUTBUF = FAOL_BUF_DESC,
  3906. ;   2791  2        OUTLEN = FAOL_BUF_DESC [DSC$W_LENGTH], PRMLST = .FAOL_PARAMS);
  3907. ;   2792  2        IF NOT .STATUS THEN RETURN .STATUS;
  3908. ;   2793  2    !
  3909. ;   2794  2    ! Dump the text into the file
  3910. ;   2795  2    !
  3911. ;   2796  2        INCR I FROM 1 TO .FAOL_BUF_DESC [DSC$W_LENGTH] DO
  3912. ;   2797  3        BEGIN
  3913. ;   2798  3        STATUS = LOG_CHAR ( .FAOL_BUFFER [.I - 1], .LOG_RAB);
  3914. ;   2799  3        IF NOT .STATUS THEN RETURN .STATUS;
  3915. ;   2800  2        END;
  3916. ;   2801  2     
  3917. ;   2802  2        RETURN KER_NORMAL;
  3918. ;   2803  2     
  3919. ;   2804  1        END;                    ! End of LOG_FAOL
  3920.  
  3921.  
  3922.  
  3923.     .EXTRN  SYS$FAOL
  3924.  
  3925.     .ENTRY  LOG_FAOL, ^M<R2,R3>         ;LOG_FAOL, Save R2,R3               2720                    000C   00000
  3926.     MOVAB   -260(SP), SP             ;-260(SP), SP                                     5E     FEFC   CE  9E   00002
  3927.     PUSHL   #17694976             ;#17694976                   2786           010E0100   8F  DD   00007
  3928.     MOVAB   8(SP), 4(SP)             ;FAOL_BUFFER, FAOL_BUF_DESC+4           2785       04   AE    08   AE  9E   0000D
  3929.     PUSHL   8(AP)                 ;FAOL_PARAMS                   2791             08   AC  DD   00012
  3930.     PUSHAB  4(SP)                 ;FAOL_BUF_DESC                                      04   AE  9F   00015
  3931.     PUSHAB  8(SP)                 ;FAOL_BUF_DESC                                      08   AE  9F   00018
  3932.     PUSHL   4(AP)                 ;FAOL_DESC                                      04   AC  DD   0001B
  3933.     CALLS   #4, G^SYS$FAOL             ;#4, SYS$FAOL                          00000000G  00         04  FB   0001E
  3934.     BLBC    R0, 3$                 ;STATUS, 3$                   2792            22         50  E9   00025
  3935.     MOVZWL  (SP), R3             ;FAOL_BUF_DESC, R3               2796            53         6E  3C   00028
  3936.     CLRL    R2                 ;I                                               52  D4   0002B
  3937.     BRB     2$                 ;2$                                               10  11   0002D
  3938. 1$:    PUSHL   12(AP)                 ;LOG_RAB                   2798             0C   AC  DD   0002F
  3939.     MOVZBL  11(SP)[R2], -(SP)         ;FAOL_BUFFER-1[I], -(SP)                             7E    0B AE42  9A   00032
  3940.     CALLS   #2, W^LOG_CHAR             ;#2, LOG_CHAR                              FF18   CF         02  FB   00037
  3941.     BLBC    R0, 3$                 ;STATUS, 3$                   2799            0B         50  E9   0003C
  3942. 2$:    AOBLEQ  R3, R2, 1$             ;R3, I, 1$                   2796            52         53  F3   0003F
  3943.                          ;                                         EC       00042
  3944.     MOVL    #KER_NORMAL, R0             ;#KER_NORMAL, R0               2802            50 00000000G  8F  D0   00043
  3945. 3$:    RET                      ;                                               04   0004A
  3946.  
  3947. ; Routine Size:  75 bytes,    Routine Base:  $CODE$ + 103C
  3948.  
  3949.  
  3950. ;   2805  1     
  3951. ;   2806  1     %SBTTL 'LOG_PUT - Write a record buffer for a log file'
  3952. ;   2807  1    ROUTINE LOG_PUT (LOG_RAB) =
  3953. ;   2808  1     
  3954. ;   2809  1    !++
  3955. ;   2810  1    ! FUNCTIONAL DESCRIPTION:
  3956. ;   2811  1    !
  3957. ;   2812  1    ! This routine will output one buffer for a log file.
  3958. ;   2813  1    !
  3959. ;   2814  1    ! CALLING SEQUENCE:
  3960. ;   2815  1    !
  3961. ;   2816  1    !    STATUS = LOG_PUT (LOG_RAB);
  3962. ;   2817  1    !
  3963. ;   2818  1    ! INPUT PARAMETERS:
  3964. ;   2819  1    !
  3965. ;   2820  1    !    LOG_RAB - RAB for log file.
  3966. ;   2821  1    !
  3967. ;   2822  1    ! IMPLICIT INPUTS:
  3968. ;   2823  1    !
  3969. ;   2824  1    !    None.
  3970. ;   2825  1    !
  3971. ;   2826  1    ! OUPTUT PARAMETERS:
  3972. ;   2827  1    !
  3973. ;   2828  1    !    None.
  3974. ;   2829  1    !
  3975. ;   2830  1    ! IMPLICIT OUTPUTS:
  3976. ;   2831  1    !
  3977. ;   2832  1    !    None.
  3978. ;   2833  1    !
  3979. ;   2834  1    ! COMPLETION CODES:
  3980. ;   2835  1    !
  3981. ;   2836  1    !    Status value from RMS
  3982. ;   2837  1    !
  3983. ;   2838  1    ! SIDE EFFECTS:
  3984. ;   2839  1    !
  3985. ;   2840  1    !    None.
  3986. ;   2841  1    !
  3987. ;   2842  1    !--
  3988. ;   2843  1     
  3989. ;   2844  2        BEGIN
  3990. ;   2845  2     
  3991. ;   2846  2        MAP
  3992. ;   2847  2        LOG_RAB : REF $RAB_DECL;        ! RAB for file
  3993. ;   2848  2     
  3994. ;   2849  2    !
  3995. ;   2850  2    ! Calculate record size
  3996. ;   2851  2    !
  3997. ;   2852  2        LOG_RAB [RAB$W_RSZ] = .LOG_RAB [RAB$L_CTX];
  3998. ;   2853  2        LOG_RAB [RAB$W_USZ] = .LOG_RAB [RAB$W_RSZ];
  3999. ;   2854  2    !
  4000. ;   2855  2    ! Buffer will be empty when we finish
  4001. ;   2856  2    !
  4002. ;   2857  2        LOG_RAB [RAB$L_CTX] = 0;
  4003. ;   2858  2    !
  4004. ;   2859  2    ! And call RMS to write the buffer
  4005. ;   2860  2    !
  4006. ;   2861  2        RETURN $PUT (RAB = .LOG_RAB);
  4007. ;   2862  1        END;                    ! End of LOG_PUT
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013. ;LOG_PUT
  4014. U.1:    .WORD   ^M<>                 ;Save nothing                   2807                    0000   00000
  4015.     MOVL    4(AP), R0             ;LOG_RAB, R0                   2852            50    04   AC  D0   00002
  4016.     MOVW    24(R0), 34(R0)             ;24(R0), 34(R0)                            22   A0    18   A0  B0   00006
  4017.     MOVW    34(R0), 32(R0)             ;34(R0), 32(R0)               2853       20   A0    22   A0  B0   0000B
  4018.     CLRL    24(R0)                 ;24(R0)                   2857             18   A0  D4   00010
  4019.     PUSHL   R0                 ;R0                       2861                  50  DD   00013
  4020.     CALLS   #1, G^SYS$PUT             ;#1, SYS$PUT                          00000000G  00         01  FB   00015
  4021.     RET                      ;                                               04   0001C
  4022.  
  4023. ; Routine Size:  29 bytes,    Routine Base:  $CODE$ + 1087
  4024.  
  4025.  
  4026. ;   2863  1     %SBTTL 'FILE_ERROR - Error processing for all RMS errors'
  4027. ;   2864  1    ROUTINE FILE_ERROR (STATUS) : NOVALUE =
  4028. ;   2865  1     
  4029. ;   2866  1    !++
  4030. ;   2867  1    ! FUNCTIONAL DESCRIPTION:
  4031. ;   2868  1    !
  4032. ;   2869  1    !    This routine will process all of the RMS-32 error returns.  It will
  4033. ;   2870  1    !    get the text for the error and then it will issue a KER_ERROR for
  4034. ;   2871  1    !    the RMS failure.
  4035. ;   2872  1    !
  4036. ;   2873  1    ! CALLING SEQUENCE:
  4037. ;   2874  1    !
  4038. ;   2875  1    !    FILE_ERROR();
  4039. ;   2876  1    !
  4040. ;   2877  1    ! INPUT PARAMETERS:
  4041. ;   2878  1    !
  4042. ;   2879  1    !    None.
  4043. ;   2880  1    !
  4044. ;   2881  1    ! IMPLICIT INPUTS:
  4045. ;   2882  1    !
  4046. ;   2883  1    !    STATUS - RMS error status.
  4047. ;   2884  1    !    FILE_NAME - File name and extension.
  4048. ;   2885  1    !    FILE_SIZE - Size of the thing in FILE_NAME.
  4049. ;   2886  1    !
  4050. ;   2887  1    ! OUTPUT PARAMETERS:
  4051. ;   2888  1    !
  4052. ;   2889  1    !    None.
  4053. ;   2890  1    !
  4054. ;   2891  1    ! IMPLICIT OUTPUTS:
  4055. ;   2892  1    !
  4056. ;   2893  1    !    None.
  4057. ;   2894  1    !
  4058. ;   2895  1    ! COMPLETION CODES:
  4059. ;   2896  1    !
  4060. ;   2897  1    !    None.
  4061. ;   2898  1    !
  4062. ;   2899  1    ! SIDE EFFECTS:
  4063. ;   2900  1    !
  4064. ;   2901  1    !    None.
  4065. ;   2902  1    !
  4066. ;   2903  1    !--
  4067. ;   2904  1     
  4068. ;   2905  2        BEGIN
  4069. ;   2906  2    !
  4070. ;   2907  2    ! KERMIT completion codes 
  4071. ;   2908  2    !
  4072. ;   2909  2        EXTERNAL LITERAL
  4073. ;   2910  2        KER_RMS32;                ! RMS-32 error
  4074. ;   2911  2     
  4075. ;   2912  2        LOCAL
  4076. ;   2913  2        ERR_BUFFER : VECTOR [CH$ALLOCATION (MAX_MSG)],
  4077. ;   2914  2        ERR_DESC : BLOCK [8, BYTE] PRESET    ! String descriptor to
  4078. ;   2915  2               ([DSC$B_CLASS ] = DSC$K_CLASS_S,    !  the error buffer
  4079. ;   2916  2            [DSC$B_DTYPE ] = DSC$K_DTYPE_T,    !  standard string
  4080. ;   2917  2            [DSC$W_LENGTH ] = MAX_MSG,    !  descriptor
  4081. ;   2918  2            [DSC$A_POINTER ] = ERR_BUFFER);
  4082. ;   2919  2     
  4083. ; P 2920  2        $GETMSG (MSGID = .STATUS,
  4084. ; P 2921  2                 MSGLEN = ERR_DESC [DSC$W_LENGTH],
  4085. ; P 2922  2                 BUFADR = ERR_DESC, 
  4086. ;   2923  2                 FLAGS = 1);
  4087. ;   2924  2        LIB$SIGNAL (KER_RMS32, 2, ERR_DESC, FILE_DESC);
  4088. ;   2925  1        END;                    ! End of FILE_ERROR
  4089.  
  4090.  
  4091.  
  4092.     .EXTRN  SYS$GETMSG
  4093.  
  4094. ;FILE_ERROR
  4095. U.6:    .WORD   ^M<>                 ;Save nothing                   2864                    0000   00000
  4096.     MOVAB   -1008(SP), SP             ;-1008(SP), SP                                     5E     FC10   CE  9E   00002
  4097.     PUSHL   #17695722             ;#17695722                   2918           010E03EA   8F  DD   00007
  4098.     MOVAB   8(SP), 4(SP)             ;ERR_BUFFER, ERR_DESC+4                        04   AE    08   AE  9E   0000D
  4099.     MOVQ    #1, -(SP)             ;#1, -(SP)                   2923            7E         01  7D   00012
  4100.     PUSHAB  8(SP)                 ;ERR_DESC                                      08   AE  9F   00015
  4101.     PUSHAB  12(SP)                 ;ERR_DESC                                      0C   AE  9F   00018
  4102.     PUSHL   4(AP)                 ;STATUS                                      04   AC  DD   0001B
  4103.     CALLS   #5, G^SYS$GETMSG         ;#5, SYS$GETMSG                      00000000G  00         05  FB   0001E
  4104.     PUSHAB  G^FILE_DESC             ;FILE_DESC                   2924           00000000'  00  9F   00025
  4105.     PUSHAB  4(SP)                 ;ERR_DESC                                      04   AE  9F   0002B
  4106.     PUSHL   #2                 ;#2                                               02  DD   0002E
  4107.     PUSHL   #KER_RMS32             ;#KER_RMS32                                    00000000G  8F  DD   00030
  4108.     CALLS   #4, G^LIB$SIGNAL         ;#4, LIB$SIGNAL                      00000000G  00         04  FB   00036
  4109.     RET                      ;                       2925                  04   0003D
  4110.  
  4111. ; Routine Size:  62 bytes,    Routine Base:  $CODE$ + 10A4
  4112.  
  4113.  
  4114. ;   2926  1     %SBTTL 'End of KERFIL'
  4115. ;   2927  1    END                        ! End of module
  4116. ;   2928  1     
  4117. ;   2929  0    ELUDOM
  4118.  
  4119.  
  4120.  
  4121.  
  4122.  
  4123.  
  4124. ;                       PSECT SUMMARY
  4125. ;
  4126. ;    Name             Bytes                   Attributes
  4127. ;
  4128. ;  $OWN$                  857  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  4129. ;  $GLOBAL$                   20  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  4130. ;  $CODE$                 4322  NOVEC,NOWRT,  RD ,  EXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  4131. ;  .  ABS  .                    0  NOVEC,NOWRT,NORD ,NOEXE,NOSHR,  LCL,  ABS,  CON,NOPIC,ALIGN(0)
  4132. ;  $PLIT$                   44  NOVEC,NOWRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  4133.  
  4134.  
  4135.  
  4136.  
  4137. ;                Library Statistics
  4138. ;
  4139. ;                         -------- Symbols --------        Pages    Processing
  4140. ;    File                     Total    Loaded   Percent      Mapped    Time
  4141. ;
  4142. ;  SYS$COMMON:[SYSLIB]STARLET.L32;2         12540       136         1       721          00:00.4
  4143.  
  4144.  
  4145.  
  4146.  
  4147.  
  4148.  
  4149.  
  4150. ;                    COMMAND QUALIFIERS
  4151.  
  4152. ;    BLIS/LIS/MACH=(ASSEM,UNIQUE)/SOURCE=NOHEAD VMSFIL.BLI
  4153.  
  4154. ; Compilation Complete
  4155.  
  4156.     .END
  4157.