; 0001 0 MODULE KERTRM (IDENT = '3.3.120', ; 0002 0 ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL) ; 0003 0 ) = ; 0004 1 BEGIN ; 0005 1 ! ; 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); ; 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); ; 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 ;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 ;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 ;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 ;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 ;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 ;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 ; 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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;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 ;#^M 14 BB 000BA PUSHR #^M ;#^M 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 ;#^M 14 BB 000D0 PUSHR #^M ;#^M 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 ;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 ;#^M 0C BB 0009B PUSHR #^M ;#^M 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 ;#^M 0C BB 000AD PUSHR #^M ;#^M 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 ;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 ;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 ;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 ;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 ;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