home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
b
/
vmstrm.mar
< prev
next >
Wrap
Text File
|
2020-01-01
|
338KB
|
6,958 lines
; 0001 0 MODULE KERTRM (IDENT = '3.3.120',
; 0002 0 ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)
; 0003 0 ) =
; 0004 1 BEGIN
; 0005 1 !<BLF/WIDTH:100>
; 0006 1
; 0007 1 !++
; 0008 1 ! FACILITY:
; 0009 1 !
; 0010 1 ! KERMIT-32 terminal processing.
; 0011 1 !
; 0012 1 ! ABSTRACT:
; 0013 1 !
; 0014 1 ! This module will do all of the terminal processing for KERMIT-32.
; 0015 1 ! It contains the output routines for the terminal to send and
; 0016 1 ! receive messages as well as the routines to output text for debugging.
; 0017 1 !
; 0018 1 ! ENVIRONMENT:
; 0019 1 !
; 0020 1 ! VAX/VMS user mode.
; 0021 1 !
; 0022 1 ! AUTHOR: Robert C. McQueen, CREATION DATE: 25-March-1983
; 0023 1 !--
; 0024 1
; 0025 1 %SBTTL 'Table of Contents'
; 0026 1 !
; 0027 1 ! TABLE OF CONTENTS:
; 0028 1 !
; 0029 1 %SBTTL 'Revision History'
; 0030 1
; 0031 1 !++
; 0032 1 !
; 0033 1 ! Start of version 1. 25-March-1983
; 0034 1 !
; 0035 1 ! 1.0.000 By: Robert C. McQueen On: 25-March-1983
; 0036 1 ! Create this module.
; 0037 1 !
; 0038 1 ! 1.1.001 By: W. Hom On: 6-July-83
; 0039 1 ! Implement CONNECT command.
; 0040 1 !
; 0041 1 ! 1.1.002 By: Nick Bush On: 7-July-83
; 0042 1 ! Fix RECEIVE QIO to time out correctly.
; 0043 1 !
; 0044 1 ! 1.2.003 By: Robert C. McQueen On: 16-Aug-83
; 0045 1 ! Get the status correctly for the SS$_TIMEOUT checks.
; 0046 1 !
; 0047 1 ! 1.2.004 By: Robert C. McQueen On: 9-Sept-1983
; 0048 1 ! Flag if we just opened the terminal, so that we can
; 0049 1 ! clear the input that is coming into the terminal. This
; 0050 1 ! will clear up some of the junk that we get on start up.
; 0051 1 !
; 0052 1 ! 2.0.005 Release VAX/VMS Kermit-32 version 2.0
; 0053 1 !
; 0054 1 ! 2.0.006 By: Nick Bush On: 10-Nov-1983
; 0055 1 ! Fix local echo and IBM mode.
; 0056 1 !
; 0057 1 ! 2.0.013 By: Nick Bush On: 11-Nov-1983
; 0058 1 ! Make it possible to redirect debugging output to DBG$OUTPUT.
; 0059 1 !
; 0060 1 ! 2.0.015 By: Nick Bush On: 17-Nov-1983
; 0061 1 ! Always purge typeahead when posting the receive QIO.
; 0062 1 ! Also eat any received data just before sending a packet.
; 0063 1 !
; 0064 1 ! 2.0.020 By: Nick Bush On: 9-Dec-1983
; 0065 1 ! Only abort (when remote) if we seen two control-Y's in
; 0066 1 ! succession. This way a single glitch does not kill us.
; 0067 1 !
; 0068 1 ! 2.0.021 By: Nick Bush On: 12-Dec-1983
; 0069 1 ! Add status type-out character (^A), debug toggle
; 0070 1 ! character (^D), and force timeout character (^M)
; 0071 1 ! to those accepted during a transfer when we are remote.
; 0072 1 !
; 0073 1 ! 2.0.023 By: Nick Bush On: 16-Dec-1983
; 0074 1 ! Add a default terminal name for the communications line.
; 0075 1 ! If KER$COMM is defined, that will be the default.
; 0076 1 !
; 0077 1 ! 2.0.027 By: Nick Bush On: 20-Jan-1983
; 0078 1 ! Fix reset of parity to use the correct field in the
; 0079 1 ! IO status block from the IO$_SENSEMODE. It was using
; 0080 1 ! the LF fill count instead.
; 0081 1 !
; 0082 1 ! 2.0.031 By: Nick Bush On: 4-Feb-1983
; 0083 1 ! Change connect code to improve response (hopefully
; 0084 1 ! without worsening throughput or runtime requirements).
; 0085 1 ! When either terminal is idle we will be waiting for
; 0086 1 ! a single character with a larger buffered read queued
; 0087 1 ! up immediately after it.
; 0088 1 !
; 0089 1 ! 2.0.033 By: Nick Bush On: 6-March-1984
; 0090 1 ! Change command input and terminal processing so that
; 0091 1 ! we will always have SYS$OUTPUT and SYS$COMMAND open
; 0092 1 ! when they are terminals, and will also always have
; 0093 1 ! the transfer terminal line open. This makes it
; 0094 1 ! unnecessary for the user to allocate a dialup line
; 0095 1 ! in order to go between CONNECT and a transfer command,
; 0096 1 ! and keep anyone else from grabbing the line between
; 0097 1 ! commands.
; 0098 1 ! Also add the command parsing for the rest of the LOCAL/REMOTE
; 0099 1 ! commands. This makes use of the fact that we have
; 0100 1 ! SYS$COMMAND open to allow us to read passwords without echo.
; 0101 1 ! Commands which should only be done when Kermit is local
; 0102 1 ! (GET, BYE, etc.) will now give an error if the transfer
; 0103 1 ! line is the same as the controlling terminal.
; 0104 1 ! SEND will now check for the files existance before calling
; 0105 1 ! KERMSG to send it.
; 0106 1 !
; 0107 1 ! 2.0.034 By: Nick Bush On: 7-March-1984
; 0108 1 ! Default the parity type to be that of the default transfer
; 0109 1 ! line. This should make things simpler for systems which use
; 0110 1 ! parity by default.
; 0111 1 !
; 0112 1 ! 2.0.035 By: Nick Bush On: 8-March-1984
; 0113 1 ! Add LOG SESSION command to set a log file for CONNECT.
; 0114 1 ! While we are doing so, clean up the command parsing a little
; 0115 1 ! so that we don't have as many COPY_xxx routines.
; 0116 1 !
; 0117 1 ! 2.0.036 By: Robert C. McQueen On: 20-March-1984
; 0118 1 ! Fix call to LOG_OPEN to make the debug log file work.
; 0119 1 ! Module: KERTRM
; 0120 1 !
; 0121 1 ! 2.0.037 By: Robert C. McQueen On: 20-March-1984
; 0122 1 ! Fix call to LOG_OPEN for debug log file.
; 0123 1 ! Module: KERTRM.
; 0124 1 !
; 0125 1 ! 2.0.042 By: Nick Bush On: 26-March-1984
; 0126 1 ! Fix connect processing to make it easy to type messages
; 0127 1 ! on the user's terminal while connected. Use this
; 0128 1 ! to type messages when log file stopped and started.
; 0129 1 ! Include the node name in the messages to keep
; 0130 1 ! users who are running through multiple Kermit's from
; 0131 1 ! getting confused.
; 0132 1 !
; 0133 1 ! 2.0.043 By: Nick Bush On: 28-March-1984
; 0134 1 ! Fix SET PARITY ODD to work. Somehow, the table entry
; 0135 1 ! had PR_NONE instead of PR_ODD. Also add status type
; 0136 1 ! out and help message to connect command.
; 0137 1 !
; 0138 1 ! 3.0.045 Start of version 3.
; 0139 1 !
; 0140 1 ! 3.0.046 By: Nick Bush On: 29-March-1984
; 0141 1 ! Fix debugging log file to correctly set/clear file open
; 0142 1 ! flag. Also make log files default to .LOG.
; 0143 1 !
; 0144 1 ! 3.1.054 By: Nick Bush On: 13-July-1984
; 0145 1 ! Change TERM_OPEN to take an argument which determines
; 0146 1 ! whether it should post any QIO's. This makes it unnecessary
; 0147 1 ! for TERM_CONNECT to cancel the QIO's, and avoids problems
; 0148 1 ! with DECnet remote terminals.
; 0149 1 !
; 0150 1 ! 3.1.060 By: Nick Bush On: 16-March-1985
; 0151 1 ! Increase size of terminal name buffers to account for large
; 0152 1 ! unit numbers (most likely seen with VTA's).
; 0153 1 !
; 0154 1 ! 3.1.061 By: Nick Bush On: 16-March-1985
; 0155 1 ! Only attempt to set parity back when closing terminal.
; 0156 1 !
; 0157 1 ! 3.1.065 By: Nick Bush On: 10-April-1985
; 0158 1 ! Split IBM handshaking from parity and local echo. Allow
; 0159 1 ! link time setting of IBM_MODE defaults by defining symbols:
; 0160 1 !
; 0161 1 ! IBM_MODE_CHARACTER = character value of handshake character
; 0162 1 ! IBM_MODE_ECHO = 1 for local echo, 2 for no local echo
; 0163 1 ! IBM_MODE_PARITY = (0 = none), (1 = mark), (2 = even),
; 0164 1 ! (3 = odd), (4 = space).
; 0165 1 !
; 0166 1 ! If not specified, Kermit will continue to use DC1, local echo
; 0167 1 ! and odd parity for IBM_MODE.
; 0168 1 !
; 0169 1 !
; 0170 1 ! Start of version 3.2 on 8-May-1985
; 0171 1 !
; 0172 1 ! 3.2.073 By: Robert McQueen On: 11-March-1985
; 0173 1 ! Fix a problem restoring the terminal characteristics under
; 0174 1 ! VMS 4.x
; 0175 1 !
; 0176 1 ! 3.2.100 By: Gregory P. Welsh On: 1-June-1986
; 0177 1 ! Added code for Transmit function (COMND_TRANSMIT).
; 0178 1 !
; 0179 1 ! Start of version 3.3
; 0180 1 !
; 0181 1 ! 3.3.101 By: Robert McQueen On: 2-July-1986
; 0182 1 ! Change $TRNLOG system service to be LIB$SYS_TRNLOG and
; 0183 1 ! handle the errors better. (LIB$ shouldn't change even if the
; 0184 1 ! system service does).
; 0185 1 !
; 0186 1 ! 3.3.102 By: Robert McQueen On: 5-July-1986
; 0187 1 ! Add changes/fixes suggested by Art Guion and David Deley.
; 0188 1 ! - Turn off FALLBACK terminal characteristics for eightbit
; 0189 1 ! operations.
; 0190 1 ! - Decrease IBM timeouts when waiting for a handshake.
; 0191 1 !
; 0192 1 ! 3.3.105 By: Robert McQueen On: 8-July-1986
; 0193 1 ! Attempt to fix the truncation errors that we now get from
; 0194 1 ! LINK with BLISS-32 v4.2. Also do code clean up in VMSTRM and
; 0195 1 ! VMSFIL.
; 0196 1 !
; 0197 1 ! 3.3.115 JHW004 Jonathan H. Welch, 9-May-1988 14:35
; 0198 1 ! Added the ability to send a break character to
; 0199 1 ! the outgoing terminal session using the sequence
; 0200 1 ! esc-chr B. The break will be sent after the next
; 0201 1 ! character arrives. This is because there must be
; 0202 1 ! no outstanding I/O on a channel in order to modify
; 0203 1 ! terminal characteristics (necessary to send a break).
; 0204 1 !
; 0205 1 ! 3.3.116 JHW008 Jonathan H. Welch, 12-Apr-1990 12:20
; 0206 1 ! Added and modified routines in to notify the user if
; 0207 1 ! SS$_HANGUP occurs on the outgoing terminal line.
; 0208 1 !
; 0209 1 ! 3.3.117 JHW012 Jonathan H. Welch, 18-May-1990 7:56
; 0210 1 ! Modified asn_wth_mbx to obtain the master PID in the
; 0211 1 ! process tree before asking for JPI$_TERMINAL. $GETJPI
; 0212 1 ! was returning a null string for this item when called
; 0213 1 ! from a subprocess resulting in a "No default terminal
; 0214 1 ! line for transfers" message.
; 0215 1 !
; 0216 1 ! 3.3.118 JHW013 Jonathan H. Welch, 18-May-1990 13:00
; 0217 1 ! Extended the buffer size for terminal names from 20
; 0218 1 ! characters to 255 to make sure any terminal name can
; 0219 1 ! be accomodated.
; 0220 1 !
; 0221 1 ! 3.3.119 JHW014 Jonathan H. Welch, 5-Jun-1990 12:38
; 0222 1 ! Modified asn_wth_mbx to add a ':' to the end of the
; 0223 1 ! terminal name is one is not returned by VMS.
; 0224 1 ! This will keep LIB$GETDVI from failing with an
; 0225 1 ! "invalid device name" which results in the kermit
; 0226 1 ! error "no default terminal line for transfers."
; 0227 1 !
; 0228 1 ! 3.3.120 JHW016 Jonathan H. Welch, 17-Oct-1990 9:42
; 0229 1 ! Modified asn_wth_mbx to work properly in non-interactive mode.
; 0230 1 !--
; 0231 1
; 0232 1 %SBTTL 'Library files'
; 0233 1 !
; 0234 1 ! INCLUDE FILES:
; 0235 1 !
; 0236 1 !
; 0237 1 ! System definitions
; 0238 1 !
; 0239 1
; 0240 1 LIBRARY 'SYS$LIBRARY:STARLET';
; 0241 1
; 0242 1 !
; 0243 1 ! KERMIT common definitions
; 0244 1 !
; 0245 1
; 0246 1 REQUIRE 'KERCOM';
; 0455 1
; 0456 1 REQUIRE 'KERERR';
; 0522 1
; 0523 1 %SBTTL 'Structure definitions -- $GETDVI arguments'
; 0524 1 !
; 0525 1 ! $GETDVI interface fields and structure definition
; 0526 1 !
; 0527 1
; 0528 1 LITERAL
; 0529 1 ITEM_SIZE = 3; ! Length of a DVI item list entry
; 0530 1
; 0531 1 !
; 0532 1 ! Fields for accessing the items in a DVI item list
; 0533 1 !
; 0534 1
; 0535 1 FIELD
; 0536 1 ITEM_FIELDS =
; 0537 1 SET
; 0538 1 ITEM_BFR_LENGTH = [0, 0, 16, 0],
; 0539 1 ITEM_ITEM_CODE = [0, 16, 16, 0],
; 0540 1 ITEM_BFR_ADDRESS = [1, 0, 32, 0],
; 0541 1 ITEM_RTN_LENGTH = [2, 0, 32, 0]
; 0542 1 TES;
; 0543 1
; 0544 1 !
; 0545 1 ! Structure definition for item list
; 0546 1
; 0547 1 STRUCTURE
; 0548 1 ITEM_LIST [I, O, P, S, E; N] =
; 0549 1 [(N + 1)*ITEM_SIZE*4]
; 0550 1 (ITEM_LIST + ((I*ITEM_SIZE) + O)*4)<P, S, E>;
; 0551 1
; 0552 1 %SBTTL 'Structures definitions -- Terminal characteristics'
; 0553 1 !
; 0554 1 ! Terminal characteristics words
; 0555 1 !
; 0556 1
; 0557 1 LITERAL
; 0558 1 TC$_CHAR_LENGTH = 12;
; 0559 1
; 0560 1 !
; 0561 1 ! Fields for accessing the items in a characteristic block
; 0562 1 !
; 0563 1
; 0564 1 FIELD
; 0565 1 TC$_FIELDS =
; 0566 1 SET
; 0567 1 TC$_CLASS = [0, 0, 8, 0],
; 0568 1 TC$_TYPE = [0, 8, 8, 0],
; 0569 1 TC$_BFR_SIZE = [0, 16, 16, 0],
; 0570 1 TC$_PAGE_LEN = [1, 24, 8, 0],
; 0571 1 TC$_CHAR = [1, 0, 24, 0],
; 0572 1 TC$_CHAR_2 = [2, 0, 32, 0]
; 0573 1 TES;
; 0574 1
; 0575 1 !
; 0576 1 ! Structure definition for item list
; 0577 1 !
; 0578 1
; 0579 1 STRUCTURE
; 0580 1 TC$_CHAR_STR [O, P, S, E; N] =
; 0581 1 [TC$_CHAR_LENGTH]
; 0582 1 (TC$_CHAR_STR + O*4)<P, S, E>;
; 0583 1
; 0584 1 %SBTTL 'Literals'
; 0585 1 !
; 0586 1 ! Literal definitions
; 0587 1 !
; 0588 1
; 0589 1 LITERAL
; 0590 1 MAX_NODE_NAME = 255, ! Size of a node name
; 0591 1 TERM_NAME_SIZE = 255, ! Size of a terminal name - be generous
; 0592 1 RECV_BUFF_SIZE = MAX_MSG + 20, ! Size of receive buffer
; 0593 1 GET_DEV_EFN = 7, ! For GET_DEV_CHAR
; 0594 1 CONS_O_EFN = 6, ! Event flag for console output
; 0595 1 CONS_EFN = 5, ! Event flag for console input
; 0596 1 TERM_O_EFN = 4, ! Event flag for terminal output
; 0597 1 TIME_EFN = 3, ! Event flag number for receive timer
; 0598 1 TERM_EFN = 2; ! Event flag number to use for Terminal input
; 0599 1
; 0600 1 %SBTTL 'Storage'
; 0601 1 !
; 0602 1 ! OWN STORAGE:
; 0603 1 !
; 0604 1 !
; 0605 1 ! Communications routines storage
; 0606 1 !
; 0607 1
; 0608 1 OWN
; 0609 1 FORCE_ABORT, ! Force abort next receive
; 0610 1 FORCE_TIMEOUT, ! Force time out on next receive
; 0611 1 TERM_FIRST_TIME, ! First time QIO to read done
; 0612 1 TERM_CHAN, ! Channel the terminal is opened on
; 0613 1 mbx_chan : INITIAL(0), ! Mailbox channel associated with TERM_CHAN device.
; 0614 1 new_mbx_chan : INITIAL(0), ! Mailbox channel associated with new (temporary) TERM_CHAN device.
; 0615 1 CONS_CHAN, ! Channel the console terminal is opened on
; 0616 1 SYS_OUTPUT_CHAN, ! Channel to SYS$OUTPUT (if it is a terminal)
; 0617 1 SYS_OUTPUT_OPEN, ! SYS$OUTPUT open
; 0618 1 SYS_OUTPUT_NAME : VECTOR [TERM_NAME_SIZE, BYTE], ! Text of physical name for SYS$OUTPUT
; 0619 1 SYS_OUTPUT_DESC : BLOCK [8, BYTE], ! Descriptor for physical name
; 0620 1 SYS_COMMAND_CHAN, ! Channel to SYS$COMMAND if a terminal
; 0621 1 SYS_COMMAND_OPEN, ! SYS$COMMAND open
; 0622 1 SYS_COMMAND_NAME : VECTOR [TERM_NAME_SIZE, BYTE], ! Text of physical name for SYS$COMMAND
; 0623 1 SYS_COMMAND_DESC : BLOCK [8, BYTE], ! Descriptor for physical name
; 0624 1 TERM_NAME : VECTOR [TERM_NAME_SIZE, BYTE], ! Text of current transfer terminal name
; 0625 1 JOB_TERM_NAME : VECTOR [TERM_NAME_SIZE, BYTE], ! Text of jobs controlling terminal name
; 0626 1 TERM_OPEN_FLAG, ! The transfer terminal is open
; 0627 1 SESSION_FAB : $FAB_DECL, ! FAB for session logging
; 0628 1 SESSION_RAB : $RAB_DECL, ! RAB for session logging
; 0629 1 SESSION_NAME : VECTOR [MAX_FILE_NAME, BYTE], ! Actual name of session log file
; 0630 1 SESSION_OPEN, ! Session log file open
; 0631 1 SESSION_LOGGING, ! Session logging enabled
; 0632 1 DEBUG_FAB : $FAB_DECL, ! FAB for debugging
; 0633 1 DEBUG_RAB : $RAB_DECL, ! RAB for debugging
; 0634 1 DEBUG_NAME : VECTOR [MAX_FILE_NAME, BYTE], ! Name of debugging log file
; 0635 1 DEBUG_REDIRECTED, ! Debugging output redirected
; 0636 1 NODE_NAME : VECTOR [MAX_NODE_NAME, BYTE], ! Node name text
; 0637 1 IO_STATUS : VECTOR [4, WORD], ! IOSB for receive QIO
; 0638 1 RECV_BUFFER : VECTOR [CH$ALLOCATION (RECV_BUFF_SIZE, CHR_SIZE)], ! Input buffer
; 0639 1 OLD_PARITY : BLOCK [8, BYTE], ! Old IOSB information
; 0640 1 OLD_TERM_CHAR : TC$_CHAR_STR FIELD (TC$_FIELDS), ! Old terminal chars
; 0641 1 NEW_TERM_CHAR : TC$_CHAR_STR FIELD (TC$_FIELDS); ! New terminal chars
; 0642 1
; 0643 1 GLOBAL
; 0644 1 NODE_DESC : BLOCK [8, BYTE] PRESET ! Descriptor for node name
; 0645 1 ([DSC$B_CLASS ] = DSC$K_CLASS_S, ! String class
; 0646 1 [DSC$B_DTYPE ] = DSC$K_DTYPE_T, ! Text descriptor
; 0647 1 [DSC$W_LENGTH ] = MAX_NODE_NAME, ! Maximum length
; 0648 1 [DSC$A_POINTER ] = NODE_NAME), ! Address of the item
; 0649 1 DEBUG_DESC : BLOCK [8, BYTE] PRESET ! Debugging log file
; 0650 1 ([DSC$B_CLASS ] = DSC$K_CLASS_S, ! descriptor
; 0651 1 [DSC$B_DTYPE ] = DSC$K_DTYPE_T, ! Standard string descriptor
; 0652 1 [DSC$W_LENGTH ] = 0, ! initialially zero length
; 0653 1 [DSC$A_POINTER ] = DEBUG_NAME), ! pointing to DEBUG_NAME
; 0654 1 SESSION_DESC : BLOCK [8, BYTE], ! Descriptor for session log file name
; 0655 1 TERM_DESC : BLOCK [8, BYTE], ! Descriptor for current transfer terminal
; 0656 1 JOB_TERM_DESC : BLOCK [8, BYTE], ! Descriptor for controlling terminal (if any)
; 0657 1 TRANS_DELAY, ! The transmit delay
; 0658 1 TRANS_ECHO_FLAG, ! The transmit echo flag
; 0659 1 TERM_FLAG, ! Terminal setup for transfer
; 0660 1 Send_Break_TTY_Flag; ! Flag to indicate if a break should be sent.
; 0661 1
; 0662 1 %SBTTL 'External routines'
; 0663 1 !
; 0664 1 ! EXTERNAL REFERENCES:
; 0665 1 !
; 0666 1 !
; 0667 1 ! System library routines
; 0668 1 !
; 0669 1
; 0670 1 EXTERNAL ROUTINE
; 0671 1 LIB$ASN_WTH_MBX : ADDRESSING_MODE (GENERAL),
; 0672 1 LIB$GETJPI : ADDRESSING_MODE (GENERAL),
; 0673 1 LIB$GETDVI : ADDRESSING_MODE (GENERAL),
; 0674 1 LIB$PUT_SCREEN : ADDRESSING_MODE (GENERAL),
; 0675 1 LIB$PUT_OUTPUT : ADDRESSING_MODE (GENERAL),
; 0676 1 LIB$EMUL : ADDRESSING_MODE (GENERAL),
; 0677 1 LIB$ADDX : ADDRESSING_MODE (GENERAL),
; 0678 1 LIB$SIGNAL : ADDRESSING_MODE (GENERAL),
; 0679 1 LIB$WAIT : ADDRESSING_MODE (GENERAL);
; 0680 1
; 0681 1 !
; 0682 1 ! Forward routines:
; 0683 1 !
; 0684 1
; 0685 1 FORWARD ROUTINE
; 0686 1 TERM_DUMP : NOVALUE, ! Routine to type on terminal
; 0687 1 GET_DEV_CHAR, ! Get device characteristics
; 0688 1 Term_Hangup : NOVALUE,
; 0689 1 Mbx_Ast_Rtn : NOVALUE,
; 0690 1 asn_wth_mbx,
; 0691 1 Send_Break_TTY,
; 0692 1 DO_RECEIVE_QIO,
; 0693 1 DO_CONS_QIO;
; 0694 1
; 0695 1 %SBTTL 'External storage'
; 0696 1
; 0697 1 !++
; 0698 1 ! The following is the various external storage locations that are
; 0699 1 ! referenced from this module.
; 0700 1 !--
; 0701 1
; 0702 1 !
; 0703 1 ! KERMSG storage
; 0704 1 !
; 0705 1
; 0706 1 EXTERNAL
; 0707 1 PARITY_TYPE, ! Type of parity being used
; 0708 1 ECHO_FLAG, ! Local echo
; 0709 1 IBM_CHAR, ! IBM mode turn-around character
; 0710 1 RCV_EOL, ! Receive EOL character
; 0711 1 SEND_TIMEOUT, ! Receive time out counter
; 0712 1 CONNECT_FLAG; ! Flag if communications line is TT:
; 0713 1
; 0714 1 !
; 0715 1 ! KERMIT storage
; 0716 1 !
; 0717 1
; 0718 1 EXTERNAL
; 0719 1 ESCAPE_CHR; ! Escape char. for CONNECT.
; 0720 1
; 0721 1 %SBTTL 'Terminal routines -- TERM_INIT - Initialize this module'
; 0722 1
; 0723 1 GLOBAL ROUTINE TERM_INIT : NOVALUE =
; 0724 1
; 0725 1 !++
; 0726 1 ! FUNCTIONAL DESCRIPTION:
; 0727 1 !
; 0728 1 ! This routine will initialize the terminal processing module. It will
; 0729 1 ! initialize the various data locations in this module.
; 0730 1 !
; 0731 1 ! CALLING SEQUENCE:
; 0732 1 !
; 0733 1 ! TERM_INIT();
; 0734 1 !
; 0735 1 ! INPUT PARAMETERS:
; 0736 1 !
; 0737 1 ! None.
; 0738 1 !
; 0739 1 ! IMPLICIT INPUTS:
; 0740 1 !
; 0741 1 ! None.
; 0742 1 !
; 0743 1 ! OUTPUT PARAMETERS:
; 0744 1 !
; 0745 1 ! None.
; 0746 1 !
; 0747 1 ! IMPLICIT OUTPUTS:
; 0748 1 !
; 0749 1 ! None.
; 0750 1 !
; 0751 1 ! COMPLETION CODES:
; 0752 1 !
; 0753 1 ! None.
; 0754 1 !
; 0755 1 ! SIDE EFFECTS:
; 0756 1 !
; 0757 1 ! None.
; 0758 1 !
; 0759 1 !--
; 0760 1
; 0761 2 BEGIN
; 0762 2
; 0763 2 LOCAL
; 0764 2 COUNTER, ! Counter for logical name translation
; 0765 2 STATUS, ! System call status
; 0766 2 DEV_TYPE, ! Device type result
; 0767 2 RSL_LENGTH : VOLATILE, ! Resulting length of translation
; 0768 2 RSL_NAME : BLOCK [TERM_NAME_SIZE, BYTE], ! Translated name
; 0769 2 RSL_DESC : BLOCK [8, BYTE], ! Descriptor for translated name
; 0770 2
; 0771 2 NODE_ITEM_LIST : FIELD(ITEM_FIELDS) ITEM_LIST [2] PRESET ! Node name
; 0772 2 ([0, ITEM_BFR_LENGTH ] = MAX_NODE_NAME, ! Translation
; 0773 2 [0, ITEM_ITEM_CODE ] = LNM$_STRING, ! Item list
; 0774 2 [0, ITEM_BFR_ADDRESS ] = NODE_NAME, ! to xlate
; 0775 2 [0, ITEM_RTN_LENGTH ] = NODE_DESC[DSC$W_LENGTH]), ! SYS$NODE
; 0776 2
; 0777 2 ITMLST : ITEM_LIST [1] FIELD (ITEM_FIELDS) PRESET
; 0778 2 ([0, ITEM_ITEM_CODE ] = JPI$_TERMINAL, ! Get terminal name
; 0779 2 [0, ITEM_BFR_LENGTH ] = TERM_NAME_SIZE - 1, ! Max name size
; 0780 2 [0, ITEM_BFR_ADDRESS ] = JOB_TERM_NAME + 1, ! Place to store it
; 0781 2 [0, ITEM_RTN_LENGTH ] = RSL_LENGTH); ! Resulting length
; 0782 2
; 0783 2 !
; 0784 2 ! Initialize session log file descriptor
; 0785 2 !
; 0786 2 SESSION_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 0787 2 SESSION_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 0788 2 SESSION_DESC [DSC$W_LENGTH] = 0;
; 0789 2 SESSION_DESC [DSC$A_POINTER] = SESSION_NAME;
; 0790 2 !
; 0791 2 ! Get system node name (if any)
; 0792 2 !
; 0793 2 NODE_DESC [DSC$W_LENGTH] = MAX_NODE_NAME;
; P 0794 2 STATUS = $TRNLNM(ATTR = %REF(LNM$M_CASE_BLIND),
; P 0795 2 TABNAM = %ASCID 'LNM$SYSTEM', LOGNAM = %ASCID 'SYS$NODE',
; 0796 2 ITMLST = NODE_ITEM_LIST);
; 0797 2
; 0798 2 COUNTER = 64; ! Max number of translations
; 0799 2
; 0800 2 WHILE .STATUS ! Translation fails
; 0801 2 AND .COUNTER GTR 0 ! or we do too many translations
; 0802 2 DO
; 0803 3 BEGIN
; P 0804 3 STATUS = $TRNLNM(ATTR = %REF(LNM$M_CASE_BLIND),
; P 0805 3 TABNAM = %ASCID 'LNM$SYSTEM', LOGNAM = NODE_DESC,
; 0806 3 ITMLST = NODE_ITEM_LIST);
; 0807 3 COUNTER = .COUNTER - 1;
; 0808 2 END;
; 0809 2 !
; 0810 2 ! If call failed, we don't really know the node name
; 0811 2 !
; 0812 3 IF (NOT .STATUS) OR (NODE_NAME[0] EQL 0)
; 0813 2 THEN
; 0814 2 NODE_DESC[DSC$W_LENGTH] = 0;
; 0815 2 !
; 0816 2 ! Get controlling terminal
; 0817 2 !
; 0818 2 JOB_TERM_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 0819 2 JOB_TERM_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 0820 2 JOB_TERM_DESC [DSC$W_LENGTH] = TERM_NAME_SIZE;
; 0821 2 JOB_TERM_DESC [DSC$A_POINTER] = JOB_TERM_NAME;
; 0822 2 JOB_TERM_NAME [0] = %C'_';
; 0823 2
; 0824 2 STATUS = $GETJPIW (ITMLST = ITMLST);
; 0825 2 JOB_TERM_DESC [DSC$W_LENGTH] = .RSL_LENGTH + 1;
; 0826 2
; 0827 2 IF NOT .STATUS OR .RSL_LENGTH EQL 0 THEN JOB_TERM_DESC [DSC$W_LENGTH] = 0;
; 0828 2
; 0829 2 !
; 0830 2 ! Open the output device and command device (if they are terminals)
; 0831 2 !
; 0832 2 SYS_OUTPUT_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 0833 2 SYS_OUTPUT_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 0834 2 SYS_OUTPUT_DESC [DSC$W_LENGTH] = TERM_NAME_SIZE;
; 0835 2 SYS_OUTPUT_DESC [DSC$A_POINTER] = SYS_OUTPUT_NAME;
; 0836 2 STATUS = GET_DEV_CHAR (%ASCID'SYS$OUTPUT', SYS_OUTPUT_DESC, DEV_TYPE);
; 0837 2
; 0838 2 IF .STATUS AND .DEV_TYPE EQL DC$_TERM
; 0839 2 THEN
; 0840 3 BEGIN
; 0841 3 STATUS = $ASSIGN (CHAN = SYS_OUTPUT_CHAN, DEVNAM = SYS_OUTPUT_DESC);
; 0842 3
; 0843 3 IF .STATUS THEN SYS_OUTPUT_OPEN = TRUE;
; 0844 3
; 0845 2 END;
; 0846 2
; 0847 2 SYS_COMMAND_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 0848 2 SYS_COMMAND_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 0849 2 SYS_COMMAND_DESC [DSC$W_LENGTH] = TERM_NAME_SIZE;
; 0850 2 SYS_COMMAND_DESC [DSC$A_POINTER] = SYS_COMMAND_NAME;
; 0851 2 STATUS = GET_DEV_CHAR (%ASCID'SYS$COMMAND', SYS_COMMAND_DESC, DEV_TYPE);
; 0852 2
; 0853 2 IF .STATUS AND .DEV_TYPE EQL DC$_TERM
; 0854 2 THEN
; 0855 3 BEGIN
; 0856 3 STATUS = $ASSIGN (CHAN = SYS_COMMAND_CHAN, DEVNAM = SYS_COMMAND_DESC);
; 0857 3
; 0858 3 IF .STATUS THEN SYS_COMMAND_OPEN = TRUE;
; 0859 3
; 0860 2 END;
; 0861 2 !
; 0862 2 ! Set up the terminal name descriptor
; 0863 2 !
; 0864 2 TERM_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 0865 2 TERM_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 0866 2 TERM_DESC [DSC$A_POINTER] = TERM_NAME;
; 0867 2 TERM_DESC [DSC$W_LENGTH] = TERM_NAME_SIZE;
; 0868 2 !
; 0869 2 ! If KER$COMM is a terminal, then use it as the default.
; 0870 2 !
; 0871 2 STATUS = GET_DEV_CHAR (%ASCID'KER$COMM', TERM_DESC, DEV_TYPE);
; 0872 2
; 0873 2 IF NOT .STATUS OR .DEV_TYPE NEQ DC$_TERM
; 0874 2 THEN
; 0875 3 BEGIN
; 0876 3 !
; 0877 3 ! If KER$COMM is not a terminal (or is not anything), try SYS$INPUT.
; 0878 3 !
; 0879 3 TERM_DESC [DSC$W_LENGTH] = TERM_NAME_SIZE;
; 0880 3 STATUS = GET_DEV_CHAR (%ASCID'SYS$INPUT', TERM_DESC, DEV_TYPE);
; 0881 3
; 0882 3 IF NOT .STATUS OR .DEV_TYPE NEQ DC$_TERM
; 0883 3 THEN
; 0884 4 BEGIN
; 0885 4 !
; 0886 4 ! If SYS$INPUT is not a terminal, check out SYS$OUTPUT. We will already have
; 0887 4 ! it open if it is a terminal.
; 0888 4 !
; 0889 4
; 0890 4 IF .SYS_OUTPUT_OPEN
; 0891 4 THEN
; 0892 5 BEGIN
; 0893 5 CH$COPY (.SYS_OUTPUT_DESC [DSC$W_LENGTH],
; 0894 5 CH$PTR (.SYS_OUTPUT_DESC [DSC$A_POINTER]), CHR_NUL, TERM_NAME_SIZE,
; 0895 5 CH$PTR (TERM_NAME));
; 0896 5 TERM_DESC [DSC$W_LENGTH] = .SYS_OUTPUT_DESC [DSC$W_LENGTH];
; 0897 5 END
; 0898 4 ELSE
; 0899 5 BEGIN
; 0900 5 !
; 0901 5 ! SYS$OUTPUT is not a terminal. Next we try SYS$COMMAND. It should already
; 0902 5 ! be open if it is a valid terminal.
; 0903 5 !
; 0904 5
; 0905 5 IF .SYS_COMMAND_OPEN
; 0906 5 THEN
; 0907 6 BEGIN
; 0908 6 CH$COPY (.SYS_COMMAND_DESC [DSC$W_LENGTH],
; 0909 6 CH$PTR (.SYS_COMMAND_DESC [DSC$A_POINTER]), CHR_NUL, TERM_NAME_SIZE,
; 0910 6 CH$PTR (TERM_NAME));
; 0911 6 TERM_DESC [DSC$W_LENGTH] = .SYS_OUTPUT_DESC [DSC$W_LENGTH];
; 0912 6 END
; 0913 5 ELSE
; 0914 6 BEGIN
; 0915 6 !
; 0916 6 ! Here we start to get desparate. Nothing we have tried so far was a terminal.
; 0917 6 ! Try the terminal which is controlling the job which owns this process.
; 0918 6 !
; 0919 6 TERM_DESC [DSC$W_LENGTH] = .JOB_TERM_DESC [DSC$W_LENGTH];
; 0920 6 CH$COPY (.JOB_TERM_DESC [DSC$W_LENGTH],
; 0921 6 CH$PTR (.JOB_TERM_DESC [DSC$A_POINTER]), CHR_NUL, TERM_NAME_SIZE,
; 0922 6 CH$PTR (TERM_NAME));
; 0923 5 END;
; 0924 5
; 0925 4 END;
; 0926 4
; 0927 3 END;
; 0928 3
; 0929 2 END;
; 0930 2
; 0931 2 !
; 0932 2 ! At this point TERM_DESC should be set up with something resembling
; 0933 2 ! the phyiscal name of a terminal (unless this is a detached process).
; 0934 2 ! We can now assign a channel to the terminal and tell the user what the
; 0935 2 ! default device is.
; 0936 2 !
; 0937 2 CH$WCHAR (CHR_NUL, CH$PTR (TERM_NAME, .TERM_DESC [DSC$W_LENGTH]));
; 0938 2 status = asn_wth_mbx(term_desc, %REF(100), %REF(100), term_chan, mbx_chan);
; 0939 2 TERM_DUMP (UPLIT BYTE(CHR_CRT, CHR_LFD), 2);
; 0940 2
; 0941 2 IF .STATUS
; 0942 2 THEN
; 0943 3 BEGIN
; 0944 3
; 0945 3 BIND
; 0946 3 DEFTRM_TEXT = %ASCID'Default terminal for transfers is: ';
; 0947 3
; 0948 3 MAP
; 0949 3 DEFTRM_TEXT : BLOCK [8, BYTE];
; 0950 3
; 0951 3 TERM_OPEN_FLAG = TRUE;
; 0952 3 TERM_DUMP (.DEFTRM_TEXT [DSC$A_POINTER], .DEFTRM_TEXT [DSC$W_LENGTH]);
; 0953 3 TERM_DUMP (TERM_NAME, .TERM_DESC [DSC$W_LENGTH]);
; 0954 3 IF .mbx_chan NEQ 0 THEN Term_Hangup();
; 0955 3 END
; 0956 2 ELSE
; 0957 3 BEGIN
; 0958 3
; 0959 3 BIND
; 0960 3 NODEFTRM_TEXT = %ASCID'No default terminal line for transfers';
; 0961 3
; 0962 3 MAP
; 0963 3 NODEFTRM_TEXT : BLOCK [8, BYTE];
; 0964 3
; 0965 3 TERM_OPEN_FLAG = FALSE;
; 0966 3 TERM_DESC [DSC$W_LENGTH] = 0;
; 0967 3 TERM_DUMP (.NODEFTRM_TEXT [DSC$A_POINTER], .NODEFTRM_TEXT [DSC$W_LENGTH])
; 0968 2 END;
; 0969 2
; 0970 2 TERM_DUMP (UPLIT BYTE(CHR_CRT, CHR_LFD), 2);
; 0971 2 !
; 0972 2 ! Initialize the flags
; 0973 2 !
; 0974 2 TERM_FLAG = FALSE;
; 0975 2 TRANS_DELAY = '0'; ! init transmit delay to .0 seconds
; 0976 2 !
; 0977 2 ! If we really did get the terminal open, then determine what type of
; 0978 2 ! parity it uses, and default to using that parity.
; 0979 2 !
; 0980 2
; 0981 2 IF .TERM_OPEN_FLAG
; 0982 2 THEN
; 0983 3 BEGIN
; P 0984 3 STATUS = $QIOW (CHAN = .TERM_CHAN, FUNC = IO$_SENSEMODE, P1 = OLD_TERM_CHAR,
; 0985 3 P2 = TC$_CHAR_LENGTH, IOSB = OLD_PARITY);
; 0986 3
; 0987 3 IF .STATUS
; 0988 3 THEN
; 0989 3
; 0990 3 IF (.OLD_PARITY [6, 0, 8, 0] AND TT$M_PARITY) NEQ 0
; 0991 3 THEN
; 0992 3
; 0993 3 IF (.OLD_PARITY [6, 0, 8, 0] AND TT$M_ODD) NEQ 0
; 0994 3 THEN
; 0995 3 PARITY_TYPE = PR_ODD
; 0996 3 ELSE
; 0997 3 PARITY_TYPE = PR_EVEN
; 0998 3
; 0999 3 ELSE
; 1000 3 PARITY_TYPE = PR_NONE;
; 1001 3
; 1002 2 END;
; 1003 2
; 1004 1 END; ! End of TERM_INIT
.TITLE KERTRM
.IDENT \3.3.120\
.PSECT $OWN$,NOEXE,2
;FORCE_ABORT
U.1: .BLKB 4 ; 00000
;FORCE_TIMEOUT
U.2: .BLKB 4 ; 00004
;TERM_FIRST_TIME
U.3: .BLKB 4 ; 00008
;TERM_CHAN
U.4: .BLKB 4 ; 0000C
;MBX_CHAN
U.5: .LONG 0 ; 00000000 00010
;NEW_MBX_CHAN
U.6: .LONG 0 ; 00000000 00014
;CONS_CHAN
U.7: .BLKB 4 ; 00018
;SYS_OUTPUT_CHAN
U.8: .BLKB 4 ; 0001C
;SYS_OUTPUT_OPEN
U.9: .BLKB 4 ; 00020
;SYS_OUTPUT_NAME
U.10: .BLKB 255 ; 00024
.BLKB 1 ; 00123
;SYS_OUTPUT_DESC
U.11: .BLKB 8 ; 00124
;SYS_COMMAND_CHAN
U.12: .BLKB 4 ; 0012C
;SYS_COMMAND_OPEN
U.13: .BLKB 4 ; 00130
;SYS_COMMAND_NAME
U.14: .BLKB 255 ; 00134
.BLKB 1 ; 00233
;SYS_COMMAND_DESC
U.15: .BLKB 8 ; 00234
;TERM_NAME
U.16: .BLKB 255 ; 0023C
.BLKB 1 ; 0033B
;JOB_TERM_NAME
U.17: .BLKB 255 ; 0033C
.BLKB 1 ; 0043B
;TERM_OPEN_FLAG
U.18: .BLKB 4 ; 0043C
;SESSION_FAB
U.19: .BLKB 80 ; 00440
;SESSION_RAB
U.20: .BLKB 68 ; 00490
;SESSION_NAME
U.21: .BLKB 132 ; 004D4
;SESSION_OPEN
U.22: .BLKB 4 ; 00558
;SESSION_LOGGING
U.23: .BLKB 4 ; 0055C
;DEBUG_FAB
U.24: .BLKB 80 ; 00560
;DEBUG_RAB
U.25: .BLKB 68 ; 005B0
;DEBUG_NAME
U.26: .BLKB 132 ; 005F4
;DEBUG_REDIRECTED
U.27: .BLKB 4 ; 00678
;NODE_NAME
U.28: .BLKB 255 ; 0067C
.BLKB 1 ; 0077B
;IO_STATUS
U.29: .BLKB 8 ; 0077C
;RECV_BUFFER
U.30: .BLKB 1024 ; 00784
;OLD_PARITY
U.31: .BLKB 8 ; 00B84
;OLD_TERM_CHAR
U.32: .BLKB 12 ; 00B8C
;NEW_TERM_CHAR
U.33: .BLKB 12 ; 00B98
.PSECT $GLOBAL$,NOEXE,2
NODE_DESC::
.WORD 255 ; 00FF 00000
.BYTE 14, 1 ; 01 0E 00002
.ADDRESS U.28 ; 00000000' 00004
DEBUG_DESC::
.WORD 0 ; 0000 00008
.BYTE 14, 1 ; 01 0E 0000A
.ADDRESS U.26 ; 00000000' 0000C
SESSION_DESC::
.BLKB 8 ; 00010
TERM_DESC::
.BLKB 8 ; 00018
JOB_TERM_DESC::
.BLKB 8 ; 00020
TRANS_DELAY::
.BLKB 4 ; 00028
TRANS_ECHO_FLAG::
.BLKB 4 ; 0002C
TERM_FLAG::
.BLKB 4 ; 00030
SEND_BREAK_TTY_FLAG::
.BLKB 4 ; 00034
.PSECT $PLIT$,NOWRT,NOEXE,2
P.AAA: .WORD 255, 2 ; 0002 00FF 00000
.ADDRESS U.28, NODE_DESC ; 00000000' 00000000' 00004
P.AAB: .WORD 254, 797 ; 031D 00FE 0000C
.ADDRESS U.17+1 ; 00000000' 00010
.LONG 0 ; 00000000 00014
P.AAD: .ASCII \LNM$SYSTEM\<0><0> ; 54 53 59 53 24 4D 4E 4C 00018
; 00 00 4D 45 00020
P.AAC: .LONG 17694730 ; 010E000A 00024
.ADDRESS P.AAD ; 00000000' 00028
P.AAF: .ASCII \SYS$NODE\ ; 45 44 4F 4E 24 53 59 53 0002C
P.AAE: .LONG 17694728 ; 010E0008 00034
.ADDRESS P.AAF ; 00000000' 00038
P.AAH: .ASCII \LNM$SYSTEM\<0><0> ; 54 53 59 53 24 4D 4E 4C 0003C
; 00 00 4D 45 00044
P.AAG: .LONG 17694730 ; 010E000A 00048
.ADDRESS P.AAH ; 00000000' 0004C
P.AAJ: .ASCII \SYS$OUTPUT\<0><0> ; 50 54 55 4F 24 53 59 53 00050
; 00 00 54 55 00058
P.AAI: .LONG 17694730 ; 010E000A 0005C
.ADDRESS P.AAJ ; 00000000' 00060
P.AAL: .ASCII \SYS$COMMAND\<0> ; 4D 4D 4F 43 24 53 59 53 00064
; 00 44 4E 41 0006C
P.AAK: .LONG 17694731 ; 010E000B 00070
.ADDRESS P.AAL ; 00000000' 00074
P.AAN: .ASCII \KER$COMM\ ; 4D 4D 4F 43 24 52 45 4B 00078
P.AAM: .LONG 17694728 ; 010E0008 00080
.ADDRESS P.AAN ; 00000000' 00084
P.AAP: .ASCII \SYS$INPUT\<0><0><0> ; 55 50 4E 49 24 53 59 53 00088
; 00 00 00 54 00090
P.AAO: .LONG 17694729 ; 010E0009 00094
.ADDRESS P.AAP ; 00000000' 00098
P.AAQ: .BYTE 13, 10 ; 0A 0D 0009C
.BLKB 2 ; 0009E
P.AAS: .ASCII \Default terminal for transfers is: \<0>
; 20 74 6C 75 61 66 65 44 000A0
; 6C 61 6E 69 6D 72 65 74 000A8
; 61 72 74 20 72 6F 66 20 000B0
; 69 20 73 72 65 66 73 6E 000B8
; 00 20 3A 73 000C0
P.AAR: .LONG 17694755 ; 010E0023 000C4
.ADDRESS P.AAS ; 00000000' 000C8
P.AAU: .ASCII \No default terminal line for transfers\<0><0>
; 75 61 66 65 64 20 6F 4E 000CC
; 69 6D 72 65 74 20 74 6C 000D4
; 65 6E 69 6C 20 6C 61 6E 000DC
; 61 72 74 20 72 6F 66 20 000E4
; 00 00 73 72 65 66 73 6E 000EC
P.AAT: .LONG 17694758 ; 010E0026 000F4
.ADDRESS P.AAU ; 00000000' 000F8
P.AAV: .BYTE 13, 10 ; 0A 0D 000FC
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
U.52= P.AAR
U.54= P.AAT
.EXTRN LIB$ASN_WTH_MBX, LIB$GETJPI, LIB$GETDVI, LIB$PUT_SCREEN, LIB$PUT_OUTPUT, LIB$EMUL
.EXTRN LIB$ADDX, LIB$SIGNAL, LIB$WAIT, PARITY_TYPE, ECHO_FLAG, IBM_CHAR, RCV_EOL, SEND_TIMEOUT
.EXTRN CONNECT_FLAG, ESCAPE_CHR, SYS$TRNLNM, SYS$GETJPIW, SYS$ASSIGN, SYS$QIOW
.PSECT $CODE$,NOWRT,2
.ENTRY TERM_INIT, ^M<R2,R3,R4,R5,R6,R7,-;TERM_INIT, Save R2,R3,R4,R5,R6,R7,- 0723 0FFC 00000
R8,R9,R10,R11> ;R8,R9,R10,R11
MOVAB G^U.43, R11 ;U.43, R11 5B 00000000V 00 9E 00002
MOVAB G^P.AAA, R10 ;P.AAA, R10 5A 00000000' 00 9E 00009
MOVAB G^TERM_DESC, R9 ;TERM_DESC, R9 59 00000000' 00 9E 00010
MOVAB G^U.16, R8 ;U.16, R8 58 00000000' 00 9E 00017
MOVAB -340(SP), SP ;-340(SP), SP 5E FEAC CE 9E 0001E
MOVC5 #12, (R10), #0, #36, 36(SP) ;#12, P.AAA, #0, #36, NODE_ITEM_LIST 0775 6A 0C 2C 00023
; 24 00 00026
; 24 AE 00028
MOVC5 #12, 12(R10), #0, #24, 12(SP) ;#12, P.AAB, #0, #24, ITMLST 0781 0C AA 0C 2C 0002A
; 18 00 0002E
; 0C AE 00030
MOVAB -4(FP), 20(SP) ;RSL_LENGTH, ITMLST+8 14 AE FC AD 9E 00032
MOVL #17694720, -8(R9) ;#17694720, SESSION_DESC 0788 F8 A9 010E0000 8F D0 00037
MOVAB 664(R8), -4(R9) ;SESSION_NAME, SESSION_DESC+4 0789 FC A9 0298 C8 9E 0003F
MOVZBW #255, -24(R9) ;#255, NODE_DESC 0793 E8 A9 FF 8F 9B 00045
PUSHAB 36(SP) ;NODE_ITEM_LIST 0796 24 AE 9F 0004A
CLRL -(SP) ;-(SP) 7E D4 0004D
PUSHAB 52(R10) ;P.AAE 34 AA 9F 0004F
PUSHAB 36(R10) ;P.AAC 24 AA 9F 00052
MOVL #33554432, 20(SP) ;#33554432, 20(SP) 14 AE 02000000 8F D0 00055
PUSHAB 20(SP) ;20(SP) 14 AE 9F 0005D
CALLS #5, G^SYS$TRNLNM ;#5, SYS$TRNLNM 00000000G 00 05 FB 00060
MOVL R0, R7 ;R0, STATUS 57 50 D0 00067
MOVZBL #64, R2 ;#64, COUNTER 0798 52 40 8F 9A 0006A
1$: BLBC R7, 3$ ;STATUS, 3$ 0800 30 57 E9 0006E
BLEQ 2$ ;2$ 0801 24 15 00071
PUSHAB 36(SP) ;NODE_ITEM_LIST 0806 24 AE 9F 00073
CLRL -(SP) ;-(SP) 7E D4 00076
PUSHAB -24(R9) ;NODE_DESC E8 A9 9F 00078
PUSHAB 72(R10) ;P.AAG 48 AA 9F 0007B
MOVL #33554432, 20(SP) ;#33554432, 20(SP) 14 AE 02000000 8F D0 0007E
PUSHAB 20(SP) ;20(SP) 14 AE 9F 00086
CALLS #5, G^SYS$TRNLNM ;#5, SYS$TRNLNM 00000000G 00 05 FB 00089
MOVL R0, R7 ;R0, STATUS 57 50 D0 00090
DECL R2 ;COUNTER 0807 52 D7 00093
BRB 1$ ;1$ D7 11 00095
2$: BLBC R7, 3$ ;STATUS, 3$ 0812 07 57 E9 00097
MOVAB 1088(R8), R0 ;NODE_NAME, R0 50 0440 C8 9E 0009A
BNEQ 4$ ;4$ 03 12 0009F
3$: CLRW -24(R9) ;NODE_DESC 0814 E8 A9 B4 000A1
4$: MOVL #17694975, 8(R9) ;#17694975, JOB_TERM_DESC 0820 08 A9 010E00FF 8F D0 000A4
MOVAB 256(R8), 12(R9) ;JOB_TERM_NAME, JOB_TERM_DESC+4 0821 0C A9 0100 C8 9E 000AC
MOVB #95, 256(R8) ;#95, JOB_TERM_NAME 0822 0100 C8 5F 8F 90 000B2
CLRQ -(SP) ;-(SP) 0824 7E 7C 000B8
CLRL -(SP) ;-(SP) 7E D4 000BA
PUSHAB 24(SP) ;ITMLST 18 AE 9F 000BC
CLRQ -(SP) ;-(SP) 7E 7C 000BF
CLRL -(SP) ;-(SP) 7E D4 000C1
CALLS #7, G^SYS$GETJPIW ;#7, SYS$GETJPIW 00000000G 00 07 FB 000C3
MOVL R0, R7 ;R0, STATUS 57 50 D0 000CA
ADDW3 #1, -4(FP), 8(R9) ;#1, RSL_LENGTH, JOB_TERM_DESC 0825 FC AD 01 A1 000CD
; 08 A9 000D1
BLBC R7, 5$ ;STATUS, 5$ 0827 05 57 E9 000D3
TSTL -4(FP) ;RSL_LENGTH FC AD D5 000D6
BNEQ 6$ ;6$ 03 12 000D9
5$: CLRW 8(R9) ;JOB_TERM_DESC 08 A9 B4 000DB
6$: MOVL #17694975, -280(R8) ;#17694975, SYS_OUTPUT_DESC 0834 FEE8 C8 010E00FF 8F D0 000DE
MOVAB -536(R8), -276(R8) ;SYS_OUTPUT_NAME, SYS_OUTPUT_DESC+4 0835 FEEC C8 FDE8 C8 9E 000E7
PUSHAB 8(SP) ;DEV_TYPE 0836 08 AE 9F 000EE
PUSHAB -280(R8) ;SYS_OUTPUT_DESC FEE8 C8 9F 000F1
PUSHAB 92(R10) ;P.AAI 5C AA 9F 000F5
CALLS #3, G^U.44 ;#3, U.44 00000000V 00 03 FB 000F8
MOVL R0, R7 ;R0, STATUS 57 50 D0 000FF
BLBC R7, 7$ ;STATUS, 7$ 0838 26 57 E9 00102
CMPL 8(SP), #66 ;DEV_TYPE, #66 00000042 8F 08 AE D1 00105
BNEQ 7$ ;7$ 1C 12 0010D
CLRQ -(SP) ;-(SP) 0841 7E 7C 0010F
PUSHAB -544(R8) ;SYS_OUTPUT_CHAN FDE0 C8 9F 00111
PUSHAB -280(R8) ;SYS_OUTPUT_DESC FEE8 C8 9F 00115
CALLS #4, G^SYS$ASSIGN ;#4, SYS$ASSIGN 00000000G 00 04 FB 00119
MOVL R0, R7 ;R0, STATUS 57 50 D0 00120
BLBC R7, 7$ ;STATUS, 7$ 0843 05 57 E9 00123
MOVL #1, -540(R8) ;#1, SYS_OUTPUT_OPEN FDE4 C8 01 D0 00126
7$: MOVL #17694975, -8(R8) ;#17694975, SYS_COMMAND_DESC 0849 F8 A8 010E00FF 8F D0 0012B
MOVAB -264(R8), -4(R8) ;SYS_COMMAND_NAME, - 0850 FC A8 FEF8 C8 9E 00133
;SYS_COMMAND_DESC+4
PUSHAB 8(SP) ;DEV_TYPE 0851 08 AE 9F 00139
PUSHAB -8(R8) ;SYS_COMMAND_DESC F8 A8 9F 0013C
PUSHAB 112(R10) ;P.AAK 70 AA 9F 0013F
CALLS #3, G^U.44 ;#3, U.44 00000000V 00 03 FB 00142
MOVL R0, R7 ;R0, STATUS 57 50 D0 00149
BLBC R7, 8$ ;STATUS, 8$ 0853 25 57 E9 0014C
CMPL 8(SP), #66 ;DEV_TYPE, #66 00000042 8F 08 AE D1 0014F
BNEQ 8$ ;8$ 1B 12 00157
CLRQ -(SP) ;-(SP) 0856 7E 7C 00159
PUSHAB -272(R8) ;SYS_COMMAND_CHAN FEF0 C8 9F 0015B
PUSHAB -8(R8) ;SYS_COMMAND_DESC F8 A8 9F 0015F
CALLS #4, G^SYS$ASSIGN ;#4, SYS$ASSIGN 00000000G 00 04 FB 00162
MOVL R0, R7 ;R0, STATUS 57 50 D0 00169
BLBC R7, 8$ ;STATUS, 8$ 0858 05 57 E9 0016C
MOVL #1, -268(R8) ;#1, SYS_COMMAND_OPEN FEF4 C8 01 D0 0016F
8$: MOVL #17694975, (R9) ;#17694975, TERM_DESC 0867 69 010E00FF 8F D0 00174
MOVAB (R8), 4(R9) ;TERM_NAME, TERM_DESC+4 0866 04 A9 68 9E 0017B
PUSHAB 8(SP) ;DEV_TYPE 0871 08 AE 9F 0017F
PUSHL R9 ;R9 59 DD 00182
PUSHAB 128(R10) ;P.AAM 0080 CA 9F 00184
CALLS #3, G^U.44 ;#3, U.44 00000000V 00 03 FB 00188
MOVL R0, R7 ;R0, STATUS 57 50 D0 0018F
BLBC R7, 9$ ;STATUS, 9$ 0873 0A 57 E9 00192
CMPL 8(SP), #66 ;DEV_TYPE, #66 00000042 8F 08 AE D1 00195
BEQL 13$ ;13$ 6C 13 0019D
9$: MOVZBW #255, (R9) ;#255, TERM_DESC 0879 69 FF 8F 9B 0019F
PUSHAB 8(SP) ;DEV_TYPE 0880 08 AE 9F 001A3
PUSHL R9 ;R9 59 DD 001A6
PUSHAB 148(R10) ;P.AAO 0094 CA 9F 001A8
CALLS #3, G^U.44 ;#3, U.44 00000000V 00 03 FB 001AC
MOVL R0, R7 ;R0, STATUS 57 50 D0 001B3
BLBC R7, 10$ ;STATUS, 10$ 0882 0A 57 E9 001B6
CMPL 8(SP), #66 ;DEV_TYPE, #66 00000042 8F 08 AE D1 001B9
BEQL 13$ ;13$ 48 13 001C1
10$: BLBC -540(R8), 11$ ;SYS_OUTPUT_OPEN, 11$ 0890 17 FDE4 C8 E9 001C3
MOVZWL -280(R8), R6 ;SYS_OUTPUT_DESC, R6 0893 56 FEE8 C8 3C 001C8
MOVL -276(R8), R0 ;SYS_OUTPUT_DESC+4, R0 0894 50 FEEC C8 D0 001CD
MOVC5 R6, (R0), #0, #255, (R8) ;R6, (R0), #0, #255, TERM_NAME 0895 60 56 2C 001D2
; 00FF 8F 00 001D5
; 68 001D9
MOVW R6, (R9) ;R6, TERM_DESC 0896 69 56 B0 001DA
BRB 13$ ;13$ 2C 11 001DD
11$: BLBC -268(R8), 12$ ;SYS_COMMAND_OPEN, 12$ 0905 14 FEF4 C8 E9 001DF
MOVL -4(R8), R0 ;SYS_COMMAND_DESC+4, R0 0909 50 FC A8 D0 001E4
MOVC5 -8(R8), (R0), #0, #255, (R8) ;SYS_COMMAND_DESC, (R0), #0, #255, - 0910 60 F8 A8 2C 001E8
;TERM_NAME 00FF 8F 00 001EC
; 68 001F0
MOVW -280(R8), (R9) ;SYS_OUTPUT_DESC, TERM_DESC 0911 69 FEE8 C8 B0 001F1
BRB 13$ ;13$ 13 11 001F6
12$: MOVZWL 8(R9), R0 ;JOB_TERM_DESC, R0 0919 50 08 A9 3C 001F8
MOVW R0, (R9) ;R0, TERM_DESC 69 50 B0 001FC
MOVL 12(R9), R1 ;JOB_TERM_DESC+4, R1 0921 51 0C A9 D0 001FF
MOVC5 R0, (R1), #0, #255, (R8) ;R0, (R1), #0, #255, TERM_NAME 0922 61 50 2C 00203
; 00FF 8F 00 00206
; 68 0020A
13$: MOVZWL (R9), R0 ;TERM_DESC, R0 0937 50 69 3C 0020B
CLRB (R8)[R0] ;TERM_NAME[R0] 6840 94 0020E
PUSHAB -556(R8) ;MBX_CHAN 0938 FDD4 C8 9F 00211
PUSHAB -560(R8) ;TERM_CHAN FDD0 C8 9F 00215
MOVZBL #100, 12(SP) ;#100, 12(SP) 0C AE 64 8F 9A 00219
PUSHAB 12(SP) ;12(SP) 0C AE 9F 0021E
MOVZBL #100, 12(SP) ;#100, 12(SP) 0C AE 64 8F 9A 00221
PUSHAB 12(SP) ;12(SP) 0C AE 9F 00226
PUSHL R9 ;R9 59 DD 00229
CALLS #5, G^U.47 ;#5, U.47 00000000V 00 05 FB 0022B
MOVL R0, R7 ;R0, STATUS 57 50 D0 00232
PUSHL #2 ;#2 0939 02 DD 00235
PUSHAB 156(R10) ;P.AAQ 009C CA 9F 00237
CALLS #2, (R11) ;#2, TERM_DUMP 6B 02 FB 0023B
BLBC R7, 14$ ;STATUS, 14$ 0941 28 57 E9 0023E
MOVL #1, 512(R8) ;#1, TERM_OPEN_FLAG 0951 0200 C8 01 D0 00241
MOVZWL 196(R10), -(SP) ;DEFTRM_TEXT, -(SP) 0952 7E 00C4 CA 3C 00246
PUSHL 200(R10) ;DEFTRM_TEXT+4 00C8 CA DD 0024B
CALLS #2, (R11) ;#2, TERM_DUMP 6B 02 FB 0024F
MOVZWL (R9), -(SP) ;TERM_DESC, -(SP) 0953 7E 69 3C 00252
PUSHL R8 ;R8 58 DD 00255
CALLS #2, (R11) ;#2, TERM_DUMP 6B 02 FB 00257
TSTL -556(R8) ;MBX_CHAN 0954 FDD4 C8 D5 0025A
BEQL 15$ ;15$ 1B 13 0025E
CALLS #0, G^U.45 ;#0, U.45 00000000V 00 00 FB 00260
BRB 15$ ;15$ 12 11 00267
14$: CLRL 512(R8) ;TERM_OPEN_FLAG 0965 0200 C8 D4 00269
CLRW (R9) ;TERM_DESC 0966 69 B4 0026D
MOVZWL 244(R10), -(SP) ;NODEFTRM_TEXT, -(SP) 0967 7E 00F4 CA 3C 0026F
PUSHL 248(R10) ;NODEFTRM_TEXT+4 00F8 CA DD 00274
CALLS #2, (R11) ;#2, TERM_DUMP 6B 02 FB 00278
15$: PUSHL #2 ;#2 0970 02 DD 0027B
PUSHAB 252(R10) ;P.AAV 00FC CA 9F 0027D
CALLS #2, (R11) ;#2, TERM_DUMP 6B 02 FB 00281
CLRL 24(R9) ;TERM_FLAG 0974 18 A9 D4 00284
MOVL #48, 16(R9) ;#48, TRANS_DELAY 0975 10 A9 30 D0 00287
BLBC 512(R8), 18$ ;TERM_OPEN_FLAG, 18$ 0981 48 0200 C8 E9 0028B
CLRQ -(SP) ;-(SP) 0985 7E 7C 00290
CLRQ -(SP) ;-(SP) 7E 7C 00292
PUSHL #12 ;#12 0C DD 00294
PUSHAB 2384(R8) ;OLD_TERM_CHAR 0950 C8 9F 00296
CLRQ -(SP) ;-(SP) 7E 7C 0029A
PUSHAB 2376(R8) ;OLD_PARITY 0948 C8 9F 0029C
PUSHL #39 ;#39 27 DD 002A0
PUSHL -560(R8) ;TERM_CHAN FDD0 C8 DD 002A2
CLRL -(SP) ;-(SP) 7E D4 002A6
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 002A8
MOVL R0, R7 ;R0, STATUS 57 50 D0 002AF
BLBC R7, 18$ ;STATUS, 18$ 0987 23 57 E9 002B2
MOVZBL 2382(R8), R0 ;OLD_PARITY+6, R0 0990 50 094E C8 9A 002B5
BBC #6, R0, 17$ ;#6, R0, 17$ 50 06 E1 002BA
; 14 002BD
TSTB R0 ;R0 0993 50 95 002BE
BGEQ 16$ ;16$ 08 18 002C0
MOVL #3, G^PARITY_TYPE ;#3, PARITY_TYPE 0995 00000000G 00 03 D0 002C2
RET ; 04 002C9
16$: MOVL #2, G^PARITY_TYPE ;#2, PARITY_TYPE 0997 00000000G 00 02 D0 002CA
RET ; 04 002D1
17$: CLRL G^PARITY_TYPE ;PARITY_TYPE 1000 00000000G 00 D4 002D2
18$: RET ; 1004 04 002D8
; Routine Size: 729 bytes, Routine Base: $CODE$ + 0000
; 1005 1
; 1006 1
; 1007 1 %SBTTL 'ASN_WTH_MBX - Assign channel to device and mailbox.'
; 1008 1
; 1009 1 global ROUTINE ASN_WTH_MBX(p_device_name, p_message_size, p_buffer_quota,
; 1010 1 p_device_channel, p_mailbox_channel) =
; 1011 1
; 1012 1 !++
; 1013 1 ! FUNCTIONAL DESCRIPTION:
; 1014 1 !
; 1015 1 ! This routine will assign a channel to TERM_DESC and if TERM_DESC is not
; 1016 1 ! the users' terminal create and assign a mailbox to receive messages
; 1017 1 ! about the outgoing session's state (in particular we're watching for
; 1018 1 ! SS$_HANGUP).
; 1019 1 !
; 1020 1 ! CALLING SEQUENCE:
; 1021 1 !
; 1022 1 ! STATUS = ASN_WTH_MBX();
; 1023 1 !
; 1024 1 ! INPUT PARAMETERS:
; 1025 1 !
; 1026 1 ! None.
; 1027 1 !
; 1028 1 ! IMPLICIT INPUTS:
; 1029 1 !
; 1030 1 ! TERM_DESC
; 1031 1 !
; 1032 1 ! OUPTUT PARAMETERS:
; 1033 1 !
; 1034 1 ! None.
; 1035 1 !
; 1036 1 ! IMPLICIT OUTPUTS:
; 1037 1 !
; 1038 1 ! TERM_CHAN, MBX_CHAN
; 1039 1 !
; 1040 1 ! COMPLETION CODES:
; 1041 1 !
; 1042 1 ! Status of LIB$GETJPI, $ASN_WTH_MBX, and/or $ASSIGN
; 1043 1 !
; 1044 1 ! SIDE EFFECTS:
; 1045 1 !
; 1046 1 ! A channel is assigned to TERM_CHAN and conditionally a mailbox
; 1047 1 ! is created and a channel assigned to it.
; 1048 1 !
; 1049 1
; 1050 1
; 1051 2 BEGIN
; 1052 2
; 1053 2 BIND
; 1054 2 buffer_quota = .p_buffer_quota,
; 1055 2 device_channel = .p_device_channel,
; 1056 2 device_name = .p_device_name,
; 1057 2 message_size = .p_message_size,
; 1058 2 mailbox_channel = .p_mailbox_channel;
; 1059 2
; 1060 2 LOCAL
; 1061 2 master_pid,
; 1062 2 mode,
; 1063 2 sts,
; 1064 2 terminal_name : BLOCK [term_name_size, BYTE],
; 1065 2 terminal_desc : BLOCK [8, BYTE] PRESET
; 1066 2 ([DSC$B_CLASS] = DSC$K_CLASS_S,
; 1067 2 [DSC$B_DTYPE] = DSC$K_DTYPE_T,
; 1068 2 [DSC$W_LENGTH] = term_name_size,
; 1069 2 [DSC$A_POINTER] = terminal_name),
; 1070 2 temp_name : BLOCK [term_name_size, BYTE],
; 1071 2 temp_desc : BLOCK [8, BYTE] PRESET
; 1072 2 ([DSC$B_CLASS] = DSC$K_CLASS_S,
; 1073 2 [DSC$B_DTYPE] = DSC$K_DTYPE_T,
; 1074 2 [DSC$W_LENGTH] = term_name_size,
; 1075 2 [DSC$A_POINTER] = temp_name);
; 1076 2 MAP
; 1077 2 device_name : BLOCK [term_name_size, BYTE];
; 1078 2
; 1079 2 sts = LIB$GETJPI(%REF(JPI$_MODE),0,0,mode);
; 1080 2 if .mode NEQ JPI$K_INTERACTIVE
; 1081 2 THEN
; 1082 3 $ASSIGN(CHAN = device_channel, DEVNAM = device_name)
; 1083 2 ELSE
; 1084 3 BEGIN
; 1085 3
; 1086 3 sts = LIB$GETJPI(%REF(JPI$_MASTER_PID),0,0,master_pid,0,0);
; 1087 3 IF NOT .sts THEN RETURN .sts;
; 1088 3
; 1089 3 sts = LIB$GETJPI(%REF(JPI$_TERMINAL),
; 1090 3 master_pid,
; 1091 3 0,
; 1092 3 0,
; 1093 3 temp_desc,
; 1094 3 temp_desc);
; 1095 3 IF NOT .sts THEN RETURN .sts;
; 1096 4 IF .(.temp_desc[dsc$a_pointer] - 1 +
; 1097 3 .temp_desc[dsc$w_length])<0,8> NEQ %C ':'
; 1098 3 THEN
; 1099 4 BEGIN
; 1100 4 (.temp_desc[dsc$a_pointer] + .temp_desc[dsc$w_length])<0,8> = %C ':';
; 1101 4 temp_desc[dsc$w_length] = .temp_desc[dsc$w_length] + 1;
; 1102 3 END;
; 1103 3
; 1104 3 sts = LIB$GETDVI(%REF(DVI$_DEVNAM),
; 1105 3 0,
; 1106 3 temp_desc,
; 1107 3 0,
; 1108 3 terminal_desc,
; 1109 3 terminal_desc);
; 1110 3 IF NOT .sts THEN RETURN .sts;
; 1111 3
; 1112 3 IF CH$EQL(.terminal_desc[DSC$W_LENGTH], .terminal_desc[DSC$A_POINTER],
; 1113 3 .device_name[DSC$W_LENGTH], .device_name[DSC$A_POINTER],
; 1114 3 %C' ')
; 1115 3 THEN
; 1116 4 BEGIN
; 1117 4 IF .mailbox_channel NEQ 0 THEN $DASSGN(CHAN = .mailbox_channel);
; 1118 4 mailbox_channel = 0;
; 1119 5 $ASSIGN(CHAN = device_channel, DEVNAM = device_name)
; 1120 4 END
; 1121 3 ELSE
; 1122 3 LIB$ASN_WTH_MBX(device_name, message_size, buffer_quota,
; 1123 3 device_channel, mailbox_channel)
; 1124 3 END
; 1125 1 END;
.EXTRN SYS$DASSGN
U.47:
.ENTRY ASN_WTH_MBX, ^M<R2,R3,R4,R5> ;ASN_WTH_MBX, Save R2,R3,R4,R5 1009 003C 00000
MOVAB G^LIB$GETJPI, R5 ;LIB$GETJPI, R5 55 00000000G 00 9E 00002
MOVAB -540(SP), SP ;-540(SP), SP 5E FDE4 CE 9E 00009
MOVL 4(AP), R4 ;P_DEVICE_NAME, R4 1056 54 04 AC D0 0000E
MOVL #17694975, -264(FP) ;#17694975, TERMINAL_DESC 1069 FEF8 CD 010E00FF 8F D0 00012
MOVAB -256(FP), -260(FP) ;TERMINAL_NAME, TERMINAL_DESC+4 FEFC CD FF00 CD 9E 0001B
MOVL #17694975, 12(SP) ;#17694975, TEMP_DESC 1075 0C AE 010E00FF 8F D0 00022
MOVAB 20(SP), 16(SP) ;TEMP_NAME, TEMP_DESC+4 10 AE 14 AE 9E 0002A
PUSHAB 4(SP) ;MODE 1079 04 AE 9F 0002F
CLRQ -(SP) ;-(SP) 7E 7C 00032
MOVZWL #802, 12(SP) ;#802, 12(SP) 0C AE 0322 8F 3C 00034
PUSHAB 12(SP) ;12(SP) 0C AE 9F 0003A
CALLS #4, (R5) ;#4, LIB$GETJPI 65 04 FB 0003D
MOVL R0, R2 ;R0, STS 52 50 D0 00040
CMPL 4(SP), #3 ;MODE, #3 1080 03 04 AE D1 00043
BEQL 1$ ;1$ 03 13 00047
BRW 6$ ;6$ 0098 31 00049
1$: CLRQ -(SP) ;-(SP) 1086 7E 7C 0004C
PUSHAB 16(SP) ;MASTER_PID 10 AE 9F 0004E
CLRQ -(SP) ;-(SP) 7E 7C 00051
MOVZWL #805, 20(SP) ;#805, 20(SP) 14 AE 0325 8F 3C 00053
PUSHAB 20(SP) ;20(SP) 14 AE 9F 00059
CALLS #6, (R5) ;#6, LIB$GETJPI 65 06 FB 0005C
MOVL R0, R2 ;R0, STS 52 50 D0 0005F
BLBC R2, 3$ ;STS, 3$ 1087 5C 52 E9 00062
PUSHAB 12(SP) ;TEMP_DESC 1094 0C AE 9F 00065
PUSHAB 16(SP) ;TEMP_DESC 1093 10 AE 9F 00068
CLRQ -(SP) ;-(SP) 1091 7E 7C 0006B
PUSHAB 24(SP) ;MASTER_PID 1090 18 AE 9F 0006D
MOVZWL #797, 20(SP) ;#797, 20(SP) 1089 14 AE 031D 8F 3C 00070
PUSHAB 20(SP) ;20(SP) 14 AE 9F 00076
CALLS #6, (R5) ;#6, LIB$GETJPI 65 06 FB 00079
MOVL R0, R2 ;R0, STS 52 50 D0 0007C
BLBC R2, 3$ ;STS, 3$ 1095 3F 52 E9 0007F
MOVZWL 12(SP), R0 ;TEMP_DESC, R0 1097 50 0C AE 3C 00082
ADDL2 16(SP), R0 ;TEMP_DESC+4, R0 50 10 AE C0 00086
CMPB -1(R0), #58 ;-1(R0), #58 3A FF A0 91 0008A
BEQL 2$ ;2$ 0E 13 0008E
MOVZWL 12(SP), R0 ;TEMP_DESC, R0 1100 50 0C AE 3C 00090
ADDL2 16(SP), R0 ;TEMP_DESC+4, R0 50 10 AE C0 00094
MOVB #58, (R0) ;#58, (R0) 60 3A 90 00098
INCW 12(SP) ;TEMP_DESC 1101 0C AE B6 0009B
2$: PUSHAB -264(FP) ;TERMINAL_DESC 1109 FEF8 CD 9F 0009E
PUSHAB -264(FP) ;TERMINAL_DESC 1108 FEF8 CD 9F 000A2
CLRL -(SP) ;-(SP) 1107 7E D4 000A6
PUSHAB 24(SP) ;TEMP_DESC 1106 18 AE 9F 000A8
CLRL -(SP) ;-(SP) 1105 7E D4 000AB
MOVL #32, 20(SP) ;#32, 20(SP) 1104 14 AE 20 D0 000AD
PUSHAB 20(SP) ;20(SP) 14 AE 9F 000B1
CALLS #6, G^LIB$GETDVI ;#6, LIB$GETDVI 00000000G 00 06 FB 000B4
MOVL R0, R2 ;R0, STS 52 50 D0 000BB
BLBS R2, 4$ ;STS, 4$ 1110 04 52 E8 000BE
3$: MOVL R2, R0 ;STS, R0 50 52 D0 000C1
RET ; 04 000C4
4$: CMPC5 -264(FP), @-260(FP), #32, (R4), -;TERMINAL_DESC, @TERMINAL_DESC+4, - 1114 FEFC DD FEF8 CD 2D 000C5
@4(R4) ;#32, (R4), @4(R4) 64 20 000CC
; 04 B4 000CE
BNEQ 7$ ;7$ 21 12 000D0
TSTL @20(AP) ;@P_MAILBOX_CHANNEL 1117 14 BC D5 000D2
BEQL 5$ ;5$ 0A 13 000D5
PUSHL @20(AP) ;@P_MAILBOX_CHANNEL 14 BC DD 000D7
CALLS #1, G^SYS$DASSGN ;#1, SYS$DASSGN 00000000G 00 01 FB 000DA
5$: CLRL @20(AP) ;@P_MAILBOX_CHANNEL 1118 14 BC D4 000E1
6$: CLRQ -(SP) ;-(SP) 1119 7E 7C 000E4
PUSHL 16(AP) ;P_DEVICE_CHANNEL 10 AC DD 000E6
PUSHL R4 ;R4 54 DD 000E9
CALLS #4, G^SYS$ASSIGN ;#4, SYS$ASSIGN 00000000G 00 04 FB 000EB
RET ; 04 000F2
7$: MOVQ 16(AP), -(SP) ;P_DEVICE_CHANNEL, -(SP) 1122 7E 10 AC 7D 000F3
MOVQ 8(AP), -(SP) ;P_MESSAGE_SIZE, -(SP) 7E 08 AC 7D 000F7
PUSHL R4 ;R4 54 DD 000FB
CALLS #5, G^LIB$ASN_WTH_MBX ;#5, LIB$ASN_WTH_MBX 00000000G 00 05 FB 000FD
RET ; 1125 04 00104
; Routine Size: 261 bytes, Routine Base: $CODE$ + 02D9
; 1126 1
; 1127 1 %SBTTL 'SET_TRANS_TERM - Set new transfer terminal line'
; 1128 1
; 1129 1 GLOBAL ROUTINE SET_TRANS_TERM (NEW_NAME) =
; 1130 1
; 1131 1 !++
; 1132 1 ! FUNCTIONAL DESCRIPTION:
; 1133 1 !
; 1134 1 ! This routine will validate the terminal name that a user wishes to set
; 1135 1 ! as the transfer line. If the name is valid, it will store the physical
; 1136 1 ! name in TERM_DESC, and open the new terminal line.
; 1137 1 !
; 1138 1 ! CALLING SEQUENCE:
; 1139 1 !
; 1140 1 ! STATUS = SET_TRANS_TERM (NEW_NAME);
; 1141 1 !
; 1142 1 ! INPUT PARAMETERS:
; 1143 1 !
; 1144 1 ! NEW_NAME - Descriptor for new terminal name.
; 1145 1 !
; 1146 1 ! IMPLICIT INPUTS:
; 1147 1 !
; 1148 1 ! TERM_OPEN_FLAG, TERM_CHAN
; 1149 1 !
; 1150 1 ! OUPTUT PARAMETERS:
; 1151 1 !
; 1152 1 ! None.
; 1153 1 !
; 1154 1 ! IMPLICIT OUTPUTS:
; 1155 1 !
; 1156 1 ! None.
; 1157 1 !
; 1158 1 ! COMPLETION CODES:
; 1159 1 !
; 1160 1 ! True/false status value - error code
; 1161 1 !
; 1162 1 ! SIDE EFFECTS:
; 1163 1 !
; 1164 1 ! None.
; 1165 1 !
; 1166 1 !--
; 1167 1
; 1168 2 BEGIN
; 1169 2
; 1170 2 MAP
; 1171 2 NEW_NAME : REF BLOCK [8, BYTE]; ! Descriptor for new name
; 1172 2
; 1173 2 LOCAL
; 1174 2 NEW_CHAN, ! Temp for channel to new terminal
; 1175 2 RSL_DESC : BLOCK [8, BYTE], ! Descriptor for physical name
; 1176 2 RSL_NAME : VECTOR [TERM_NAME_SIZE, BYTE], ! String of resulting name
; 1177 2 DEV_TYPE, ! Device type
; 1178 2 STATUS; ! Random status values
; 1179 2
; 1180 2 !
; 1181 2 ! Set up descriptor
; 1182 2 !
; 1183 2 RSL_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 1184 2 RSL_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 1185 2 RSL_DESC [DSC$W_LENGTH] = TERM_NAME_SIZE; ! Maximum length
; 1186 2 RSL_DESC [DSC$A_POINTER] = RSL_NAME; ! Where to store name
; 1187 2 STATUS = GET_DEV_CHAR (.NEW_NAME, RSL_DESC, DEV_TYPE);
; 1188 2
; 1189 2 IF NOT .STATUS THEN RETURN .STATUS;
; 1190 2
; 1191 2 IF .DEV_TYPE NEQ DC$_TERM THEN RETURN KER_LINTERM;
; 1192 2
; 1193 2 !
; 1194 2 ! The device is a terminal, now make sure we can get it.
; 1195 2 !
; 1196 2 ! If we are CONNECTing to the same device and this device is a LAT
; 1197 2 ! device then we must deassign our channel to it (in order for things
; 1198 2 ! to reset properly). There is a chance the reassignment will fail.
; 1199 2 ! If this happens then we are in a bad state - no valid output device.
; 1200 2 !
; 1201 2 ! Otherwise keep a channel to either the old or new device at all times.
; 1202 2 !
; 1203 2 IF CH$EQL(.rsl_desc[DSC$W_LENGTH], .rsl_desc[DSC$A_POINTER],
; 1204 2 .term_desc[DSC$W_LENGTH], .term_desc[DSC$A_POINTER],
; 1205 2 %C' ') AND
; 1206 2 CH$EQL(4, .rsl_desc[DSC$A_POINTER], 4, UPLIT('_LTA'))
; 1207 2 ! (..rsl_desc[DSC$A_POINTER] EQL '_LTA')
; 1208 2 THEN
; 1209 3 BEGIN
; 1210 3 IF .mbx_chan NEQ 0
; 1211 3 THEN
; 1212 4 BEGIN
; 1213 4 $DASSGN (CHAN = .mbx_chan);
; 1214 4 mbx_chan = 0;
; 1215 3 END;
; 1216 3 $DASSGN (CHAN = .TERM_CHAN);
; 1217 3 status = asn_wth_mbx(rsl_desc, %REF(100), %REF(100),
; 1218 3 new_chan, new_mbx_chan);
; 1219 3 IF NOT .STATUS THEN RETURN .STATUS;
; 1220 3 END
; 1221 2 ELSE
; 1222 3 BEGIN
; 1223 3 status = asn_wth_mbx(rsl_desc, %REF(100), %REF(100),
; 1224 3 new_chan, new_mbx_chan);
; 1225 3 IF NOT .STATUS THEN RETURN .STATUS;
; 1226 3 !
; 1227 3 ! We have the new terminal. Deassign the old one and copy the new data
; 1228 3 !
; 1229 3 $DASSGN (CHAN = .TERM_CHAN);
; 1230 3 IF .mbx_chan NEQ 0
; 1231 3 THEN
; 1232 4 BEGIN
; 1233 4 $DASSGN (CHAN = .mbx_chan);
; 1234 4 mbx_chan = 0;
; 1235 3 END;
; 1236 3 CH$COPY (.RSL_DESC [DSC$W_LENGTH], CH$PTR (RSL_NAME), CHR_NUL,
; 1237 3 TERM_NAME_SIZE, CH$PTR (TERM_NAME));
; 1238 3 TERM_DESC [DSC$W_LENGTH] = .RSL_DESC [DSC$W_LENGTH];
; 1239 2 END;
; 1240 2
; 1241 2 TERM_CHAN = .NEW_CHAN;
; 1242 2 IF .new_mbx_chan NEQ 0 THEN mbx_chan = .new_mbx_chan;
; 1243 2 IF .mbx_chan NEQ 0 THEN Term_Hangup();
; 1244 2
; 1245 2
; 1246 2 RETURN KER_NORMAL;
; 1247 1 END; ! End of SET_TRANS_TERM
.PSECT $PLIT$,NOWRT,NOEXE,2
.BLKB 2 ; 000FE
P.AAW: .ASCII \_LTA\ ; 41 54 4C 5F 00100
.PSECT $CODE$,NOWRT,2
.ENTRY SET_TRANS_TERM, ^M<R2,R3,R4,R5,- ;SET_TRANS_TERM, Save R2,R3,R4,R5,- 1129 03FC 00000
R6,R7,R8,R9> ;R6,R7,R8,R9
MOVAB W^U.47, R9 ;U.47, R9 59 FEF5 CF 9E 00002
MOVAB G^TERM_DESC, R8 ;TERM_DESC, R8 58 00000000' 00 9E 00007
MOVAB G^SYS$DASSGN, R7 ;SYS$DASSGN, R7 57 00000000G 00 9E 0000E
MOVAB G^U.5, R6 ;U.5, R6 56 00000000' 00 9E 00015
MOVAB -280(SP), SP ;-280(SP), SP 5E FEE8 CE 9E 0001C
MOVL #17694975, -8(FP) ;#17694975, RSL_DESC 1185 F8 AD 010E00FF 8F D0 00021
MOVAB 16(SP), -4(FP) ;RSL_NAME, RSL_DESC+4 1186 FC AD 10 AE 9E 00029
PUSHAB 8(SP) ;DEV_TYPE 1187 08 AE 9F 0002E
PUSHAB -8(FP) ;RSL_DESC F8 AD 9F 00031
PUSHL 4(AP) ;NEW_NAME 04 AC DD 00034
CALLS #3, G^U.44 ;#3, U.44 00000000V 00 03 FB 00037
MOVL R0, R4 ;R0, STATUS 54 50 D0 0003E
BLBC R4, 3$ ;STATUS, 3$ 1189 5E 54 E9 00041
CMPL 8(SP), #66 ;DEV_TYPE, #66 1191 00000042 8F 08 AE D1 00044
BEQL 1$ ;1$ 08 13 0004C
MOVL #134316242, R0 ;#134316242, R0 50 080180D2 8F D0 0004E
RET ; 04 00055
1$: MOVL 4(R8), R0 ;TERM_DESC+4, R0 1204 50 04 A8 D0 00056
CMPC5 -8(FP), @-4(FP), #32, (R8), (R0) ;RSL_DESC, @RSL_DESC+4, #32, - 1205 FC BD F8 AD 2D 0005A
;TERM_DESC, (R0) 68 20 0005F
; 60 00061
BNEQ 4$ ;4$ 40 12 00062
CMPL @-4(FP), G^P.AAW ;@RSL_DESC+4, P.AAW 1206 00000000' 00 FC BD D1 00064
BNEQ 4$ ;4$ 36 12 0006C
MOVL (R6), R0 ;MBX_CHAN, R0 1210 50 66 D0 0006E
BEQL 2$ ;2$ 07 13 00071
PUSHL R0 ;R0 1213 50 DD 00073
CALLS #1, (R7) ;#1, SYS$DASSGN 67 01 FB 00075
CLRL (R6) ;MBX_CHAN 1214 66 D4 00078
2$: PUSHL -4(R6) ;TERM_CHAN 1216 FC A6 DD 0007A
CALLS #1, (R7) ;#1, SYS$DASSGN 67 01 FB 0007D
PUSHAB 4(R6) ;NEW_MBX_CHAN 1218 04 A6 9F 00080
PUSHAB 16(SP) ;NEW_CHAN 10 AE 9F 00083
MOVZBL #100, 12(SP) ;#100, 12(SP) 1217 0C AE 64 8F 9A 00086
PUSHAB 12(SP) ;12(SP) 0C AE 9F 0008B
MOVZBL #100, 12(SP) ;#100, 12(SP) 0C AE 64 8F 9A 0008E
PUSHAB 12(SP) ;12(SP) 0C AE 9F 00093
PUSHAB -8(FP) ;RSL_DESC F8 AD 9F 00096
CALLS #5, (R9) ;#5, ASN_WTH_MBX 69 05 FB 00099
MOVL R0, R4 ;R0, STATUS 54 50 D0 0009C
BLBS R4, 8$ ;STATUS, 8$ 1219 4A 54 E8 0009F
3$: BRB 5$ ;5$ 22 11 000A2
4$: PUSHAB 4(R6) ;NEW_MBX_CHAN 1224 04 A6 9F 000A4
PUSHAB 16(SP) ;NEW_CHAN 10 AE 9F 000A7
MOVZBL #100, 12(SP) ;#100, 12(SP) 1223 0C AE 64 8F 9A 000AA
PUSHAB 12(SP) ;12(SP) 0C AE 9F 000AF
MOVZBL #100, 12(SP) ;#100, 12(SP) 0C AE 64 8F 9A 000B2
PUSHAB 12(SP) ;12(SP) 0C AE 9F 000B7
PUSHAB -8(FP) ;RSL_DESC F8 AD 9F 000BA
CALLS #5, (R9) ;#5, ASN_WTH_MBX 69 05 FB 000BD
MOVL R0, R4 ;R0, STATUS 54 50 D0 000C0
BLBS R4, 6$ ;STATUS, 6$ 1225 04 54 E8 000C3
5$: MOVL R4, R0 ;STATUS, R0 50 54 D0 000C6
RET ; 04 000C9
6$: PUSHL -4(R6) ;TERM_CHAN 1229 FC A6 DD 000CA
CALLS #1, (R7) ;#1, SYS$DASSGN 67 01 FB 000CD
MOVL (R6), R0 ;MBX_CHAN, R0 1230 50 66 D0 000D0
BEQL 7$ ;7$ 07 13 000D3
PUSHL R0 ;R0 1233 50 DD 000D5
CALLS #1, (R7) ;#1, SYS$DASSGN 67 01 FB 000D7
CLRL (R6) ;MBX_CHAN 1234 66 D4 000DA
7$: MOVC5 -8(FP), 16(SP), #0, #255, - ;RSL_DESC, RSL_NAME, #0, #255, - 1237 10 AE F8 AD 2C 000DC
556(R6) ;TERM_NAME 00FF 8F 00 000E1
; 022C C6 000E5
MOVW -8(FP), (R8) ;RSL_DESC, TERM_DESC 1238 68 F8 AD B0 000E8
8$: MOVL 12(SP), -4(R6) ;NEW_CHAN, TERM_CHAN 1241 FC A6 0C AE D0 000EC
MOVL 4(R6), R0 ;NEW_MBX_CHAN, R0 1242 50 04 A6 D0 000F1
BEQL 9$ ;9$ 03 13 000F5
MOVL R0, (R6) ;R0, MBX_CHAN 66 50 D0 000F7
9$: TSTL (R6) ;MBX_CHAN 1243 66 D5 000FA
BEQL 10$ ;10$ 07 13 000FC
CALLS #0, G^U.45 ;#0, U.45 00000000V 00 00 FB 000FE
10$: MOVL #134316043, R0 ;#134316043, R0 1246 50 0801800B 8F D0 00105
RET ; 04 0010C
; Routine Size: 269 bytes, Routine Base: $CODE$ + 03DE
; 1248 1
; 1249 1 %SBTTL 'TERM_DUMP - This routine will dump text on the terminal'
; 1250 1
; 1251 1 GLOBAL ROUTINE TERM_DUMP (BUFFER_ADDRESS, BUFFER_COUNT) : NOVALUE =
; 1252 1
; 1253 1 !++
; 1254 1 ! FUNCTIONAL DESCRIPTION:
; 1255 1 !
; 1256 1 ! This routine will dump the text specified on the user's terminal.
; 1257 1 ! It will then return to the caller.
; 1258 1 !
; 1259 1 ! CALLING SEQUENCE:
; 1260 1 !
; 1261 1 ! TERM_DUMP( TEXT-BUFFER-ADDRESS, COUNT)
; 1262 1 !
; 1263 1 ! INPUT PARAMETERS:
; 1264 1 !
; 1265 1 ! TEXT-BUFFER-ADDRESS - Address of the buffer containing the characters.
; 1266 1 !
; 1267 1 ! COUNT - Count of the characters in the buffer.
; 1268 1 !
; 1269 1 ! IMPLICIT INPUTS:
; 1270 1 !
; 1271 1 ! None.
; 1272 1 !
; 1273 1 ! OUPTUT PARAMETERS:
; 1274 1 !
; 1275 1 ! None.
; 1276 1 !
; 1277 1 ! IMPLICIT OUTPUTS:
; 1278 1 !
; 1279 1 ! None.
; 1280 1 !
; 1281 1 ! COMPLETION CODES:
; 1282 1 !
; 1283 1 ! None.
; 1284 1 !
; 1285 1 ! SIDE EFFECTS:
; 1286 1 !
; 1287 1 ! None.
; 1288 1 !
; 1289 1 !--
; 1290 1
; 1291 2 BEGIN
; 1292 2
; 1293 2 LOCAL
; 1294 2 TEXT_DESC : BLOCK [8, BYTE];
; 1295 2
; 1296 2 IF NOT .CONNECT_FLAG
; 1297 2 THEN
; 1298 3 BEGIN
; 1299 3
; 1300 3 IF .SYS_OUTPUT_OPEN
; 1301 3 THEN
; P 1302 3 $QIOW (CHAN = .SYS_OUTPUT_CHAN, EFN = CONS_O_EFN,
; 1303 4 FUNC = IO$_WRITEVBLK, P1 = .BUFFER_ADDRESS, P2 = .BUFFER_COUNT, P4 = 0)
; 1304 3 ELSE
; 1305 4 BEGIN
; 1306 4 TEXT_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 1307 4 TEXT_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 1308 4 TEXT_DESC [DSC$W_LENGTH] = .BUFFER_COUNT;
; 1309 4 TEXT_DESC [DSC$A_POINTER] = .BUFFER_ADDRESS;
; 1310 4 LIB$PUT_OUTPUT (TEXT_DESC);
; 1311 3 END;
; 1312 3
; 1313 2 END;
; 1314 2
; 1315 1 END; ! End of TERM_DUMP
U.43:
.ENTRY TERM_DUMP, ^M<> ;TERM_DUMP, Save nothing 1251 0000 00000
SUBL2 #8, SP ;#8, SP 5E 08 C2 00002
BLBS G^CONNECT_FLAG, 2$ ;CONNECT_FLAG, 2$ 1296 3C 00000000G 00 E8 00005
BLBC G^U.9, 1$ ;U.9, 1$ 1300 1D 00000000' 00 E9 0000C
CLRQ -(SP) ;-(SP) 1303 7E 7C 00013
CLRQ -(SP) ;-(SP) 7E 7C 00015
MOVQ 4(AP), -(SP) ;BUFFER_ADDRESS, -(SP) 7E 04 AC 7D 00017
CLRQ -(SP) ;-(SP) 7E 7C 0001B
MOVQ #48, -(SP) ;#48, -(SP) 7E 30 7D 0001D
PUSHL G^U.8 ;U.8 00000000' 00 DD 00020
PUSHL #6 ;#6 06 DD 00026
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 00028
RET ; 04 0002F
1$: MOVW #270, 2(SP) ;#270, TEXT_DESC+2 1307 02 AE 010E 8F B0 00030
MOVW 8(AP), (SP) ;BUFFER_COUNT, TEXT_DESC 1308 6E 08 AC B0 00036
MOVL 4(AP), 4(SP) ;BUFFER_ADDRESS, TEXT_DESC+4 1309 04 AE 04 AC D0 0003A
PUSHL SP ;SP 1310 5E DD 0003F
CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT 00000000G 00 01 FB 00041
2$: RET ; 1315 04 00048
; Routine Size: 73 bytes, Routine Base: $CODE$ + 04EB
; 1316 1
; 1317 1 %SBTTL 'DBG_DUMP - This routine will dump text on the terminal'
; 1318 1
; 1319 1 GLOBAL ROUTINE DBG_DUMP (BUFFER_ADDRESS, BUFFER_COUNT) : NOVALUE =
; 1320 1
; 1321 1 !++
; 1322 1 ! FUNCTIONAL DESCRIPTION:
; 1323 1 !
; 1324 1 ! This routine will dump the text specified on the user's terminal.
; 1325 1 ! It will then return to the caller.
; 1326 1 !
; 1327 1 ! CALLING SEQUENCE:
; 1328 1 !
; 1329 1 ! DBG_DUMP( TEXT-BUFFER-ADDRESS, COUNT)
; 1330 1 !
; 1331 1 ! INPUT PARAMETERS:
; 1332 1 !
; 1333 1 ! TEXT-BUFFER-ADDRESS - Address of the buffer containing the characters.
; 1334 1 !
; 1335 1 ! COUNT - Count of the characters in the buffer.
; 1336 1 !
; 1337 1 ! IMPLICIT INPUTS:
; 1338 1 !
; 1339 1 ! None.
; 1340 1 !
; 1341 1 ! OUPTUT PARAMETERS:
; 1342 1 !
; 1343 1 ! None.
; 1344 1 !
; 1345 1 ! IMPLICIT OUTPUTS:
; 1346 1 !
; 1347 1 ! None.
; 1348 1 !
; 1349 1 ! COMPLETION CODES:
; 1350 1 !
; 1351 1 ! None.
; 1352 1 !
; 1353 1 ! SIDE EFFECTS:
; 1354 1 !
; 1355 1 ! None.
; 1356 1 !
; 1357 1 !--
; 1358 1
; 1359 2 BEGIN
; 1360 2
; 1361 2 LOCAL
; 1362 2 STATUS, ! Status from $PUT
; 1363 2 TEXT_DESC : BLOCK [8, BYTE];
; 1364 2
; 1365 2 IF NOT .CONNECT_FLAG AND NOT .DEBUG_REDIRECTED ! Check where debugging should go
; 1366 2 THEN
; 1367 3 BEGIN
; 1368 3
; 1369 3 IF .SYS_OUTPUT_OPEN
; 1370 3 THEN
; P 1371 3 $QIOW (CHAN = .SYS_OUTPUT_CHAN, EFN = CONS_O_EFN,
; 1372 4 FUNC = IO$_WRITEVBLK OR IO$M_NOFORMAT, P1 = .BUFFER_ADDRESS, P2 = .BUFFER_COUNT)
; 1373 3 ELSE
; 1374 4 BEGIN
; 1375 4 TEXT_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 1376 4 TEXT_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 1377 4 TEXT_DESC [DSC$W_LENGTH] = .BUFFER_COUNT;
; 1378 4 TEXT_DESC [DSC$A_POINTER] = .BUFFER_ADDRESS;
; 1379 4 LIB$PUT_OUTPUT (TEXT_DESC);
; 1380 3 END;
; 1381 3
; 1382 3 END
; 1383 2 ELSE
; 1384 2
; 1385 2 IF .DEBUG_REDIRECTED
; 1386 2 THEN
; 1387 3 BEGIN
; 1388 3
; 1389 3 EXTERNAL ROUTINE
; 1390 3 LOG_CHAR, ! Routine to write a character to log file
; 1391 3 LOG_CLOSE; ! Routine to close log file
; 1392 3
; 1393 3 LOCAL
; 1394 3 POINTER;
; 1395 3
; 1396 3 POINTER = CH$PTR (.BUFFER_ADDRESS);
; 1397 3
; 1398 3 DECR I FROM .BUFFER_COUNT TO 1 DO
; 1399 3
; 1400 3 IF NOT LOG_CHAR (CH$RCHAR_A (POINTER), DEBUG_RAB)
; 1401 3 THEN
; 1402 4 BEGIN
; 1403 4 LOG_CLOSE (DEBUG_FAB, DEBUG_RAB);
; 1404 4 DEBUG_REDIRECTED = FALSE;
; 1405 3 END;
; 1406 3
; 1407 2 END;
; 1408 2
; 1409 1 END; ! End of DBG_DUMP
.EXTRN LOG_CHAR, LOG_CLOSE
.ENTRY DBG_DUMP, ^M<R2,R3,R4> ;DBG_DUMP, Save R2,R3,R4 1319 001C 00000
MOVAB G^U.27, R4 ;U.27, R4 54 00000000' 00 9E 00002
SUBL2 #8, SP ;#8, SP 5E 08 C2 00009
BLBS G^CONNECT_FLAG, 2$ ;CONNECT_FLAG, 2$ 1365 40 00000000G 00 E8 0000C
BLBS (R4), 3$ ;DEBUG_REDIRECTED, 3$ 40 64 E8 00013
BLBC -1624(R4), 1$ ;SYS_OUTPUT_OPEN, 1$ 1369 1F F9A8 C4 E9 00016
CLRQ -(SP) ;-(SP) 1372 7E 7C 0001B
CLRQ -(SP) ;-(SP) 7E 7C 0001D
MOVQ 4(AP), -(SP) ;BUFFER_ADDRESS, -(SP) 7E 04 AC 7D 0001F
CLRQ -(SP) ;-(SP) 7E 7C 00023
CLRL -(SP) ;-(SP) 7E D4 00025
MOVZWL #304, -(SP) ;#304, -(SP) 7E 0130 8F 3C 00027
PUSHL -1628(R4) ;SYS_OUTPUT_CHAN F9A4 C4 DD 0002C
PUSHL #6 ;#6 06 DD 00030
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 00032
RET ; 04 00039
1$: MOVW #270, 2(SP) ;#270, TEXT_DESC+2 1376 02 AE 010E 8F B0 0003A
MOVW 8(AP), (SP) ;BUFFER_COUNT, TEXT_DESC 1377 6E 08 AC B0 00040
MOVL 4(AP), 4(SP) ;BUFFER_ADDRESS, TEXT_DESC+4 1378 04 AE 04 AC D0 00044
PUSHL SP ;SP 1379 5E DD 00049
CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT 00000000G 00 01 FB 0004B
RET ; 04 00052
2$: BLBC (R4), 6$ ;DEBUG_REDIRECTED, 6$ 1385 30 64 E9 00053
3$: MOVL 4(AP), R3 ;BUFFER_ADDRESS, POINTER 1396 53 04 AC D0 00056
ADDL3 #1, 8(AP), R2 ;#1, BUFFER_COUNT, I 1398 08 AC 01 C1 0005A
; 52 0005E
BRB 5$ ;5$ 22 11 0005F
4$: PUSHAB -200(R4) ;DEBUG_RAB 1400 FF38 C4 9F 00061
MOVZBL (R3)+, -(SP) ;(POINTER)+, -(SP) 7E 83 9A 00065
CALLS #2, G^LOG_CHAR ;#2, LOG_CHAR 00000000G 00 02 FB 00068
BLBS R0, 5$ ;R0, 5$ 11 50 E8 0006F
PUSHAB -200(R4) ;DEBUG_RAB 1403 FF38 C4 9F 00072
PUSHAB -280(R4) ;DEBUG_FAB FEE8 C4 9F 00076
CALLS #2, G^LOG_CLOSE ;#2, LOG_CLOSE 00000000G 00 02 FB 0007A
CLRL (R4) ;DEBUG_REDIRECTED 1404 64 D4 00081
5$: SOBGTR R2, 4$ ;I, 4$ 1398 DB 52 F5 00083
6$: RET ; 1409 04 00086
; Routine Size: 135 bytes, Routine Base: $CODE$ + 0534
; 1410 1
; 1411 1 %SBTTL 'GET_COMMAND - Get a command line'
; 1412 1
; 1413 1 GLOBAL ROUTINE GET_COMMAND (CMD_DESC, PROMPT_DESC, CMD_LENGTH, ECHO_FLAG) =
; 1414 1
; 1415 1 !++
; 1416 1 ! FUNCTIONAL DESCRIPTION:
; 1417 1 !
; 1418 1 ! This routine will get a command line from SYS$COMMAND:. If
; 1419 1 ! SYS$COMMAND is a terminal, it will do input using a QIO, which will
; 1420 1 ! allow input without echo if desired. If SYS$COMMAND is not a terminal,
; 1421 1 ! it will use LIB$GET_COMMAND.
; 1422 1 !
; 1423 1 ! CALLING SEQUENCE:
; 1424 1 !
; 1425 1 ! STATUS = GET_COMMAND (CMD_DESC, PROMPT_DESC, CMD_LENGTH, ECHO_FLAG);
; 1426 1 !
; 1427 1 ! INPUT PARAMETERS:
; 1428 1 !
; 1429 1 ! CMD_DESC - String descriptor for command being input
; 1430 1 ! PROMPT_DESC - String descriptor for prompt
; 1431 1 ! ECHO_FLAG - True if input should be echoed, false if not
; 1432 1 !
; 1433 1 ! IMPLICIT INPUTS:
; 1434 1 !
; 1435 1 ! SYS_COMMAND_OPEN - Flag whether SYS$COMMAND is open
; 1436 1 ! SYS_COMMAND_CHAN - Channel SYS$COMMAND is open on, if open
; 1437 1 !
; 1438 1 ! OUPTUT PARAMETERS:
; 1439 1 !
; 1440 1 ! CMD_LENGTH - Actual length of command input
; 1441 1 !
; 1442 1 ! IMPLICIT OUTPUTS:
; 1443 1 !
; 1444 1 ! None.
; 1445 1 !
; 1446 1 ! COMPLETION CODES:
; 1447 1 !
; 1448 1 ! Returns status value, true unless error has occured.
; 1449 1 !
; 1450 1 ! SIDE EFFECTS:
; 1451 1 !
; 1452 1 ! None.
; 1453 1 !
; 1454 1 !--
; 1455 1
; 1456 2 BEGIN
; 1457 2
; 1458 2 MAP
; 1459 2 CMD_DESC : REF BLOCK [8, BYTE], ! Where to put input
; 1460 2 PROMPT_DESC : REF BLOCK [8, BYTE]; ! Prompt string
; 1461 2
; 1462 2 EXTERNAL ROUTINE
; 1463 2 TT_CRLF : NOVALUE, ! Type a CRLF
; 1464 2 STR$UPCASE : ADDRESSING_MODE (GENERAL), ! Upcase a string
; 1465 2 LIB$GET_COMMAND : ADDRESSING_MODE (GENERAL); ! Get string from SYS$COMMAND
; 1466 2
; 1467 2 LOCAL
; 1468 2 QIO_FUNC, ! Function for QIO
; 1469 2 IOSB : VECTOR [4, WORD], ! IOSB for QIO
; 1470 2 STATUS; ! Random status values
; 1471 2
; 1472 2 IF .SYS_COMMAND_OPEN
; 1473 2 THEN
; 1474 3 BEGIN
; 1475 3 QIO_FUNC = IO$_READPROMPT; ! Assume just read with prompt
; 1476 3
; 1477 3 IF NOT .ECHO_FLAG THEN QIO_FUNC = IO$_READPROMPT OR IO$M_NOECHO; ! Don't echo input
; 1478 3
; P 1479 3 STATUS = $QIOW (CHAN = .SYS_COMMAND_CHAN, FUNC = .QIO_FUNC, IOSB = IOSB,
; P 1480 3 P1 = .CMD_DESC [DSC$A_POINTER], P2 = .CMD_DESC [DSC$W_LENGTH],
; 1481 3 P5 = .PROMPT_DESC [DSC$A_POINTER], P6 = .PROMPT_DESC [DSC$W_LENGTH]);
; 1482 3
; 1483 3 IF NOT .STATUS THEN RETURN .STATUS;
; 1484 3
; 1485 3 !
; 1486 3 ! If we didn't echo, then dump a CRLF so we look nice
; 1487 3 !
; 1488 3
; 1489 3 IF NOT .ECHO_FLAG THEN TT_CRLF ();
; 1490 3
; 1491 3 IF .IOSB [0]
; 1492 3 THEN
; 1493 4 BEGIN
; 1494 4 .CMD_LENGTH = .IOSB [1]; ! Get actual length input
; 1495 4
; 1496 4 IF .IOSB [3] EQL 1 AND .IOSB [2] EQL CHR_CTL_Z THEN RETURN RMS$_EOF;
; 1497 4
; 1498 3 END;
; 1499 3
; 1500 3 !
; 1501 3 ! Upcase the resulting string
; 1502 3 !
; 1503 3 STATUS = STR$UPCASE (.CMD_DESC, .CMD_DESC);
; 1504 3
; 1505 3 IF NOT .STATUS THEN RETURN .STATUS;
; 1506 3
; 1507 3 RETURN .IOSB [0]; ! Return resulting status
; 1508 2 END;
; 1509 2
; 1510 2 !
; 1511 2 ! Here if SYS$COMMAND is not open. Get the command via LIB$GET_COMMAND.
; 1512 2 !
; 1513 2 RETURN LIB$GET_COMMAND (.CMD_DESC, .PROMPT_DESC, .CMD_LENGTH);
; 1514 1 END; ! End of GET_COMMAND
.EXTRN TT_CRLF, STR$UPCASE, LIB$GET_COMMAND
.ENTRY GET_COMMAND, ^M<R2,R3> ;GET_COMMAND, Save R2,R3 1413 000C 00000
SUBL2 #8, SP ;#8, SP 5E 08 C2 00002
BLBC G^U.13, 6$ ;U.13, 6$ 1472 7D 00000000' 00 E9 00005
MOVL #55, R1 ;#55, QIO_FUNC 1475 51 37 D0 0000C
BLBS 16(AP), 1$ ;ECHO_FLAG, 1$ 1477 04 10 AC E8 0000F
MOVZBL #119, R1 ;#119, QIO_FUNC 51 77 8F 9A 00013
1$: MOVL 8(AP), R0 ;PROMPT_DESC, R0 1481 50 08 AC D0 00017
MOVZWL (R0), -(SP) ;(R0), -(SP) 7E 60 3C 0001B
PUSHL 4(R0) ;4(R0) 04 A0 DD 0001E
CLRQ -(SP) ;-(SP) 7E 7C 00021
MOVL 4(AP), R2 ;CMD_DESC, R2 52 04 AC D0 00023
MOVZWL (R2), -(SP) ;(R2), -(SP) 7E 62 3C 00027
PUSHL 4(R2) ;4(R2) 04 A2 DD 0002A
CLRQ -(SP) ;-(SP) 7E 7C 0002D
PUSHAB 32(SP) ;IOSB 20 AE 9F 0002F
PUSHL R1 ;QIO_FUNC 51 DD 00032
PUSHL G^U.12 ;U.12 00000000' 00 DD 00034
CLRL -(SP) ;-(SP) 7E D4 0003A
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 0003C
MOVL R0, R3 ;R0, STATUS 53 50 D0 00043
BLBC R3, 4$ ;STATUS, 4$ 1483 38 53 E9 00046
BLBS 16(AP), 2$ ;ECHO_FLAG, 2$ 1489 07 10 AC E8 00049
CALLS #0, G^TT_CRLF ;#0, TT_CRLF 00000000G 00 00 FB 0004D
2$: BLBC (SP), 3$ ;IOSB, 3$ 1491 19 6E E9 00054
MOVZWL 2(SP), @12(AP) ;IOSB+2, @CMD_LENGTH 1494 0C BC 02 AE 3C 00057
CMPW 6(SP), #1 ;IOSB+6, #1 1496 01 06 AE B1 0005C
BNEQ 3$ ;3$ 0E 12 00060
CMPW 4(SP), #26 ;IOSB+4, #26 1A 04 AE B1 00062
BNEQ 3$ ;3$ 08 12 00066
MOVL #98938, R0 ;#98938, R0 50 0001827A 8F D0 00068
RET ; 04 0006F
3$: PUSHL R2 ;R2 1503 52 DD 00070
PUSHL R2 ;R2 52 DD 00072
CALLS #2, G^STR$UPCASE ;#2, STR$UPCASE 00000000G 00 02 FB 00074
MOVL R0, R3 ;R0, STATUS 53 50 D0 0007B
BLBS R3, 5$ ;STATUS, 5$ 1505 04 53 E8 0007E
4$: MOVL R3, R0 ;STATUS, R0 50 53 D0 00081
RET ; 04 00084
5$: MOVZWL (SP), R0 ;IOSB, R0 1507 50 6E 3C 00085
RET ; 04 00088
6$: MOVQ 8(AP), -(SP) ;PROMPT_DESC, -(SP) 1513 7E 08 AC 7D 00089
PUSHL 4(AP) ;CMD_DESC 04 AC DD 0008D
CALLS #3, G^LIB$GET_COMMAND ;#3, LIB$GET_COMMAND 00000000G 00 03 FB 00090
RET ; 04 00097
; Routine Size: 152 bytes, Routine Base: $CODE$ + 05BB
; 1515 1
; 1516 1 %SBTTL 'Communcations line -- TERM_OPEN'
; 1517 1
; 1518 1 GLOBAL ROUTINE TERM_OPEN (POST_QIOS) =
; 1519 1
; 1520 1 !++
; 1521 1 ! FUNCTIONAL DESCRIPTION:
; 1522 1 !
; 1523 1 ! This routine will assign a channel that is used in the CONNECT
; 1524 1 ! processing and to send/receive a file from.
; 1525 1 !
; 1526 1 ! CALLING SEQUENCE:
; 1527 1 !
; 1528 1 ! TERM_OPEN(POST_QIOS);
; 1529 1 !
; 1530 1 ! INPUT PARAMETERS:
; 1531 1 !
; 1532 1 ! POST_QIOS - True if initial read QIO's should be posted.
; 1533 1 !
; 1534 1 ! IMPLICIT INPUTS:
; 1535 1 !
; 1536 1 ! TERM_DESC - Descriptor of a vector of ASCII characters that represent
; 1537 1 ! the name of the terminal to use.
; 1538 1 !
; 1539 1 ! TERM_CHAN - Channel open to terminal if TERM_OPEN_FLAG is true.
; 1540 1 !
; 1541 1 ! OUTPUT PARAMETERS:
; 1542 1 !
; 1543 1 ! None.
; 1544 1 !
; 1545 1 ! IMPLICIT OUTPUTS:
; 1546 1 !
; 1547 1 ! TERM_CHAN - Channel number of the terminal line we are using.
; 1548 1 !
; 1549 1 ! COMPLETION CODES:
; 1550 1 !
; 1551 1 ! SS$_NORMAL or error condition.
; 1552 1 !
; 1553 1 ! SIDE EFFECTS:
; 1554 1 !
; 1555 1 ! None.
; 1556 1 !
; 1557 1 !--
; 1558 1
; 1559 2 BEGIN
; 1560 2
; 1561 2 EXTERNAL ROUTINE
; 1562 2 LOG_FAOL, ! Write FAOL style text
; 1563 2 LOG_OPEN; ! Open a log file
; 1564 2
; 1565 2 EXTERNAL
; 1566 2 TRANSACTION_OPEN,
; 1567 2 TRANSACTION_DESC : BLOCK [8, BYTE],
; 1568 2 TRANSACTION_FAB : $FAB_DECL,
; 1569 2 TRANSACTION_RAB : $RAB_DECL;
; 1570 2
; 1571 2 LOCAL
; 1572 2 STATUS;
; 1573 2
; 1574 2 !
; 1575 2 ! If the terminal is not open, we must open it first.
; 1576 2 !
; 1577 2
; 1578 2 IF NOT .TERM_OPEN_FLAG
; 1579 2 THEN
; 1580 2
; 1581 2 IF .TERM_DESC [DSC$W_LENGTH] GTR 0
; 1582 2 THEN
; 1583 3 BEGIN
; 1584 3 STATUS = SET_TRANS_TERM (TERM_DESC);
; 1585 3
; 1586 3 IF NOT .STATUS THEN RETURN .STATUS;
; 1587 3
; 1588 3 END
; 1589 2 ELSE
; 1590 2 RETURN KER_LINTERM;
; 1591 2
; 1592 2 !
; 1593 2 ! Set up connect flag properly
; 1594 2 !
; 1595 2
; 1596 2 IF CH$NEQ (.SYS_OUTPUT_DESC [DSC$W_LENGTH], CH$PTR (.SYS_OUTPUT_DESC [DSC$A_POINTER]),
; 1597 2 .TERM_DESC [DSC$W_LENGTH], CH$PTR (TERM_NAME), CHR_NUL) OR NOT .SYS_OUTPUT_OPEN
; 1598 2 THEN
; 1599 2 CONNECT_FLAG = FALSE
; 1600 2 ELSE
; 1601 2 CONNECT_FLAG = TRUE;
; 1602 2
; 1603 2 !
; 1604 2 ! If we aren't connected, remember the channel to use for the console I/O
; 1605 2 !
; 1606 2
; 1607 2 IF NOT .CONNECT_FLAG AND .SYS_OUTPUT_OPEN THEN CONS_CHAN = .SYS_OUTPUT_CHAN;
; 1608 2
; 1609 2 !
; 1610 2 ! Get current settings for transfer terminal
; 1611 2 !
; P 1612 2 STATUS = $QIOW (CHAN = .TERM_CHAN, FUNC = IO$_SENSEMODE, P1 = OLD_TERM_CHAR,
; 1613 2 P2 = TC$_CHAR_LENGTH, IOSB = OLD_PARITY);
; 1614 2
; 1615 2 IF NOT .STATUS
; 1616 2 THEN
; 1617 3 BEGIN
; 1618 3 LIB$SIGNAL (.STATUS);
; 1619 3 RETURN .STATUS;
; 1620 2 END;
; 1621 2
; 1622 2 NEW_TERM_CHAR [TC$_BFR_SIZE] = .OLD_TERM_CHAR [TC$_BFR_SIZE];
; 1623 2 NEW_TERM_CHAR [TC$_TYPE] = .OLD_TERM_CHAR [TC$_TYPE];
; 1624 2 NEW_TERM_CHAR [TC$_CLASS] = .OLD_TERM_CHAR [TC$_CLASS];
; 1625 2 NEW_TERM_CHAR [TC$_PAGE_LEN] = .OLD_TERM_CHAR [TC$_PAGE_LEN];
; 1626 3 NEW_TERM_CHAR [TC$_CHAR] = (.OLD_TERM_CHAR [TC$_CHAR] OR TT$M_NOBRDCST) AND NOT (TT$M_CRFILL OR
; 1627 2 TT$M_LFFILL OR TT$M_WRAP OR TT$M_NOTYPEAHD);
; 1628 2 ! We do not want to use eightbit if using parity
; 1629 2
; 1630 2 IF .PARITY_TYPE EQL PR_NONE
; 1631 2 THEN
; 1632 2 NEW_TERM_CHAR [TC$_CHAR] = .NEW_TERM_CHAR [TC$_CHAR] OR TT$M_EIGHTBIT
; 1633 2 ELSE
; 1634 2 NEW_TERM_CHAR [TC$_CHAR] = .NEW_TERM_CHAR [TC$_CHAR] AND NOT TT$M_EIGHTBIT;
; 1635 2
; 1636 2 NEW_TERM_CHAR [TC$_CHAR_2] = TT2$M_XON OR TT2$M_PASTHRU OR
; 1637 2 (.OLD_TERM_CHAR [TC$_CHAR_2] AND NOT TT2$M_FALLBACK);
; 1638 2
; P 1639 2 STATUS = $QIOW (CHAN = .TERM_CHAN, FUNC = IO$_SETMODE, P1 = NEW_TERM_CHAR,
; 1640 2 P2 = TC$_CHAR_LENGTH, P5 = TT$M_ALTRPAR);
; 1641 2
; 1642 2 IF NOT .STATUS
; 1643 2 THEN
; 1644 3 BEGIN
; 1645 3 LIB$SIGNAL (.STATUS);
; 1646 3 RETURN .STATUS;
; 1647 2 END;
; 1648 2
; 1649 2 TERM_FLAG = TRUE; ! Terminal now open
; 1650 2 TERM_FIRST_TIME = TRUE; ! Flag first time QIO should clear input
; 1651 2 FORCE_TIMEOUT = FALSE; ! Don't timeout for no reason
; 1652 2 FORCE_ABORT = FALSE; ! Don't abort yet
; 1653 2 !
; 1654 2 ! Now post the initial receive QIO
; 1655 2 !
; 1656 2
; 1657 2 IF .POST_QIOS ! Need the QIO's?
; 1658 2 THEN
; 1659 3 BEGIN
; 1660 3 STATUS = DO_RECEIVE_QIO ();
; 1661 3
; 1662 3 IF NOT .STATUS
; 1663 3 THEN
; 1664 4 BEGIN
; 1665 4 LIB$SIGNAL (.STATUS);
; 1666 4 RETURN KER_RECERR;
; 1667 3 END;
; 1668 3
; 1669 3 !
; 1670 3 ! Also post the QIO for the console
; 1671 3 !
; 1672 3
; 1673 3 IF NOT .CONNECT_FLAG AND .SYS_OUTPUT_OPEN
; 1674 3 THEN
; 1675 4 BEGIN
; 1676 4 STATUS = DO_CONS_QIO ();
; 1677 4
; 1678 4 IF NOT .STATUS
; 1679 4 THEN
; 1680 5 BEGIN
; 1681 5 LIB$SIGNAL (.STATUS);
; 1682 5 $CANCEL (CHAN = .TERM_CHAN);
; 1683 5 $DASSGN (CHAN = .TERM_CHAN);
; 1684 5 RETURN KER_RECERR;
; 1685 4 END;
; 1686 4
; 1687 3 END;
; 1688 3
; 1689 2 END;
; 1690 2
; 1691 2 !
; 1692 2 ! Open any debugging log file
; 1693 2 !
; 1694 2
; 1695 2 IF .DEBUG_DESC [DSC$W_LENGTH] GTR 0
; 1696 2 THEN
; 1697 2
; 1698 2 IF LOG_OPEN (DEBUG_DESC, DEBUG_FAB, DEBUG_RAB)
; 1699 2 THEN
; 1700 2 DEBUG_REDIRECTED = TRUE
; 1701 2 ELSE
; 1702 2 DEBUG_REDIRECTED = FALSE
; 1703 2
; 1704 2 ELSE
; 1705 2 DEBUG_REDIRECTED = FALSE;
; 1706 2
; 1707 2 IF .TRANSACTION_DESC [DSC$W_LENGTH] GTR 0
; 1708 2 THEN
; 1709 2
; 1710 2 IF LOG_OPEN (TRANSACTION_DESC, TRANSACTION_FAB, TRANSACTION_RAB)
; 1711 2 THEN
; 1712 3 BEGIN
; 1713 3 TRANSACTION_OPEN = TRUE;
; 1714 3 LOG_FAOL (%ASCID'!-!-!11%D!/!-!%T!_Starting transaction log in file !AS!/',
; 1715 3 UPLIT (0, TRANSACTION_DESC), TRANSACTION_RAB);
; 1716 3 END
; 1717 2 ELSE
; 1718 2 TRANSACTION_OPEN = FALSE
; 1719 2
; 1720 2 ELSE
; 1721 2 TRANSACTION_OPEN = FALSE;
; 1722 2
; 1723 2 RETURN KER_NORMAL;
; 1724 1 END; ! End of TERM_OPEN
.PSECT $PLIT$,NOWRT,NOEXE,2
P.AAY: .ASCII \!-!-!11%D!/!-!%T!_Starting transaction log in file !AS!/\
; 25 31 31 21 2D 21 2D 21 00104
; 54 25 21 2D 21 2F 21 44 0010C
; 69 74 72 61 74 53 5F 21 00114
; 73 6E 61 72 74 20 67 6E 0011C
; 6C 20 6E 6F 69 74 63 61 00124
; 69 66 20 6E 69 20 67 6F 0012C
; 2F 21 53 41 21 20 65 6C 00134
P.AAX: .LONG 17694776 ; 010E0038 0013C
.ADDRESS P.AAY ; 00000000' 00140
P.AAZ: .LONG 0 ; 00000000 00144
.ADDRESS TRANSACTION_DESC ; 00000000G 00148
.EXTRN LOG_FAOL, LOG_OPEN, TRANSACTION_OPEN, TRANSACTION_DESC, TRANSACTION_FAB, TRANSACTION_RAB
.EXTRN SYS$CANCEL
.PSECT $CODE$,NOWRT,2
.ENTRY TERM_OPEN, ^M<R2,R3,R4,R5,R6,R7,-;TERM_OPEN, Save R2,R3,R4,R5,R6,R7,- 1518 0FFC 00000
R8,R9,R10,R11> ;R8,R9,R10,R11
MOVAB G^TRANSACTION_DESC, R11 ;TRANSACTION_DESC, R11 5B 00000000G 00 9E 00002
MOVAB G^LOG_OPEN, R10 ;LOG_OPEN, R10 5A 00000000G 00 9E 00009
MOVAB G^SYS$QIOW, R9 ;SYS$QIOW, R9 59 00000000G 00 9E 00010
MOVAB G^LIB$SIGNAL, R8 ;LIB$SIGNAL, R8 58 00000000G 00 9E 00017
MOVAB G^CONNECT_FLAG, R7 ;CONNECT_FLAG, R7 57 00000000G 00 9E 0001E
MOVAB G^TERM_DESC, R6 ;TERM_DESC, R6 56 00000000' 00 9E 00025
MOVAB G^U.33+4, R5 ;U.33+4, R5 55 00000000' 00 9E 0002C
BLBS -1888(R5), 2$ ;TERM_OPEN_FLAG, 2$ 1578 1C F8A0 C5 E8 00033
TSTW (R6) ;TERM_DESC 1581 66 B5 00038
BEQL 1$ ;1$ 10 13 0003A
PUSHL R6 ;R6 1584 56 DD 0003C
CALLS #1, W^SET_TRANS_TERM ;#1, SET_TRANS_TERM FD48 CF 01 FB 0003E
MOVL R0, R4 ;R0, STATUS 54 50 D0 00043
BLBS R4, 2$ ;STATUS, 2$ 1586 0B 54 E8 00046
BRW 10$ ;10$ 00CF 31 00049
1$: MOVL #134316242, R0 ;#134316242, R0 1590 50 080180D2 8F D0 0004C
RET ; 04 00053
2$: MOVL -2676(R5), R0 ;SYS_OUTPUT_DESC+4, R0 1596 50 F58C C5 D0 00054
CMPC5 -2680(R5), (R0), #0, (R6), - ;SYS_OUTPUT_DESC, (R0), #0, - 1597 60 F588 C5 2D 00059
-2400(R5) ;TERM_DESC, TERM_NAME 66 00 0005E
; F6A0 C5 00060
BNEQ 3$ ;3$ 05 12 00063
BLBS -2940(R5), 4$ ;SYS_OUTPUT_OPEN, 4$ 04 F484 C5 E8 00065
3$: CLRL (R7) ;CONNECT_FLAG 1599 67 D4 0006A
BRB 5$ ;5$ 03 11 0006C
4$: MOVL #1, (R7) ;#1, CONNECT_FLAG 1601 67 01 D0 0006E
5$: BLBS (R7), 6$ ;CONNECT_FLAG, 6$ 1607 0C 67 E8 00071
BLBC -2940(R5), 6$ ;SYS_OUTPUT_OPEN, 6$ 07 F484 C5 E9 00074
MOVL -2944(R5), -2948(R5) ;SYS_OUTPUT_CHAN, CONS_CHAN F47C C5 F480 C5 D0 00079
6$: CLRQ -(SP) ;-(SP) 1613 7E 7C 00080
CLRQ -(SP) ;-(SP) 7E 7C 00082
PUSHL #12 ;#12 0C DD 00084
PUSHAB -16(R5) ;OLD_TERM_CHAR F0 A5 9F 00086
CLRQ -(SP) ;-(SP) 7E 7C 00089
PUSHAB -24(R5) ;OLD_PARITY E8 A5 9F 0008B
PUSHL #39 ;#39 27 DD 0008E
PUSHL -2960(R5) ;TERM_CHAN F470 C5 DD 00090
CLRL -(SP) ;-(SP) 7E D4 00094
CALLS #12, (R9) ;#12, SYS$QIOW 69 0C FB 00096
MOVL R0, R4 ;R0, STATUS 54 50 D0 00099
BLBC R4, 9$ ;STATUS, 9$ 1615 77 54 E9 0009C
MOVL -16(R5), -4(R5) ;OLD_TERM_CHAR, NEW_TERM_CHAR 1624 FC A5 F0 A5 D0 0009F
MOVB -9(R5), 3(R5) ;OLD_TERM_CHAR+7, NEW_TERM_CHAR+7 1625 03 A5 F7 A5 90 000A4
EXTZV #0, #24, -12(R5), R0 ;#0, #24, OLD_TERM_CHAR+4, R0 1627 18 00 EF 000A9
; 50 F4 A5 000AC
BICL2 #3588, R0 ;#3588, R0 50 00000E04 8F CA 000AF
BISL3 #131072, R0, R1 ;#131072, R0, R1 50 00020000 8F C9 000B6
; 51 000BD
INSV R1, #0, #24, (R5) ;R1, #0, #24, NEW_TERM_CHAR+4 00 51 F0 000BE
; 65 18 000C1
TSTL G^PARITY_TYPE ;PARITY_TYPE 1630 00000000G 00 D5 000C3
BNEQ 7$ ;7$ 0C 12 000C9
EXTZV #0, #24, (R5), R0 ;#0, #24, NEW_TERM_CHAR+4, R0 1632 18 00 EF 000CB
; 50 65 000CE
INSV #1, #15, #1, R0 ;#1, #15, #1, R0 0F 01 F0 000D0
; 50 01 000D3
BRB 8$ ;8$ 0A 11 000D5
7$: EXTZV #0, #24, (R5), R0 ;#0, #24, NEW_TERM_CHAR+4, R0 1634 18 00 EF 000D7
; 50 65 000DA
INSV #0, #15, #1, R0 ;#0, #15, #1, R0 0F 00 F0 000DC
; 50 01 000DF
8$: INSV R0, #0, #24, (R5) ;R0, #0, #24, NEW_TERM_CHAR+4 00 50 F0 000E1
; 65 18 000E4
BICL3 #16384, -8(R5), R0 ;#16384, OLD_TERM_CHAR+8, R0 1637 F8 A5 00004000 8F CB 000E6
; 50 000EE
BISL3 #262176, R0, 4(R5) ;#262176, R0, NEW_TERM_CHAR+8 1636 50 00040020 8F C9 000EF
; 04 A5 000F6
MOVQ #32, -(SP) ;#32, -(SP) 1640 7E 20 7D 000F8
CLRQ -(SP) ;-(SP) 7E 7C 000FB
PUSHL #12 ;#12 0C DD 000FD
PUSHAB -4(R5) ;NEW_TERM_CHAR FC A5 9F 000FF
CLRQ -(SP) ;-(SP) 7E 7C 00102
MOVQ #35, -(SP) ;#35, -(SP) 7E 23 7D 00104
PUSHL -2960(R5) ;TERM_CHAN F470 C5 DD 00107
CLRL -(SP) ;-(SP) 7E D4 0010B
CALLS #12, (R9) ;#12, SYS$QIOW 69 0C FB 0010D
MOVL R0, R4 ;R0, STATUS 54 50 D0 00110
BLBS R4, 11$ ;STATUS, 11$ 1642 09 54 E8 00113
9$: PUSHL R4 ;STATUS 1645 54 DD 00116
CALLS #1, (R8) ;#1, LIB$SIGNAL 68 01 FB 00118
10$: MOVL R4, R0 ;STATUS, R0 1646 50 54 D0 0011B
RET ; 04 0011E
11$: MOVL #1, 24(R6) ;#1, TERM_FLAG 1649 18 A6 01 D0 0011F
MOVL #1, -2964(R5) ;#1, TERM_FIRST_TIME 1650 F46C C5 01 D0 00123
CLRQ -2972(R5) ;FORCE_ABORT 1652 F464 C5 7C 00128
BLBC 4(AP), 14$ ;POST_QIOS, 14$ 1657 4C 04 AC E9 0012C
CALLS #0, G^U.49 ;#0, U.49 1660 00000000V 00 00 FB 00130
MOVL R0, R4 ;R0, STATUS 54 50 D0 00137
BLBS R4, 12$ ;STATUS, 12$ 1662 07 54 E8 0013A
PUSHL R4 ;STATUS 1665 54 DD 0013D
CALLS #1, (R8) ;#1, LIB$SIGNAL 68 01 FB 0013F
BRB 13$ ;13$ 1666 30 11 00142
12$: BLBS (R7), 14$ ;CONNECT_FLAG, 14$ 1673 35 67 E8 00144
BLBC -2940(R5), 14$ ;SYS_OUTPUT_OPEN, 14$ 30 F484 C5 E9 00147
CALLS #0, G^U.50 ;#0, U.50 1676 00000000V 00 00 FB 0014C
MOVL R0, R4 ;R0, STATUS 54 50 D0 00153
BLBS R4, 14$ ;STATUS, 14$ 1678 23 54 E8 00156
PUSHL R4 ;STATUS 1681 54 DD 00159
CALLS #1, (R8) ;#1, LIB$SIGNAL 68 01 FB 0015B
PUSHL -2960(R5) ;TERM_CHAN 1682 F470 C5 DD 0015E
CALLS #1, G^SYS$CANCEL ;#1, SYS$CANCEL 00000000G 00 01 FB 00162
PUSHL -2960(R5) ;TERM_CHAN 1683 F470 C5 DD 00169
CALLS #1, G^SYS$DASSGN ;#1, SYS$DASSGN 00000000G 00 01 FB 0016D
13$: MOVL #134316266, R0 ;#134316266, R0 1684 50 080180EA 8F D0 00174
RET ; 04 0017B
14$: TSTW -16(R6) ;DEBUG_DESC 1695 F0 A6 B5 0017C
BEQL 15$ ;15$ 18 13 0017F
PUSHAB -1516(R5) ;DEBUG_RAB 1698 FA14 C5 9F 00181
PUSHAB -1596(R5) ;DEBUG_FAB F9C4 C5 9F 00185
PUSHAB -16(R6) ;DEBUG_DESC F0 A6 9F 00189
CALLS #3, (R10) ;#3, LOG_OPEN 6A 03 FB 0018C
BLBC R0, 15$ ;R0, 15$ 07 50 E9 0018F
MOVL #1, -1316(R5) ;#1, DEBUG_REDIRECTED 1700 FADC C5 01 D0 00192
BRB 16$ ;16$ 04 11 00197
15$: CLRL -1316(R5) ;DEBUG_REDIRECTED 1705 FADC C5 D4 00199
16$: TSTW (R11) ;TRANSACTION_DESC 1707 6B B5 0019D
BEQL 17$ ;17$ 36 13 0019F
PUSHAB G^TRANSACTION_RAB ;TRANSACTION_RAB 1710 00000000G 00 9F 001A1
PUSHAB G^TRANSACTION_FAB ;TRANSACTION_FAB 00000000G 00 9F 001A7
PUSHL R11 ;R11 5B DD 001AD
CALLS #3, (R10) ;#3, LOG_OPEN 6A 03 FB 001AF
BLBC R0, 17$ ;R0, 17$ 22 50 E9 001B2
MOVL #1, G^TRANSACTION_OPEN ;#1, TRANSACTION_OPEN 1713 00000000G 00 01 D0 001B5
PUSHAB G^TRANSACTION_RAB ;TRANSACTION_RAB 1715 00000000G 00 9F 001BC
PUSHAB G^P.AAZ ;P.AAZ 00000000' 00 9F 001C2
PUSHAB G^P.AAX ;P.AAX 1714 00000000' 00 9F 001C8
CALLS #3, G^LOG_FAOL ;#3, LOG_FAOL 00000000G 00 03 FB 001CE
BRB 18$ ;18$ 06 11 001D5
17$: CLRL G^TRANSACTION_OPEN ;TRANSACTION_OPEN 1721 00000000G 00 D4 001D7
18$: MOVL #134316043, R0 ;#134316043, R0 1723 50 0801800B 8F D0 001DD
RET ; 04 001E4
; Routine Size: 485 bytes, Routine Base: $CODE$ + 0653
; 1725 1
; 1726 1 %SBTTL 'Communications line -- TERM_CLOSE'
; 1727 1
; 1728 1 GLOBAL ROUTINE TERM_CLOSE =
; 1729 1
; 1730 1 !++
; 1731 1 ! FUNCTIONAL DESCRIPTION:
; 1732 1 !
; 1733 1 ! This routine will deassign the channel that was assigned by
; 1734 1 ! TERM_OPEN.
; 1735 1 !
; 1736 1 ! CALLING SEQUENCE:
; 1737 1 !
; 1738 1 ! TERM_CLOSE();
; 1739 1 !
; 1740 1 ! INPUT PARAMETERS:
; 1741 1 !
; 1742 1 ! None.
; 1743 1 !
; 1744 1 ! IMPLICIT INPUTS:
; 1745 1 !
; 1746 1 ! TERM_CHAN - Channel number to deassign.
; 1747 1 !
; 1748 1 ! OUTPUT PARAMETERS:
; 1749 1 !
; 1750 1 ! None.
; 1751 1 !
; 1752 1 ! IMPLICIT OUTPUTS:
; 1753 1 !
; 1754 1 ! None.
; 1755 1 !
; 1756 1 ! COMPLETION CODES:
; 1757 1 !
; 1758 1 ! SS$_NORMAL or error condition.
; 1759 1 !
; 1760 1 ! SIDE EFFECTS:
; 1761 1 !
; 1762 1 ! None.
; 1763 1 !
; 1764 1 !--
; 1765 1
; 1766 2 BEGIN
; 1767 2
; 1768 2 EXTERNAL ROUTINE
; 1769 2 LOG_FAOL, ! Routine to dump FAOL string
; 1770 2 LOG_CLOSE; ! Routine to close log file
; 1771 2
; 1772 2 EXTERNAL
; 1773 2 TRANSACTION_OPEN,
; 1774 2 TRANSACTION_DESC : BLOCK [8, BYTE],
; 1775 2 TRANSACTION_FAB,
; 1776 2 TRANSACTION_RAB;
; 1777 2
; 1778 2 LOCAL
; 1779 2 PAR, ! Parity being set
; 1780 2 STATUS; ! Status returned by system service
; 1781 2
; 1782 2 STATUS = $CANCEL (CHAN = .TERM_CHAN); ! Kill pending QIO
; 1783 2
; 1784 2 IF .SYS_OUTPUT_OPEN THEN $CANCEL (CHAN = .CONS_CHAN);
; 1785 2
; 1786 2 CONNECT_FLAG = FALSE;
; 1787 2 PAR = (.OLD_PARITY [6, 0, 8, 0] AND (TT$M_ODD OR TT$M_PARITY)) OR TT$M_ALTRPAR;
; 1788 2 ! Only set parity
; P 1789 2 STATUS = $QIOW (CHAN = .TERM_CHAN, FUNC = IO$_SETMODE, P1 = OLD_TERM_CHAR,
; 1790 2 P2 = TC$_CHAR_LENGTH, P4 = .OLD_PARITY [4, 0, 16, 0], P5 = .PAR);
; 1791 2
; 1792 2 IF NOT .STATUS
; 1793 2 THEN
; 1794 3 BEGIN
; 1795 3 LIB$SIGNAL (.STATUS);
; 1796 3 RETURN .STATUS;
; 1797 2 END;
; 1798 2
; 1799 2 !
; 1800 2 ! Flag terminal parameters are reset
; 1801 2 !
; 1802 2 TERM_FLAG = FALSE;
; 1803 2 !
; 1804 2 ! Close the debugging log file
; 1805 2 !
; 1806 2
; 1807 2 IF .DEBUG_REDIRECTED
; 1808 2 THEN
; 1809 3 BEGIN
; 1810 3 LOG_CLOSE (DEBUG_FAB, DEBUG_RAB);
; 1811 3 DEBUG_REDIRECTED = FALSE;
; 1812 2 END;
; 1813 2
; 1814 2 !
; 1815 2 ! Close the transaction log
; 1816 2 !
; 1817 2
; 1818 2 IF .TRANSACTION_OPEN
; 1819 2 THEN
; 1820 3 BEGIN
; 1821 3 LOG_FAOL (%ASCID'!-!-!11%D!/!-!%T!_Closing transaction log file !AS!/',
; 1822 3 UPLIT (0, TRANSACTION_DESC), TRANSACTION_RAB);
; 1823 3 LOG_CLOSE (TRANSACTION_FAB, TRANSACTION_RAB);
; 1824 3 TRANSACTION_OPEN = FALSE;
; 1825 2 END;
; 1826 2
; 1827 2 !
; 1828 2 ! If all worked, say so
; 1829 2 !
; 1830 2 RETURN KER_NORMAL
; 1831 1 END; ! End of TERM_CLOSE
.PSECT $PLIT$,NOWRT,NOEXE,2
P.ABB: .ASCII \!-!-!11%D!/!-!%T!_Closing transaction log file !AS!/\
; 25 31 31 21 2D 21 2D 21 0014C
; 54 25 21 2D 21 2F 21 44 00154
; 6E 69 73 6F 6C 43 5F 21 0015C
; 61 73 6E 61 72 74 20 67 00164
; 6F 6C 20 6E 6F 69 74 63 0016C
; 21 20 65 6C 69 66 20 67 00174
; 2F 21 53 41 0017C
P.ABA: .LONG 17694772 ; 010E0034 00180
.ADDRESS P.ABB ; 00000000' 00184
P.ABC: .LONG 0 ; 00000000 00188
.ADDRESS TRANSACTION_DESC ; 00000000G 0018C
.PSECT $CODE$,NOWRT,2
.ENTRY TERM_CLOSE, ^M<R2,R3,R4,R5,R6,- ;TERM_CLOSE, Save R2,R3,R4,R5,R6,R7 1728 00FC 00000
R7> ;
MOVAB G^TRANSACTION_RAB, R7 ;TRANSACTION_RAB, R7 57 00000000G 00 9E 00002
MOVAB G^TRANSACTION_OPEN, R6 ;TRANSACTION_OPEN, R6 56 00000000G 00 9E 00009
MOVAB G^LOG_CLOSE, R5 ;LOG_CLOSE, R5 55 00000000G 00 9E 00010
MOVAB G^SYS$CANCEL, R4 ;SYS$CANCEL, R4 54 00000000G 00 9E 00017
MOVAB G^U.4, R3 ;U.4, R3 53 00000000' 00 9E 0001E
PUSHL (R3) ;TERM_CHAN 1782 63 DD 00025
CALLS #1, (R4) ;#1, SYS$CANCEL 64 01 FB 00027
MOVL R0, R2 ;R0, STATUS 52 50 D0 0002A
BLBC 20(R3), 1$ ;SYS_OUTPUT_OPEN, 1$ 1784 06 14 A3 E9 0002D
PUSHL 12(R3) ;CONS_CHAN 0C A3 DD 00031
CALLS #1, (R4) ;#1, SYS$CANCEL 64 01 FB 00034
1$: CLRL G^CONNECT_FLAG ;CONNECT_FLAG 1786 00000000G 00 D4 00037
MOVZBL 2942(R3), R0 ;OLD_PARITY+6, R0 1787 50 0B7E C3 9A 0003D
BICL2 #-193, R0 ;#-193, R0 50 FFFFFF3F 8F CA 00042
BISB2 #32, R0 ;#32, PAR 50 20 88 00049
CLRL -(SP) ;-(SP) 1790 7E D4 0004C
PUSHL R0 ;PAR 50 DD 0004E
MOVZWL 2940(R3), -(SP) ;OLD_PARITY+4, -(SP) 7E 0B7C C3 3C 00050
MOVQ #12, -(SP) ;#12, -(SP) 7E 0C 7D 00055
PUSHAB 2944(R3) ;OLD_TERM_CHAR 0B80 C3 9F 00058
CLRQ -(SP) ;-(SP) 7E 7C 0005C
MOVQ #35, -(SP) ;#35, -(SP) 7E 23 7D 0005E
PUSHL (R3) ;TERM_CHAN 63 DD 00061
CLRL -(SP) ;-(SP) 7E D4 00063
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 00065
MOVL R0, R2 ;R0, STATUS 52 50 D0 0006C
BLBS R2, 2$ ;STATUS, 2$ 1792 0D 52 E8 0006F
PUSHL R2 ;STATUS 1795 52 DD 00072
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00074
MOVL R2, R0 ;STATUS, R0 1796 50 52 D0 0007B
RET ; 04 0007E
2$: CLRL G^TERM_FLAG ;TERM_FLAG 1802 00000000' 00 D4 0007F
BLBC 1644(R3), 3$ ;DEBUG_REDIRECTED, 3$ 1807 0F 066C C3 E9 00085
PUSHAB 1444(R3) ;DEBUG_RAB 1810 05A4 C3 9F 0008A
PUSHAB 1364(R3) ;DEBUG_FAB 0554 C3 9F 0008E
CALLS #2, (R5) ;#2, LOG_CLOSE 65 02 FB 00092
CLRL 1644(R3) ;DEBUG_REDIRECTED 1811 066C C3 D4 00095
3$: BLBC (R6), 4$ ;TRANSACTION_OPEN, 4$ 1818 22 66 E9 00099
PUSHL R7 ;R7 1822 57 DD 0009C
PUSHAB G^P.ABC ;P.ABC 00000000' 00 9F 0009E
PUSHAB G^P.ABA ;P.ABA 1821 00000000' 00 9F 000A4
CALLS #3, G^LOG_FAOL ;#3, LOG_FAOL 00000000G 00 03 FB 000AA
PUSHL R7 ;R7 1823 57 DD 000B1
PUSHAB G^TRANSACTION_FAB ;TRANSACTION_FAB 00000000G 00 9F 000B3
CALLS #2, (R5) ;#2, LOG_CLOSE 65 02 FB 000B9
CLRL (R6) ;TRANSACTION_OPEN 1824 66 D4 000BC
4$: MOVL #134316043, R0 ;#134316043, R0 1830 50 0801800B 8F D0 000BE
RET ; 04 000C5
; Routine Size: 198 bytes, Routine Base: $CODE$ + 0838
; 1832 1
; 1833 1 %SBTTL 'Communications line -- SEND'
; 1834 1
; 1835 1 GLOBAL ROUTINE SEND (ADDRESS, LENGTH) =
; 1836 1
; 1837 1 !++
; 1838 1 ! FUNCTIONAL DESCRIPTION:
; 1839 1 !
; 1840 1 ! This routine will send a stream of 8-bit bytes over the terminal
; 1841 1 ! line to the remote KERMIT. This routine is called from KERMSG.
; 1842 1 !
; 1843 1 ! CALLING SEQUENCE:
; 1844 1 !
; 1845 1 ! SEND(Address-of-msg, Length-of-msg);
; 1846 1 !
; 1847 1 ! INPUT PARAMETERS:
; 1848 1 !
; 1849 1 ! None.
; 1850 1 !
; 1851 1 ! IMPLICIT INPUTS:
; 1852 1 !
; 1853 1 ! TERM_CHAN - Channel number to deassign.
; 1854 1 !
; 1855 1 ! OUTPUT PARAMETERS:
; 1856 1 !
; 1857 1 ! None.
; 1858 1 !
; 1859 1 ! IMPLICIT OUTPUTS:
; 1860 1 !
; 1861 1 ! None.
; 1862 1 !
; 1863 1 ! COMPLETION CODES:
; 1864 1 !
; 1865 1 ! SS$_NORMAL or error condition.
; 1866 1 !
; 1867 1 ! SIDE EFFECTS:
; 1868 1 !
; 1869 1 ! None.
; 1870 1 !
; 1871 1 !--
; 1872 1
; 1873 2 BEGIN
; 1874 2
; 1875 2 LOCAL
; 1876 2 CUR_EFN, ! Current EFN settings
; 1877 2 STATUS; ! Status returned by $QIOW
; 1878 2
; 1879 2 !
; 1880 2 ! If we already got a complete buffer of input we should ignore it.
; 1881 2 ! This is because we are probably retransmitting something and the
; 1882 2 ! incoming data is the response to the previous copy of this message.
; 1883 2 ! If we don't ignore it, we could get into a situation where every message
; 1884 2 ! gets transmitted twice.
; 1885 2 !
; 1886 2 STATUS = $READEF (EFN = TERM_EFN, STATE = CUR_EFN);
; 1887 2
; 1888 2 IF (.CUR_EFN AND 1^TERM_EFN) EQL 1 THEN DO_RECEIVE_QIO ();
; 1889 2
; P 1890 2 STATUS = $QIOW (CHAN = .TERM_CHAN, EFN = TERM_O_EFN, FUNC = IO$_WRITEVBLK + IO$M_NOFORMAT,
; 1891 2 P1 = .ADDRESS, P2 = .LENGTH);
; 1892 2
; 1893 2 IF .STATUS EQL SS$_NORMAL
; 1894 2 THEN
; 1895 2 RETURN KER_NORMAL
; 1896 2 ELSE
; 1897 3 BEGIN
; 1898 3 LIB$SIGNAL (.STATUS);
; 1899 3 RETURN .STATUS;
; 1900 2 END;
; 1901 2
; 1902 1 END; ! End of SEND
.EXTRN SYS$READEF
.ENTRY SEND, ^M<R2> ;SEND, Save R2 1835 0004 00000
SUBL2 #4, SP ;#4, SP 5E 04 C2 00002
PUSHL SP ;SP 1886 5E DD 00005
PUSHL #2 ;#2 02 DD 00007
CALLS #2, G^SYS$READEF ;#2, SYS$READEF 00000000G 00 02 FB 00009
MOVL R0, R2 ;R0, STATUS 52 50 D0 00010
BICL3 #-5, (SP), R0 ;#-5, CUR_EFN, R0 1888 6E FFFFFFFB 8F CB 00013
; 50 0001A
CMPL R0, #1 ;R0, #1 01 50 D1 0001B
BNEQ 1$ ;1$ 07 12 0001E
CALLS #0, G^U.49 ;#0, U.49 00000000V 00 00 FB 00020
1$: CLRQ -(SP) ;-(SP) 1891 7E 7C 00027
CLRQ -(SP) ;-(SP) 7E 7C 00029
MOVQ 4(AP), -(SP) ;ADDRESS, -(SP) 7E 04 AC 7D 0002B
CLRQ -(SP) ;-(SP) 7E 7C 0002F
CLRL -(SP) ;-(SP) 7E D4 00031
MOVZWL #304, -(SP) ;#304, -(SP) 7E 0130 8F 3C 00033
PUSHL G^U.4 ;U.4 00000000' 00 DD 00038
PUSHL #4 ;#4 04 DD 0003E
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 00040
MOVL R0, R2 ;R0, STATUS 52 50 D0 00047
CMPL R2, #1 ;STATUS, #1 1893 01 52 D1 0004A
BNEQ 2$ ;2$ 08 12 0004D
MOVL #134316043, R0 ;#134316043, R0 1895 50 0801800B 8F D0 0004F
RET ; 04 00056
2$: PUSHL R2 ;STATUS 1898 52 DD 00057
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00059
MOVL R2, R0 ;STATUS, R0 50 52 D0 00060
RET ; 1899 04 00063
; Routine Size: 100 bytes, Routine Base: $CODE$ + 08FE
; 1903 1
; 1904 1 %SBTTL 'Communications line -- RECEIVE'
; 1905 1
; 1906 1 GLOBAL ROUTINE RECEIVE (ADDRESS, LENGTH) =
; 1907 1
; 1908 1 !++
; 1909 1 ! FUNCTIONAL DESCRIPTION:
; 1910 1 !
; 1911 1 ! This routine will receive a stream of 8-bit bytes over the terminal
; 1912 1 ! line to the remote KERMIT. This routine is called from KERMSG.
; 1913 1 ! The text that is stored will always contain the control-A as the
; 1914 1 ! first character.
; 1915 1 !
; 1916 1 ! CALLING SEQUENCE:
; 1917 1 !
; 1918 1 ! RECEIVE(Address-of-msg);
; 1919 1 !
; 1920 1 ! INPUT PARAMETERS:
; 1921 1 !
; 1922 1 ! None.
; 1923 1 !
; 1924 1 ! IMPLICIT INPUTS:
; 1925 1 !
; 1926 1 ! TERM_CHAN - Channel number to deassign.
; 1927 1 !
; 1928 1 ! OUTPUT PARAMETERS:
; 1929 1 !
; 1930 1 ! None.
; 1931 1 !
; 1932 1 ! IMPLICIT OUTPUTS:
; 1933 1 !
; 1934 1 ! None.
; 1935 1 !
; 1936 1 ! COMPLETION CODES:
; 1937 1 !
; 1938 1 ! SS$_NORMAL or error condition.
; 1939 1 !
; 1940 1 ! SIDE EFFECTS:
; 1941 1 !
; 1942 1 ! None.
; 1943 1 !
; 1944 1 !--
; 1945 1
; 1946 2 BEGIN
; 1947 2
; 1948 2 EXTERNAL
; 1949 2 RCV_SOH; ! Character to use for start of packet
; 1950 2
; 1951 2 LOCAL
; 1952 2 QWORD_TIMEOUT : VECTOR [2, LONG], ! Quad word TIMEOUT value
; 1953 2 TIMER_VALUE : VECTOR [2, LONG], ! Quad word TIME value
; 1954 2 OLD_POINTER, ! Pointer into the message
; 1955 2 NEW_POINTER, ! Other pointer for finding SOH
; 1956 2 CUR_LENGTH, ! Running length while finding SOH
; 1957 2 CUR_EFN, ! Current EFN value
; 1958 2 STATUS; ! Status returned by $QIO
; 1959 2
; 1960 2 OWN
; 1961 2 INT_CHR_SEEN; ! Interrupt character seen last
; 1962 2
; 1963 2 !
; 1964 2 ! Flag we haven't seen a ^Y yet. We must get two control-Y's in fairly
; 1965 2 ! quick succession (no timeouts in between) in order to give up.
; 1966 2 !
; 1967 2 INT_CHR_SEEN = FALSE;
; 1968 2 !
; 1969 2 ! Set up the timer if we have a time out parameter
; 1970 2 !
; 1971 2
; 1972 2 IF NOT .FORCE_TIMEOUT THEN STATUS = $CLREF (EFN = TIME_EFN);
; 1973 2
; 1974 2 IF .SEND_TIMEOUT GTR 0
; 1975 2 THEN
; 1976 3 BEGIN
; 1977 3 STATUS = $CANTIM (REQIDT = TIME_EFN);
; 1978 3 STATUS = $GETTIM (TIMADR = TIMER_VALUE);
; 1979 3 STATUS = LIB$EMUL (SEND_TIMEOUT, UPLIT (10000000), UPLIT (0), QWORD_TIMEOUT);
; 1980 3 STATUS = LIB$ADDX (TIMER_VALUE, QWORD_TIMEOUT, QWORD_TIMEOUT);
; 1981 3 STATUS = $SETIMR (DAYTIM = QWORD_TIMEOUT, EFN = TIME_EFN, REQIDT = TIME_EFN);
; 1982 2 END;
; 1983 2
; 1984 2 !
; 1985 2 ! Loop until we get something that is acceptable
; 1986 2 !
; 1987 2
; 1988 2 WHILE TRUE DO
; 1989 3 BEGIN
; 1990 3 !
; 1991 3 ! Wait for something to happen. Either the terminal EFN will come up
; 1992 3 ! indicating we have some data, or the timer EFN will indicate that
; 1993 3 ! the time has run out.
; 1994 3 !
; 1995 3 STATUS = $WFLOR (EFN = TERM_EFN, MASK = (1^TERM_EFN OR 1^TIME_EFN));
; 1996 3 STATUS = $READEF (EFN = TERM_EFN, STATE = CUR_EFN);
; 1997 3 FORCE_TIMEOUT = FALSE; ! Timeout had it chance to happen
; 1998 3 !
; 1999 3 ! If the terminal EFN is not set, the time must have expired. Therefore,
; 2000 3 ! we have timed out, and need to return that fact.
; 2001 3 !
; 2002 3
; 2003 3 IF (.CUR_EFN AND 1^TERM_EFN) EQL 0 THEN RETURN KER_TIMEOUT;
; 2004 3
; 2005 3 !
; 2006 3 ! If we have a request to abort, start it up the chain.
; 2007 3 !
; 2008 3
; 2009 3 IF .FORCE_ABORT
; 2010 3 THEN
; 2011 4 BEGIN
; 2012 4 STATUS = $CANTIM (REQIDT = TIME_EFN);
; 2013 4 RETURN KER_ABORTED;
; 2014 3 END;
; 2015 3
; 2016 3 !
; 2017 3 ! Check if the QIO completed successfully. If not, we will return
; 2018 3 ! an error.
; 2019 3 !
; 2020 3
; 2021 3 IF NOT .IO_STATUS [0]
; 2022 3 THEN
; 2023 4 BEGIN
; 2024 4 LIB$SIGNAL (.IO_STATUS [0]);
; 2025 4 RETURN KER_RECERR;
; 2026 3 END;
; 2027 3
; 2028 3 !
; 2029 3 ! First check for a control-Y as the terminator. If it was, then
; 2030 3 ! just abort now, since the user probably typed it.
; 2031 3 !
; 2032 3
; 2033 3 IF .CONNECT_FLAG
; 2034 3 THEN
; 2035 3
; 2036 4 IF (.IO_STATUS [2] EQL CHR_CTL_Y) AND (.RCV_EOL NEQ CHR_CTL_Y)
; 2037 3 THEN
; 2038 4 BEGIN
; 2039 4
; 2040 4 IF .INT_CHR_SEEN AND .IO_STATUS [1] EQL 0
; 2041 4 THEN
; 2042 5 BEGIN
; 2043 5 STATUS = $CANTIM (REQIDT = TIME_EFN);
; 2044 5 RETURN KER_ABORTED
; 2045 5 END
; 2046 4 ELSE
; 2047 5 BEGIN
; 2048 5 INT_CHR_SEEN = TRUE;
; 2049 5 IO_STATUS [1] = 0; ! Force no input seen
; 2050 5 END
; 2051 5
; 2052 4 END
; 2053 3 ELSE
; 2054 3 INT_CHR_SEEN = FALSE; ! Last character not ^Y
; 2055 3
; 2056 3 !
; 2057 3 ! Now find the final start of header character in the buffer. We
; 2058 3 ! will only return the text from that point on. If there is no SOH,
; 2059 3 ! then just get another buffer. It was probably noise on the line.
; 2060 3 !
; 2061 3 OLD_POINTER = CH$PTR (RECV_BUFFER, 0, CHR_SIZE);
; 2062 3 CUR_LENGTH = .IO_STATUS [1]; ! Length without terminating character
; 2063 3 NEW_POINTER = CH$FIND_CH (.CUR_LENGTH, .OLD_POINTER, .RCV_SOH);
; 2064 3 !
; 2065 3 ! If we found a start of header character, then we probably have something
; 2066 3 ! to return. However, first we must find the last start of header, in case
; 2067 3 ! something is garbled.
; 2068 3 !
; 2069 3
; 2070 3 IF NOT CH$FAIL (.NEW_POINTER)
; 2071 3 THEN
; 2072 4 BEGIN
; 2073 4 !
; 2074 4 ! Search until we can't find any more start of headers, or until we run
; 2075 4 ! out of string to search (last character before EOL is an SOH).
; 2076 4 !
; 2077 4
; 2078 4 WHILE (.CUR_LENGTH GTR 0) AND ( NOT CH$FAIL (.NEW_POINTER)) DO
; 2079 5 BEGIN
; 2080 5 CUR_LENGTH = .CUR_LENGTH - CH$DIFF (.NEW_POINTER, .OLD_POINTER);
; 2081 5 ! Adjust the length for the characters we are skipping
; 2082 5 OLD_POINTER = .NEW_POINTER; ! Remember where we start
; 2083 5 NEW_POINTER = CH$FIND_CH (.CUR_LENGTH - 1, CH$PLUS (.OLD_POINTER, 1), .RCV_SOH);
; 2084 5 ! Find the next SOH (if any)
; 2085 4 END;
; 2086 4
; 2087 4 !
; 2088 4 ! If we have something left of the buffer, move from the SOH until the end
; 2089 4 ! into the callers buffer.
; 2090 4 !
; 2091 4
; 2092 5 IF (.CUR_LENGTH GTR 0)
; 2093 4 THEN
; 2094 5 BEGIN
; 2095 5 .LENGTH = .CUR_LENGTH + 1;
; 2096 5
; 2097 5 IF .PARITY_TYPE EQL PR_NONE ! Have eight-bit?
; 2098 5 THEN
; 2099 5 CH$MOVE (.CUR_LENGTH + 1, .OLD_POINTER, CH$PTR (.ADDRESS, 0, CHR_SIZE))
; 2100 5 ELSE
; 2101 6 BEGIN
; 2102 6 NEW_POINTER = CH$PTR (.ADDRESS, 0, CHR_SIZE);
; 2103 6
; 2104 6 DECR CUR_LENGTH FROM .CUR_LENGTH TO 0 DO
; 2105 6 CH$WCHAR_A ((CH$RCHAR_A (OLD_POINTER) AND %O'177'), NEW_POINTER);
; 2106 6
; 2107 5 END;
; 2108 5
; 2109 5 EXITLOOP
; 2110 5 END
; 2111 5
; 2112 3 END; ! End of IF NOT CH$FAIL(.POINTER)
; 2113 3
; 2114 3 !
; 2115 3 ! If we have gotten here, we have input a buffer without a valid message.
; 2116 3 ! Make sure we post the QIO again
; 2117 3 !
; 2118 3 STATUS = DO_RECEIVE_QIO ();
; 2119 3
; 2120 3 IF NOT .STATUS
; 2121 3 THEN
; 2122 4 BEGIN
; 2123 4 LIB$SIGNAL (.STATUS);
; 2124 4 RETURN KER_RECERR
; 2125 3 END;
; 2126 3
; 2127 2 END; ! End of WHILE TRUE DO
; 2128 2
; 2129 2 !
; 2130 2 ! If we have gotten here, we have a valid message to return.
; 2131 2 ! Post the QIO so the buffer is available for the next message.
; 2132 2 !
; 2133 2 STATUS = DO_RECEIVE_QIO ();
; 2134 2
; 2135 2 IF NOT .STATUS
; 2136 2 THEN
; 2137 3 BEGIN
; 2138 3 LIB$SIGNAL (.STATUS);
; 2139 3 RETURN KER_RECERR
; 2140 2 END;
; 2141 2
; 2142 2 RETURN KER_NORMAL; ! Return happy
; 2143 1 END; ! End of RECEIVE
.PSECT $OWN$,NOEXE,2
;INT_CHR_SEEN
U.72: .BLKB 4 ; 00BA4
.PSECT $PLIT$,NOWRT,NOEXE,2
P.ABD: .LONG 10000000 ; 00989680 00190
P.ABE: .LONG 0 ; 00000000 00194
.EXTRN RCV_SOH, SYS$CLREF, SYS$CANTIM, SYS$GETTIM, SYS$SETIMR, SYS$WFLOR
.PSECT $CODE$,NOWRT,2
.ENTRY RECEIVE, ^M<R2,R3,R4,R5,R6,R7,- ;RECEIVE, Save R2,R3,R4,R5,R6,R7,R8,- 1906 0FFC 00000
R8,R9,R10,R11> ;R9,R10,R11
MOVAB G^SEND_TIMEOUT, R11 ;SEND_TIMEOUT, R11 5B 00000000G 00 9E 00002
MOVAB G^U.72, R10 ;U.72, R10 5A 00000000' 00 9E 00009
SUBL2 #20, SP ;#20, SP 5E 14 C2 00010
CLRL (R10) ;INT_CHR_SEEN 1967 6A D4 00013
BLBS -2976(R10), 1$ ;FORCE_TIMEOUT, 1$ 1972 0C F460 CA E8 00015
PUSHL #3 ;#3 03 DD 0001A
CALLS #1, G^SYS$CLREF ;#1, SYS$CLREF 00000000G 00 01 FB 0001C
MOVL R0, R9 ;R0, STATUS 59 50 D0 00023
1$: TSTL (R11) ;SEND_TIMEOUT 1974 6B D5 00026
BLEQ 2$ ;2$ 5C 15 00028
MOVQ #3, -(SP) ;#3, -(SP) 1977 7E 03 7D 0002A
CALLS #2, G^SYS$CANTIM ;#2, SYS$CANTIM 00000000G 00 02 FB 0002D
MOVL R0, R9 ;R0, STATUS 59 50 D0 00034
PUSHAB 4(SP) ;TIMER_VALUE 1978 04 AE 9F 00037
CALLS #1, G^SYS$GETTIM ;#1, SYS$GETTIM 00000000G 00 01 FB 0003A
MOVL R0, R9 ;R0, STATUS 59 50 D0 00041
PUSHAB 12(SP) ;QWORD_TIMEOUT 1979 0C AE 9F 00044
PUSHAB G^P.ABE ;P.ABE 00000000' 00 9F 00047
PUSHAB G^P.ABD ;P.ABD 00000000' 00 9F 0004D
PUSHL R11 ;R11 5B DD 00053
CALLS #4, G^LIB$EMUL ;#4, LIB$EMUL 00000000G 00 04 FB 00055
MOVL R0, R9 ;R0, STATUS 59 50 D0 0005C
PUSHAB 12(SP) ;QWORD_TIMEOUT 1980 0C AE 9F 0005F
PUSHAB 16(SP) ;QWORD_TIMEOUT 10 AE 9F 00062
PUSHAB 12(SP) ;TIMER_VALUE 0C AE 9F 00065
CALLS #3, G^LIB$ADDX ;#3, LIB$ADDX 00000000G 00 03 FB 00068
MOVL R0, R9 ;R0, STATUS 59 50 D0 0006F
MOVQ #3, -(SP) ;#3, -(SP) 1981 7E 03 7D 00072
CLRL -(SP) ;-(SP) 7E D4 00075
PUSHAB 24(SP) ;QWORD_TIMEOUT 18 AE 9F 00077
PUSHL #3 ;#3 03 DD 0007A
CALLS #5, G^SYS$SETIMR ;#5, SYS$SETIMR 00000000G 00 05 FB 0007C
MOVL R0, R9 ;R0, STATUS 59 50 D0 00083
2$: PUSHL #12 ;#12 1995 0C DD 00086
PUSHL #2 ;#2 02 DD 00088
CALLS #2, G^SYS$WFLOR ;#2, SYS$WFLOR 00000000G 00 02 FB 0008A
MOVL R0, R9 ;R0, STATUS 59 50 D0 00091
PUSHL SP ;SP 1996 5E DD 00094
PUSHL #2 ;#2 02 DD 00096
CALLS #2, G^SYS$READEF ;#2, SYS$READEF 00000000G 00 02 FB 00098
MOVL R0, R9 ;R0, STATUS 59 50 D0 0009F
CLRL -2976(R10) ;FORCE_TIMEOUT 1997 F460 CA D4 000A2
BBS #2, (SP), 3$ ;#2, CUR_EFN, 3$ 2003 6E 02 E0 000A6
; 08 000A9
MOVL #134316248, R0 ;#134316248, R0 50 080180D8 8F D0 000AA
RET ; 04 000B1
3$: BLBS -2980(R10), 5$ ;FORCE_ABORT, 5$ 2009 2D F45C CA E8 000B2
MOVZWL -1064(R10), R0 ;IO_STATUS, R0 2021 50 FBD8 CA 3C 000B7
BLBS R0, 4$ ;R0, 4$ 05 50 E8 000BC
PUSHL R0 ;R0 2024 50 DD 000BF
BRW 19$ ;19$ 00D6 31 000C1
4$: BLBC G^CONNECT_FLAG, 8$ ;CONNECT_FLAG, 8$ 2033 39 00000000G 00 E9 000C4
CMPW -1060(R10), #25 ;IO_STATUS+4, #25 2036 19 FBDC CA B1 000CB
BNEQ 7$ ;7$ 30 12 000D0
CMPL G^RCV_EOL, #25 ;RCV_EOL, #25 19 00000000G 00 D1 000D2
BEQL 7$ ;7$ 27 13 000D9
BLBC (R10), 6$ ;INT_CHR_SEEN, 6$ 2040 1B 6A E9 000DB
TSTW -1062(R10) ;IO_STATUS+2 FBDA CA B5 000DE
BNEQ 6$ ;6$ 15 12 000E2
5$: MOVQ #3, -(SP) ;#3, -(SP) 2043 7E 03 7D 000E4
CALLS #2, G^SYS$CANTIM ;#2, SYS$CANTIM 00000000G 00 02 FB 000E7
MOVL R0, R9 ;R0, STATUS 59 50 D0 000EE
MOVL #134316258, R0 ;#134316258, R0 2044 50 080180E2 8F D0 000F1
RET ; 04 000F8
6$: MOVL #1, (R10) ;#1, INT_CHR_SEEN 2048 6A 01 D0 000F9
CLRW -1062(R10) ;IO_STATUS+2 2049 FBDA CA B4 000FC
BRB 8$ ;8$ 02 11 00100
7$: CLRL (R10) ;INT_CHR_SEEN 2054 6A D4 00102
8$: MOVAB -1056(R10), R6 ;RECV_BUFFER, OLD_POINTER 2061 56 FBE0 CA 9E 00104
MOVZWL -1062(R10), R7 ;IO_STATUS+2, CUR_LENGTH 2062 57 FBDA CA 3C 00109
MOVL G^RCV_SOH, R2 ;RCV_SOH, R2 2063 52 00000000G 00 D0 0010E
LOCC R2, R7, (R6) ;R2, CUR_LENGTH, (OLD_POINTER) 57 52 3A 00115
; 66 00118
BNEQ 9$ ;9$ 02 12 00119
CLRL R1 ;R1 51 D4 0011B
9$: MOVL R1, R8 ;R1, NEW_POINTER 58 51 D0 0011D
BEQL 16$ ;16$ 2070 59 13 00120
10$: TSTL R7 ;CUR_LENGTH 2078 57 D5 00122
BLEQ 12$ ;12$ 20 15 00124
TSTL R8 ;NEW_POINTER 58 D5 00126
BEQL 12$ ;12$ 1C 13 00128
SUBL3 R8, R6, R0 ;NEW_POINTER, OLD_POINTER, R0 2080 56 58 C3 0012A
; 50 0012D
ADDL2 R0, R7 ;R0, CUR_LENGTH 57 50 C0 0012E
MOVL R8, R6 ;NEW_POINTER, OLD_POINTER 2082 56 58 D0 00131
MOVAB -1(R7), R0 ;-1(R7), R0 2083 50 FF A7 9E 00134
LOCC R2, R0, 1(R6) ;R2, R0, 1(OLD_POINTER) 50 52 3A 00138
; 01 A6 0013B
BNEQ 11$ ;11$ 02 12 0013D
CLRL R1 ;R1 51 D4 0013F
11$: MOVL R1, R8 ;R1, NEW_POINTER 58 51 D0 00141
BRB 10$ ;10$ DC 11 00144
12$: TSTL R7 ;CUR_LENGTH 2092 57 D5 00146
BLEQ 16$ ;16$ 31 15 00148
MOVAB 1(R7), R0 ;1(R7), R0 2095 50 01 A7 9E 0014A
MOVL R0, @8(AP) ;R0, @LENGTH 08 BC 50 D0 0014E
TSTL G^PARITY_TYPE ;PARITY_TYPE 2097 00000000G 00 D5 00152
BNEQ 13$ ;13$ 07 12 00158
MOVC3 R0, (R6), @4(AP) ;R0, (OLD_POINTER), @ADDRESS 2099 66 50 28 0015A
; 04 BC 0015D
BRB 17$ ;17$ 2A 11 0015F
13$: MOVL 4(AP), R8 ;ADDRESS, NEW_POINTER 2102 58 04 AC D0 00161
MOVAB 1(R7), R0 ;1(R7), CUR_LENGTH 2104 50 01 A7 9E 00165
BRB 15$ ;15$ 0B 11 00169
14$: MOVZBL (R6)+, R1 ;(OLD_POINTER)+, R1 2105 51 86 9A 0016B
EXTZV #0, #7, R1, R2 ;#0, #7, R1, R2 07 00 EF 0016E
; 52 51 00171
MOVB R2, (R8)+ ;R2, (NEW_POINTER)+ 88 52 90 00173
15$: SOBGEQ R0, 14$ ;CUR_LENGTH, 14$ F2 50 F4 00176
BRB 17$ ;17$ 2109 10 11 00179
16$: CALLS #0, G^U.49 ;#0, U.49 2118 00000000V 00 00 FB 0017B
MOVL R0, R9 ;R0, STATUS 59 50 D0 00182
BLBC R9, 18$ ;STATUS, 18$ 2120 10 59 E9 00185
BRW 2$ ;2$ FEFB 31 00188
17$: CALLS #0, G^U.49 ;#0, U.49 2133 00000000V 00 00 FB 0018B
MOVL R0, R9 ;R0, STATUS 59 50 D0 00192
BLBS R9, 20$ ;STATUS, 20$ 2135 11 59 E8 00195
18$: PUSHL R9 ;STATUS 2138 59 DD 00198
19$: CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 0019A
MOVL #134316266, R0 ;#134316266, R0 2139 50 080180EA 8F D0 001A1
RET ; 04 001A8
20$: MOVL #134316043, R0 ;#134316043, R0 2142 50 0801800B 8F D0 001A9
RET ; 04 001B0
; Routine Size: 433 bytes, Routine Base: $CODE$ + 0962
; 2144 1
; 2145 1 %SBTTL 'Communications line -- IBM_WAIT'
; 2146 1
; 2147 1 GLOBAL ROUTINE IBM_WAIT =
; 2148 1
; 2149 1 !++
; 2150 1 ! FUNCTIONAL DESCRIPTION:
; 2151 1 !
; 2152 1 ! This routine will wait until the IBM turnaround character
; 2153 1 ! is seen on the communications line, or until the timeout
; 2154 1 ! parameter is exceeded.
; 2155 1 !
; 2156 1 ! CALLING SEQUENCE:
; 2157 1 !
; 2158 1 ! STATUS = IBM_WAIT ();
; 2159 1 !
; 2160 1 ! INPUT PARAMETERS:
; 2161 1 !
; 2162 1 ! None.
; 2163 1 !
; 2164 1 ! IMPLICIT INPUTS:
; 2165 1 !
; 2166 1 ! TERM_CHAN - Channel number for terminal
; 2167 1 !
; 2168 1 ! OUTPUT PARAMETERS:
; 2169 1 !
; 2170 1 ! Status value is returned as routine value.
; 2171 1 !
; 2172 1 ! IMPLICIT OUTPUTS:
; 2173 1 !
; 2174 1 ! None.
; 2175 1 !
; 2176 1 ! COMPLETION CODES:
; 2177 1 !
; 2178 1 ! SS$_NORMAL or error condition.
; 2179 1 !
; 2180 1 ! SIDE EFFECTS:
; 2181 1 !
; 2182 1 ! None.
; 2183 1 !
; 2184 1 !--
; 2185 1
; 2186 2 BEGIN
; 2187 2
; 2188 2 LOCAL
; 2189 2 QWORD_TIMEOUT : VECTOR [2, LONG], ! Quad word TIMEOUT value
; 2190 2 TIMER_VALUE : VECTOR [2, LONG], ! Quad word TIME value
; 2191 2 CUR_EFN, ! Current EFN value
; 2192 2 STATUS; ! Status returned by $QIO
; 2193 2
; 2194 2 !
; 2195 2 ! Set up the timer if we have a time out parameter
; 2196 2 !
; 2197 2 STATUS = $CLREF (EFN = TIME_EFN);
; 2198 2
; 2199 2 IF .SEND_TIMEOUT GTR 0
; 2200 2 THEN
; 2201 3 BEGIN
; 2202 3 STATUS = $CANTIM (REQIDT = TIME_EFN);
; 2203 3 STATUS = $GETTIM (TIMADR = TIMER_VALUE);
; 2204 3 STATUS = LIB$EMUL (SEND_TIMEOUT, UPLIT (1000000), UPLIT (0), QWORD_TIMEOUT);
; 2205 3 STATUS = LIB$ADDX (TIMER_VALUE, QWORD_TIMEOUT, QWORD_TIMEOUT);
; 2206 3 STATUS = $SETIMR (DAYTIM = QWORD_TIMEOUT, EFN = TIME_EFN, REQIDT = TIME_EFN);
; 2207 2 END;
; 2208 2
; 2209 2 !
; 2210 2 ! Loop until we get something that is acceptable
; 2211 2 !
; 2212 2
; 2213 2 WHILE TRUE DO
; 2214 3 BEGIN
; 2215 3 !
; 2216 3 ! Wait for something to happen. Either the terminal EFN will come up
; 2217 3 ! indicating we have some data, or the timer EFN will indicate that
; 2218 3 ! the time has run out.
; 2219 3 !
; 2220 3 STATUS = $WFLOR (EFN = TERM_EFN, MASK = (1^TERM_EFN OR 1^TIME_EFN));
; 2221 3 STATUS = $READEF (EFN = TERM_EFN, STATE = CUR_EFN);
; 2222 3 !
; 2223 3 ! If the terminal EFN is not set, the time must have expired. Therefore,
; 2224 3 ! pretend we got the character.
; 2225 3 !
; 2226 3
; 2227 3 IF (.CUR_EFN AND 1^TERM_EFN) EQL 0 THEN RETURN KER_NORMAL;
; 2228 3
; 2229 3 !
; 2230 3 ! Check if the QIO completed successfully. If not, we will return
; 2231 3 ! an error.
; 2232 3 !
; 2233 3
; 2234 3 IF NOT .IO_STATUS [0]
; 2235 3 THEN
; 2236 4 BEGIN
; 2237 4 LIB$SIGNAL (.IO_STATUS [0]);
; 2238 4 RETURN KER_RECERR;
; 2239 3 END;
; 2240 3
; 2241 3 !
; 2242 3 ! First check for a control-Y as the terminator. If it was, then
; 2243 3 ! just abort now, since the user probably typed it.
; 2244 3 !
; 2245 3
; 2246 3 IF .CONNECT_FLAG
; 2247 3 THEN
; 2248 3
; 2249 4 IF (.IO_STATUS [2] EQL CHR_CTL_Y) AND (.RCV_EOL NEQ CHR_CTL_Y)
; 2250 3 THEN
; 2251 4 BEGIN
; 2252 4 STATUS = $CANTIM (REQIDT = TIME_EFN);
; 2253 4 RETURN KER_ABORTED
; 2254 3 END;
; 2255 3
; 2256 3 ! Check if terminator was the turnaround character
; 2257 3
; 2258 3 IF (.IO_STATUS [2] EQL .IBM_CHAR) THEN EXITLOOP;
; 2259 3
; 2260 3 !
; 2261 3 ! Make sure we post the QIO again
; 2262 3 !
; 2263 3 STATUS = DO_RECEIVE_QIO ();
; 2264 3
; 2265 3 IF NOT .STATUS
; 2266 3 THEN
; 2267 4 BEGIN
; 2268 4 LIB$SIGNAL (.STATUS);
; 2269 4 RETURN KER_RECERR
; 2270 3 END;
; 2271 3
; 2272 2 END; ! End of WHILE TRUE DO
; 2273 2
; 2274 2 !
; 2275 2 ! If we have gotten here, we have a valid message to return.
; 2276 2 ! Post the QIO so the buffer is available for the next message.
; 2277 2 !
; 2278 2 STATUS = DO_RECEIVE_QIO ();
; 2279 2
; 2280 2 IF NOT .STATUS
; 2281 2 THEN
; 2282 3 BEGIN
; 2283 3 LIB$SIGNAL (.STATUS);
; 2284 3 RETURN KER_RECERR
; 2285 2 END;
; 2286 2
; 2287 2 RETURN KER_NORMAL; ! Return happy
; 2288 1 END; ! End of RECEIVE
.PSECT $PLIT$,NOWRT,NOEXE,2
P.ABF: .LONG 1000000 ; 000F4240 00198
P.ABG: .LONG 0 ; 00000000 0019C
.PSECT $CODE$,NOWRT,2
.ENTRY IBM_WAIT, ^M<R2,R3,R4,R5,R6> ;IBM_WAIT, Save R2,R3,R4,R5,R6 2147 007C 00000
MOVAB G^U.49, R6 ;U.49, R6 56 00000000V 00 9E 00002
MOVAB G^SYS$CANTIM, R5 ;SYS$CANTIM, R5 55 00000000G 00 9E 00009
MOVAB G^SEND_TIMEOUT, R4 ;SEND_TIMEOUT, R4 54 00000000G 00 9E 00010
MOVAB G^U.29+4, R3 ;U.29+4, R3 53 00000000' 00 9E 00017
SUBL2 #20, SP ;#20, SP 5E 14 C2 0001E
PUSHL #3 ;#3 2197 03 DD 00021
CALLS #1, G^SYS$CLREF ;#1, SYS$CLREF 00000000G 00 01 FB 00023
MOVL R0, R2 ;R0, STATUS 52 50 D0 0002A
TSTL (R4) ;SEND_TIMEOUT 2199 64 D5 0002D
BLEQ 1$ ;1$ 58 15 0002F
MOVQ #3, -(SP) ;#3, -(SP) 2202 7E 03 7D 00031
CALLS #2, (R5) ;#2, SYS$CANTIM 65 02 FB 00034
MOVL R0, R2 ;R0, STATUS 52 50 D0 00037
PUSHAB 4(SP) ;TIMER_VALUE 2203 04 AE 9F 0003A
CALLS #1, G^SYS$GETTIM ;#1, SYS$GETTIM 00000000G 00 01 FB 0003D
MOVL R0, R2 ;R0, STATUS 52 50 D0 00044
PUSHAB 12(SP) ;QWORD_TIMEOUT 2204 0C AE 9F 00047
PUSHAB G^P.ABG ;P.ABG 00000000' 00 9F 0004A
PUSHAB G^P.ABF ;P.ABF 00000000' 00 9F 00050
PUSHL R4 ;R4 54 DD 00056
CALLS #4, G^LIB$EMUL ;#4, LIB$EMUL 00000000G 00 04 FB 00058
MOVL R0, R2 ;R0, STATUS 52 50 D0 0005F
PUSHAB 12(SP) ;QWORD_TIMEOUT 2205 0C AE 9F 00062
PUSHAB 16(SP) ;QWORD_TIMEOUT 10 AE 9F 00065
PUSHAB 12(SP) ;TIMER_VALUE 0C AE 9F 00068
CALLS #3, G^LIB$ADDX ;#3, LIB$ADDX 00000000G 00 03 FB 0006B
MOVL R0, R2 ;R0, STATUS 52 50 D0 00072
MOVQ #3, -(SP) ;#3, -(SP) 2206 7E 03 7D 00075
CLRL -(SP) ;-(SP) 7E D4 00078
PUSHAB 24(SP) ;QWORD_TIMEOUT 18 AE 9F 0007A
PUSHL #3 ;#3 03 DD 0007D
CALLS #5, G^SYS$SETIMR ;#5, SYS$SETIMR 00000000G 00 05 FB 0007F
MOVL R0, R2 ;R0, STATUS 52 50 D0 00086
1$: PUSHL #12 ;#12 2220 0C DD 00089
PUSHL #2 ;#2 02 DD 0008B
CALLS #2, G^SYS$WFLOR ;#2, SYS$WFLOR 00000000G 00 02 FB 0008D
MOVL R0, R2 ;R0, STATUS 52 50 D0 00094
PUSHL SP ;SP 2221 5E DD 00097
PUSHL #2 ;#2 02 DD 00099
CALLS #2, G^SYS$READEF ;#2, SYS$READEF 00000000G 00 02 FB 0009B
MOVL R0, R2 ;R0, STATUS 52 50 D0 000A2
BBC #2, (SP), 7$ ;#2, CUR_EFN, 7$ 2227 6E 02 E1 000A5
; 61 000A8
MOVZWL -4(R3), R0 ;IO_STATUS, R0 2234 50 FC A3 3C 000A9
BLBS R0, 2$ ;R0, 2$ 04 50 E8 000AD
PUSHL R0 ;R0 2237 50 DD 000B0
BRB 6$ ;6$ 47 11 000B2
2$: BLBC G^CONNECT_FLAG, 3$ ;CONNECT_FLAG, 3$ 2246 1F 00000000G 00 E9 000B4
CMPW (R3), #25 ;IO_STATUS+4, #25 2249 19 63 B1 000BB
BNEQ 3$ ;3$ 1A 12 000BE
CMPL G^RCV_EOL, #25 ;RCV_EOL, #25 19 00000000G 00 D1 000C0
BEQL 3$ ;3$ 11 13 000C7
MOVQ #3, -(SP) ;#3, -(SP) 2252 7E 03 7D 000C9
CALLS #2, (R5) ;#2, SYS$CANTIM 65 02 FB 000CC
MOVL R0, R2 ;R0, STATUS 52 50 D0 000CF
MOVL #134316258, R0 ;#134316258, R0 2253 50 080180E2 8F D0 000D2
RET ; 04 000D9
3$: CMPZV #0, #16, (R3), G^IBM_CHAR ;#0, #16, IO_STATUS+4, IBM_CHAR 2258 10 00 ED 000DA
; 00000000G 00 63 000DD
BEQL 4$ ;4$ 0B 13 000E3
CALLS #0, (R6) ;#0, DO_RECEIVE_QIO 2263 66 00 FB 000E5
MOVL R0, R2 ;R0, STATUS 52 50 D0 000E8
BLBS R2, 1$ ;STATUS, 1$ 2265 9B 52 E8 000EB
BRB 5$ ;5$ 2268 09 11 000EE
4$: CALLS #0, (R6) ;#0, DO_RECEIVE_QIO 2278 66 00 FB 000F0
MOVL R0, R2 ;R0, STATUS 52 50 D0 000F3
BLBS R2, 7$ ;STATUS, 7$ 2280 11 52 E8 000F6
5$: PUSHL R2 ;STATUS 2283 52 DD 000F9
6$: CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 000FB
MOVL #134316266, R0 ;#134316266, R0 2284 50 080180EA 8F D0 00102
RET ; 04 00109
7$: MOVL #134316043, R0 ;#134316043, R0 2287 50 0801800B 8F D0 0010A
RET ; 04 00111
; Routine Size: 274 bytes, Routine Base: $CODE$ + 0B13
; 2289 1
; 2290 1 %SBTTL 'GET_DEV_CHAR - Determine device characteristics'
; 2291 1 ROUTINE GET_DEV_CHAR (LOG_NAME_DESC, PHYS_NAME_DESC, DEV_CLASS) =
; 2292 1
; 2293 1 !++
; 2294 1 ! FUNCTIONAL DESCRIPTION:
; 2295 1 !
; 2296 1 ! This routine will get the device characteristics from VMS. It returns
; 2297 1 ! both the physical name of the device and the device class.
; 2298 1 !
; 2299 1 ! CALLING SEQUENCE:
; 2300 1 !
; 2301 1 ! STATUS = GET_DEV_CHAR (LOG_NAME_DESC, PHYS_NAME_DESC, DEV_CLASS);
; 2302 1 !
; 2303 1 ! INPUT PARAMETERS:
; 2304 1 !
; 2305 1 ! LOG_NAME_DESC - Descriptor for logical device for which the device
; 2306 1 ! class is desired.
; 2307 1 !
; 2308 1 ! IMPLICIT INPUTS:
; 2309 1 !
; 2310 1 ! None.
; 2311 1 !
; 2312 1 ! OUPTUT PARAMETERS:
; 2313 1 !
; 2314 1 ! PHYS_NAME_DESC - Descriptor for physical device name
; 2315 1 ! DEV_CLASS - Device class for device
; 2316 1 !
; 2317 1 ! IMPLICIT OUTPUTS:
; 2318 1 !
; 2319 1 ! None.
; 2320 1 !
; 2321 1 ! COMPLETION CODES/RETURN VALUE:
; 2322 1 !
; 2323 1 ! Status value returned from $GETDVI if it fails,
; 2324 1 ! KER_NORMAL otherwise.
; 2325 1 !
; 2326 1 ! SIDE EFFECTS:
; 2327 1 !
; 2328 1 ! None.
; 2329 1 !
; 2330 1 !--
; 2331 1
; 2332 2 BEGIN
; 2333 2
; 2334 2 MAP
; 2335 2 PHYS_NAME_DESC : REF BLOCK [8, BYTE]; ! Physical name descriptor
; 2336 2
; 2337 2 LOCAL
; 2338 2 ITMLST : ITEM_LIST [2] FIELD (ITEM_FIELDS),
; 2339 2 PHYS_NAME_LENGTH : VOLATILE,
; 2340 2 STATUS;
; 2341 2
; 2342 2 !
; 2343 2 ! Set up item list for device class
; 2344 2 !
; 2345 2 ITMLST [0, ITEM_ITEM_CODE] = DVI$_DEVCLASS;
; 2346 2 ITMLST [0, ITEM_BFR_LENGTH] = 4; ! 4 byte result
; 2347 2 ITMLST [0, ITEM_BFR_ADDRESS] = .DEV_CLASS; ! Where to return result
; 2348 2 ITMLST [0, ITEM_RTN_LENGTH] = 0; ! We know how long it is
; 2349 2 !
; 2350 2 ! Item list entry for device name
; 2351 2 !
; 2352 2 ITMLST [1, ITEM_ITEM_CODE] = DVI$_DEVNAM; ! Want the name of the device
; 2353 2 ITMLST [1, ITEM_BFR_LENGTH] = .PHYS_NAME_DESC [DSC$W_LENGTH]; ! Max length to return
; 2354 2 ITMLST [1, ITEM_BFR_ADDRESS] = .PHYS_NAME_DESC [DSC$A_POINTER]; ! Where to return name
; 2355 2 ITMLST [1, ITEM_RTN_LENGTH] = PHYS_NAME_LENGTH; ! Where to return length
; 2356 2 !
; 2357 2 ! End the list of items
; 2358 2 !
; 2359 2 ITMLST [2, ITEM_ITEM_CODE] = 0;
; 2360 2 ITMLST [2, ITEM_BFR_LENGTH] = 0;
; 2361 2 !
; 2362 2 ! Request the information
; 2363 2 !
; 2364 2 STATUS = $GETDVIW (EFN = GET_DEV_EFN, DEVNAM = .LOG_NAME_DESC, ITMLST = ITMLST);
; 2365 2
; 2366 2 IF NOT .STATUS THEN RETURN .STATUS;
; 2367 2 !
; 2368 2 ! Assign the length and return happy
; 2369 2 !
; 2370 2 PHYS_NAME_DESC [DSC$W_LENGTH] = .PHYS_NAME_LENGTH;
; 2371 2 RETURN KER_NORMAL;
; 2372 1 END; ! End of GET_DEV_CHAR
.EXTRN SYS$GETDVIW
;GET_DEV_CHAR
U.44: .WORD ^M<R2> ;Save R2 2291 0004 00000
SUBL2 #40, SP ;#40, SP 5E 28 C2 00002
MOVL #262148, 4(SP) ;#262148, ITMLST 2346 04 AE 00040004 8F D0 00005
MOVL 12(AP), 8(SP) ;DEV_CLASS, ITMLST+4 2347 08 AE 0C AC D0 0000D
CLRL 12(SP) ;ITMLST+8 2348 0C AE D4 00012
MOVW #32, 18(SP) ;#32, ITMLST+14 2352 12 AE 20 B0 00015
MOVL 8(AP), R2 ;PHYS_NAME_DESC, R2 2353 52 08 AC D0 00019
MOVW (R2), 16(SP) ;(R2), ITMLST+12 10 AE 62 B0 0001D
MOVL 4(R2), 20(SP) ;4(R2), ITMLST+16 2354 14 AE 04 A2 D0 00021
MOVAB (SP), 24(SP) ;PHYS_NAME_LENGTH, ITMLST+20 2355 18 AE 6E 9E 00026
CLRL 28(SP) ;ITMLST+24 2360 1C AE D4 0002A
CLRQ -(SP) ;-(SP) 2364 7E 7C 0002D
CLRQ -(SP) ;-(SP) 7E 7C 0002F
PUSHAB 20(SP) ;ITMLST 14 AE 9F 00031
PUSHL 4(AP) ;LOG_NAME_DESC 04 AC DD 00034
MOVQ #7, -(SP) ;#7, -(SP) 7E 07 7D 00037
CALLS #8, G^SYS$GETDVIW ;#8, SYS$GETDVIW 00000000G 00 08 FB 0003A
BLBC R0, 1$ ;STATUS, 1$ 2366 0A 50 E9 00041
MOVW (SP), (R2) ;PHYS_NAME_LENGTH, (R2) 2370 62 6E B0 00044
MOVL #134316043, R0 ;#134316043, R0 2371 50 0801800B 8F D0 00047
1$: RET ; 04 0004E
; Routine Size: 79 bytes, Routine Base: $CODE$ + 0C25
; 2373 1 %SBTTL 'Term_Hangup'
; 2374 1 global ROUTINE Term_Hangup : NOVALUE =
; 2375 1
; 2376 1 !++
; 2377 1 ! FUNCTIONAL DESCRIPTION:
; 2378 1 !
; 2379 1 ! This routine puts a read-attention AST on the mailbox associated with
; 2380 1 ! TERM_DESC - the port being used for external communications. The
; 2381 1 ! mailbox will receive 3 types of messages: Unsolicited data, Terminal
; 2382 1 ! hangup, and Broadcast messages. Only Terminal hangup messages are of
; 2383 1 ! interest here.
; 2384 1 !
; 2385 1 !
; 2386 1 ! CALLING SEQUENCE:
; 2387 1 !
; 2388 1 ! TERM_HANGUP();
; 2389 1 !
; 2390 1 ! INPUT PARAMETERS:
; 2391 1 !
; 2392 1 ! None.
; 2393 1 !
; 2394 1 ! IMPLICIT INPUTS:
; 2395 1 !
; 2396 1 ! MBX_CHAN - The channel to the mailbox associated with TERM_DESC.
; 2397 1 !
; 2398 1 ! OUPTUT PARAMETERS:
; 2399 1 !
; 2400 1 ! None.
; 2401 1 !
; 2402 1 ! IMPLICIT OUTPUTS:
; 2403 1 !
; 2404 1 ! None.
; 2405 1 !
; 2406 1 ! COMPLETION CODES:
; 2407 1 !
; 2408 1 ! Return status from $QIOW
; 2409 1 !
; 2410 1 ! SIDE EFFECTS:
; 2411 1 !
; 2412 1 ! A write-attention AST is queued to the mailbox. The ast routine
; 2413 1 ! MBX_AST_RTN will be called if a message is written to the mailbox.
; 2414 1 !
; 2415 1 !--
; 2416 1
; 2417 2 BEGIN
; 2418 2
; 2419 2 LOCAL
; 2420 2 Function,
; 2421 2 Iosb : VECTOR [4, WORD], ! I/O status block.
; 2422 2 Sts;
; 2423 2
; 2424 2 Function = IO$_SETMODE + IO$M_WRTATTN;
; P 2425 2 Sts = $QIOW(CHAN = .Mbx_Chan,
; P 2426 2 FUNC = .Function,
; P 2427 2 IOSB = Iosb,
; 2428 2 P1 = Mbx_Ast_Rtn);
; 2429 2
; 2430 2 IF .sts THEN sts = .Iosb[0];
; 2431 2 IF NOT .sts THEN LIB$SIGNAL(.Sts);
; 2432 2
; 2433 1 END;
U.45:
.ENTRY TERM_HANGUP, ^M<> ;TERM_HANGUP, Save nothing 2374 0000 00000
SUBL2 #8, SP ;#8, SP 5E 08 C2 00002
MOVZWL #291, R0 ;#291, FUNCTION 2424 50 0123 8F 3C 00005
CLRQ -(SP) ;-(SP) 2428 7E 7C 0000A
CLRQ -(SP) ;-(SP) 7E 7C 0000C
CLRL -(SP) ;-(SP) 7E D4 0000E
PUSHAB G^U.46 ;U.46 00000000V 00 9F 00010
CLRQ -(SP) ;-(SP) 7E 7C 00016
PUSHAB 32(SP) ;IOSB 20 AE 9F 00018
PUSHL R0 ;FUNCTION 50 DD 0001B
PUSHL G^U.5 ;U.5 00000000' 00 DD 0001D
CLRL -(SP) ;-(SP) 7E D4 00023
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 00025
BLBC R0, 1$ ;STS, 1$ 2430 06 50 E9 0002C
MOVZWL (SP), R0 ;IOSB, STS 50 6E 3C 0002F
BLBS R0, 2$ ;STS, 2$ 2431 09 50 E8 00032
1$: PUSHL R0 ;STS 50 DD 00035
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00037
2$: RET ; 2433 04 0003E
; Routine Size: 63 bytes, Routine Base: $CODE$ + 0C74
; 2434 1 %SBTTL 'Mbx_Ast_Rtn'
; 2435 1 ROUTINE Mbx_Ast_Rtn : NOVALUE =
; 2436 1
; 2437 1 !++
; 2438 1 ! FUNCTIONAL DESCRIPTION:
; 2439 1 !
; 2440 1 ! This routine is called at AST level whenever a mailbox message
; 2441 1 ! arrives in the mailbox associated with TERM_DESC. If the message
; 2442 1 ! is a hangup notification the user will be 1) notified his outgoing
; 2443 1 ! connection is no longer present (technically there is no longer
; 2444 1 ! a channel to the device represented in TERM_DESC) and 2)
; 2445 1 !
; 2446 1 ! CALLING SEQUENCE:
; 2447 1 !
; 2448 1 ! MBX_AST_RTN();
; 2449 1 !
; 2450 1 ! INPUT PARAMETERS:
; 2451 1 !
; 2452 1 ! None.
; 2453 1 !
; 2454 1 ! IMPLICIT INPUTS:
; 2455 1 !
; 2456 1 ! TERM_DESC
; 2457 1 ! MBX_CHAN - The channel to the mailbox associated with TERM_DESC.
; 2458 1 !
; 2459 1 ! OUTPUT PARAMETERS:
; 2460 1 !
; 2461 1 ! None.
; 2462 1 !
; 2463 1 ! IMPLICIT OUTPUTS:
; 2464 1 !
; 2465 1 ! MBX_CHAN
; 2466 1 !
; 2467 1 ! COMPLETION CODES:
; 2468 1 !
; 2469 1 ! SS$_NORMAL or error condition.
; 2470 1 !
; 2471 1 ! SIDE EFFECTS:
; 2472 1 !
; 2473 1 ! A message may be output to the user if his outgoing session is
; 2474 1 ! no longer valid.
; 2475 1 !
; 2476 1 !--
; 2477 1
; 2478 2 BEGIN
; 2479 2
; 2480 2 LOCAL
; 2481 2 Function,
; 2482 2 Iosb : VECTOR [4, WORD],
; 2483 2 Mbx_Msg : VECTOR [124, BYTE],
; 2484 2 Sts;
; 2485 2
; 2486 2
; 2487 2 Function = IO$_READVBLK;
; 2488 2
; P 2489 2 Sts = $QIOW(CHAN = .Mbx_Chan,
; P 2490 2 FUNC = .Function,
; P 2491 2 IOSB = Iosb,
; P 2492 2 P1 = Mbx_Msg,
; 2493 2 P2 = 100);
; 2494 2
; 2495 2 IF .Sts THEN Sts = .Iosb[0];
; 2496 2 IF NOT .sts THEN LIB$SIGNAL(.Sts);
; 2497 2
; 2498 2 IF .Mbx_Msg<0,16> EQL MSG$_TRMHANGUP
; 2499 2 THEN
; 2500 3 BEGIN
; 2501 3 ! asn_wth_mbx(term_desc, %REF(100), %REF(100), term_chan, mbx_chan);
; 2502 3 $DASSGN(CHAN = .mbx_chan);
; 2503 3 mbx_chan = 0;
; 2504 3 LIB$SIGNAL(SS$_HANGUP)
; 2505 3 END
; 2506 2 ELSE
; 2507 2 Term_Hangup();
; 2508 2
; 2509 1 END;
;MBX_AST_RTN
U.46: .WORD ^M<R2,R3> ;Save R2,R3 2435 000C 00000
MOVAB G^LIB$SIGNAL, R3 ;LIB$SIGNAL, R3 53 00000000G 00 9E 00002
MOVAB G^U.5, R2 ;U.5, R2 52 00000000' 00 9E 00009
MOVAB -132(SP), SP ;-132(SP), SP 5E FF7C CE 9E 00010
MOVL #49, R0 ;#49, FUNCTION 2487 50 31 D0 00015
CLRQ -(SP) ;-(SP) 2493 7E 7C 00018
CLRQ -(SP) ;-(SP) 7E 7C 0001A
MOVZBL #100, -(SP) ;#100, -(SP) 7E 64 8F 9A 0001C
PUSHAB 20(SP) ;MBX_MSG 14 AE 9F 00020
CLRQ -(SP) ;-(SP) 7E 7C 00023
PUSHAB -8(FP) ;IOSB F8 AD 9F 00025
PUSHL R0 ;FUNCTION 50 DD 00028
PUSHL (R2) ;MBX_CHAN 62 DD 0002A
CLRL -(SP) ;-(SP) 7E D4 0002C
CALLS #12, G^SYS$QIOW ;#12, SYS$QIOW 00000000G 00 0C FB 0002E
BLBC R0, 1$ ;STS, 1$ 2495 07 50 E9 00035
MOVZWL 124(SP), R0 ;IOSB, STS 50 7C AE 3C 00038
BLBS R0, 2$ ;STS, 2$ 2496 05 50 E8 0003C
1$: PUSHL R0 ;STS 50 DD 0003F
CALLS #1, (R3) ;#1, LIB$SIGNAL 63 01 FB 00041
2$: CMPW (SP), #6 ;MBX_MSG, #6 2498 06 6E B1 00044
BNEQ 3$ ;3$ 14 12 00047
PUSHL (R2) ;MBX_CHAN 2502 62 DD 00049
CALLS #1, G^SYS$DASSGN ;#1, SYS$DASSGN 00000000G 00 01 FB 0004B
CLRL (R2) ;MBX_CHAN 2503 62 D4 00052
MOVZWL #716, -(SP) ;#716, -(SP) 2504 7E 02CC 8F 3C 00054
CALLS #1, (R3) ;#1, LIB$SIGNAL 63 01 FB 00059
RET ; 04 0005C
3$: CALLS #0, W^U.45 ;#0, U.45 2507 FF5F CF 00 FB 0005D
RET ; 2509 04 00062
; Routine Size: 99 bytes, Routine Base: $CODE$ + 0CB3
; 2510 1
; 2511 1 %SBTTL 'Send_Break_TTY'
; 2512 1 GLOBAL ROUTINE Send_Break_TTY =
; 2513 1
; 2514 1 !++
; 2515 1 ! FUNCTIONAL DESCRIPTION:
; 2516 1 !
; 2517 1 ! This routine sends a break to the user's current terminal line.
; 2518 1 !
; 2519 1 !
; 2520 1 ! CALLING SEQUENCE:
; 2521 1 !
; 2522 1 ! STATUS = Send_Break_TTY ();
; 2523 1 !
; 2524 1 ! INPUT PARAMETERS:
; 2525 1 !
; 2526 1 ! None.
; 2527 1 !
; 2528 1 ! IMPLICIT INPUTS:
; 2529 1 !
; 2530 1 ! Term_Desc - The current outgoing terminal line.
; 2531 1 !
; 2532 1 ! OUPTUT PARAMETERS:
; 2533 1 !
; 2534 1 ! None.
; 2535 1 !
; 2536 1 ! IMPLICIT OUTPUTS:
; 2537 1 !
; 2538 1 ! None.
; 2539 1 !
; 2540 1 ! COMPLETION CODES:
; 2541 1 !
; 2542 1 ! Return status from $QIOW
; 2543 1 !
; 2544 1 ! SIDE EFFECTS:
; 2545 1 !
; 2546 1 ! A break is sent to the user's outgoing terminal line.
; 2547 1 !
; 2548 1 !--
; 2549 1
; 2550 2 BEGIN
; 2551 2
; 2552 2 LOCAL
; 2553 2 Char : VECTOR [2], ! Terminal characteristics.
; 2554 2 Iosb : VECTOR [4, WORD], ! I/O status block.
; 2555 2 Parity_Flags,
; 2556 2 Sts;
; 2557 2
; P 2558 2 Sts = $QIOW(CHAN = .Term_Chan,
; P 2559 2 FUNC = IO$_SENSEMODE,
; P 2560 2 IOSB = Iosb,
; 2561 2 P1 = Char);
; 2562 2 IF .Sts THEN Sts = .Iosb [0];
; 2563 2 IF NOT .Sts THEN RETURN .Sts;
; 2564 2
; 2565 2 Parity_Flags<4,16> = .Iosb [3];
; 2566 2
; P 2567 2 Sts = $QIOW(CHAN = .Term_Chan,
; P 2568 2 FUNC = IO$_SETMODE,
; P 2569 2 IOSB = Iosb,
; P 2570 2 P1 = Char,
; 2571 2 P5 = (.Parity_Flags OR TT$M_BREAK));
; 2572 2 IF .Sts THEN Sts = .Iosb [0];
; 2573 2 IF NOT .Sts THEN RETURN .Sts;
; 2574 2
; 2575 2 LIB$WAIT(%REF(%E'0.25'));
; 2576 2
; P 2577 2 Sts = $QIOW(CHAN = .Term_Chan,
; P 2578 2 FUNC = IO$_SETMODE,
; P 2579 2 IOSB = Iosb,
; P 2580 2 P1 = Char,
; 2581 2 P5 = .Parity_Flags);
; 2582 2 IF (.Sts) THEN Sts = .Iosb [0];
; 2583 2
; 2584 2 Send_Break_TTY_Flag = 0;
; 2585 2
; 2586 2 RETURN .Sts;
; 2587 1 END;
U.48:
.ENTRY SEND_BREAK_TTY, ^M<R2,R3,R4,R5> ;SEND_BREAK_TTY, Save R2,R3,R4,R5 2512 003C 00000
MOVAB G^U.4, R5 ;U.4, R5 55 00000000' 00 9E 00002
MOVAB G^SYS$QIOW, R4 ;SYS$QIOW, R4 54 00000000G 00 9E 00009
SUBL2 #20, SP ;#20, SP 5E 14 C2 00010
CLRQ -(SP) ;-(SP) 2561 7E 7C 00013
CLRQ -(SP) ;-(SP) 7E 7C 00015
CLRL -(SP) ;-(SP) 7E D4 00017
PUSHAB 32(SP) ;CHAR 20 AE 9F 00019
CLRQ -(SP) ;-(SP) 7E 7C 0001C
PUSHAB 36(SP) ;IOSB 24 AE 9F 0001E
PUSHL #39 ;#39 27 DD 00021
PUSHL (R5) ;TERM_CHAN 65 DD 00023
CLRL -(SP) ;-(SP) 7E D4 00025
CALLS #12, (R4) ;#12, SYS$QIOW 64 0C FB 00027
MOVL R0, R2 ;R0, STS 52 50 D0 0002A
BLBC R2, 2$ ;STS, 2$ 2562 70 52 E9 0002D
MOVZWL 4(SP), R2 ;IOSB, STS 52 04 AE 3C 00030
BLBC R2, 2$ ;STS, 2$ 2563 69 52 E9 00034
INSV 10(SP), #4, #16, R3 ;IOSB+6, #4, #16, PARITY_FLAGS 2565 04 0A AE F0 00037
; 53 10 0003B
CLRL -(SP) ;-(SP) 2571 7E D4 0003D
BISL3 #2048, R3, -(SP) ;#2048, PARITY_FLAGS, -(SP) 53 00000800 8F C9 0003F
; 7E 00046
CLRQ -(SP) ;-(SP) 7E 7C 00047
CLRL -(SP) ;-(SP) 7E D4 00049
PUSHAB 32(SP) ;CHAR 20 AE 9F 0004B
CLRQ -(SP) ;-(SP) 7E 7C 0004E
PUSHAB 36(SP) ;IOSB 24 AE 9F 00050
PUSHL #35 ;#35 23 DD 00053
PUSHL (R5) ;TERM_CHAN 65 DD 00055
CLRL -(SP) ;-(SP) 7E D4 00057
CALLS #12, (R4) ;#12, SYS$QIOW 64 0C FB 00059
MOVL R0, R2 ;R0, STS 52 50 D0 0005C
BLBC R2, 2$ ;STS, 2$ 2572 3E 52 E9 0005F
MOVZWL 4(SP), R2 ;IOSB, STS 52 04 AE 3C 00062
BLBC R2, 2$ ;STS, 2$ 2573 37 52 E9 00066
MOVZWL #16256, (SP) ;#16256, (SP) 2575 6E 3F80 8F 3C 00069
PUSHL SP ;SP 5E DD 0006E
CALLS #1, G^LIB$WAIT ;#1, LIB$WAIT 00000000G 00 01 FB 00070
CLRL -(SP) ;-(SP) 2581 7E D4 00077
PUSHL R3 ;PARITY_FLAGS 53 DD 00079
CLRQ -(SP) ;-(SP) 7E 7C 0007B
CLRL -(SP) ;-(SP) 7E D4 0007D
PUSHAB 32(SP) ;CHAR 20 AE 9F 0007F
CLRQ -(SP) ;-(SP) 7E 7C 00082
PUSHAB 36(SP) ;IOSB 24 AE 9F 00084
PUSHL #35 ;#35 23 DD 00087
PUSHL (R5) ;TERM_CHAN 65 DD 00089
CLRL -(SP) ;-(SP) 7E D4 0008B
CALLS #12, (R4) ;#12, SYS$QIOW 64 0C FB 0008D
MOVL R0, R2 ;R0, STS 52 50 D0 00090
BLBC R2, 1$ ;STS, 1$ 2582 04 52 E9 00093
MOVZWL 4(SP), R2 ;IOSB, STS 52 04 AE 3C 00096
1$: CLRL G^SEND_BREAK_TTY_FLAG ;SEND_BREAK_TTY_FLAG 2584 00000000' 00 D4 0009A
2$: MOVL R2, R0 ;STS, R0 2586 50 52 D0 000A0
RET ; 04 000A3
; Routine Size: 164 bytes, Routine Base: $CODE$ + 0D16
; 2588 1 %SBTTL 'DO_RECEIVE_QIO'
; 2589 1 ROUTINE DO_RECEIVE_QIO =
; 2590 1
; 2591 1 !++
; 2592 1 ! FUNCTIONAL DESCRIPTION:
; 2593 1 !
; 2594 1 ! This routine is called to perform a QIO input from the terminal. This
; 2595 1 ! ensures that there is usually a receive buffer pending.
; 2596 1 !
; 2597 1 ! CALLING SEQUENCE:
; 2598 1 !
; 2599 1 ! STATUS = DO_RECEIVE_QIO ();
; 2600 1 !
; 2601 1 ! INPUT PARAMETERS:
; 2602 1 !
; 2603 1 ! None.
; 2604 1 !
; 2605 1 ! IMPLICIT INPUTS:
; 2606 1 !
; 2607 1 ! RCV_EOL - Receive end-of-line character
; 2608 1 !
; 2609 1 ! OUPTUT PARAMETERS:
; 2610 1 !
; 2611 1 ! None.
; 2612 1 !
; 2613 1 ! IMPLICIT OUTPUTS:
; 2614 1 !
; 2615 1 ! IO_STATUS - IOSB for the QIO
; 2616 1 ! RCV_BUFFER - Data input from terminal
; 2617 1 !
; 2618 1 ! COMPLETION CODES:
; 2619 1 !
; 2620 1 ! None.
; 2621 1 !
; 2622 1 ! SIDE EFFECTS:
; 2623 1 !
; 2624 1 ! TERM_EFN is set when I/O completes
; 2625 1 !
; 2626 1 !--
; 2627 1
; 2628 2 BEGIN
; 2629 2
; 2630 2 LOCAL
; 2631 2 QIO_FUNC,
; 2632 2 TERMINATOR : VECTOR [2, LONG],
; 2633 2 STATUS; ! For status of QIO call
; 2634 2
; 2635 2 !
; 2636 2 ! Initialize the terminating characters for the QIO. Only terminate
; 2637 2 ! on the end-of-line character and a control-Y
; 2638 2 !
; 2639 2 TERMINATOR [0] = 0;
; 2640 2 TERMINATOR [1] = 1^.RCV_EOL OR 1^CHR_CTL_Y;
; 2641 2
; 2642 2 IF .IBM_CHAR GEQ 0 THEN TERMINATOR [1] = .TERMINATOR [1] OR 1^.IBM_CHAR;
; 2643 2
; 2644 2 ! Need IBM turnaround?
; 2645 2 !
; 2646 2 ! Initialize the QIO function
; 2647 2 ! Always purge typeahead
; 2648 2 !
; 2649 2 QIO_FUNC = IO$_TTYREADALL OR IO$M_NOECHO OR IO$M_PURGE;
; P 2650 2 RETURN $QIO (CHAN = .TERM_CHAN, EFN = TERM_EFN, FUNC = .QIO_FUNC, IOSB = IO_STATUS,
; 2651 2 P1 = RECV_BUFFER, P2 = RECV_BUFF_SIZE, P4 = TERMINATOR);
; 2652 1 END; ! End of DO_RECEIVE_QIO
.EXTRN SYS$QIO
;DO_RECEIVE_QIO
U.49: .WORD ^M<R2> ;Save R2 2589 0004 00000
MOVAB G^U.30, R2 ;U.30, R2 52 00000000' 00 9E 00002
SUBL2 #4, SP ;#4, SP 5E 04 C2 00009
CLRL -(SP) ;TERMINATOR 2639 7E D4 0000C
ASHL G^RCV_EOL, #1, R0 ;RCV_EOL, #1, R0 2640 01 00000000G 00 78 0000E
; 50 00015
BISL3 #33554432, R0, 4(SP) ;#33554432, R0, TERMINATOR+4 50 02000000 8F C9 00016
; 04 AE 0001D
MOVL G^IBM_CHAR, R0 ;IBM_CHAR, R0 2642 50 00000000G 00 D0 0001F
BLSS 1$ ;1$ 08 19 00026
ASHL R0, #1, R0 ;R0, #1, R0 01 50 78 00028
; 50 0002B
BISL2 R0, 4(SP) ;R0, TERMINATOR+4 04 AE 50 C8 0002C
1$: MOVZWL #2170, R0 ;#2170, QIO_FUNC 2649 50 087A 8F 3C 00030
CLRQ -(SP) ;-(SP) 2651 7E 7C 00035
PUSHAB 8(SP) ;TERMINATOR 08 AE 9F 00037
CLRL -(SP) ;-(SP) 7E D4 0003A
MOVZWL #1022, -(SP) ;#1022, -(SP) 7E 03FE 8F 3C 0003C
PUSHL R2 ;R2 52 DD 00041
CLRQ -(SP) ;-(SP) 7E 7C 00043
PUSHAB -8(R2) ;IO_STATUS F8 A2 9F 00045
PUSHL R0 ;QIO_FUNC 50 DD 00048
PUSHL -1912(R2) ;TERM_CHAN F888 C2 DD 0004A
PUSHL #2 ;#2 02 DD 0004E
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 00050
RET ; 2650 04 00057
; Routine Size: 88 bytes, Routine Base: $CODE$ + 0DBA
; 2653 1 %SBTTL 'DO_CONS_QIO'
; 2654 1 ROUTINE DO_CONS_QIO =
; 2655 1
; 2656 1 !++
; 2657 1 ! FUNCTIONAL DESCRIPTION:
; 2658 1 !
; 2659 1 ! This routine is called to perform a QIO input from the terminal. This
; 2660 1 ! ensures that there is usually a receive buffer pending.
; 2661 1 !
; 2662 1 ! CALLING SEQUENCE:
; 2663 1 !
; 2664 1 ! STATUS = DO_CONS_QIO ();
; 2665 1 !
; 2666 1 ! INPUT PARAMETERS:
; 2667 1 !
; 2668 1 ! None.
; 2669 1 !
; 2670 1 ! IMPLICIT INPUTS:
; 2671 1 !
; 2672 1 ! RCV_EOL - Receive end-of-line character
; 2673 1 !
; 2674 1 ! OUPTUT PARAMETERS:
; 2675 1 !
; 2676 1 ! None.
; 2677 1 !
; 2678 1 ! IMPLICIT OUTPUTS:
; 2679 1 !
; 2680 1 ! IO_STATUS - IOSB for the QIO
; 2681 1 ! RCV_BUFFER - Data input from terminal
; 2682 1 !
; 2683 1 ! COMPLETION CODES:
; 2684 1 !
; 2685 1 ! None.
; 2686 1 !
; 2687 1 ! SIDE EFFECTS:
; 2688 1 !
; 2689 1 ! TERM_EFN is set when I/O completes
; 2690 1 !
; 2691 1 !--
; 2692 1
; 2693 2 BEGIN
; 2694 2
; 2695 2 EXTERNAL
; 2696 2 ABT_CUR_FILE,
; 2697 2 ABT_ALL_FILE,
; 2698 2 DEBUG_FLAG,
; 2699 2 TYP_STS_FLAG;
; 2700 2
; 2701 2 LOCAL
; 2702 2 I, ! Random index variable
; 2703 2 TERMINATOR : VECTOR [2, LONG], ! Pointer at terminator mask
; 2704 2 TERM_MASK : VECTOR [8, LONG], ! Terminator mask
; 2705 2 STATUS; ! For status of QIO call
; 2706 2
; 2707 2 LITERAL
; 2708 2 CONS_BUFF_SIZE = 1;
; 2709 2
; 2710 2 OWN
; 2711 2 CONS_STATUS : VECTOR [4, WORD],
; 2712 2 CONS_BUFFER : VECTOR [CONS_BUFF_SIZE, BYTE];
; 2713 2
; 2714 2 !
; 2715 2 ! AST routine for console
; 2716 2 !
; 2717 2 ROUTINE CONS_AST (DUMMY) =
; 2718 3 BEGIN
; 2719 3
; 2720 3 IF .CONS_STATUS [0]
; 2721 3 THEN
; 2722 3
; 2723 3 SELECT .CONS_STATUS [2] OF
; 2724 3 SET
; 2725 3
; 2726 3 [CHR_CTL_Z] :
; 2727 3 ABT_ALL_FILE = TRUE;
; 2728 3
; 2729 3 [CHR_CTL_X] :
; 2730 3 ABT_CUR_FILE = TRUE;
; 2731 3
; 2732 3 [CHR_CTL_Y] :
; 2733 3 RETURN SS$_NORMAL;
; 2734 3
; 2735 3 [CHR_CTL_C] :
; 2736 4 BEGIN
; 2737 4 FORCE_TIMEOUT = TRUE;
; 2738 4 FORCE_ABORT = TRUE;
; 2739 3 END;
; 2740 3
; 2741 3 [CHR_CTL_D] :
; 2742 3 DEBUG_FLAG = NOT .DEBUG_FLAG;
; 2743 3
; 2744 3 [CHR_CTL_A] :
; 2745 3 TYP_STS_FLAG = TRUE;
; 2746 3
; 2747 3 [CHR_CTL_M] :
; 2748 3 FORCE_TIMEOUT = TRUE;
; 2749 3
; 2750 3 [CHR_CTL_Z, CHR_CTL_X, CHR_CTL_A, CHR_CTL_M, CHR_CTL_C] :
; 2751 3 ! Make sure what we did gets noticed, even if we are currently waiting
; 2752 3 ! forever for input.
; 2753 3
; 2754 3 IF .FORCE_TIMEOUT OR .SEND_TIMEOUT EQL 0 THEN $SETEF (EFN = TIME_EFN);
; 2755 3
; 2756 3 TES;
; 2757 3
; 2758 3 IF .CONS_STATUS [0] NEQ SS$_CANCEL AND .CONS_STATUS [0] NEQ SS$_ABORT
; 2759 3 THEN
; 2760 3 RETURN DO_CONS_QIO ()
; 2761 3 ELSE
; 2762 3 RETURN SS$_NORMAL;
; 2763 3
; 2764 2 END;
.PSECT $OWN$,NOEXE,2
;CONS_STATUS
U.75: .BLKB 8 ; 00BA8
;CONS_BUFFER
U.76: .BLKB 1 ; 00BB0
.EXTRN ABT_CUR_FILE, ABT_ALL_FILE, DEBUG_FLAG, TYP_STS_FLAG, SYS$SETEF
.PSECT $CODE$,NOWRT,2
;CONS_AST
U.77: .WORD ^M<R2,R3> ;Save R2,R3 2717 000C 00000
MOVAB G^DEBUG_FLAG, R3 ;DEBUG_FLAG, R3 53 00000000G 00 9E 00002
MOVAB G^U.2, R2 ;U.2, R2 52 00000000' 00 9E 00009
BLBC 2980(R2), 9$ ;CONS_STATUS, 9$ 2720 77 0BA4 C2 E9 00010
MOVZWL 2984(R2), R0 ;CONS_STATUS+4, R0 2723 50 0BA8 C2 3C 00015
CMPW R0, #26 ;R0, #26 2726 1A 50 B1 0001A
BNEQ 1$ ;1$ 07 12 0001D
MOVL #1, G^ABT_ALL_FILE ;#1, ABT_ALL_FILE 2727 00000000G 00 01 D0 0001F
1$: CMPW R0, #24 ;R0, #24 2729 18 50 B1 00026
BNEQ 2$ ;2$ 07 12 00029
MOVL #1, G^ABT_CUR_FILE ;#1, ABT_CUR_FILE 2730 00000000G 00 01 D0 0002B
2$: CMPW R0, #25 ;R0, #25 2732 19 50 B1 00032
BEQL 10$ ;10$ 6E 13 00035
CMPW R0, #3 ;R0, #3 2735 03 50 B1 00037
BNEQ 3$ ;3$ 07 12 0003A
MOVL #1, (R2) ;#1, FORCE_TIMEOUT 2737 62 01 D0 0003C
MOVL #1, -4(R2) ;#1, FORCE_ABORT 2738 FC A2 01 D0 0003F
3$: CMPW R0, #4 ;R0, #4 2741 04 50 B1 00043
BNEQ 4$ ;4$ 03 12 00046
MCOML (R3), (R3) ;DEBUG_FLAG, DEBUG_FLAG 2742 63 63 D2 00048
4$: CMPW R0, #1 ;R0, #1 2744 01 50 B1 0004B
BNEQ 5$ ;5$ 07 12 0004E
MOVL #1, G^TYP_STS_FLAG ;#1, TYP_STS_FLAG 2745 00000000G 00 01 D0 00050
5$: CMPW R0, #13 ;R0, #13 2747 0D 50 B1 00057
BNEQ 6$ ;6$ 03 12 0005A
MOVL #1, (R2) ;#1, FORCE_TIMEOUT 2748 62 01 D0 0005C
6$: CMPW R0, #1 ;R0, #1 2750 01 50 B1 0005F
BEQL 7$ ;7$ 14 13 00062
CMPW R0, #3 ;R0, #3 03 50 B1 00064
BEQL 7$ ;7$ 0F 13 00067
CMPW R0, #13 ;R0, #13 0D 50 B1 00069
BEQL 7$ ;7$ 0A 13 0006C
CMPW R0, #24 ;R0, #24 18 50 B1 0006E
BEQL 7$ ;7$ 05 13 00071
CMPW R0, #26 ;R0, #26 1A 50 B1 00073
BNEQ 9$ ;9$ 14 12 00076
7$: BLBS (R2), 8$ ;FORCE_TIMEOUT, 8$ 2754 08 62 E8 00078
TSTL G^SEND_TIMEOUT ;SEND_TIMEOUT 00000000G 00 D5 0007B
BNEQ 9$ ;9$ 09 12 00081
8$: PUSHL #3 ;#3 03 DD 00083
CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF 00000000G 00 01 FB 00085
9$: MOVZWL 2980(R2), R0 ;CONS_STATUS, R0 2758 50 0BA4 C2 3C 0008C
CMPW R0, #2096 ;R0, #2096 0830 8F 50 B1 00091
BEQL 10$ ;10$ 0D 13 00096
CMPW R0, #44 ;R0, #44 2C 50 B1 00098
BEQL 10$ ;10$ 08 13 0009B
CALLS #0, G^U.50 ;#0, U.50 2760 00000000V 00 00 FB 0009D
RET ; 04 000A4
10$: MOVL #1, R0 ;#1, R0 2762 50 01 D0 000A5
RET ; 04 000A8
; Routine Size: 169 bytes, Routine Base: $CODE$ + 0E12
; 2765 2 !
; 2766 2 ! Start of main portion of DO_CONS_QIO
; 2767 2 !
; 2768 2 TERMINATOR [0] = 32; ! Length of terminator mask in bytes
; 2769 2 TERMINATOR [1] = TERM_MASK; ! Address of mask
; 2770 2
; 2771 2 INCR I FROM 0 TO 7 DO
; 2772 2 TERM_MASK [.I] = -1; ! All characters are terminators
; 2773 2
; P 2774 2 RETURN $QIO (CHAN = .CONS_CHAN, EFN = CONS_EFN, FUNC = IO$_TTYREADALL OR IO$M_NOECHO,
; P 2775 2 IOSB = CONS_STATUS, ASTADR = CONS_AST, P1 = CONS_BUFFER, P2 = CONS_BUFF_SIZE,
; 2776 2 P4 = TERMINATOR);
; 2777 1 END; ! End of DO_CONS_QIO
;DO_CONS_QIO
U.50: .WORD ^M<R2> ;Save R2 2654 0004 00000
MOVAB G^U.76, R2 ;U.76, R2 52 00000000' 00 9E 00002
SUBL2 #40, SP ;#40, SP 5E 28 C2 00009
MOVL #32, 32(SP) ;#32, TERMINATOR 2768 20 AE 20 D0 0000C
MOVAB (SP), 36(SP) ;TERM_MASK, TERMINATOR+4 2769 24 AE 6E 9E 00010
CLRL R0 ;I 2771 50 D4 00014
1$: MNEGL #1, (SP)[R0] ;#1, TERM_MASK[I] 2772 6E40 01 CE 00016
AOBLEQ #7, R0, 1$ ;#7, I, 1$ 50 07 F3 0001A
; F8 0001D
CLRQ -(SP) ;-(SP) 2776 7E 7C 0001E
PUSHAB 40(SP) ;TERMINATOR 28 AE 9F 00020
MOVQ #1, -(SP) ;#1, -(SP) 7E 01 7D 00023
PUSHL R2 ;R2 52 DD 00026
CLRL -(SP) ;-(SP) 7E D4 00028
PUSHAB W^U.77 ;U.77 FF29 CF 9F 0002A
PUSHAB -8(R2) ;CONS_STATUS F8 A2 9F 0002E
MOVZBL #122, -(SP) ;#122, -(SP) 7E 7A 8F 9A 00031
PUSHL -2968(R2) ;CONS_CHAN F468 C2 DD 00035
PUSHL #5 ;#5 05 DD 00039
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 0003B
RET ; 2774 04 00042
; Routine Size: 67 bytes, Routine Base: $CODE$ + 0EBB
; 2778 1 %SBTTL 'TERM_CONNECT'
; 2779 1
; 2780 1 GLOBAL ROUTINE TERM_CONNECT =
; 2781 1
; 2782 1 !++
; 2783 1 ! FUNCTIONAL DESCRIPTION:
; 2784 1 !
; 2785 1 ! This routine TERM_CONNECT will enable two terminal-like devices,
; 2786 1 ! MY_TERM and TERM_NAME, to communicate with each other. Anything
; 2787 1 ! that the user types on his terminal, MYTERM, will be sent to the
; 2788 1 ! other device, TERM_NAME, over the terminal line TERM_CHAN.
; 2789 1 ! Anything that TERM_NAME cares to output will be sent to MYTERM.
; 2790 1 ! The main routine TERM_CONNECT performs the initialization. It
; 2791 1 ! opens the input and output files and connects streams.
; 2792 1 !
; 2793 1 ! CALLING SEQUENCE:
; 2794 1 !
; 2795 1 ! TERM_CONNECT();
; 2796 1 !
; 2797 1 ! INPUT PARAMETERS:
; 2798 1 !
; 2799 1 ! None.
; 2800 1 !
; 2801 1 ! IMPLICIT INPUTS:
; 2802 1 !
; 2803 1 ! TERM_DESC - Descriptor of a vector of ASCII characters that represent
; 2804 1 ! the name of the terminal to use.
; 2805 1 !
; 2806 1 ! OUTPUT PARAMETERS:
; 2807 1 !
; 2808 1 ! None.
; 2809 1 !
; 2810 1 ! IMPLICIT OUTPUTS:
; 2811 1 !
; 2812 1 ! TERM_CHAN - Channel number used by the terminal line to TERM_DESC.
; 2813 1 !
; 2814 1 ! COMPLETION CODES:
; 2815 1 !
; 2816 1 ! SS$_NORMAL or error condition.
; 2817 1 !
; 2818 1 ! SIDE EFFECTS:
; 2819 1 !
; 2820 1 ! None.
; 2821 1 !
; 2822 1 !--
; 2823 1
; 2824 2 BEGIN
; 2825 2
; 2826 2 EXTERNAL ROUTINE
; 2827 2 LOG_OPEN, ! Open log file
; 2828 2 LOG_CLOSE; ! Close log file
; 2829 2
; 2830 2 LITERAL
; 2831 2 OUT_BUFLEN = 80, ! Max # of char. in output buffer
; 2832 2 INP_BUFSIZ = 80, ! Max # of char. in input buffer
; 2833 2 NUM_OUT_BUF = 2, ! # of output buffers per device
; 2834 2 NUM_IN_BUF = 2, ! # of input buffers per device
; 2835 2 MYT = 0, ! Device MY_TERM
; 2836 2 TRM = 1, ! Device TERM_NAME
; 2837 2 OFFSET = 1, ! IOSB : offset to terminator
; 2838 2 EOFSIZ = 3, ! IOSB : terminator size
; 2839 2 T_EFN_DISP = NUM_OUT_BUF,
; 2840 2 XITEFN = 2*NUM_OUT_BUF + 1, ! Exit event flag number
; 2841 2 EFN_MASK = (1^XITEFN - 1) AND ( NOT 1); ! Mask of flags set by CONNECT
; 2842 2
; 2843 2 STRUCTURE
; 2844 2 IOSB_VECTOR [D, BUFNUM, INFO; NUMBUF] =
; 2845 2 [NUMBUF*16]
; 2846 2 (IOSB_VECTOR + (D*NUMBUF + BUFNUM)*8 + 2*INFO)<0, 16, 0>,
; 2847 2 BUFFER_VECTOR [D, BUFNUM; NUMBUF, BUFSIZ] =
; 2848 2 [NUMBUF*BUFSIZ*2 + NUMBUF]
; 2849 2 (BUFFER_VECTOR + (D*NUMBUF + BUFNUM)*BUFSIZ + D);
; 2850 2
; 2851 2 OWN
; 2852 2 BTIMUP : VECTOR [4, WORD], ! Time limit in binary format
; 2853 2 CHANNEL : VECTOR [2, LONG], ! Contains channel #s
; 2854 2 CHR_COUNT : VECTOR [2, WORD] INITIAL (0), ! # of char. in out buffer
; 2855 2 ESC_FLG : INITIAL (FALSE), ! Was last char. the ESCAPE_CHR
; 2856 2 IN_IOSB : IOSB_VECTOR [NUM_IN_BUF], ! IOSB status block
; 2857 2 INP_BUF : BUFFER_VECTOR [NUM_IN_BUF, INP_BUFSIZ], ! Input buffers
; 2858 2 MSG : VECTOR [80, BYTE], ! Combined escape message
; 2859 2 MSG_DES : BLOCK [8, BYTE], ! Descriptor for message
; 2860 2 OUT_BUF : BUFFER_VECTOR [NUM_OUT_BUF, OUT_BUFLEN], ! Output buffers
; 2861 2 OUT_BUFNUM : VECTOR [2, BYTE], ! Present output buffer
; 2862 2 OUT_EFN : VECTOR [2, BYTE], ! Present event flag #
; 2863 2 OUT_PTR : VECTOR [2, LONG], ! CS-pointer for output buffer
; 2864 2 MYT_QIO_FUNC, ! Function for QIO input for my terminal
; 2865 2 ESC_CHR_LEN, ! Length of escape character message
; 2866 2 ESC_CHR_MSG : VECTOR [30, BYTE], ! Escape character message
; 2867 2 STATE; ! Used by $READEF to store state of EFs
; 2868 2
; 2869 2 BIND
; 2870 2 CON_MSG_1 = %ASCID'Connecting to ',
; 2871 2 CON_MSG_2 = %ASCID'. Type ',
; 2872 2 CON_MSG_3 = %ASCID'C to return to VAX/VMS Kermit-32]',
; 2873 2 CON_MSG_4 = %ASCID'Returning to VAX/VMS Kermit-32]';
; 2874 2
; 2875 2 MAP
; 2876 2 CON_MSG_1 : BLOCK [8, BYTE],
; 2877 2 CON_MSG_2 : BLOCK [8, BYTE],
; 2878 2 CON_MSG_3 : BLOCK [8, BYTE],
; 2879 2 CON_MSG_4 : BLOCK [8, BYTE];
; 2880 2
; 2881 2 BIND
; 2882 2 ATIMUP = %ASCID'0 00:00:00.050', ! Time to wait for more output
; 2883 2 MYT_CHAN = CHANNEL [1],
; 2884 2 MY_TERM = %ASCID'SYS$INPUT:';
; 2885 2
; 2886 2 LABEL
; 2887 2 CONN_STREAMS;
; 2888 2
; 2889 2 LOCAL
; 2890 2 CON_MSG : VECTOR [80, BYTE],
; 2891 2 CON_MSG_DESC : BLOCK [8, BYTE],
; 2892 2 STATUS;
; 2893 2
; 2894 2 %SBTTL 'TERM_CONNECT -- TYPE_OUT_BUF'
; 2895 2 ROUTINE TYPE_OUT_BUF (DEV) =
; 2896 2
; 2897 2 !++
; 2898 2 ! This routine send the contents of the output buffer to the other
; 2899 2 ! device. It also resets the OUT_PTR and the CHR_COUNT and it
; 2900 2 ! increments OUT_EFN and OUT_BUFNUM.
; 2901 2 !--
; 2902 2
; 2903 3 BEGIN
; 2904 3
; 2905 3 LOCAL
; 2906 3 STATUS;
; 2907 3
; 2908 3 ! Check to make sure exit flag not set before $QIO
; 2909 3
; 2910 3 IF (STATUS = $READEF (EFN = XITEFN, STATE = STATE)) NEQ SS$_WASCLR
; 2911 3 THEN
; 2912 4 BEGIN
; 2913 4 $SETEF (EFN = .OUT_EFN [.DEV]);
; 2914 4 RETURN .STATUS;
; 2915 3 END;
; 2916 3
; 2917 3 $WAITFR (EFN = .OUT_EFN [.DEV]);
; 2918 3 $CLREF (EFN = .OUT_EFN [.DEV]);
; 2919 3
; 2920 3 IF $READEF (EFN = XITEFN, STATE = STATE) EQL SS$_WASCLR
; 2921 3 THEN
; P 2922 3 STATUS = $QIO (CHAN = .CHANNEL [.DEV], EFN = .OUT_EFN [.DEV],
; P 2923 3 FUNC = IO$_WRITEVBLK OR IO$M_NOFORMAT, P1 = OUT_BUF [.DEV, .OUT_BUFNUM [.DEV]],
; 2924 4 P2 = .CHR_COUNT [.DEV])
; 2925 3 ELSE
; 2926 4 BEGIN
; 2927 4 $SETEF (EFN = .OUT_EFN [.DEV]);
; 2928 4 RETURN .STATUS;
; 2929 3 END;
; 2930 3
; 2931 3 CHR_COUNT [.DEV] = 0;
; 2932 3 OUT_EFN [.DEV] = .OUT_EFN [.DEV] + 1;
; 2933 3
; 2934 3 IF (OUT_BUFNUM [.DEV] = .OUT_BUFNUM [.DEV] + 1) GEQ NUM_OUT_BUF
; 2935 3 THEN
; 2936 4 BEGIN
; 2937 4 OUT_BUFNUM [.DEV] = 0;
; 2938 4 OUT_EFN [.DEV] = .DEV*T_EFN_DISP + 1;
; 2939 3 END;
; 2940 3
; 2941 3 OUT_PTR [.DEV] = CH$PTR (OUT_BUF [.DEV, .OUT_BUFNUM [.DEV]]);
; 2942 3
; 2943 3 IF NOT .STATUS
; 2944 3 THEN
; 2945 4 BEGIN
; 2946 4 LIB$SIGNAL (.STATUS);
; 2947 4 $SETEF (EFN = XITEFN);
; 2948 3 END;
; 2949 3
; 2950 3 RETURN .STATUS;
; 2951 2 END;
.PSECT $OWN$,NOEXE,2
.BLKB 3 ; 00BB1
;BTIMUP
U.79: .BLKB 8 ; 00BB4
;CHANNEL
U.80: .BLKB 8 ; 00BBC
;CHR_COUNT
U.81: .LONG 0 ; 00000000 00BC4
;ESC_FLG
U.82: .LONG 0 ; 00000000 00BC8
;IN_IOSB
U.83: .BLKB 32 ; 00BCC
;INP_BUF
U.84: .BLKB 322 ; 00BEC
.BLKB 2 ; 00D2E
;MSG
U.85: .BLKB 80 ; 00D30
;MSG_DES
U.86: .BLKB 8 ; 00D80
;OUT_BUF
U.87: .BLKB 322 ; 00D88
.BLKB 2 ; 00ECA
;OUT_BUFNUM
U.88: .BLKB 2 ; 00ECC
.BLKB 2 ; 00ECE
;OUT_EFN
U.89: .BLKB 2 ; 00ED0
.BLKB 2 ; 00ED2
;OUT_PTR
U.90: .BLKB 8 ; 00ED4
;MYT_QIO_FUNC
U.91: .BLKB 4 ; 00EDC
;ESC_CHR_LEN
U.92: .BLKB 4 ; 00EE0
;ESC_CHR_MSG
U.93: .BLKB 30 ; 00EE4
.BLKB 2 ; 00F02
;STATE
U.94: .BLKB 4 ; 00F04
.PSECT $PLIT$,NOWRT,NOEXE,2
P.ABI: .ASCII \Connecting to \<0><0> ; 69 74 63 65 6E 6E 6F 43 001A0
; 00 00 20 6F 74 20 67 6E 001A8
P.ABH: .LONG 17694734 ; 010E000E 001B0
.ADDRESS P.ABI ; 00000000' 001B4
P.ABK: .ASCII \. Type \ ; 20 65 70 79 54 20 20 2E 001B8
P.ABJ: .LONG 17694728 ; 010E0008 001C0
.ADDRESS P.ABK ; 00000000' 001C4
P.ABM: .ASCII \C to return to VAX/VMS Kermit-32]\<0><0><0>
; 74 65 72 20 6F 74 20 43 001C8
; 56 20 6F 74 20 6E 72 75 001D0
; 4B 20 53 4D 56 2F 58 41 001D8
; 32 33 2D 74 69 6D 72 65 001E0
; 00 00 00 5D 001E8
P.ABL: .LONG 17694753 ; 010E0021 001EC
.ADDRESS P.ABM ; 00000000' 001F0
P.ABO: .ASCII \Returning to VAX/VMS Kermit-32]\<0>
; 6E 69 6E 72 75 74 65 52 001F4
; 58 41 56 20 6F 74 20 67 001FC
; 72 65 4B 20 53 4D 56 2F 00204
; 00 5D 32 33 2D 74 69 6D 0020C
P.ABN: .LONG 17694751 ; 010E001F 00214
.ADDRESS P.ABO ; 00000000' 00218
P.ABQ: .ASCII \0 00:00:00.050\<0><0> ; 3A 30 30 3A 30 30 20 30 0021C
; 00 00 30 35 30 2E 30 30 00224
P.ABP: .LONG 17694734 ; 010E000E 0022C
.ADDRESS P.ABQ ; 00000000' 00230
P.ABS: .ASCII \SYS$INPUT:\<0><0> ; 55 50 4E 49 24 53 59 53 00234
; 00 00 3A 54 0023C
P.ABR: .LONG 17694730 ; 010E000A 00240
.ADDRESS P.ABS ; 00000000' 00244
U.95= P.ABH
U.96= P.ABJ
U.97= P.ABL
U.98= P.ABN
U.103= P.ABP
U.104= U.80+4
U.105= P.ABR
.EXTRN SYS$WAITFR
.PSECT $CODE$,NOWRT,2
;TYPE_OUT_BUF
U.106: .WORD ^M<R2,R3,R4,R5,R6> ;Save R2,R3,R4,R5,R6 2895 007C 00000
MOVAB G^SYS$READEF, R6 ;SYS$READEF, R6 56 00000000G 00 9E 00002
MOVAB G^U.94, R5 ;U.94, R5 55 00000000' 00 9E 00009
PUSHL R5 ;R5 2910 55 DD 00010
PUSHL #5 ;#5 05 DD 00012
CALLS #2, (R6) ;#2, SYS$READEF 66 02 FB 00014
MOVL R0, R4 ;R0, STATUS 54 50 D0 00017
CMPL R4, #1 ;STATUS, #1 01 54 D1 0001A
BEQL 1$ ;1$ 0B 13 0001D
MOVAB -52(R5), R0 ;OUT_EFN, R0 2913 50 CC A5 9E 0001F
MOVZBL @4(AP)[R0], -(SP) ;@DEV[R0], -(SP) 7E 04 BC40 9A 00023
BRB 3$ ;3$ 6C 11 00028
1$: MOVL 4(AP), R2 ;DEV, R2 2917 52 04 AC D0 0002A
MOVAB -52(R5)[R2], R3 ;OUT_EFN[R2], R3 53 CC A542 9E 0002E
MOVZBL (R3), -(SP) ;(R3), -(SP) 7E 63 9A 00033
CALLS #1, G^SYS$WAITFR ;#1, SYS$WAITFR 00000000G 00 01 FB 00036
MOVZBL (R3), -(SP) ;(R3), -(SP) 2918 7E 63 9A 0003D
CALLS #1, G^SYS$CLREF ;#1, SYS$CLREF 00000000G 00 01 FB 00040
PUSHL R5 ;R5 2920 55 DD 00047
PUSHL #5 ;#5 05 DD 00049
CALLS #2, (R6) ;#2, SYS$READEF 66 02 FB 0004B
CMPL R0, #1 ;R0, #1 01 50 D1 0004E
BNEQ 2$ ;2$ 40 12 00051
CLRQ -(SP) ;-(SP) 2924 7E 7C 00053
CLRQ -(SP) ;-(SP) 7E 7C 00055
MOVZWL -832(R5)[R2], -(SP) ;CHR_COUNT[R2], -(SP) 7E FCC0 C542 3C 00057
MOVZBL -56(R5)[R2], R0 ;OUT_BUFNUM[R2], R0 50 C8 A542 9A 0005D
MOVAW (R0)[R2], R0 ;(R0)[R2], R0 50 6042 3E 00062
MULL2 #80, R0 ;#80, R0 50 00000050 8F C4 00066
MOVAB -380(R5)[R0], R0 ;OUT_BUF[R0], R0 50 FE84 C540 9E 0006D
PUSHAB (R2)[R0] ;(R2)[R0] 6240 9F 00073
CLRQ -(SP) ;-(SP) 7E 7C 00076
CLRL -(SP) ;-(SP) 7E D4 00078
MOVZWL #304, -(SP) ;#304, -(SP) 7E 0130 8F 3C 0007A
PUSHL -840(R5)[R2] ;CHANNEL[R2] FCB8 C542 DD 0007F
MOVZBL (R3), -(SP) ;(R3), -(SP) 7E 63 9A 00084
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 00087
MOVL R0, R4 ;R0, STATUS 54 50 D0 0008E
BRB 4$ ;4$ 05 11 00091
2$: MOVZBL (R3), -(SP) ;(R3), -(SP) 2927 7E 63 9A 00093
3$: BRB 6$ ;6$ 4B 11 00096
4$: CLRW -832(R5)[R2] ;CHR_COUNT[R2] 2931 FCC0 C542 B4 00098
INCB (R3) ;(R3) 2932 63 96 0009D
MOVAB -56(R5)[R2], R1 ;OUT_BUFNUM[R2], R1 2934 51 C8 A542 9E 0009F
MOVZBL (R1), R0 ;(R1), R0 50 61 9A 000A4
INCL R0 ;R0 50 D6 000A7
MOVB R0, (R1) ;R0, (R1) 61 50 90 000A9
CMPL R0, #2 ;R0, #2 02 50 D1 000AC
BLSS 5$ ;5$ 0A 19 000AF
CLRB (R1) ;(R1) 2937 61 94 000B1
ASHL #1, R2, R0 ;#1, R2, R0 2938 52 01 78 000B3
; 50 000B6
ADDB3 #1, R0, (R3) ;#1, R0, (R3) 50 01 81 000B7
; 63 000BA
5$: MOVZBL (R1), R0 ;(R1), R0 2941 50 61 9A 000BB
MOVAW (R0)[R2], R0 ;(R0)[R2], R0 50 6042 3E 000BE
MULL2 #80, R0 ;#80, R0 50 00000050 8F C4 000C2
MOVAB -380(R5)[R0], R0 ;OUT_BUF[R0], R0 50 FE84 C540 9E 000C9
ADDL3 R2, R0, -48(R5)[R2] ;R2, R0, OUT_PTR[R2] 50 52 C1 000CF
; D0 A542 000D2
BLBS R4, 7$ ;STATUS, 7$ 2943 12 54 E8 000D5
PUSHL R4 ;STATUS 2946 54 DD 000D8
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 000DA
PUSHL #5 ;#5 2947 05 DD 000E1
6$: CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF 00000000G 00 01 FB 000E3
7$: MOVL R4, R0 ;STATUS, R0 2950 50 54 D0 000EA
RET ; 04 000ED
; Routine Size: 238 bytes, Routine Base: $CODE$ + 0EFE
; 2952 2 %SBTTL 'TERM_CONNECT -- TIME_UP'
; 2953 2 ROUTINE TIME_UP (OUTEFN) : NOVALUE =
; 2954 2
; 2955 2 !++
; 2956 2 ! AST routine called 0.1 second after first character is input. It calls
; 2957 2 ! TYPE_OUT_BUF to transmit output buffer.
; 2958 2 !--
; 2959 2
; 2960 3 BEGIN
; 2961 3
; 2962 3 LOCAL
; 2963 3 DEV;
; 2964 3
; 2965 3 IF (.OUTEFN - T_EFN_DISP) LEQ 0
; 2966 3 THEN
; 2967 3 DEV = 0 ! Device was MY_TERM
; 2968 3 ELSE
; 2969 3 DEV = 1; ! Device was TERM_NAME
; 2970 3
; 2971 3 TYPE_OUT_BUF (.DEV);
; 2972 2 END; ! End of TIME_UP
;TIME_UP
U.107: .WORD ^M<> ;Save nothing 2953 0000 00000
SUBL3 #2, 4(AP), R0 ;#2, OUTEFN, R0 2965 04 AC 02 C3 00002
; 50 00006
BGTR 1$ ;1$ 04 14 00007
CLRL R0 ;DEV 2967 50 D4 00009
BRB 2$ ;2$ 03 11 0000B
1$: MOVL #1, R0 ;#1, DEV 2969 50 01 D0 0000D
2$: PUSHL R0 ;DEV 2971 50 DD 00010
CALLS #1, W^U.106 ;#1, U.106 FEFB CF 01 FB 00012
RET ; 2972 04 00017
; Routine Size: 24 bytes, Routine Base: $CODE$ + 0FEC
; 2973 2 %SBTTL 'TERM_CONNECT -- STORE_INPUT'
; 2974 2 ROUTINE STORE_INPUT (DEV, INP_POINTER, NUM_CHR_IN) : NOVALUE =
; 2975 2
; 2976 2 !++
; 2977 2 ! This routine stores the input buffer in the output buffer and keeps
; 2978 2 ! track of the number of characters in the output buffer. It also
; 2979 2 ! calls TYPE_OUT_BUF when the output buffer is full and it sets up
; 2980 2 ! the timer routine TIME_UP.
; 2981 2 !--
; 2982 2
; 2983 3 BEGIN
; 2984 3
; 2985 3 EXTERNAL ROUTINE
; 2986 3 LOG_CHAR, ! Routine to log characters
; 2987 3 GEN_PARITY; ! Routine to generate parity
; 2988 3
; 2989 3 LOCAL
; 2990 3 STATUS;
; 2991 3
; 2992 3 IF (STATUS = $READEF (EFN = XITEFN, STATE = STATE)) NEQ SS$_WASCLR THEN RETURN;
; 2993 3
; 2994 3 IF .NUM_CHR_IN EQL 0 THEN RETURN .STATUS;
; 2995 3
; 2996 3 IF .NUM_CHR_IN + .CHR_COUNT [.DEV] GTR OUT_BUFLEN
; 2997 3 THEN
; 2998 4 BEGIN
; 2999 4 !
; 3000 4 ! If we don't have enough room in the buffer for all of the characters, call
; 3001 4 ! ourself to dump what will fit, then proceed with what remains.
; 3002 4 !
; 3003 4
; 3004 4 LOCAL
; 3005 4 SAVED_CHR_CNT; ! Saved character count
; 3006 4
; 3007 4 SAVED_CHR_CNT = OUT_BUFLEN - .CHR_COUNT [.DEV];
; 3008 4 NUM_CHR_IN = .NUM_CHR_IN - .SAVED_CHR_CNT;
; 3009 4 STORE_INPUT (.DEV, .INP_POINTER, .SAVED_CHR_CNT);
; 3010 4 INP_POINTER = CH$PLUS (.INP_POINTER, .SAVED_CHR_CNT);
; 3011 3 END;
; 3012 3
; 3013 3 IF .CHR_COUNT [.DEV] EQL 0
; 3014 3 THEN
; 3015 4 BEGIN
; 3016 4 STATUS = $SETIMR (DAYTIM = BTIMUP, ASTADR = TIME_UP, REQIDT = .OUT_EFN [.DEV]);
; 3017 4
; 3018 4 IF NOT .STATUS
; 3019 4 THEN
; 3020 5 BEGIN
; 3021 5 LIB$SIGNAL (.STATUS);
; 3022 5 $SETEF (EFN = XITEFN);
; 3023 5 RETURN .STATUS;
; 3024 4 END;
; 3025 4
; 3026 3 END;
; 3027 3
; 3028 3 ! We must generate parity for the communications terminal
; 3029 3
; 3030 3 IF .DEV EQL 0
; 3031 3 THEN
; 3032 4 BEGIN
; 3033 4
; 3034 4 LOCAL
; 3035 4 POINTER;
; 3036 4
; 3037 4 POINTER = .INP_POINTER;
; 3038 4
; 3039 4 DECR I FROM .NUM_CHR_IN TO 1 DO
; 3040 4 CH$WCHAR_A (GEN_PARITY (CH$RCHAR_A (POINTER)), OUT_PTR [.DEV]);
; 3041 4
; 3042 4 END
; 3043 3 ELSE
; 3044 3 OUT_PTR [.DEV] = CH$MOVE (.NUM_CHR_IN, .INP_POINTER, .OUT_PTR [.DEV]);
; 3045 3
; 3046 3 !
; 3047 3 ! If we want logging, do it now
; 3048 3 !
; 3049 3
; 3050 3 IF (.DEV EQL 1 OR .ECHO_FLAG) AND .SESSION_OPEN AND .SESSION_LOGGING
; 3051 3 THEN
; 3052 4 BEGIN
; 3053 4
; 3054 4 LOCAL
; 3055 4 STATUS,
; 3056 4 POINTER;
; 3057 4
; 3058 4 POINTER = .INP_POINTER;
; 3059 4
; 3060 4 DECR I FROM .NUM_CHR_IN TO 1 DO
; 3061 4
; 3062 4 IF NOT LOG_CHAR (CH$RCHAR_A (POINTER), SESSION_RAB)
; 3063 4 THEN
; 3064 5 BEGIN
; 3065 5 SESSION_LOGGING = FALSE;
; 3066 5 EXITLOOP;
; 3067 4 END;
; 3068 4
; 3069 3 END;
; 3070 3
; 3071 3 IF (CHR_COUNT [.DEV] = .CHR_COUNT [.DEV] + .NUM_CHR_IN) GEQ OUT_BUFLEN - INP_BUFSIZ
; 3072 3 THEN
; 3073 4 BEGIN
; 3074 4 $CANTIM (REQIDT = .OUT_EFN [.DEV]);
; 3075 4 TYPE_OUT_BUF (.DEV);
; 3076 3 END;
; 3077 3
; 3078 3 RETURN .STATUS;
; 3079 2 END; ! End of STORE_INPUT
.EXTRN GEN_PARITY
;STORE_INPUT
U.108: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10> ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10 2974 07FC 00000
MOVAB B^U.108, R10 ;U.108, R10 5A FB AF 9E 00002
MOVAB G^U.89, R9 ;U.89, R9 59 00000000' 00 9E 00006
PUSHAB 52(R9) ;STATE 2992 34 A9 9F 0000D
PUSHL #5 ;#5 05 DD 00010
CALLS #2, G^SYS$READEF ;#2, SYS$READEF 00000000G 00 02 FB 00012
MOVL R0, R3 ;R0, STATUS 53 50 D0 00019
CMPL R3, #1 ;STATUS, #1 01 53 D1 0001C
BEQL 1$ ;1$ 01 13 0001F
RET ; 04 00021
1$: TSTL 12(AP) ;NUM_CHR_IN 2994 0C AC D5 00022
BNEQ 2$ ;2$ 01 12 00025
RET ; 04 00027
2$: MOVL 4(AP), R7 ;DEV, R7 2996 57 04 AC D0 00028
MOVAW -780(R9)[R7], R8 ;CHR_COUNT[R7], R8 58 FCF4 C947 3E 0002C
MOVZWL (R8), R0 ;(R8), R0 50 68 3C 00032
ADDL2 12(AP), R0 ;NUM_CHR_IN, R0 50 0C AC C0 00035
CMPL R0, #80 ;R0, #80 00000050 8F 50 D1 00039
BLEQ 3$ ;3$ 1D 15 00040
MOVZWL (R8), R2 ;(R8), SAVED_CHR_CNT 3007 52 68 3C 00042
SUBL3 R2, #80, R2 ;SAVED_CHR_CNT, #80, SAVED_CHR_CNT 00000050 8F 52 C3 00045
; 52 0004C
SUBL2 R2, 12(AP) ;SAVED_CHR_CNT, NUM_CHR_IN 3008 0C AC 52 C2 0004D
PUSHL R2 ;SAVED_CHR_CNT 3009 52 DD 00051
PUSHL 8(AP) ;INP_POINTER 08 AC DD 00053
PUSHL R7 ;R7 57 DD 00056
CALLS #3, (R10) ;#3, STORE_INPUT 6A 03 FB 00058
ADDL2 R2, 8(AP) ;SAVED_CHR_CNT, INP_POINTER 3010 08 AC 52 C0 0005B
3$: TSTW (R8) ;(R8) 3013 68 B5 0005F
BNEQ 4$ ;4$ 2F 12 00061
CLRL -(SP) ;-(SP) 3016 7E D4 00063
MOVZBL (R9)[R7], -(SP) ;OUT_EFN[R7], -(SP) 7E 6947 9A 00065
PUSHAB -24(R10) ;TIME_UP E8 AA 9F 00069
PUSHAB -796(R9) ;BTIMUP FCE4 C9 9F 0006C
CLRL -(SP) ;-(SP) 7E D4 00070
CALLS #5, G^SYS$SETIMR ;#5, SYS$SETIMR 00000000G 00 05 FB 00072
MOVL R0, R3 ;R0, STATUS 53 50 D0 00079
BLBS R3, 4$ ;STATUS, 4$ 3018 13 53 E8 0007C
PUSHL R3 ;STATUS 3021 53 DD 0007F
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00081
PUSHL #5 ;#5 3022 05 DD 00088
CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF 00000000G 00 01 FB 0008A
RET ; 3023 04 00091
4$: MOVAL 4(R9)[R7], R6 ;OUT_PTR[R7], R6 3040 56 04 A947 DE 00092
TSTL R7 ;R7 3030 57 D5 00097
BNEQ 7$ ;7$ 20 12 00099
MOVL 8(AP), R3 ;INP_POINTER, POINTER 3037 53 08 AC D0 0009B
ADDL3 #1, 12(AP), R2 ;#1, NUM_CHR_IN, I 3039 0C AC 01 C1 0009F
; 52 000A3
BRB 6$ ;6$ 10 11 000A4
5$: MOVZBL (R3)+, -(SP) ;(POINTER)+, -(SP) 3040 7E 83 9A 000A6
CALLS #1, G^GEN_PARITY ;#1, GEN_PARITY 00000000G 00 01 FB 000A9
MOVB R0, @0(R6) ;R0, @0(R6) 00 B6 50 90 000B0
INCL (R6) ;(R6) 66 D6 000B4
6$: SOBGTR R2, 5$ ;I, 5$ ED 52 F5 000B6
BRB 8$ ;8$ 0A 11 000B9
7$: MOVC3 12(AP), @8(AP), @0(R6) ;NUM_CHR_IN, @INP_POINTER, @0(R6) 3044 08 BC 0C AC 28 000BB
; 00 B6 000C0
MOVL R3, (R6) ;R3, (R6) 66 53 D0 000C2
8$: CMPL R7, #1 ;R7, #1 3050 01 57 D1 000C5
BEQL 9$ ;9$ 07 13 000C8
BLBC G^ECHO_FLAG, 12$ ;ECHO_FLAG, 12$ 2F 00000000G 00 E9 000CA
9$: BLBC -2424(R9), 12$ ;SESSION_OPEN, 12$ 2A F688 C9 E9 000D1
BLBC -2420(R9), 12$ ;SESSION_LOGGING, 12$ 25 F68C C9 E9 000D6
MOVL 8(AP), R3 ;INP_POINTER, POINTER 3058 53 08 AC D0 000DB
ADDL3 #1, 12(AP), R2 ;#1, NUM_CHR_IN, I 3060 0C AC 01 C1 000DF
; 52 000E3
BRB 11$ ;11$ 17 11 000E4
10$: PUSHAB -2624(R9) ;SESSION_RAB 3062 F5C0 C9 9F 000E6
MOVZBL (R3)+, -(SP) ;(POINTER)+, -(SP) 7E 83 9A 000EA
CALLS #2, G^LOG_CHAR ;#2, LOG_CHAR 00000000G 00 02 FB 000ED
BLBS R0, 11$ ;R0, 11$ 06 50 E8 000F4
CLRL -2420(R9) ;SESSION_LOGGING 3065 F68C C9 D4 000F7
BRB 12$ ;12$ 3066 03 11 000FB
11$: SOBGTR R2, 10$ ;I, 10$ 3060 E6 52 F5 000FD
12$: MOVZWL (R8), R0 ;(R8), R0 3071 50 68 3C 00100
ADDL2 12(AP), R0 ;NUM_CHR_IN, R0 50 0C AC C0 00103
MOVW R0, (R8) ;R0, (R8) 68 50 B0 00107
TSTL R0 ;R0 50 D5 0010A
BLSS 13$ ;13$ 14 19 0010C
CLRL -(SP) ;-(SP) 3074 7E D4 0010E
MOVZBL (R9)[R7], -(SP) ;OUT_EFN[R7], -(SP) 7E 6947 9A 00110
CALLS #2, G^SYS$CANTIM ;#2, SYS$CANTIM 00000000G 00 02 FB 00114
PUSHL R7 ;R7 3075 57 DD 0011B
CALLS #1, -262(R10) ;#1, TYPE_OUT_BUF FEFA CA 01 FB 0011D
13$: RET ; 3078 04 00122
; Routine Size: 291 bytes, Routine Base: $CODE$ + 1004
; 3080 2 %SBTTL 'TERM_CONNECT -- MYTINP'
; 3081 2 ROUTINE MYTINP (INP_BUFNUM) =
; 3082 2
; 3083 2 !++
; 3084 2 ! This AST routine gets characters from the channel MYT_CHAN and outputs
; 3085 2 ! them on the channel TERM_CHAN. It also checks to see if the exit
; 3086 2 ! characters have been typed. If they have been typed, MYTINP sets the
; 3087 2 ! event flag XITEFN. INP_BUFNUM contains the # of the input buffer.
; 3088 2 !--
; 3089 2
; 3090 3 BEGIN
; 3091 3
; 3092 3 OWN
; 3093 3 STATUS,
; 3094 3 NUM_CHR_IN;
; 3095 3
; 3096 3 %SBTTL 'TERM_CONNECT -- MYTINP -- CHK_FOR_EXIT'
; 3097 3 ROUTINE CHK_FOR_EXIT (INP_BUFNUM) =
; 3098 3
; 3099 3 !++
; 3100 3 ! This routine checks to see if the exit characters have been typed. It
; 3101 3 ! returns TRUE if found and FALSE if not. If only 1 ESCAPE_CHR found
; 3102 3 ! then ESC_FLG is set to TRUE.
; 3103 3 !--
; 3104 3
; 3105 4 BEGIN
; 3106 4 ROUTINE TYPE_MSG (MSG_DESC, OPEN_FLAG, CLOSE_FLAG, CRLF_FLAG) : NOVALUE =
; 3107 5 BEGIN
; 3108 5
; 3109 5 MAP
; 3110 5 MSG_DESC : REF BLOCK [8, BYTE];
; 3111 5
; 3112 5 IF .OPEN_FLAG
; 3113 5 THEN
; 3114 6 BEGIN
; 3115 6 STORE_INPUT (TRM, CH$PTR (UPLIT BYTE(%C'[')), 1);
; 3116 6
; 3117 6 IF .NODE_DESC [DSC$W_LENGTH] GTR 0
; 3118 6 THEN
; 3119 6 STORE_INPUT (TRM,
; 3120 6 CH$PTR (.NODE_DESC [DSC$A_POINTER]), .NODE_DESC [DSC$W_LENGTH]);
; 3121 6
; 3122 5 END;
; 3123 5
; 3124 5 STORE_INPUT (TRM, CH$PTR (.MSG_DESC [DSC$A_POINTER]), .MSG_DESC [DSC$W_LENGTH]);
; 3125 5
; 3126 5 IF .CLOSE_FLAG THEN STORE_INPUT (TRM, CH$PTR (UPLIT BYTE(%C']')), 1);
; 3127 5
; 3128 5 IF .CRLF_FLAG THEN STORE_INPUT (TRM, CH$PTR (UPLIT BYTE(CHR_CRT, CHR_LFD)), 2);
; 3129 5
; 3130 4 END;
.PSECT $OWN$,NOEXE,2
;STATUS
U.110: .BLKB 4 ; 00F08
;NUM_CHR_IN
U.111: .BLKB 4 ; 00F0C
.PSECT $PLIT$,NOWRT,NOEXE,2
P.ABT: .BYTE 91 ; 5B 00248
P.ABU: .BYTE 93 ; 5D 00249
P.ABV: .BYTE 13, 10 ; 0A 0D 0024A
.PSECT $CODE$,NOWRT,2
;TYPE_MSG
U.113: .WORD ^M<R2,R3> ;Save R2,R3 3106 000C 00000
MOVAB G^P.ABT, R3 ;P.ABT, R3 53 00000000' 00 9E 00002
MOVAB W^U.108, R2 ;U.108, R2 52 FED0 CF 9E 00009
BLBC 8(AP), 1$ ;OPEN_FLAG, 1$ 3112 1F 08 AC E9 0000E
PUSHL #1 ;#1 3115 01 DD 00012
PUSHL R3 ;R3 53 DD 00014
PUSHL #1 ;#1 01 DD 00016
CALLS #3, (R2) ;#3, STORE_INPUT 62 03 FB 00018
MOVZWL G^NODE_DESC, R0 ;NODE_DESC, R0 3117 50 00000000' 00 3C 0001B
BLEQ 1$ ;1$ 0D 15 00022
PUSHL R0 ;R0 3119 50 DD 00024
PUSHL G^NODE_DESC+4 ;NODE_DESC+4 3120 00000000' 00 DD 00026
PUSHL #1 ;#1 3119 01 DD 0002C
CALLS #3, (R2) ;#3, STORE_INPUT 62 03 FB 0002E
1$: MOVL 4(AP), R0 ;MSG_DESC, R0 3124 50 04 AC D0 00031
MOVZWL (R0), -(SP) ;(R0), -(SP) 7E 60 3C 00035
PUSHL 4(R0) ;4(R0) 04 A0 DD 00038
PUSHL #1 ;#1 01 DD 0003B
CALLS #3, (R2) ;#3, STORE_INPUT 62 03 FB 0003D
BLBC 12(AP), 2$ ;CLOSE_FLAG, 2$ 3126 0A 0C AC E9 00040
PUSHL #1 ;#1 01 DD 00044
PUSHAB 1(R3) ;P.ABU 01 A3 9F 00046
PUSHL #1 ;#1 01 DD 00049
CALLS #3, (R2) ;#3, STORE_INPUT 62 03 FB 0004B
2$: BLBC 16(AP), 3$ ;CRLF_FLAG, 3$ 3128 0A 10 AC E9 0004E
PUSHL #2 ;#2 02 DD 00052
PUSHAB 2(R3) ;P.ABV 02 A3 9F 00054
PUSHL #1 ;#1 01 DD 00057
CALLS #3, (R2) ;#3, STORE_INPUT 62 03 FB 00059
3$: RET ; 3130 04 0005C
; Routine Size: 93 bytes, Routine Base: $CODE$ + 1127
; 3131 4
; 3132 4 LOCAL
; 3133 4 EAT_CHR, ! Number of input characters to eat
; 3134 4 ESC_PTR,
; 3135 4 INDEX : INITIAL (0), ! Displacement of ESC from beginning of buffer
; 3136 4 PTR0; ! Points to beginning of input buffer
; 3137 4
; 3138 4 PTR0 = CH$PTR (INP_BUF [MYT, .INP_BUFNUM]);
; 3139 4
; 3140 4 IF .ESC_FLG EQL TRUE ! ESCAPE_CHR was previously typed.
; 3141 4 THEN
; 3142 5 BEGIN
; 3143 5 INDEX = 0;
; 3144 5 ESC_PTR = .PTR0;
; 3145 5 ESC_FLG = FALSE;
; 3146 5 END
; 3147 4 ELSE
; 3148 4
; 3149 4 IF (ESC_PTR = CH$FIND_CH (.NUM_CHR_IN, .PTR0, .ESCAPE_CHR)) EQL 0
; 3150 4 THEN
; 3151 4 RETURN FALSE
; 3152 4 ELSE
; 3153 5 BEGIN
; 3154 5 INDEX = CH$DIFF (.PTR0, .ESC_PTR);
; 3155 5
; 3156 6 IF .INDEX NEQ (NUM_CHR_IN = .NUM_CHR_IN - 1)
; 3157 5 THEN
; 3158 6 BEGIN
; 3159 6 CH$COPY (.NUM_CHR_IN - .INDEX, CH$PLUS (.ESC_PTR, 1), 0,
; 3160 6 .NUM_CHR_IN - .INDEX, .ESC_PTR);
; 3161 6 END
; 3162 5 ELSE ! ESCAPE_CHR was last character.
; 3163 6 BEGIN
; 3164 6 ESC_FLG = TRUE;
; 3165 6 RETURN FALSE;
; 3166 5 END;
; 3167 5
; 3168 4 END;
; 3169 4
; 3170 4 EAT_CHR = 0; ! No characters to eat
; 3171 4
; 3172 4 SELECTONE CH$RCHAR (.ESC_PTR) OF
; 3173 4 SET
; 3174 4
; 3175 4 ['?'] :
; 3176 5 BEGIN
; 3177 5 TYPE_MSG (%ASCID'Escape commands are:', TRUE, FALSE, TRUE);
; 3178 5 Type_Msg (%ASCID' B - Sends a break', FALSE, FALSE, TRUE);
; 3179 5 TYPE_MSG (%ASCID' C - Return to VAX/VMS Kermit-32', FALSE, FALSE, TRUE);
; 3180 5 TYPE_MSG (%ASCID' Q - Suspend logging to session log file (if any)', FALSE,
; 3181 5 FALSE, TRUE);
; 3182 5 TYPE_MSG (%ASCID' R - Resume logging to session log file (if any)', FALSE,
; 3183 5 FALSE, TRUE);
; 3184 5 TYPE_MSG (%ASCID' S - Show status', FALSE, FALSE, TRUE);
; 3185 5 TYPE_MSG (%ASCID' 0 - Send a null', FALSE, FALSE, TRUE);
; 3186 5 TYPE_MSG (%ASCID' ? - Type this text', FALSE, FALSE, TRUE);
; 3187 5 TYPE_MSG (%ASCID' ', FALSE, FALSE, FALSE);
; 3188 5 STORE_INPUT (TRM, ESC_CHR_MSG, .ESC_CHR_LEN);
; 3189 5 TYPE_MSG (%ASCID' - Send escape character', FALSE, TRUE, TRUE);
; 3190 5 EAT_CHR = 1;
; 3191 4 END;
; 3192 4
; 3193 4 ['B', 'b'] :
; 3194 5 BEGIN
; 3195 5 Send_Break_TTY_Flag = 1;
; 3196 5 EAT_CHR = 1;
; 3197 4 END;
; 3198 4
; 3199 4 ['C', 'c'] :
; 3200 5 BEGIN
; 3201 5 NUM_CHR_IN = .INDEX;
; 3202 5 RETURN TRUE;
; 3203 4 END;
; 3204 4
; 3205 4 ['Q', 'q'] :
; 3206 5 BEGIN
; 3207 5
; 3208 5 BIND
; 3209 5 NO_LOG_TEXT = %ASCID'logging already disabled',
; 3210 5 STOP_LOG_TEXT = %ASCID'logging disabled';
; 3211 5
; 3212 5 IF .SESSION_LOGGING
; 3213 5 THEN
; 3214 5 TYPE_MSG (STOP_LOG_TEXT, TRUE, TRUE, TRUE)
; 3215 5 ELSE
; 3216 5 TYPE_MSG (NO_LOG_TEXT, TRUE, TRUE, TRUE);
; 3217 5
; 3218 5 SESSION_LOGGING = FALSE;
; 3219 5 EAT_CHR = 1;
; 3220 4 END;
; 3221 4
; 3222 4 ['R', 'r'] :
; 3223 5 BEGIN ! Resume logging
; 3224 5
; 3225 5 BIND
; 3226 5 NO_LOG_TEXT = %ASCID'no log file to enable',
; 3227 5 START_LOG_TEXT = %ASCID'logging enabled';
; 3228 5
; 3229 5 SESSION_LOGGING = .SESSION_OPEN;
; 3230 5
; 3231 5 IF .SESSION_LOGGING
; 3232 5 THEN
; 3233 5 TYPE_MSG (START_LOG_TEXT, TRUE, TRUE, TRUE)
; 3234 5 ELSE
; 3235 5 TYPE_MSG (NO_LOG_TEXT, TRUE, TRUE, TRUE);
; 3236 5
; 3237 5 EAT_CHR = 1;
; 3238 4 END;
; 3239 4
; 3240 4 ['S', 's'] :
; 3241 5 BEGIN
; 3242 5 TYPE_MSG (%ASCID'Connected to ', TRUE, FALSE, FALSE);
; 3243 5 TYPE_MSG (TERM_DESC, FALSE, FALSE, TRUE);
; 3244 5 TYPE_MSG (%ASCID' Escape character: "', FALSE, FALSE, FALSE);
; 3245 5 STORE_INPUT (TRM, ESC_CHR_MSG, .ESC_CHR_LEN);
; 3246 5 TYPE_MSG (%ASCID'"', FALSE, FALSE, TRUE);
; 3247 5 TYPE_MSG (%ASCID' Local echo: ', FALSE, FALSE, FALSE);
; 3248 5
; 3249 5 IF .ECHO_FLAG
; 3250 5 THEN
; 3251 5 TYPE_MSG (%ASCID'On', FALSE, FALSE, TRUE)
; 3252 5 ELSE
; 3253 5 TYPE_MSG (%ASCID'Off', FALSE, FALSE, TRUE);
; 3254 5
; 3255 5 TYPE_MSG (%ASCID' Parity: ', FALSE, FALSE, FALSE);
; 3256 5
; 3257 5 CASE .PARITY_TYPE FROM PR_MIN TO PR_MAX OF
; 3258 5 SET
; 3259 5
; 3260 5 [PR_NONE] :
; 3261 5 TYPE_MSG (%ASCID'None', FALSE, FALSE, TRUE);
; 3262 5
; 3263 5 [PR_ODD] :
; 3264 5 TYPE_MSG (%ASCID'Odd', FALSE, FALSE, TRUE);
; 3265 5
; 3266 5 [PR_EVEN] :
; 3267 5 TYPE_MSG (%ASCID'Even', FALSE, FALSE, TRUE);
; 3268 5
; 3269 5 [PR_MARK] :
; 3270 5 TYPE_MSG (%ASCID'Mark', FALSE, FALSE, TRUE);
; 3271 5
; 3272 5 [PR_SPACE] :
; 3273 5 TYPE_MSG (%ASCID'Space', FALSE, FALSE, TRUE);
; 3274 5 TES;
; 3275 5
; 3276 5 TYPE_MSG (%ASCID' Logging: ', FALSE, FALSE, FALSE);
; 3277 5
; 3278 5 IF .SESSION_OPEN GTR 0
; 3279 5 THEN
; 3280 6 BEGIN
; 3281 6 TYPE_MSG (SESSION_DESC, FALSE, FALSE, FALSE);
; 3282 6
; 3283 6 IF .SESSION_LOGGING
; 3284 6 THEN
; 3285 6 TYPE_MSG (%ASCID' Enabled', FALSE, TRUE, TRUE)
; 3286 6 ELSE
; 3287 6 TYPE_MSG (%ASCID' Disabled', FALSE, TRUE, TRUE);
; 3288 6
; 3289 6 END
; 3290 5 ELSE
; 3291 5 TYPE_MSG (%ASCID' None specifed', FALSE, TRUE, TRUE);
; 3292 5
; 3293 5 EAT_CHR = 1; ! Eat the "S"
; 3294 4 END;
; 3295 4
; 3296 4 [.ESCAPE_CHR] :
; 3297 4 CH$WCHAR (.ESCAPE_CHR, .ESC_PTR); ! Write the escape character
; 3298 4
; 3299 4 ['0'] :
; 3300 4 CH$WCHAR (CHR_NUL, .ESC_PTR); ! Write a null
; 3301 4
; 3302 4 [OTHERWISE] :
; 3303 5 BEGIN ! Send a bell char. to MY_TERM
; 3304 5 STORE_INPUT (TRM, CH$PTR (UPLIT BYTE(CHR_BEL)), 1);
; 3305 5 EAT_CHR = 1; ! Eat the character
; 3306 4 END;
; 3307 4 TES;
; 3308 4
; 3309 4 IF .EAT_CHR GTR 0
; 3310 4 THEN
; 3311 4
; 3312 4 IF (NUM_CHR_IN = .NUM_CHR_IN - .EAT_CHR) NEQ .INDEX
; 3313 4 THEN
; 3314 4 CH$COPY (.NUM_CHR_IN - .INDEX, CH$PLUS (.ESC_PTR, .EAT_CHR), CHR_NUL,
; 3315 4 .NUM_CHR_IN - .INDEX, .ESC_PTR);
; 3316 4
; 3317 4 RETURN FALSE;
; 3318 3 END; ! End of CHK_FOR_EXIT
.PSECT $PLIT$,NOWRT,NOEXE,2
P.ABX: .ASCII \Escape commands are:\ ; 63 20 65 70 61 63 73 45 0024C
; 20 73 64 6E 61 6D 6D 6F 00254
; 3A 65 72 61 0025C
P.ABW: .LONG 17694740 ; 010E0014 00260
.ADDRESS P.ABX ; 00000000' 00264
P.ABZ: .ASCII <9>\B - Sends a break\<0><0> ; 6E 65 53 20 2D 20 42 09 00268
; 65 72 62 20 61 20 73 64 00270
; 00 00 6B 61 00278
P.ABY: .LONG 17694738 ; 010E0012 0027C
.ADDRESS P.ABZ ; 00000000' 00280
P.ACB: .ASCII <9>\C - Return to VAX/VMS Kermit-32\
; 74 65 52 20 2D 20 43 09 00284
; 56 20 6F 74 20 6E 72 75 0028C
; 4B 20 53 4D 56 2F 58 41 00294
; 32 33 2D 74 69 6D 72 65 0029C
P.ACA: .LONG 17694752 ; 010E0020 002A4
.ADDRESS P.ACB ; 00000000' 002A8
P.ACD: .ASCII <9>\Q - Suspend logging to session log file (if any)\<0><0>
; 73 75 53 20 2D 20 51 09 002AC
; 67 6F 6C 20 64 6E 65 70 002B4
; 20 6F 74 20 67 6E 69 67 002BC
; 20 6E 6F 69 73 73 65 73 002C4
; 65 6C 69 66 20 67 6F 6C 002CC
; 79 6E 61 20 66 69 28 20 002D4
; 00 00 29 002DC
.ASCII <0> ; 00 002DF
P.ACC: .LONG 17694769 ; 010E0031 002E0
.ADDRESS P.ACD ; 00000000' 002E4
P.ACF: .ASCII <9>\R - Resume logging to session log file (if any)\
; 73 65 52 20 2D 20 52 09 002E8
; 67 67 6F 6C 20 65 6D 75 002F0
; 73 20 6F 74 20 67 6E 69 002F8
; 6C 20 6E 6F 69 73 73 65 00300
; 20 65 6C 69 66 20 67 6F 00308
; 29 79 6E 61 20 66 69 28 00310
P.ACE: .LONG 17694768 ; 010E0030 00318
.ADDRESS P.ACF ; 00000000' 0031C
P.ACH: .ASCII <9>\S - Show status\ ; 6F 68 53 20 2D 20 53 09 00320
; 73 75 74 61 74 73 20 77 00328
P.ACG: .LONG 17694736 ; 010E0010 00330
.ADDRESS P.ACH ; 00000000' 00334
P.ACJ: .ASCII <9>\0 - Send a null\ ; 6E 65 53 20 2D 20 30 09 00338
; 6C 6C 75 6E 20 61 20 64 00340
P.ACI: .LONG 17694736 ; 010E0010 00348
.ADDRESS P.ACJ ; 00000000' 0034C
P.ACL: .ASCII <9>\? - Type this text\<0> ; 70 79 54 20 2D 20 3F 09 00350
; 74 20 73 69 68 74 20 65 00358
; 00 74 78 65 00360
P.ACK: .LONG 17694739 ; 010E0013 00364
.ADDRESS P.ACL ; 00000000' 00368
P.ACN: .ASCII <9><0><0><0> ; 00 00 00 09 0036C
P.ACM: .LONG 17694721 ; 010E0001 00370
.ADDRESS P.ACN ; 00000000' 00374
P.ACP: .ASCII \ - Send escape character\ ; 20 64 6E 65 53 20 2D 20 00378
; 63 20 65 70 61 63 73 65 00380
; 72 65 74 63 61 72 61 68 00388
P.ACO: .LONG 17694744 ; 010E0018 00390
.ADDRESS P.ACP ; 00000000' 00394
P.ACR: .ASCII \logging already disabled\ ; 20 67 6E 69 67 67 6F 6C 00398
; 20 79 64 61 65 72 6C 61 003A0
; 64 65 6C 62 61 73 69 64 003A8
P.ACQ: .LONG 17694744 ; 010E0018 003B0
.ADDRESS P.ACR ; 00000000' 003B4
P.ACT: .ASCII \logging disabled\ ; 20 67 6E 69 67 67 6F 6C 003B8
; 64 65 6C 62 61 73 69 64 003C0
P.ACS: .LONG 17694736 ; 010E0010 003C8
.ADDRESS P.ACT ; 00000000' 003CC
P.ACV: .ASCII \no log file to enable\<0><0><0> ; 66 20 67 6F 6C 20 6F 6E 003D0
; 65 20 6F 74 20 65 6C 69 003D8
; 00 00 00 65 6C 62 61 6E 003E0
P.ACU: .LONG 17694741 ; 010E0015 003E8
.ADDRESS P.ACV ; 00000000' 003EC
P.ACX: .ASCII \logging enabled\<0> ; 20 67 6E 69 67 67 6F 6C 003F0
; 00 64 65 6C 62 61 6E 65 003F8
P.ACW: .LONG 17694735 ; 010E000F 00400
.ADDRESS P.ACX ; 00000000' 00404
P.ACZ: .ASCII \Connected to \<0><0><0> ; 65 74 63 65 6E 6E 6F 43 00408
; 00 00 00 20 6F 74 20 64 00410
P.ACY: .LONG 17694733 ; 010E000D 00418
.ADDRESS P.ACZ ; 00000000' 0041C
P.ADB: .ASCII <9>\Escape character: "\ ; 20 65 70 61 63 73 45 09 00420
; 65 74 63 61 72 61 68 63 00428
; 22 20 3A 72 00430
P.ADA: .LONG 17694740 ; 010E0014 00434
.ADDRESS P.ADB ; 00000000' 00438
P.ADD: .ASCII \"\<0><0><0> ; 00 00 00 22 0043C
P.ADC: .LONG 17694721 ; 010E0001 00440
.ADDRESS P.ADD ; 00000000' 00444
P.ADF: .ASCII <9>\Local echo: \<0><0><0> ; 65 20 6C 61 63 6F 4C 09 00448
; 00 00 00 20 3A 6F 68 63 00450
P.ADE: .LONG 17694733 ; 010E000D 00458
.ADDRESS P.ADF ; 00000000' 0045C
P.ADH: .ASCII \On\<0><0> ; 00 00 6E 4F 00460
P.ADG: .LONG 17694722 ; 010E0002 00464
.ADDRESS P.ADH ; 00000000' 00468
P.ADJ: .ASCII \Off\<0> ; 00 66 66 4F 0046C
P.ADI: .LONG 17694723 ; 010E0003 00470
.ADDRESS P.ADJ ; 00000000' 00474
P.ADL: .ASCII <9>\Parity: \<0><0><0> ; 3A 79 74 69 72 61 50 09 00478
; 00 00 00 20 00480
P.ADK: .LONG 17694729 ; 010E0009 00484
.ADDRESS P.ADL ; 00000000' 00488
P.ADN: .ASCII \None\ ; 65 6E 6F 4E 0048C
P.ADM: .LONG 17694724 ; 010E0004 00490
.ADDRESS P.ADN ; 00000000' 00494
P.ADP: .ASCII \Odd\<0> ; 00 64 64 4F 00498
P.ADO: .LONG 17694723 ; 010E0003 0049C
.ADDRESS P.ADP ; 00000000' 004A0
P.ADR: .ASCII \Even\ ; 6E 65 76 45 004A4
P.ADQ: .LONG 17694724 ; 010E0004 004A8
.ADDRESS P.ADR ; 00000000' 004AC
P.ADT: .ASCII \Mark\ ; 6B 72 61 4D 004B0
P.ADS: .LONG 17694724 ; 010E0004 004B4
.ADDRESS P.ADT ; 00000000' 004B8
P.ADV: .ASCII \Space\<0><0><0> ; 00 00 00 65 63 61 70 53 004BC
P.ADU: .LONG 17694725 ; 010E0005 004C4
.ADDRESS P.ADV ; 00000000' 004C8
P.ADX: .ASCII <9>\Logging: \<0><0> ; 67 6E 69 67 67 6F 4C 09 004CC
; 00 00 20 3A 004D4
P.ADW: .LONG 17694730 ; 010E000A 004D8
.ADDRESS P.ADX ; 00000000' 004DC
P.ADZ: .ASCII \ Enabled\ ; 64 65 6C 62 61 6E 45 20 004E0
P.ADY: .LONG 17694728 ; 010E0008 004E8
.ADDRESS P.ADZ ; 00000000' 004EC
P.AEB: .ASCII \ Disabled\<0><0><0> ; 65 6C 62 61 73 69 44 20 004F0
; 00 00 00 64 004F8
P.AEA: .LONG 17694729 ; 010E0009 004FC
.ADDRESS P.AEB ; 00000000' 00500
P.AED: .ASCII \ None specifed\<0><0> ; 70 73 20 65 6E 6F 4E 20 00504
; 00 00 64 65 66 69 63 65 0050C
P.AEC: .LONG 17694734 ; 010E000E 00514
.ADDRESS P.AED ; 00000000' 00518
P.AEE: .BYTE 7 ; 07 0051C
U.115= P.ACQ
U.116= P.ACS
U.117= P.ACU
U.118= P.ACW
.PSECT $CODE$,NOWRT,2
;CHK_FOR_EXIT
U.112: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,- 3097 0FFC 00000
R11> ;R11
MOVAB G^SEND_BREAK_TTY_FLAG, R11 ;SEND_BREAK_TTY_FLAG, R11 5B 00000000' 00 9E 00002
MOVAB G^U.111, R10 ;U.111, R10 5A 00000000' 00 9E 00009
MOVAB B^U.113, R9 ;U.113, R9 59 90 AF 9E 00010
MOVAB G^P.ABW, R8 ;P.ABW, R8 58 00000000' 00 9E 00014
CLRL R7 ;INDEX 3135 57 D4 0001B
MULL3 #80, 4(AP), R0 ;#80, INP_BUFNUM, R0 3138 04 AC 00000050 8F C5 0001D
; 50 00025
MOVAB -800(R10)[R0], R2 ;INP_BUF[R0], PTR0 52 FCE0 CA40 9E 00026
CMPL -836(R10), #1 ;ESC_FLG, #1 3140 01 FCBC CA D1 0002C
BNEQ 1$ ;1$ 0B 12 00031
CLRL R7 ;INDEX 3143 57 D4 00033
MOVL R2, R6 ;PTR0, ESC_PTR 3144 56 52 D0 00035
CLRL -836(R10) ;ESC_FLG 3145 FCBC CA D4 00038
BRB 5$ ;5$ 34 11 0003C
1$: LOCC G^ESCAPE_CHR, (R10), (R2) ;ESCAPE_CHR, NUM_CHR_IN, (PTR0) 3149 6A 00000000G 00 3A 0003E
; 62 00045
BNEQ 2$ ;2$ 02 12 00046
CLRL R1 ;R1 51 D4 00048
2$: MOVL R1, R6 ;R1, ESC_PTR 56 51 D0 0004A
BEQL 4$ ;4$ 20 13 0004D
SUBL3 R6, R2, R7 ;ESC_PTR, PTR0, INDEX 3154 52 56 C3 0004F
; 57 00052
SUBL3 #1, (R10), R0 ;#1, NUM_CHR_IN, R0 3156 6A 01 C3 00053
; 50 00056
MOVL R0, (R10) ;R0, NUM_CHR_IN 6A 50 D0 00057
CMPL R7, R0 ;INDEX, R0 50 57 D1 0005A
BEQL 3$ ;3$ 0B 13 0005D
SUBL3 R7, (R10), R0 ;INDEX, NUM_CHR_IN, R0 3159 6A 57 C3 0005F
; 50 00062
MOVC3 R0, 1(R6), (R6) ;R0, 1(ESC_PTR), (ESC_PTR) 01 A6 50 28 00063
; 66 00067
BRB 5$ ;5$ 08 11 00068
3$: MOVL #1, -836(R10) ;#1, ESC_FLG 3164 FCBC CA 01 D0 0006A
4$: BRW 39$ ;39$ 3165 0250 31 0006F
5$: CLRL R2 ;EAT_CHR 3170 52 D4 00072
CMPB (R6), #63 ;(ESC_PTR), #63 3175 3F 66 91 00074
BNEQ 7$ ;7$ 7C 12 00077
PUSHL #1 ;#1 3177 01 DD 00079
MOVQ #1, -(SP) ;#1, -(SP) 7E 01 7D 0007B
PUSHL R8 ;R8 58 DD 0007E
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 00080
PUSHL #1 ;#1 3178 01 DD 00083
CLRQ -(SP) ;-(SP) 7E 7C 00085
PUSHAB 28(R8) ;P.ABY 1C A8 9F 00087
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 0008A
PUSHL #1 ;#1 3179 01 DD 0008D
CLRQ -(SP) ;-(SP) 7E 7C 0008F
PUSHAB 68(R8) ;P.ACA 44 A8 9F 00091
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 00094
PUSHL #1 ;#1 3181 01 DD 00097
CLRQ -(SP) ;-(SP) 3180 7E 7C 00099
PUSHAB 128(R8) ;P.ACC 0080 C8 9F 0009B
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 0009F
PUSHL #1 ;#1 3183 01 DD 000A2
CLRQ -(SP) ;-(SP) 3182 7E 7C 000A4
PUSHAB 184(R8) ;P.ACE 00B8 C8 9F 000A6
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 000AA
PUSHL #1 ;#1 3184 01 DD 000AD
CLRQ -(SP) ;-(SP) 7E 7C 000AF
PUSHAB 208(R8) ;P.ACG 00D0 C8 9F 000B1
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 000B5
PUSHL #1 ;#1 3185 01 DD 000B8
CLRQ -(SP) ;-(SP) 7E 7C 000BA
PUSHAB 232(R8) ;P.ACI 00E8 C8 9F 000BC
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 000C0
PUSHL #1 ;#1 3186 01 DD 000C3
CLRQ -(SP) ;-(SP) 7E 7C 000C5
PUSHAB 260(R8) ;P.ACK 0104 C8 9F 000C7
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 000CB
CLRQ -(SP) ;-(SP) 3187 7E 7C 000CE
CLRL -(SP) ;-(SP) 7E D4 000D0
PUSHAB 272(R8) ;P.ACM 0110 C8 9F 000D2
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 000D6
PUSHL -44(R10) ;ESC_CHR_LEN 3188 D4 AA DD 000D9
PUSHAB -40(R10) ;ESC_CHR_MSG D8 AA 9F 000DC
PUSHL #1 ;#1 01 DD 000DF
CALLS #3, -291(R9) ;#3, STORE_INPUT FEDD C9 03 FB 000E1
PUSHL #1 ;#1 3189 01 DD 000E6
PUSHL #1 ;#1 01 DD 000E8
CLRL -(SP) ;-(SP) 7E D4 000EA
PUSHAB 304(R8) ;P.ACO 0130 C8 9F 000EC
6$: CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 000F0
BRB 15$ ;15$ 3190 52 11 000F3
7$: CMPB (R6), #66 ;(ESC_PTR), #66 3193 42 8F 66 91 000F5
BEQL 8$ ;8$ 06 13 000F9
CMPB (R6), #98 ;(ESC_PTR), #98 62 8F 66 91 000FB
BNEQ 9$ ;9$ 05 12 000FF
8$: MOVL #1, (R11) ;#1, SEND_BREAK_TTY_FLAG 3195 6B 01 D0 00101
BRB 15$ ;15$ 3196 41 11 00104
9$: CMPB (R6), #67 ;(ESC_PTR), #67 3199 43 8F 66 91 00106
BEQL 10$ ;10$ 06 13 0010A
CMPB (R6), #99 ;(ESC_PTR), #99 63 8F 66 91 0010C
BNEQ 11$ ;11$ 07 12 00110
10$: MOVL R7, (R10) ;INDEX, NUM_CHR_IN 3201 6A 57 D0 00112
MOVL #1, R0 ;#1, R0 3202 50 01 D0 00115
RET ; 04 00118
11$: CMPB (R6), #81 ;(ESC_PTR), #81 3205 51 8F 66 91 00119
BEQL 12$ ;12$ 06 13 0011D
CMPB (R6), #113 ;(ESC_PTR), #113 71 8F 66 91 0011F
BNEQ 16$ ;16$ 25 12 00123
12$: BLBC -2480(R10), 13$ ;SESSION_LOGGING, 13$ 3212 0C F650 CA E9 00125
PUSHL #1 ;#1 3214 01 DD 0012A
PUSHL #1 ;#1 01 DD 0012C
PUSHL #1 ;#1 01 DD 0012E
PUSHAB 360(R8) ;STOP_LOG_TEXT 0168 C8 9F 00130
BRB 14$ ;14$ 0A 11 00134
13$: PUSHL #1 ;#1 3216 01 DD 00136
PUSHL #1 ;#1 01 DD 00138
PUSHL #1 ;#1 01 DD 0013A
PUSHAB 336(R8) ;NO_LOG_TEXT 0150 C8 9F 0013C
14$: CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 00140
CLRL -2480(R10) ;SESSION_LOGGING 3218 F650 CA D4 00143
15$: BRW 37$ ;37$ 3219 015C 31 00147
16$: CMPB (R6), #82 ;(ESC_PTR), #82 3222 52 8F 66 91 0014A
BEQL 17$ ;17$ 06 13 0014E
CMPB (R6), #114 ;(ESC_PTR), #114 72 8F 66 91 00150
BNEQ 20$ ;20$ 24 12 00154
17$: MOVL -2484(R10), -2480(R10) ;SESSION_OPEN, SESSION_LOGGING 3229 F650 CA F64C CA D0 00156
BLBC -2480(R10), 19$ ;SESSION_LOGGING, 19$ 3231 0C F650 CA E9 0015D
PUSHL #1 ;#1 3233 01 DD 00162
PUSHL #1 ;#1 01 DD 00164
PUSHL #1 ;#1 01 DD 00166
PUSHAB 416(R8) ;START_LOG_TEXT 01A0 C8 9F 00168
18$: BRB 6$ ;6$ 82 11 0016C
19$: PUSHL #1 ;#1 3235 01 DD 0016E
PUSHL #1 ;#1 01 DD 00170
PUSHL #1 ;#1 01 DD 00172
PUSHAB 392(R8) ;NO_LOG_TEXT 0188 C8 9F 00174
BRB 18$ ;18$ F2 11 00178
20$: CMPB (R6), #83 ;(ESC_PTR), #83 3240 53 8F 66 91 0017A
BEQL 21$ ;21$ 09 13 0017E
CMPB (R6), #115 ;(ESC_PTR), #115 73 8F 66 91 00180
BEQL 21$ ;21$ 03 13 00184
BRW 34$ ;34$ 00F4 31 00186
21$: CLRQ -(SP) ;-(SP) 3242 7E 7C 00189
PUSHL #1 ;#1 01 DD 0018B
PUSHAB 440(R8) ;P.ACY 01B8 C8 9F 0018D
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 00191
PUSHL #1 ;#1 3243 01 DD 00194
CLRQ -(SP) ;-(SP) 7E 7C 00196
PUSHAB -28(R11) ;TERM_DESC E4 AB 9F 00198
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 0019B
CLRQ -(SP) ;-(SP) 3244 7E 7C 0019E
CLRL -(SP) ;-(SP) 7E D4 001A0
PUSHAB 468(R8) ;P.ADA 01D4 C8 9F 001A2
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 001A6
PUSHL -44(R10) ;ESC_CHR_LEN 3245 D4 AA DD 001A9
PUSHAB -40(R10) ;ESC_CHR_MSG D8 AA 9F 001AC
PUSHL #1 ;#1 01 DD 001AF
CALLS #3, -291(R9) ;#3, STORE_INPUT FEDD C9 03 FB 001B1
PUSHL #1 ;#1 3246 01 DD 001B6
CLRQ -(SP) ;-(SP) 7E 7C 001B8
PUSHAB 480(R8) ;P.ADC 01E0 C8 9F 001BA
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 001BE
CLRQ -(SP) ;-(SP) 3247 7E 7C 001C1
CLRL -(SP) ;-(SP) 7E D4 001C3
PUSHAB 504(R8) ;P.ADE 01F8 C8 9F 001C5
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 001C9
BLBC G^ECHO_FLAG, 22$ ;ECHO_FLAG, 22$ 3249 0A 00000000G 00 E9 001CC
PUSHL #1 ;#1 3251 01 DD 001D3
CLRQ -(SP) ;-(SP) 7E 7C 001D5
PUSHAB 516(R8) ;P.ADG 0204 C8 9F 001D7
BRB 23$ ;23$ 08 11 001DB
22$: PUSHL #1 ;#1 3253 01 DD 001DD
CLRQ -(SP) ;-(SP) 7E 7C 001DF
PUSHAB 528(R8) ;P.ADI 0210 C8 9F 001E1
23$: CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 001E5
CLRQ -(SP) ;-(SP) 3255 7E 7C 001E8
CLRL -(SP) ;-(SP) 7E D4 001EA
PUSHAB 548(R8) ;P.ADK 0224 C8 9F 001EC
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 001F0
CASEL G^PARITY_TYPE, #0, #4 ;PARITY_TYPE, #0, #4 3257 00 00000000G 00 CF 001F3
; 04 001FA
24$: .WORD 25$-24$,- ;25$-24$,- 0028 000A 001FB
28$-24$,- ;28$-24$,- 0014 001E 001FF
27$-24$,- ;27$-24$,- 0032 00203
26$-24$,- ;26$-24$,-
29$-24$ ;29$-24$
25$: PUSHL #1 ;#1 3261 01 DD 00205
CLRQ -(SP) ;-(SP) 7E 7C 00207
PUSHAB 560(R8) ;P.ADM 0230 C8 9F 00209
BRB 30$ ;30$ 26 11 0020D
26$: PUSHL #1 ;#1 3264 01 DD 0020F
CLRQ -(SP) ;-(SP) 7E 7C 00211
PUSHAB 572(R8) ;P.ADO 023C C8 9F 00213
BRB 30$ ;30$ 1C 11 00217
27$: PUSHL #1 ;#1 3267 01 DD 00219
CLRQ -(SP) ;-(SP) 7E 7C 0021B
PUSHAB 584(R8) ;P.ADQ 0248 C8 9F 0021D
BRB 30$ ;30$ 12 11 00221
28$: PUSHL #1 ;#1 3270 01 DD 00223
CLRQ -(SP) ;-(SP) 7E 7C 00225
PUSHAB 596(R8) ;P.ADS 0254 C8 9F 00227
BRB 30$ ;30$ 08 11 0022B
29$: PUSHL #1 ;#1 3273 01 DD 0022D
CLRQ -(SP) ;-(SP) 7E 7C 0022F
PUSHAB 612(R8) ;P.ADU 0264 C8 9F 00231
30$: CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 00235
CLRQ -(SP) ;-(SP) 3276 7E 7C 00238
CLRL -(SP) ;-(SP) 7E D4 0023A
PUSHAB 632(R8) ;P.ADW 0278 C8 9F 0023C
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 00240
TSTL -2484(R10) ;SESSION_OPEN 3278 F64C CA D5 00243
BLEQ 32$ ;32$ 27 15 00247
CLRQ -(SP) ;-(SP) 3281 7E 7C 00249
CLRL -(SP) ;-(SP) 7E D4 0024B
PUSHAB -36(R11) ;SESSION_DESC DC AB 9F 0024D
CALLS #4, (R9) ;#4, TYPE_MSG 69 04 FB 00250
BLBC -2480(R10), 31$ ;SESSION_LOGGING, 31$ 3283 0C F650 CA E9 00253
PUSHL #1 ;#1 3285 01 DD 00258
PUSHL #1 ;#1 01 DD 0025A
CLRL -(SP) ;-(SP) 7E D4 0025C
PUSHAB 648(R8) ;P.ADY 0288 C8 9F 0025E
BRB 33$ ;33$ 16 11 00262
31$: PUSHL #1 ;#1 3287 01 DD 00264
PUSHL #1 ;#1 01 DD 00266
CLRL -(SP) ;-(SP) 7E D4 00268
PUSHAB 668(R8) ;P.AEA 029C C8 9F 0026A
BRB 33$ ;33$ 0A 11 0026E
32$: PUSHL #1 ;#1 3291 01 DD 00270
PUSHL #1 ;#1 01 DD 00272
CLRL -(SP) ;-(SP) 7E D4 00274
PUSHAB 692(R8) ;P.AEC 02B4 C8 9F 00276
33$: BRW 6$ ;6$ FE73 31 0027A
34$: MOVL G^ESCAPE_CHR, R0 ;ESCAPE_CHR, R0 3296 50 00000000G 00 D0 0027D
CMPZV #0, #8, (R6), R0 ;#0, #8, (ESC_PTR), R0 08 00 ED 00284
; 50 66 00287
BNEQ 35$ ;35$ 05 12 00289
MOVB R0, (R6) ;R0, (ESC_PTR) 3297 66 50 90 0028B
BRB 38$ ;38$ 3172 19 11 0028E
35$: CMPB (R6), #48 ;(ESC_PTR), #48 3299 30 66 91 00290
BNEQ 36$ ;36$ 04 12 00293
CLRB (R6) ;(ESC_PTR) 3300 66 94 00295
BRB 38$ ;38$ 10 11 00297
36$: PUSHL #1 ;#1 3304 01 DD 00299
PUSHAB 700(R8) ;P.AEE 02BC C8 9F 0029B
PUSHL #1 ;#1 01 DD 0029F
CALLS #3, -291(R9) ;#3, STORE_INPUT FEDD C9 03 FB 002A1
37$: MOVL #1, R2 ;#1, EAT_CHR 3305 52 01 D0 002A6
38$: TSTL R2 ;EAT_CHR 3309 52 D5 002A9
BLEQ 39$ ;39$ 15 15 002AB
SUBL3 R2, (R10), R0 ;EAT_CHR, NUM_CHR_IN, R0 3312 6A 52 C3 002AD
; 50 002B0
MOVL R0, (R10) ;R0, NUM_CHR_IN 6A 50 D0 002B1
CMPL R0, R7 ;R0, INDEX 57 50 D1 002B4
BEQL 39$ ;39$ 09 13 002B7
SUBL3 R7, (R10), R0 ;INDEX, NUM_CHR_IN, R0 3314 6A 57 C3 002B9
; 50 002BC
MOVC3 R0, (R2)[R6], (R6) ;R0, (EAT_CHR)[ESC_PTR], (ESC_PTR) 6246 50 28 002BD
; 66 002C1
39$: CLRL R0 ;R0 3317 50 D4 002C2
RET ; 04 002C4
; Routine Size: 709 bytes, Routine Base: $CODE$ + 1184
; 3319 3 %SBTTL 'TERM_CONNECT -- MYTINP'
; 3320 3 ! Main portion of MYTINP
; 3321 3
; 3322 3 IF (STATUS = $READEF (EFN = XITEFN, STATE = STATE)) NEQ SS$_WASCLR THEN RETURN .STATUS;
; 3323 3
; 3324 3 NUM_CHR_IN = .IN_IOSB [MYT, .INP_BUFNUM, OFFSET] + .IN_IOSB [MYT, .INP_BUFNUM, EOFSIZ];
; 3325 3
; 3326 3 IF .NUM_CHR_IN NEQ 0
; 3327 3 THEN
; 3328 3
; 3329 3 IF CHK_FOR_EXIT (.INP_BUFNUM)
; 3330 3 THEN
; 3331 4 BEGIN
; 3332 4 $CANTIM ();
; 3333 4 $SETEF (EFN = XITEFN); ! Exit characters typed. Set flag.
; 3334 4 RETURN 1;
; 3335 4 END
; 3336 3 ELSE
; 3337 3 STORE_INPUT (MYT, CH$PTR (INP_BUF [MYT, .INP_BUFNUM]), .NUM_CHR_IN);
; 3338 3
; 3339 3 ! Store char.
; 3340 3
; 3341 3 IF (STATUS = $READEF (EFN = XITEFN, STATE = STATE)) EQL SS$_WASCLR
; 3342 3 THEN
; 3343 3 ! If we got some characters, then queue up the next read for lots of
; 3344 3 ! characters with a 0 timeout (get what we can). Otherwise queue up
; 3345 3 ! a read for one character waiting forever.
; 3346 3
; 3347 3 IF .NUM_CHR_IN GTR 0 OR .INP_BUFNUM NEQ 0
; 3348 3 THEN
; 3349 3 ! Queue up a read for the console terminal
; P 3350 3 STATUS = $QIO (CHAN = .MYT_CHAN, FUNC = .MYT_QIO_FUNC OR IO$M_TIMED,
; P 3351 3 ASTADR = MYTINP, P1 = INP_BUF [MYT, .INP_BUFNUM], P2 = INP_BUFSIZ, P3 = 0,
; 3352 4 ASTPRM = .INP_BUFNUM, IOSB = IN_IOSB [MYT, .INP_BUFNUM, 0])
; 3353 3 ELSE
; P 3354 3 STATUS = $QIO (CHAN = .MYT_CHAN, FUNC = .MYT_QIO_FUNC, ASTADR = MYTINP,
; P 3355 3 P1 = INP_BUF [MYT, .INP_BUFNUM], P2 = 1, ASTPRM = .INP_BUFNUM,
; 3356 3 IOSB = IN_IOSB [MYT, .INP_BUFNUM, 0]);
; 3357 3
; 3358 3 IF NOT .STATUS
; 3359 3 THEN
; 3360 4 BEGIN
; 3361 4 LIB$SIGNAL (.STATUS);
; 3362 4 $SETEF (EFN = XITEFN);
; 3363 3 END;
; 3364 3
; 3365 3 RETURN .STATUS;
; 3366 2 END; ! End of MYTINP
;MYTINP
U.109: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 3081 01FC 00000
MOVAB G^SYS$SETEF, R8 ;SYS$SETEF, R8 58 00000000G 00 9E 00002
MOVAB G^SYS$READEF, R7 ;SYS$READEF, R7 57 00000000G 00 9E 00009
MOVAB B^U.109, R6 ;U.109, R6 56 ED AF 9E 00010
MOVAB G^U.110, R5 ;U.110, R5 55 00000000' 00 9E 00014
PUSHAB -4(R5) ;STATE 3322 FC A5 9F 0001B
PUSHL #5 ;#5 05 DD 0001E
CALLS #2, (R7) ;#2, SYS$READEF 67 02 FB 00020
MOVL R0, (R5) ;R0, STATUS 65 50 D0 00023
CMPL R0, #1 ;R0, #1 01 50 D1 00026
BEQL 1$ ;1$ 03 13 00029
BRW 8$ ;8$ 00CA 31 0002B
1$: MOVL 4(AP), R2 ;INP_BUFNUM, R2 3324 52 04 AC D0 0002E
PUSHAQ -826(R5)[R2] ;IN_IOSB+2[R2] FCC6 C542 7F 00032
MOVZWL @(SP)+, R0 ;@(SP)+, R0 50 9E 3C 00037
PUSHAQ -822(R5)[R2] ;IN_IOSB+6[R2] FCCA C542 7F 0003A
MOVZWL @(SP)+, R1 ;@(SP)+, R1 51 9E 3C 0003F
ADDL3 R1, R0, 4(R5) ;R1, R0, NUM_CHR_IN 50 51 C1 00042
; 04 A5 00045
BEQL 3$ ;3$ 3326 33 13 00047
PUSHL R2 ;R2 3329 52 DD 00049
CALLS #1, -709(R6) ;#1, CHK_FOR_EXIT FD3B C6 01 FB 0004B
BLBC R0, 2$ ;R0, 2$ 12 50 E9 00050
CLRQ -(SP) ;-(SP) 3332 7E 7C 00053
CALLS #2, G^SYS$CANTIM ;#2, SYS$CANTIM 00000000G 00 02 FB 00055
PUSHL #5 ;#5 3333 05 DD 0005C
CALLS #1, (R8) ;#1, SYS$SETEF 68 01 FB 0005E
MOVL #1, R0 ;#1, R0 3334 50 01 D0 00061
RET ; 04 00064
2$: PUSHL 4(R5) ;NUM_CHR_IN 3337 04 A5 DD 00065
MULL3 #80, R2, R0 ;#80, R2, R0 52 00000050 8F C5 00068
; 50 0006F
PUSHAB -796(R5)[R0] ;INP_BUF[R0] FCE4 C540 9F 00070
CLRL -(SP) ;-(SP) 7E D4 00075
CALLS #3, -1093(R6) ;#3, STORE_INPUT FBBB C6 03 FB 00077
3$: PUSHAB -4(R5) ;STATE 3341 FC A5 9F 0007C
PUSHL #5 ;#5 05 DD 0007F
CALLS #2, (R7) ;#2, SYS$READEF 67 02 FB 00081
MOVL R0, (R5) ;R0, STATUS 65 50 D0 00084
CMPL R0, #1 ;R0, #1 01 50 D1 00087
BNEQ 7$ ;7$ 58 12 0008A
MULL3 #80, R2, R0 ;#80, R2, R0 3352 52 00000050 8F C5 0008C
; 50 00093
MOVAB -796(R5)[R0], R4 ;INP_BUF[R0], R4 54 FCE4 C540 9E 00094
MOVAQ -828(R5)[R2], R3 ;IN_IOSB[R2], R3 53 FCC4 C542 7E 0009A
MOVL -44(R5), R1 ;MYT_QIO_FUNC, R1 51 D4 A5 D0 000A0
MOVL -840(R5), R0 ;MYT_CHAN, R0 50 FCB8 C5 D0 000A4
TSTL 4(R5) ;NUM_CHR_IN 3347 04 A5 D5 000A9
BGTR 4$ ;4$ 04 14 000AC
TSTL R2 ;R2 52 D5 000AE
BEQL 5$ ;5$ 18 13 000B0
4$: CLRQ -(SP) ;-(SP) 3352 7E 7C 000B2
CLRQ -(SP) ;-(SP) 7E 7C 000B4
MOVZBL #80, -(SP) ;#80, -(SP) 7E 50 8F 9A 000B6
PUSHR #^M<R2,R4> ;#^M<R2,R4> 14 BB 000BA
PUSHR #^M<R3,R6> ;#^M<R3,R6> 0048 8F BB 000BC
BISL3 #128, R1, -(SP) ;#128, R1, -(SP) 51 00000080 8F C9 000C0
; 7E 000C7
BRB 6$ ;6$ 0C 11 000C8
5$: CLRQ -(SP) ;-(SP) 3356 7E 7C 000CA
CLRQ -(SP) ;-(SP) 7E 7C 000CC
PUSHL #1 ;#1 01 DD 000CE
PUSHR #^M<R2,R4> ;#^M<R2,R4> 14 BB 000D0
PUSHR #^M<R1,R3,R6> ;#^M<R1,R3,R6> 004A 8F BB 000D2
6$: PUSHL R0 ;R0 50 DD 000D6
CLRL -(SP) ;-(SP) 7E D4 000D8
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 000DA
MOVL R0, (R5) ;R0, STATUS 65 50 D0 000E1
7$: MOVL (R5), R0 ;STATUS, R0 3358 50 65 D0 000E4
BLBS R0, 8$ ;R0, 8$ 0E 50 E8 000E7
PUSHL R0 ;R0 3361 50 DD 000EA
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 000EC
PUSHL #5 ;#5 3362 05 DD 000F3
CALLS #1, (R8) ;#1, SYS$SETEF 68 01 FB 000F5
8$: MOVL (R5), R0 ;STATUS, R0 3365 50 65 D0 000F8
RET ; 04 000FB
; Routine Size: 252 bytes, Routine Base: $CODE$ + 1449
; 3367 2 %SBTTL 'TERM_CONNECT -- TRMINP'
; 3368 2 ROUTINE TRMINP (INP_BUFNUM) =
; 3369 2
; 3370 2 !++
; 3371 2 ! This AST routine receives characters from the channel TERM_CHAN and
; 3372 2 ! outputs the characters to the channel MYT_CHAN. INP_BUFNUM contains
; 3373 2 ! the number of the input buffer.
; 3374 2 !--
; 3375 2
; 3376 3 BEGIN
; 3377 3
; 3378 3 LOCAL
; 3379 3 NUM_CHR_IN,
; 3380 3 STATUS;
; 3381 3
; 3382 3 IF (STATUS = $READEF (EFN = XITEFN, STATE = STATE)) NEQ SS$_WASCLR THEN RETURN .STATUS;
; 3383 3
; 3384 3 NUM_CHR_IN = .IN_IOSB [TRM, .INP_BUFNUM, OFFSET] + .IN_IOSB [TRM, .INP_BUFNUM, EOFSIZ];
; 3385 3
; 3386 3 IF .NUM_CHR_IN NEQ 0
; 3387 3 THEN
; 3388 3 STORE_INPUT (TRM, CH$PTR (INP_BUF [TRM, .INP_BUFNUM]),
; 3389 3 .NUM_CHR_IN);
; 3390 3
; 3391 3 IF (STATUS = $READEF (EFN = XITEFN, STATE = STATE)) EQL SS$_WASCLR
; 3392 3 THEN
; 3393 4 BEGIN
; 3394 4
; 3395 4 ! Now that there are no pending I/Os we can call the routine to send
; 3396 4 ! a break signal to the outgoing terminal line if necessary.
; 3397 4 ! Pending I/Os would block the QIO SETMODE instruction from taking
; 3398 4 ! place, effectively hanging kermit until the current I/O read
; 3399 4 ! completes (if ever).
; 3400 4
; 3401 4 IF .Send_Break_TTY_Flag EQL 1
; 3402 4 THEN Send_Break_TTY ();
; 3403 4
; 3404 4 !
; 3405 4 ! If we actually got something input, then queue up a read with a 0
; 3406 4 ! timeout for the whole buffer. Otherwise, queue up a single character
; 3407 4 ! read, if this is the first buffer.
; 3408 4 !
; 3409 4
; 3410 4 IF .NUM_CHR_IN GTR 0 OR .INP_BUFNUM NEQ 0
; 3411 4 THEN
; P 3412 4 STATUS = $QIO (CHAN = .TERM_CHAN,
; P 3413 4 FUNC = IO$_TTYREADALL OR IO$M_NOECHO OR IO$M_TIMED, ASTADR = TRMINP,
; P 3414 4 P1 = INP_BUF [TRM, .INP_BUFNUM], P2 = INP_BUFSIZ, P3 = 0,
; P 3415 4 IOSB = IN_IOSB [TRM,
; 3416 5 .INP_BUFNUM, 0], ASTPRM = .INP_BUFNUM)
; 3417 4 ELSE
; P 3418 4 STATUS = $QIO (CHAN = .TERM_CHAN, FUNC = IO$_TTYREADALL OR IO$M_NOECHO,
; P 3419 4 ASTADR = TRMINP, P1 = INP_BUF [TRM, .INP_BUFNUM], P2 = 1,
; P 3420 4 IOSB = IN_IOSB [TRM,
; 3421 4 .INP_BUFNUM, 0], ASTPRM = .INP_BUFNUM);
; 3422 4
; 3423 3 END;
; 3424 3
; 3425 3 IF NOT .STATUS
; 3426 3 THEN
; 3427 4 BEGIN
; 3428 4 LIB$SIGNAL (.STATUS);
; 3429 4 $SETEF (EFN = XITEFN);
; 3430 3 END;
; 3431 3
; 3432 3 RETURN .STATUS;
; 3433 2 END; ! End of TRMINP
;TRMINP
U.119: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 3368 01FC 00000
MOVAB G^SYS$READEF, R8 ;SYS$READEF, R8 58 00000000G 00 9E 00002
MOVAB B^U.119, R7 ;U.119, R7 57 F4 AF 9E 00009
MOVAB G^U.94, R6 ;U.94, R6 56 00000000' 00 9E 0000D
PUSHL R6 ;R6 3382 56 DD 00014
PUSHL #5 ;#5 05 DD 00016
CALLS #2, (R8) ;#2, SYS$READEF 68 02 FB 00018
MOVL R0, R5 ;R0, STATUS 55 50 D0 0001B
CMPL R5, #1 ;STATUS, #1 01 55 D1 0001E
BEQL 1$ ;1$ 03 13 00021
BRW 8$ ;8$ 00B4 31 00023
1$: MOVL 4(AP), R2 ;INP_BUFNUM, R2 3384 52 04 AC D0 00026
PUSHAQ -806(R6)[R2] ;IN_IOSB+18[R2] FCDA C642 7F 0002A
MOVZWL @(SP)+, R4 ;@(SP)+, NUM_CHR_IN 54 9E 3C 0002F
PUSHAQ -802(R6)[R2] ;IN_IOSB+22[R2] FCDE C642 7F 00032
MOVZWL @(SP)+, R0 ;@(SP)+, R0 50 9E 3C 00037
ADDL2 R0, R4 ;R0, NUM_CHR_IN 54 50 C0 0003A
BEQL 2$ ;2$ 3386 16 13 0003D
PUSHL R4 ;NUM_CHR_IN 3388 54 DD 0003F
MULL3 #80, R2, R0 ;#80, R2, R0 52 00000050 8F C5 00041
; 50 00048
PUSHAB -631(R6)[R0] ;INP_BUF+161[R0] FD89 C640 9F 00049
PUSHL #1 ;#1 01 DD 0004E
CALLS #3, -1345(R7) ;#3, STORE_INPUT FABF C7 03 FB 00050
2$: PUSHL R6 ;R6 3391 56 DD 00055
PUSHL #5 ;#5 05 DD 00057
CALLS #2, (R8) ;#2, SYS$READEF 68 02 FB 00059
MOVL R0, R5 ;R0, STATUS 55 50 D0 0005C
CMPL R5, #1 ;STATUS, #1 01 55 D1 0005F
BNEQ 7$ ;7$ 61 12 00062
CMPL G^SEND_BREAK_TTY_FLAG, #1 ;SEND_BREAK_TTY_FLAG, #1 3401 01 00000000' 00 D1 00064
BNEQ 3$ ;3$ 05 12 0006B
CALLS #0, -2095(R7) ;#0, SEND_BREAK_TTY 3402 F7D1 C7 00 FB 0006D
3$: MULL3 #80, R2, R0 ;#80, R2, R0 3416 52 00000050 8F C5 00072
; 50 00079
MOVAB -631(R6)[R0], R3 ;INP_BUF+161[R0], R3 53 FD89 C640 9E 0007A
MOVAQ -808(R6)[R2], R1 ;IN_IOSB+16[R2], R1 51 FCD8 C642 7E 00080
MOVL -3832(R6), R0 ;TERM_CHAN, R0 50 F108 C6 D0 00086
TSTL R4 ;NUM_CHR_IN 3410 54 D5 0008B
BGTR 4$ ;4$ 04 14 0008D
TSTL R2 ;R2 52 D5 0008F
BEQL 5$ ;5$ 14 13 00091
4$: CLRQ -(SP) ;-(SP) 3416 7E 7C 00093
CLRQ -(SP) ;-(SP) 7E 7C 00095
MOVZBL #80, -(SP) ;#80, -(SP) 7E 50 8F 9A 00097
PUSHR #^M<R2,R3> ;#^M<R2,R3> 0C BB 0009B
PUSHR #^M<R1,R7> ;#^M<R1,R7> 0082 8F BB 0009D
MOVZBL #250, -(SP) ;#250, -(SP) 7E FA 8F 9A 000A1
BRB 6$ ;6$ 10 11 000A5
5$: CLRQ -(SP) ;-(SP) 3421 7E 7C 000A7
CLRQ -(SP) ;-(SP) 7E 7C 000A9
PUSHL #1 ;#1 01 DD 000AB
PUSHR #^M<R2,R3> ;#^M<R2,R3> 0C BB 000AD
PUSHR #^M<R1,R7> ;#^M<R1,R7> 0082 8F BB 000AF
MOVZBL #122, -(SP) ;#122, -(SP) 7E 7A 8F 9A 000B3
6$: PUSHL R0 ;R0 50 DD 000B7
CLRL -(SP) ;-(SP) 7E D4 000B9
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 000BB
MOVL R0, R5 ;R0, STATUS 55 50 D0 000C2
7$: BLBS R5, 8$ ;STATUS, 8$ 3425 12 55 E8 000C5
PUSHL R5 ;STATUS 3428 55 DD 000C8
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 000CA
PUSHL #5 ;#5 3429 05 DD 000D1
CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF 00000000G 00 01 FB 000D3
8$: MOVL R5, R0 ;STATUS, R0 3432 50 55 D0 000DA
RET ; 04 000DD
; Routine Size: 222 bytes, Routine Base: $CODE$ + 1545
; 3434 2 %SBTTL 'TERM_CONNECT -- ESC_MSG'
; 3435 2 ROUTINE ESC_MSG (ESC_TEXT) =
; 3436 3 BEGIN
; 3437 3
; 3438 3 MAP
; 3439 3 ESC_TEXT : REF VECTOR [, BYTE];
; 3440 3
; 3441 3 SELECTONE .ESCAPE_CHR OF
; 3442 3 SET
; 3443 3
; 3444 3 [CHR_NUL, 0] :
; 3445 4 BEGIN
; 3446 4
; 3447 4 BIND
; 3448 4 NUL_TXT = %ASCID'^@ or control-space on VT-100';
; 3449 4
; 3450 4 MAP
; 3451 4 NUL_TXT : BLOCK [8, BYTE];
; 3452 4
; 3453 4 CH$MOVE (.NUL_TXT [DSC$W_LENGTH], CH$PTR (.NUL_TXT [DSC$A_POINTER]),
; 3454 4 CH$PTR (.ESC_TEXT));
; 3455 4 RETURN .NUL_TXT [DSC$W_LENGTH];
; 3456 3 END;
; 3457 3
; 3458 3 [CHR_RS, %O'36'] :
; 3459 4 BEGIN
; 3460 4
; 3461 4 BIND
; 3462 4 RS_TXT = %ASCID'^^ or ^~ on VT-100';
; 3463 4
; 3464 4 MAP
; 3465 4 RS_TXT : BLOCK [8, BYTE];
; 3466 4
; 3467 4 CH$MOVE (.RS_TXT [DSC$W_LENGTH], CH$PTR (.RS_TXT [DSC$A_POINTER]),
; 3468 4 CH$PTR (.ESC_TEXT));
; 3469 4 RETURN .RS_TXT [DSC$W_LENGTH];
; 3470 3 END;
; 3471 3
; 3472 3 [CHR_US, %O'37'] :
; 3473 4 BEGIN
; 3474 4
; 3475 4 BIND
; 3476 4 US_TXT = %ASCID'^_ or ^? on VT-100';
; 3477 4
; 3478 4 MAP
; 3479 4 US_TXT : BLOCK [8, BYTE];
; 3480 4
; 3481 4 CH$MOVE (.US_TXT [DSC$W_LENGTH], CH$PTR (.US_TXT [DSC$A_POINTER]),
; 3482 4 CH$PTR (.ESC_TEXT));
; 3483 4 RETURN .US_TXT [DSC$W_LENGTH];
; 3484 3 END;
; 3485 3
; 3486 3 [1 TO %O'37'] :
; 3487 4 BEGIN
; 3488 4 ESC_TEXT [0] = %C'^';
; 3489 4 ESC_TEXT [1] = .ESCAPE_CHR + %O'100';
; 3490 4 RETURN 2;
; 3491 3 END;
; 3492 3
; 3493 3 [CHR_DEL, %O'177'] :
; 3494 4 BEGIN
; 3495 4 ESC_TEXT = 'DEL';
; 3496 4 RETURN 3;
; 3497 3 END;
; 3498 3 TES;
; 3499 3
; 3500 3 RETURN 0; ! No escape character?
; 3501 2 END; ! End of ESC_MSG
.PSECT $PLIT$,NOWRT,NOEXE,2
.BLKB 3 ; 0051D
P.AEG: .ASCII \^@ or control-space on VT-100\<0><0><0>
; 6F 63 20 72 6F 20 40 5E 00520
; 70 73 2D 6C 6F 72 74 6E 00528
; 56 20 6E 6F 20 65 63 61 00530
; 00 00 00 30 30 31 2D 54 00538
P.AEF: .LONG 17694749 ; 010E001D 00540
.ADDRESS P.AEG ; 00000000' 00544
P.AEI: .ASCII \^^ or ^~ on VT-100\<0><0> ; 7E 5E 20 72 6F 20 5E 5E 00548
; 31 2D 54 56 20 6E 6F 20 00550
; 00 00 30 30 00558
P.AEH: .LONG 17694738 ; 010E0012 0055C
.ADDRESS P.AEI ; 00000000' 00560
P.AEK: .ASCII \^_ or ^? on VT-100\<0><0> ; 3F 5E 20 72 6F 20 5F 5E 00564
; 31 2D 54 56 20 6E 6F 20 0056C
; 00 00 30 30 00574
P.AEJ: .LONG 17694738 ; 010E0012 00578
.ADDRESS P.AEK ; 00000000' 0057C
U.122= P.AEF
U.124= P.AEH
U.126= P.AEJ
.PSECT $CODE$,NOWRT,2
;ESC_MSG
U.120: .WORD ^M<R2,R3,R4,R5,R6,R7,R8> ;Save R2,R3,R4,R5,R6,R7,R8 3435 01FC 00000
MOVAB G^U.122, R8 ;U.122, R8 58 00000000' 00 9E 00002
MOVL G^ESCAPE_CHR, R6 ;ESCAPE_CHR, R6 3441 56 00000000G 00 D0 00009
BNEQ 1$ ;1$ 3444 09 12 00010
MOVZWL (R8), R7 ;NUL_TXT, R7 3453 57 68 3C 00012
MOVL 4(R8), R0 ;NUL_TXT+4, R0 50 04 A8 D0 00015
BRB 3$ ;3$ 3454 1C 11 00019
1$: CMPL R6, #30 ;R6, #30 3458 1E 56 D1 0001B
BNEQ 2$ ;2$ 0A 12 0001E
MOVZWL 28(R8), R7 ;RS_TXT, R7 3467 57 1C A8 3C 00020
MOVL 32(R8), R0 ;RS_TXT+4, R0 50 20 A8 D0 00024
BRB 3$ ;3$ 3468 0D 11 00028
2$: CMPL R6, #31 ;R6, #31 3472 1F 56 D1 0002A
BNEQ 4$ ;4$ 11 12 0002D
MOVZWL 56(R8), R7 ;US_TXT, R7 3481 57 38 A8 3C 0002F
MOVL 60(R8), R0 ;US_TXT+4, R0 50 3C A8 D0 00033
3$: MOVC3 R7, (R0), @4(AP) ;R7, (R0), @ESC_TEXT 3482 60 57 28 00037
; 04 BC 0003A
MOVL R7, R0 ;R7, R0 3483 50 57 D0 0003C
RET ; 04 0003F
4$: TSTL R6 ;R6 3486 56 D5 00040
BLEQ 5$ ;5$ 17 15 00042
CMPL R6, #31 ;R6, #31 1F 56 D1 00044
BGTR 5$ ;5$ 12 14 00047
MOVL 4(AP), R0 ;ESC_TEXT, R0 3488 50 04 AC D0 00049
MOVB #94, (R0) ;#94, (R0) 60 5E 8F 90 0004D
ADDB3 #64, R6, 1(R0) ;#64, R6, 1(R0) 3489 56 40 8F 81 00051
; 01 A0 00055
MOVL #2, R0 ;#2, R0 3490 50 02 D0 00057
RET ; 04 0005A
5$: CMPL R6, #127 ;R6, #127 3493 0000007F 8F 56 D1 0005B
BNEQ 6$ ;6$ 0C 12 00062
MOVL #4998468, 4(AP) ;#4998468, ESC_TEXT 3495 04 AC 004C4544 8F D0 00064
MOVL #3, R0 ;#3, R0 3496 50 03 D0 0006C
RET ; 04 0006F
6$: CLRL R0 ;R0 3500 50 D4 00070
RET ; 04 00072
; Routine Size: 115 bytes, Routine Base: $CODE$ + 1623
; 3502 2 %SBTTL 'TERM_CONNECT -- COMND_TRANSMIT'
; 3503 2
; 3504 2 GLOBAL ROUTINE COMND_TRANSMIT : NOVALUE = ! and below
; 3505 2
; 3506 2 !++
; 3507 2 ! FUNCTIONAL DESCRIPTION:
; 3508 2 !
; 3509 2 ! This routine transmits a file (or files) to the remote side one character
; 3510 2 ! at a time. It can display the numbers of the lines as they are transfered,
; 3511 2 ! or echo back to the controling terminal from the remote so that progress of
; 3512 2 ! the transmit can be monitored. It can also delay between 0 and .9 secs
; 3513 2 ! after each carriage return for machines that cannot keep up with the
; 3514 2 ! transfer. The file is transmitted blindly (except line feeds are removed)
; 3515 2 ! with no error correction or packets. This is useful for sending files to
; 3516 2 ! systems where KERMIT is unavailable.
; 3517 2 !
; 3518 2 ! CALLING SEQUENCE:
; 3519 2 !
; 3520 2 ! COMND_TRANSMIT ();
; 3521 2 !
; 3522 2 ! IMPLICIT INPUTS:
; 3523 2 !
; 3524 2 ! TRANS_DELAY - time (0.0 - 0.9 seconds) to delay after carriage return is transmitted.
; 3525 2 ! TRANS_ECHO_FLAG - flags whether data from remote side is echoed to the console terminal (ON);
; 3526 2 ! or line numbers are printed during transmit.
; 3527 2 !
; 3528 2 ! IMPLICIT OUTPUTS:
; 3529 2 !
; 3530 2 ! None
; 3531 2 !
; 3532 2 ! COMPLETION_CODES:
; 3533 2 !
; 3534 2 ! Standard status values.
; 3535 2 !
; 3536 2 ! SIDE EFFECTS:
; 3537 2 !
; 3538 2 ! Line feed characters are not transmitted.
; 3539 2 !--
; 3540 2
; 3541 3 BEGIN
; 3542 3
; 3543 3 EXTERNAL
; 3544 3 FILE_SIZE,
; 3545 3 FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],
; 3546 3 TY_FIL;
; 3547 3
; 3548 3 EXTERNAL ROUTINE
; 3549 3 FILE_OPEN;
; 3550 3
; 3551 3 LOCAL
; 3552 3 STATUS, ! KERMIT status values
; 3553 3 TRANSMIT_DELAY : VECTOR [CH$ALLOCATION(8)], ! String for transmit delay
; 3554 3 TR_DESC : BLOCK [8,BYTE]; ! Descriptor for transmit delay
; 3555 3
; 3556 3 OWN
; 3557 3 SAVE_FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)], ! File name
; 3558 3 SAVE_FILE_SIZE, ! File size
; 3559 3 SAVE_TY_FIL, ! File type out flag
; 3560 3 DELAY : VECTOR [2,LONG,SIGNED]; ! Time after transmitting carriage return
; 3561 3
; 3562 3 BIND
; 3563 3 D_TIME = PLIT('0 ::00.'); ! First part of delta time used to find delay
; 3564 3
; 3565 3 %SBTTL 'TERM_CONNECT -- TRANSMIT_FILE'
; 3566 3
; 3567 3 ROUTINE TRANSMIT_FILE = ! and below
; 3568 3
; 3569 3 !++
; 3570 3 ! FUNCTIONAL DESCRIPTION:
; 3571 3 !
; 3572 3 ! This routine transmits the current file (that has already been opened) and
; 3573 3 ! then opens the next file (if there is one).
; 3574 3 !
; 3575 3 !--
; 3576 4 BEGIN ! TRANSMIT_FILE
; 3577 4
; 3578 4 EXTERNAL
; 3579 4 ABT_ALL_FILE,
; 3580 4 ABT_CUR_FILE,
; 3581 4 SMG$_PASALREXI, ! Pasteboard exits for device msg
; 3582 4 FLAG_FILE_OPEN;
; 3583 4
; 3584 4 EXTERNAL ROUTINE
; 3585 4 NEXT_FILE,
; 3586 4 FILE_OPEN,
; 3587 4 FILE_CLOSE,
; 3588 4 TT_TEXT,
; 3589 4 TT_CRLF : NOVALUE,
; 3590 4 SY_DISMISS : NOVALUE,
; 3591 4 SMG$CREATE_PASTEBOARD : ADDRESSING_MODE (GENERAL),
; 3592 4 SMG$DELETE_PASTEBOARD : ADDRESSING_MODE (GENERAL);
; 3593 4
; 3594 4 LOCAL
; 3595 4 STATUS, ! KERMIT status values
; 3596 4 ISTAT, ! qiow status values
; 3597 4 PASTE_STAT, ! SMG status values
; 3598 4 NEW_ID : VECTOR [1, LONG, UNSIGNED]; ! Dummy new pasteboard id
; 3599 4
; 3600 4 OWN
; 3601 4 LINE_NUM; ! Line number counter
; 3602 4
; 3603 4 %SBTTL 'TERM_CONNECT -- TRANSMIT_CHARACTERS'
; 3604 4
; 3605 4 ROUTINE TRANSMIT_CHARACTERS : NOVALUE = ! and below
; 3606 4
; 3607 4 !++
; 3608 4 ! FUNCTIONAL DESCRIPTION:
; 3609 4 !
; 3610 4 ! This routine is a loop that transmits all of the characters in a file,
; 3611 4 ! one character per pass.
; 3612 4 !
; 3613 4 !--
; 3614 5 BEGIN ! TRANSMIT_CHARACTERS
; 3615 5
; 3616 5 LITERAL
; 3617 5 WAIT_EFN = 22,
; 3618 5 CHARACTER_LEN = 1;
; 3619 5
; 3620 5 EXTERNAL ROUTINE
; 3621 5 GET_FILE,
; 3622 5 TT_NUMBER,
; 3623 5 TT_OUTPUT : NOVALUE;
; 3624 5
; 3625 5 LOCAL
; 3626 5 STATUS, ! KERMIT status values
; 3627 5 TSTAT, ! timer status values
; 3628 5 ISTAT, ! qiow status values
; 3629 5 CHARACTER, ! Character from get-a-char routine
; 3630 5 TERM_IOSB : VECTOR [4, WORD, UNSIGNED]; ! IO status block for term chan
; 3631 5 !
; 3632 5 ! Begin TRANSMIT_CHARACTERS:
; 3633 5 !
; 3634 5 DO
; 3635 5
; 3636 6 BEGIN ! Transmit a character
; 3637 6 ! Get next character
; 3638 6 STATUS = GET_FILE (CHARACTER);
; 3639 6
; 3640 6 IF .STATUS AND NOT .STATUS EQL KER_EOF AND NOT .CHARACTER EQL CHR_LFD ! Did we get one?
; 3641 6 THEN
; 3642 6
; 3643 7 BEGIN ! Have a character
; 3644 7 ! Write character out transfer terminal:
; P 3645 7 ISTAT = $QIOW (CHAN = .TERM_CHAN, EFN = TERM_O_EFN,
; P 3646 7 FUNC = IO$_WRITEVBLK + IO$M_NOFORMAT,
; P 3647 7 IOSB = TERM_IOSB,
; 3648 7 P1 = CHARACTER, P2 = CHARACTER_LEN);
; 3649 7 IF NOT .ISTAT THEN LIB$SIGNAL (.ISTAT);
; 3650 7 IF NOT .TERM_IOSB THEN LIB$SIGNAL (.TERM_IOSB);
; 3651 7 IF .CHARACTER EQL CHR_CRT
; 3652 7 THEN
; 3653 8 BEGIN ! Just transmitted a carriage return
; 3654 8
; 3655 8 IF NOT .DELAY EQL 0
; 3656 8 THEN
; 3657 8 ! Delay desired time:
; 3658 9 BEGIN
; 3659 9 TSTAT = $SETIMR (EFN = WAIT_EFN, DAYTIM = DELAY);
; 3660 9 IF NOT .STATUS THEN LIB$SIGNAL (.TSTAT);
; 3661 9 TSTAT = $WAITFR (EFN = WAIT_EFN);
; 3662 9 IF NOT .STATUS THEN LIB$SIGNAL (.TSTAT);
; 3663 8 END;
; 3664 8
; 3665 8 IF NOT .TRANS_ECHO_FLAG
; 3666 8 THEN
; 3667 8 ! Purge term_chan typeahead buffer to get rid of the echoed data and type packet number to console:
; 3668 9 BEGIN
; P 3669 9 TSTAT = $QIOW (CHAN = .TERM_CHAN, FUNC = IO$_READVBLK OR IO$M_PURGE,
; 3670 9 P1 = INP_BUF [TRM, 0], P2 = 0, IOSB = IN_IOSB [TRM, 0, 0]);
; 3671 9 IF NOT .TSTAT THEN LIB$SIGNAL (.TSTAT);
; 3672 9 TT_NUMBER (.LINE_NUM);
; 3673 9 TT_TEXT (UPLIT (%ASCIZ' '));
; 3674 9 TT_OUTPUT ();
; 3675 9 LINE_NUM = .LINE_NUM + 1;
; 3676 8 END;
; 3677 8
; 3678 7 END; ! Just transmitted a cariage return
; 3679 7
; 3680 6 END; ! Have a character
; 3681 6
; 3682 6 END ! Transmit a character
; 3683 5 UNTIL NOT .STATUS OR .STATUS EQL KER_EOF OR NOT .ISTAT OR NOT .TERM_IOSB
; 3684 5 OR .FORCE_ABORT OR .ABT_CUR_FILE OR .ABT_ALL_FILE;
; 3685 5
; 3686 4 END; ! End TRANSMIT_CHARACTERS
.PSECT $OWN$,NOEXE,2
;SAVE_FILE_NAME
U.129: .BLKB 132 ; 00F10
;SAVE_FILE_SIZE
U.130: .BLKB 4 ; 00F94
;SAVE_TY_FIL
U.131: .BLKB 4 ; 00F98
;DELAY
U.132: .BLKB 8 ; 00F9C
;LINE_NUM
U.135: .BLKB 4 ; 00FA4
.PSECT $PLIT$,NOWRT,NOEXE,2
.LONG 2 ; 00000002 00580
P.AEL: .ASCII \0 ::00.\<0> ; 00 2E 30 30 3A 3A 20 30 00584
P.AEM: .ASCII \ \<0><0><0> ; 00 00 00 20 0058C
U.133= P.AEL
.EXTRN FILE_SIZE, FILE_NAME, TY_FIL, FILE_OPEN, SMG$_PASALREXI, FLAG_FILE_OPEN, NEXT_FILE
.EXTRN FILE_CLOSE, TT_TEXT, SY_DISMISS, SMG$CREATE_PASTEBOARD, SMG$DELETE_PASTEBOARD, GET_FILE
.EXTRN TT_NUMBER, TT_OUTPUT
.PSECT $CODE$,NOWRT,2
;TRANSMIT_CHARACTERS
U.136: .WORD ^M<R2,R3,R4,R5,R6,R7> ;Save R2,R3,R4,R5,R6,R7 3605 00FC 00000
MOVAB G^SYS$QIOW, R7 ;SYS$QIOW, R7 57 00000000G 00 9E 00002
MOVAB G^LIB$SIGNAL, R6 ;LIB$SIGNAL, R6 56 00000000G 00 9E 00009
MOVAB G^U.4, R5 ;U.4, R5 55 00000000' 00 9E 00010
SUBL2 #12, SP ;#12, SP 5E 0C C2 00017
1$: PUSHL SP ;SP 3638 5E DD 0001A
CALLS #1, G^GET_FILE ;#1, GET_FILE 00000000G 00 01 FB 0001C
MOVL R0, R3 ;R0, STATUS 53 50 D0 00023
BLBS R3, 2$ ;STATUS, 2$ 3640 01 53 E8 00026
RET ; 04 00029
2$: CMPL R3, #134316131 ;STATUS, #134316131 08018063 8F 53 D1 0002A
BEQL 5$ ;5$ 39 13 00031
CMPL (SP), #10 ;CHARACTER, #10 0A 6E D1 00033
BEQL 5$ ;5$ 34 13 00036
CLRQ -(SP) ;-(SP) 3648 7E 7C 00038
CLRQ -(SP) ;-(SP) 7E 7C 0003A
PUSHL #1 ;#1 01 DD 0003C
PUSHAB 20(SP) ;CHARACTER 14 AE 9F 0003E
CLRQ -(SP) ;-(SP) 7E 7C 00041
PUSHAB 36(SP) ;TERM_IOSB 24 AE 9F 00043
MOVZWL #304, -(SP) ;#304, -(SP) 7E 0130 8F 3C 00046
PUSHL (R5) ;TERM_CHAN 65 DD 0004B
PUSHL #4 ;#4 04 DD 0004D
CALLS #12, (R7) ;#12, SYS$QIOW 67 0C FB 0004F
MOVL R0, R4 ;R0, ISTAT 54 50 D0 00052
BLBS R4, 3$ ;ISTAT, 3$ 3649 05 54 E8 00055
PUSHL R4 ;ISTAT 54 DD 00058
CALLS #1, (R6) ;#1, LIB$SIGNAL 66 01 FB 0005A
3$: BLBS 4(SP), 4$ ;TERM_IOSB, 4$ 3650 06 04 AE E8 0005D
PUSHL 4(SP) ;TERM_IOSB 04 AE DD 00061
CALLS #1, (R6) ;#1, LIB$SIGNAL 66 01 FB 00064
4$: CMPL (SP), #13 ;CHARACTER, #13 3651 0D 6E D1 00067
BEQL 6$ ;6$ 03 13 0006A
5$: BRW 10$ ;10$ 0087 31 0006C
6$: TSTL 3984(R5) ;DELAY 3655 0F90 C5 D5 0006F
BEQL 8$ ;8$ 30 13 00073
CLRQ -(SP) ;-(SP) 3659 7E 7C 00075
CLRL -(SP) ;-(SP) 7E D4 00077
PUSHAB 3984(R5) ;DELAY 0F90 C5 9F 00079
PUSHL #22 ;#22 16 DD 0007D
CALLS #5, G^SYS$SETIMR ;#5, SYS$SETIMR 00000000G 00 05 FB 0007F
MOVL R0, R2 ;R0, TSTAT 52 50 D0 00086
BLBS R3, 7$ ;STATUS, 7$ 3660 05 53 E8 00089
PUSHL R2 ;TSTAT 52 DD 0008C
CALLS #1, (R6) ;#1, LIB$SIGNAL 66 01 FB 0008E
7$: PUSHL #22 ;#22 3661 16 DD 00091
CALLS #1, G^SYS$WAITFR ;#1, SYS$WAITFR 00000000G 00 01 FB 00093
MOVL R0, R2 ;R0, TSTAT 52 50 D0 0009A
BLBS R3, 8$ ;STATUS, 8$ 3662 05 53 E8 0009D
PUSHL R2 ;TSTAT 52 DD 000A0
CALLS #1, (R6) ;#1, LIB$SIGNAL 66 01 FB 000A2
8$: BLBS G^TRANS_ECHO_FLAG, 10$ ;TRANS_ECHO_FLAG, 10$ 3665 4A 00000000' 00 E8 000A5
CLRQ -(SP) ;-(SP) 3670 7E 7C 000AC
CLRQ -(SP) ;-(SP) 7E 7C 000AE
CLRL -(SP) ;-(SP) 7E D4 000B0
PUSHAB 3201(R5) ;INP_BUF+161 0C81 C5 9F 000B2
CLRQ -(SP) ;-(SP) 7E 7C 000B6
PUSHAB 3024(R5) ;IN_IOSB+16 0BD0 C5 9F 000B8
MOVZWL #2097, -(SP) ;#2097, -(SP) 7E 0831 8F 3C 000BC
PUSHL (R5) ;TERM_CHAN 65 DD 000C1
CLRL -(SP) ;-(SP) 7E D4 000C3
CALLS #12, (R7) ;#12, SYS$QIOW 67 0C FB 000C5
MOVL R0, R2 ;R0, TSTAT 52 50 D0 000C8
BLBS R2, 9$ ;TSTAT, 9$ 3671 05 52 E8 000CB
PUSHL R2 ;TSTAT 52 DD 000CE
CALLS #1, (R6) ;#1, LIB$SIGNAL 66 01 FB 000D0
9$: PUSHL 3992(R5) ;LINE_NUM 3672 0F98 C5 DD 000D3
CALLS #1, G^TT_NUMBER ;#1, TT_NUMBER 00000000G 00 01 FB 000D7
PUSHAB G^P.AEM ;P.AEM 3673 00000000' 00 9F 000DE
CALLS #1, G^TT_TEXT ;#1, TT_TEXT 00000000G 00 01 FB 000E4
CALLS #0, G^TT_OUTPUT ;#0, TT_OUTPUT 3674 00000000G 00 00 FB 000EB
INCL 3992(R5) ;LINE_NUM 3675 0F98 C5 D6 000F2
10$: BLBC R3, 11$ ;STATUS, 11$ 3683 25 53 E9 000F6
CMPL R3, #134316131 ;STATUS, #134316131 08018063 8F 53 D1 000F9
BEQL 11$ ;11$ 1C 13 00100
BLBC R4, 11$ ;ISTAT, 11$ 19 54 E9 00102
BLBC 4(SP), 11$ ;TERM_IOSB, 11$ 15 04 AE E9 00105
BLBS -12(R5), 11$ ;FORCE_ABORT, 11$ 3684 11 F4 A5 E8 00109
BLBS G^ABT_CUR_FILE, 11$ ;ABT_CUR_FILE, 11$ 0A 00000000G 00 E8 0010D
BLBS G^ABT_ALL_FILE, 11$ ;ABT_ALL_FILE, 11$ 03 00000000G 00 E8 00114
BRW 1$ ;1$ FEFC 31 0011B
11$: RET ; 3686 04 0011E
; Routine Size: 287 bytes, Routine Base: $CODE$ + 1696
; 3687 4 !
; 3688 4 ! Begin TRANSMIT_FILE:
; 3689 4 !
; 3690 4 FLAG_FILE_OPEN = TRUE;
; 3691 4 TT_TEXT (UPLIT (%ASCIZ' File: '));
; 3692 4 TT_TEXT (FILE_NAME); ! Type out file name
; 3693 4 TT_CRLF ();
; 3694 4 FILE_SIZE = .SAVE_FILE_SIZE; ! Reset the file name size
; 3695 4 INCR I FROM 0 TO .FILE_SIZE - 1 DO
; 3696 4 FILE_NAME [.I] = .SAVE_FILE_NAME [.I];
; 3697 4 TY_FIL = .SAVE_TY_FIL; ! Reset type out flag
; 3698 4 LINE_NUM = 1; ! Initialize line number counter
; 3699 4
; 3700 5 IF (STATUS = TERM_OPEN (TRUE)) ! Open the terminal
; 3701 4 THEN
; 3702 4
; 3703 5 BEGIN ! Term open
; 3704 5 ! Cancel qio's to term_chan to start from scratch:
; 3705 5 STATUS = $CANCEL (CHAN = .TERM_CHAN);
; 3706 5 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
; 3707 5
; 3708 5 ! Test to see if we are supposed to echo from the term_chan to the cons_chan:
; 3709 5 IF .TRANS_ECHO_FLAG
; 3710 5 THEN
; 3711 5
; 3712 6 BEGIN ! Echo data
; 3713 6 ! Clear screen (by creating a default pasteboard using SMG utility):
; 3714 6 SY_DISMISS (3); ! Wait a bit so user can see file name
; 3715 6 PASTE_STAT = SMG$CREATE_PASTEBOARD (NEW_ID);
; 3716 6 IF NOT .PASTE_STAT THEN LIB$SIGNAL (.PASTE_STAT);
; 3717 6
; 3718 6 ! Prepare event flags
; 3719 6 $CLREF (EFN = XITEFN);
; 3720 6 INCR FLAG FROM 1 TO XITEFN - 1 DO
; 3721 6 $SETEF (EFN = .FLAG);
; 3722 6 $SETAST (ENBFLG = 0); ! Disable AST until after all QIOs
; 3723 6
; 3724 6 ! Set up read qio's to echo characters to controling terminal
; P 3725 6 ISTAT = $QIO (CHAN = .TERM_CHAN, FUNC = IO$_TTYREADALL OR IO$M_NOECHO,
; P 3726 6 ASTADR = TRMINP, P1 = INP_BUF [TRM, 0], P2 = INP_BUFSIZ, P3 = 0,
; 3727 6 IOSB = IN_IOSB [TRM, 0, 0], ASTPRM = 0);
; 3728 6 IF NOT .ISTAT THEN LIB$SIGNAL (.ISTAT);
; 3729 6 INCR INP_BUFNUM FROM 1 TO NUM_IN_BUF - 1 DO
; 3730 7 BEGIN
; P 3731 7 ISTAT = $QIO (CHAN = .TERM_CHAN, FUNC = IO$_TTYREADALL OR
; P 3732 7 IO$M_NOECHO OR IO$M_TIMED, ASTADR=TRMINP,
; P 3733 7 P1=INP_BUF[TRM,.INP_BUFNUM], P2=INP_BUFSIZ, P3=0,
; 3734 7 IOSB = IN_IOSB [TRM, .INP_BUFNUM, 0], ASTPRM = .INP_BUFNUM);
; 3735 7 IF NOT .ISTAT THEN LIB$SIGNAL (.ISTAT);
; 3736 6 END;
; 3737 6 $SETAST (ENBFLG = 1); ! Enable AST
; 3738 6 END ! End echo data
; 3739 6
; 3740 5 ELSE ! No echo; output line number title to console:
; 3741 5
; 3742 5 TT_TEXT (UPLIT (%ASCIZ' Transmitting line number... '));
; 3743 5
; 3744 5 ! Start a loop that handles one character per pass:
; 3745 5 TRANSMIT_CHARACTERS ();
; 3746 5
; 3747 5 ! Finished transmitting file - close it:
; 3748 5 FILE_CLOSE ();
; 3749 5 ABT_CUR_FILE = FALSE;
; 3750 5 IF .TRANS_ECHO_FLAG THEN SY_DISMISS (1); ! Wait a bit so user can see the end of the file
; 3751 5
; 3752 5 ! Cancel read qio's:
; 3753 5 $SETAST (ENBFLG = 0); ! Disable AST's
; 3754 5 STATUS = $CANCEL (CHAN = .TERM_CHAN);
; 3755 5 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
; 3756 5 STATUS = $CANCEL (CHAN = .CONS_CHAN);
; 3757 5 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
; 3758 5
; 3759 5 ! Clear screen again if we did it before - ie delete pasteboard if we created one:
; 3760 5 IF .TRANS_ECHO_FLAG AND NOT .PASTE_STAT EQL SMG$_PASALREXI
; 3761 5 THEN
; 3762 6 BEGIN
; 3763 6 PASTE_STAT = SMG$DELETE_PASTEBOARD (NEW_ID);
; 3764 6 IF NOT .PASTE_STAT THEN LIB$SIGNAL (.PASTE_STAT);
; 3765 6 END
; 3766 5 ELSE
; 3767 6 BEGIN
; 3768 6 TT_CRLF ();
; 3769 6 TT_CRLF ();
; 3770 5 END;
; 3771 5
; 3772 5 ! Post normal qio's that were canceled:
; 3773 5 STATUS = DO_CONS_QIO();
; 3774 5 IF NOT .STATUS
; 3775 5 THEN
; 3776 6 BEGIN
; 3777 6 LIB$SIGNAL (.STATUS);
; 3778 6 RETURN KER_RECERR
; 3779 5 END;
; 3780 5
; 3781 5 STATUS = DO_RECEIVE_QIO();
; 3782 5 IF NOT .STATUS
; 3783 5 THEN
; 3784 6 BEGIN
; 3785 6 LIB$SIGNAL (.STATUS);
; 3786 6 RETURN KER_RECERR
; 3787 5 END;
; 3788 5
; 3789 5 ! Close the console terminal to clean up:
; 3790 5 STATUS = TERM_CLOSE ();
; 3791 5 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
; 3792 5 $SETAST (ENBFLG = 1); ! Enable AST's
; 3793 4 END; ! Term open
; 3794 4
; 3795 4 ! Determine if there is another file to send.
; 3796 4 SAVE_TY_FIL = .TY_FIL; ! Save current type out flag
; 3797 4 TY_FIL = FALSE; ! Supress the type out of names
; 3798 4 IF NOT .ABT_ALL_FILE AND NOT .FORCE_ABORT THEN STATUS=NEXT_FILE () ELSE STATUS=KER_NOMORFILES;
; 3799 4 TY_FIL = .SAVE_TY_FIL; ! Reset the type out flag
; 3800 4 ABT_ALL_FILE = FALSE;
; 3801 4 FORCE_ABORT = FALSE;
; 3802 4 FORCE_TIMEOUT = FALSE;
; 3803 4 RETURN .STATUS;
; 3804 4
; 3805 3 END; ! End TRANSMIT_FILE
.PSECT $PLIT$,NOWRT,NOEXE,2
P.AEN: .ASCII \ File: \<0><0> ; 65 6C 69 46 20 20 20 20 00590
; 00 00 20 3A 00598
P.AEO: .ASCII \ Transmitting line number... \<0><0><0><0>
; 6E 61 72 54 20 20 20 20 0059C
; 67 6E 69 74 74 69 6D 73 005A4
; 75 6E 20 65 6E 69 6C 20 005AC
; 20 2E 2E 2E 72 65 62 6D 005B4
; 00 00 00 00 005BC
.EXTRN SYS$SETAST
.PSECT $CODE$,NOWRT,2
;TRANSMIT_FILE
U.134: .WORD ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,- 3567 0FFC 00000
R11> ;R11
MOVAB G^TT_TEXT, R11 ;TT_TEXT, R11 5B 00000000G 00 9E 00002
MOVAB G^SYS$SETAST, R10 ;SYS$SETAST, R10 5A 00000000G 00 9E 00009
MOVAB G^TY_FIL, R9 ;TY_FIL, R9 59 00000000G 00 9E 00010
MOVAB W^U.119, R8 ;U.119, R8 58 FD75 CF 9E 00017
MOVAB G^LIB$SIGNAL, R7 ;LIB$SIGNAL, R7 57 00000000G 00 9E 0001C
MOVAB G^U.4, R6 ;U.4, R6 56 00000000' 00 9E 00023
SUBL2 #4, SP ;#4, SP 5E 04 C2 0002A
MOVL #1, G^FLAG_FILE_OPEN ;#1, FLAG_FILE_OPEN 3690 00000000G 00 01 D0 0002D
PUSHAB G^P.AEN ;P.AEN 3691 00000000' 00 9F 00034
CALLS #1, (R11) ;#1, TT_TEXT 6B 01 FB 0003A
PUSHAB G^FILE_NAME ;FILE_NAME 3692 00000000G 00 9F 0003D
CALLS #1, (R11) ;#1, TT_TEXT 6B 01 FB 00043
CALLS #0, G^TT_CRLF ;#0, TT_CRLF 3693 00000000G 00 00 FB 00046
MOVL 3976(R6), G^FILE_SIZE ;SAVE_FILE_SIZE, FILE_SIZE 3694 00000000G 00 0F88 C6 D0 0004D
MNEGL #1, R0 ;#1, I 3695 50 01 CE 00056
BRB 2$ ;2$ 0B 11 00059
1$: MOVL 3844(R6)[R0], G^FILE_NAME[R0] ;SAVE_FILE_NAME[I], FILE_NAME[I] 3696 00000000G0040 0F04 C640 D0 0005B
2$: AOBLSS G^FILE_SIZE, R0, 1$ ;FILE_SIZE, I, 1$ 50 00000000G 00 F2 00066
; ED 0006D
MOVL 3980(R6), (R9) ;SAVE_TY_FIL, TY_FIL 3697 69 0F8C C6 D0 0006E
MOVL #1, 3992(R6) ;#1, LINE_NUM 3698 0F98 C6 01 D0 00073
PUSHL #1 ;#1 3700 01 DD 00078
CALLS #1, -3826(R8) ;#1, TERM_OPEN F10E C8 01 FB 0007A
MOVL R0, R4 ;R0, STATUS 54 50 D0 0007F
BLBS R4, 3$ ;STATUS, 3$ 03 54 E8 00082
BRW 21$ ;21$ 0195 31 00085
3$: PUSHL (R6) ;TERM_CHAN 3705 66 DD 00088
CALLS #1, G^SYS$CANCEL ;#1, SYS$CANCEL 00000000G 00 01 FB 0008A
MOVL R0, R4 ;R0, STATUS 54 50 D0 00091
BLBS R4, 4$ ;STATUS, 4$ 3706 05 54 E8 00094
PUSHL R4 ;STATUS 54 DD 00097
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00099
4$: BLBS G^TRANS_ECHO_FLAG, 5$ ;TRANS_ECHO_FLAG, 5$ 3709 03 00000000' 00 E8 0009C
BRW 11$ ;11$ 00AF 31 000A3
5$: PUSHL #3 ;#3 3714 03 DD 000A6
CALLS #1, G^SY_DISMISS ;#1, SY_DISMISS 00000000G 00 01 FB 000A8
PUSHL SP ;SP 3715 5E DD 000AF
CALLS #1, G^SMG$CREATE_PASTEBOARD ;#1, SMG$CREATE_PASTEBOARD 00000000G 00 01 FB 000B1
MOVL R0, R5 ;R0, PASTE_STAT 55 50 D0 000B8
BLBS R5, 6$ ;PASTE_STAT, 6$ 3716 05 55 E8 000BB
PUSHL R5 ;PASTE_STAT 55 DD 000BE
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 000C0
6$: PUSHL #5 ;#5 3719 05 DD 000C3
CALLS #1, G^SYS$CLREF ;#1, SYS$CLREF 00000000G 00 01 FB 000C5
MOVL #1, R2 ;#1, FLAG 3720 52 01 D0 000CC
7$: PUSHL R2 ;FLAG 3721 52 DD 000CF
CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF 00000000G 00 01 FB 000D1
AOBLEQ #4, R2, 7$ ;#4, FLAG, 7$ 52 04 F3 000D8
; F3 000DB
CLRL -(SP) ;-(SP) 3722 7E D4 000DC
CALLS #1, (R10) ;#1, SYS$SETAST 6A 01 FB 000DE
CLRQ -(SP) ;-(SP) 3727 7E 7C 000E1
CLRQ -(SP) ;-(SP) 7E 7C 000E3
MOVZBL #80, -(SP) ;#80, -(SP) 7E 50 8F 9A 000E5
PUSHAB 3201(R6) ;INP_BUF+161 0C81 C6 9F 000E9
CLRL -(SP) ;-(SP) 7E D4 000ED
PUSHL R8 ;R8 58 DD 000EF
PUSHAB 3024(R6) ;IN_IOSB+16 0BD0 C6 9F 000F1
MOVZBL #122, -(SP) ;#122, -(SP) 7E 7A 8F 9A 000F5
PUSHL (R6) ;TERM_CHAN 66 DD 000F9
CLRL -(SP) ;-(SP) 7E D4 000FB
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 000FD
MOVL R0, R3 ;R0, ISTAT 53 50 D0 00104
BLBS R3, 8$ ;ISTAT, 8$ 3728 05 53 E8 00107
PUSHL R3 ;ISTAT 53 DD 0010A
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 0010C
8$: MOVL #1, R2 ;#1, INP_BUFNUM 3729 52 01 D0 0010F
9$: CLRQ -(SP) ;-(SP) 3734 7E 7C 00112
CLRQ -(SP) ;-(SP) 7E 7C 00114
MOVZBL #80, -(SP) ;#80, -(SP) 7E 50 8F 9A 00116
MULL3 #80, R2, R0 ;#80, INP_BUFNUM, R0 52 00000050 8F C5 0011A
; 50 00121
PUSHAB 3201(R6)[R0] ;INP_BUF+161[R0] 0C81 C640 9F 00122
PUSHL R2 ;INP_BUFNUM 52 DD 00127
PUSHL R8 ;R8 58 DD 00129
PUSHAQ 3024(R6)[R2] ;IN_IOSB+16[INP_BUFNUM] 0BD0 C642 7F 0012B
MOVZBL #250, -(SP) ;#250, -(SP) 7E FA 8F 9A 00130
PUSHL (R6) ;TERM_CHAN 66 DD 00134
CLRL -(SP) ;-(SP) 7E D4 00136
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 00138
MOVL R0, R3 ;R0, ISTAT 53 50 D0 0013F
BLBS R3, 10$ ;ISTAT, 10$ 3735 05 53 E8 00142
PUSHL R3 ;ISTAT 53 DD 00145
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00147
10$: AOBLEQ #1, R2, 9$ ;#1, INP_BUFNUM, 9$ 3729 52 01 F3 0014A
; C4 0014D
PUSHL #1 ;#1 3737 01 DD 0014E
CALLS #1, (R10) ;#1, SYS$SETAST 6A 01 FB 00150
BRB 12$ ;12$ 09 11 00153
11$: PUSHAB G^P.AEO ;P.AEO 3742 00000000' 00 9F 00155
CALLS #1, (R11) ;#1, TT_TEXT 6B 01 FB 0015B
12$: CALLS #0, 337(R8) ;#0, TRANSMIT_CHARACTERS 3745 0151 C8 00 FB 0015E
CALLS #0, G^FILE_CLOSE ;#0, FILE_CLOSE 3748 00000000G 00 00 FB 00163
CLRL G^ABT_CUR_FILE ;ABT_CUR_FILE 3749 00000000G 00 D4 0016A
BLBC G^TRANS_ECHO_FLAG, 13$ ;TRANS_ECHO_FLAG, 13$ 3750 09 00000000' 00 E9 00170
PUSHL #1 ;#1 01 DD 00177
CALLS #1, G^SY_DISMISS ;#1, SY_DISMISS 00000000G 00 01 FB 00179
13$: CLRL -(SP) ;-(SP) 3753 7E D4 00180
CALLS #1, (R10) ;#1, SYS$SETAST 6A 01 FB 00182
PUSHL (R6) ;TERM_CHAN 3754 66 DD 00185
CALLS #1, G^SYS$CANCEL ;#1, SYS$CANCEL 00000000G 00 01 FB 00187
MOVL R0, R4 ;R0, STATUS 54 50 D0 0018E
BLBS R4, 14$ ;STATUS, 14$ 3755 05 54 E8 00191
PUSHL R4 ;STATUS 54 DD 00194
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00196
14$: PUSHL 12(R6) ;CONS_CHAN 3756 0C A6 DD 00199
CALLS #1, G^SYS$CANCEL ;#1, SYS$CANCEL 00000000G 00 01 FB 0019C
MOVL R0, R4 ;R0, STATUS 54 50 D0 001A3
BLBS R4, 15$ ;STATUS, 15$ 3757 05 54 E8 001A6
PUSHL R4 ;STATUS 54 DD 001A9
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 001AB
15$: BLBC G^TRANS_ECHO_FLAG, 16$ ;TRANS_ECHO_FLAG, 16$ 3760 22 00000000' 00 E9 001AE
MOVAB G^SMG$_PASALREXI, R0 ;SMG$_PASALREXI, R0 50 00000000G 00 9E 001B5
CMPL R5, R0 ;PASTE_STAT, R0 50 55 D1 001BC
BEQL 16$ ;16$ 16 13 001BF
PUSHL SP ;SP 3763 5E DD 001C1
CALLS #1, G^SMG$DELETE_PASTEBOARD ;#1, SMG$DELETE_PASTEBOARD 00000000G 00 01 FB 001C3
MOVL R0, R5 ;R0, PASTE_STAT 55 50 D0 001CA
BLBS R5, 17$ ;PASTE_STAT, 17$ 3764 15 55 E8 001CD
PUSHL R5 ;PASTE_STAT 55 DD 001D0
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 001D2
BRB 17$ ;17$ 0E 11 001D5
16$: CALLS #0, G^TT_CRLF ;#0, TT_CRLF 3768 00000000G 00 00 FB 001D7
CALLS #0, G^TT_CRLF ;#0, TT_CRLF 3769 00000000G 00 00 FB 001DE
17$: CALLS #0, -1674(R8) ;#0, DO_CONS_QIO 3773 F976 C8 00 FB 001E5
MOVL R0, R4 ;R0, STATUS 54 50 D0 001EA
BLBC R4, 18$ ;STATUS, 18$ 3774 0B 54 E9 001ED
CALLS #0, -1931(R8) ;#0, DO_RECEIVE_QIO 3781 F875 C8 00 FB 001F0
MOVL R0, R4 ;R0, STATUS 54 50 D0 001F5
BLBS R4, 19$ ;STATUS, 19$ 3782 0D 54 E8 001F8
18$: PUSHL R4 ;STATUS 3785 54 DD 001FB
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 001FD
MOVL #134316266, R0 ;#134316266, R0 3786 50 080180EA 8F D0 00200
RET ; 04 00207
19$: CALLS #0, -3341(R8) ;#0, TERM_CLOSE 3790 F2F3 C8 00 FB 00208
MOVL R0, R4 ;R0, STATUS 54 50 D0 0020D
BLBS R4, 20$ ;STATUS, 20$ 3791 05 54 E8 00210
PUSHL R4 ;STATUS 54 DD 00213
CALLS #1, (R7) ;#1, LIB$SIGNAL 67 01 FB 00215
20$: PUSHL #1 ;#1 3792 01 DD 00218
CALLS #1, (R10) ;#1, SYS$SETAST 6A 01 FB 0021A
21$: MOVL (R9), 3980(R6) ;TY_FIL, SAVE_TY_FIL 3796 0F8C C6 69 D0 0021D
CLRL (R9) ;TY_FIL 3797 69 D4 00222
BLBS G^ABT_ALL_FILE, 22$ ;ABT_ALL_FILE, 22$ 3798 10 00000000G 00 E8 00224
BLBS -12(R6), 22$ ;FORCE_ABORT, 22$ 0C F4 A6 E8 0022B
CALLS #0, G^NEXT_FILE ;#0, NEXT_FILE 00000000G 00 00 FB 0022F
MOVL R0, R4 ;R0, STATUS 54 50 D0 00236
BRB 23$ ;23$ 07 11 00239
22$: MOVL #134316147, R4 ;#134316147, STATUS 54 08018073 8F D0 0023B
23$: MOVL 3980(R6), (R9) ;SAVE_TY_FIL, TY_FIL 3799 69 0F8C C6 D0 00242
CLRL G^ABT_ALL_FILE ;ABT_ALL_FILE 3800 00000000G 00 D4 00247
CLRQ -12(R6) ;FORCE_ABORT 3801 F4 A6 7C 0024D
MOVL R4, R0 ;STATUS, R0 3803 50 54 D0 00250
RET ; 04 00253
; Routine Size: 596 bytes, Routine Base: $CODE$ + 17B5
; 3806 3
; 3807 3 !
; 3808 3 ! Begin COMND_TRANSMIT:
; 3809 3 !
; 3810 3 ! Initialize variables
; 3811 3 CHR_COUNT [0] = 0;
; 3812 3 CHR_COUNT [1] = 0;
; 3813 3 OUT_BUFNUM [0] = 0;
; 3814 3 OUT_BUFNUM [1] = 0;
; 3815 3 OUT_EFN [0] = 1;
; 3816 3 OUT_EFN [1] = T_EFN_DISP + 1;
; 3817 3 OUT_PTR [0] = CH$PTR (OUT_BUF [0, .OUT_BUFNUM [0]]);
; 3818 3 OUT_PTR [1] = CH$PTR (OUT_BUF [1, .OUT_BUFNUM [1]]);
; 3819 3
; 3820 3 ! Assign channels to devices TERM_NAME and MY_TERM.
; 3821 3 STATUS = TERM_OPEN (FALSE); ! Open terminal, no QIO's
; 3822 3
; 3823 3 IF .CONNECT_FLAG ! Check if TERM_NAME is TT:
; 3824 3 THEN
; 3825 4 BEGIN
; 3826 4 TERM_CLOSE ();
; 3827 4 LIB$SIGNAL (KER_CON_SAME);
; 3828 4 RETURN KER_CON_SAME;
; 3829 3 END;
; 3830 3
; 3831 3 IF NOT .STATUS
; 3832 3 THEN
; 3833 4 BEGIN
; 3834 4 LIB$SIGNAL (.STATUS);
; 3835 4 RETURN .STATUS;
; 3836 3 END;
; 3837 3
; 3838 3 IF NOT .SYS_OUTPUT_OPEN ! Make sure we have terminals
; 3839 3 THEN
; 3840 4 BEGIN
; 3841 4 TERM_CLOSE ();
; 3842 4 LIB$SIGNAL (KER_LINTERM); ! Must both be terminals
; 3843 4 RETURN KER_LINTERM; ! So give up if not
; 3844 3 END;
; 3845 3
; 3846 3 CHANNEL [0] = .TERM_CHAN;
; 3847 3 CHANNEL [1] = .CONS_CHAN;
; 3848 3
; 3849 3 IF NOT .STATUS
; 3850 3 THEN
; 3851 4 BEGIN
; 3852 4 TERM_CLOSE ();
; 3853 4 LIB$SIGNAL (.STATUS);
; 3854 4 RETURN .STATUS;
; 3855 3 END;
; 3856 3
; 3857 3 ! Have two terminals - Set up delay:
; 3858 3 CH$COPY (7,CH$PTR(D_TIME), 1,CH$PTR(TRANS_DELAY), %C ' ', 8,CH$PTR(TRANSMIT_DELAY));
; 3859 3 TR_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 3860 3 TR_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 3861 3 TR_DESC [DSC$W_LENGTH] = 8;
; 3862 3 TR_DESC [DSC$A_POINTER] = TRANSMIT_DELAY;
; 3863 3 STATUS = $BINTIM (TIMBUF=TR_DESC, TIMADR=DELAY); ! Calculate delta time
; 3864 3 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
; 3865 3
; 3866 3 ! Get the first file and try to open it:
; 3867 3 SAVE_TY_FIL = .TY_FIL; ! Save current type out flag
; 3868 3 TY_FIL = FALSE; ! Supress the type out of names
; 3869 3 SAVE_FILE_SIZE = .FILE_SIZE; ! Save the file name size
; 3870 3 INCR I FROM 0 TO .FILE_SIZE - 1 DO
; 3871 3 SAVE_FILE_NAME [.I] = .FILE_NAME [.I];
; 3872 3
; 3873 3 ! If we can open the file, then transmit it:
; 3874 3 IF FILE_OPEN (FNC_READ)
; 3875 3 THEN ! Loop to handle one file at a time:
; 3876 3 DO
; 3877 3 STATUS = TRANSMIT_FILE ()
; 3878 4 UNTIL ( NOT .STATUS) OR (.STATUS EQL KER_NOMORFILES)
; 3879 3 ELSE
; 3880 3 TY_FIL = .SAVE_TY_FIL; ! Reset type out flag
; 3881 3
; 3882 2 END; ! End COMND_TRANSMIT routine
.EXTRN SYS$BINTIM
.ENTRY COMND_TRANSMIT, ^M<R2,R3,R4,R5,- ;COMND_TRANSMIT, Save R2,R3,R4,R5,- 3504 07FC 00000
R6,R7,R8,R9,R10> ;R6,R7,R8,R9,R10
MOVAB G^LIB$SIGNAL, R10 ;LIB$SIGNAL, R10 5A 00000000G 00 9E 00002
MOVAB G^TY_FIL, R9 ;TY_FIL, R9 59 00000000G 00 9E 00009
MOVAB W^TERM_CLOSE, R8 ;TERM_CLOSE, R8 58 EE1B CF 9E 00010
MOVAB G^U.88, R7 ;U.88, R7 57 00000000' 00 9E 00015
SUBL2 #16, SP ;#16, SP 5E 10 C2 0001C
CLRL -776(R7) ;CHR_COUNT 3811 FCF8 C7 D4 0001F
CLRW (R7) ;OUT_BUFNUM 3813 67 B4 00023
MOVW #769, 4(R7) ;#769, OUT_EFN 3815 04 A7 0301 8F B0 00025
MOVZBL (R7), R0 ;OUT_BUFNUM, R0 3817 50 67 9A 0002B
MULL2 #80, R0 ;#80, R0 50 00000050 8F C4 0002E
MOVAB -324(R7)[R0], 8(R7) ;OUT_BUF[R0], OUT_PTR 08 A7 FEBC C740 9E 00035
MOVZBL 1(R7), R0 ;OUT_BUFNUM+1, R0 3818 50 01 A7 9A 0003C
MULL2 #80, R0 ;#80, R0 50 00000050 8F C4 00040
MOVAB -163(R7)[R0], 12(R7) ;OUT_BUF+161[R0], OUT_PTR+4 0C A7 FF5D C740 9E 00047
CLRL -(SP) ;-(SP) 3821 7E D4 0004E
CALLS #1, -485(R8) ;#1, TERM_OPEN FE1B C8 01 FB 00050
MOVL R0, R6 ;R0, STATUS 56 50 D0 00055
BLBC G^CONNECT_FLAG, 1$ ;CONNECT_FLAG, 1$ 3823 0B 00000000G 00 E9 00058
CALLS #0, (R8) ;#0, TERM_CLOSE 3826 68 00 FB 0005F
PUSHL #134316274 ;#134316274 3827 080180F2 8F DD 00062
BRB 4$ ;4$ 29 11 00068
1$: BLBC R6, 3$ ;STATUS, 3$ 3831 24 56 E9 0006A
BLBS -3756(R7), 2$ ;SYS_OUTPUT_OPEN, 2$ 3838 0B F154 C7 E8 0006D
CALLS #0, (R8) ;#0, TERM_CLOSE 3841 68 00 FB 00072
PUSHL #134316242 ;#134316242 3842 080180D2 8F DD 00075
BRB 4$ ;4$ 16 11 0007B
2$: MOVL -3776(R7), -784(R7) ;TERM_CHAN, CHANNEL 3846 FCF0 C7 F140 C7 D0 0007D
MOVL -3764(R7), -780(R7) ;CONS_CHAN, CHANNEL+4 3847 FCF4 C7 F14C C7 D0 00084
BLBS R6, 5$ ;STATUS, 5$ 3849 09 56 E8 0008B
CALLS #0, (R8) ;#0, TERM_CLOSE 3852 68 00 FB 0008E
3$: PUSHL R6 ;STATUS 3853 56 DD 00091
4$: CALLS #1, (R10) ;#1, LIB$SIGNAL 6A 01 FB 00093
RET ; 3854 04 00096
5$: MOVC3 #7, G^U.133, 8(SP) ;#7, U.133, TRANSMIT_DELAY 3858 00000000' 00 07 28 00097
; 08 AE 0009E
MOVC3 #1, G^TRANS_DELAY, (R3) ;#1, TRANS_DELAY, (R3) 00000000' 00 01 28 000A0
; 63 000A7
MOVL #17694728, (SP) ;#17694728, TR_DESC 3861 6E 010E0008 8F D0 000A8
MOVAB 8(SP), 4(SP) ;TRANSMIT_DELAY, TR_DESC+4 3862 04 AE 08 AE 9E 000AF
PUSHAB 208(R7) ;DELAY 3863 00D0 C7 9F 000B4
PUSHAB 4(SP) ;TR_DESC 04 AE 9F 000B8
CALLS #2, G^SYS$BINTIM ;#2, SYS$BINTIM 00000000G 00 02 FB 000BB
MOVL R0, R6 ;R0, STATUS 56 50 D0 000C2
BLBS R6, 6$ ;STATUS, 6$ 3864 05 56 E8 000C5
PUSHL R6 ;STATUS 56 DD 000C8
CALLS #1, (R10) ;#1, LIB$SIGNAL 6A 01 FB 000CA
6$: MOVL (R9), 204(R7) ;TY_FIL, SAVE_TY_FIL 3867 00CC C7 69 D0 000CD
CLRL (R9) ;TY_FIL 3868 69 D4 000D2
MOVL G^FILE_SIZE, R1 ;FILE_SIZE, R1 3869 51 00000000G 00 D0 000D4
MOVL R1, 200(R7) ;R1, SAVE_FILE_SIZE 00C8 C7 51 D0 000DB
MNEGL #1, R0 ;#1, I 3870 50 01 CE 000E0
BRB 8$ ;8$ 0A 11 000E3
7$: MOVL G^FILE_NAME[R0], 68(R7)[R0] ;FILE_NAME[I], SAVE_FILE_NAME[I] 3871 44 A740 00000000G0040 D0 000E5
8$: AOBLSS R1, R0, 7$ ;R1, I, 7$ 50 51 F2 000EF
; F2 000F2
CLRL -(SP) ;-(SP) 3874 7E D4 000F3
CALLS #1, G^FILE_OPEN ;#1, FILE_OPEN 00000000G 00 01 FB 000F5
BLBC R0, 10$ ;R0, 10$ 15 50 E9 000FC
9$: CALLS #0, 3965(R8) ;#0, TRANSMIT_FILE 3877 0F7D C8 00 FB 000FF
MOVL R0, R6 ;R0, STATUS 56 50 D0 00104
BLBC R6, 11$ ;STATUS, 11$ 3878 0F 56 E9 00107
CMPL R6, #134316147 ;STATUS, #134316147 08018073 8F 56 D1 0010A
BNEQ 9$ ;9$ EC 12 00111
RET ; 04 00113
10$: MOVL 204(R7), (R9) ;SAVE_TY_FIL, TY_FIL 3880 69 00CC C7 D0 00114
11$: RET ; 3882 04 00119
; Routine Size: 282 bytes, Routine Base: $CODE$ + 1A09
; 3883 2 %SBTTL 'TERM_CONNECT -- INITIALIZATION'
; 3884 2 ! Initialize variables
; 3885 2 CHR_COUNT [0] = 0;
; 3886 2 CHR_COUNT [1] = 0;
; 3887 2 ESC_FLG = FALSE;
; 3888 2 OUT_BUFNUM [0] = 0;
; 3889 2 OUT_BUFNUM [1] = 0;
; 3890 2 OUT_EFN [0] = 1;
; 3891 2 OUT_EFN [1] = T_EFN_DISP + 1;
; 3892 2 OUT_PTR [0] = CH$PTR (OUT_BUF [0, .OUT_BUFNUM [0]]);
; 3893 2 OUT_PTR [1] = CH$PTR (OUT_BUF [1, .OUT_BUFNUM [1]]);
; 3894 2 $BINTIM (TIMBUF = ATIMUP, TIMADR = BTIMUP);
; 3895 2 !
; 3896 2 ! Initialize Connect message
; 3897 2 !
; 3898 2 ESC_CHR_LEN = ESC_MSG (ESC_CHR_MSG);
; 3899 2 CON_MSG_DESC [DSC$B_CLASS] = DSC$K_CLASS_S;
; 3900 2 CON_MSG_DESC [DSC$B_DTYPE] = DSC$K_DTYPE_T;
; 3901 2 CON_MSG_DESC [DSC$A_POINTER] = CON_MSG;
; 3902 2 CON_MSG_DESC [DSC$W_LENGTH] = 1 + .NODE_DESC [DSC$W_LENGTH] + .CON_MSG_1 [DSC$W_LENGTH] +
; 3903 2 .TERM_DESC [DSC$W_LENGTH] + .CON_MSG_2 [DSC$W_LENGTH] + .ESC_CHR_LEN + .CON_MSG_3 [DSC$W_LENGTH]
; 3904 2 ;
; 3905 2 CH$COPY (1, CH$PTR (UPLIT BYTE(%C'[')), .NODE_DESC [DSC$W_LENGTH],
; 3906 2 CH$PTR (.NODE_DESC [DSC$A_POINTER]), .CON_MSG_1 [DSC$W_LENGTH],
; 3907 2 CH$PTR (.CON_MSG_1 [DSC$A_POINTER]), .TERM_DESC [DSC$W_LENGTH],
; 3908 2 CH$PTR (.TERM_DESC [DSC$A_POINTER]), .CON_MSG_2 [DSC$W_LENGTH],
; 3909 2 CH$PTR (.CON_MSG_2 [DSC$A_POINTER]), .ESC_CHR_LEN, CH$PTR (ESC_CHR_MSG),
; 3910 2 .CON_MSG_3 [DSC$W_LENGTH], CH$PTR (.CON_MSG_3 [DSC$A_POINTER]), CHR_NUL,
; 3911 2 .CON_MSG_DESC [DSC$W_LENGTH], CH$PTR (CON_MSG));
; 3912 2 !
; 3913 2 ! Assign channels to devices TERM_NAME and MY_TERM.
; 3914 2 !
; 3915 2 STATUS = TERM_OPEN (FALSE); ![054] Open terminal, no QIO's
; 3916 2
; 3917 2 IF .CONNECT_FLAG ! Check if TERM_NAME is TT:
; 3918 2 THEN
; 3919 3 BEGIN
; 3920 3 TERM_CLOSE ();
; 3921 3 LIB$SIGNAL (KER_CON_SAME);
; 3922 3 RETURN KER_CON_SAME;
; 3923 2 END;
; 3924 2
; 3925 2 IF NOT .STATUS
; 3926 2 THEN
; 3927 3 BEGIN
; 3928 3 LIB$SIGNAL (.STATUS);
; 3929 3 RETURN .STATUS;
; 3930 2 END;
; 3931 2
; 3932 2 IF NOT .SYS_OUTPUT_OPEN ![013] Make sure we have terminals
; 3933 2 THEN
; 3934 3 BEGIN
; 3935 3 TERM_CLOSE ();
; 3936 3 LIB$SIGNAL (KER_LINTERM); ![013] Must both be terminals
; 3937 3 RETURN KER_LINTERM; ![013] So give up if not
; 3938 2 END;
; 3939 2
; 3940 2 ![054] STATUS = $CANCEL (CHAN = .TERM_CHAN); ! Kill all pending QIOs for terminal
; 3941 2 CHANNEL [0] = .TERM_CHAN;
; 3942 2 CHANNEL [1] = .CONS_CHAN;
; 3943 2 ![054] STATUS = $CANCEL (CHAN = .CONS_CHAN); ! Kill pending QIOs for console as well
; 3944 2 ! STATUS = $ASSIGN (DEVNAM = MY_TERM, CHAN = MYT_CHAN);
; 3945 2
; 3946 2 IF NOT .STATUS
; 3947 2 THEN
; 3948 3 BEGIN
; 3949 3 TERM_CLOSE ();
; 3950 3 LIB$SIGNAL (.STATUS);
; 3951 3 RETURN .STATUS;
; 3952 2 END;
; 3953 2
; 3954 2 !
; 3955 2 ! Open any session logging file
; 3956 2 !
; 3957 2 SESSION_OPEN = FALSE; ! Assume not logging
; 3958 2 SESSION_LOGGING = FALSE; ! . . .
; 3959 2
; 3960 2 IF .SESSION_DESC [DSC$W_LENGTH] GTR 0
; 3961 2 THEN
; 3962 3 BEGIN
; 3963 3 STATUS = LOG_OPEN (SESSION_DESC, SESSION_FAB, SESSION_RAB);
; 3964 3
; 3965 3 IF .STATUS
; 3966 3 THEN
; 3967 4 BEGIN
; 3968 4 SESSION_OPEN = TRUE;
; 3969 4 SESSION_LOGGING = TRUE;
; 3970 3 END;
; 3971 3
; 3972 2 END;
; 3973 2
; 3974 2 ! Prepare event flags
; 3975 2 $CLREF (EFN = XITEFN);
; 3976 2
; 3977 2 INCR FLAG FROM 1 TO XITEFN - 1 DO
; 3978 2 $SETEF (EFN = .FLAG);
; 3979 2
; 3980 2 !
; 3981 2 ! Set up proper function for reading from console terminal. This is done
; 3982 2 ! so that the NOECHO flag only gets used if LOCAL_ECHO is OFF.
; 3983 2 !
; 3984 2 MYT_QIO_FUNC = IO$_TTYREADALL;
; 3985 2
; 3986 2 IF NOT .ECHO_FLAG THEN MYT_QIO_FUNC = IO$M_NOECHO OR IO$_TTYREADALL;
; 3987 2
; 3988 2 ! Connect streams
; 3989 2 CONN_STREAMS :
; 3990 3 BEGIN
; 3991 3 ! Send connect message
; 3992 3 LIB$PUT_OUTPUT (%ASCID'');
; 3993 3 LIB$PUT_OUTPUT (CON_MSG_DESC);
; 3994 3 LIB$PUT_OUTPUT (%ASCID'');
; 3995 3 $SETAST (ENBFLG = 0); ! Disable AST until after all QIOs
; 3996 3 !
; 3997 3 ! The first input for each terminal will be for one character.
; 3998 3 ! This read will wait forever for a character. The subsequent
; 3999 3 ! reads will have a timeout of 0 (immediate return). This
; 4000 3 ! gets us good response without using large amounts of run time.
; 4001 3 !
; P 4002 3 STATUS = $QIO (CHAN = .MYT_CHAN, FUNC = .MYT_QIO_FUNC, ASTADR = MYTINP, P1 = INP_BUF [MYT, 0],
; 4003 3 P2 = 1, IOSB = IN_IOSB [MYT, 0, 0], ASTPRM = 0);
; 4004 3
; 4005 3 IF NOT .STATUS THEN LEAVE CONN_STREAMS;
; 4006 3
; P 4007 3 STATUS = $QIO (CHAN = .TERM_CHAN, FUNC = IO$_TTYREADALL OR IO$M_NOECHO, ASTADR = TRMINP,
; 4008 3 P1 = INP_BUF [TRM, 0], P2 = INP_BUFSIZ, P3 = 0, IOSB = IN_IOSB [TRM, 0, 0], ASTPRM = 0);
; 4009 3
; 4010 3 IF NOT .STATUS THEN LEAVE CONN_STREAMS;
; 4011 3
; 4012 3 INCR INP_BUFNUM FROM 1 TO NUM_IN_BUF - 1 DO
; 4013 4 BEGIN
; 4014 4 ! Queue up an input for console terminal
; P 4015 4 STATUS = $QIO (CHAN = .MYT_CHAN, FUNC = .MYT_QIO_FUNC OR IO$M_TIMED, ASTADR = MYTINP,
; P 4016 4 P1 = INP_BUF [MYT, .INP_BUFNUM], P2 = INP_BUFSIZ, P3 = 0,
; P 4017 4 IOSB = IN_IOSB [MYT,
; 4018 4 .INP_BUFNUM, 0], ASTPRM = .INP_BUFNUM);
; 4019 4
; 4020 4 IF NOT .STATUS THEN LEAVE CONN_STREAMS;
; 4021 4
; P 4022 4 STATUS = $QIO (CHAN = .TERM_CHAN, FUNC = IO$_TTYREADALL OR IO$M_NOECHO OR IO$M_TIMED,
; P 4023 4 ASTADR = TRMINP, P1 = INP_BUF [TRM, .INP_BUFNUM], P2 = INP_BUFSIZ, P3 = 0,
; 4024 4 IOSB = IN_IOSB [TRM, .INP_BUFNUM, 0], ASTPRM = .INP_BUFNUM);
; 4025 4
; 4026 4 IF NOT .STATUS THEN LEAVE CONN_STREAMS;
; 4027 4
; 4028 3 END;
; 4029 3
; 4030 3 $SETAST (ENBFLG = 1); ! Enable AST
; 4031 3 $WAITFR (EFN = XITEFN); ! Wait for exit flag
; 4032 3 $WFLAND (EFN = 0, MASK = EFN_MASK); ! Go when outputs completed
; 4033 3 CON_MSG_DESC [DSC$W_LENGTH] = 1 + .NODE_DESC [DSC$W_LENGTH] + .CON_MSG_4 [DSC$W_LENGTH];
; 4034 3 CH$COPY (1, CH$PTR (UPLIT BYTE(%C'[')), .NODE_DESC [DSC$W_LENGTH],
; 4035 3 CH$PTR (.NODE_DESC [DSC$A_POINTER]), .CON_MSG_4 [DSC$W_LENGTH],
; 4036 3 CH$PTR (.CON_MSG_4 [DSC$A_POINTER]), CHR_NUL, .CON_MSG_DESC [DSC$W_LENGTH],
; 4037 3 CH$PTR (.CON_MSG_DESC [DSC$A_POINTER]));
; 4038 3 LIB$PUT_OUTPUT (CON_MSG_DESC);
; 4039 3 LIB$PUT_OUTPUT (%ASCID'');
; 4040 2 END;
; 4041 2 !
; 4042 2 ! Program end -- Close both channels and return with STATUS
; 4043 2 !
; 4044 2 $CANTIM ();
; 4045 2 !
; 4046 2 ! Close any log file
; 4047 2 !
; 4048 2
; 4049 2 IF .SESSION_OPEN THEN LOG_CLOSE (SESSION_FAB, SESSION_RAB);
; 4050 2
; 4051 2 SESSION_OPEN = FALSE;
; 4052 2 !
; 4053 2 ! Call TERM_CLOSE to clean up
; 4054 2 !
; 4055 2 STATUS = TERM_CLOSE ();
; 4056 2
; 4057 2 IF NOT .STATUS THEN LIB$SIGNAL (.STATUS);
; 4058 2
; 4059 2 $SETAST (ENBFLG = 1);
; 4060 2 RETURN .STATUS;
; 4061 1 END; ! End of TERM_CONNECT
.PSECT $PLIT$,NOWRT,NOEXE,2
P.AEP: .BYTE 91 ; 5B 005C0
.BLKB 3 ; 005C1
P.AER: .BLKB 0 ; 005C4
P.AEQ: .LONG 17694720 ; 010E0000 005C4
.ADDRESS P.AER ; 00000000' 005C8
P.AET: .BLKB 0 ; 005CC
P.AES: .LONG 17694720 ; 010E0000 005CC
.ADDRESS P.AET ; 00000000' 005D0
P.AEU: .BYTE 91 ; 5B 005D4
.BLKB 3 ; 005D5
P.AEW: .BLKB 0 ; 005D8
P.AEV: .LONG 17694720 ; 010E0000 005D8
.ADDRESS P.AEW ; 00000000' 005DC
.EXTRN SYS$WFLAND
.PSECT $CODE$,NOWRT,2
.ENTRY TERM_CONNECT, ^M<R2,R3,R4,R5,R6,-;TERM_CONNECT, Save R2,R3,R4,R5,R6,- 2780 0FFC 00000
R7,R8,R9,R10,R11> ;R7,R8,R9,R10,R11
MOVAB -116(SP), SP ;-116(SP), SP 5E 8C AE 9E 00002
CLRQ G^U.81 ;U.81 3885 00000000' 00 7C 00006
CLRW G^U.88 ;U.88 3888 00000000' 00 B4 0000C
MOVW #769, G^U.89 ;#769, U.89 3890 00000000' 00 0301 8F B0 00012
MOVZBL G^U.88, R0 ;U.88, R0 3892 50 00000000' 00 9A 0001B
MULL2 #80, R0 ;#80, R0 50 00000050 8F C4 00022
MOVAB G^U.87[R0], G^U.90 ;U.87[R0], U.90 00000000' 00 00000000'0040 9E 00029
MOVZBL G^U.88+1, R0 ;U.88+1, R0 3893 50 00000000' 00 9A 00035
MULL2 #80, R0 ;#80, R0 50 00000050 8F C4 0003C
MOVAB G^U.87+161[R0], G^U.90+4 ;U.87+161[R0], U.90+4 00000000' 00 00000000'0040 9E 00043
PUSHAB G^U.79 ;U.79 3894 00000000' 00 9F 0004F
PUSHAB G^U.103 ;U.103 00000000' 00 9F 00055
CALLS #2, G^SYS$BINTIM ;#2, SYS$BINTIM 00000000G 00 02 FB 0005B
PUSHAB G^U.93 ;U.93 3898 00000000' 00 9F 00062
CALLS #1, W^U.120 ;#1, U.120 FA93 CF 01 FB 00068
MOVL R0, G^U.92 ;R0, U.92 00000000' 00 50 D0 0006D
MOVW #270, 30(SP) ;#270, CON_MSG_DESC+2 3900 1E AE 010E 8F B0 00074
MOVAB 36(SP), 32(SP) ;CON_MSG, CON_MSG_DESC+4 3901 20 AE 24 AE 9E 0007A
MOVZWL G^NODE_DESC, R7 ;NODE_DESC, R7 3902 57 00000000' 00 3C 0007F
MOVZWL G^U.95, 24(SP) ;U.95, 24(SP) 18 AE 00000000' 00 3C 00086
ADDL3 24(SP), R7, R0 ;24(SP), R7, R0 57 18 AE C1 0008E
; 50 00092
MOVZWL G^TERM_DESC, 20(SP) ;TERM_DESC, 20(SP) 3903 14 AE 00000000' 00 3C 00093
ADDL2 20(SP), R0 ;20(SP), R0 50 14 AE C0 0009B
MOVZWL G^U.96, 16(SP) ;U.96, 16(SP) 10 AE 00000000' 00 3C 0009F
ADDL2 16(SP), R0 ;16(SP), R0 50 10 AE C0 000A7
MOVL G^U.92, R11 ;U.92, R11 5B 00000000' 00 D0 000AB
ADDL2 R11, R0 ;R11, R0 50 5B C0 000B2
MOVZWL G^U.97, R6 ;U.97, R6 56 00000000' 00 3C 000B5
MOVAB 1(R6)[R0], R1 ;1(R6)[R0], R1 51 01 A640 9E 000BC
MOVW R1, 28(SP) ;R1, CON_MSG_DESC 1C AE 51 B0 000C1
MOVL G^NODE_DESC+4, 12(SP) ;NODE_DESC+4, 12(SP) 3906 0C AE 00000000' 00 D0 000C5
MOVL G^U.95+4, 8(SP) ;U.95+4, 8(SP) 3907 08 AE 00000000' 00 D0 000CD
MOVL G^TERM_DESC+4, 4(SP) ;TERM_DESC+4, 4(SP) 3908 04 AE 00000000' 00 D0 000D5
MOVL G^U.96+4, (SP) ;U.96+4, (SP) 3909 6E 00000000' 00 D0 000DD
MOVL G^U.97+4, R10 ;U.97+4, R10 3910 5A 00000000' 00 D0 000E4
MOVZWL 28(SP), R9 ;CON_MSG_DESC, R9 3911 59 1C AE 3C 000EB
MOVAB 36(SP), R8 ;CON_MSG, R8 58 24 AE 9E 000EF
MOVC5 #1, G^P.AEP, #0, R9, (R8) ;#1, P.AEP, #0, R9, (R8) 00000000' 00 01 2C 000F3
; 59 00 000FA
; 68 000FC
BGEQ 1$ ;1$ 61 18 000FD
INCL R8 ;R8 58 D6 000FF
DECL R9 ;R9 59 D7 00101
MOVC5 R7, @12(SP), #0, R9, (R8) ;R7, @12(SP), #0, R9, (R8) 0C BE 57 2C 00103
; 59 00 00107
; 68 00109
BGEQ 1$ ;1$ 54 18 0010A
ADDL2 R7, R8 ;R7, R8 58 57 C0 0010C
SUBL2 R7, R9 ;R7, R9 59 57 C2 0010F
MOVC5 24(SP), @8(SP), #0, R9, (R8) ;24(SP), @8(SP), #0, R9, (R8) 08 BE 18 AE 2C 00112
; 59 00 00117
; 68 00119
BGEQ 1$ ;1$ 44 18 0011A
ADDL2 24(SP), R8 ;24(SP), R8 58 18 AE C0 0011C
SUBL2 24(SP), R9 ;24(SP), R9 59 18 AE C2 00120
MOVC5 20(SP), @4(SP), #0, R9, (R8) ;20(SP), @4(SP), #0, R9, (R8) 04 BE 14 AE 2C 00124
; 59 00 00129
; 68 0012B
BGEQ 1$ ;1$ 32 18 0012C
ADDL2 20(SP), R8 ;20(SP), R8 58 14 AE C0 0012E
SUBL2 20(SP), R9 ;20(SP), R9 59 14 AE C2 00132
MOVC5 16(SP), @0(SP), #0, R9, (R8) ;16(SP), @0(SP), #0, R9, (R8) 00 BE 10 AE 2C 00136
; 59 00 0013B
; 68 0013D
BGEQ 1$ ;1$ 20 18 0013E
ADDL2 16(SP), R8 ;16(SP), R8 58 10 AE C0 00140
SUBL2 16(SP), R9 ;16(SP), R9 59 10 AE C2 00144
MOVC5 R11, G^U.93, #0, R9, (R8) ;R11, U.93, #0, R9, (R8) 00000000' 00 5B 2C 00148
; 59 00 0014F
; 68 00151
BGEQ 1$ ;1$ 0C 18 00152
ADDL2 R11, R8 ;R11, R8 58 5B C0 00154
SUBL2 R11, R9 ;R11, R9 59 5B C2 00157
MOVC5 R6, (R10), #0, R9, (R8) ;R6, (R10), #0, R9, (R8) 6A 56 2C 0015A
; 59 00 0015D
; 68 0015F
1$: CLRL -(SP) ;-(SP) 3915 7E D4 00160
CALLS #1, W^TERM_OPEN ;#1, TERM_OPEN E9C9 CF 01 FB 00162
MOVL R0, R10 ;R0, STATUS 5A 50 D0 00167
BLBC G^CONNECT_FLAG, 2$ ;CONNECT_FLAG, 2$ 3917 1A 00000000G 00 E9 0016A
CALLS #0, W^TERM_CLOSE ;#0, TERM_CLOSE 3920 EB9F CF 00 FB 00171
PUSHL #134316274 ;#134316274 3921 080180F2 8F DD 00176
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 0017C
MOVL #134316274, R0 ;#134316274, R0 3922 50 080180F2 8F D0 00183
RET ; 04 0018A
2$: BLBC R10, 4$ ;STATUS, 4$ 3925 3F 5A E9 0018B
BLBS G^U.9, 3$ ;U.9, 3$ 3932 1A 00000000' 00 E8 0018E
CALLS #0, W^TERM_CLOSE ;#0, TERM_CLOSE 3935 EB7B CF 00 FB 00195
PUSHL #134316242 ;#134316242 3936 080180D2 8F DD 0019A
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 001A0
MOVL #134316242, R0 ;#134316242, R0 3937 50 080180D2 8F D0 001A7
RET ; 04 001AE
3$: MOVL G^U.4, G^U.80 ;U.4, U.80 3941 00000000' 00 00000000' 00 D0 001AF
MOVL G^U.7, G^U.80+4 ;U.7, U.80+4 3942 00000000' 00 00000000' 00 D0 001BA
BLBS R10, 5$ ;STATUS, 5$ 3946 11 5A E8 001C5
CALLS #0, W^TERM_CLOSE ;#0, TERM_CLOSE 3949 EB48 CF 00 FB 001C8
4$: PUSHL R10 ;STATUS 3950 5A DD 001CD
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 001CF
BRW 17$ ;17$ 3951 0250 31 001D6
5$: CLRQ G^U.22 ;U.22 3957 00000000' 00 7C 001D9
TSTW G^SESSION_DESC ;SESSION_DESC 3960 00000000' 00 B5 001DF
BEQL 6$ ;6$ 2D 13 001E5
PUSHAB G^U.20 ;U.20 3963 00000000' 00 9F 001E7
PUSHAB G^U.19 ;U.19 00000000' 00 9F 001ED
PUSHAB G^SESSION_DESC ;SESSION_DESC 00000000' 00 9F 001F3
CALLS #3, G^LOG_OPEN ;#3, LOG_OPEN 00000000G 00 03 FB 001F9
MOVL R0, R10 ;R0, STATUS 5A 50 D0 00200
BLBC R10, 6$ ;STATUS, 6$ 3965 0E 5A E9 00203
MOVL #1, G^U.22 ;#1, U.22 3968 00000000' 00 01 D0 00206
MOVL #1, G^U.23 ;#1, U.23 3969 00000000' 00 01 D0 0020D
6$: PUSHL #5 ;#5 3975 05 DD 00214
CALLS #1, G^SYS$CLREF ;#1, SYS$CLREF 00000000G 00 01 FB 00216
MOVL #1, R2 ;#1, FLAG 3977 52 01 D0 0021D
7$: PUSHL R2 ;FLAG 3978 52 DD 00220
CALLS #1, G^SYS$SETEF ;#1, SYS$SETEF 00000000G 00 01 FB 00222
AOBLEQ #4, R2, 7$ ;#4, FLAG, 7$ 52 04 F3 00229
; F3 0022C
MOVL #58, G^U.91 ;#58, U.91 3984 00000000' 00 3A D0 0022D
BLBS G^ECHO_FLAG, 8$ ;ECHO_FLAG, 8$ 3986 08 00000000G 00 E8 00234
MOVZBL #122, G^U.91 ;#122, U.91 00000000' 00 7A 8F 9A 0023B
8$: PUSHAB G^P.AEQ ;P.AEQ 3992 00000000' 00 9F 00243
CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT 00000000G 00 01 FB 00249
PUSHAB 28(SP) ;CON_MSG_DESC 3993 1C AE 9F 00250
CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT 00000000G 00 01 FB 00253
PUSHAB G^P.AES ;P.AES 3994 00000000' 00 9F 0025A
CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT 00000000G 00 01 FB 00260
CLRL -(SP) ;-(SP) 3995 7E D4 00267
CALLS #1, G^SYS$SETAST ;#1, SYS$SETAST 00000000G 00 01 FB 00269
CLRQ -(SP) ;-(SP) 4003 7E 7C 00270
CLRQ -(SP) ;-(SP) 7E 7C 00272
PUSHL #1 ;#1 01 DD 00274
PUSHAB G^U.84 ;U.84 00000000' 00 9F 00276
CLRL -(SP) ;-(SP) 7E D4 0027C
PUSHAB W^U.109 ;U.109 F6A4 CF 9F 0027E
PUSHAB G^U.83 ;U.83 00000000' 00 9F 00282
PUSHL G^U.91 ;U.91 00000000' 00 DD 00288
PUSHL G^U.104 ;U.104 00000000' 00 DD 0028E
CLRL -(SP) ;-(SP) 7E D4 00294
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 00296
MOVL R0, R10 ;R0, STATUS 5A 50 D0 0029D
BLBC R10, 10$ ;STATUS, 10$ 4005 78 5A E9 002A0
CLRQ -(SP) ;-(SP) 4008 7E 7C 002A3
CLRQ -(SP) ;-(SP) 7E 7C 002A5
MOVZBL #80, -(SP) ;#80, -(SP) 7E 50 8F 9A 002A7
PUSHAB G^U.84+161 ;U.84+161 00000000' 00 9F 002AB
CLRL -(SP) ;-(SP) 7E D4 002B1
PUSHAB W^U.119 ;U.119 F76B CF 9F 002B3
PUSHAB G^U.83+16 ;U.83+16 00000000' 00 9F 002B7
MOVZBL #122, -(SP) ;#122, -(SP) 7E 7A 8F 9A 002BD
PUSHL G^U.4 ;U.4 00000000' 00 DD 002C1
CLRL -(SP) ;-(SP) 7E D4 002C7
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 002C9
MOVL R0, R10 ;R0, STATUS 5A 50 D0 002D0
BLBC R10, 11$ ;STATUS, 11$ 4010 7A 5A E9 002D3
MOVL #1, R2 ;#1, INP_BUFNUM 4012 52 01 D0 002D6
9$: CLRQ -(SP) ;-(SP) 4018 7E 7C 002D9
CLRQ -(SP) ;-(SP) 7E 7C 002DB
MOVZBL #80, -(SP) ;#80, -(SP) 7E 50 8F 9A 002DD
MULL3 #80, R2, R3 ;#80, INP_BUFNUM, R3 52 00000050 8F C5 002E1
; 53 002E8
PUSHAB G^U.84[R3] ;U.84[R3] 00000000'0043 9F 002E9
PUSHL R2 ;INP_BUFNUM 52 DD 002F0
PUSHAB W^U.109 ;U.109 F630 CF 9F 002F2
PUSHAQ G^U.83[R2] ;U.83[INP_BUFNUM] 00000000'0042 7F 002F6
BISL3 #128, G^U.91, -(SP) ;#128, U.91, -(SP) 00000000' 00 00000080 8F C9 002FD
; 7E 00308
PUSHL G^U.104 ;U.104 00000000' 00 DD 00309
CLRL -(SP) ;-(SP) 7E D4 0030F
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 00311
MOVL R0, R10 ;R0, STATUS 5A 50 D0 00318
10$: BLBC R10, 11$ ;STATUS, 11$ 4020 32 5A E9 0031B
CLRQ -(SP) ;-(SP) 4024 7E 7C 0031E
CLRQ -(SP) ;-(SP) 7E 7C 00320
MOVZBL #80, -(SP) ;#80, -(SP) 7E 50 8F 9A 00322
PUSHAB G^U.84+161[R3] ;U.84+161[R3] 00000000'0043 9F 00326
PUSHL R2 ;INP_BUFNUM 52 DD 0032D
PUSHAB W^U.119 ;U.119 F6EF CF 9F 0032F
PUSHAQ G^U.83+16[R2] ;U.83+16[INP_BUFNUM] 00000000'0042 7F 00333
MOVZBL #250, -(SP) ;#250, -(SP) 7E FA 8F 9A 0033A
PUSHL G^U.4 ;U.4 00000000' 00 DD 0033E
CLRL -(SP) ;-(SP) 7E D4 00344
CALLS #12, G^SYS$QIO ;#12, SYS$QIO 00000000G 00 0C FB 00346
MOVL R0, R10 ;R0, STATUS 5A 50 D0 0034D
11$: BLBS R10, 12$ ;STATUS, 12$ 4026 03 5A E8 00350
BRW 14$ ;14$ 008D 31 00353
12$: ACBL #1, #1, R2, 9$ ;#1, #1, INP_BUFNUM, 9$ 4012 01 01 F1 00356
; FF7D 52 00359
PUSHL #1 ;#1 4030 01 DD 0035C
CALLS #1, G^SYS$SETAST ;#1, SYS$SETAST 00000000G 00 01 FB 0035E
PUSHL #5 ;#5 4031 05 DD 00365
CALLS #1, G^SYS$WAITFR ;#1, SYS$WAITFR 00000000G 00 01 FB 00367
PUSHL #30 ;#30 4032 1E DD 0036E
CLRL -(SP) ;-(SP) 7E D4 00370
CALLS #2, G^SYS$WFLAND ;#2, SYS$WFLAND 00000000G 00 02 FB 00372
MOVZWL G^NODE_DESC, R6 ;NODE_DESC, R6 4033 56 00000000' 00 3C 00379
MOVZWL G^U.98, R7 ;U.98, R7 57 00000000' 00 3C 00380
MOVAB 1(R7)[R6], R0 ;1(R7)[R6], R0 50 01 A746 9E 00387
MOVW R0, 28(SP) ;R0, CON_MSG_DESC 1C AE 50 B0 0038C
MOVL G^NODE_DESC+4, 24(SP) ;NODE_DESC+4, 24(SP) 4035 18 AE 00000000' 00 D0 00390
MOVL G^U.98+4, R11 ;U.98+4, R11 4036 5B 00000000' 00 D0 00398
MOVZWL 28(SP), R9 ;CON_MSG_DESC, R9 59 1C AE 3C 0039F
MOVL 32(SP), R8 ;CON_MSG_DESC+4, R8 4037 58 20 AE D0 003A3
MOVC5 #1, G^P.AEU, #0, R9, (R8) ;#1, P.AEU, #0, R9, (R8) 00000000' 00 01 2C 003A7
; 59 00 003AE
; 68 003B0
BGEQ 13$ ;13$ 19 18 003B1
INCL R8 ;R8 58 D6 003B3
DECL R9 ;R9 59 D7 003B5
MOVC5 R6, @24(SP), #0, R9, (R8) ;R6, @24(SP), #0, R9, (R8) 18 BE 56 2C 003B7
; 59 00 003BB
; 68 003BD
BGEQ 13$ ;13$ 0C 18 003BE
ADDL2 R6, R8 ;R6, R8 58 56 C0 003C0
SUBL2 R6, R9 ;R6, R9 59 56 C2 003C3
MOVC5 R7, (R11), #0, R9, (R8) ;R7, (R11), #0, R9, (R8) 6B 57 2C 003C6
; 59 00 003C9
; 68 003CB
13$: PUSHAB 28(SP) ;CON_MSG_DESC 4038 1C AE 9F 003CC
CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT 00000000G 00 01 FB 003CF
PUSHAB G^P.AEV ;P.AEV 4039 00000000' 00 9F 003D6
CALLS #1, G^LIB$PUT_OUTPUT ;#1, LIB$PUT_OUTPUT 00000000G 00 01 FB 003DC
14$: CLRQ -(SP) ;-(SP) 4044 7E 7C 003E3
CALLS #2, G^SYS$CANTIM ;#2, SYS$CANTIM 00000000G 00 02 FB 003E5
BLBC G^U.22, 15$ ;U.22, 15$ 4049 13 00000000' 00 E9 003EC
PUSHAB G^U.20 ;U.20 00000000' 00 9F 003F3
PUSHAB G^U.19 ;U.19 00000000' 00 9F 003F9
CALLS #2, G^LOG_CLOSE ;#2, LOG_CLOSE 00000000G 00 02 FB 003FF
15$: CLRL G^U.22 ;U.22 4051 00000000' 00 D4 00406
CALLS #0, W^TERM_CLOSE ;#0, TERM_CLOSE 4055 E904 CF 00 FB 0040C
MOVL R0, R10 ;R0, STATUS 5A 50 D0 00411
BLBS R10, 16$ ;STATUS, 16$ 4057 09 5A E8 00414
PUSHL R10 ;STATUS 5A DD 00417
CALLS #1, G^LIB$SIGNAL ;#1, LIB$SIGNAL 00000000G 00 01 FB 00419
16$: PUSHL #1 ;#1 4059 01 DD 00420
CALLS #1, G^SYS$SETAST ;#1, SYS$SETAST 00000000G 00 01 FB 00422
17$: MOVL R10, R0 ;STATUS, R0 4060 50 5A D0 00429
RET ; 04 0042C
; Routine Size: 1069 bytes, Routine Base: $CODE$ + 1B23
; 4062 1
; 4063 1 %SBTTL 'End of KERTRM'
; 4064 1 END ! End of module
; 4065 1
; 4066 0 ELUDOM
; PSECT SUMMARY
;
; Name Bytes Attributes
;
; $OWN$ 4008 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; $GLOBAL$ 56 NOVEC, WRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; $PLIT$ 1504 NOVEC,NOWRT, RD ,NOEXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; $CODE$ 8016 NOVEC,NOWRT, RD , EXE,NOSHR, LCL, REL, CON,NOPIC,ALIGN(2)
; . ABS . 0 NOVEC,NOWRT,NORD ,NOEXE,NOSHR, LCL, ABS, CON,NOPIC,ALIGN(0)
; Library Statistics
;
; -------- Symbols -------- Pages Processing
; File Total Loaded Percent Mapped Time
;
; SYS$COMMON:[SYSLIB]STARLET.L32;2 12540 75 0 721 00:00.4
; COMMAND QUALIFIERS
; BLIS/LIS/MACH=(ASSEM,UNIQUE)/SOURCE=NOHEAD VMSTRM.BLI
; Compilation Complete
.END