home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
archives
/
vmskermit32.zip
/
vmsfil.mar
< prev
next >
Wrap
Text File
|
1991-02-20
|
180KB
|
4,157 lines
; 0001 0 MODULE KERFIL (IDENT = '3.3.119',
; 0002 0 ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)) =
; 0003 1 BEGIN
; 0004 1 !<BLF/WIDTH:90>
; 0005 1
; 0006 1 !++
; 0007 1 ! FACILITY:
; 0008 1 ! KERMIT-32 Microcomputer to mainframe file transfer utility.
; 0009 1 !
; 0010 1 ! ABSTRACT:
; 0011 1 ! KERFIL contains all of the file processing for KERMIT-32. This
; 0012 1 ! module contains the routines to input/output characters to files
; 0013 1 ! and to open and close the files.
; 0014 1 !
; 0015 1 ! ENVIRONMENT:
; 0016 1 ! VAX/VMS user mode.
; 0017 1 !
; 0018 1 ! AUTHOR: Robert C. McQueen, CREATION DATE: 28-March-1983
; 0019 1 !
; 0020 1 !--
; 0021 1
; 0022 1 %SBTTL 'Table of Contents'
; 0023 1 %SBTTL 'Revision History'
; 0024 1
; 0025 1 !++
; 0026 1 !
; 0027 1 ! 1.0.000 By: Robert C. McQueen On: 28-March-1983
; 0028 1 ! Create this module.
; 0029 1 ! 1.0.001 By: Robert C. McQueen On: 4-April-1983
; 0030 1 ! Remove checks for <FF> in the input data stream.
; 0031 1 !
; 0032 1 ! 1.0.002 By: Robert C. McQueen On: 31-May-1983
; 0033 1 ! Fix a bad check in wildcard processing.
; 0034 1 !
; 0035 1 ! 1.0.003 By: Nick Bush On: 13-June-1983
; 0036 1 ! Add default file spec of .;0 so that wild-carded
; 0037 1 ! file types don't cause all version of a file to
; 0038 1 ! be transferred.
; 0039 1 !
; 0040 1 ! 1.0.004 By: Robert C. McQueen On: 20-July-1983
; 0041 1 ! Strip off the parity bit on the compares for incoming ASCII
; 0042 1 ! files.
; 0043 1 !
; 0044 1 ! 1.2.005 By: Robert C. McQueen On: 15-August-1983
; 0045 1 ! Attempt to improve the GET%FILE and make it smaller.
; 0046 1 ! Also start the implementation of the BLOCK file processing.
; 0047 1 !
; 0048 1 ! 2.0.006 Release VAX/VMS Kermit-32 version 2.0
; 0049 1 !
; 0050 1 ! 2.0.016 By: Nick Bush On: 4-Dec-1983
; 0051 1 ! Change how binary files are written to (hopefully) improve
; 0052 1 ! the performance. We will now use 510 records and only
; 0053 1 ! write out the record when it is filled (instead of writing
; 0054 1 ! one record per packet). This should cut down on the overhead
; 0055 1 ! substantially.
; 0056 1 !
; 0057 1 ! 2.0.017 By: Nick Bush On: 9-Dec-1983
; 0058 1 ! Fix processing for VFC format files. Also fix GET_ASCII
; 0059 1 ! for PRN and FTN record types. Change GET_ASCII so that
; 0060 1 ! 'normal' CR records get sent with trailing CRLF's instead
; 0061 1 ! of <LF>record<CR>. That was confusing too many people.
; 0062 1 !
; 0063 1 ! 2.0.022 By: Nick Bush On: 15-Dec-1983
; 0064 1 ! Add Fixed record size (512 byte) format for writing files.
; 0065 1 ! This can be used for .EXE files. Also clean up writing
; 0066 1 ! ASCII files so that we don't lose any characters.
; 0067 1 !
; 0068 1 ! 2.0.024 By: Robert C. McQueen On: 19-Dec-1983
; 0069 1 ! Delete FILE_DUMP.
; 0070 1 !
; 0071 1 ! 2.0.026 By: Nick Bush On: 3-Jan-1983
; 0072 1 ! Add options for format of file specification to be
; 0073 1 ! sent in file header packets. Also type out full file
; 0074 1 ! specification being sent/received instead of just
; 0075 1 ! the name we are telling the other end to use.
; 0076 1 !
; 0077 1 ! 2.0.030 By: Nick Bush On: 3-Feb-1983
; 0078 1 ! Add the capability of receiving a file with a different
; 0079 1 ! name than given by KERMSG. The RECEIVE and GET commands
; 0080 1 ! now really are different.
; 0081 1 !
; 0082 1 ! 2.0.035 By: Nick Bush On: 8-March-1984
; 0083 1 ! Add LOG SESSION command to set a log file for CONNECT.
; 0084 1 ! While we are doing so, clean up the command parsing a little
; 0085 1 ! so that we don't have as many COPY_xxx routines.
; 0086 1 !
; 0087 1 ! 2.0.036 By: Nick Bush On: 15-March-1984
; 0088 1 ! Fix PUT_FILE to correctly handle carriage returns which are
; 0089 1 ! not followed by line feeds. Count was being decremented
; 0090 1 ! Instead of incremented.
; 0091 1 !
; 0092 1 ! 2.0.040 By: Nick Bush On: 22-March-1984
; 0093 1 ! Fix processing of FORTRAN carriage control to handle lines
; 0094 1 ! which do not contain the carriage control character (i.e., zero
; 0095 1 ! length records). Previously, this type of record was sending
; 0096 1 ! infinite nulls.
; 0097 1 !
; 0098 1 ! 3.0.045 Start of version 3.
; 0099 1 !
; 0100 1 ! 3.0.046 By: Nick Bush On: 29-March-1984
; 0101 1 ! Fix debugging log file to correctly set/clear file open
; 0102 1 ! flag. Also make log files default to .LOG.
; 0103 1 !
; 0104 1 ! 3.0.050 By: Nick Bush On: 2-April-1984
; 0105 1 ! Add SET SERVER_TIMER to determine period between idle naks.
; 0106 1 ! Also allow for a routine to process file specs before
; 0107 1 ! FILE_OPEN uses them. This allows individual sites to
; 0108 1 ! restrict the format of file specifications used by Kermit.
; 0109 1 !
; 0110 1 ! 3.1.053 By: Robert C. McQueen On: 9-July-1984
; 0111 1 ! Fix FORTRAN carriage control processing to pass along
; 0112 1 ! any character from the carriage control column that is
; 0113 1 ! not really carriage control.
; 0114 1 !
; 0115 1 ! Start version 3.2
; 0116 1 !
; 0117 1 ! 3.2.067 By: Robert C. McQueen On: 8-May-1985
; 0118 1 ! Use $GETDVIW instead of $GETDVI.
; 0119 1 !
; 0120 1 ! 3.2.070 By: David Stevens On: 16-July-1985
; 0121 1 ! Put "Sending: " prompt into NEXT_FILE routine, to make
; 0122 1 ! VMS KERMIT similar to KERMIT-10.
; 0123 1 !
; 0124 1 ! 3.2.077 By: Robert McQueen On: 8-May-1986
; 0125 1 ! Fix FORTRAN CC once and for all (I hope).
; 0126 1 !
; 0127 1 ! Start of version 3.3
; 0128 1 !
; 0129 1 ! 3.3.105 By: Robert McQueen On: 8-July-1986
; 0130 1 ! Do some clean up and attempt to fix LINK-W-TRUNC errors
; 0131 1 ! from a BLISS-32 bug.
; 0132 1 !
; 0133 1 ! 3.3.106 By: Robert McQueen On: 8-July-1986
; 0134 1 ! Fix problem of closing a fixed file and losing data.
; 0135 1 !
; 0136 1 ! 3.3.111 By: Robert McQueen On: 2-Oct-1986
; 0137 1 ! Make Kermit-32 not eat the parity from a CR if a LF doesn't
; 0138 1 ! follow it when writing an ASCII file.
; 0139 1 !
; 0140 1 ! 3.3.112 JHW0001 Jonathan H. Welch, 28-Apr-1988 12:11
; 0141 1 ! Fix the message generated in NEXT_FILE so that the
; 0142 1 ! filenames displayed (i.e. Sending: foo.bar;1 as foo.bar)
; 0143 1 ! are always terminated by a null (ASCIZ).
; 0144 1 !
; 0145 1 ! 3.3.117 JHW006 Jonathan H. Welch, 12-May-1988
; 0146 1 ! Calls to LIB$SIGNAL with multiple arguments were
; 0147 1 ! not coded correctly. For calls with multiple arguments
; 0148 1 ! an argument count was added.
; 0149 1 ! Minor changes to KERM_HANDLER to make use of the changed
; 0150 1 ! argument passing method.
; 0151 1 !
; 0152 1 ! 3.3.118 JHW010 Jonathan H. Welch, 23-Apr-1990 09:42
; 0153 1 ! Added SET FILE BLOCKSIZE nnn (where nnn is the record size
; 0154 1 ! in bytes) command for incoming BINARY and FIXED file transfers.
; 0155 1 ! If no blocksize has been specified the old behavior (510 byte
; 0156 1 ! records plus 2 bytes (for CR/LF) for BINARY files and 512
; 0157 1 ! byte records for FIXED files will be used.
; 0158 1 ! Also modified SHOW FILE to display record size when appropriate.
; 0159 1 !
; 0160 1 ! 3.3.119 JHW015 Jonathan H. Welch, 16-Jul-1990 15:30
; 0161 1 ! Fixed the logic in GET_ASCII which was causing an infinite
; 0162 1 ! loop for files with print file carriage control.
; 0163 1 !--
; 0164 1
; 0165 1 %SBTTL 'Forward definitions'
; 0166 1
; 0167 1 FORWARD ROUTINE
; 0168 1 LOG_PUT, ! Write a buffer out
; 0169 1 DUMP_BUFFER, ! Worker routine for FILE_DUMP.
; 0170 1 GET_BUFFER, ! Routine to do $GET
; 0171 1 GET_ASCII, ! Get an ASCII character
; 0172 1 GET_BLOCK, ! Get a block character
; 0173 1 FILE_ERROR : NOVALUE; ! Error processing routine
; 0174 1
; 0175 1 %SBTTL 'Require/Library files'
; 0176 1 !
; 0177 1 ! INCLUDE FILES:
; 0178 1 !
; 0179 1
; 0180 1 LIBRARY 'SYS$LIBRARY:STARLET';
; 0181 1
; 0182 1 REQUIRE 'KERCOM.REQ';
; 0391 1
; 0392 1 %SBTTL 'Macro definitions'
; 0393 1 !
; 0394 1 ! MACROS:
; 0395 1 !
; 0396 1 %SBTTL 'Literal symbol definitions'
; 0397 1 !
; 0398 1 ! EQUATED SYMBOLS:
; 0399 1 !
; 0400 1 !
; 0401 1 ! Various states for reading the data from the file
; 0402 1 !
; 0403 1
; 0404 1 LITERAL
; 0405 1 F_STATE_PRE = 0, ! Prefix state
; 0406 1 F_STATE_PRE1 = 1, ! Other prefix state
; 0407 1 F_STATE_DATA = 2, ! Data processing state
; 0408 1 F_STATE_POST = 3, ! Postfix processing state
; 0409 1 F_STATE_POST1 = 4, ! Secondary postfix processing state
; 0410 1 F_STATE_MIN = 0, ! Min state number
; 0411 1 F_STATE_MAX = 4; ! Max state number
; 0412 1
; 0413 1 !
; 0414 1 ! Buffer size for log file
; 0415 1 !
; 0416 1
; 0417 1 LITERAL
; 0418 1 LOG_BUFF_SIZE = 256; ! Number of bytes in log file buffer
; 0419 1
; 0420 1 %SBTTL 'Local storage'
; 0421 1 !
; 0422 1 ! OWN STORAGE:
; 0423 1 !
; 0424 1
; 0425 1 OWN
; 0426 1 SEARCH_FLAG, ! Can/cannot do $SEARCH
; 0427 1 DEV_CLASS, ! Type of device we are reading
; 0428 1 EOF_FLAG, ! End of file reached.
; 0429 1 FILE_FAB : $FAB_DECL, ! FAB for file processing
; 0430 1 FILE_NAM : $NAM_DECL, ! NAM for file processing
; 0431 1 FILE_RAB : $RAB_DECL, ! RAB for file processing
; 0432 1 FILE_XABFHC : $XABFHC_DECL, ! XAB for file processing
; 0433 1 FILE_MODE, ! Mode of file (reading/writing)
; 0434 1 FILE_REC_POINTER, ! Pointer to the record information
; 0435 1 FILE_REC_COUNT, ! Count of the number of bytes
; 0436 1 REC_SIZE : LONG, ! Record size
; 0437 1 REC_ADDRESS : LONG, ! Record address
; 0438 1 FIX_SIZE : LONG, ! Fixed control region size
; 0439 1 FIX_ADDRESS : LONG, ! Address of buffer for fixed control region
; 0440 1 EXP_STR : VECTOR [CH$ALLOCATION (NAM$C_MAXRSS)],
; 0441 1 RES_STR : VECTOR [CH$ALLOCATION (NAM$C_MAXRSS)],
; 0442 1 RES_STR_D : BLOCK [8, BYTE]; ! Descriptor for the string
; 0443 1
; 0444 1 %SBTTL 'Global storage'
; 0445 1 !
; 0446 1 ! Global storage:
; 0447 1 !
; 0448 1
; 0449 1 GLOBAL
; 0450 1
; 0451 1 file_blocksize, ! Block size of for BINARY and FIXED files.
; 0452 1 file_blocksize_set, ! 0=user has not specified a blocksize, 1=user has specified a blocksize
; 0453 1 FILE_TYPE, ! Type of file being xfered
; 0454 1 FILE_DESC : BLOCK [8, BYTE]; ! File name descriptor
; 0455 1
; 0456 1 %SBTTL 'External routines and storage'
; 0457 1 !
; 0458 1 ! EXTERNAL REFERENCES:
; 0459 1 !
; 0460 1 !
; 0461 1 ! Storage in KERMSG
; 0462 1 !
; 0463 1
; 0464 1 EXTERNAL
; 0465 1 ALT_FILE_SIZE, ! Number of characters in FILE_NAME
; 0466 1 ALT_FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)], ! Storage
; 0467 1 FILE_SIZE, ! Number of characters in FILE_NAME
; 0468 1 FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],
; 0469 1 TY_FIL, ! Flag that file names are being typed
; 0470 1 CONNECT_FLAG, ! Indicator of whether we have a terminal to type on
; 0471 1 FIL_NORMAL_FORM; ! File specification type
; 0472 1
; 0473 1 !
; 0474 1 ! Routines in KERTT
; 0475 1 !
; 0476 1
; 0477 1 EXTERNAL ROUTINE
; 0478 1 TT_OUTPUT : NOVALUE; ! Force buffered output
; 0479 1
; 0480 1 !
; 0481 1 ! System libraries
; 0482 1 !
; 0483 1
; 0484 1 EXTERNAL ROUTINE
; 0485 1 LIB$GET_VM : ADDRESSING_MODE (GENERAL),
; 0486 1 LIB$FREE_VM : ADDRESSING_MODE (GENERAL),
; 0487 1 LIB$SIGNAL : ADDRESSING_MODE (GENERAL) NOVALUE;
; 0488 1
; 0489 1 %SBTTL 'File processing -- FILE_INIT - Initialization'
; 0490 1
; 0491 1 GLOBAL ROUTINE FILE_INIT : NOVALUE =
; 0492 1
; 0493 1 !++
; 0494 1 ! FUNCTIONAL DESCRIPTION:
; 0495 1 !
; 0496 1 ! This routine will initialize some of the storage in the file processing
; 0497 1 ! module.
; 0498 1 !
; 0499 1 ! CALLING SEQUENCE:
; 0500 1 !
; 0501 1 ! FILE_INIT();
; 0502 1 !
; 0503 1 ! INPUT PARAMETERS:
; 0504 1 !
; 0505 1 ! None.
; 0506 1 !
; 0507 1 ! IMPLICIT INPUTS:
; 0508 1 !
; 0509 1 ! None.
; 0510 1 !
; 0511 1 ! OUTPUT PARAMETERS:
; 0512 1 !
; 0513 1 ! None.
; 0514 1 !
; 0515 1 ! IMPLICIT OUTPUTS:
; 0516 1 !
; 0517 1 ! None.
; 0518 1 !
; 0519 1 ! COMPLETION CODES:
; 0520 1 !
; 0521 1 ! None.
; 0522 1 !
; 0523 1 ! SIDE EFFECTS:
; 0524 1 !
; 0525 1 ! None.
; 0526 1 !
; 0527 1 !--
; 0528 1
; 0529 2 BEGIN
; 0530 2 FILE_TYPE = FILE_ASC;
; 0531 2 file_blocksize = 512;
; 0532 2 file_blocksize_set = 0;
; 0533 2
; 0534 2 ! Now set up the file specification descriptor
; 0535 2 FILE_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 0536 2 FILE_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 0537 2 FILE_DESC [DSC$A_POINTER] = FILE_NAME;
; 0538 2 FILE_DESC [DSC$W_LENGTH] = 0;
; 0539 2 EOF_FLAG = FALSE;
; 0540 1 END; ! End of FILE_INIT
.TITLE KERFIL
.IDENT \3.3.119\
.PSECT $OWN$,NOEXE,2
;SEARCH_FLAG
U.7: .BLKB 4 ; 00000
;DEV_CLASS
U.8: .BLKB 4 ; 00004
;EOF_FLAG
U.9: .BLKB 4 ; 00008
;FILE_FAB
U.10: .BLKB 80 ; 0000C
;FILE_NAM
U.11: .BLKB 96 ; 0005C
;FILE_RAB
U.12: .BLKB 68 ; 000BC
;FILE_XABFHC
U.13: .BLKB 44 ; 00100
;FILE_MODE
U.14: .BLKB 4 ; 0012C
;FILE_REC_POINTER
U.15: .BLKB 4 ; 00130
;FILE_REC_COUNT
U.16: .BLKB 4 ; 00134
;REC_SIZE
U.17: .BLKB 4 ; 00138
;REC_ADDRESS
U.18: .BLKB 4 ; 0013C
;FIX_SIZE
U.19: .BLKB 4 ; 00140
;FIX_ADDRESS
U.20: .BLKB 4 ; 00144
;EXP_STR
U.21: .BLKB 256 ; 00148
;RES_STR
U.22: .BLKB 256 ; 00248
;RES_STR_D
U.23: .BLKB 8 ; 00348
.PSECT $GLOBAL$,NOEXE,2
FILE_BLOCKSIZE::
.BLKB 4 ; 00000
FILE_BLOCKSIZE_SET::
.BLKB 4 ; 00004
FILE_TYPE::
.BLKB 4 ; 00008
FILE_DESC::
.BLKB 8 ; 0000C
FNM_NORMAL== 1
FNM_FULL== 2
FNM_UNTRAN== 4
PR_MIN== 0
PR_NONE== 0
PR_MARK== 1
PR_EVEN== 2
PR_ODD== 3
PR_SPACE== 4
PR_MAX== 4
GC_MIN== 1
GC_EXIT== 1
GC_DIRECTORY== 2
GC_DISK_USAGE== 3
GC_DELETE== 4
GC_TYPE== 5
GC_HELP== 6
GC_LOGOUT== 7
GC_LGN== 8
GC_CONNECT== 9
GC_RENAME== 10
GC_COPY== 11
GC_WHO== 12
GC_SEND_MSG== 13
GC_STATUS== 14
GC_COMMAND== 15
GC_KERMIT== 16
GC_JOURNAL== 17
GC_VARIABLE== 18
GC_PROGRAM== 19
GC_MAX== 19
DP_FULL== 0
DP_HALF== 1
CHK_1CHAR== 49
CHK_2CHAR== 50
CHK_CRC== 51
MAX_MSG== 1002
.EXTRN ALT_FILE_SIZE, ALT_FILE_NAME, FILE_SIZE, FILE_NAME, TY_FIL, CONNECT_FLAG, FIL_NORMAL_FORM
.EXTRN TT_OUTPUT, LIB$GET_VM, LIB$FREE_VM, LIB$SIGNAL
.PSECT $CODE$,NOWRT,2
.ENTRY FILE_INIT, ^M<R2> ;FILE_INIT, Save R2 0491 0004 00000
MOVAB G^FILE_TYPE, R2 ;FILE_TYPE, R2 52 00000000' 00 9E 00002
MOVL #1, (R2) ;#1, FILE_TYPE 0530 62 01 D0 00009
MOVZWL #512, -8(R2) ;#512, FILE_BLOCKSIZE 0531 F8 A2 0200 8F 3C 0000C
CLRL -4(R2) ;FILE_BLOCKSIZE_SET 0532 FC A2 D4 00012
MOVL #17694720, 4(R2) ;#17694720, FILE_DESC 0538 04 A2 010E0000 8F D0 00015
MOVAB G^FILE_NAME, 8(R2) ;FILE_NAME, FILE_DESC+4 0537 08 A2 00000000G 00 9E 0001D
CLRL G^U.9 ;U.9 0539 00000000' 00 D4 00025
RET ; 0540 04 0002B
; Routine Size: 44 bytes, Routine Base: $CODE$ + 0000
; 0541 1
; 0542 1 %SBTTL 'GET_FILE'
; 0543 1
; 0544 1 GLOBAL ROUTINE GET_FILE (CHARACTER) =
; 0545 1
; 0546 1 !++
; 0547 1 ! FUNCTIONAL DESCRIPTION:
; 0548 1 !
; 0549 1 ! This routine will return a character from the input file.
; 0550 1 ! The character will be stored into the location specified by
; 0551 1 ! CHARACTER.
; 0552 1 !
; 0553 1 ! CALLING SEQUENCE:
; 0554 1 !
; 0555 1 ! GET_FILE (LOCATION_TO_STORE_CHAR);
; 0556 1 !
; 0557 1 ! INPUT PARAMETERS:
; 0558 1 !
; 0559 1 ! LOCATION_TO_STORE_CHAR - This is the address to store the character
; 0560 1 ! into.
; 0561 1 !
; 0562 1 ! IMPLICIT INPUTS:
; 0563 1 !
; 0564 1 ! None.
; 0565 1 !
; 0566 1 ! OUTPUT PARAMETERS:
; 0567 1 !
; 0568 1 ! Character stored into the location specified.
; 0569 1 !
; 0570 1 ! IMPLICIT OUTPUTS:
; 0571 1 !
; 0572 1 ! None.
; 0573 1 !
; 0574 1 ! COMPLETION CODES:
; 0575 1 !
; 0576 1 ! True - Character stored into the location specified.
; 0577 1 ! False - End of file reached.
; 0578 1 !
; 0579 1 ! SIDE EFFECTS:
; 0580 1 !
; 0581 1 ! None.
; 0582 1 !
; 0583 1 !--
; 0584 1
; 0585 2 BEGIN
; 0586 2 !
; 0587 2 ! Define the various condition codes that we check for in this routine
; 0588 2 !
; 0589 2 EXTERNAL LITERAL
; 0590 2 KER_EOF; ! End of file
; 0591 2
; 0592 2 LOCAL
; 0593 2 STATUS; ! Random status values
; 0594 2
; 0595 2 IF .EOF_FLAG THEN RETURN KER_EOF;
; 0596 2
; 0597 2 SELECTONE .FILE_TYPE OF
; 0598 2 SET
; 0599 2
; 0600 2 [FILE_ASC, FILE_BIN, FILE_FIX] :
; 0601 2 STATUS = GET_ASCII (.CHARACTER);
; 0602 2
; 0603 2 [FILE_BLK] :
; 0604 2 STATUS = GET_BLOCK (.CHARACTER);
; 0605 2 TES;
; 0606 2
; 0607 2 RETURN .STATUS;
; 0608 1 END; ! End of GET_FILE
.EXTRN KER_EOF
.ENTRY GET_FILE, ^M<> ;GET_FILE, Save nothing 0544 0000 00000
BLBC G^U.9, 1$ ;U.9, 1$ 0595 08 00000000' 00 E9 00002
MOVL #KER_EOF, R0 ;#KER_EOF, R0 50 00000000G 8F D0 00009
RET ; 04 00010
1$: MOVL G^FILE_TYPE, R0 ;FILE_TYPE, R0 0597 50 00000000' 00 D0 00011
BLEQ 2$ ;2$ 0600 05 15 00018
CMPL R0, #2 ;R0, #2 02 50 D1 0001A
BLEQ 3$ ;3$ 05 15 0001D
2$: CMPL R0, #4 ;R0, #4 04 50 D1 0001F
BNEQ 4$ ;4$ 0B 12 00022
3$: PUSHL 4(AP) ;CHARACTER 0601 04 AC DD 00024
CALLS #1, G^U.4 ;#1, U.4 00000000V 00 01 FB 00027
RET ; 04 0002E
4$: CMPL R0, #3 ;R0, #3 0603 03 50 D1 0002F
BNEQ 5$ ;5$ 0A 12 00032
PUSHL 4(AP) ;CHARACTER 0604 04 AC DD 00034
CALLS #1, G^U.5 ;#1, U.5 00000000V 00 01 FB 00037
5$: RET ; 0607 04 0003E
; Routine Size: 63 bytes, Routine Base: $CODE$ + 002C
; 0609 1 %SBTTL 'GET_ASCII - Get a character from an ASCII file'
; 0610 1 ROUTINE GET_ASCII (CHARACTER) =
; 0611 1
; 0612 1 !++
; 0613 1 ! FUNCTIONAL DESCRIPTION:
; 0614 1 !
; 0615 1 ! CALLING SEQUENCE:
; 0616 1 !
; 0617 1 ! INPUT PARAMETERS:
; 0618 1 !
; 0619 1 ! None.
; 0620 1 !
; 0621 1 ! IMPLICIT INPUTS:
; 0622 1 !
; 0623 1 ! None.
; 0624 1 !
; 0625 1 ! OUPTUT PARAMETERS:
; 0626 1 !
; 0627 1 ! None.
; 0628 1 !
; 0629 1 ! IMPLICIT OUTPUTS:
; 0630 1 !
; 0631 1 ! None.
; 0632 1 !
; 0633 1 ! COMPLETION CODES:
; 0634 1 !
; 0635 1 ! KER_EOF - End of file encountered
; 0636 1 ! KER_ILLFILTYP - Illegal file type
; 0637 1 ! KER_NORMAL - Normal return
; 0638 1 !
; 0639 1 ! SIDE EFFECTS:
; 0640 1 !
; 0641 1 ! None.
; 0642 1 !
; 0643 1 !--
; 0644 1
; 0645 2 BEGIN
; 0646 2 !
; 0647 2 ! Status codes that are returned by this module
; 0648 2 !
; 0649 2 EXTERNAL LITERAL
; 0650 2 KER_EOF, ! End of file encountered
; 0651 2 KER_ILLFILTYP, ! Illegal file type
; 0652 2 KER_NORMAL; ! Normal return
; 0653 2
; 0654 2 OWN
; 0655 2 CC_COUNT, ! Count of the number of CC things to output
; 0656 2 CC_TYPE; ! Type of carriage control being processed.
; 0657 2
; 0658 2 LOCAL
; 0659 2 STATUS, ! For status values
; 0660 2 RAT;
; 0661 2 %SBTTL 'GET_FTN_FILE_CHARACTER - Get a character from an Fortran carriage control file'
; 0662 2 ROUTINE GET_FTN_FILE_CHARACTER (CHARACTER) =
; 0663 2 !++
; 0664 2 ! FUNCTIONAL DESCRIPTION:
; 0665 2 !
; 0666 2 ! This routine will get a character from a FORTRAN carriage control file.
; 0667 2 ! A FORTRAN carriage control file is one with FAB$M_FTN on in the FAB$B_RAT
; 0668 2 ! field.
; 0669 2 !
; 0670 2 ! FORMAL PARAMETERS:
; 0671 2 !
; 0672 2 ! CHARACTER - Address of where to store the character
; 0673 2 !
; 0674 2 ! IMPLICIT INPUTS:
; 0675 2 !
; 0676 2 ! CC_TYPE - Carriage control type
; 0677 2 !
; 0678 2 ! IMPLICIT OUTPUTS:
; 0679 2 !
; 0680 2 ! CC_TYPE - Updated if this is the first characte of the record
; 0681 2 !
; 0682 2 ! COMPLETION_CODES:
; 0683 2 !
; 0684 2 ! System service or Kermit status code
; 0685 2 !
; 0686 2 ! SIDE EFFECTS:
; 0687 2 !
; 0688 2 ! Next buffer can be read from the data file.
; 0689 2 !--
; 0690 3 BEGIN
; 0691 3 !
; 0692 3 ! Dispatch according to the state of the file being read. Beginning of
; 0693 3 ! record, middle of record, end of record
; 0694 3 !
; 0695 3 WHILE TRUE DO
; 0696 3 CASE .FILE_FAB[FAB$L_CTX] FROM F_STATE_MIN TO F_STATE_MAX OF
; 0697 3 SET
; 0698 3 !
; 0699 3 ! Here at the beginning of a record. We must read the buffer from the file
; 0700 3 ! at this point. Once the buffer is read we must then determine what to do
; 0701 3 ! with the FORTRAN carriage control that at the beginning of the buffer.
; 0702 3 !
; 0703 3 [F_STATE_PRE ]:
; 0704 4 BEGIN
; 0705 4 !
; 0706 4 ! Local variables
; 0707 4 !
; 0708 4 LOCAL
; 0709 4 STATUS; ! Status returned by the
; 0710 4 ! GET_BUFFER routine
; 0711 4 !
; 0712 4 ! Get the buffer
; 0713 4 !
; 0714 4 STATUS = GET_BUFFER (); ! Get a buffer from the system
; 0715 5 IF (NOT .STATUS) ! If this call failed
; 0716 5 OR (.STATUS EQL KER_EOF) ! or we got an EOF
; 0717 4 THEN
; 0718 4 RETURN .STATUS; ! Just return the status
; 0719 4 !
; 0720 4 ! Here with a valid buffer full of data all set to be decoded
; 0721 4 !
; 0722 4 IF .FILE_REC_COUNT LEQ 0 ! If nothing, use a space
; 0723 4 THEN ! for the carriage control
; 0724 4 CC_TYPE = %C' '
; 0725 4 ELSE
; 0726 5 BEGIN
; 0727 5 CC_TYPE = CH$RCHAR_A (FILE_REC_POINTER);
; 0728 5 FILE_REC_COUNT = .FILE_REC_COUNT - 1;
; 0729 4 END;
; 0730 4 !
; 0731 4 ! Dispatch on the type of carriage control that we are processing
; 0732 4 !
; 0733 4 SELECTONE .CC_TYPE OF
; 0734 4 SET
; 0735 4 !
; 0736 4 ! All of these just output:
; 0737 4 ! <DATA> <Carriage-control>
; 0738 4 !
; 0739 4 [CHR_NUL, %C'+'] :
; 0740 5 BEGIN
; 0741 5 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0742 4 END;
; 0743 4 !
; 0744 4 ! This outputs:
; 0745 4 ! <LF><DATA><CR>
; 0746 4 !
; 0747 4 [%C'$', %C' '] :
; 0748 5 BEGIN
; 0749 5 .CHARACTER = CHR_LFD;
; 0750 5 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0751 5 RETURN KER_NORMAL;
; 0752 4 END;
; 0753 4 !
; 0754 4 ! This outputs:
; 0755 4 ! <LF><LF><DATA><CR>
; 0756 4 !
; 0757 4 [%C'0'] :
; 0758 5 BEGIN
; 0759 5 .CHARACTER = CHR_LFD;
; 0760 5 FILE_FAB [FAB$L_CTX] = F_STATE_PRE1;
; 0761 5 RETURN KER_NORMAL;
; 0762 4 END;
; 0763 4 !
; 0764 4 ! This outputs:
; 0765 4 ! <FORM FEED><DATA><CR>
; 0766 4 !
; 0767 4 [%C'1'] :
; 0768 5 BEGIN
; 0769 5 .CHARACTER = CHR_FFD;
; 0770 5 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0771 5 RETURN KER_NORMAL;
; 0772 4 END;
; 0773 4 !
; 0774 4 ! If we don't know the type of carriage control, then just return the
; 0775 4 ! character we read as data and set the carriage control to be space
; 0776 4 ! to fool the post processing of the record
; 0777 4 !
; 0778 4 [OTHERWISE] :
; 0779 5 BEGIN
; 0780 5 .CHARACTER = .CC_TYPE; ! Return the character
; 0781 5 CC_TYPE = %C' '; ! Treat as space
; 0782 5 FILE_REC_POINTER = CH$PLUS(.FILE_REC_POINTER,-1);
; 0783 5 FILE_REC_COUNT = .FILE_REC_COUNT + 1;
; 0784 5 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0785 5 RETURN KER_NORMAL
; 0786 4 END;
; 0787 4 TES;
; 0788 4
; 0789 3 END;
; 0790 3 !
; 0791 3 ! Here to add the second LF for the double spacing FORTRAN carriage control
; 0792 3 !
; 0793 3 [F_STATE_PRE1 ]:
; 0794 4 BEGIN
; 0795 4 .CHARACTER = CHR_LFD;
; 0796 4 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0797 4 RETURN KER_NORMAL;
; 0798 3 END;
; 0799 3 !
; 0800 3 ! Here to read the data of the record
; 0801 3 !
; 0802 3 [F_STATE_DATA]:
; 0803 4 BEGIN
; 0804 4 !
; 0805 4 ! Here to read the data of the record and return it to the caller
; 0806 4 ! This section can only return KER_NORMAL to the caller
; 0807 4 !
; 0808 4 IF .FILE_REC_COUNT LEQ 0 ! Anything left in the buffer
; 0809 4 THEN
; 0810 4 FILE_FAB [FAB$L_CTX] = F_STATE_POST ! No, do post processing
; 0811 4 ELSE
; 0812 5 BEGIN
; 0813 5 .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER); ! Get a character
; 0814 5 FILE_REC_COUNT = .FILE_REC_COUNT - 1; ! Decrement the count
; 0815 5 RETURN KER_NORMAL; ! Give a good return
; 0816 4 END;
; 0817 3 END;
; 0818 3 !
; 0819 3 ! Here to do post processing of the record. At this point we are going
; 0820 3 ! to store either nothing as the post fix, a carriage return for overprinting
; 0821 3 ! or a carriage return and then a line feed in the POST1 state.
; 0822 3 !
; 0823 3 [F_STATE_POST ]:
; 0824 4 BEGIN
; 0825 4 SELECTONE .CC_TYPE OF
; 0826 4 SET
; 0827 4 !
; 0828 4 ! This stat is for no carriage control on the record. This is for
; 0829 4 ! 'null' carriage control (VMS manual states: "Null carriage control
; 0830 4 ! (print buffer contents.)" and for prompt carriage control.
; 0831 4 !
; 0832 4 [CHR_NUL, %C'$' ]:
; 0833 5 BEGIN
; 0834 5 FILE_FAB [FAB$L_CTX] = F_STATE_PRE
; 0835 4 END;
; 0836 4 !
; 0837 4 ! This is the normal state, that causes the postfix for the data to be
; 0838 4 ! a line feed.
; 0839 4 !
; 0840 4 [%C'0', %C'1', %C' ', %C'+' ]:
; 0841 5 BEGIN
; 0842 5 .CHARACTER = CHR_CRT;
; 0843 5 FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
; 0844 5 RETURN KER_NORMAL
; 0845 4 END;
; 0846 4 TES;
; 0847 4
; 0848 3 END;
; 0849 3 !
; 0850 3 ! Here if we are in a state that this routine doesn't set. Just assume that
; 0851 3 ! something screwed up and give an illegal file type return to the caller
; 0852 3 !
; 0853 3 [INRANGE, OUTRANGE]:
; 0854 3 RETURN KER_ILLFILTYP;
; 0855 3
; 0856 3 TES
; 0857 2 END;
.PSECT $OWN$,NOEXE,2
;CC_COUNT
U.30: .BLKB 4 ; 00350
;CC_TYPE
U.31: .BLKB 4 ; 00354
.EXTRN KER_ILLFILTYP, KER_NORMAL
.PSECT $CODE$,NOWRT,2
;GET_FTN_FILE_CHARACTER
U.32: .WORD ^M<R2> ;Save R2 0662 0004 00000
MOVAB G^U.10+24, R2 ;U.10+24, R2 52 00000000' 00 9E 00002
1$: CASEL (R2), #0, #4 ;FILE_FAB+24, #0, #4 0696 00 62 CF 00009
; 04 0000C
2$: .WORD 4$-2$,- ;4$-2$,- 008D 0012 0000D
14$-2$,- ;14$-2$,- 00B4 0096 00011
16$-2$,- ;16$-2$,- 000A 00015
18$-2$,- ;18$-2$,-
3$-2$ ;3$-2$
3$: MOVL #KER_ILLFILTYP, R0 ;#KER_ILLFILTYP, R0 0854 50 00000000G 8F D0 00017
RET ; 04 0001E
4$: CALLS #0, G^U.3 ;#0, U.3 0714 00000000V 00 00 FB 0001F
BLBS R0, 5$ ;STATUS, 5$ 0715 01 50 E8 00026
RET ; 04 00029
5$: CMPL R0, #KER_EOF ;STATUS, #KER_EOF 0716 00000000G 8F 50 D1 0002A
BNEQ 6$ ;6$ 01 12 00031
RET ; 04 00033
6$: TSTL 272(R2) ;FILE_REC_COUNT 0722 0110 C2 D5 00034
BGTR 7$ ;7$ 07 14 00038
MOVL #32, 816(R2) ;#32, CC_TYPE 0724 0330 C2 20 D0 0003A
BRB 8$ ;8$ 12 11 0003F
7$: MOVL 268(R2), R0 ;FILE_REC_POINTER, R0 0727 50 010C C2 D0 00041
MOVZBL (R0), 816(R2) ;(R0), CC_TYPE 0330 C2 60 9A 00046
INCL 268(R2) ;FILE_REC_POINTER 010C C2 D6 0004B
DECL 272(R2) ;FILE_REC_COUNT 0728 0110 C2 D7 0004F
8$: MOVL 816(R2), R0 ;CC_TYPE, R0 0733 50 0330 C2 D0 00053
BEQL 9$ ;9$ 0739 05 13 00058
CMPL R0, #43 ;R0, #43 2B 50 D1 0005A
BNEQ 11$ ;11$ 05 12 0005D
9$: MOVL #2, (R2) ;#2, FILE_FAB+24 0741 62 02 D0 0005F
10$: BRB 1$ ;1$ A5 11 00062
11$: CMPL R0, #32 ;R0, #32 0747 20 50 D1 00064
BEQL 14$ ;14$ 31 13 00067
CMPL R0, #36 ;R0, #36 24 50 D1 00069
BEQL 14$ ;14$ 2C 13 0006C
CMPL R0, #48 ;R0, #48 0757 30 50 D1 0006E
BNEQ 12$ ;12$ 09 12 00071
MOVL #10, @4(AP) ;#10, @CHARACTER 0759 04 BC 0A D0 00073
MOVL #1, (R2) ;#1, FILE_FAB+24 0760 62 01 D0 00077
BRB 22$ ;22$ 0761 72 11 0007A
12$: CMPL R0, #49 ;R0, #49 0767 31 50 D1 0007C
BNEQ 13$ ;13$ 06 12 0007F
MOVL #12, @4(AP) ;#12, @CHARACTER 0769 04 BC 0C D0 00081
BRB 15$ ;15$ 0770 17 11 00085
13$: MOVL R0, @4(AP) ;R0, @CHARACTER 0780 04 BC 50 D0 00087
MOVL #32, 816(R2) ;#32, CC_TYPE 0781 0330 C2 20 D0 0008B
DECL 268(R2) ;FILE_REC_POINTER 0782 010C C2 D7 00090
INCL 272(R2) ;FILE_REC_COUNT 0783 0110 C2 D6 00094
BRB 15$ ;15$ 0784 04 11 00098
14$: MOVL #10, @4(AP) ;#10, @CHARACTER 0795 04 BC 0A D0 0009A
15$: MOVL #2, (R2) ;#2, FILE_FAB+24 0796 62 02 D0 0009E
BRB 22$ ;22$ 0797 4B 11 000A1
16$: TSTL 272(R2) ;FILE_REC_COUNT 0808 0110 C2 D5 000A3
BGTR 17$ ;17$ 05 14 000A7
MOVL #3, (R2) ;#3, FILE_FAB+24 0810 62 03 D0 000A9
BRB 10$ ;10$ B4 11 000AC
17$: MOVL 268(R2), R0 ;FILE_REC_POINTER, R0 0813 50 010C C2 D0 000AE
MOVZBL (R0), @4(AP) ;(R0), @CHARACTER 04 BC 60 9A 000B3
INCL 268(R2) ;FILE_REC_POINTER 010C C2 D6 000B7
DECL 272(R2) ;FILE_REC_COUNT 0814 0110 C2 D7 000BB
BRB 22$ ;22$ 0815 2D 11 000BF
18$: MOVL 816(R2), R0 ;CC_TYPE, R0 0825 50 0330 C2 D0 000C1
BEQL 19$ ;19$ 0832 05 13 000C6
CMPL R0, #36 ;R0, #36 24 50 D1 000C8
BNEQ 20$ ;20$ 04 12 000CB
19$: CLRL (R2) ;FILE_FAB+24 0834 62 D4 000CD
BRB 10$ ;10$ 91 11 000CF
20$: CMPL R0, #32 ;R0, #32 0840 20 50 D1 000D1
BEQL 21$ ;21$ 12 13 000D4
CMPL R0, #43 ;R0, #43 2B 50 D1 000D6
BEQL 21$ ;21$ 0D 13 000D9
CMPL R0, #48 ;R0, #48 30 50 D1 000DB
BLSS 10$ ;10$ 82 19 000DE
CMPL R0, #49 ;R0, #49 31 50 D1 000E0
BLEQ 21$ ;21$ 03 15 000E3
BRW 1$ ;1$ FF21 31 000E5
21$: MOVL #13, @4(AP) ;#13, @CHARACTER 0842 04 BC 0D D0 000E8
CLRL (R2) ;FILE_FAB+24 0843 62 D4 000EC
22$: MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 0844 50 00000000G 8F D0 000EE
RET ; 0857 04 000F5
; Routine Size: 246 bytes, Routine Base: $CODE$ + 006B
; 0858 2 %SBTTL 'GET_ASCII - Main logic'
; 0859 2 RAT = .FILE_FAB [FAB$B_RAT] AND ( NOT FAB$M_BLK);
; 0860 2
; 0861 2 IF .DEV_CLASS EQL DC$_MAILBOX THEN RAT = FAB$M_CR; ! Mailbox needs CR's
; 0862 2
; 0863 2 WHILE TRUE DO
; 0864 3 BEGIN
; 0865 3
; 0866 3 SELECTONE .RAT OF
; 0867 3 SET
; 0868 3
; 0869 3 [FAB$M_FTN ]:
; 0870 4 BEGIN
; 0871 4 RETURN GET_FTN_FILE_CHARACTER (.CHARACTER)
; 0872 3 END;
; 0873 3
; 0874 3 [FAB$M_PRN, FAB$M_CR] :
; 0875 3
; 0876 3 CASE .FILE_FAB [FAB$L_CTX] FROM F_STATE_MIN TO F_STATE_MAX OF
; 0877 3 SET
; 0878 3
; 0879 3 [F_STATE_PRE] :
; 0880 4 BEGIN
; 0881 4 STATUS = GET_BUFFER ();
; 0882 4
; 0883 4 IF NOT .STATUS OR .STATUS EQL KER_EOF THEN RETURN .STATUS;
; 0884 4
; 0885 4 SELECTONE .RAT OF
; 0886 4 SET
; 0887 4
; 0888 4 [FAB$M_CR] :
; 0889 5 BEGIN
; 0890 5 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0891 4 END;
; 0892 4
; 0893 4 [FAB$M_PRN] :
; 0894 5 BEGIN
; 0895 5
; 0896 5 LOCAL
; 0897 5 TEMP_POINTER;
; 0898 5
; 0899 5 TEMP_POINTER = CH$PTR (.FILE_RAB [RAB$L_RHB]);
; 0900 5 CC_COUNT = CH$RCHAR_A (TEMP_POINTER);
; 0901 5 CC_TYPE = CH$RCHAR_A (TEMP_POINTER);
; 0902 5
; 0903 5 IF .CC_COUNT<7, 1> EQL 0
; 0904 5 THEN
; 0905 6 BEGIN
; 0906 6
; 0907 6 IF .CC_COUNT<0, 7> NEQ 0
; 0908 6 THEN
; 0909 7 BEGIN
; 0910 7 .CHARACTER = CHR_LFD;
; 0911 7 CC_COUNT = .CC_COUNT - 1;
; 0912 7
; 0913 7 IF .CC_COUNT GTR 0
; 0914 7 THEN
; 0915 7 FILE_FAB [FAB$L_CTX] = F_STATE_PRE1
; 0916 7 ELSE
; 0917 7 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0918 7
; 0919 7 RETURN KER_NORMAL;
; 0920 7 END
; 0921 6 ELSE
; 0922 6 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0923 6
; 0924 6 END
; 0925 5 ELSE
; 0926 6 BEGIN
; 0927 6
; 0928 6 SELECTONE .CC_COUNT<5, 2> OF
; 0929 6 SET
; 0930 6
; 0931 6 [%B'00'] :
; 0932 7 BEGIN
; 0933 7 .CHARACTER = .CC_COUNT<0, 5>;
; 0934 7 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0935 7 RETURN KER_NORMAL;
; 0936 6 END;
; 0937 6
; 0938 6 [%B'10'] :
; 0939 7 BEGIN
; 0940 7 .CHARACTER = .CC_COUNT<0, 5> + 128;
; 0941 7 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0942 7 RETURN KER_NORMAL;
; 0943 6 END;
; 0944 6
; 0945 6 [OTHERWISE, %B'11'] :
; 0946 6 RETURN KER_ILLFILTYP;
; 0947 6 TES;
; 0948 5 END;
; 0949 4 END;
; 0950 4 TES;
; 0951 4
; 0952 3 END;
; 0953 3
; 0954 3 [F_STATE_PRE1] :
; 0955 3
; 0956 3 IF .RAT EQL FAB$M_PRN
; 0957 3 THEN
; 0958 4 BEGIN
; 0959 4 .CHARACTER = CHR_LFD;
; 0960 4 CC_COUNT = .CC_COUNT - 1;
; 0961 4
; 0962 4 IF .CC_COUNT LEQ 0 THEN FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 0963 4
; 0964 4 RETURN KER_NORMAL;
; 0965 4 END
; 0966 3 ELSE
; 0967 3 RETURN KER_ILLFILTYP;
; 0968 3
; 0969 3 [F_STATE_DATA] :
; 0970 4 BEGIN
; 0971 4
; 0972 4 IF .FILE_REC_COUNT LEQ 0
; 0973 4 THEN
; 0974 4 FILE_FAB [FAB$L_CTX] = F_STATE_POST
; 0975 4 ELSE
; 0976 5 BEGIN
; 0977 5 .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
; 0978 5 FILE_REC_COUNT = .FILE_REC_COUNT - 1;
; 0979 5 RETURN KER_NORMAL;
; 0980 4 END;
; 0981 4
; 0982 3 END;
; 0983 3
; 0984 3 [F_STATE_POST] :
; 0985 4 BEGIN
; 0986 4
; 0987 4 SELECTONE .RAT OF
; 0988 4 SET
; 0989 4
; 0990 4 [FAB$M_CR] :
; 0991 5 BEGIN
; 0992 5 .CHARACTER = CHR_CRT;
; 0993 5 FILE_FAB [FAB$L_CTX] = F_STATE_POST1;
; 0994 5 ! So we get a line feed
; 0995 5 RETURN KER_NORMAL;
; 0996 4 END;
; 0997 4
; 0998 4
; 0999 4 [FAB$M_PRN] :
; 1000 5 BEGIN
; 1001 5
; 1002 5 IF .CC_TYPE<7, 1> EQL 0
; 1003 5 THEN
; 1004 6 BEGIN
; 1005 6
; 1006 6 IF .CC_TYPE<0, 7> NEQ 0
; 1007 6 THEN
; 1008 7 BEGIN
; 1009 7 .CHARACTER = CHR_LFD;
; 1010 7 CC_COUNT = .CC_TYPE;
; 1011 7 FILE_FAB [FAB$L_CTX] = F_STATE_POST1;
; 1012 7 RETURN KER_NORMAL;
; 1013 7 END
; 1014 6 ELSE
; 1015 6 FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
; 1016 6 END
; 1017 5 ELSE
; 1018 6 BEGIN
; 1019 6
; 1020 6 SELECTONE .CC_TYPE<5, 2> OF
; 1021 6 SET
; 1022 6
; 1023 6 [%B'00'] :
; 1024 7 BEGIN
; 1025 7 .CHARACTER = .CC_TYPE<0, 5>;
; 1026 7 FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
; 1027 7 RETURN KER_NORMAL;
; 1028 6 END;
; 1029 6
; 1030 6 [%B'10'] :
; 1031 7 BEGIN
; 1032 7 .CHARACTER = .CC_TYPE<0, 5> + 128;
; 1033 7 FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
; 1034 7 RETURN KER_NORMAL;
; 1035 6 END;
; 1036 6
; 1037 6 [OTHERWISE, %B'11'] :
; 1038 6 RETURN KER_ILLFILTYP;
; 1039 6 TES;
; 1040 6
; 1041 5 END;
; 1042 5
; 1043 4 END;
; 1044 4 TES; ! End SELECTONE .RAT
; 1045 4
; 1046 3 END;
; 1047 3
; 1048 3 [F_STATE_POST1] :
; 1049 3
; 1050 3 IF .RAT EQL FAB$M_PRN
; 1051 3 THEN
; 1052 4 BEGIN
; 1053 4 .CHARACTER = CHR_LFD;
; 1054 4 CC_COUNT = .CC_COUNT - 1;
; 1055 4
; 1056 4 IF .CC_COUNT LEQ -1
; 1057 4 THEN
; 1058 5 BEGIN
; 1059 5 .CHARACTER = CHR_CRT;
; 1060 5 ! FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 1061 5 FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
; 1062 4 END;
; 1063 4
; 1064 4 RETURN KER_NORMAL;
; 1065 4 END
; 1066 3 ELSE
; 1067 3 !
; 1068 3 ! Generate line feed after CR for funny files
; 1069 3 !
; 1070 3
; 1071 4 IF (.RAT EQL FAB$M_CR)
; 1072 3 THEN
; 1073 4 BEGIN
; 1074 4 .CHARACTER = CHR_LFD; ! Return a line feed
; 1075 4 FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
; 1076 4 ! Next we get data
; 1077 4 RETURN KER_NORMAL;
; 1078 4 END
; 1079 3 ELSE
; 1080 3 RETURN KER_ILLFILTYP;
; 1081 3
; 1082 3 TES; ! End of CASE .STATE
; 1083 3
; 1084 3 [OTHERWISE] :
; 1085 4 BEGIN
; 1086 4
; 1087 4 WHILE .FILE_REC_COUNT LEQ 0 DO
; 1088 5 BEGIN
; 1089 5 STATUS = GET_BUFFER ();
; 1090 5
; 1091 5 IF NOT .STATUS OR .STATUS EQL KER_EOF THEN RETURN .STATUS;
; 1092 5
; 1093 4 END;
; 1094 4
; 1095 4 FILE_REC_COUNT = .FILE_REC_COUNT - 1;
; 1096 4 .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
; 1097 4 RETURN KER_NORMAL;
; 1098 3 END;
; 1099 3 TES; ! End of SELECTONE .RAT
; 1100 3
; 1101 2 END; ! End WHILE TRUE DO loop
; 1102 2
; 1103 2 RETURN KER_ILLFILTYP; ! Shouldn't get here
; 1104 1 END; ! End of GET_ASCII
;GET_ASCII
U.4: .WORD ^M<R2,R3,R4,R5,R6> ;Save R2,R3,R4,R5,R6 0610 007C 00000
MOVL #KER_EOF, R6 ;#KER_EOF, R6 56 00000000G 8F D0 00002
MOVAB G^U.3, R5 ;U.3, R5 55 00000000V 00 9E 00009
MOVAB G^U.30, R4 ;U.30, R4 54 00000000' 00 9E 00010
MOVZBL -806(R4), R2 ;FILE_FAB+30, RAT 0859 52 FCDA C4 9A 00017
BICL2 #8, R2 ;#8, RAT 52 08 CA 0001C
CMPL -844(R4), #160 ;DEV_CLASS, #160 0861 000000A0 8F FCB4 C4 D1 0001F
BNEQ 1$ ;1$ 03 12 00028
MOVL #2, R2 ;#2, RAT 52 02 D0 0002A
1$: CMPL R2, #1 ;RAT, #1 0869 01 52 D1 0002D
BNEQ 2$ ;2$ 09 12 00030
PUSHL 4(AP) ;CHARACTER 0871 04 AC DD 00032
CALLS #1, W^U.32 ;#1, U.32 FED0 CF 01 FB 00035
RET ; 04 0003A
2$: CMPL R2, #2 ;RAT, #2 0874 02 52 D1 0003B
BEQL 3$ ;3$ 08 13 0003E
CMPL R2, #4 ;RAT, #4 04 52 D1 00040
BEQL 3$ ;3$ 03 13 00043
BRW 31$ ;31$ 0128 31 00045
3$: CASEL -812(R4), #0, #4 ;FILE_FAB+24, #0, #4 0876 00 FCD4 C4 CF 00048
; 04 0004D
4$: .WORD 5$-4$,- ;5$-4$,- 0075 000A 0004E
12$-4$,- ;12$-4$,- 00A8 0088 00052
15$-4$,- ;15$-4$,- 0101 00056
18$-4$,- ;18$-4$,-
27$-4$ ;27$-4$
5$: CALLS #0, (R5) ;#0, GET_BUFFER 0881 65 00 FB 00058
MOVL R0, R3 ;R0, STATUS 53 50 D0 0005B
BLBS R3, 7$ ;STATUS, 7$ 0883 03 53 E8 0005E
6$: BRW 32$ ;32$ 0120 31 00061
7$: CMPL R3, R6 ;STATUS, R6 56 53 D1 00064
BEQL 6$ ;6$ F8 13 00067
CMPL R2, #2 ;RAT, #2 0888 02 52 D1 00069
BEQL 8$ ;8$ 2A 13 0006C
CMPL R2, #4 ;RAT, #4 0893 04 52 D1 0006E
BNEQ 1$ ;1$ BA 12 00071
MOVL -616(R4), R0 ;FILE_RAB+44, TEMP_POINTER 0899 50 FD98 C4 D0 00073
MOVZBL (R0)+, (R4) ;(TEMP_POINTER)+, CC_COUNT 0900 64 80 9A 00078
MOVZBL (R0)+, 4(R4) ;(TEMP_POINTER)+, CC_TYPE 0901 04 A4 80 9A 0007B
TSTB (R4) ;CC_COUNT 0903 64 95 0007F
BLSS 10$ ;10$ 1C 19 00081
BITB (R4), #127 ;CC_COUNT, #127 0907 7F 8F 64 93 00083
BEQL 8$ ;8$ 0F 13 00087
MOVL #10, @4(AP) ;#10, @CHARACTER 0910 04 BC 0A D0 00089
DECL (R4) ;CC_COUNT 0911 64 D7 0008D
BLEQ 14$ ;14$ 0913 3E 15 0008F
MOVL #1, -812(R4) ;#1, FILE_FAB+24 0915 FCD4 C4 01 D0 00091
BRB 17$ ;17$ 5C 11 00096
8$: MOVL #2, -812(R4) ;#2, FILE_FAB+24 0922 FCD4 C4 02 D0 00098
9$: BRB 1$ ;1$ 8E 11 0009D
10$: EXTZV #5, #2, (R4), R0 ;#5, #2, CC_COUNT, R0 0928 02 05 EF 0009F
; 50 64 000A2
BNEQ 11$ ;11$ 0931 08 12 000A4
EXTZV #0, #5, (R4), @4(AP) ;#0, #5, CC_COUNT, @CHARACTER 0933 05 00 EF 000A6
; 04 BC 64 000A9
BRB 14$ ;14$ 0934 21 11 000AC
11$: CMPL R0, #2 ;R0, #2 0938 02 50 D1 000AE
BNEQ 13$ ;13$ 13 12 000B1
EXTZV #0, #5, (R4), @4(AP) ;#0, #5, CC_COUNT, @CHARACTER 0940 05 00 EF 000B3
; 04 BC 64 000B6
ADDL2 #128, @4(AP) ;#128, @CHARACTER 04 BC 00000080 8F C0 000B9
BRB 14$ ;14$ 0941 0C 11 000C1
12$: CMPL R2, #4 ;RAT, #4 0956 04 52 D1 000C3
13$: BNEQ 26$ ;26$ 74 12 000C6
MOVL #10, @4(AP) ;#10, @CHARACTER 0959 04 BC 0A D0 000C8
SOBGTR (R4), 21$ ;CC_COUNT, 21$ 0960 50 64 F5 000CC
14$: MOVL #2, -812(R4) ;#2, FILE_FAB+24 0962 FCD4 C4 02 D0 000CF
BRB 21$ ;21$ 0964 49 11 000D4
15$: TSTL -540(R4) ;FILE_REC_COUNT 0972 FDE4 C4 D5 000D6
BGTR 16$ ;16$ 07 14 000DA
MOVL #3, -812(R4) ;#3, FILE_FAB+24 0974 FCD4 C4 03 D0 000DC
BRB 23$ ;23$ 42 11 000E1
16$: MOVL -544(R4), R0 ;FILE_REC_POINTER, R0 0977 50 FDE0 C4 D0 000E3
MOVZBL (R0), @4(AP) ;(R0), @CHARACTER 04 BC 60 9A 000E8
INCL -544(R4) ;FILE_REC_POINTER FDE0 C4 D6 000EC
DECL -540(R4) ;FILE_REC_COUNT 0978 FDE4 C4 D7 000F0
17$: BRB 30$ ;30$ 0979 78 11 000F4
18$: CMPL R2, #2 ;RAT, #2 0990 02 52 D1 000F6
BNEQ 19$ ;19$ 06 12 000F9
MOVL #13, @4(AP) ;#13, @CHARACTER 0992 04 BC 0D D0 000FB
BRB 20$ ;20$ 0993 19 11 000FF
19$: CMPL R2, #4 ;RAT, #4 0999 04 52 D1 00101
BNEQ 9$ ;9$ 97 12 00104
TSTB 4(R4) ;CC_TYPE 1002 04 A4 95 00106
BLSS 24$ ;24$ 1D 19 00109
BITB 4(R4), #127 ;CC_TYPE, #127 1006 7F 8F 04 A4 93 0010B
BEQL 22$ ;22$ 0F 13 00110
MOVL #10, @4(AP) ;#10, @CHARACTER 1009 04 BC 0A D0 00112
MOVL 4(R4), (R4) ;CC_TYPE, CC_COUNT 1010 64 04 A4 D0 00116
20$: MOVL #4, -812(R4) ;#4, FILE_FAB+24 1011 FCD4 C4 04 D0 0011A
21$: BRB 34$ ;34$ 1012 78 11 0011F
22$: CLRL -812(R4) ;FILE_FAB+24 1015 FCD4 C4 D4 00121
23$: BRW 1$ ;1$ FF05 31 00125
24$: EXTZV #5, #2, 4(R4), R0 ;#5, #2, CC_TYPE, R0 1020 02 05 EF 00128
; 50 04 A4 0012B
BNEQ 25$ ;25$ 1023 09 12 0012E
EXTZV #0, #5, 4(R4), @4(AP) ;#0, #5, CC_TYPE, @CHARACTER 1025 05 00 EF 00130
; 04 BC 04 A4 00133
BRB 29$ ;29$ 1026 31 11 00137
25$: CMPL R0, #2 ;R0, #2 1030 02 50 D1 00139
26$: BNEQ 35$ ;35$ 63 12 0013C
EXTZV #0, #5, 4(R4), @4(AP) ;#0, #5, CC_TYPE, @CHARACTER 1032 05 00 EF 0013E
; 04 BC 04 A4 00141
ADDL2 #128, @4(AP) ;#128, @CHARACTER 04 BC 00000080 8F C0 00145
BRB 29$ ;29$ 1033 1B 11 0014D
27$: CMPL R2, #4 ;RAT, #4 1050 04 52 D1 0014F
BNEQ 28$ ;28$ 0D 12 00152
MOVL #10, @4(AP) ;#10, @CHARACTER 1053 04 BC 0A D0 00154
SOBGEQ (R4), 34$ ;CC_COUNT, 34$ 1054 3E 64 F4 00158
MOVL #13, @4(AP) ;#13, @CHARACTER 1059 04 BC 0D D0 0015B
BRB 29$ ;29$ 1061 09 11 0015F
28$: CMPL R2, #2 ;RAT, #2 1071 02 52 D1 00161
BNEQ 35$ ;35$ 3B 12 00164
MOVL #10, @4(AP) ;#10, @CHARACTER 1074 04 BC 0A D0 00166
29$: CLRL -812(R4) ;FILE_FAB+24 1075 FCD4 C4 D4 0016A
30$: BRB 34$ ;34$ 1077 29 11 0016E
31$: TSTL -540(R4) ;FILE_REC_COUNT 1087 FDE4 C4 D5 00170
BGTR 33$ ;33$ 12 14 00174
CALLS #0, (R5) ;#0, GET_BUFFER 1089 65 00 FB 00176
MOVL R0, R3 ;R0, STATUS 53 50 D0 00179
BLBC R3, 32$ ;STATUS, 32$ 1091 05 53 E9 0017C
CMPL R3, R6 ;STATUS, R6 56 53 D1 0017F
BNEQ 31$ ;31$ EC 12 00182
32$: MOVL R3, R0 ;STATUS, R0 50 53 D0 00184
RET ; 04 00187
33$: DECL -540(R4) ;FILE_REC_COUNT 1095 FDE4 C4 D7 00188
MOVL -544(R4), R0 ;FILE_REC_POINTER, R0 1096 50 FDE0 C4 D0 0018C
MOVZBL (R0), @4(AP) ;(R0), @CHARACTER 04 BC 60 9A 00191
INCL -544(R4) ;FILE_REC_POINTER FDE0 C4 D6 00195
34$: MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 1097 50 00000000G 8F D0 00199
RET ; 04 001A0
35$: MOVL #KER_ILLFILTYP, R0 ;#KER_ILLFILTYP, R0 1103 50 00000000G 8F D0 001A1
RET ; 04 001A8
; Routine Size: 425 bytes, Routine Base: $CODE$ + 0161
; 1105 1 %SBTTL 'GET_BLOCK - Get a character from a BLOCKed file'
; 1106 1 ROUTINE GET_BLOCK (CHARACTER) =
; 1107 1
; 1108 1 !++
; 1109 1 ! FUNCTIONAL DESCRIPTION:
; 1110 1 !
; 1111 1 ! This routine will return the next byte from a blocked file. This
; 1112 1 ! routine will use the $READ RMS call to get the next byte from the
; 1113 1 ! file. This way all RMS header information can be passed to the
; 1114 1 ! other file system.
; 1115 1 !
; 1116 1 ! CALLING SEQUENCE:
; 1117 1 !
; 1118 1 ! STATUS = GET_BLOCK(CHARACTER);
; 1119 1 !
; 1120 1 ! INPUT PARAMETERS:
; 1121 1 !
; 1122 1 ! CHARACTER - Address to store the character in.
; 1123 1 !
; 1124 1 ! IMPLICIT INPUTS:
; 1125 1 !
; 1126 1 ! REC_POINTER - Pointer into the record.
; 1127 1 ! REC_ADDRESS - Address of the record.
; 1128 1 ! REC_COUNT - Count of the number of bytes left in the record.
; 1129 1 !
; 1130 1 ! OUPTUT PARAMETERS:
; 1131 1 !
; 1132 1 ! None.
; 1133 1 !
; 1134 1 ! IMPLICIT OUTPUTS:
; 1135 1 !
; 1136 1 ! None.
; 1137 1 !
; 1138 1 ! COMPLETION CODES:
; 1139 1 !
; 1140 1 ! KER_NORMAL - Got a byte
; 1141 1 ! KER_EOF - End of file gotten.
; 1142 1 ! KER_RMS32 - RMS error
; 1143 1 !
; 1144 1 ! SIDE EFFECTS:
; 1145 1 !
; 1146 1 ! None.
; 1147 1 !
; 1148 1 !--
; 1149 1
; 1150 2 BEGIN
; 1151 2 !
; 1152 2 ! Status codes returned by this module
; 1153 2 !
; 1154 2 EXTERNAL LITERAL
; 1155 2 KER_RMS32, ! RMS error encountered
; 1156 2 KER_EOF, ! End of file encountered
; 1157 2 KER_NORMAL; ! Normal return
; 1158 2
; 1159 2 LOCAL
; 1160 2 STATUS; ! Random status values
; 1161 2
; 1162 2 WHILE .FILE_REC_COUNT LEQ 0 DO
; 1163 3 BEGIN
; 1164 3 STATUS = $READ (RAB = FILE_RAB);
; 1165 3
; 1166 3 IF NOT .STATUS
; 1167 3 THEN
; 1168 3
; 1169 3 IF .STATUS EQL RMS$_EOF
; 1170 3 THEN
; 1171 4 BEGIN
; 1172 4 EOF_FLAG = TRUE;
; 1173 4 RETURN KER_EOF;
; 1174 4 END
; 1175 3 ELSE
; 1176 4 BEGIN
; 1177 4 FILE_ERROR (.STATUS);
; 1178 4 EOF_FLAG = TRUE;
; 1179 4 RETURN KER_RMS32;
; 1180 3 END;
; 1181 3
; 1182 3 FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
; 1183 3 FILE_REC_COUNT = .FILE_RAB [RAB$W_RSZ];
; 1184 2 END;
; 1185 2
; 1186 2 FILE_REC_COUNT = .FILE_REC_COUNT - 1;
; 1187 2 .CHARACTER = CH$RCHAR_A (FILE_REC_POINTER);
; 1188 2 RETURN KER_NORMAL;
; 1189 1 END; ! End of GET_BLOCK
.EXTRN KER_RMS32, SYS$READ
;GET_BLOCK
U.5: .WORD ^M<R2,R3> ;Save R2,R3 1106 000C 00000
MOVAB G^U.16, R3 ;U.16, R3 53 00000000' 00 9E 00002
1$: TSTL (R3) ;FILE_REC_COUNT 1162 63 D5 00009
BGTR 5$ ;5$ 43 14 0000B
PUSHAB -120(R3) ;FILE_RAB 1164 88 A3 9F 0000D
CALLS #1, G^SYS$READ ;#1, SYS$READ 00000000G 00 01 FB 00010
MOVL R0, R2 ;R0, STATUS 52 50 D0 00017
BLBS R2, 4$ ;STATUS, 4$ 1166 28 52 E8 0001A
CMPL R2, #98938 ;STATUS, #98938 1169 0001827A 8F 52 D1 0001D
BNEQ 2$ ;2$ 09 12 00024
MOVL #KER_EOF, R0 ;#KER_EOF, R0 1173 50 00000000G 8F D0 00026
BRB 3$ ;3$ 10 11 0002D
2$: PUSHL R2 ;STATUS 1177 52 DD 0002F
CALLS #1, G^U.6 ;#1, U.6 00000000V 00 01 FB 00031
MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 1179 50 00000000G 8F D0 00038
3$: MOVL #1, -300(R3) ;#1, EOF_FLAG 1172 FED4 C3 01 D0 0003F
RET ; 1179 04 00044
4$: MOVL 8(R3), -4(R3) ;REC_ADDRESS, FILE_REC_POINTER 1182 FC A3 08 A3 D0 00045
MOVZWL -86(R3), (R3) ;FILE_RAB+34, FILE_REC_COUNT 1183 63 AA A3 3C 0004A
BRB 1$ ;1$ B9 11 0004E
5$: DECL (R3) ;FILE_REC_COUNT 1186 63 D7 00050
MOVL -4(R3), R0 ;FILE_REC_POINTER, R0 1187 50 FC A3 D0 00052
MOVZBL (R0), @4(AP) ;(R0), @CHARACTER 04 BC 60 9A 00056
INCL -4(R3) ;FILE_REC_POINTER FC A3 D6 0005A
MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 1188 50 00000000G 8F D0 0005D
RET ; 04 00064
; Routine Size: 101 bytes, Routine Base: $CODE$ + 030A
; 1190 1 %SBTTL 'GET_BUFFER - Routine to read a buffer.'
; 1191 1 ROUTINE GET_BUFFER =
; 1192 1
; 1193 1 !++
; 1194 1 ! FUNCTIONAL DESCRIPTION:
; 1195 1 !
; 1196 1 ! This routine will read a buffer from the disk file. It will
; 1197 1 ! return various status depending if there was an error reading
; 1198 1 ! the disk file or if the end of file is reached.
; 1199 1 !
; 1200 1 ! CALLING SEQUENCE:
; 1201 1 !
; 1202 1 ! STATUS = GET_BUFFER ();
; 1203 1 !
; 1204 1 ! INPUT PARAMETERS:
; 1205 1 !
; 1206 1 ! None.
; 1207 1 !
; 1208 1 ! IMPLICIT INPUTS:
; 1209 1 !
; 1210 1 ! None.
; 1211 1 !
; 1212 1 ! OUTPUT PARAMETERS:
; 1213 1 !
; 1214 1 ! None.
; 1215 1 !
; 1216 1 ! IMPLICIT OUTPUTS:
; 1217 1 !
; 1218 1 ! FILE_REC_POINTER - Pointer into the record.
; 1219 1 ! FILE_REC_COUNT - Count of the number of bytes in the record.
; 1220 1 !
; 1221 1 ! COMPLETION CODES:
; 1222 1 !
; 1223 1 ! KER_NORMAL - Got a buffer
; 1224 1 ! KER_EOF - End of file reached.
; 1225 1 ! KER_RMS32 - RMS error
; 1226 1 !
; 1227 1 ! SIDE EFFECTS:
; 1228 1 !
; 1229 1 ! None.
; 1230 1 !
; 1231 1 !--
; 1232 1
; 1233 2 BEGIN
; 1234 2 !
; 1235 2 ! The following are the various status values returned by this routien
; 1236 2 !
; 1237 2 EXTERNAL LITERAL
; 1238 2 KER_NORMAL, ! Normal return
; 1239 2 KER_EOF, ! End of file
; 1240 2 KER_RMS32; ! RMS error encountered
; 1241 2
; 1242 2 LOCAL
; 1243 2 STATUS; ! Random status values
; 1244 2
; 1245 2 STATUS = $GET (RAB = FILE_RAB);
; 1246 2
; 1247 2 IF NOT .STATUS
; 1248 2 THEN
; 1249 2
; 1250 2 IF .STATUS EQL RMS$_EOF
; 1251 2 THEN
; 1252 3 BEGIN
; 1253 3 EOF_FLAG = TRUE;
; 1254 3 RETURN KER_EOF;
; 1255 3 END
; 1256 2 ELSE
; 1257 3 BEGIN
; 1258 3 FILE_ERROR (.STATUS);
; 1259 3 EOF_FLAG = TRUE;
; 1260 3 RETURN KER_RMS32;
; 1261 2 END;
; 1262 2
; 1263 2 FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
; 1264 2 FILE_REC_COUNT = .FILE_RAB [RAB$W_RSZ];
; 1265 2 RETURN KER_NORMAL;
; 1266 1 END;
.EXTRN SYS$GET
;GET_BUFFER
U.3: .WORD ^M<R2> ;Save R2 1191 0004 00000
MOVAB G^U.12, R2 ;U.12, R2 52 00000000' 00 9E 00002
PUSHL R2 ;R2 1245 52 DD 00009
CALLS #1, G^SYS$GET ;#1, SYS$GET 00000000G 00 01 FB 0000B
BLBS R0, 3$ ;STATUS, 3$ 1247 28 50 E8 00012
CMPL R0, #98938 ;STATUS, #98938 1250 0001827A 8F 50 D1 00015
BNEQ 1$ ;1$ 09 12 0001C
MOVL #KER_EOF, R0 ;#KER_EOF, R0 1254 50 00000000G 8F D0 0001E
BRB 2$ ;2$ 10 11 00025
1$: PUSHL R0 ;STATUS 1258 50 DD 00027
CALLS #1, G^U.6 ;#1, U.6 00000000V 00 01 FB 00029
MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 1260 50 00000000G 8F D0 00030
2$: MOVL #1, -180(R2) ;#1, EOF_FLAG 1253 FF4C C2 01 D0 00037
RET ; 1260 04 0003C
3$: MOVL 128(R2), 116(R2) ;REC_ADDRESS, FILE_REC_POINTER 1263 74 A2 0080 C2 D0 0003D
MOVZWL 34(R2), 120(R2) ;FILE_RAB+34, FILE_REC_COUNT 1264 78 A2 22 A2 3C 00043
MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 1265 50 00000000G 8F D0 00048
RET ; 04 0004F
; Routine Size: 80 bytes, Routine Base: $CODE$ + 036F
; 1267 1 %SBTTL 'PUT_FILE'
; 1268 1
; 1269 1 GLOBAL ROUTINE PUT_FILE (CHARACTER) =
; 1270 1
; 1271 1 !++
; 1272 1 ! FUNCTIONAL DESCRIPTION:
; 1273 1 !
; 1274 1 ! This routine will store a character into the record buffer
; 1275 1 ! that we are building. It will output the buffer to disk
; 1276 1 ! when the end of line characters are found.
; 1277 1 !
; 1278 1 ! CALLING SEQUENCE:
; 1279 1 !
; 1280 1 ! STATUS = PUT_FILE(Character);
; 1281 1 !
; 1282 1 ! INPUT PARAMETERS:
; 1283 1 !
; 1284 1 ! Character - Address of the character to output in the file.
; 1285 1 !
; 1286 1 ! IMPLICIT INPUTS:
; 1287 1 !
; 1288 1 ! None.
; 1289 1 !
; 1290 1 ! OUTPUT PARAMETERS:
; 1291 1 !
; 1292 1 ! Status - True if no problems writing the character
; 1293 1 ! False if there were problems writing the character.
; 1294 1 !
; 1295 1 ! IMPLICIT OUTPUTS:
; 1296 1 !
; 1297 1 ! None.
; 1298 1 !
; 1299 1 ! COMPLETION CODES:
; 1300 1 !
; 1301 1 ! None.
; 1302 1 !
; 1303 1 ! SIDE EFFECTS:
; 1304 1 !
; 1305 1 ! None.
; 1306 1 !
; 1307 1 !--
; 1308 1
; 1309 2 BEGIN
; 1310 2 !
; 1311 2 ! Completion codes
; 1312 2 !
; 1313 2 EXTERNAL LITERAL
; 1314 2 KER_REC_TOO_BIG, ! Record too big
; 1315 2 KER_NORMAL; ! Normal return
; 1316 2 !
; 1317 2 ! Local variables
; 1318 2 !
; 1319 2 OWN
; 1320 2 SAVED_CHARACTER : UNSIGNED BYTE; ! Character we may have to
; 1321 2 ! write later on
; 1322 2 LOCAL
; 1323 2 STATUS; ! Random status values
; 1324 2
; 1325 2 SELECTONE .FILE_TYPE OF
; 1326 2 SET
; 1327 2
; 1328 2 [FILE_ASC] :
; 1329 3 BEGIN
; 1330 3 !
; 1331 3 ! If the last character was a carriage return and this is a line feed,
; 1332 3 ! we will just dump the record. Otherwise, if the last character was
; 1333 3 ! a carriage return, output both it and the current one.
; 1334 3 !
; 1335 3
; 1336 3 IF .FILE_FAB [FAB$L_CTX] NEQ F_STATE_DATA
; 1337 3 THEN
; 1338 4 BEGIN
; 1339 4
; 1340 4 IF (.CHARACTER AND %O'177') EQL CHR_LFD
; 1341 4 THEN
; 1342 5 BEGIN
; 1343 5 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 1344 5 RETURN DUMP_BUFFER ();
; 1345 5 END
; 1346 4 ELSE
; 1347 5 BEGIN
; 1348 5
; 1349 5 IF .FILE_REC_COUNT GEQ .REC_SIZE
; 1350 5 THEN
; 1351 6 BEGIN
; 1352 6 LIB$SIGNAL (KER_REC_TOO_BIG);
; 1353 6 RETURN KER_REC_TOO_BIG;
; 1354 5 END;
; 1355 5
; 1356 5 CH$WCHAR_A (.SAVED_CHARACTER, FILE_REC_POINTER);
; 1357 5 ! Store the carriage return we deferred
; 1358 5 FILE_REC_COUNT = .FILE_REC_COUNT + 1;
; 1359 5 FILE_FAB [FAB$L_CTX] = F_STATE_DATA; ! Back to normal data
; 1360 4 END;
; 1361 4
; 1362 3 END;
; 1363 3
; 1364 3 !
; 1365 3 ! Here when last character was written to the file normally. Check if
; 1366 3 ! this character might be the end of a record (or at least the start of
; 1367 3 ! end.
; 1368 3 !
; 1369 3
; 1370 3 IF (.CHARACTER AND %O'177') EQL CHR_CRT
; 1371 3 THEN
; 1372 4 BEGIN
; 1373 4 SAVED_CHARACTER = .CHARACTER; ! Save the character for later
; 1374 4 FILE_FAB [FAB$L_CTX] = F_STATE_POST; ! Remember we saw this
; 1375 4 RETURN KER_NORMAL; ! And delay until next character
; 1376 3 END;
; 1377 3
; 1378 3 IF .FILE_REC_COUNT GEQ .REC_SIZE
; 1379 3 THEN
; 1380 4 BEGIN
; 1381 4 LIB$SIGNAL (KER_REC_TOO_BIG);
; 1382 4 RETURN KER_REC_TOO_BIG;
; 1383 3 END;
; 1384 3
; 1385 3 FILE_REC_COUNT = .FILE_REC_COUNT + 1;
; 1386 3 CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
; 1387 2 END;
; 1388 2
; 1389 2 [FILE_BIN, FILE_FIX] :
; 1390 3 BEGIN
; 1391 3
; 1392 3 IF .FILE_REC_COUNT GEQ .REC_SIZE
; 1393 3 THEN
; 1394 4 BEGIN
; 1395 4 STATUS = DUMP_BUFFER ();
; 1396 4
; 1397 4 IF NOT .STATUS
; 1398 4 THEN
; 1399 5 BEGIN
; 1400 5 LIB$SIGNAL (.STATUS);
; 1401 5 RETURN .STATUS;
; 1402 4 END;
; 1403 4
; 1404 3 END;
; 1405 3
; 1406 3 FILE_REC_COUNT = .FILE_REC_COUNT + 1;
; 1407 3 CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
; 1408 2 END;
; 1409 2
; 1410 2 [FILE_BLK] :
; 1411 3 BEGIN
; 1412 3
; 1413 3 IF .FILE_REC_COUNT GEQ .REC_SIZE
; 1414 3 THEN
; 1415 4 BEGIN
; 1416 4 FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
; 1417 4 STATUS = $WRITE (RAB = FILE_RAB);
; 1418 4 FILE_REC_COUNT = 0;
; 1419 4 FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
; 1420 3 END;
; 1421 3
; 1422 3 FILE_REC_COUNT = .FILE_REC_COUNT + 1;
; 1423 3 CH$WCHAR_A (.CHARACTER, FILE_REC_POINTER);
; 1424 2 END;
; 1425 2 TES;
; 1426 2
; 1427 2 RETURN KER_NORMAL;
; 1428 1 END; ! End of PUT_FILE
.PSECT $OWN$,NOEXE,2
;SAVED_CHARACTER
U.34: .BLKB 1 ; 00358
.EXTRN KER_REC_TOO_BIG, SYS$WRITE
.PSECT $CODE$,NOWRT,2
.ENTRY PUT_FILE, ^M<R2,R3,R4,R5,R6> ;PUT_FILE, Save R2,R3,R4,R5,R6 1269 007C 00000
MOVAB G^LIB$SIGNAL, R6 ;LIB$SIGNAL, R6 56 00000000G 00 9E 00002
MOVL #KER_REC_TOO_BIG, R5 ;#KER_REC_TOO_BIG, R5 55 00000000G 8F D0 00009
MOVAB G^U.2, R4 ;U.2, R4 54 00000000V 00 9E 00010
MOVAB G^U.16, R3 ;U.16, R3 53 00000000' 00 9E 00017
MOVL G^FILE_TYPE, R0 ;FILE_TYPE, R0 1325 50 00000000' 00 D0 0001E
CMPL R0, #1 ;R0, #1 1328 01 50 D1 00025
BNEQ 5$ ;5$ 55 12 00028
CMPL -272(R3), #2 ;FILE_FAB+24, #2 1336 02 FEF0 C3 D1 0002A
BEQL 2$ ;2$ 2A 13 0002F
CMPZV #0, #7, 4(AP), #10 ;#0, #7, CHARACTER, #10 1340 07 00 ED 00031
; 0A 04 AC 00034
BNEQ 1$ ;1$ 09 12 00037
MOVL #2, -272(R3) ;#2, FILE_FAB+24 1343 FEF0 C3 02 D0 00039
CALLS #0, (R4) ;#0, DUMP_BUFFER 1344 64 00 FB 0003E
RET ; 04 00041
1$: CMPL (R3), 4(R3) ;FILE_REC_COUNT, REC_SIZE 1349 04 A3 63 D1 00042
BGEQ 4$ ;4$ 2E 18 00046
MOVL -4(R3), R0 ;FILE_REC_POINTER, R0 1356 50 FC A3 D0 00048
MOVB 548(R3), (R0) ;SAVED_CHARACTER, (R0) 60 0224 C3 90 0004C
INCL -4(R3) ;FILE_REC_POINTER FC A3 D6 00051
INCL (R3) ;FILE_REC_COUNT 1358 63 D6 00054
MOVL #2, -272(R3) ;#2, FILE_FAB+24 1359 FEF0 C3 02 D0 00056
2$: CMPZV #0, #7, 4(AP), #13 ;#0, #7, CHARACTER, #13 1370 07 00 ED 0005B
; 0D 04 AC 0005E
BNEQ 3$ ;3$ 0D 12 00061
MOVB 4(AP), 548(R3) ;CHARACTER, SAVED_CHARACTER 1373 0224 C3 04 AC 90 00063
MOVL #3, -272(R3) ;#3, FILE_FAB+24 1374 FEF0 C3 03 D0 00069
BRB 9$ ;9$ 1375 64 11 0006E
3$: CMPL (R3), 4(R3) ;FILE_REC_COUNT, REC_SIZE 1378 04 A3 63 D1 00070
BLSS 8$ ;8$ 51 19 00074
4$: PUSHL R5 ;R5 1381 55 DD 00076
CALLS #1, (R6) ;#1, LIB$SIGNAL 66 01 FB 00078
MOVL R5, R0 ;R5, R0 1382 50 55 D0 0007B
RET ; 04 0007E
5$: CMPL R0, #2 ;R0, #2 1389 02 50 D1 0007F
BEQL 6$ ;6$ 05 13 00082
CMPL R0, #4 ;R0, #4 04 50 D1 00084
BNEQ 7$ ;7$ 18 12 00087
6$: CMPL (R3), 4(R3) ;FILE_REC_COUNT, REC_SIZE 1392 04 A3 63 D1 00089
BLSS 8$ ;8$ 38 19 0008D
CALLS #0, (R4) ;#0, DUMP_BUFFER 1395 64 00 FB 0008F
MOVL R0, R2 ;R0, STATUS 52 50 D0 00092
BLBS R2, 8$ ;STATUS, 8$ 1397 2F 52 E8 00095
PUSHL R2 ;STATUS 1400 52 DD 00098
CALLS #1, (R6) ;#1, LIB$SIGNAL 66 01 FB 0009A
MOVL R2, R0 ;STATUS, R0 1401 50 52 D0 0009D
RET ; 04 000A0
7$: CMPL R0, #3 ;R0, #3 1410 03 50 D1 000A1
BNEQ 9$ ;9$ 2E 12 000A4
MOVL (R3), R0 ;FILE_REC_COUNT, R0 1413 50 63 D0 000A6
CMPL R0, 4(R3) ;R0, REC_SIZE 04 A3 50 D1 000A9
BLSS 8$ ;8$ 18 19 000AD
MOVW R0, -86(R3) ;R0, FILE_RAB+34 1416 AA A3 50 B0 000AF
PUSHAB -120(R3) ;FILE_RAB 1417 88 A3 9F 000B3
CALLS #1, G^SYS$WRITE ;#1, SYS$WRITE 00000000G 00 01 FB 000B6
MOVL R0, R2 ;R0, STATUS 52 50 D0 000BD
CLRL (R3) ;FILE_REC_COUNT 1418 63 D4 000C0
MOVL 8(R3), -4(R3) ;REC_ADDRESS, FILE_REC_POINTER 1419 FC A3 08 A3 D0 000C2
8$: INCL (R3) ;FILE_REC_COUNT 1422 63 D6 000C7
MOVL -4(R3), R0 ;FILE_REC_POINTER, R0 1423 50 FC A3 D0 000C9
MOVB 4(AP), (R0) ;CHARACTER, (R0) 60 04 AC 90 000CD
INCL -4(R3) ;FILE_REC_POINTER FC A3 D6 000D1
9$: MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 1427 50 00000000G 8F D0 000D4
RET ; 04 000DB
; Routine Size: 220 bytes, Routine Base: $CODE$ + 03BF
; 1429 1
; 1430 1 %SBTTL 'DUMP_BUFFER - Dump the current record to disk'
; 1431 1 ROUTINE DUMP_BUFFER =
; 1432 1
; 1433 1 !++
; 1434 1 ! FUNCTIONAL DESCRIPTION:
; 1435 1 !
; 1436 1 ! This routine will dump the current record to disk. It doesn't
; 1437 1 ! care what type of file you are writing, unlike FILE_DUMP.
; 1438 1 !
; 1439 1 ! CALLING SEQUENCE:
; 1440 1 !
; 1441 1 ! STATUS = DUMP_BUFFER();
; 1442 1 !
; 1443 1 ! INPUT PARAMETERS:
; 1444 1 !
; 1445 1 ! None.
; 1446 1 !
; 1447 1 ! IMPLICIT INPUTS:
; 1448 1 !
; 1449 1 ! None.
; 1450 1 !
; 1451 1 ! OUTPUT PARAMETERS:
; 1452 1 !
; 1453 1 ! None.
; 1454 1 !
; 1455 1 ! IMPLICIT OUTPUTS:
; 1456 1 !
; 1457 1 ! None.
; 1458 1 !
; 1459 1 ! COMPLETION CODES:
; 1460 1 !
; 1461 1 ! KER_NORMAL - Output went ok.
; 1462 1 ! KER_RMS32 - RMS-32 error.
; 1463 1 !
; 1464 1 ! SIDE EFFECTS:
; 1465 1 !
; 1466 1 ! None.
; 1467 1 !
; 1468 1 !--
; 1469 1
; 1470 2 BEGIN
; 1471 2 !
; 1472 2 ! Completion codes returned:
; 1473 2 !
; 1474 2 EXTERNAL LITERAL
; 1475 2 KER_NORMAL, ! Normal return
; 1476 2 KER_RMS32; ! RMS-32 error
; 1477 2 !
; 1478 2 ! Local variables
; 1479 2 !
; 1480 2 LOCAL
; 1481 2 STATUS; ! Random status values
; 1482 2
; 1483 2 !
; 1484 2 ! First update the record length
; 1485 2 !
; 1486 2 FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
; 1487 2 !
; 1488 2 ! Now output the record to the file
; 1489 2 !
; 1490 2 STATUS = $PUT (RAB = FILE_RAB);
; 1491 2 !
; 1492 2 ! Update the pointers first
; 1493 2 !
; 1494 2 FILE_REC_COUNT = 0;
; 1495 2 FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
; 1496 2 !
; 1497 2 ! Now determine if we failed attempting to write the record
; 1498 2 !
; 1499 2
; 1500 2 IF NOT .STATUS
; 1501 2 THEN
; 1502 3 BEGIN
; 1503 3 FILE_ERROR (.STATUS);
; 1504 3 RETURN KER_RMS32
; 1505 2 END;
; 1506 2
; 1507 2 RETURN KER_NORMAL
; 1508 1 END; ! End of DUMP_BUFFER
.EXTRN SYS$PUT
;DUMP_BUFFER
U.2: .WORD ^M<R2> ;Save R2 1431 0004 00000
MOVAB G^U.16, R2 ;U.16, R2 52 00000000' 00 9E 00002
MOVW (R2), -86(R2) ;FILE_REC_COUNT, FILE_RAB+34 1486 AA A2 62 B0 00009
PUSHAB -120(R2) ;FILE_RAB 1490 88 A2 9F 0000D
CALLS #1, G^SYS$PUT ;#1, SYS$PUT 00000000G 00 01 FB 00010
CLRL (R2) ;FILE_REC_COUNT 1494 62 D4 00017
MOVL 8(R2), -4(R2) ;REC_ADDRESS, FILE_REC_POINTER 1495 FC A2 08 A2 D0 00019
BLBS R0, 1$ ;STATUS, 1$ 1500 11 50 E8 0001E
PUSHL R0 ;STATUS 1503 50 DD 00021
CALLS #1, G^U.6 ;#1, U.6 00000000V 00 01 FB 00023
MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 1504 50 00000000G 8F D0 0002A
RET ; 04 00031
1$: MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 1507 50 00000000G 8F D0 00032
RET ; 04 00039
; Routine Size: 58 bytes, Routine Base: $CODE$ + 049B
; 1509 1 %SBTTL 'OPEN_READING'
; 1510 1 ROUTINE OPEN_READING =
; 1511 1
; 1512 1 !++
; 1513 1 ! FUNCTIONAL DESCRIPTION:
; 1514 1 !
; 1515 1 ! This routine will open a file for reading. It will return either
; 1516 1 ! true or false to the called depending on the success of the
; 1517 1 ! operation.
; 1518 1 !
; 1519 1 ! CALLING SEQUENCE:
; 1520 1 !
; 1521 1 ! status = OPEN_READING();
; 1522 1 !
; 1523 1 ! INPUT PARAMETERS:
; 1524 1 !
; 1525 1 ! None.
; 1526 1 !
; 1527 1 ! IMPLICIT INPUTS:
; 1528 1 !
; 1529 1 ! None.
; 1530 1 !
; 1531 1 ! OUTPUT PARAMETERS:
; 1532 1 !
; 1533 1 ! None.
; 1534 1 !
; 1535 1 ! IMPLICIT OUTPUTS:
; 1536 1 !
; 1537 1 ! None.
; 1538 1 !
; 1539 1 ! COMPLETION CODES:
; 1540 1 !
; 1541 1 ! KER_NORMAL - Normal return
; 1542 1 ! KER_RMS32 - RMS error encountered
; 1543 1 !
; 1544 1 ! SIDE EFFECTS:
; 1545 1 !
; 1546 1 ! None.
; 1547 1 !
; 1548 1 !--
; 1549 1
; 1550 2 BEGIN
; 1551 2 !
; 1552 2 ! Completion codes returned:
; 1553 2 !
; 1554 2 EXTERNAL LITERAL
; 1555 2 KER_NORMAL, ! Normal return
; 1556 2 KER_RMS32; ! RMS-32 error
; 1557 2
; 1558 2 LOCAL
; 1559 2 STATUS; ! Random status values
; 1560 2
; 1561 2 !
; 1562 2 ! We now have an expanded file specification that we can use to process
; 1563 2 ! the file.
; 1564 2 !
; 1565 2
; 1566 2 IF .FILE_TYPE NEQ FILE_BLK
; 1567 2 THEN
; 1568 3 BEGIN
; P 1569 3 $FAB_INIT (FAB = FILE_FAB, FAC = GET, FOP = NAM, RFM = STM, NAM = FILE_NAM,
; 1570 3 XAB = FILE_XABFHC);
; 1571 3 END
; 1572 2 ELSE
; 1573 3 BEGIN
; P 1574 3 $FAB_INIT (FAB = FILE_FAB, FAC = (GET, BIO), FOP = NAM, RFM = STM,
; 1575 3 NAM = FILE_NAM, XAB = FILE_XABFHC);
; 1576 2 END;
; 1577 2
; 1578 2 $XABFHC_INIT (XAB = FILE_XABFHC);
; 1579 2 STATUS = $OPEN (FAB = FILE_FAB);
; 1580 2
; 1581 3 IF (.STATUS NEQ RMS$_NORMAL AND .STATUS NEQ RMS$_KFF)
; 1582 2 THEN
; 1583 3 BEGIN
; 1584 3 FILE_ERROR (.STATUS);
; 1585 3 RETURN KER_RMS32;
; 1586 2 END;
; 1587 2
; 1588 2 !
; 1589 2 ! Now allocate a buffer for the records
; 1590 2 !
; 1591 2 REC_SIZE = (IF .FILE_TYPE EQL FILE_BLK THEN 512 ELSE .FILE_XABFHC [XAB$W_LRL]);
; 1592 2
; 1593 2 IF .REC_SIZE EQL 0 THEN REC_SIZE = MAX_REC_LENGTH;
; 1594 2
; 1595 2 STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
; 1596 2 !
; 1597 2 ! Determine if we need a buffer for the fixed control area
; 1598 2 !
; 1599 2 FIX_SIZE = .FILE_FAB [FAB$B_FSZ];
; 1600 2
; 1601 2 IF .FIX_SIZE NEQ 0
; 1602 2 THEN
; 1603 3 BEGIN
; 1604 3 STATUS = LIB$GET_VM (FIX_SIZE, FIX_ADDRESS);
; 1605 2 END;
; 1606 2
; 1607 2 !
; 1608 2 ! Initialize the RAB for the $CONNECT RMS call
; 1609 2 !
; P 1610 2 $RAB_INIT (RAB = FILE_RAB, FAB = FILE_FAB, RAC = SEQ, ROP = NLK, UBF = .REC_ADDRESS,
; 1611 2 USZ = .REC_SIZE);
; 1612 2
; 1613 2 IF .FIX_SIZE NEQ 0 THEN FILE_RAB [RAB$L_RHB] = .FIX_ADDRESS;
; 1614 2
; 1615 2 ! Store header address
; 1616 2 STATUS = $CONNECT (RAB = FILE_RAB);
; 1617 2
; 1618 2 IF NOT .STATUS
; 1619 2 THEN
; 1620 3 BEGIN
; 1621 3 FILE_ERROR (.STATUS);
; 1622 3 RETURN KER_RMS32;
; 1623 2 END;
; 1624 2
; 1625 2 FILE_REC_COUNT = -1;
; 1626 2 FILE_FAB [FAB$L_CTX] = F_STATE_PRE;
; 1627 2 RETURN KER_NORMAL;
; 1628 1 END; ! End of OPEN_READING
U.36= U.10
U.37= U.10
U.38= U.13
U.39= U.12
.EXTRN SYS$OPEN, SYS$CONNECT
;OPEN_READING
U.35: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9> ;Save R2,R3,R4,R5,R6,R7,R8,R9 1510 03FC 00000
MOVAB G^FILE_TYPE, R9 ;FILE_TYPE, R9 59 00000000' 00 9E 00002
MOVAB G^LIB$GET_VM, R8 ;LIB$GET_VM, R8 58 00000000G 00 9E 00009
MOVAB G^U.36, R7 ;U.36, R7 57 00000000' 00 9E 00010
CMPL (R9), #3 ;FILE_TYPE, #3 1566 03 69 D1 00017
BEQL 1$ ;1$ 1B 13 0001A
MOVC5 #0, (SP), #0, #80, (R7) ;#0, (SP), #0, #80, $RMS_PTR 1570 6E 00 2C 0001C
; 0050 8F 00 0001F
; 67 00023
MOVW #20483, (R7) ;#20483, $RMS_PTR 67 5003 8F B0 00024
MOVL #16777216, 4(R7) ;#16777216, $RMS_PTR+4 04 A7 01000000 8F D0 00029
MOVB #2, 22(R7) ;#2, $RMS_PTR+22 16 A7 02 90 00031
BRB 2$ ;2$ 19 11 00035
1$: MOVC5 #0, (SP), #0, #80, (R7) ;#0, (SP), #0, #80, $RMS_PTR 1575 6E 00 2C 00037
; 0050 8F 00 0003A
; 67 0003E
MOVW #20483, (R7) ;#20483, $RMS_PTR 67 5003 8F B0 0003F
MOVL #16777216, 4(R7) ;#16777216, $RMS_PTR+4 04 A7 01000000 8F D0 00044
MOVB #34, 22(R7) ;#34, $RMS_PTR+22 16 A7 22 90 0004C
2$: MOVB #4, 31(R7) ;#4, $RMS_PTR+31 1F A7 04 90 00050
MOVAB 244(R7), 36(R7) ;FILE_XABFHC, $RMS_PTR+36 24 A7 00F4 C7 9E 00054
MOVAB 80(R7), 40(R7) ;FILE_NAM, $RMS_PTR+40 1570 28 A7 50 A7 9E 0005A
MOVC5 #0, (SP), #0, #44, 244(R7) ;#0, (SP), #0, #44, $RMS_PTR 1578 6E 00 2C 0005F
; 2C 00 00062
; 00F4 C7 00064
MOVW #11293, 244(R7) ;#11293, $RMS_PTR 00F4 C7 2C1D 8F B0 00067
PUSHL R7 ;R7 1579 57 DD 0006E
CALLS #1, G^SYS$OPEN ;#1, SYS$OPEN 00000000G 00 01 FB 00070
MOVL R0, R6 ;R0, STATUS 56 50 D0 00077
CMPL R6, #65537 ;STATUS, #65537 1581 00010001 8F 56 D1 0007A
BEQL 3$ ;3$ 0C 13 00081
CMPL R6, #98353 ;STATUS, #98353 00018031 8F 56 D1 00083
BEQL 3$ ;3$ 03 13 0008A
BRW 9$ ;9$ 0092 31 0008C
3$: CMPL (R9), #3 ;FILE_TYPE, #3 1591 03 69 D1 0008F
BNEQ 4$ ;4$ 07 12 00092
MOVZWL #512, R0 ;#512, R0 50 0200 8F 3C 00094
BRB 5$ ;5$ 05 11 00099
4$: MOVZWL 254(R7), R0 ;FILE_XABFHC+10, R0 50 00FE C7 3C 0009B
5$: MOVL R0, 300(R7) ;R0, REC_SIZE 012C C7 50 D0 000A0
BNEQ 6$ ;6$ 1593 07 12 000A5
MOVZWL #4096, 300(R7) ;#4096, REC_SIZE 012C C7 1000 8F 3C 000A7
6$: PUSHAB 304(R7) ;REC_ADDRESS 1595 0130 C7 9F 000AE
PUSHAB 300(R7) ;REC_SIZE 012C C7 9F 000B2
CALLS #2, (R8) ;#2, LIB$GET_VM 68 02 FB 000B6
MOVL R0, R6 ;R0, STATUS 56 50 D0 000B9
MOVZBL 63(R7), 308(R7) ;FILE_FAB+63, FIX_SIZE 1599 0134 C7 3F A7 9A 000BC
BEQL 7$ ;7$ 1601 0E 13 000C2
PUSHAB 312(R7) ;FIX_ADDRESS 1604 0138 C7 9F 000C4
PUSHAB 308(R7) ;FIX_SIZE 0134 C7 9F 000C8
CALLS #2, (R8) ;#2, LIB$GET_VM 68 02 FB 000CC
MOVL R0, R6 ;R0, STATUS 56 50 D0 000CF
7$: MOVC5 #0, (SP), #0, #68, 176(R7) ;#0, (SP), #0, #68, $RMS_PTR 1611 6E 00 2C 000D2
; 0044 8F 00 000D5
; 00B0 C7 000D9
MOVW #17409, 176(R7) ;#17409, $RMS_PTR 00B0 C7 4401 8F B0 000DC
MOVL #1048576, 180(R7) ;#1048576, $RMS_PTR+4 00B4 C7 00100000 8F D0 000E3
CLRB 206(R7) ;$RMS_PTR+30 00CE C7 94 000EC
MOVW 300(R7), 208(R7) ;REC_SIZE, $RMS_PTR+32 00D0 C7 012C C7 B0 000F0
MOVL 304(R7), 212(R7) ;REC_ADDRESS, $RMS_PTR+36 00D4 C7 0130 C7 D0 000F7
MOVAB (R7), 236(R7) ;FILE_FAB, $RMS_PTR+60 00EC C7 67 9E 000FE
TSTL 308(R7) ;FIX_SIZE 1613 0134 C7 D5 00103
BEQL 8$ ;8$ 07 13 00107
MOVL 312(R7), 220(R7) ;FIX_ADDRESS, FILE_RAB+44 00DC C7 0138 C7 D0 00109
8$: PUSHAB 176(R7) ;FILE_RAB 1616 00B0 C7 9F 00110
CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT 00000000G 00 01 FB 00114
MOVL R0, R6 ;R0, STATUS 56 50 D0 0011B
BLBS R6, 10$ ;STATUS, 10$ 1618 11 56 E8 0011E
9$: PUSHL R6 ;STATUS 1621 56 DD 00121
CALLS #1, G^U.6 ;#1, U.6 00000000V 00 01 FB 00123
MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 1622 50 00000000G 8F D0 0012A
RET ; 04 00131
10$: MNEGL #1, 296(R7) ;#1, FILE_REC_COUNT 1625 0128 C7 01 CE 00132
CLRL 24(R7) ;FILE_FAB+24 1626 18 A7 D4 00137
MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 1627 50 00000000G 8F D0 0013A
RET ; 04 00141
; Routine Size: 322 bytes, Routine Base: $CODE$ + 04D5
; 1629 1 %SBTTL 'FILE_OPEN'
; 1630 1
; 1631 1 GLOBAL ROUTINE FILE_OPEN (FUNCTION) =
; 1632 1
; 1633 1 !++
; 1634 1 ! FUNCTIONAL DESCRIPTION:
; 1635 1 !
; 1636 1 ! This routine will open a file for reading or writing depending on
; 1637 1 ! the function that is passed this routine. It will handle wildcards
; 1638 1 ! on the read function.
; 1639 1 !
; 1640 1 ! CALLING SEQUENCE:
; 1641 1 !
; 1642 1 ! status = FILE_OPEN(FUNCTION);
; 1643 1 !
; 1644 1 ! INPUT PARAMETERS:
; 1645 1 !
; 1646 1 ! FUNCTION - Function to do. Either FNC_READ or FNC_WRITE.
; 1647 1 !
; 1648 1 ! IMPLICIT INPUTS:
; 1649 1 !
; 1650 1 ! FILE_NAME and FILE_SIZE set up with the file name and the length
; 1651 1 ! of the name.
; 1652 1 !
; 1653 1 ! OUTPUT PARAMETERS:
; 1654 1 !
; 1655 1 ! None.
; 1656 1 !
; 1657 1 ! IMPLICIT OUTPUTS:
; 1658 1 !
; 1659 1 ! FILE_NAME and FILE_SIZE set up with the file name and the length
; 1660 1 ! of the name.
; 1661 1 !
; 1662 1 ! COMPLETION CODES:
; 1663 1 !
; 1664 1 ! KER_NORMAL - File opened correctly.
; 1665 1 ! KER_RMS32 - Problem processing the file.
; 1666 1 ! KER_INTERNALERR - Internal Kermit-32 error.
; 1667 1 !
; 1668 1 ! SIDE EFFECTS:
; 1669 1 !
; 1670 1 ! None.
; 1671 1 !
; 1672 1 !--
; 1673 1
; 1674 2 BEGIN
; 1675 2 !
; 1676 2 ! Completion codes returned:
; 1677 2 !
; 1678 2 EXTERNAL LITERAL
; 1679 2 KER_NORMAL, ! Normal return
; 1680 2 KER_INTERNALERR, ! Internal error
; 1681 2 KER_RMS32; ! RMS-32 error
; 1682 2
; 1683 2 EXTERNAL ROUTINE
; 1684 2 TT_TEXT : NOVALUE; ! Output an ASCIZ string
; 1685 2
; 1686 2 EXTERNAL ROUTINE
; 1687 2 !
; 1688 2 ! This external routine is called to perform any checks on the file
; 1689 2 ! specification that the user wishes. It must return a true value
; 1690 2 ! if the access is to be allowed, and a false value (error code) if
; 1691 2 ! access is to be denied. The error code may be any valid system wide
; 1692 2 ! error code, any Kermit-32 error code (KER_xxx) or a user specific code,
; 1693 2 ! provided a message file defining the error code is loaded with Kermit-32.
; 1694 2 !
; 1695 2 ! The routine is called as:
; 1696 2 !
; 1697 2 ! STATUS = USER_FILE_CHECK ( FILE NAME DESCRIPTOR, READ/WRITE FLAG)
; 1698 2 !
; 1699 2 ! The file name descriptor points to the file specification supplied by
; 1700 2 ! the user. The read/write flag is TRUE if the file is being read, and
; 1701 2 ! false if it is being written.
; 1702 2 !
; 1703 2 USER_FILE_CHECK : ADDRESSING_MODE(GENERAL) WEAK;
; 1704 2
; 1705 2 LOCAL
; 1706 2 STATUS, ! Random status values
; 1707 2 ITMLST : VECTOR [4, LONG], ! For GETDVI call
; 1708 2 SIZE : WORD; ! Size of resulting file name
; 1709 2
; 1710 2 !
; 1711 2 ! Assume we can do searches
; 1712 2 !
; 1713 2 SEARCH_FLAG = TRUE;
; 1714 2 DEV_CLASS = DC$_DISK; ! Assume disk file
; 1715 2 !
; 1716 2 ! Now do the function dependent processing
; 1717 2 !
; 1718 2 FILE_MODE = .FUNCTION;
; 1719 2 FILE_DESC [DSC$W_LENGTH] = .FILE_SIZE; ! Length of file name
; 1720 2 !
; 1721 2 ! Call user routine (if any)
; 1722 2 !
; 1723 2 IF USER_FILE_CHECK NEQ 0
; 1724 2 THEN
; 1725 3 BEGIN
; 1726 3 STATUS = USER_FILE_CHECK (FILE_DESC, %REF (.FILE_MODE EQL FNC_READ));
; 1727 3 IF NOT .STATUS
; 1728 3 THEN
; 1729 4 BEGIN
; 1730 4 LIB$SIGNAL (.STATUS);
; 1731 4 RETURN .STATUS;
; 1732 3 END;
; 1733 2 END;
; 1734 2 !
; 1735 2 ! Select the correct routine depending on if we are reading or writing.
; 1736 2 !
; 1737 2
; 1738 2 SELECTONE .FUNCTION OF
; 1739 2 SET
; 1740 2
; 1741 2 [FNC_READ] :
; 1742 3 BEGIN
; 1743 3 !
; 1744 3 ! Determine device type
; 1745 3 !
; 1746 3 ITMLST [0] = DVI$_DEVCLASS^16 + 4; ! Want device class
; 1747 3 ITMLST [1] = DEV_CLASS; ! Put it there
; 1748 3 ITMLST [2] = ITMLST [2]; ! Put the size here
; 1749 3 ITMLST [3] = 0; ! End the list
; 1750 3 STATUS = $GETDVIW (DEVNAM = FILE_DESC, ITMLST = ITMLST);
; 1751 3 !
; 1752 3 ! If not a disk, can't do search
; 1753 3 !
; 1754 3 IF .STATUS AND .DEV_CLASS NEQ DC$_DISK THEN SEARCH_FLAG = FALSE;
; 1755 3
; 1756 3 !
; 1757 3 ! Now set up the FAB with the information it needs.
; 1758 3 !
; P 1759 3 $FAB_INIT (FAB = FILE_FAB, FOP = NAM, FNA = FILE_NAME, FNS = .FILE_SIZE,
; 1760 3 NAM = FILE_NAM, DNM = '.;0');
; 1761 3 !
; 1762 3 ! Now initialize the NAM block
; 1763 3 !
; P 1764 3 $NAM_INIT (NAM = FILE_NAM, RSA = RES_STR, RSS = NAM$C_MAXRSS, ESA = EXP_STR,
; 1765 3 ESS = NAM$C_MAXRSS);
; 1766 3 !
; 1767 3 ! First parse the file specification.
; 1768 3 !
; 1769 3 STATUS = $PARSE (FAB = FILE_FAB);
; 1770 3
; 1771 3 IF NOT .STATUS
; 1772 3 THEN
; 1773 4 BEGIN
; 1774 4 FILE_ERROR (.STATUS);
; 1775 4 RETURN KER_RMS32;
; 1776 3 END;
; 1777 3
; 1778 3 IF .SEARCH_FLAG
; 1779 3 THEN
; 1780 4 BEGIN
; 1781 4 STATUS = $SEARCH (FAB = FILE_FAB);
; 1782 4
; 1783 4 IF NOT .STATUS
; 1784 4 THEN
; 1785 5 BEGIN
; 1786 5 FILE_ERROR (.STATUS);
; 1787 5 RETURN KER_RMS32;
; 1788 4 END;
; 1789 4
; 1790 3 END;
; 1791 3
; 1792 3 !
; 1793 3 ! We now have an expanded file specification that we can use to process
; 1794 3 ! the file.
; 1795 3 !
; 1796 3 STATUS = OPEN_READING (); ! Open the file
; 1797 3
; 1798 3 IF NOT .STATUS THEN RETURN .STATUS; ! If we couldn't, pass error back
; 1799 3
; 1800 3 !
; 1801 3 ! Tell user what name we ended up with for storing the file
; 1802 3 !
; 1803 3
; 1804 3 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
; 1805 3 THEN
; 1806 4 BEGIN
; 1807 4
; 1808 4 IF .FILE_NAM [NAM$B_RSS] GTR 0
; 1809 4 THEN
; 1810 5 BEGIN
; 1811 5 CH$WCHAR (CHR_NUL,
; 1812 5 CH$PTR (.FILE_NAM [NAM$L_RSA],
; 1813 5 .FILE_NAM [NAM$B_RSL]));
; 1814 5 TT_TEXT (.FILE_NAM [NAM$L_RSA]);
; 1815 5 END
; 1816 4 ELSE
; 1817 5 BEGIN
; 1818 5 CH$WCHAR (CHR_NUL,
; 1819 5 CH$PTR (.FILE_NAM [NAM$L_ESA],
; 1820 5 .FILE_NAM [NAM$B_ESL]));
; 1821 5 TT_TEXT (.FILE_NAM [NAM$L_ESA]);
; 1822 4 END;
; 1823 4
; 1824 4 TT_TEXT (UPLIT (%ASCIZ' as '));
; 1825 3 END;
; 1826 3
; 1827 2 END; ! End of [FNC_READ]
; 1828 2
; 1829 2 [FNC_WRITE] :
; 1830 3 BEGIN
; 1831 3
; 1832 3 SELECTONE .FILE_TYPE OF
; 1833 3 SET
; 1834 3
; 1835 3 [FILE_ASC] :
; 1836 4 BEGIN
; P 1837 4 $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
; P 1838 4 FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
; 1839 4 ORG = SEQ, RFM = VAR, RAT = CR);
; 1840 3 END;
; 1841 3
; 1842 3 [FILE_BIN] :
; 1843 4 BEGIN
; P 1844 4 $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
; P 1845 4 FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
; 1846 4 ORG = SEQ, RFM = VAR);
; 1847 3 END;
; 1848 3
; 1849 3 [FILE_FIX] :
; 1850 4 BEGIN
; P 1851 4 $FAB_INIT (FAB = FILE_FAB, FAC = PUT, FNA = FILE_NAME,
; P 1852 4 FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM,
; P 1853 4 ORG = SEQ, RFM = FIX, MRS = (IF .file_blocksize_set
; P 1854 4 THEN .file_blocksize
; 1855 4 ELSE 512));
; 1856 3 END;
; 1857 3
; 1858 3 [FILE_BLK] :
; 1859 4 BEGIN
; P 1860 4 $FAB_INIT (FAB = FILE_FAB, FAC = (PUT, BIO), FNA = FILE_NAME,
; 1861 4 FNS = .FILE_SIZE, FOP = (MXV, CBT, SQO, TEF), NAM = FILE_NAM);
; 1862 3 END;
; 1863 3 TES;
; 1864 3
; 1865 3 !
; 1866 3 ! If we had an alternate file name from the receive command, use it
; 1867 3 ! instead of what KERMSG has told us.
; 1868 3 !
; 1869 3
; 1870 3 IF .ALT_FILE_SIZE GTR 0
; 1871 3 THEN
; 1872 4 BEGIN
; 1873 4 LOCAL
; 1874 4 ALT_FILE_DESC : BLOCK [8, BYTE];
; 1875 4
; 1876 4 ALT_FILE_DESC = .FILE_DESC;
; 1877 4 ALT_FILE_DESC [DSC$W_LENGTH] = .ALT_FILE_SIZE;
; 1878 4 ALT_FILE_DESC [DSC$A_POINTER] = ALT_FILE_NAME;
; 1879 4 IF USER_FILE_CHECK NEQ 0
; 1880 4 THEN
; 1881 5 BEGIN
; 1882 5 STATUS = USER_FILE_CHECK (ALT_FILE_DESC, %REF (.FILE_MODE EQL FNC_READ));
; 1883 5 IF NOT .STATUS
; 1884 5 THEN
; 1885 6 BEGIN
; 1886 6 LIB$SIGNAL (.STATUS);
; 1887 6 RETURN .STATUS;
; 1888 5 END;
; 1889 4 END;
; 1890 4 FILE_FAB [FAB$L_FNA] = ALT_FILE_NAME;
; 1891 4 FILE_FAB [FAB$B_FNS] = .ALT_FILE_SIZE;
; 1892 3 END;
; 1893 3
; P 1894 3 $NAM_INIT (NAM = FILE_NAM, ESA = EXP_STR, ESS = NAM$C_MAXRSS, RSA = RES_STR,
; 1895 3 RSS = NAM$C_MAXRSS);
; 1896 3 !
; 1897 3 ! Now allocate a buffer for the records
; 1898 3 !
; 1899 3 ! Determine correct buffer size
; 1900 3
; 1901 3 SELECTONE .FILE_TYPE OF
; 1902 3 SET
; 1903 3
; 1904 3 [FILE_ASC] :
; 1905 3 REC_SIZE = MAX_REC_LENGTH;
; 1906 3
; 1907 3 [FILE_BIN] :
; 1908 4 REC_SIZE = (IF .file_blocksize_set THEN .file_blocksize
; 1909 3 ELSE 510);
; 1910 3
; 1911 3 [FILE_BLK] :
; 1912 3 REC_SIZE = 512;
; 1913 3
; 1914 3 [FILE_FIX] :
; 1915 4 REC_SIZE = (IF .file_blocksize_set THEN .file_blocksize
; 1916 3 ELSE 512);
; 1917 3
; 1918 3 TES;
; 1919 3
; 1920 3 STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
; 1921 3 !
; 1922 3 ! Now create the file
; 1923 3 !
; 1924 3 STATUS = $CREATE (FAB = FILE_FAB);
; 1925 3
; 1926 3 IF NOT .STATUS
; 1927 3 THEN
; 1928 4 BEGIN
; 1929 4 FILE_ERROR (.STATUS);
; 1930 4 RETURN KER_RMS32;
; 1931 3 END;
; 1932 3
; P 1933 3 $RAB_INIT (RAB = FILE_RAB, FAB = FILE_FAB, RAC = SEQ, RBF = .REC_ADDRESS,
; 1934 3 ROP = <NLK, WAT>);
; 1935 3 STATUS = $CONNECT (RAB = FILE_RAB);
; 1936 3
; 1937 3 IF NOT .STATUS
; 1938 3 THEN
; 1939 4 BEGIN
; 1940 4 FILE_ERROR (.STATUS);
; 1941 4 RETURN KER_RMS32;
; 1942 3 END;
; 1943 3
; 1944 3 !
; 1945 3 ! Set the initial state into the FAB field. This is used to remember
; 1946 3 ! whether we need to ignore the line feed which follows a carriage return.
; 1947 3 !
; 1948 3 FILE_FAB [FAB$L_CTX] = F_STATE_DATA;
; 1949 3 FILE_REC_COUNT = 0;
; 1950 3 FILE_REC_POINTER = CH$PTR (.REC_ADDRESS);
; 1951 3 !
; 1952 3 ! Tell user what name we ended up with for storing the file
; 1953 3 !
; 1954 3
; 1955 3 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
; 1956 3 THEN
; 1957 4 BEGIN
; 1958 4 TT_TEXT (UPLIT (%ASCIZ' as '));
; 1959 4
; 1960 4 IF .FILE_NAM [NAM$B_RSL] GTR 0
; 1961 4 THEN
; 1962 5 BEGIN
; 1963 5 CH$WCHAR (CHR_NUL,
; 1964 5 CH$PTR (.FILE_NAM [NAM$L_RSA],
; 1965 5 .FILE_NAM [NAM$B_RSL]));
; 1966 5 TT_TEXT (.FILE_NAM [NAM$L_RSA]);
; 1967 5 END
; 1968 4 ELSE
; 1969 5 BEGIN
; 1970 5 CH$WCHAR (CHR_NUL,
; 1971 5 CH$PTR (.FILE_NAM [NAM$L_ESA],
; 1972 5 .FILE_NAM [NAM$B_ESL]));
; 1973 5 TT_TEXT (.FILE_NAM [NAM$L_ESA]);
; 1974 4 END;
; 1975 4
; 1976 4 TT_OUTPUT ();
; 1977 3 END;
; 1978 3
; 1979 2 END;
; 1980 2
; 1981 2 [OTHERWISE] :
; 1982 2 RETURN KER_INTERNALERR;
; 1983 2 TES;
; 1984 2
; 1985 2 !
; 1986 2 ! Copy the file name based on the type of file name we are to use.
; 1987 2 ! The possibilities are:
; 1988 2 ! Normal - Just copy name and type
; 1989 2 ! Full - Copy entire name string (either resultant or expanded)
; 1990 2 ! Untranslated - Copy string from name on (includes version, etc.)
; 1991 2
; 1992 2 IF .DEV_CLASS EQL DC$_MAILBOX
; 1993 2 THEN
; 1994 3 BEGIN
; 1995 3 SIZE = 0;
; 1996 3 FILE_NAME = 0;
; 1997 3 END
; 1998 2 ELSE
; 1999 2
; 2000 2 SELECTONE .FIL_NORMAL_FORM OF
; 2001 2 SET
; 2002 2
; 2003 2 [FNM_FULL] :
; 2004 3 BEGIN
; 2005 3
; 2006 3 IF .FILE_NAM [NAM$B_RSL] GTR 0
; 2007 3 THEN
; 2008 4 BEGIN
; 2009 4 CH$COPY (.FILE_NAM [NAM$B_RSL], CH$PTR (.FILE_NAM [NAM$L_RSA]),
; 2010 4 CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
; 2011 4 SIZE = .FILE_NAM [NAM$B_RSL];
; 2012 4 END
; 2013 3 ELSE
; 2014 4 BEGIN
; 2015 4 CH$COPY (.FILE_NAM [NAM$B_ESL], CH$PTR (.FILE_NAM [NAM$L_ESA]),
; 2016 4 CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
; 2017 4 SIZE = .FILE_NAM [NAM$B_ESL];
; 2018 4 END
; 2019 4
; 2020 2 END;
; 2021 2
; 2022 2 [FNM_NORMAL, FNM_UNTRAN] :
; 2023 3 BEGIN
; 2024 3 CH$COPY (.FILE_NAM [NAM$B_NAME], CH$PTR (.FILE_NAM [NAM$L_NAME]),
; 2025 3 .FILE_NAM [NAM$B_TYPE], CH$PTR (.FILE_NAM [NAM$L_TYPE]), CHR_NUL,
; 2026 3 MAX_FILE_NAME, CH$PTR (FILE_NAME));
; 2027 3 SIZE = .FILE_NAM [NAM$B_NAME] + .FILE_NAM [NAM$B_TYPE];
; 2028 2 END;
; 2029 2 TES;
; 2030 2
; 2031 2 IF .SIZE GTR MAX_FILE_NAME THEN FILE_SIZE = MAX_FILE_NAME ELSE FILE_SIZE = .SIZE;
; 2032 2
; 2033 2 RETURN KER_NORMAL;
; 2034 1 END; ! End of FILE_OPEN
.PSECT $PLIT$,NOWRT,NOEXE,2
P.AAA: .ASCII \.;0\ ; 30 3B 2E 00000
.BLKB 1 ; 00003
P.AAB: .ASCII \ as \<0><0><0><0> ; 00 00 00 00 20 73 61 20 00004
P.AAC: .ASCII \ as \<0><0><0><0> ; 00 00 00 00 20 73 61 20 0000C
U.41= U.10
U.42= U.11
U.43= U.10
U.44= U.10
U.45= U.10
U.46= U.10
U.47= U.11
U.48= U.12
.EXTRN KER_INTERNALERR, TT_TEXT, SYS$GETDVIW, SYS$PARSE, SYS$SEARCH, SYS$CREATE
.WEAK USER_FILE_CHECK
.PSECT $CODE$,NOWRT,2
.ENTRY FILE_OPEN, ^M<R2,R3,R4,R5,R6,R7,-;FILE_OPEN, Save R2,R3,R4,R5,R6,R7,- 1631 0FFC 00000
R8,R9,R10,R11> ;R8,R9,R10,R11
SUBL2 #28, SP ;#28, SP 5E 1C C2 00002
MOVL #1, G^U.7 ;#1, U.7 1713 00000000' 00 01 D0 00005
MOVL #1, G^U.8 ;#1, U.8 1714 00000000' 00 01 D0 0000C
MOVL 4(AP), R2 ;FUNCTION, R2 1718 52 04 AC D0 00013
MOVL R2, G^U.14 ;R2, U.14 00000000' 00 52 D0 00017
MOVW G^FILE_SIZE, G^FILE_DESC ;FILE_SIZE, FILE_DESC 1719 00000000' 00 00000000G 00 B0 0001E
MOVAB G^USER_FILE_CHECK, R0 ;USER_FILE_CHECK, R0 1723 50 00000000G 00 9E 00029
CLRL R8 ;R8 58 D4 00030
TSTL R0 ;R0 50 D5 00032
BEQL 2$ ;2$ 26 13 00034
INCL R8 ;R8 58 D6 00036
CLRL (SP) ;(SP) 1726 6E D4 00038
TSTL G^U.14 ;U.14 00000000' 00 D5 0003A
BNEQ 1$ ;1$ 02 12 00040
INCL (SP) ;(SP) 6E D6 00042
1$: PUSHL SP ;SP 5E DD 00044
PUSHAB G^FILE_DESC ;FILE_DESC 00000000' 00 9F 00046
CALLS #2, G^USER_FILE_CHECK ;#2, USER_FILE_CHECK 00000000G 00 02 FB 0004C
MOVL R0, R7 ;R0, STATUS 57 50 D0 00053
BLBS R7, 2$ ;STATUS, 2$ 1727 03 57 E8 00056
BRW 22$ ;22$ 02F7 31 00059
2$: TSTL R2 ;R2 1741 52 D5 0005C
BEQL 3$ ;3$ 03 13 0005E
BRW 11$ ;11$ 016B 31 00060
3$: MOVL #262148, 12(SP) ;#262148, ITMLST 1746 0C AE 00040004 8F D0 00063
MOVAB G^U.8, 16(SP) ;U.8, ITMLST+4 1747 10 AE 00000000' 00 9E 0006B
MOVAB 20(SP), 20(SP) ;ITMLST+8, ITMLST+8 1748 14 AE 14 AE 9E 00073
CLRL 24(SP) ;ITMLST+12 1749 18 AE D4 00078
CLRQ -(SP) ;-(SP) 1750 7E 7C 0007B
CLRQ -(SP) ;-(SP) 7E 7C 0007D
PUSHAB 28(SP) ;ITMLST 1C AE 9F 0007F
PUSHAB G^FILE_DESC ;FILE_DESC 00000000' 00 9F 00082
CLRQ -(SP) ;-(SP) 7E 7C 00088
CALLS #8, G^SYS$GETDVIW ;#8, SYS$GETDVIW 00000000G 00 08 FB 0008A
MOVL R0, R7 ;R0, STATUS 57 50 D0 00091
BLBC R7, 4$ ;STATUS, 4$ 1754 0F 57 E9 00094
CMPL G^U.8, #1 ;U.8, #1 01 00000000' 00 D1 00097
BEQL 4$ ;4$ 06 13 0009E
CLRL G^U.7 ;U.7 00000000' 00 D4 000A0
4$: MOVC5 #0, (SP), #0, #80, G^U.41 ;#0, (SP), #0, #80, U.41 1760 6E 00 2C 000A6
; 0050 8F 00 000A9
; 00000000' 00 000AD
MOVW #20483, G^U.41 ;#20483, U.41 00000000' 00 5003 8F B0 000B2
MOVL #16777216, G^U.41+4 ;#16777216, U.41+4 00000000' 00 01000000 8F D0 000BB
MOVB #2, G^U.41+22 ;#2, U.41+22 00000000' 00 02 90 000C6
MOVB #2, G^U.41+31 ;#2, U.41+31 00000000' 00 02 90 000CD
MOVAB G^U.11, G^U.41+40 ;U.11, U.41+40 00000000' 00 00000000' 00 9E 000D4
MOVAB G^FILE_NAME, G^U.41+44 ;FILE_NAME, U.41+44 00000000' 00 00000000G 00 9E 000DF
MOVAB G^P.AAA, G^U.41+48 ;P.AAA, U.41+48 00000000' 00 00000000' 00 9E 000EA
MOVB G^FILE_SIZE, G^U.41+52 ;FILE_SIZE, U.41+52 00000000' 00 00000000G 00 90 000F5
MOVB #3, G^U.41+53 ;#3, U.41+53 00000000' 00 03 90 00100
MOVC5 #0, (SP), #0, #96, G^U.42 ;#0, (SP), #0, #96, U.42 1765 6E 00 2C 00107
; 0060 8F 00 0010A
; 00000000' 00 0010E
MOVW #24578, G^U.42 ;#24578, U.42 00000000' 00 6002 8F B0 00113
MNEGB #1, G^U.42+2 ;#1, U.42+2 00000000' 00 01 8E 0011C
MOVAB G^U.22, G^U.42+4 ;U.22, U.42+4 00000000' 00 00000000' 00 9E 00123
MNEGB #1, G^U.42+10 ;#1, U.42+10 00000000' 00 01 8E 0012E
MOVAB G^U.21, G^U.42+12 ;U.21, U.42+12 00000000' 00 00000000' 00 9E 00135
PUSHAB G^U.10 ;U.10 1769 00000000' 00 9F 00140
CALLS #1, G^SYS$PARSE ;#1, SYS$PARSE 00000000G 00 01 FB 00146
MOVL R0, R7 ;R0, STATUS 57 50 D0 0014D
BLBC R7, 5$ ;STATUS, 5$ 1771 17 57 E9 00150
BLBC G^U.7, 6$ ;U.7, 6$ 1778 16 00000000' 00 E9 00153
PUSHAB G^U.10 ;U.10 1781 00000000' 00 9F 0015A
CALLS #1, G^SYS$SEARCH ;#1, SYS$SEARCH 00000000G 00 01 FB 00160
MOVL R0, R7 ;R0, STATUS 57 50 D0 00167
5$: BLBS R7, 6$ ;STATUS, 6$ 1783 03 57 E8 0016A
BRW 33$ ;33$ 0312 31 0016D
6$: CALLS #0, W^U.35 ;#0, U.35 1796 FD49 CF 00 FB 00170
MOVL R0, R7 ;R0, STATUS 57 50 D0 00175
BLBS R7, 7$ ;STATUS, 7$ 1798 03 57 E8 00178
BRW 23$ ;23$ 01DE 31 0017B
7$: BLBS G^CONNECT_FLAG, 10$ ;CONNECT_FLAG, 10$ 1804 46 00000000G 00 E8 0017E
BLBC G^TY_FIL, 10$ ;TY_FIL, 10$ 3F 00000000G 00 E9 00185
TSTB G^U.11+2 ;U.11+2 1808 00000000' 00 95 0018C
BEQL 8$ ;8$ 10 13 00192
MOVL G^U.11+4, R0 ;U.11+4, R0 1812 50 00000000' 00 D0 00194
MOVZBL G^U.11+3, R1 ;U.11+3, R1 1813 51 00000000' 00 9A 0019B
BRB 9$ ;9$ 0E 11 001A2
8$: MOVL G^U.11+12, R0 ;U.11+12, R0 1819 50 00000000' 00 D0 001A4
MOVZBL G^U.11+11, R1 ;U.11+11, R1 1820 51 00000000' 00 9A 001AB
9$: CLRB (R1)[R0] ;(R1)[R0] 6140 94 001B2
PUSHL R0 ;R0 1821 50 DD 001B5
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 001B7
PUSHAB G^P.AAB ;P.AAB 1824 00000000' 00 9F 001BE
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 001C4
10$: BRW 38$ ;38$ 1738 0335 31 001CB
11$: CMPL R2, #1 ;R2, #1 1829 01 52 D1 001CE
BEQL 12$ ;12$ 03 13 001D1
BRW 37$ ;37$ 0325 31 001D3
12$: MOVL G^FILE_TYPE, R6 ;FILE_TYPE, R6 1832 56 00000000' 00 D0 001D6
CMPL R6, #1 ;R6, #1 1835 01 56 D1 001DD
BNEQ 13$ ;13$ 32 12 001E0
MOVC5 #0, (SP), #0, #80, G^U.43 ;#0, (SP), #0, #80, U.43 1839 6E 00 2C 001E2
; 0050 8F 00 001E5
; 00000000' 00 001E9
MOVW #20483, G^U.43 ;#20483, U.43 00000000' 00 5003 8F B0 001EE
MOVL #270532674, G^U.43+4 ;#270532674, U.43+4 00000000' 00 10200042 8F D0 001F7
MOVB #1, G^U.43+22 ;#1, U.43+22 00000000' 00 01 90 00202
MOVW #512, G^U.43+29 ;#512, U.43+29 00000000' 00 0200 8F B0 00209
BRB 14$ ;14$ 32 11 00212
13$: CMPL R6, #2 ;R6, #2 1842 02 56 D1 00214
BNEQ 15$ ;15$ 30 12 00217
MOVC5 #0, (SP), #0, #80, G^U.44 ;#0, (SP), #0, #80, U.44 1846 6E 00 2C 00219
; 0050 8F 00 0021C
; 00000000' 00 00220
MOVW #20483, G^U.44 ;#20483, U.44 00000000' 00 5003 8F B0 00225
MOVL #270532674, G^U.44+4 ;#270532674, U.44+4 00000000' 00 10200042 8F D0 0022E
MOVB #1, G^U.44+22 ;#1, U.44+22 00000000' 00 01 90 00239
CLRB G^U.44+29 ;U.44+29 00000000' 00 94 00240
14$: BRW 19$ ;19$ 00A4 31 00246
15$: CMPL R6, #4 ;R6, #4 1849 04 56 D1 00249
BNEQ 18$ ;18$ 73 12 0024C
MOVC5 #0, (SP), #0, #80, G^U.45 ;#0, (SP), #0, #80, U.45 1855 6E 00 2C 0024E
; 0050 8F 00 00251
; 00000000' 00 00255
MOVW #20483, G^U.45 ;#20483, U.45 00000000' 00 5003 8F B0 0025A
MOVL #270532674, G^U.45+4 ;#270532674, U.45+4 00000000' 00 10200042 8F D0 00263
MOVB #1, G^U.45+22 ;#1, U.45+22 00000000' 00 01 90 0026E
CLRB G^U.45+29 ;U.45+29 00000000' 00 94 00275
MOVB #1, G^U.45+31 ;#1, U.45+31 00000000' 00 01 90 0027B
MOVAB G^U.11, G^U.45+40 ;U.11, U.45+40 00000000' 00 00000000' 00 9E 00282
MOVAB G^FILE_NAME, G^U.45+44 ;FILE_NAME, U.45+44 00000000' 00 00000000G 00 9E 0028D
MOVB G^FILE_SIZE, G^U.45+52 ;FILE_SIZE, U.45+52 00000000' 00 00000000G 00 90 00298
BLBC G^FILE_BLOCKSIZE_SET, 16$ ;FILE_BLOCKSIZE_SET, 16$ 09 00000000' 00 E9 002A3
MOVL G^FILE_BLOCKSIZE, R0 ;FILE_BLOCKSIZE, R0 50 00000000' 00 D0 002AA
BRB 17$ ;17$ 05 11 002B1
16$: MOVZWL #512, R0 ;#512, R0 50 0200 8F 3C 002B3
17$: MOVW R0, G^U.45+54 ;R0, U.45+54 00000000' 00 50 B0 002B8
BRB 20$ ;20$ 54 11 002BF
18$: CMPL R6, #3 ;R6, #3 1858 03 56 D1 002C1
BNEQ 20$ ;20$ 4F 12 002C4
MOVC5 #0, (SP), #0, #80, G^U.46 ;#0, (SP), #0, #80, U.46 1861 6E 00 2C 002C6
; 0050 8F 00 002C9
; 00000000' 00 002CD
MOVW #20483, G^U.46 ;#20483, U.46 00000000' 00 5003 8F B0 002D2
MOVL #270532674, G^U.46+4 ;#270532674, U.46+4 00000000' 00 10200042 8F D0 002DB
MOVB #33, G^U.46+22 ;#33, U.46+22 00000000' 00 21 90 002E6
19$: MOVB #2, G^U.46+31 ;#2, U.46+31 00000000' 00 02 90 002ED
MOVAB G^U.11, G^U.46+40 ;U.11, U.46+40 00000000' 00 00000000' 00 9E 002F4
MOVAB G^FILE_NAME, G^U.46+44 ;FILE_NAME, U.46+44 00000000' 00 00000000G 00 9E 002FF
MOVB G^FILE_SIZE, G^U.46+52 ;FILE_SIZE, U.46+52 00000000' 00 00000000G 00 90 0030A
20$: MOVL G^ALT_FILE_SIZE, R0 ;ALT_FILE_SIZE, R0 1870 50 00000000G 00 D0 00315
BLEQ 25$ ;25$ 58 15 0031C
MOVL G^FILE_DESC, 4(SP) ;FILE_DESC, ALT_FILE_DESC 1876 04 AE 00000000' 00 D0 0031E
MOVW R0, 4(SP) ;R0, ALT_FILE_DESC 1877 04 AE 50 B0 00326
MOVAB G^ALT_FILE_NAME, 8(SP) ;ALT_FILE_NAME, ALT_FILE_DESC+4 1878 08 AE 00000000G 00 9E 0032A
BLBC R8, 24$ ;R8, 24$ 1879 2B 58 E9 00332
CLRL (SP) ;(SP) 1882 6E D4 00335
TSTL G^U.14 ;U.14 00000000' 00 D5 00337
BNEQ 21$ ;21$ 02 12 0033D
INCL (SP) ;(SP) 6E D6 0033F
21$: PUSHL SP ;SP 5E DD 00341
PUSHAB 8(SP) ;ALT_FILE_DESC 08 AE 9F 00343
CALLS #2, G^USER_FILE_CHECK ;#2, USER_FILE_CHECK 00000000G 00 02 FB 00346
MOVL R0, R7 ;R0, STATUS 57 50 D0 0034D
BLBS R7, 24$ ;STATUS, 24$ 1883 0D 57 E8 00350
22$: PUSHL R7 ;STATUS 1886 57 DD 00353
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00355
23$: MOVL R7, R0 ;STATUS, R0 1887 50 57 D0 0035C
RET ; 04 0035F
24$: MOVAB G^ALT_FILE_NAME, G^U.10+44 ;ALT_FILE_NAME, U.10+44 1890 00000000' 00 00000000G 00 9E 00360
MOVB G^ALT_FILE_SIZE, G^U.10+52 ;ALT_FILE_SIZE, U.10+52 1891 00000000' 00 00000000G 00 90 0036B
25$: MOVC5 #0, (SP), #0, #96, G^U.47 ;#0, (SP), #0, #96, U.47 1895 6E 00 2C 00376
; 0060 8F 00 00379
; 00000000' 00 0037D
MOVW #24578, G^U.47 ;#24578, U.47 00000000' 00 6002 8F B0 00382
MNEGB #1, G^U.47+2 ;#1, U.47+2 00000000' 00 01 8E 0038B
MOVAB G^U.22, G^U.47+4 ;U.22, U.47+4 00000000' 00 00000000' 00 9E 00392
MNEGB #1, G^U.47+10 ;#1, U.47+10 00000000' 00 01 8E 0039D
MOVAB G^U.21, G^U.47+12 ;U.21, U.47+12 00000000' 00 00000000' 00 9E 003A4
MOVL G^FILE_TYPE, R0 ;FILE_TYPE, R0 1901 50 00000000' 00 D0 003AF
CMPL R0, #1 ;R0, #1 1904 01 50 D1 003B6
BNEQ 26$ ;26$ 0B 12 003B9
MOVZWL #4096, G^U.17 ;#4096, U.17 1905 00000000' 00 1000 8F 3C 003BB
BRB 32$ ;32$ 44 11 003C4
26$: CMPL R0, #2 ;R0, #2 1907 02 50 D1 003C6
BNEQ 27$ ;27$ 0E 12 003C9
BLBS G^FILE_BLOCKSIZE_SET, 29$ ;FILE_BLOCKSIZE_SET, 29$ 1908 23 00000000' 00 E8 003CB
MOVZWL #510, R0 ;#510, R0 1909 50 01FE 8F 3C 003D2
BRB 31$ ;31$ 1908 2A 11 003D7
27$: CMPL R0, #3 ;R0, #3 1911 03 50 D1 003D9
BNEQ 28$ ;28$ 0B 12 003DC
MOVZWL #512, G^U.17 ;#512, U.17 1912 00000000' 00 0200 8F 3C 003DE
BRB 32$ ;32$ 21 11 003E7
28$: CMPL R0, #4 ;R0, #4 1914 04 50 D1 003E9
BNEQ 32$ ;32$ 1C 12 003EC
BLBC G^FILE_BLOCKSIZE_SET, 30$ ;FILE_BLOCKSIZE_SET, 30$ 1915 09 00000000' 00 E9 003EE
29$: MOVL G^FILE_BLOCKSIZE, R0 ;FILE_BLOCKSIZE, R0 50 00000000' 00 D0 003F5
BRB 31$ ;31$ 05 11 003FC
30$: MOVZWL #512, R0 ;#512, R0 1916 50 0200 8F 3C 003FE
31$: MOVL R0, G^U.17 ;R0, U.17 1915 00000000' 00 50 D0 00403
32$: PUSHAB G^U.18 ;U.18 1920 00000000' 00 9F 0040A
PUSHAB G^U.17 ;U.17 00000000' 00 9F 00410
CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM 00000000G 00 02 FB 00416
MOVL R0, R7 ;R0, STATUS 57 50 D0 0041D
PUSHAB G^U.10 ;U.10 1924 00000000' 00 9F 00420
CALLS #1, G^SYS$CREATE ;#1, SYS$CREATE 00000000G 00 01 FB 00426
MOVL R0, R7 ;R0, STATUS 57 50 D0 0042D
BLBC R7, 33$ ;STATUS, 33$ 1926 4F 57 E9 00430
MOVC5 #0, (SP), #0, #68, G^U.48 ;#0, (SP), #0, #68, U.48 1934 6E 00 2C 00433
; 0044 8F 00 00436
; 00000000' 00 0043A
MOVW #17409, G^U.48 ;#17409, U.48 00000000' 00 4401 8F B0 0043F
MOVL #1179648, G^U.48+4 ;#1179648, U.48+4 00000000' 00 00120000 8F D0 00448
CLRB G^U.48+30 ;U.48+30 00000000' 00 94 00453
MOVL G^U.18, G^U.48+40 ;U.18, U.48+40 00000000' 00 00000000' 00 D0 00459
MOVAB G^U.10, G^U.48+60 ;U.10, U.48+60 00000000' 00 00000000' 00 9E 00464
PUSHAB G^U.12 ;U.12 1935 00000000' 00 9F 0046F
CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT 00000000G 00 01 FB 00475
MOVL R0, R7 ;R0, STATUS 57 50 D0 0047C
BLBS R7, 34$ ;STATUS, 34$ 1937 11 57 E8 0047F
33$: PUSHL R7 ;STATUS 1940 57 DD 00482
CALLS #1, G^U.6 ;#1, U.6 00000000V 00 01 FB 00484
MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 1941 50 00000000G 8F D0 0048B
RET ; 04 00492
34$: MOVL #2, G^U.10+24 ;#2, U.10+24 1948 00000000' 00 02 D0 00493
CLRL G^U.16 ;U.16 1949 00000000' 00 D4 0049A
MOVL G^U.18, G^U.15 ;U.18, U.15 1950 00000000' 00 00000000' 00 D0 004A0
BLBS G^CONNECT_FLAG, 38$ ;CONNECT_FLAG, 38$ 1955 51 00000000G 00 E8 004AB
BLBC G^TY_FIL, 38$ ;TY_FIL, 38$ 4A 00000000G 00 E9 004B2
PUSHAB G^P.AAC ;P.AAC 1958 00000000' 00 9F 004B9
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 004BF
MOVZBL G^U.11+3, R1 ;U.11+3, R1 1960 51 00000000' 00 9A 004C6
BLEQ 35$ ;35$ 09 15 004CD
MOVL G^U.11+4, R0 ;U.11+4, R0 1964 50 00000000' 00 D0 004CF
BRB 36$ ;36$ 1965 0E 11 004D6
35$: MOVL G^U.11+12, R0 ;U.11+12, R0 1971 50 00000000' 00 D0 004D8
MOVZBL G^U.11+11, R1 ;U.11+11, R1 1972 51 00000000' 00 9A 004DF
36$: CLRB (R1)[R0] ;(R1)[R0] 6140 94 004E6
PUSHL R0 ;R0 1973 50 DD 004E9
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 004EB
CALLS #0, G^TT_OUTPUT ;#0, TT_OUTPUT 1976 00000000G 00 00 FB 004F2
BRB 38$ ;38$ 1738 08 11 004F9
37$: MOVL #KER_INTERNALERR, R0 ;#KER_INTERNALERR, R0 1982 50 00000000G 8F D0 004FB
RET ; 04 00502
38$: CMPL G^U.8, #160 ;U.8, #160 1992 000000A0 8F 00000000' 00 D1 00503
BNEQ 39$ ;39$ 0A 12 0050E
CLRW R6 ;SIZE 1995 56 B4 00510
CLRL G^FILE_NAME ;FILE_NAME 1996 00000000G 00 D4 00512
BRB 42$ ;42$ 3B 11 00518
39$: MOVL G^FIL_NORMAL_FORM, R0 ;FIL_NORMAL_FORM, R0 2000 50 00000000G 00 D0 0051A
CMPL R0, #2 ;R0, #2 2003 02 50 D1 00521
BNEQ 43$ ;43$ 31 12 00524
MOVZBL G^U.11+3, R7 ;U.11+3, R7 2006 57 00000000' 00 9A 00526
BLEQ 40$ ;40$ 09 15 0052D
MOVL G^U.11+4, R0 ;U.11+4, R0 2009 50 00000000' 00 D0 0052F
BRB 41$ ;41$ 2010 0E 11 00536
40$: MOVZBL G^U.11+11, R7 ;U.11+11, R7 2015 57 00000000' 00 9A 00538
MOVL G^U.11+12, R0 ;U.11+12, R0 50 00000000' 00 D0 0053F
41$: MOVC5 R7, (R0), #0, #132, G^FILE_NAME ;R7, (R0), #0, #132, FILE_NAME 2016 60 57 2C 00546
; 0084 8F 00 00549
; 00000000G 00 0054D
MOVW R7, R6 ;R7, SIZE 2017 56 57 B0 00552
42$: BRB 46$ ;46$ 2000 49 11 00555
43$: CMPL R0, #1 ;R0, #1 2022 01 50 D1 00557
BEQL 44$ ;44$ 05 13 0055A
CMPL R0, #4 ;R0, #4 04 50 D1 0055C
BNEQ 46$ ;46$ 3F 12 0055F
44$: MOVZBL G^U.11+59, R9 ;U.11+59, R9 2024 59 00000000' 00 9A 00561
MOVL G^U.11+76, R0 ;U.11+76, R0 50 00000000' 00 D0 00568
MOVZBL G^U.11+60, R8 ;U.11+60, R8 2025 58 00000000' 00 9A 0056F
MOVL G^U.11+80, R11 ;U.11+80, R11 5B 00000000' 00 D0 00576
MOVZBL #132, R10 ;#132, R10 2026 5A 84 8F 9A 0057D
MOVAB G^FILE_NAME, R7 ;FILE_NAME, R7 57 00000000G 00 9E 00581
MOVC5 R9, (R0), #0, R10, (R7) ;R9, (R0), #0, R10, (R7) 60 59 2C 00588
; 5A 00 0058B
; 67 0058D
BGEQ 45$ ;45$ 0C 18 0058E
ADDL2 R9, R7 ;R9, R7 57 59 C0 00590
SUBL2 R9, R10 ;R9, R10 5A 59 C2 00593
MOVC5 R8, (R11), #0, R10, (R7) ;R8, (R11), #0, R10, (R7) 6B 58 2C 00596
; 5A 00 00599
; 67 0059B
45$: ADDW3 R8, R9, R6 ;R8, R9, SIZE 2027 59 58 A1 0059C
; 56 0059F
46$: CMPW R6, #132 ;SIZE, #132 2031 0084 8F 56 B1 005A0
BLEQU 47$ ;47$ 0A 1B 005A5
MOVZBL #132, G^FILE_SIZE ;#132, FILE_SIZE 00000000G 00 84 8F 9A 005A7
BRB 48$ ;48$ 07 11 005AF
47$: MOVZWL R6, G^FILE_SIZE ;SIZE, FILE_SIZE 00000000G 00 56 3C 005B1
48$: MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 2033 50 00000000G 8F D0 005B8
RET ; 04 005BF
; Routine Size: 1472 bytes, Routine Base: $CODE$ + 0617
; 2035 1
; 2036 1 %SBTTL 'FILE_CLOSE'
; 2037 1
; 2038 1 GLOBAL ROUTINE FILE_CLOSE (ABORT_FLAG) =
; 2039 1
; 2040 1 !++
; 2041 1 ! FUNCTIONAL DESCRIPTION:
; 2042 1 !
; 2043 1 ! This routine will close a file that was opened by FILE_OPEN.
; 2044 1 ! It assumes any data associated with the file is stored in this
; 2045 1 ! module, since this routine is called by KERMSG.
; 2046 1 !
; 2047 1 ! CALLING SEQUENCE:
; 2048 1 !
; 2049 1 ! FILE_CLOSE();
; 2050 1 !
; 2051 1 ! INPUT PARAMETERS:
; 2052 1 !
; 2053 1 ! ABORT_FLAG - True if file should not be saved.
; 2054 1 !
; 2055 1 ! IMPLICIT INPUTS:
; 2056 1 !
; 2057 1 ! None.
; 2058 1 !
; 2059 1 ! OUTPUT PARAMETERS:
; 2060 1 !
; 2061 1 ! None.
; 2062 1 !
; 2063 1 ! IMPLICIT OUTPUTS:
; 2064 1 !
; 2065 1 ! None.
; 2066 1 !
; 2067 1 ! COMPLETION CODES:
; 2068 1 !
; 2069 1 ! None.
; 2070 1 !
; 2071 1 ! SIDE EFFECTS:
; 2072 1 !
; 2073 1 ! None.
; 2074 1 !
; 2075 1 !--
; 2076 1
; 2077 2 BEGIN
; 2078 2 !
; 2079 2 ! Completion codes returned:
; 2080 2 !
; 2081 2 EXTERNAL LITERAL
; 2082 2 KER_NORMAL, ! Normal return
; 2083 2 KER_RMS32; ! RMS-32 error
; 2084 2
; 2085 2 LOCAL
; 2086 2 STATUS; ! Random status values
; 2087 2
; 2088 2 !
; 2089 2 ! If there might be something left to write
; 2090 2
; 2091 2 !
; 2092 2
; 2093 3 IF .FILE_MODE EQL FNC_WRITE AND (.FILE_REC_COUNT GTR 0 OR .FILE_FAB [FAB$L_CTX] NEQ
; 2094 3 F_STATE_DATA)
; 2095 2 THEN
; 2096 3 BEGIN
; 2097 3
; 2098 3 SELECTONE .FILE_TYPE OF
; 2099 3 SET
; 2100 3
; 2101 3 [FILE_FIX] :
; 2102 4 BEGIN
; 2103 4
; 2104 4 INCR I FROM .FILE_REC_COUNT TO .REC_SIZE - 1 DO
; 2105 4 CH$WCHAR_A (CHR_NUL, FILE_REC_POINTER);
; 2106 4 FILE_REC_COUNT = .REC_SIZE; ! Store the byte count
; 2107 4 STATUS = DUMP_BUFFER ();
; 2108 3 END;
; 2109 3
; 2110 3 [FILE_ASC, FILE_BIN] :
; 2111 3 STATUS = DUMP_BUFFER ();
; 2112 3
; 2113 3 [FILE_BLK] :
; 2114 4 BEGIN
; 2115 4 FILE_RAB [RAB$W_RSZ] = .FILE_REC_COUNT;
; 2116 4 STATUS = $WRITE (RAB = FILE_RAB);
; 2117 4
; 2118 4 IF NOT .STATUS
; 2119 4 THEN
; 2120 5 BEGIN
; 2121 5 FILE_ERROR (.STATUS);
; 2122 5 STATUS = KER_RMS32;
; 2123 5 END
; 2124 4 ELSE
; 2125 4 STATUS = KER_NORMAL;
; 2126 4
; 2127 3 END;
; 2128 3 TES;
; 2129 3
; 2130 3 IF NOT .STATUS THEN RETURN .STATUS;
; 2131 3
; 2132 2 END;
; 2133 2
; 2134 2 !
; 2135 2 ! If reading from a mailbox, read until EOF to allow the process on the other
; 2136 2 ! end to terminal gracefully.
; 2137 2 !
; 2138 2
; 2139 2 IF .FILE_MODE EQL FNC_READ AND .DEV_CLASS EQL DC$_MAILBOX AND NOT .EOF_FLAG
; 2140 2 THEN
; 2141 2
; 2142 2 DO
; 2143 2 STATUS = GET_BUFFER ()
; 2144 2 UNTIL ( NOT .STATUS) OR .EOF_FLAG;
; 2145 2
; 2146 2 STATUS = LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
; 2147 2
; 2148 2 IF .FIX_SIZE NEQ 0 THEN STATUS = LIB$FREE_VM (FIX_SIZE, FIX_ADDRESS);
; 2149 2
; 2150 2 IF .ABORT_FLAG AND .FILE_MODE EQL FNC_WRITE
; 2151 2 THEN
; 2152 2 FILE_FAB [FAB$V_DLT] = TRUE
; 2153 2 ELSE
; 2154 2 FILE_FAB [FAB$V_DLT] = FALSE;
; 2155 2
; 2156 2 STATUS = $CLOSE (FAB = FILE_FAB);
; 2157 2 EOF_FLAG = FALSE;
; 2158 2
; 2159 2 IF NOT .STATUS
; 2160 2 THEN
; 2161 3 BEGIN
; 2162 3 FILE_ERROR (.STATUS);
; 2163 3 RETURN KER_RMS32;
; 2164 3 END
; 2165 2 ELSE
; 2166 2 RETURN KER_NORMAL;
; 2167 2
; 2168 1 END; ! End of FILE_CLOSE
.EXTRN SYS$CLOSE
.ENTRY FILE_CLOSE, ^M<R2,R3,R4,R5,R6,- ;FILE_CLOSE, Save R2,R3,R4,R5,R6,R7 2038 00FC 00000
R7> ;
MOVAB G^LIB$FREE_VM, R7 ;LIB$FREE_VM, R7 57 00000000G 00 9E 00002
MOVL #KER_NORMAL, R6 ;#KER_NORMAL, R6 56 00000000G 8F D0 00009
MOVL #KER_RMS32, R5 ;#KER_RMS32, R5 55 00000000G 8F D0 00010
MOVAB G^U.6, R4 ;U.6, R4 54 00000000V 00 9E 00017
MOVAB G^U.16, R3 ;U.16, R3 53 00000000' 00 9E 0001E
CMPL -8(R3), #1 ;FILE_MODE, #1 2093 01 F8 A3 D1 00025
BNEQ 9$ ;9$ 73 12 00029
TSTL (R3) ;FILE_REC_COUNT 63 D5 0002B
BGTR 1$ ;1$ 07 14 0002D
CMPL -272(R3), #2 ;FILE_FAB+24, #2 2094 02 FEF0 C3 D1 0002F
BEQL 9$ ;9$ 68 13 00034
1$: MOVL G^FILE_TYPE, R0 ;FILE_TYPE, R0 2098 50 00000000' 00 D0 00036
CMPL R0, #4 ;R0, #4 2101 04 50 D1 0003D
BNEQ 4$ ;4$ 1C 12 00040
MOVL 4(R3), R1 ;REC_SIZE, R1 2104 51 04 A3 D0 00042
SUBL3 #1, (R3), R2 ;#1, FILE_REC_COUNT, I 63 01 C3 00046
; 52 00049
BRB 3$ ;3$ 09 11 0004A
2$: MOVL -4(R3), R0 ;FILE_REC_POINTER, R0 2105 50 FC A3 D0 0004C
CLRB (R0) ;(R0) 60 94 00050
INCL -4(R3) ;FILE_REC_POINTER FC A3 D6 00052
3$: AOBLSS R1, R2, 2$ ;R1, I, 2$ 52 51 F2 00055
; F3 00058
MOVL R1, (R3) ;R1, FILE_REC_COUNT 2106 63 51 D0 00059
BRB 5$ ;5$ 2107 09 11 0005C
4$: TSTL R0 ;R0 2110 50 D5 0005E
BLEQ 6$ ;6$ 0F 15 00060
CMPL R0, #2 ;R0, #2 02 50 D1 00062
BGTR 6$ ;6$ 0A 14 00065
5$: CALLS #0, W^U.2 ;#0, U.2 2111 F858 CF 00 FB 00067
MOVL R0, R2 ;R0, STATUS 52 50 D0 0006C
BRB 8$ ;8$ 26 11 0006F
6$: CMPL R0, #3 ;R0, #3 2113 03 50 D1 00071
BNEQ 8$ ;8$ 21 12 00074
MOVW (R3), -86(R3) ;FILE_REC_COUNT, FILE_RAB+34 2115 AA A3 63 B0 00076
PUSHAB -120(R3) ;FILE_RAB 2116 88 A3 9F 0007A
CALLS #1, G^SYS$WRITE ;#1, SYS$WRITE 00000000G 00 01 FB 0007D
MOVL R0, R2 ;R0, STATUS 52 50 D0 00084
BLBS R2, 7$ ;STATUS, 7$ 2118 0A 52 E8 00087
PUSHL R2 ;STATUS 2121 52 DD 0008A
CALLS #1, (R4) ;#1, FILE_ERROR 64 01 FB 0008C
MOVL R5, R2 ;R5, STATUS 2122 52 55 D0 0008F
BRB 8$ ;8$ 03 11 00092
7$: MOVL R6, R2 ;R6, STATUS 2125 52 56 D0 00094
8$: BLBS R2, 9$ ;STATUS, 9$ 2130 04 52 E8 00097
MOVL R2, R0 ;STATUS, R0 50 52 D0 0009A
RET ; 04 0009D
9$: TSTL -8(R3) ;FILE_MODE 2139 F8 A3 D5 0009E
BNEQ 11$ ;11$ 20 12 000A1
CMPL -304(R3), #160 ;DEV_CLASS, #160 000000A0 8F FED0 C3 D1 000A3
BNEQ 11$ ;11$ 15 12 000AC
BLBS -300(R3), 11$ ;EOF_FLAG, 11$ 10 FED4 C3 E8 000AE
10$: CALLS #0, W^U.3 ;#0, U.3 2143 F6E0 CF 00 FB 000B3
MOVL R0, R2 ;R0, STATUS 52 50 D0 000B8
BLBC R2, 11$ ;STATUS, 11$ 2144 05 52 E9 000BB
BLBC -300(R3), 10$ ;EOF_FLAG, 10$ F0 FED4 C3 E9 000BE
11$: PUSHAB 8(R3) ;REC_ADDRESS 2146 08 A3 9F 000C3
PUSHAB 4(R3) ;REC_SIZE 04 A3 9F 000C6
CALLS #2, (R7) ;#2, LIB$FREE_VM 67 02 FB 000C9
MOVL R0, R2 ;R0, STATUS 52 50 D0 000CC
TSTL 12(R3) ;FIX_SIZE 2148 0C A3 D5 000CF
BEQL 12$ ;12$ 0C 13 000D2
PUSHAB 16(R3) ;FIX_ADDRESS 10 A3 9F 000D4
PUSHAB 12(R3) ;FIX_SIZE 0C A3 9F 000D7
CALLS #2, (R7) ;#2, LIB$FREE_VM 67 02 FB 000DA
MOVL R0, R2 ;R0, STATUS 52 50 D0 000DD
12$: BLBC 4(AP), 13$ ;ABORT_FLAG, 13$ 2150 0E 04 AC E9 000E0
CMPL -8(R3), #1 ;FILE_MODE, #1 01 F8 A3 D1 000E4
BNEQ 13$ ;13$ 08 12 000E8
BISB2 #128, -291(R3) ;#128, FILE_FAB+5 2152 FEDD C3 80 8F 88 000EA
BRB 14$ ;14$ 06 11 000F0
13$: BICB2 #128, -291(R3) ;#128, FILE_FAB+5 2154 FEDD C3 80 8F 8A 000F2
14$: PUSHAB -296(R3) ;FILE_FAB 2156 FED8 C3 9F 000F8
CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE 00000000G 00 01 FB 000FC
MOVL R0, R2 ;R0, STATUS 52 50 D0 00103
CLRL -300(R3) ;EOF_FLAG 2157 FED4 C3 D4 00106
BLBS R2, 15$ ;STATUS, 15$ 2159 09 52 E8 0010A
PUSHL R2 ;STATUS 2162 52 DD 0010D
CALLS #1, (R4) ;#1, FILE_ERROR 64 01 FB 0010F
MOVL R5, R0 ;R5, R0 2163 50 55 D0 00112
RET ; 04 00115
15$: MOVL R6, R0 ;R6, R0 2166 50 56 D0 00116
RET ; 04 00119
; Routine Size: 282 bytes, Routine Base: $CODE$ + 0BD7
; 2169 1
; 2170 1 %SBTTL 'NEXT_FILE'
; 2171 1
; 2172 1 GLOBAL ROUTINE NEXT_FILE =
; 2173 1
; 2174 1 !++
; 2175 1 ! FUNCTIONAL DESCRIPTION:
; 2176 1 !
; 2177 1 ! This routine will cause the next file to be opened. It will
; 2178 1 ! call the RMS-32 routine $SEARCH and $OPEN for the file.
; 2179 1 !
; 2180 1 ! CALLING SEQUENCE:
; 2181 1 !
; 2182 1 ! STATUS = NEXT_FILE;
; 2183 1 !
; 2184 1 ! INPUT PARAMETERS:
; 2185 1 !
; 2186 1 ! None.
; 2187 1 !
; 2188 1 ! IMPLICIT INPUTS:
; 2189 1 !
; 2190 1 ! FAB/NAM blocks set up from previous processing.
; 2191 1 !
; 2192 1 ! OUTPUT PARAMETERS:
; 2193 1 !
; 2194 1 ! None.
; 2195 1 !
; 2196 1 ! IMPLICIT OUTPUTS:
; 2197 1 !
; 2198 1 ! FAB/NAM blocks set up for the next file.
; 2199 1 !
; 2200 1 ! COMPLETION CODES:
; 2201 1 !
; 2202 1 ! TRUE - There is a next file.
; 2203 1 ! KER_RMS32 - No next file.
; 2204 1 !
; 2205 1 ! SIDE EFFECTS:
; 2206 1 !
; 2207 1 ! None.
; 2208 1 !
; 2209 1 !--
; 2210 1
; 2211 2 BEGIN
; 2212 2 !
; 2213 2 ! Completion codes returned:
; 2214 2 !
; 2215 2 EXTERNAL LITERAL
; 2216 2 KER_NORMAL, ! Normal return
; 2217 2 KER_NOMORFILES, ! No more files to read
; 2218 2 KER_RMS32; ! RMS-32 error
; 2219 2
; 2220 2 EXTERNAL ROUTINE
; 2221 2 TT_TEXT : NOVALUE; ! Output an ASCIZ string
; 2222 2
; 2223 2 LOCAL
; 2224 2 SIZE : WORD, ! Size of the $FAO string
; 2225 2 STATUS; ! Random status values
; 2226 2
; 2227 2 !
; 2228 2 ! If we can't do a search, just return no more files
; 2229 2 !
; 2230 2
; 2231 2 IF NOT .SEARCH_FLAG THEN RETURN KER_NOMORFILES;
; 2232 2
; 2233 2 !
; 2234 2 ! Now search for the next file that we want to process.
; 2235 2 !
; 2236 2 STATUS = $SEARCH (FAB = FILE_FAB);
; 2237 2
; 2238 2 IF .STATUS EQL RMS$_NMF THEN RETURN KER_NOMORFILES;
; 2239 2
; 2240 2 IF NOT .STATUS
; 2241 2 THEN
; 2242 3 BEGIN
; 2243 3 FILE_ERROR (.STATUS);
; 2244 3 RETURN KER_RMS32;
; 2245 2 END;
; 2246 2
; 2247 2 !
; 2248 2 ! Now we have the new file name. All that we have to do is open the file
; 2249 2 ! for reading now.
; 2250 2 !
; 2251 2 STATUS = OPEN_READING ();
; 2252 2
; 2253 2 IF NOT .STATUS THEN RETURN .STATUS;
; 2254 2
; 2255 2 !
; 2256 2 ! Copy the file name based on the type of file name we are to use.
; 2257 2 ! The possibilities are:
; 2258 2 ! Normal - Just copy name and type
; 2259 2 ! Full - Copy entire name string (either resultant or expanded)
; 2260 2 ! Untranslated - Copy string from name on (includes version, etc.)
; 2261 2
; 2262 2 SELECTONE .FIL_NORMAL_FORM OF
; 2263 2 SET
; 2264 2
; 2265 2 [FNM_FULL] :
; 2266 3 BEGIN
; 2267 3
; 2268 3 IF .FILE_NAM [NAM$B_RSL] GTR 0
; 2269 3 THEN
; 2270 4 BEGIN
; 2271 4 CH$COPY (.FILE_NAM [NAM$B_RSL], CH$PTR (.FILE_NAM [NAM$L_RSA]), CHR_NUL,
; 2272 4 MAX_FILE_NAME, CH$PTR (FILE_NAME));
; 2273 4 SIZE = .FILE_NAM [NAM$B_RSL];
; 2274 4 END
; 2275 3 ELSE
; 2276 4 BEGIN
; 2277 4 CH$COPY (.FILE_NAM [NAM$B_ESL], CH$PTR (.FILE_NAM [NAM$L_ESA]), CHR_NUL,
; 2278 4 MAX_FILE_NAME, CH$PTR (FILE_NAME));
; 2279 4 SIZE = .FILE_NAM [NAM$B_ESL];
; 2280 4 END
; 2281 4
; 2282 2 END;
; 2283 2
; 2284 2 [FNM_NORMAL, FNM_UNTRAN] :
; 2285 3 BEGIN
; 2286 3 CH$COPY (.FILE_NAM [NAM$B_NAME], CH$PTR (.FILE_NAM [NAM$L_NAME]),
; 2287 3 .FILE_NAM [NAM$B_TYPE], CH$PTR (.FILE_NAM [NAM$L_TYPE]), CHR_NUL,
; 2288 3 MAX_FILE_NAME, CH$PTR (FILE_NAME));
; 2289 3 SIZE = .FILE_NAM [NAM$B_NAME] + .FILE_NAM [NAM$B_TYPE];
; 2290 2 END;
; 2291 2 TES;
; 2292 2
; 2293 2 IF .SIZE GTR MAX_FILE_NAME THEN FILE_SIZE = MAX_FILE_NAME ELSE FILE_SIZE = .SIZE;
; 2294 2
; 2295 2 !
; 2296 2 ! Put prompt for NEXT_FILE sending in here
; 2297 2 !
; 2298 2 IF ( NOT .CONNECT_FLAG) AND .TY_FIL
; 2299 2 THEN
; 2300 3 BEGIN
; 2301 3 TT_TEXT (UPLIT (%ASCIZ 'Sending: '));
; 2302 3 .FILE_NAM [NAM$L_RSA] + .FILE_NAM [NAM$B_RSL] = 0;
; 2303 3 TT_TEXT (.FILE_NAM [NAM$L_RSA]);
; 2304 3 TT_TEXT (UPLIT (%ASCIZ ' as '));
; 2305 3 TT_OUTPUT ();
; 2306 2 END;
; 2307 2
; 2308 2 RETURN KER_NORMAL;
; 2309 1 END; ! End of NEXT_FILE
.PSECT $PLIT$,NOWRT,NOEXE,2
P.AAD: .ASCII \Sending: \<0><0><0> ; 3A 67 6E 69 64 6E 65 53 00014
; 00 00 00 20 0001C
P.AAE: .ASCII \ as \<0><0><0><0> ; 00 00 00 00 20 73 61 20 00020
.EXTRN KER_NOMORFILES
.PSECT $CODE$,NOWRT,2
.ENTRY NEXT_FILE, ^M<R2,R3,R4,R5,R6,R7,-;NEXT_FILE, Save R2,R3,R4,R5,R6,R7,- 2172 0FFC 00000
R8,R9,R10,R11> ;R8,R9,R10,R11
BLBC G^U.7, 1$ ;U.7, 1$ 2231 19 00000000' 00 E9 00002
PUSHAB G^U.10 ;U.10 2236 00000000' 00 9F 00009
CALLS #1, G^SYS$SEARCH ;#1, SYS$SEARCH 00000000G 00 01 FB 0000F
MOVL R0, R2 ;R0, STATUS 52 50 D0 00016
CMPL R2, #99018 ;STATUS, #99018 2238 000182CA 8F 52 D1 00019
BNEQ 2$ ;2$ 08 12 00020
1$: MOVL #KER_NOMORFILES, R0 ;#KER_NOMORFILES, R0 50 00000000G 8F D0 00022
RET ; 04 00029
2$: BLBS R2, 3$ ;STATUS, 3$ 2240 11 52 E8 0002A
PUSHL R2 ;STATUS 2243 52 DD 0002D
CALLS #1, G^U.6 ;#1, U.6 00000000V 00 01 FB 0002F
MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 2244 50 00000000G 8F D0 00036
RET ; 04 0003D
3$: CALLS #0, W^U.35 ;#0, U.35 2251 F7A1 CF 00 FB 0003E
MOVL R0, R2 ;R0, STATUS 52 50 D0 00043
BLBS R2, 4$ ;STATUS, 4$ 2253 04 52 E8 00046
MOVL R2, R0 ;STATUS, R0 50 52 D0 00049
RET ; 04 0004C
4$: MOVL G^FIL_NORMAL_FORM, R0 ;FIL_NORMAL_FORM, R0 2262 50 00000000G 00 D0 0004D
CMPL R0, #2 ;R0, #2 2265 02 50 D1 00054
BNEQ 7$ ;7$ 31 12 00057
MOVZBL G^U.11+3, R6 ;U.11+3, R6 2268 56 00000000' 00 9A 00059
BLEQ 5$ ;5$ 09 15 00060
MOVL G^U.11+4, R0 ;U.11+4, R0 2271 50 00000000' 00 D0 00062
BRB 6$ ;6$ 2272 0E 11 00069
5$: MOVZBL G^U.11+11, R6 ;U.11+11, R6 2277 56 00000000' 00 9A 0006B
MOVL G^U.11+12, R0 ;U.11+12, R0 50 00000000' 00 D0 00072
6$: MOVC5 R6, (R0), #0, #132, G^FILE_NAME ;R6, (R0), #0, #132, FILE_NAME 2278 60 56 2C 00079
; 0084 8F 00 0007C
; 00000000G 00 00080
MOVW R6, R7 ;R6, SIZE 2279 57 56 B0 00085
BRB 10$ ;10$ 2262 49 11 00088
7$: CMPL R0, #1 ;R0, #1 2284 01 50 D1 0008A
BEQL 8$ ;8$ 05 13 0008D
CMPL R0, #4 ;R0, #4 04 50 D1 0008F
BNEQ 10$ ;10$ 3F 12 00092
8$: MOVZBL G^U.11+59, R11 ;U.11+59, R11 2286 5B 00000000' 00 9A 00094
MOVL G^U.11+76, R0 ;U.11+76, R0 50 00000000' 00 D0 0009B
MOVZBL G^U.11+60, R10 ;U.11+60, R10 2287 5A 00000000' 00 9A 000A2
MOVL G^U.11+80, R9 ;U.11+80, R9 59 00000000' 00 D0 000A9
MOVZBL #132, R8 ;#132, R8 2288 58 84 8F 9A 000B0
MOVAB G^FILE_NAME, R6 ;FILE_NAME, R6 56 00000000G 00 9E 000B4
MOVC5 R11, (R0), #0, R8, (R6) ;R11, (R0), #0, R8, (R6) 60 5B 2C 000BB
; 58 00 000BE
; 66 000C0
BGEQ 9$ ;9$ 0C 18 000C1
ADDL2 R11, R6 ;R11, R6 56 5B C0 000C3
SUBL2 R11, R8 ;R11, R8 58 5B C2 000C6
MOVC5 R10, (R9), #0, R8, (R6) ;R10, (R9), #0, R8, (R6) 69 5A 2C 000C9
; 58 00 000CC
; 66 000CE
9$: ADDW3 R10, R11, R7 ;R10, R11, SIZE 2289 5B 5A A1 000CF
; 57 000D2
10$: CMPW R7, #132 ;SIZE, #132 2293 0084 8F 57 B1 000D3
BLEQU 11$ ;11$ 0A 1B 000D8
MOVZBL #132, G^FILE_SIZE ;#132, FILE_SIZE 00000000G 00 84 8F 9A 000DA
BRB 12$ ;12$ 07 11 000E2
11$: MOVZWL R7, G^FILE_SIZE ;SIZE, FILE_SIZE 00000000G 00 57 3C 000E4
12$: BLBS G^CONNECT_FLAG, 13$ ;CONNECT_FLAG, 13$ 2298 44 00000000G 00 E8 000EB
BLBC G^TY_FIL, 13$ ;TY_FIL, 13$ 3D 00000000G 00 E9 000F2
PUSHAB G^P.AAD ;P.AAD 2301 00000000' 00 9F 000F9
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 000FF
MOVL G^U.11+4, R0 ;U.11+4, R0 2302 50 00000000' 00 D0 00106
MOVZBL G^U.11+3, R1 ;U.11+3, R1 51 00000000' 00 9A 0010D
PUSHAB (R1)[R0] ;(R1)[R0] 6140 9F 00114
CLRL @(SP)+ ;@(SP)+ 9E D4 00117
PUSHL R0 ;R0 2303 50 DD 00119
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 0011B
PUSHAB G^P.AAE ;P.AAE 2304 00000000' 00 9F 00122
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 00128
CALLS #0, G^TT_OUTPUT ;#0, TT_OUTPUT 2305 00000000G 00 00 FB 0012F
13$: MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 2308 50 00000000G 8F D0 00136
RET ; 04 0013D
; Routine Size: 318 bytes, Routine Base: $CODE$ + 0CF1
; 2310 1
; 2311 1 %SBTTL 'LOG_OPEN - Open a log file'
; 2312 1
; 2313 1 GLOBAL ROUTINE LOG_OPEN (LOG_DESC, LOG_FAB, LOG_RAB) =
; 2314 1
; 2315 1 !++
; 2316 1 ! FUNCTIONAL DESCRIPTION:
; 2317 1 !
; 2318 1 ! CALLING SEQUENCE:
; 2319 1 !
; 2320 1 ! STATUS = LOG_OPEN (LOG_DESC, LOG_FAB, LOG_RAB)
; 2321 1 !
; 2322 1 ! INPUT PARAMETERS:
; 2323 1 !
; 2324 1 ! LOG_DESC - Address of descriptor for file name to be opened
; 2325 1 !
; 2326 1 ! LOG_FAB - Address of FAB for file
; 2327 1 !
; 2328 1 ! LOG_RAB - Address of RAB for file
; 2329 1 !
; 2330 1 ! IMPLICIT INPUTS:
; 2331 1 !
; 2332 1 ! None.
; 2333 1 !
; 2334 1 ! OUPTUT PARAMETERS:
; 2335 1 !
; 2336 1 ! LOG_FAB and LOG_RAB updated.
; 2337 1 !
; 2338 1 ! IMPLICIT OUTPUTS:
; 2339 1 !
; 2340 1 ! None.
; 2341 1 !
; 2342 1 ! COMPLETION CODES:
; 2343 1 !
; 2344 1 ! Error code or true.
; 2345 1 !
; 2346 1 ! SIDE EFFECTS:
; 2347 1 !
; 2348 1 ! None.
; 2349 1 !
; 2350 1 !--
; 2351 1
; 2352 2 BEGIN
; 2353 2 !
; 2354 2 ! Completion codes returned:
; 2355 2 !
; 2356 2 EXTERNAL LITERAL
; 2357 2 KER_NORMAL, ! Normal return
; 2358 2 KER_RMS32; ! RMS-32 error
; 2359 2
; 2360 2 MAP
; 2361 2 LOG_DESC : REF BLOCK [8, BYTE], ! Name descriptor
; 2362 2 LOG_FAB : REF $FAB_DECL, ! FAB for file
; 2363 2 LOG_RAB : REF $RAB_DECL; ! RAB for file
; 2364 2
; 2365 2 LOCAL
; 2366 2 STATUS, ! Random status values
; 2367 2 REC_ADDRESS, ! Address of record buffer
; 2368 2 REC_SIZE; ! Size of record buffer
; 2369 2
; 2370 2 !
; 2371 2 ! Get memory for records
; 2372 2 !
; 2373 2 REC_SIZE = LOG_BUFF_SIZE;
; 2374 2 STATUS = LIB$GET_VM (REC_SIZE, REC_ADDRESS);
; 2375 2
; 2376 2 IF NOT .STATUS
; 2377 2 THEN
; 2378 3 BEGIN
; 2379 3 LIB$SIGNAL (.STATUS);
; 2380 3 RETURN .STATUS;
; 2381 2 END;
; 2382 2
; 2383 2 !
; 2384 2 ! Initialize the FAB and RAB
; 2385 2 !
; P 2386 2 $FAB_INIT (FAB = .LOG_FAB, FAC = PUT, FNA = .LOG_DESC [DSC$A_POINTER],
; P 2387 2 FNS = .LOG_DESC [DSC$W_LENGTH], FOP = (MXV, CBT, SQO, TEF), ORG = SEQ, RFM = VAR,
; 2388 2 RAT = CR, CTX = 0, DNA = UPLIT (%ASCII'.LOG'), DNS = 4);
; 2389 2 STATUS = $CREATE (FAB = .LOG_FAB);
; 2390 2
; 2391 2 IF NOT .STATUS
; 2392 2 THEN
; 2393 3 BEGIN
; 2394 3 FILE_ERROR (.STATUS);
; 2395 3 LIB$FREE_VM (REC_SIZE, REC_ADDRESS); ! Dump record buffer
; 2396 3 RETURN KER_RMS32;
; 2397 2 END;
; 2398 2
; P 2399 2 $RAB_INIT (RAB = .LOG_RAB, FAB = .LOG_FAB, RAC = SEQ, RBF = .REC_ADDRESS,
; 2400 2 RSZ = .REC_SIZE, UBF = .REC_ADDRESS, USZ = .REC_SIZE, ROP = <NLK, WAT>, CTX = 0);
; 2401 2 STATUS = $CONNECT (RAB = .LOG_RAB);
; 2402 2
; 2403 2 IF NOT .STATUS
; 2404 2 THEN
; 2405 3 BEGIN
; 2406 3 FILE_ERROR (.STATUS);
; 2407 3 LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
; 2408 3 $CLOSE (FAB = .LOG_FAB);
; 2409 3 RETURN KER_RMS32;
; 2410 3 END
; 2411 2 ELSE
; 2412 2 RETURN .STATUS;
; 2413 2
; 2414 1 END; ! End of LOG_OPEN
.PSECT $PLIT$,NOWRT,NOEXE,2
P.AAF: .ASCII \.LOG\ ; 47 4F 4C 2E 00028
.PSECT $CODE$,NOWRT,2
.ENTRY LOG_OPEN, ^M<R2,R3,R4,R5,R6,R7,- ;LOG_OPEN, Save R2,R3,R4,R5,R6,R7,- 2313 07FC 00000
R8,R9,R10> ;R8,R9,R10
MOVAB G^LIB$FREE_VM, R10 ;LIB$FREE_VM, R10 5A 00000000G 00 9E 00002
MOVAB G^U.6, R9 ;U.6, R9 59 00000000V 00 9E 00009
SUBL2 #8, SP ;#8, SP 5E 08 C2 00010
MOVZWL #256, 4(SP) ;#256, REC_SIZE 2373 04 AE 0100 8F 3C 00013
PUSHL SP ;SP 2374 5E DD 00019
PUSHAB 8(SP) ;REC_SIZE 08 AE 9F 0001B
CALLS #2, G^LIB$GET_VM ;#2, LIB$GET_VM 00000000G 00 02 FB 0001E
MOVL R0, R8 ;R0, STATUS 58 50 D0 00025
BLBS R8, 1$ ;STATUS, 1$ 2376 0C 58 E8 00028
PUSHL R8 ;STATUS 2379 58 DD 0002B
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 0002D
BRW 4$ ;4$ 2380 00BD 31 00034
1$: MOVL 8(AP), R7 ;LOG_FAB, R7 2388 57 08 AC D0 00037
MOVC5 #0, (SP), #0, #80, (R7) ;#0, (SP), #0, #80, (R7) 6E 00 2C 0003B
; 0050 8F 00 0003E
; 67 00042
MOVW #20483, (R7) ;#20483, (R7) 67 5003 8F B0 00043
MOVL #270532674, 4(R7) ;#270532674, 4(R7) 04 A7 10200042 8F D0 00048
MOVB #1, 22(R7) ;#1, 22(R7) 16 A7 01 90 00050
MOVW #512, 29(R7) ;#512, 29(R7) 1D A7 0200 8F B0 00054
MOVB #2, 31(R7) ;#2, 31(R7) 1F A7 02 90 0005A
MOVL 4(AP), R0 ;LOG_DESC, R0 50 04 AC D0 0005E
MOVL 4(R0), 44(R7) ;4(R0), 44(R7) 2C A7 04 A0 D0 00062
MOVAB G^P.AAF, 48(R7) ;P.AAF, 48(R7) 30 A7 00000000' 00 9E 00067
MOVB (R0), 52(R7) ;(R0), 52(R7) 34 A7 60 90 0006F
MOVB #4, 53(R7) ;#4, 53(R7) 35 A7 04 90 00073
PUSHL R7 ;R7 2389 57 DD 00077
CALLS #1, G^SYS$CREATE ;#1, SYS$CREATE 00000000G 00 01 FB 00079
MOVL R0, R8 ;R0, STATUS 58 50 D0 00080
BLBS R8, 2$ ;STATUS, 2$ 2391 0F 58 E8 00083
PUSHL R8 ;STATUS 2394 58 DD 00086
CALLS #1, (R9) ;#1, FILE_ERROR 69 01 FB 00088
PUSHL SP ;SP 2395 5E DD 0008B
PUSHAB 8(SP) ;REC_SIZE 08 AE 9F 0008D
CALLS #2, (R10) ;#2, LIB$FREE_VM 6A 02 FB 00090
BRB 3$ ;3$ 2396 57 11 00093
2$: MOVL 12(AP), R6 ;LOG_RAB, R6 2400 56 0C AC D0 00095
MOVC5 #0, (SP), #0, #68, (R6) ;#0, (SP), #0, #68, (R6) 6E 00 2C 00099
; 0044 8F 00 0009C
; 66 000A0
MOVW #17409, (R6) ;#17409, (R6) 66 4401 8F B0 000A1
MOVL #1179648, 4(R6) ;#1179648, 4(R6) 04 A6 00120000 8F D0 000A6
CLRB 30(R6) ;30(R6) 1E A6 94 000AE
MOVW 4(SP), 32(R6) ;REC_SIZE, 32(R6) 20 A6 04 AE B0 000B1
MOVW 4(SP), 34(R6) ;REC_SIZE, 34(R6) 22 A6 04 AE B0 000B6
MOVL (SP), 36(R6) ;REC_ADDRESS, 36(R6) 24 A6 6E D0 000BB
MOVL (SP), 40(R6) ;REC_ADDRESS, 40(R6) 28 A6 6E D0 000BF
MOVL R7, 60(R6) ;R7, 60(R6) 3C A6 57 D0 000C3
PUSHL R6 ;R6 2401 56 DD 000C7
CALLS #1, G^SYS$CONNECT ;#1, SYS$CONNECT 00000000G 00 01 FB 000C9
MOVL R0, R8 ;R0, STATUS 58 50 D0 000D0
BLBS R8, 4$ ;STATUS, 4$ 2403 1E 58 E8 000D3
PUSHL R8 ;STATUS 2406 58 DD 000D6
CALLS #1, (R9) ;#1, FILE_ERROR 69 01 FB 000D8
PUSHL SP ;SP 2407 5E DD 000DB
PUSHAB 8(SP) ;REC_SIZE 08 AE 9F 000DD
CALLS #2, (R10) ;#2, LIB$FREE_VM 6A 02 FB 000E0
PUSHL R7 ;R7 2408 57 DD 000E3
CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE 00000000G 00 01 FB 000E5
3$: MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 2409 50 00000000G 8F D0 000EC
RET ; 04 000F3
4$: MOVL R8, R0 ;STATUS, R0 50 58 D0 000F4
RET ; 2412 04 000F7
; Routine Size: 248 bytes, Routine Base: $CODE$ + 0E2F
; 2415 1
; 2416 1 %SBTTL 'LOG_CLOSE - Close a log file'
; 2417 1
; 2418 1 GLOBAL ROUTINE LOG_CLOSE (LOG_FAB, LOG_RAB) =
; 2419 1
; 2420 1 !++
; 2421 1 ! FUNCTIONAL DESCRIPTION:
; 2422 1 !
; 2423 1 ! This routine will close an open log file. It will also ensure that
; 2424 1 !the last buffer gets dumped.
; 2425 1 !
; 2426 1 ! CALLING SEQUENCE:
; 2427 1 !
; 2428 1 ! STATUS = LOG_CLOSE (LOG_FAB, LOG_RAB);
; 2429 1 !
; 2430 1 ! INPUT PARAMETERS:
; 2431 1 !
; 2432 1 ! LOG_FAB - Address of log file FAB
; 2433 1 !
; 2434 1 ! LOG_RAB - Address of log file RAB
; 2435 1 !
; 2436 1 ! IMPLICIT INPUTS:
; 2437 1 !
; 2438 1 ! None.
; 2439 1 !
; 2440 1 ! OUPTUT PARAMETERS:
; 2441 1 !
; 2442 1 ! None.
; 2443 1 !
; 2444 1 ! IMPLICIT OUTPUTS:
; 2445 1 !
; 2446 1 ! None.
; 2447 1 !
; 2448 1 ! COMPLETION CODES:
; 2449 1 !
; 2450 1 ! Resulting status.
; 2451 1 !
; 2452 1 ! SIDE EFFECTS:
; 2453 1 !
; 2454 1 ! None.
; 2455 1 !
; 2456 1 !--
; 2457 1
; 2458 2 BEGIN
; 2459 2 !
; 2460 2 ! Completion codes returned:
; 2461 2 !
; 2462 2 EXTERNAL LITERAL
; 2463 2 KER_RMS32; ! RMS-32 error
; 2464 2
; 2465 2 MAP
; 2466 2 LOG_FAB : REF $FAB_DECL, ! FAB for log file
; 2467 2 LOG_RAB : REF $RAB_DECL; ! RAB for log file
; 2468 2
; 2469 2 LOCAL
; 2470 2 STATUS, ! Random status values
; 2471 2 REC_ADDRESS, ! Address of record buffer
; 2472 2 REC_SIZE; ! Size of record buffer
; 2473 2
; 2474 2 !
; 2475 2 ! First write out any outstanding data
; 2476 2 !
; 2477 2
; 2478 2 IF .LOG_RAB [RAB$L_CTX] GTR 0 THEN LOG_PUT (.LOG_RAB); ! Dump current buffer
; 2479 2
; 2480 2 !
; 2481 2 ! Return the buffer
; 2482 2 !
; 2483 2 REC_SIZE = LOG_BUFF_SIZE; ! Get size of buffer
; 2484 2 REC_ADDRESS = .LOG_RAB [RAB$L_RBF]; ! And address
; 2485 2 LIB$FREE_VM (REC_SIZE, REC_ADDRESS);
; 2486 2 !
; 2487 2 ! Now disconnect the RAB
; 2488 2 !
; 2489 2 STATUS = $DISCONNECT (RAB = .LOG_RAB);
; 2490 2
; 2491 2 IF NOT .STATUS
; 2492 2 THEN
; 2493 3 BEGIN
; 2494 3 FILE_ERROR (.STATUS);
; 2495 3 RETURN KER_RMS32;
; 2496 2 END;
; 2497 2
; 2498 2 !
; 2499 2 ! Now we can close the file
; 2500 2 !
; 2501 2 STATUS = $CLOSE (FAB = .LOG_FAB);
; 2502 2
; 2503 2 IF NOT .STATUS THEN FILE_ERROR (.STATUS);
; 2504 2
; 2505 2 !
; 2506 2 ! And return the result
; 2507 2 !
; 2508 2 RETURN .STATUS;
; 2509 1 END; ! End of LOG_CLOSE
.EXTRN SYS$DISCONNECT
.ENTRY LOG_CLOSE, ^M<R2,R3> ;LOG_CLOSE, Save R2,R3 2418 000C 00000
MOVAB G^U.6, R3 ;U.6, R3 53 00000000V 00 9E 00002
SUBL2 #8, SP ;#8, SP 5E 08 C2 00009
MOVL 8(AP), R2 ;LOG_RAB, R2 2478 52 08 AC D0 0000C
TSTL 24(R2) ;24(R2) 18 A2 D5 00010
BLEQ 1$ ;1$ 09 15 00013
PUSHL R2 ;R2 52 DD 00015
CALLS #1, G^U.1 ;#1, U.1 00000000V 00 01 FB 00017
1$: MOVZWL #256, 4(SP) ;#256, REC_SIZE 2483 04 AE 0100 8F 3C 0001E
MOVL 40(R2), (SP) ;40(R2), REC_ADDRESS 2484 6E 28 A2 D0 00024
PUSHL SP ;SP 2485 5E DD 00028
PUSHAB 8(SP) ;REC_SIZE 08 AE 9F 0002A
CALLS #2, G^LIB$FREE_VM ;#2, LIB$FREE_VM 00000000G 00 02 FB 0002D
PUSHL R2 ;R2 2489 52 DD 00034
CALLS #1, G^SYS$DISCONNECT ;#1, SYS$DISCONNECT 00000000G 00 01 FB 00036
MOVL R0, R2 ;R0, STATUS 52 50 D0 0003D
BLBS R2, 2$ ;STATUS, 2$ 2491 0D 52 E8 00040
PUSHL R2 ;STATUS 2494 52 DD 00043
CALLS #1, (R3) ;#1, FILE_ERROR 63 01 FB 00045
MOVL #KER_RMS32, R0 ;#KER_RMS32, R0 2495 50 00000000G 8F D0 00048
RET ; 04 0004F
2$: PUSHL 4(AP) ;LOG_FAB 2501 04 AC DD 00050
CALLS #1, G^SYS$CLOSE ;#1, SYS$CLOSE 00000000G 00 01 FB 00053
MOVL R0, R2 ;R0, STATUS 52 50 D0 0005A
BLBS R2, 3$ ;STATUS, 3$ 2503 05 52 E8 0005D
PUSHL R2 ;STATUS 52 DD 00060
CALLS #1, (R3) ;#1, FILE_ERROR 63 01 FB 00062
3$: MOVL R2, R0 ;STATUS, R0 2508 50 52 D0 00065
RET ; 04 00068
; Routine Size: 105 bytes, Routine Base: $CODE$ + 0F27
; 2510 1
; 2511 1 %SBTTL 'LOG_CHAR - Log a character to a file'
; 2512 1
; 2513 1 GLOBAL ROUTINE LOG_CHAR (CH, LOG_RAB) =
; 2514 1
; 2515 1 !++
; 2516 1 ! FUNCTIONAL DESCRIPTION:
; 2517 1 !
; 2518 1 ! This routine will write one character to an open log file.
; 2519 1 !If the buffer becomes filled, it will dump it. It will also
; 2520 1 !dump the buffer if a carriage return line feed is seen.
; 2521 1 !
; 2522 1 ! CALLING SEQUENCE:
; 2523 1 !
; 2524 1 ! STATUS = LOG_CHAR (.CH, LOG_RAB);
; 2525 1 !
; 2526 1 ! INPUT PARAMETERS:
; 2527 1 !
; 2528 1 ! CH - The character to write to the file.
; 2529 1 !
; 2530 1 ! LOG_RAB - The address of the log file RAB.
; 2531 1 !
; 2532 1 ! IMPLICIT INPUTS:
; 2533 1 !
; 2534 1 ! None.
; 2535 1 !
; 2536 1 ! OUPTUT PARAMETERS:
; 2537 1 !
; 2538 1 ! None.
; 2539 1 !
; 2540 1 ! IMPLICIT OUTPUTS:
; 2541 1 !
; 2542 1 ! None.
; 2543 1 !
; 2544 1 ! COMPLETION CODES:
; 2545 1 !
; 2546 1 ! Any error returned by LOG_PUT, else TRUE.
; 2547 1 !
; 2548 1 ! SIDE EFFECTS:
; 2549 1 !
; 2550 1 ! None.
; 2551 1 !
; 2552 1 !--
; 2553 1
; 2554 2 BEGIN
; 2555 2 !
; 2556 2 ! Completion codes returned:
; 2557 2 !
; 2558 2 EXTERNAL LITERAL
; 2559 2 KER_NORMAL; ! Normal return
; 2560 2
; 2561 2 MAP
; 2562 2 LOG_RAB : REF $RAB_DECL; ! Log file RAB
; 2563 2
; 2564 2 LOCAL
; 2565 2 STATUS; ! Random status value
; 2566 2
; 2567 2 !
; 2568 2 ! If this character is a line feed, and previous was a carriage return, then
; 2569 2 ! dump the buffer and return.
; 2570 2 !
; 2571 2
; 2572 2 IF .CH EQL CHR_LFD
; 2573 2 THEN
; 2574 3 BEGIN
; 2575 3 !
; 2576 3 ! If we seem to have overfilled the buffer, that is because we saw a CR
; 2577 3 ! last, and had no place to put it. Just reset the size and dump the buffer.
; 2578 3 !
; 2579 3
; 2580 3 IF .LOG_RAB [RAB$L_CTX] GTR LOG_BUFF_SIZE
; 2581 3 THEN
; 2582 4 BEGIN
; 2583 4 LOG_RAB [RAB$L_CTX] = LOG_BUFF_SIZE;
; 2584 4 RETURN LOG_PUT (.LOG_RAB);
; 2585 3 END;
; 2586 3
; 2587 3 !
; 2588 3 ! If last character in buffer is a CR, then dump buffer without the CR
; 2589 3 !
; 2590 3
; 2591 3 IF CH$RCHAR (CH$PTR (.LOG_RAB [RAB$L_RBF], .LOG_RAB [RAB$L_CTX] - 1)) EQL CHR_CRT
; 2592 3 THEN
; 2593 4 BEGIN
; 2594 4 LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] - 1;
; 2595 4 RETURN LOG_PUT (.LOG_RAB);
; 2596 3 END;
; 2597 3
; 2598 2 END;
; 2599 2
; 2600 2 !
; 2601 2 ! Don't need to dump buffer because of end of line problems. Check if
; 2602 2 ! the buffer is full.
; 2603 2 !
; 2604 2
; 2605 2 IF .LOG_RAB [RAB$L_CTX] GEQ LOG_BUFF_SIZE
; 2606 2 THEN
; 2607 3 BEGIN
; 2608 3 !
; 2609 3 ! If character we want to store is a carriage return, then just count it and
; 2610 3 ! don't dump the buffer yet.
; 2611 3 !
; 2612 3
; 2613 3 IF .CH EQL CHR_CRT
; 2614 3 THEN
; 2615 4 BEGIN
; 2616 4 LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] + 1;
; 2617 4 RETURN KER_NORMAL;
; 2618 3 END;
; 2619 3
; 2620 3 !
; 2621 3 ! We must dump the buffer to make room for more characters
; 2622 3 !
; 2623 3 STATUS = LOG_PUT (.LOG_RAB);
; 2624 3
; 2625 3 IF NOT .STATUS THEN RETURN .STATUS;
; 2626 3
; 2627 2 END;
; 2628 2
; 2629 2 !
; 2630 2 ! Here when we have some room to store the character
; 2631 2 !
; 2632 2 CH$WCHAR (.CH, CH$PTR (.LOG_RAB [RAB$L_RBF], .LOG_RAB [RAB$L_CTX]));
; 2633 2 LOG_RAB [RAB$L_CTX] = .LOG_RAB [RAB$L_CTX] + 1;
; 2634 2 RETURN KER_NORMAL;
; 2635 1 END; ! End of LOG_CHAR
.ENTRY LOG_CHAR, ^M<R2,R3> ;LOG_CHAR, Save R2,R3 2513 000C 00000
MOVAB G^U.1, R3 ;U.1, R3 53 00000000V 00 9E 00002
CMPL 4(AP), #10 ;CH, #10 2572 0A 04 AC D1 00009
BNEQ 3$ ;3$ 2B 12 0000D
MOVL 8(AP), R2 ;LOG_RAB, R2 2580 52 08 AC D0 0000F
CMPL 24(R2), #256 ;24(R2), #256 00000100 8F 18 A2 D1 00013
BLEQ 1$ ;1$ 08 15 0001B
MOVZWL #256, 24(R2) ;#256, 24(R2) 2583 18 A2 0100 8F 3C 0001D
BRB 2$ ;2$ 2584 0F 11 00023
1$: ADDL3 24(R2), 40(R2), R0 ;24(R2), 40(R2), R0 2591 28 A2 18 A2 C1 00025
; 50 0002A
CMPB -1(R0), #13 ;-1(R0), #13 0D FF A0 91 0002B
BNEQ 3$ ;3$ 09 12 0002F
DECL 24(R2) ;24(R2) 2594 18 A2 D7 00031
2$: PUSHL R2 ;R2 2595 52 DD 00034
CALLS #1, (R3) ;#1, LOG_PUT 63 01 FB 00036
RET ; 04 00039
3$: MOVL 8(AP), R2 ;LOG_RAB, R2 2605 52 08 AC D0 0003A
CMPL 24(R2), #256 ;24(R2), #256 00000100 8F 18 A2 D1 0003E
BLSS 4$ ;4$ 0E 19 00046
CMPL 4(AP), #13 ;CH, #13 2613 0D 04 AC D1 00048
BEQL 5$ ;5$ 12 13 0004C
PUSHL R2 ;R2 2623 52 DD 0004E
CALLS #1, (R3) ;#1, LOG_PUT 63 01 FB 00050
BLBC R0, 6$ ;STATUS, 6$ 2625 14 50 E9 00053
4$: ADDL3 24(R2), 40(R2), R0 ;24(R2), 40(R2), R0 2632 28 A2 18 A2 C1 00056
; 50 0005B
MOVB 4(AP), (R0) ;CH, (R0) 60 04 AC 90 0005C
5$: INCL 24(R2) ;24(R2) 2633 18 A2 D6 00060
MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 2634 50 00000000G 8F D0 00063
6$: RET ; 04 0006A
; Routine Size: 107 bytes, Routine Base: $CODE$ + 0F90
; 2636 1
; 2637 1 %SBTTL 'LOG_LINE - Log a line to a log file'
; 2638 1
; 2639 1 GLOBAL ROUTINE LOG_LINE (LINE_DESC, LOG_RAB) =
; 2640 1
; 2641 1 !++
; 2642 1 ! FUNCTIONAL DESCRIPTION:
; 2643 1 !
; 2644 1 ! This routine will write an entire line to a log file. And previously
; 2645 1 ! written characters will be dumped first.
; 2646 1 !
; 2647 1 ! CALLING SEQUENCE:
; 2648 1 !
; 2649 1 ! STATUS = LOG_LINE (LINE_DESC, LOG_RAB);
; 2650 1 !
; 2651 1 ! INPUT PARAMETERS:
; 2652 1 !
; 2653 1 ! LINE_DESC - Address of descriptor for string to be written
; 2654 1 !
; 2655 1 ! LOG_RAB - RAB for log file
; 2656 1 !
; 2657 1 ! IMPLICIT INPUTS:
; 2658 1 !
; 2659 1 ! None.
; 2660 1 !
; 2661 1 ! OUPTUT PARAMETERS:
; 2662 1 !
; 2663 1 ! None.
; 2664 1 !
; 2665 1 ! IMPLICIT OUTPUTS:
; 2666 1 !
; 2667 1 ! None.
; 2668 1 !
; 2669 1 ! COMPLETION CODES:
; 2670 1 !
; 2671 1 ! KER_NORMAL or LOG_PUT error code.
; 2672 1 !
; 2673 1 ! SIDE EFFECTS:
; 2674 1 !
; 2675 1 ! None.
; 2676 1 !
; 2677 1 !--
; 2678 1
; 2679 2 BEGIN
; 2680 2
; 2681 2 MAP
; 2682 2 LINE_DESC : REF BLOCK [8, BYTE], ! Descriptor for string
; 2683 2 LOG_RAB : REF $RAB_DECL; ! RAB for file
; 2684 2
; 2685 2 LOCAL
; 2686 2 STATUS; ! Random status value
; 2687 2
; 2688 2 !
; 2689 2 ! First check if anything is already in the buffer
; 2690 2 !
; 2691 2
; 2692 2 IF .LOG_RAB [RAB$L_CTX] GTR 0
; 2693 2 THEN
; 2694 3 BEGIN
; 2695 3 STATUS = LOG_PUT (.LOG_RAB); ! Yes, write it out
; 2696 3
; 2697 3 IF NOT .STATUS THEN RETURN .STATUS; ! Pass back any errors
; 2698 3
; 2699 2 END;
; 2700 2
; 2701 2 !
; 2702 2 ! Copy the data to the buffer
; 2703 2 !
; 2704 2 CH$COPY (.LINE_DESC [DSC$W_LENGTH], CH$PTR (.LINE_DESC [DSC$A_POINTER]), CHR_NUL,
; 2705 2 LOG_BUFF_SIZE, CH$PTR (.LOG_RAB [RAB$L_RBF]));
; 2706 2
; 2707 2 IF .LINE_DESC [DSC$W_LENGTH] GTR LOG_BUFF_SIZE
; 2708 2 THEN
; 2709 2 LOG_RAB [RAB$L_CTX] = LOG_BUFF_SIZE
; 2710 2 ELSE
; 2711 2 LOG_RAB [RAB$L_CTX] = .LINE_DESC [DSC$W_LENGTH];
; 2712 2
; 2713 2 !
; 2714 2 ! Now just dump the buffer
; 2715 2 !
; 2716 2 RETURN LOG_PUT (.LOG_RAB);
; 2717 1 END; ! End of LOG_LINE
.ENTRY LOG_LINE, ^M<R2,R3,R4,R5,R6,R7,- ;LOG_LINE, Save R2,R3,R4,R5,R6,R7,R8 2639 01FC 00000
R8> ;
MOVAB G^U.1, R8 ;U.1, R8 58 00000000V 00 9E 00002
MOVL 8(AP), R6 ;LOG_RAB, R6 2692 56 08 AC D0 00009
TSTL 24(R6) ;24(R6) 18 A6 D5 0000D
BLEQ 1$ ;1$ 08 15 00010
PUSHL R6 ;R6 2695 56 DD 00012
CALLS #1, (R8) ;#1, LOG_PUT 68 01 FB 00014
BLBC R0, 4$ ;STATUS, 4$ 2697 26 50 E9 00017
1$: MOVL 4(AP), R7 ;LINE_DESC, R7 2704 57 04 AC D0 0001A
MOVC5 (R7), @4(R7), #0, #256, @40(R6) ;(R7), @4(R7), #0, #256, @40(R6) 2705 04 B7 67 2C 0001E
; 0100 8F 00 00022
; 28 B6 00026
CMPW (R7), #256 ;(R7), #256 2707 0100 8F 67 B1 00028
BLEQU 2$ ;2$ 08 1B 0002D
MOVZWL #256, 24(R6) ;#256, 24(R6) 2709 18 A6 0100 8F 3C 0002F
BRB 3$ ;3$ 04 11 00035
2$: MOVZWL (R7), 24(R6) ;(R7), 24(R6) 2711 18 A6 67 3C 00037
3$: PUSHL R6 ;R6 2716 56 DD 0003B
CALLS #1, (R8) ;#1, LOG_PUT 68 01 FB 0003D
4$: RET ; 04 00040
; Routine Size: 65 bytes, Routine Base: $CODE$ + 0FFB
; 2718 1 %SBTTL 'LOG_FAOL - Log an FAO string to the log file'
; 2719 1
; 2720 1 GLOBAL ROUTINE LOG_FAOL (FAOL_DESC, FAOL_PARAMS, LOG_RAB) =
; 2721 1
; 2722 1 !++
; 2723 1 ! FUNCTIONAL DESCRIPTION:
; 2724 1 !
; 2725 1 ! This routine will write an FAOL string to the output file.
; 2726 1 !
; 2727 1 ! CALLING SEQUENCE:
; 2728 1 !
; 2729 1 ! STATUS = LOG_FAOL (FAOL_DESC, FAOL_PARAMS, LOG_RAB);
; 2730 1 !
; 2731 1 ! INPUT PARAMETERS:
; 2732 1 !
; 2733 1 ! FAOL_DESC - Address of descriptor for string to be written
; 2734 1 !
; 2735 1 ! FAOL_PARAMS - Parameter list for FAOL call
; 2736 1 !
; 2737 1 ! LOG_RAB - RAB for log file
; 2738 1 !
; 2739 1 ! IMPLICIT INPUTS:
; 2740 1 !
; 2741 1 ! None.
; 2742 1 !
; 2743 1 ! OUPTUT PARAMETERS:
; 2744 1 !
; 2745 1 ! None.
; 2746 1 !
; 2747 1 ! IMPLICIT OUTPUTS:
; 2748 1 !
; 2749 1 ! None.
; 2750 1 !
; 2751 1 ! COMPLETION CODES:
; 2752 1 !
; 2753 1 ! KER_NORMAL or $FAOL or LOG_PUT error code.
; 2754 1 !
; 2755 1 ! SIDE EFFECTS:
; 2756 1 !
; 2757 1 ! None.
; 2758 1 !
; 2759 1 !--
; 2760 1
; 2761 2 BEGIN
; 2762 2 !
; 2763 2 ! Completion codes returned:
; 2764 2 !
; 2765 2 EXTERNAL LITERAL
; 2766 2 KER_NORMAL; ! Normal return
; 2767 2
; 2768 2 MAP
; 2769 2 FAOL_DESC : REF BLOCK [8, BYTE], ! Descriptor for string
; 2770 2 LOG_RAB : REF $RAB_DECL; ! RAB for file
; 2771 2
; 2772 2 LITERAL
; 2773 2 FAOL_BUFSIZ = 256; ! Length of buffer
; 2774 2
; 2775 2 LOCAL
; 2776 2 FAOL_BUFFER : VECTOR [FAOL_BUFSIZ, BYTE], ! Buffer for FAOL output
; 2777 2 FAOL_BUF_DESC : BLOCK [8, BYTE], ! Descriptor for buffer
; 2778 2 STATUS; ! Random status value
; 2779 2
; 2780 2 !
; 2781 2 ! Initialize descriptor for buffer
; 2782 2 !
; 2783 2 FAOL_BUF_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 2784 2 FAOL_BUF_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 2785 2 FAOL_BUF_DESC [DSC$A_POINTER] = FAOL_BUFFER;
; 2786 2 FAOL_BUF_DESC [DSC$W_LENGTH] = FAOL_BUFSIZ;
; 2787 2 !
; 2788 2 ! Now do the FAOL to generate the full text
; 2789 2 !
; P 2790 2 STATUS = $FAOL (CTRSTR = .FAOL_DESC, OUTBUF = FAOL_BUF_DESC,
; 2791 2 OUTLEN = FAOL_BUF_DESC [DSC$W_LENGTH], PRMLST = .FAOL_PARAMS);
; 2792 2 IF NOT .STATUS THEN RETURN .STATUS;
; 2793 2 !
; 2794 2 ! Dump the text into the file
; 2795 2 !
; 2796 2 INCR I FROM 1 TO .FAOL_BUF_DESC [DSC$W_LENGTH] DO
; 2797 3 BEGIN
; 2798 3 STATUS = LOG_CHAR ( .FAOL_BUFFER [.I - 1], .LOG_RAB);
; 2799 3 IF NOT .STATUS THEN RETURN .STATUS;
; 2800 2 END;
; 2801 2
; 2802 2 RETURN KER_NORMAL;
; 2803 2
; 2804 1 END; ! End of LOG_FAOL
.EXTRN SYS$FAOL
.ENTRY LOG_FAOL, ^M<R2,R3> ;LOG_FAOL, Save R2,R3 2720 000C 00000
MOVAB -260(SP), SP ;-260(SP), SP 5E FEFC CE 9E 00002
PUSHL #17694976 ;#17694976 2786 010E0100 8F DD 00007
MOVAB 8(SP), 4(SP) ;FAOL_BUFFER, FAOL_BUF_DESC+4 2785 04 AE 08 AE 9E 0000D
PUSHL 8(AP) ;FAOL_PARAMS 2791 08 AC DD 00012
PUSHAB 4(SP) ;FAOL_BUF_DESC 04 AE 9F 00015
PUSHAB 8(SP) ;FAOL_BUF_DESC 08 AE 9F 00018
PUSHL 4(AP) ;FAOL_DESC 04 AC DD 0001B
CALLS #4, G^SYS$FAOL ;#4, SYS$FAOL 00000000G 00 04 FB 0001E
BLBC R0, 3$ ;STATUS, 3$ 2792 22 50 E9 00025
MOVZWL (SP), R3 ;FAOL_BUF_DESC, R3 2796 53 6E 3C 00028
CLRL R2 ;I 52 D4 0002B
BRB 2$ ;2$ 10 11 0002D
1$: PUSHL 12(AP) ;LOG_RAB 2798 0C AC DD 0002F
MOVZBL 11(SP)[R2], -(SP) ;FAOL_BUFFER-1[I], -(SP) 7E 0B AE42 9A 00032
CALLS #2, W^LOG_CHAR ;#2, LOG_CHAR FF18 CF 02 FB 00037
BLBC R0, 3$ ;STATUS, 3$ 2799 0B 50 E9 0003C
2$: AOBLEQ R3, R2, 1$ ;R3, I, 1$ 2796 52 53 F3 0003F
; EC 00042
MOVL #KER_NORMAL, R0 ;#KER_NORMAL, R0 2802 50 00000000G 8F D0 00043
3$: RET ; 04 0004A
; Routine Size: 75 bytes, Routine Base: $CODE$ + 103C
; 2805 1
; 2806 1 %SBTTL 'LOG_PUT - Write a record buffer for a log file'
; 2807 1 ROUTINE LOG_PUT (LOG_RAB) =
; 2808 1
; 2809 1 !++
; 2810 1 ! FUNCTIONAL DESCRIPTION:
; 2811 1 !
; 2812 1 ! This routine will output one buffer for a log file.
; 2813 1 !
; 2814 1 ! CALLING SEQUENCE:
; 2815 1 !
; 2816 1 ! STATUS = LOG_PUT (LOG_RAB);
; 2817 1 !
; 2818 1 ! INPUT PARAMETERS:
; 2819 1 !
; 2820 1 ! LOG_RAB - RAB for log file.
; 2821 1 !
; 2822 1 ! IMPLICIT INPUTS:
; 2823 1 !
; 2824 1 ! None.
; 2825 1 !
; 2826 1 ! OUPTUT PARAMETERS:
; 2827 1 !
; 2828 1 ! None.
; 2829 1 !
; 2830 1 ! IMPLICIT OUTPUTS:
; 2831 1 !
; 2832 1 ! None.
; 2833 1 !
; 2834 1 ! COMPLETION CODES:
; 2835 1 !
; 2836 1 ! Status value from RMS
; 2837 1 !
; 2838 1 ! SIDE EFFECTS:
; 2839 1 !
; 2840 1 ! None.
; 2841 1 !
; 2842 1 !--
; 2843 1
; 2844 2 BEGIN
; 2845 2
; 2846 2 MAP
; 2847 2 LOG_RAB : REF $RAB_DECL; ! RAB for file
; 2848 2
; 2849 2 !
; 2850 2 ! Calculate record size
; 2851 2 !
; 2852 2 LOG_RAB [RAB$W_RSZ] = .LOG_RAB [RAB$L_CTX];
; 2853 2 LOG_RAB [RAB$W_USZ] = .LOG_RAB [RAB$W_RSZ];
; 2854 2 !
; 2855 2 ! Buffer will be empty when we finish
; 2856 2 !
; 2857 2 LOG_RAB [RAB$L_CTX] = 0;
; 2858 2 !
; 2859 2 ! And call RMS to write the buffer
; 2860 2 !
; 2861 2 RETURN $PUT (RAB = .LOG_RAB);
; 2862 1 END; ! End of LOG_PUT
;LOG_PUT
U.1: .WORD ^M<> ;Save nothing 2807 0000 00000
MOVL 4(AP), R0 ;LOG_RAB, R0 2852 50 04 AC D0 00002
MOVW 24(R0), 34(R0) ;24(R0), 34(R0) 22 A0 18 A0 B0 00006
MOVW 34(R0), 32(R0) ;34(R0), 32(R0) 2853 20 A0 22 A0 B0 0000B
CLRL 24(R0) ;24(R0) 2857 18 A0 D4 00010
PUSHL R0 ;R0 2861 50 DD 00013
CALLS #1, G^SYS$PUT ;#1, SYS$PUT 00000000G 00 01 FB 00015
RET ; 04 0001C
; Routine Size: 29 bytes, Routine Base: $CODE$ + 1087
; 2863 1 %SBTTL 'FILE_ERROR - Error processing for all RMS errors'
; 2864 1 ROUTINE FILE_ERROR (STATUS) : NOVALUE =
; 2865 1
; 2866 1 !++
; 2867 1 ! FUNCTIONAL DESCRIPTION:
; 2868 1 !
; 2869 1 ! This routine will process all of the RMS-32 error returns. It will
; 2870 1 ! get the text for the error and then it will issue a KER_ERROR for
; 2871 1 ! the RMS failure.
; 2872 1 !
; 2873 1 ! CALLING SEQUENCE:
; 2874 1 !
; 2875 1 ! FILE_ERROR();
; 2876 1 !
; 2877 1 ! INPUT PARAMETERS:
; 2878 1 !
; 2879 1 ! None.
; 2880 1 !
; 2881 1 ! IMPLICIT INPUTS:
; 2882 1 !
; 2883 1 ! STATUS - RMS error status.
; 2884 1 ! FILE_NAME - File name and extension.
; 2885 1 ! FILE_SIZE - Size of the thing in FILE_NAME.
; 2886 1 !
; 2887 1 ! OUTPUT PARAMETERS:
; 2888 1 !
; 2889 1 ! None.
; 2890 1 !
; 2891 1 ! IMPLICIT OUTPUTS:
; 2892 1 !
; 2893 1 ! None.
; 2894 1 !
; 2895 1 ! COMPLETION CODES:
; 2896 1 !
; 2897 1 ! None.
; 2898 1 !
; 2899 1 ! SIDE EFFECTS:
; 2900 1 !
; 2901 1 ! None.
; 2902 1 !
; 2903 1 !--
; 2904 1
; 2905 2 BEGIN
; 2906 2 !
; 2907 2 ! KERMIT completion codes
; 2908 2 !
; 2909 2 EXTERNAL LITERAL
; 2910 2 KER_RMS32; ! RMS-32 error
; 2911 2
; 2912 2 LOCAL
; 2913 2 ERR_BUFFER : VECTOR [CH$ALLOCATION (MAX_MSG)],
; 2914 2 ERR_DESC : BLOCK [8, BYTE] PRESET ! String descriptor to
; 2915 2 ([DSC$B_CLASS ] = DSC$K_CLASS_S, ! the error buffer
; 2916 2 [DSC$B_DTYPE ] = DSC$K_DTYPE_T, ! standard string
; 2917 2 [DSC$W_LENGTH ] = MAX_MSG, ! descriptor
; 2918 2 [DSC$A_POINTER ] = ERR_BUFFER);
; 2919 2
; P 2920 2 $GETMSG (MSGID = .STATUS,
; P 2921 2 MSGLEN = ERR_DESC [DSC$W_LENGTH],
; P 2922 2 BUFADR = ERR_DESC,
; 2923 2 FLAGS = 1);
; 2924 2 LIB$SIGNAL (KER_RMS32, 2, ERR_DESC, FILE_DESC);
; 2925 1 END; ! End of FILE_ERROR
.EXTRN SYS$GETMSG
;FILE_ERROR
U.6: .WORD ^M<> ;Save nothing 2864 0000 00000
MOVAB -1008(SP), SP ;-1008(SP), SP 5E FC10 CE 9E 00002
PUSHL #17695722 ;#17695722 2918 010E03EA 8F DD 00007
MOVAB 8(SP), 4(SP) ;ERR_BUFFER, ERR_DESC+4 04 AE 08 AE 9E 0000D
MOVQ #1, -(SP) ;#1, -(SP) 2923 7E 01 7D 00012
PUSHAB 8(SP) ;ERR_DESC 08 AE 9F 00015
PUSHAB 12(SP) ;ERR_DESC 0C AE 9F 00018
PUSHL 4(AP) ;STATUS 04 AC DD 0001B
CALLS #5, G^SYS$GETMSG ;#5, SYS$GETMSG 00000000G 00 05 FB 0001E
PUSHAB G^FILE_DESC ;FILE_DESC 2924 00000000' 00 9F 00025
PUSHAB 4(SP) ;ERR_DESC 04 AE 9F 0002B
PUSHL #2 ;#2 02 DD 0002E
PUSHL #KER_RMS32 ;#KER_RMS32 00000000G 8F DD 00030
CALLS #4, G^LIB$SIGNAL ;#4, LIB$SIGNAL 00000000G 00 04 FB 00036
RET ; 2925 04 0003D
; Routine Size: 62 bytes, Routine Base: $CODE$ + 10A4
; 2926 1 %SBTTL 'End of KERFIL'
; 2927 1 END ! End of module
; 2928 1
; 2929 0 ELUDOM
; PSECT SUMMARY
;
; Name Bytes Attributes
;
; $OWN$ 857 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; $GLOBAL$ 20 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; $CODE$ 4322 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; . ABS . 0 NOVEC,NOWRT,NORD ,NOEXE,NOSHR, LCL, ABS, CON,NOPIC,ALIGN(0)
; $PLIT$ 44 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; Library Statistics
;
; -------- Symbols -------- Pages Processing
; File Total Loaded Percent Mapped Time
;
; SYS$COMMON:[SYSLIB]STARLET.L32;2 12540 136 1 721 00:00.4
; COMMAND QUALIFIERS
; BLIS/LIS/MACH=(ASSEM,UNIQUE)/SOURCE=NOHEAD VMSFIL.BLI
; Compilation Complete
.END