COMPILATION LISTING OF SEGMENT uncp Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 0933.8 mst Sat Options: optimize map 1 /****^ ********************************************************* 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1989 * 4* * * 5* * Copyright, (C) Honeywell Bull Inc., 1988 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* ********************************************************* */ 11 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(88-06-09,Berno), approve(88-07-13,MCR7928), 16* audit(88-06-09,Parisek), install(88-07-19,MR12.2-1061): 17* Initially extracted from dn355.pl1, this module implements the 18* Multics DSA UNCP multiplexer interface. 19* 2) change(89-04-03,Farley), approve(89-04-24,MECR0010), 20* audit(89-04-04,Parisek), install(89-04-24,MR12.3-1031): 21* Modified sub-mailbox management to allow holding of information in local 22* storage after sub-mbx is freed during interrupt processing and to 23* centeralize the assignment of the sub-mbxes. Changed return_mbx/send_mbx 24* subroutine to re-assign sub-mbx and copy local storage into sub-mbx when 25* required. 26* 3) change(89-06-01,Farley), approve(89-06-01,MCR8109), 27* audit(89-06-02,Parisek), install(89-06-01,MR12.3-1052): 28* Offical installation of above changes.. 29* END HISTORY COMMENTS */ 30 31 /* format: style4,insnl,delnl,^ifthendo */ 32 uncp: 33 procedure; 34 return; /* should never be called here */ 35 36 /* Date last modified and reason 37* 38* Written 10/08/74 by F. A. Canali for new tty dim 39* Modified by Robert Coren and Mike Grady to fix bugs and add features 40* Modified by Robert Coren 10/08/75 for multiple 355s 41* Modified by J. Stern 04/22/77 to introduce WTCBs 42* Modified by J. Stern 06/23/77 to behave correctly when no submailboxes available 43* Modified by J. Stern 07/28/77 to use all 3 words of command data in submailbox 44* Modified Jan.-Feb. 1978 to use variable-size output buffers and fix some bugs 45* Modified 3/13/78 by Robert Coren to use clock builtin instead of clock_ and to get correct 46* time at hangup_fnp_lines entry 47* Modified August 1978 by Robert Coren for demultiplexing 48* Modified November 8, 1978 by Robert Coren to introduce FNP-initiated mailboxes 49* Modified July 2 1979 by B. Greenberg for negotiated echo. 50* Modified March 1980 by Robert Coren to eliminate use of circular buffer. 51* Modified April 1980 by Robert Coren to add metering information. 52* Modified 1980 December by Art Beattie to ignore interrupts in invalid levels. Also allowed command_data for 53* send_wcd operations to be 216 bits long (6 * 36-bit word). Corrected error message documentation. 54* Modified December 1980 by Robert Coren to handle report_meters opcode 55* Modified April 1981 by Chris Jones for io_manager conversion 56* 57* 58* THE FOLLOWING HISTORY COMMENTS APPLY TO THE FRENCH VERSION OF dn355.pl1 59* (uncp.pl1). 60* 61* Adapted in January 1982 after version MR8.0 for the Datanet 7100 62* Installed at level MR9.1 in July 1982. 63* Correction of out_of_bounds after an ineffectgive read (J. Barre) 64* Open a connection with 2 terminals to fully test 65* Installed at level MR10.1 in June 1983 66* Installed at level MR11.0 in August 1983 67* * Padding (3) assigned fields missing in dn355_data.incl.pl1. 68* Installed at level MR12.0 in January 1987 69* 70* Date of the last modification: 06/01/1987 71**/ 72 73 /* TRACE TO DEBUG */ 74 75 dcl 1 trace int static options (constant), 76 2 load bit (1) unal init ("1"b), 77 2 mailbox bit (1) unal init ("0"b), 78 2 buffer_in bit (1) unal init ("0"b), 79 2 buffer_out bit (1) unal init ("0"b); 80 81 dcl max_special_name fixed bin int static options (constant) init (12); 82 dcl special_name (12) bit (36) int static options (constant) init ("444665252362"b3, 83 /* "MOVECS" bcd */ 84 "444665250000"b3, /* "MOVE00" bcd */ 85 "444665250101"b3, /* "MOVE11" bcd */ 86 "534521623145"b3, /* "$NASIN" bcd */ 87 "534521624646"b3, /* "$NASOO" bcd */ 88 "446443633145"b3, /* "MULTIN" bcd */ 89 "446443634646"b3, /* "MULTOO" bcd */ 90 "534346272020"b3, /* "$LOG " bcd */ 91 "434621242020"b3, /* "LOAD " bcd */ 92 "512226202020"b3, /* "RBF " bcd */ 93 "512226203145"b3, /* "RBF IN" bcd */ 94 "512226204646"b3); /* "RBF OO" bcd */ 95 96 dcl dial_name (12) char (8) int static options (constant) init ("d FTF 97 ", "d FTF 98 ", "d FTF 99 ", "d NASF 100 ", "d NASF 101 ", "Multics", "Multics", "d LOG 102 ", "d LOAD 103 ", "d RBF 104 ", "rbfdsa", "rbfdsa"); 105 106 dcl qorig fixed bin (24), 107 da fixed bin (24); 108 109 dcl sub_mbx_sent bit (1); /* flag to indicate actual sub_mbx usage */ 110 dcl sub_mbx_no fixed bin; /* sub mailbox index */ 111 dcl sub_mbx_array (8) bit (36) aligned based (subp); /* bit overlay on mbx's */ 112 dcl 1 local_sub_mbx aligned like sub_mbx; /* local copy of sub_mbx */ 113 114 dcl (bufp, charp, qptr, other_pcbp) ptr, /* random pointers used */ 115 timw fixed bin (24), /* local slot for mailbox timw */ 116 (level, dno, i, ix, q_first, q_count, chars_left, numchars, k, j) fixed bin, 117 /* random halfwords used */ 118 devx fixed bin, /* index of current channel */ 119 operation fixed bin (8), /* local slot for delay queue operation */ 120 lano bit (3) unal, /* local slot for line number */ 121 nblocks fixed bin; /* number of blocks allocated */ 122 123 dcl fnp_name char (1) aligned; /* for syserr calls */ 124 125 dcl no_response bit (1) aligned; /* set by send_mbx to indicate that DIA didn't respond */ 126 127 dcl interrupt_entry bit (1); /* whether entered through dn7100$interrupt */ 128 dcl input_count fixed bin; /* count sent with accept_dir_input */ 129 dcl inchain bit (18); /* pointer to head of newly-allocated input chain */ 130 131 dcl chan_lctep ptr; /* pointer to subchannel's LCTE */ 132 dcl inchain_ptr ptr; /* pointer to new input chain */ 133 dcl bits_per_char fixed bin; 134 dcl max_buf_chars fixed bin; /* number of characters to go in largest buffer at this speed */ 135 136 dcl wire_arg fixed bin (71); 137 dcl wire_ptr ptr; 138 dcl masked bit (1); 139 dcl queue_locked bit (1); 140 141 dcl syserr_severity fixed bin (35); 142 143 dcl SYSERR_announce fixed bin int static options (constant) init (0); 144 dcl SYSERR_crash fixed bin int static options (constant) init (1); 145 dcl SYSERR_beep fixed bin int static options (constant) init (3); 146 dcl SYSERR_log fixed bin int static options (constant) init (4); 147 /* These syserr constants are used in place of the 148* constants defined in syserr_constants.incl.pl1 149* because of the use of the "CRASH" constant 150* declared in mcs_interrupt_info.incl.pl1 which 151* is also declared as a constant in syserr_constants.incl.pl1. */ 152 153 dcl LOOP_LIMIT fixed bin int static options (constant) init (100000); 154 /* used to wait for DIA to clear PCW */ 155 dcl FNP_DOWN fixed bin int static options (constant) init (2); 156 157 dcl initial_pcw bit (36) int static init ("000000000000000000000000000000111001"b); 158 /* initial dia pcw */ 159 160 dcl INT_LEVEL_1 fixed bin int static options (constant) init (1); 161 dcl INT_LEVEL_3 fixed bin int static options (constant) init (3); 162 dcl INT_LEVEL_7 fixed bin int static options (constant) init (7); 163 164 dcl BAUD_9600 fixed bin int static options (constant) init (9600); 165 166 dcl MAX_FREE_BUFFERS fixed bin (35) int static options (constant) init (16000000000); 167 168 dcl BPC_10 fixed bin int static options (constant) init (10); 169 dcl BPC_8 fixed bin int static options (constant) init (8);/* bits per character */ 170 171 dcl MAX_CHANNEL_BUFFER fixed bin int static options (constant) init (128); 172 173 dcl CMD_DATA_LEN_3 fixed bin int static options (constant) init (3); 174 /* length of command_data in 6 bit chars */ 175 176 dcl MAX_MBX_REQ_CNT fixed bin (35) int static options (constant) init (262143); 177 178 dcl EIGHT fixed bin int static options (constant) init (8); 179 180 dcl CONNECTION_TYPE_1 bit (12) int static options (constant) init ("3145"b3); 181 dcl CONNECTION_TYPE_2 bit (12) int static options (constant) init ("4646"b3); 182 183 dcl timwb (0:6) bit (1) based (addr (timw)), /* timw as a bit array */ 184 used_string bit (7) based (addr (datanet_mbx.mbx_used_flags.used (0))); 185 /* mailbox used flags as a bit string */ 186 /* The 8th sub-mbx is not used */ 187 188 dcl (addr, substr, stac, stacq, string, ptr, rel, index, fixed, divide, bin, max, min, null, length, bit, unspec, hbound, 189 lbound, size, verify) builtin; /* builtin functions used */ 190 191 dcl unal_number fixed bin (17) unal based, /* handy way of referencing an unaligned number */ 192 chars char (numchars) based; /* handy way of moving character strings */ 193 194 dcl input_chars char (chars_left) based; /* for scanning entire input */ 195 196 dcl smbx_cmd_data_long bit (216) unaligned based (addr (sub_mbx.command_data)); 197 198 dcl tc_data$system_shutdown ext fixed bin; /* external variables used */ 199 dcl pds$processid bit (36) aligned ext static; 200 201 dcl ff_cr_lf char (3) int static options (constant) init (" 202 "); 203 204 dcl form_feed init (" ") char (1) int static options (constant); 205 206 207 dcl syserr entry options (variable), /* external entries called */ 208 ldac entry (ptr) returns (fixed bin (24)), 209 dn355_util$compute_parity entry (bit (36)) returns (bit (36)), 210 ( 211 uncp_boot_interrupt, 212 uncp_boot_interrupt$system_fault 213 ) entry (fixed bin), 214 uncp_boot_interrupt$request_init entry (fixed bin), 215 pxss$ring_0_wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)), 216 pxss$unique_ring_0_wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)), 217 pxss$notify entry (fixed bin); 218 219 dcl pmut$wire_and_mask entry (fixed bin (71), ptr); 220 dcl pmut$unwire_unmask entry (fixed bin (71), ptr); 221 dcl 1 auto_net_event_message aligned like net_event_message; 222 dcl 1 auto_fnp_msg aligned like fnp_msg; 223 dcl fnp_event_message fixed bin (71); 224 225 dcl 1 q_entry aligned like fnp_queue_entry based (qptr); 226 227 dcl new_qp ptr; /* temporary to newly-allocated block */ 228 dcl new_qrel fixed bin; 229 230 dcl 1 wrap_q_address aligned based (addr (sub_mbx.command_data (3))), 231 /* overlay for rtx on wrapped queue */ 232 2 wrap_ptr bit (18) unal, 233 2 wrap_cnt fixed bin (18) unsigned unal; 234 235 dcl fault_name char (16); /* 355 fault name */ 236 237 238 dcl cleanup condition; 239 1 1 /* BEGIN INCLUDE FILE ... tty_buf.incl.pl1 */ 1 2 1 3 /* Date Last Modified and Reason 1 4* Created 04/19/77 by J. Stern (from part of tty.incl.pl1) 1 5* Modified January 1978 by Robert Coren and Larry Johnson for variable-size buffers 1 6* Modified 2/6/78 by Robert Coren to make circular_queue size settable 1 7* Modified Aug 78 by J. Nicholls to move the buffer block format to a file of its own 1 8* and wtcb to its own plus other modification for ring 0 multiplexing, tty_buffer_block.incl.pl1 1 9* Modified 7/17/79 by B. Greenberg for echo negotiation meters. 1 10* Modified November 1979 by C. Hornig for MCS tracing. 1 11* Modified December 1979 by Robert Coren to add FNP channel lock meter 1 12* Modified February 1980 by Robert Coren to remove all references to circular buffer 1 13* Modified March 1980 by Robert Coren to reorganize metering information 1 14* Modified December 1980 by Robert Coren to add FNP-specific events 1 15* Modified 24 March 1982, W. Olin Sibert, to add mcs_timer support, recoverable_error_severity 1 16* Modified November 1984 by Robert Coren to add tty_area_lock 1 17**/ 1 18 1 19 dcl ttybp ptr, 1 20 tty_buf$ ext static, /* tty buffer segment */ 1 21 tty_ev fixed bin int static options (constant) init (57), /* event used for wait and notify */ 1 22 abs_buf_limit fixed bin (18) static options (constant) init (64), /* minimum number of words we will leave free */ 1 23 input_bpart fixed bin (18) static options (constant) init (2), /* fraction of bleft we will allow for input */ 1 24 output_bpart fixed bin (18) static options (constant) init (4); /* fraction of bleft we will allow for output */ 1 25 1 26 1 27 dcl qblock_size fixed bin int static options (constant) init (16); /* size in words of a delay queue block */ 1 28 dcl bsizec fixed bin int static options (constant) init (60); /* number of characters in smallest buffer */ 1 29 dcl buf_per_second fixed bin int static options (constant) init (10); /* for figuring out max. buffer size based on speed */ 1 30 1 31 dcl FNP_DUMP_PATCH_EVENT fixed bin int static options (constant) init (58); 1 32 dcl FNP_METER_EVENT fixed bin int static options (constant) init (59); 1 33 dcl TTY_AREA_LOCK_EVENT bit (36) aligned int static options (constant) init ("74"b3); 1 34 1 35 dcl 1 tty_buf aligned based (ttybp), /* declaration of tty buffer seg */ 1 36 2 slock bit (36), /* per system lock */ 1 37 2 absorig fixed bin (24), /* abs address of this seg */ 1 38 2 borig bit (18), /* index of start of buffer area */ 1 39 2 bleft fixed bin (18), /* words left in pool */ 1 40 2 free bit (18), /* pointer to start of free pool */ 1 41 2 fnp_config_flags (8) bit (1) unal, /* flag(i) ON if fnp(i) configured */ 1 42 2 padb1 bit (28) unaligned, 1 43 2 lct_ptr ptr, /* pointer to logical channel table */ 1 44 1 45 2 nrawread fixed bin (35), /* number of raw chars input, total */ 1 46 2 nrawwrite fixed bin (35), /* number of raw characters output */ 1 47 2 ninchars fixed bin (35), /* total input chars after conversion */ 1 48 2 noutchars fixed bin (35), /* total output chars before conversion */ 1 49 2 readblocked fixed bin (35), /* number of times go input blocked */ 1 50 2 nblocked fixed bin (35), /* number of times process output blocked */ 1 51 2 minbuf fixed bin (18), /* min output buffer size */ 1 52 2 totbuf fixed bin (35), /* divide by nblocked to get ave buffer size */ 1 53 1 54 2 preconverted fixed bin (35), /* number of converted chars held in tty_buf */ 1 55 2 input_restart fixed bin, /* number of times tty_read had to start over */ 1 56 2 output_restart fixed bin, /* number of times tty_write has had to start over */ 1 57 2 output_buffer_overflow fixed bin, /* number of times tty_write has run out of buffers */ 1 58 2 read_time fixed bin (71), /* total time spent in tty_read */ 1 59 2 write_time fixed bin (71), /* total time spent in tty_write */ 1 60 1 61 2 read_calls fixed bin (35), /* number of calls to tty_read */ 1 62 2 write_calls fixed bin (35), /* number of calls to tty_write */ 1 63 2 bfx fixed bin, /* used in calls to iobm */ 1 64 2 nquits fixed bin (35), /* number of quits */ 1 65 2 space_needed_data, 1 66 3 space_needed bit (1) unal, /* space_needed bit on in at least 1 lcte */ 1 67 3 space_needed_calls fixed bin (34) unal, /* meter of uses of this facility */ 1 68 2 space_lock_count fixed bin (35), /* count of times tty_buf.slock locked */ 1 69 2 space_lock_wait_count fixed bin (35), /* count of times necessary to loop to lock it */ 1 70 2 space_lock_wait_time fixed bin (35), /* total time looped trying to lock it */ 1 71 1 72 2 alloc_calls fixed bin (35), /* total number of allocations performed in tty_buf */ 1 73 2 free_calls fixed bin (35), /* total number of freeings in tty_buf */ 1 74 2 alloc_time fixed bin (35), /* time spent masked in tty_space_man$get entries */ 1 75 2 free_time fixed bin (35), /* time spent masked in tty_space_man$free entries */ 1 76 2 total_alloc_steps fixed bin (35), /* number of steps thru free chain while doing above */ 1 77 2 alloc_failures fixed bin (35), /* number of unsuccessful attempts to allocate space */ 1 78 2 cumulative_input_space fixed bin (71), /* cumulative amount of space allocated for input */ 1 79 1 80 2 cumulative_output_space fixed bin (71), /* cumulative amount of space allocated for output */ 1 81 2 cumulative_control_space fixed bin (71), /* cumulative amount of space allocated by tty_space_man$get_space */ 1 82 2 input_space_updates fixed bin (35), /* number of increments to cumulative_input_space */ 1 83 2 output_space_updates fixed bin (35), /* number of increments to cumulative_output_space */ 1 84 2 control_space_updates fixed bin (35), /* number of increments to cumulative_control_space */ 1 85 2 minimum_free_space fixed bin (18), /* smallest amount of free space ever available */ 1 86 1 87 2 current_input_space fixed bin (18), /* amount of space currently allocated for input */ 1 88 2 current_output_space fixed bin (18), /* amount of space currently allocated for output */ 1 89 2 current_control_space fixed bin (18), /* amount of space currently allocated by get_space */ 1 90 2 tty_lock_calls fixed bin (35), /* number of calls to tty_lock$lock entries */ 1 91 2 found_channel_locked fixed bin (35), /* number of times tty_lock found channel already locked */ 1 92 2 max_wait_time fixed bin (35), /* longest time waited for any channel lock */ 1 93 2 total_wait_time fixed bin (71), /* total amount of time spent waiting for channel locks */ 1 94 1 95 2 echo_neg_time fixed bin (71), /* cumulative time spent doing echo negotiation */ 1 96 2 echo_neg_interrupts fixed bin (35), /* Echo-negotiated shipments */ 1 97 2 echo_neg_r0_chars fixed bin (35), /* Chars echoed by ring 0 */ 1 98 2 echo_neg_mux_chars fixed bin (35), /* Chars echoed by mux */ 1 99 2 echo_neg_sndopt_restarts fixed bin (35), /* Echo reinits */ 1 100 2 echo_neg_mux_nonecho fixed bin (35), 1 101 2 echo_neg_entries fixed bin (35), /* Entries into negotiate */ 1 102 1 103 2 echo_neg_mux_inhibit bit (1) aligned, /* For testing */ 1 104 2 n_queued_interrupts fixed bin (35), /* number of interrupts queued by tty_lock */ 1 105 2 trace unaligned, /* tracing information */ 1 106 3 flags, 1 107 4 enable bit, /* global tracing control */ 1 108 4 default_mode bit, /* whether to trace channels by default */ 1 109 4 read bit, /* read */ 1 110 4 write bit, /* write */ 1 111 4 data bit, /* buffers on reads and writes */ 1 112 4 control bit, /* control, priv_control, and hpriv_control */ 1 113 4 modes bit, /* (get set check)_modes */ 1 114 4 interrupt bit, /* interrupt, interrupt_later */ 1 115 4 init bit, /* init_multiplexer, terminate_multiplexer */ 1 116 4 start bit, /* start, stop */ 1 117 4 shutdown bit, /* shutdown */ 1 118 4 space_man bit, /* tty_space_man$* */ 1 119 4 pad_flags bit (6), 1 120 3 data_offset bit (18), /* offset of tracing data */ 1 121 1 122 2 recoverable_error_severity fixed bin, /* Syserr severity for recoverable MCS errors */ 1 123 1 124 2 timer_lock bit (36) aligned, /* Lock owned by mcs_timer */ 1 125 2 next_timer_offset bit (18) aligned, /* Offset of next timer to come due */ 1 126 2 timer_count fixed bin, /* Number of timers outstanding */ 1 127 2 timer_process bit (36) aligned, /* Who is doing timers? */ 1 128 1 129 2 timer_ev_chn fixed bin (71), /* How get get him */ 1 130 2 timer_lock_wait_time fixed bin (71), /* CPU time spent spinning on timer lock */ 1 131 1 132 2 timer_lock_count fixed bin (35), /* Number of times timer lock locked */ 1 133 2 timer_lock_wait_count fixed bin (35), /* Number of times imer lock waited on */ 1 134 2 timer_call_time fixed bin (71), /* CPU time spent in call side timer operations */ 1 135 1 136 2 timer_polling_time fixed bin (71), /* CPU time spent polling (including channel_manager) */ 1 137 2 timer_set_calls fixed bin (35), /* Number of calls to mcs_timer$set, set_wired */ 1 138 2 timer_reset_calls fixed bin (35), /* Number of calls to mcs_timer$reset, reset_wired */ 1 139 1 140 2 timer_change_calls fixed bin (35), /* Number of calls to mcs_timer$change, change_wired */ 1 141 2 timer_poll_calls fixed bin (35), /* Number of calls to mcs_timer$poll */ 1 142 2 timer_error_calls fixed bin (35), /* Number of mcs_timer calls ending with recoverable errors */ 1 143 2 timer_duplicate_pollings fixed bin (35), /* Number of timer polling found in progress on other CPU */ 1 144 1 145 2 tty_area_lock like hc_fast_lock, /* to prevent contention in allocating/freeing in tty_area */ 1 146 1 147 2 pad2 (13) fixed bin (35), 1 148 1 149 2 free_space fixed bin; /* start of free space region */ 1 150 1 151 2 1 /* BEGIN INCLUDE FILE...hc_fast_lock.incl.pl1 */ 2 2 2 3 /* Created November 1984 by Robert Coren to replace hc_lock.incl.pl1 */ 2 4 2 5 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 2 6 2 7 /* format: style3 */ 2 8 2 9 declare lock_ptr pointer; 2 10 declare 1 hc_fast_lock aligned based (lock_ptr), 2 11 2 pid bit (36) aligned, /* holder of lock */ 2 12 2 event bit (36) aligned, /* event associated with lock */ 2 13 2 flags aligned, 2 14 3 notify_sw bit (1) unaligned, 2 15 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 2 16 2 17 /* END INCLUDE FILE...hc_fast_lock.incl.pl1 */ 1 152 1 153 1 154 /* END INCLUDE FILE ... tty_buf.incl.pl1 */ 240 241 3 1 /* BEGIN INCLUDE FILE ... uncp_buf.incl.pl1 */ 3 2 3 3 3 4 /****^ HISTORY COMMENTS: 3 5* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 3 6* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 3 7* Implement the uncp multiplexer interface for the DSA gateway protocol. 3 8* END HISTORY COMMENTS */ 3 9 3 10 /* Copied from tty_buf.incl.pl1 June 17, 1981 by Jacke Barre to install 3 11* the circular queue in a independent segment (uncp_buf). 3 12* In MR9.0 there is no longer a circular queue in tty_buf. 3 13* Modified in August 1985 for adaptation to MR11.0. 3 14**/ 3 15 3 16 dcl uncpbp ptr; 3 17 3 18 3 19 dcl 1 uncp_buf aligned based (uncpbp), /* declaration of uncp buffer area */ 3 20 2 absolute_orig fixed bin (24), /* abs address of this area */ 3 21 2 cq_hbound fixed bin (18), /* upper bound for circular_queue array */ 3 22 2 circular_queue_size fixed bin (35), /* number of words used in circular queue */ 3 23 2 queue_ave_cnt fixed bin (18), /* divide above by this to get ave queue size */ 3 24 2 queue_full_cnt fixed bin (18), /* number of times circular queue full */ 3 25 2 cq_next fixed bin (18), /* next free word in circular queue */ 3 26 2 cq_free fixed bin (18), /* number of free words in circular queue */ 3 27 2 cq_max_size fixed bin (17), /* size in words of circular_queue */ 3 28 2 cq_lock bit (36), /* lock for circular buffer */ 3 29 2 circular_queue (0: 1999) fixed bin (18); /* circular queue that DN7100 writes into */ 3 30 3 31 /* END INCLUDE FILE ... uncp_buf.incl.pl1 */ 242 243 4 1 /* BEGIN INCLUDE FILE ... tty_buffer_block.incl.pl1 */ 4 2 4 3 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 4 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 4 8* Add data needed for the uncp multiplexer (DSA gateway) interface 4 9* implementation. 4 10* END HISTORY COMMENTS */ 4 11 4 12 4 13 /* 4 14* Separated from tty_buf.incl.pl1 aug 78 by J. Nicholls 4 15* Modified May 1979 by Larry Johnson to add max_buffer_tally array and to use unsigned variables. 4 16* Reported in February 1982 the modifications to add the "turn" bit in flags. 4 17**/ 4 18 4 19 dcl blockp ptr; /* pointer which block entry is based on */ 4 20 dcl free_blockp ptr; /* pointer to head of free space chain */ 4 21 4 22 4 23 dcl 1 free_block aligned based (free_blockp), /* format of start of free block */ 4 24 2 next bit (18), /* foward pointer to next free block */ 4 25 2 size fixed bin; /* number of words in this block */ 4 26 4 27 4 28 dcl 1 buffer based (blockp) aligned, /* buffer definition */ 4 29 2 next fixed bin (18) unal uns, /* addr of next buffer */ 4 30 2 flags unaligned, 4 31 3 end_of_page bit (1) unaligned, /* buffer contains end of page */ 4 32 3 converted bit (1) unaligned, /* buffer contains converted input */ 4 33 3 break bit (1) unaligned, /* buffer contains break character */ 4 34 3 mark bit (1) unaligned, /* buffer contains first character after "mark" */ 4 35 3 turn bit (1) unaligned, /* ON if the turn must be sent */ 4 36 3 pad bit (1) unaligned, 4 37 2 size_code fixed bin (3) unal uns, /* (nwords/16) - 1 */ 4 38 2 tally fixed bin (9) unal uns, /* number of characters in buffer */ 4 39 2 chars (0:59) char (1) unaligned; /* room for 60 data characters */ 4 40 4 41 /* the following array, if indexed by buffer.size_code will give maximum number of characters permitted in that buffer */ 4 42 4 43 dcl max_buffer_tally (0:7) fixed bin int static options (constant) init (60, 124, 188, 252, 316, 380, 444, 508); 4 44 4 45 /* END INCLUDE FILE ... tty_buffer_block.incl.pl1 */ 244 245 5 1 /* BEGIN INCLUDE FILE ... lct.incl.pl1 */ 5 2 5 3 /* Created by J. Stern 7/26/78 */ 5 4 /* Metering information added by C. Hornig, March 1980. */ 5 5 /* Unwired saved meters added by Robert Coren, December 1980 */ 5 6 5 7 dcl lctp ptr; /* ptr to logical channel table */ 5 8 dcl lctep ptr; /* ptr to logical channel table entry */ 5 9 dcl lct_size fixed bin; /* size of lcte_array when allocated */ 5 10 5 11 dcl 1 lct aligned based (lctp), /* logical channel table */ 5 12 2 max_no_lctes fixed bin, /* maximum number of lct entries */ 5 13 2 cur_no_lctes fixed bin, /* current number of lct entries used */ 5 14 2 lcnt_ptr ptr, /* ptr to logical channel name table */ 5 15 2 queue_lock bit (36), /* lock used to serialize queueing operations */ 5 16 2 pad (11) fixed bin, 5 17 2 lcte_array (lct_size refer (lct.max_no_lctes)) like lcte; /* lct entries */ 5 18 5 19 5 20 dcl 1 lcte aligned based (lctep), /* logical channel table entry */ 5 21 2 lock bit (36), /* channel lock */ 5 22 2 data_base_ptr ptr unal, /* ptr to channel data base */ 5 23 2 channel_type fixed bin (8) unal, /* identifies channel manager program */ 5 24 2 flags unal, 5 25 3 entry_in_use bit (1) unal, /* ON if this entry in use */ 5 26 3 initialized bit (1) unal, /* ON if this channel initialized */ 5 27 3 notify_reqd bit (1) unal, /* ON if must notify when unlocking this channel */ 5 28 3 locked_for_interrupt bit (1) unal, /* ON if lock set by interrupt handler */ 5 29 3 space_needed bit (1) unal, /* ON if this channel needs buffer space */ 5 30 3 special_lock bit (1) unal, /* ON if lock is managed by multiplexer */ 5 31 3 trace_force bit (1) unal, /* ON to trace based on next bit only */ 5 32 /* OFF to XOR next bit with tty_buf.default_tracing */ 5 33 3 trace bit (1) unal, /* ON to trace this channel */ 5 34 3 unused bit (1) unal, 5 35 2 physical_channel_devx fixed bin (17) unal, /* devx of physical chan from which logical chan is derived */ 5 36 2 major_channel_info, 5 37 3 major_channel_devx fixed bin unal, /* major channel device index */ 5 38 3 subchannel fixed bin (17) unal, /* subchannel id (or data ptr) wrt major channel */ 5 39 2 queue_entries, 5 40 3 queue_head bit (18) unal, /* ptr to first queue entry for this channel */ 5 41 3 queue_tail bit (18) unal, /* ptr to last queue entry for this channel */ 5 42 2 word_counts, 5 43 3 input_words fixed bin (17) unal, /* number of input words charged to this channel */ 5 44 3 output_words fixed bin (17) unal, /* number of output words charged to this channel */ 5 45 5 46 2 meters, 5 47 3 in_bytes fixed bin (35), 5 48 3 out_bytes fixed bin (35), 5 49 3 in, 5 50 4 calls fixed bin (35), 5 51 4 interrupts fixed bin (35), 5 52 4 call_time fixed bin (71), 5 53 4 interrupt_time fixed bin (71), 5 54 3 out like lcte.meters.in, 5 55 3 control like lcte.meters.in, 5 56 2 saved_meters_ptr ptr, /* pointer to unwired copy of meters saved at last dialup */ 5 57 5 58 2 timer_offset bit (18) aligned, /* Head of list of timers for this channel */ 5 59 5 60 2 pad (3) fixed bin (35); 5 61 5 62 5 63 dcl lcntp ptr; /* ptr to logical channel name table */ 5 64 5 65 dcl 1 lcnt aligned based (lcntp), /* logical channel name table */ 5 66 2 names (lct.max_no_lctes) char (32) unal; /* channel names */ 5 67 5 68 dcl 1 saved_meters aligned based like lcte.meters; /* meters saved at dialup, allocated in tty_area */ 5 69 5 70 5 71 /* END INCLUDE FILE ... lct.incl.pl1 */ 246 6 1 /* BEGIN INCLUDE FILE ... pcb.incl.pl1 */ 6 2 6 3 6 4 6 5 /****^ HISTORY COMMENTS: 6 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 6 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 6 8* Add data needed for the uncp multiplexer (DSA gateway) interface 6 9* implementation. 6 10* END HISTORY COMMENTS */ 6 11 6 12 6 13 /* Created 08/14/78 by Robert S. Coren */ 6 14 /* Modified 02/19/80 by Robert S. Coren to add read_first & read_last */ 6 15 /* Modified 12/10/80 by Robert S. Coren to add metering stuff */ 6 16 /* Modified May 1981 by Robert S.Coren to add tandd_attached flag */ 6 17 /* Modified in February 1982 to add: dumpout, turn, enter_receive_pending, 6 18* connection_type, send_lf, extra_nl,lfecho flags for DN7100 */ 6 19 6 20 /* Describes physical channel blocks for FNP channels */ 6 21 6 22 dcl n_pcbs fixed bin; 6 23 dcl pcbp ptr; 6 24 6 25 dcl 1 pcb_array (n_pcbs) based aligned like pcb; 6 26 6 27 dcl 1 pcb aligned based (pcbp), /* physical channel block declaration */ 6 28 2 channel_desc unaligned, 6 29 3 devx fixed bin (17), /* index of LCT entry */ 6 30 3 subchan fixed bin (7) unaligned, /* logical subchannel/lsla slot # correspondence */ 6 31 3 line_number unal, /* regular line number */ 6 32 4 is_hsla bit (1) unaligned, /* on if hsla, off if lsla */ 6 33 4 la_no bit (3) unaligned, /* line adapter (high or low speed) number */ 6 34 4 slot_no bit (6) unaligned, /* physical slot or subchannel number */ 6 35 2 write_first fixed bin (17) unaligned, /* offset of first buffer in output chain */ 6 36 2 write_last fixed bin (17) unaligned, /* offset of last buffer in output chain */ 6 37 2 baud_rate fixed bin (17) unaligned, /* baud rate of channel */ 6 38 2 line_type fixed bin (17) unaligned, /* line type */ 6 39 2 max_buf_size fixed bin (17) unaligned, /* largest buffer to be allocated for output */ 6 40 2 write_cnt fixed bin (17) unaligned, /* number of characters in write chain */ 6 41 2 flags unaligned, 6 42 3 listen bit (1), /* channel is ready for dialup */ 6 43 3 dialed bit (1), /* channel is dialed up or connected */ 6 44 3 send_output bit (1), /* channel is ready for output */ 6 45 3 high_speed bit (1), /* needs large send_out threshold */ 6 46 3 sync_line bit (1), /* synchronous channel */ 6 47 3 end_frame bit (1), /* channel is waiting for formfeed */ 6 48 3 hndlquit bit (1), /* channel in hndlquit mode */ 6 49 3 breakall_enabled bit (1), /* breakall mode allowed for this channel */ 6 50 3 output_mbx_pending bit (1), /* A wtx mbx has been sent, but not relinquished */ 6 51 3 copied_meters_ready bit (1), /* copy_meters operation has completed */ 6 52 3 get_meters_waiting bit (1), /* waiting for get_meters operation to complete */ 6 53 3 tandd_attached bit (1), /* this channel is in use by T & D */ 6 54 3 enter_receive_pending bit (1), /* enter_receive is waiting for send */ 6 55 3 turn bit (1), /* Multics owns the turn */ 6 56 3 extra_nl bit (1), /* add NL at end of buffer (read) */ 6 57 3 send_lf bit (1), /* send lf after read */ 6 58 3 lfecho bit (1), /* Validate lfecho mode */ 6 59 3 dumpout bit (1), /* To purge first write after special dial */ 6 60 3 buffer_flag bit (1), /* Utilisation of a buffer in place of the circular buffer. */ 6 61 3 connection_type bit (2), /* For full-duplex */ 6 62 3 padb bit (6), 6 63 3 uncp_pcbx fixed bin (9) unal uns, /* To manage the full duplex with the datanet 7100 */ 6 64 2 read_first fixed bin (18) unsigned unaligned, /* head of read chain (while reading from FNP) */ 6 65 2 read_last fixed bin (18) unsigned unaligned, /* tail of read chain (likewise) */ 6 66 2 saved_meters_ptr pointer unaligned, /* pointer to (unwired) copy of meters at last dialup */ 6 67 2 copied_meters_offset fixed bin (18) unsigned; /* offset in tty_buf of buffer meters copied to */ 6 68 6 69 /* END INCLUDE FILE ... pcb.incl.pl1 */ 247 7 1 /* BEGIN dn355_data.incl.pl1 */ 7 2 7 3 7 4 7 5 /****^ HISTORY COMMENTS: 7 6* 1) change(88-06-15,Berno), approve(88-07-13,MCR7928), 7 7* audit(88-06-15,Parisek), install(88-07-19,MR12.2-1061): 7 8* Add data needed for the uncp multiplexer (DSA gateway) interface 7 9* implementation. 7 10* 2) change(89-03-20,Parisek), approve(89-06-06,MCR8110), 7 11* audit(89-10-09,Farley), install(89-10-25,MR12.3-1100): 7 12* Add support of protocol mpx. 7 13* END HISTORY COMMENTS */ 7 14 7 15 7 16 /* Date Last Modified and Reason 7 17* 7 18* Created 07/25/74 by R. B. Snyder for new ttydim. 7 19* Modified 06/23/77 by J. Stern to add channel_work_reqd and cwork_count 7 20* Modified 08/14/78 by Robert Coren to remove devx_tab and invent PCBs 7 21* Modified 79 May 14 by Art Beattie to add fnp_mem_size 7 22* Modified December 1979 by Robert Coren to add FNP queue lock 7 23* Modified January 1980 by Larry Johnson to increase max number of FNPs to 8 7 24* Modified 02/12/80 by Robert Coren to add dcw_list_array_ptr 7 25* Modified 03/06/80 by Robert Coren to add some metering info 7 26* Modified 12/10/80 by Robert Coren to add get_meters_waiting flag 7 27* Modified 83-12-16 BIM to use a chanid instead of iom/channel fb's. 7 28* Modified 1984-07-26 BIM for paged iom. 7 29* Modified in September 1985 for the DN7100 version interim. 7 30**/ 7 31 7 32 /* LOCKING RULES: A fnp is locked by its LCTE unless its LCTE is uninitialized. 7 33* In that case, the configuration_lock must be held. 7 34* if tty_lock$lock_lcte returns io_no_permission, then the caller must 7 35* lock$lock_fast the configuration lock and retry the LCTE lock. If 7 36* the lcte is now initialized, too bad. Otherwise, the config lock protects. 7 37* 7 38* Configuration locking is interesting to init_multiplexer and 7 39* all of fnp t&d and reconfiguration. The guts of the multiplexer 7 40* pay no attention to it. Thus, if the LCTE can be locked, it MUST be 7 41* locked before changing the io_manager_assigned flag. */ 7 42 7 43 /* format: style4,delnl,insnl,^ifthendo */ 7 44 7 45 dcl max_no_355s fixed bin int static init (8) options (constant); 7 46 /* max no of 355s we can handle (arbitrary) */ 7 47 dcl dn355_data$ external fixed bin; 7 48 7 49 dcl infop pointer; 7 50 dcl fnpp ptr; 7 51 7 52 dcl 1 datanet_info aligned based (infop), 7 53 2 configuration_lock aligned, 7 54 3 pid bit (36) aligned, 7 55 3 event bit (36) aligned, 7 56 3 flags aligned, 7 57 4 notify_sw bit (1) unaligned, 7 58 4 pad bit (35) aligned, 7 59 2 no_of_355s fixed bin, /* no. of FNP's */ 7 60 2 trace bit (1) aligned, /* watch events on console */ 7 61 2 debug_stop bit (1) aligned, /* crash on errors */ 7 62 2 uncp_bufp ptr, /* pointer to the circular buffer */ 7 63 2 protocol_datap ptr, /* pointer to protocol_mpx data */ 7 64 2 pad1 (6) bit (36) aligned, 7 65 2 per_datanet (max_no_355s) aligned like fnp_info; /* data per datanet */ 7 66 7 67 dcl 1 fnp_info aligned based (fnpp), /* structure for each FNP */ 7 68 2 mbx_pt pointer, /* pointer to mailbox NULL if not in config */ 7 69 2 pcb_array_ptr pointer, /* pointer to array of physical channel blocks */ 7 70 2 dcw_list_array_ptr pointer, /* pointer to array of space reserved for output DCW lists */ 7 71 2 no_of_channels fixed bin, /* number of channels on this FNP */ 7 72 2 fnp_id, 7 73 3 fnp_tag char (1) unaligned, /* letter identifying FNP */ 7 74 3 fnp_number fixed bin (9) unsigned unaligned, /* sequence number of FNP */ 7 75 3 padc bit (18) unaligned, 7 76 2 io_chanid char (8) aligned, 7 77 2 io_manager_chx fixed bin (35), /* devx for DIA on iom */ 7 78 2 lsla_idx (0:5) fixed bin aligned, /* index into PCB array for lsla lines */ 7 79 2 hsla_idx (0:2) fixed bin aligned, /* index into PCB array for hsla lines */ 7 80 2 count fixed bin, /* number of items in delay queue */ 7 81 2 cur_ptr fixed bin, /* offset in tty_buf of next delay queue element */ 7 82 2 last_ptr fixed bin, /* offset in tty_buf of last delay queue element */ 7 83 2 bleft_355 fixed bin, /* number of free buffers in this 355 */ 7 84 2 flags, 7 85 3 work_reqd bit (1) unaligned, /* mailbox messages queued up */ 7 86 3 bootloading bit (1) unaligned, /* currently being bootloaded */ 7 87 3 running bit (1) unaligned, /* this FNP is running */ 7 88 3 wired bit (1) unaligned, /* bootload buffer is wired */ 7 89 3 dump_patch_in_progress bit (1) unaligned, /* a dump or patch order is in progress */ 7 90 3 level_3_pending bit (1) unaligned, /* level 3 interrupt pending */ 7 91 3 level_7_pending bit (1) unaligned, /* level 7 interrupt pending */ 7 92 3 dump_patch_disabled bit (1) unaligned, /* dump & patch orders disabled because of timeout */ 7 93 3 t_and_d_in_progress bit (1) unaligned, /* T & D using FNP */ 7 94 3 t_and_d_lev_3_occurred bit (1) unaligned, /* A level 3 occurred */ 7 95 3 t_and_d_lev_7_occurred bit (1) unaligned, 7 96 3 t_and_d_notify_requested bit (1) unaligned, 7 97 3 t_and_d_assigned bit (1) unaligned, /* AS has given fnp to process */ 7 98 3 get_meters_waiting bit (1) unaligned, /* waiting for meter copy to complete */ 7 99 3 padb bit (7) unaligned, 7 100 3 active_dial unaligned, 7 101 4 active_bit (15) bit (1) unaligned, /* ON if the process is active */ 7 102 2 lcte_ptr ptr, /* pointer to this FNP's LCT entry */ 7 103 2 astep ptr, /* pointer to aste of wired bootload buffer */ 7 104 2 boot_ev_chan fixed bin (71), /* event channel over which to signal bootload completion */ 7 105 2 boot_process_id bit (36), /* process that initiated bootload */ 7 106 2 version char (4), /* version id of core image */ 7 107 2 fnp_mem_size fixed bin (18) unsigned, /* memory size of this FNP in 18-bit words */ 7 108 2 queue_lock bit (36) aligned, /* lock for interrupt queue */ 7 109 2 dump_patch_lock bit (36), /* lock for fnp_dump or _patch operation */ 7 110 2 q_entries_made fixed bin (35), /* count of delay queue entries made */ 7 111 2 input_reject_count fixed bin, /* number of times input rejected */ 7 112 2 processed_from_q fixed bin (35), /* number of interrupts processed from queue */ 7 113 2 fnp_channel_locked fixed bin (35), /* number of times dn355 found per-FNP lock locked */ 7 114 2 input_data_transactions fixed bin (35), /* number of mailbox transactions for input */ 7 115 2 output_data_transactions fixed bin (35), /* number of mailbox transactions for output */ 7 116 2 input_control_transactions fixed bin (35), /* number of mailbox transactions for inbound control info */ 7 117 2 output_control_transactions fixed bin (35), /* number of mailbox transactions for outbound control info */ 7 118 2 cumulative_mbx_in_use fixed bin (35), /* cumulative count of number of outbound mailboxes in use */ 7 119 2 max_mbx_in_use fixed bin, /* maximum number of mailboxes in use at any given time */ 7 120 2 mbx_in_use_updated fixed bin (35), /* number of increments to cumulative_mbx_in_use */ 7 121 2 mbx_unavailable fixed bin (35), /* number of times had to queue mailbox transaction because none available */ 7 122 2 free_size fixed bin (35), /* cumulative amount of bleft_355 */ 7 123 2 free_count fixed bin, /* number of adds to above */ 7 124 2 fnp_space_restricted_output fixed bin (35), /* number of times available FNP space restricted amount of output sent */ 7 125 2 tandd_pcbx fixed bin, /* index of PCB for COLTS channel */ 7 126 2 n_pages_wired fixed bin, /* pages wired for loading */ 7 127 2 config_flags aligned, 7 128 3 available bit (1) unaligned, /* reconfig says "yes" */ 7 129 3 io_manager_assigned bit (1) unaligned, /* We have channel assigned to us */ 7 130 3 pad bit (34) unaligned, 7 131 2 uncp_pcbx1 fixed bin (17) unaligned, /* For the DN7100 */ 7 132 2 uncp_pcbx2 fixed bin (17) unaligned, /* For the DN7100 */ 7 133 2 ptx fixed bin, /* page table index, used only at bootload */ 7 134 2 ptp pointer unaligned; /* page table for this FNP */ 7 135 7 136 /**** The following named constants are used to lay out the 7 137* iom page tables. Each FNP has to have its own page 7 138* table because there is not enough room to have eight different 7 139* bootload images of 32 K and > 64 K of tty_buf 7 140* 7 141* THE MAX TTY BUF LENGTH IS 192 K words. We could have another 16 K 7 142* easily, and then after that it would get hard. */ 7 143 7 144 /**** The layout 7 145* 7 146* Page I/O address Memory address Comments 7 147* ---- ------ -------------- -------- 7 148* 0 0 xxxxxx invalid PTW 7 149* 1 2000 2000 write-enabled (mailbox) 7 150* 2 4000 4000 write-enabled (mailbox) 7 151* 3 6000 6000 write-enabled (mailbox) 7 152* 4 10000 as needed bootload image segment page 0 7 153* .... .... .... .... 7 154* 35 110000 as needed bootload image segment page 31 7 155* 36 112000 xxxxxx invalid PTW 7 156* ... .... .... .... 7 157* 63 160000 .... invalid PTW 7 158* 64 200000 as needed tty_buf page 0 7 159* ... .... .... .... 7 160* 127 260000 as needed tty_buf page 63 7 161* 255 ...... ..... tty_buf page 191 7 162**/ 7 163 7 164 /**** We assume that the page table starts at all zeros. */ 7 165 7 166 declare FIRST_BOOTLOAD_PAGEX fixed bin init (4) int static options (constant); 7 167 declare FIRST_TTY_BUF_PAGEX fixed bin init (64) int static options (constant); 7 168 7 169 /* End include file dn355_data.incl.pl1 */ 248 249 250 dcl 1 gateway_buf aligned based (blockp), 251 2 cnt fixed bin (18) unsigned unaligned, 252 2 pad bit (18) unaligned; 253 254 dcl gateway_header bit (36) based (blockp); 255 256 dcl buf_words (256) fixed bin based; 257 8 1 /* BEGIN dn355_mailbox.incl.pl1 */ 8 2 8 3 /* Date Last Modified and Reason 8 4* Created 07/25/74 by R. B. Snyder for new ttydim. 8 5* Modified 08/20/75 by Mike Grady to prepare for multiple 355's 8 6* Modified 11/08/78 by Robert Coren to introduce FNP-controlled mailboxes 8 7* Modified 02/19/80 by Robert Coren to specify format of accept_input mailbox 8 8* Modified 04/23/80 by Robert Coren to replace lock with num_in_use 8 9* Modified 09/21/82 by Robert Coren to make subfields of crash_data be fixed bin (18) unsigned 8 10* */ 8 11 8 12 dcl 1 datanet_mbx aligned based (mbxp), /* declaration of 355 mailbox */ 8 13 2 dia_pcw aligned, /* Peripheral Control Word for DIA */ 8 14 3 zero bit (18) unaligned, 8 15 3 error bit (1) unaligned, /* set to "1"b if error on connect */ 8 16 3 pad1 bit (5) unaligned, 8 17 3 mbx_no bit (6) unaligned, /* number of submbx being sent to 355 */ 8 18 3 command bit (6) unaligned, /* always 71 (octal) */ 8 19 2 mailbox_requests fixed bin, /* 0 mod 256K cnt of mbx requests by 355 */ 8 20 2 term_inpt_mpx_wd bit (36) aligned, /* terminate interrupt multiplex word */ 8 21 2 last_mbx_req_count fixed bin, /* previous value of mailbox_requests */ 8 22 2 num_in_use fixed bin, /* number of submailboxes currently in use */ 8 23 2 mbx_used_flags, /* one bit for each mailbox */ 8 24 3 used (0:7) bit (1) unaligned, /* "1"b means this mbx is being used */ 8 25 3 pad2 bit (28) unaligned, 8 26 2 crash_data, /* data for 355 emergency interrupt */ 8 27 3 fault_code fixed bin (18) unal unsigned, 8 28 3 ic fixed bin (18) unal unsigned, 8 29 3 iom_fault_status fixed bin (18) unal unsigned, 8 30 3 fault_word fixed bin (18) unal unsigned, /* contains either faulting instruction or iomchannel no */ 8 31 2 dn355_sub_mbxes (0:7) aligned, /* 8 CS-initiated submailboxes */ 8 32 3 pad4 (8) fixed bin, /* eight words each */ 8 33 2 fnp_sub_mbxes (0:3) aligned, /* 4 FNP-initiated mailboxes */ 8 34 3 pad5 (28) fixed bin; /* 28 words each */ 8 35 8 36 dcl 1 sub_mbx aligned based (subp), /* declaration of a submailbox */ 8 37 2 dn355_no bit (3) unaligned, /* 355 number */ 8 38 2 pad1 bit (5) unaligned, 8 39 2 line_number unaligned, /* line number assigned by 355 */ 8 40 3 is_hsla bit (1) unaligned, /* on if hsla, off if lsla */ 8 41 3 la_no bit (3) unaligned, /* line adapter (high or low speed) number */ 8 42 3 slot_no bit (6) unaligned, /* physical slot/subchannel number */ 8 43 2 terminal_id bit (18) unaligned, /* not used */ 8 44 8 45 2 terminal_type bit (9) unaligned, /* unused */ 8 46 2 cmd_data_len fixed bin (8) unaligned, /* no. of 6 bit chars in command data */ 8 47 2 op_code fixed bin (8) unaligned, /* op code */ 8 48 2 io_cmd fixed bin (8) unaligned, /* i/o cmd */ 8 49 8 50 2 command_data (3) bit (36) unaligned, /* data associated with op code */ 8 51 8 52 2 address unal, /* dcw buffer or circular queue address */ 8 53 3 data_addr bit (18) unaligned, /* data address */ 8 54 3 word_cnt fixed bin (18) unsigned unaligned, /* data length */ 8 55 2 pad3 bit (72) unaligned; 8 56 8 57 /* The structure below defines the long form of submailbox used by the FNP. Note that 8 58* the declaration of command_data and input_data is that used for the input_in_mailbox 8 59* operation; other FNP-initiated operations use the command_data format described by 8 60* the above (short mailbox) structure 8 61**/ 8 62 8 63 dcl 1 fnp_sub_mbx aligned based (subp), /* format used for FNP-controlled mailbox */ 8 64 2 dn355_no bit (3) unaligned, /* as above */ 8 65 2 pad1 bit (5) unaligned, 8 66 2 line_number unaligned, /* as above */ 8 67 3 is_hsla bit (1) unaligned, 8 68 3 la_no bit (3) unaligned, 8 69 3 slot_no bit (6) unaligned, 8 70 2 n_free_buffers fixed bin (17) unaligned, /* number of free blocks in FNP at present */ 8 71 8 72 2 pad3 bit (9) unaligned, 8 73 2 n_chars fixed bin (9) unsigned unaligned, /* number of data characters (if input) */ 8 74 2 op_code fixed bin (9) unsigned unaligned, /* as above */ 8 75 2 io_cmd fixed bin (9) unsigned unaligned, /* as above */ 8 76 8 77 2 input_data char (100) unaligned, /* input characters for input_in_mailbox op */ 8 78 2 command_data bit (36) unaligned; /* shouldn't need more than one word */ 8 79 8 80 /* The structure below defines the format of a long submailbox used for an accept_input operation 8 81* when the data is too long to fit directly in the mailbox. command_data and n_chars occupy the same position as for input_in_mailbox, above. 8 82**/ 8 83 8 84 dcl 1 input_sub_mbx aligned based (subp), 8 85 2 pad1 bit (8) unaligned, 8 86 2 line_number unaligned like sub_mbx.line_number, 8 87 2 n_free_buffers fixed bin (17) unaligned, /* number of free blocks in FNP at present */ 8 88 8 89 2 n_chars fixed bin (17) unaligned, /* total number of data characters */ 8 90 2 op_code fixed bin (9) unsigned unaligned, 8 91 2 io_cmd fixed bin (9) unsigned unaligned, 8 92 8 93 2 n_buffers fixed bin, /* number of buffers in this input chain */ 8 94 2 dcw (24), /* "pseudo-DCWs" used to specify buffer addresses and tallies */ 8 95 3 abs_addr bit (24) unaligned, /* supplied by CS */ 8 96 3 tally fixed bin (12) unsigned unaligned, /* in characters, supplied by FNP */ 8 97 2 command_data bit (36) unaligned; /* as above */ 8 98 8 99 dcl subp pointer; 8 100 dcl mbxp pointer; 8 101 8 102 /* END dn355_mailbox.incl.pl1 */ 258 259 260 dcl connect_to_slave_nowait init (76) fixed bin (8) init static options (constant); 261 9 1 /* BEGIN mailbox_ops.incl.pl1 9 2* 9 3* Created 8/15/74 by F. A. Canali 9 4* Modified 12/01/75 by J. Goldman for dial out 9 5* Modified 8/24/76 by Robert Coren to add dont_accept_calls and blast 9 6* Modified 7/28/77 by J. Stern to add set_delay_table 9 7* Modified 2/6/78 by Robert Coren to add sync_msg_size 9 8* Modified 6/29/79 by B. Greenberg for FNP echo negotiation 9 9* Modified Oct. 1979 by Robert Coren to add oflow & iflow modes 9 10* Modified 1/21/80 by Robert Coren to add parity controls 9 11* Modified 12/10/80 by Robert Coren to add report_meters 9 12* */ 9 13 9 14 dcl ( /* declaration of submailbox io commands */ 9 15 9 16 rcd init (1), /* read control data */ 9 17 rtx init (2), /* read text */ 9 18 wcd init (3), /* write control data */ 9 19 wtx init (4) /* write text */ 9 20 9 21 ) fixed bin (8) int static options (constant); 9 22 9 23 9 24 dcl ( /* declaration of submailbox op codes sent by 6180 to 355 */ 9 25 9 26 terminal_accepted init (0), /* a dialed terminal has been accepted */ 9 27 disconnect_this_line init (1), /* hang up a line */ 9 28 disconnect_all_lines init (2), /* hang up all lines */ 9 29 dont_accept_calls init (3), /* the 6180 is no longer accepting terminals */ 9 30 accept_calls init (4), /* the 6180 is ready to accept terminals */ 9 31 input_accepted init (5), /* the 6180 will accept input and has reserved 9 32* space in its circular buffer */ 9 33 set_line_type init (6), /* set the line type */ 9 34 enter_receive init (7), /* give the line to the terminal */ 9 35 set_framing_chars init (8), /* set characters for block transfer */ 9 36 blast init (9), /* BOS blast message */ 9 37 accept_direct_output init (10), /* the 6180 has an output request */ 9 38 accept_last_output init (11), /* same as above but the 355 may 9 39* unlock the keyboard and accept input 9 40* when the output transmission is through */ 9 41 dial init (12), /* use command data to dial a phone number */ 9 42 reject_request_temp init (14), /* an input request can not be serviced */ 9 43 terminal_rejected init (16), /* a dial up has been rejected */ 9 44 disconnect_accepted init (17), /* the 6180 recognizes a disconnection */ 9 45 init_complete init (18), /* 6180 system initialization is complete */ 9 46 dump_mem init (19), /* dump 355 memory */ 9 47 patch_mem init (20), /* patch 355 memory */ 9 48 fnp_break init (21), /* to control fnp break points */ 9 49 line_control init (22), /* line control order to fnp */ 9 50 sync_msg_size init (23), /* set message size for sync line */ 9 51 set_echnego_break_table init (24), /* send over echo negotiation break table */ 9 52 start_negotiated_echo init (25), /* attempt to start FNP echoing for ech. nego. */ 9 53 stop_negotiated_echo init (26), /* 6180 wants FNP to stop negotiated echo */ 9 54 init_echo_negotiation init (27), /* synchronize echo negotiation ctrs. */ 9 55 break_acknowledged init (29), /* the 6180 recognizes a break for a terminal */ 9 56 input_fc_chars init (30), /* set input flow control chars */ 9 57 output_fc_chars init (31), /* set output flow control chars */ 9 58 alter_parameters init (34), /* request to alter 355 parms for a terminal */ 9 59 checksum_error init (35), /* submailbox has a checksum error */ 9 60 report_meters init (36), /* get meters from FNP */ 9 61 set_delay_table init (37) /* tells 355 to set new delay table for channel */ 9 62 ) fixed bin (8) int static options (constant); 9 63 9 64 9 65 dcl ( /* submailbox op codes sent from 355 to 6180 */ 9 66 9 67 accept_new_terminal init (64), /* a terminal has dialed up */ 9 68 disconnected_line init (65), /* a terminal has been hung up */ 9 69 input_in_mailbox init (66), /* this mailbox contains input */ 9 70 line_masked init (67), /* channel was masked for excessive interrupts */ 9 71 s6180_params init (68), /* return bcount */ 9 72 send_output init (69), /* I am ready to send to a terminal */ 9 73 ack_echnego_init init (70), /* I have zeroed my ech. nego. ctr. */ 9 74 ack_echnego_stop init (71), /* I have sent all that I have echoed. */ 9 75 connect_to_slave init (73), /* a dialup sequence has been completed */ 9 76 accept_direct_input init (74), /* HEY! here's some input for you */ 9 77 break_condition init (75), /* a break has been hit for a terminl */ 9 78 wru_timeout init (76), /* no answerback */ 9 79 error_message init (77), /* error message from the 355 */ 9 80 first_acu_op_code init (80), 9 81 acu_no_power init (80), /* power indicator of auto-call unit is off */ 9 82 acu_line_occupied init (81), /* auto-call unit's line is being used */ 9 83 acu_dial_failure init (82), /* dial out failed */ 9 84 acu_no_good init (83), /* invalid dial out attempt */ 9 85 last_acu_op_code init (83), 9 86 line_status init (84) /* line status reported by fnp */ 9 87 ) fixed bin (8) int static options (constant); 9 88 9 89 dcl ( /* declaration of sub operations for alter parameters */ 9 90 9 91 Breakchar init (1), /* specifies break character */ 9 92 Nocontrol init (2), /* enter/leave nocontrol mode */ 9 93 Fullduplex init (3), /* perform character echoing */ 9 94 Break init (4), /* send line break to terminal */ 9 95 Errormsg init (5), /* indicates error detected by 355 */ 9 96 Meter init (6), /* read metering info */ 9 97 Sensepos init (7), /* sense position of carrier */ 9 98 Crecho init (8), /* enter/leave crecho mode */ 9 99 Lfecho init (9), /* enter/leave line feed echo mode */ 9 100 Lock init (10), /* lock keyboard */ 9 101 Msg init (11), /* precanned msg for dialing terminals */ 9 102 Upstate init (12), /* are you up? */ 9 103 Dumpoutput init (13), /* throw away output */ 9 104 Tabecho init (14), /* echo tabs */ 9 105 Setbusy init (15), /* force dataset busy */ 9 106 Listen init (16), /* answer the phone */ 9 107 Hndlquit init (17), /* send newline on receipt of quit */ 9 108 Chngstring init (18), /* printer addressing string definition */ 9 109 Wru init (19), /* read answerback */ 9 110 Echoplex init (20), /* enter/leave echoplex mode */ 9 111 Xmit_hold init (21), /* start/stop transmit hold */ 9 112 Dumpinput init (22), /* throw away input */ 9 113 Replay init (23), /* replay interrupted input */ 9 114 Polite init (24), /* write only if at left margin */ 9 115 Block_xfer init (25), /* block transfer or "frame" mode */ 9 116 Set_buffer_size init (26), /* set input buffer size */ 9 117 Breakall init (27), /* break on all characters */ 9 118 Prefixnl init (28), /* prefix output with newlines if input present */ 9 119 Input_flow_control init (29), /* iflow mode */ 9 120 Output_flow_control init (30), /* oflow mode */ 9 121 Odd_parity init (31), /* generate odd parity */ 9 122 Eight_bit_in init (32), /* 8bit mode */ 9 123 Eight_bit_out init (33) /* no_outp mode */ 9 124 ) fixed bin (8) int static options (constant); 9 125 9 126 dcl global_opcodes (9) fixed bin (8) int static options (constant) init ( 9 127 2, /* disconnect_all_lines */ 9 128 3, /* dont_accept_calls */ 9 129 4, /* accept_calls */ 9 130 9, /* blast */ 9 131 19, /* dump_mem */ 9 132 20, /* patch_mem */ 9 133 21, /* fnp_break */ 9 134 36, /* report_meters */ 9 135 77); /* error_message */ 9 136 9 137 /* END of mailbox_ops.incl.pl1 */ 262 263 10 1 /* BEGIN INCLUDE FILE ... mcs_interrupt_info.incl.pl1 */ 10 2 10 3 /* Defines constants and structures used by MCS interrupt handlers */ 10 4 10 5 /* Created 08/21/78 by Robert Coren */ 10 6 /* Echo negotiation types added sometime by Bernie Greenberg */ 10 7 /* TIMER and USER_INTERRUPT added in spring of 1982 by Olin Sibert */ 10 8 /* MASKED type added June 23, 1982, by Robert Coren */ 10 9 10 10 dcl DIALUP fixed bin int static options (constant) init (1); 10 11 dcl HANGUP fixed bin int static options (constant) init (2); 10 12 dcl CRASH fixed bin int static options (constant) init (3); 10 13 dcl SEND_OUTPUT fixed bin int static options (constant) init (4); 10 14 dcl INPUT_AVAILABLE fixed bin int static options (constant) init (5); 10 15 dcl ACCEPT_INPUT fixed bin int static options (constant) init (6); 10 16 dcl INPUT_REJECTED fixed bin int static options (constant) init (7); 10 17 dcl QUIT fixed bin int static options (constant) init (8); 10 18 dcl LINE_STATUS fixed bin int static options (constant) init (9); 10 19 dcl DIAL_STATUS fixed bin int static options (constant) init (10); 10 20 dcl WRU_TIMEOUT fixed bin int static options (constant) init (11); 10 21 dcl SPACE_AVAILABLE fixed bin int static options (constant) init (12); 10 22 dcl ACKNOWLEDGE_ECHNEGO_INIT fixed bin int static options (constant) init (13); 10 23 dcl ACKNOWLEDGE_ECHNEGO_STOP fixed bin int static options (constant) init (14); 10 24 dcl TIMER fixed bin int static options (constant) init (15); 10 25 dcl USER_INTERRUPT fixed bin int static options (constant) init (16); 10 26 dcl MASKED fixed bin int static options (constant) init (17); 10 27 10 28 dcl interrupt_info bit (72) aligned; 10 29 10 30 dcl 1 dialup_info aligned, /* for use with DIALUP interrupt */ 10 31 2 line_type fixed bin (9) unal uns, 10 32 2 buffer_pad fixed bin (9) unal uns, /* free space multiplexer would like in output bufs */ 10 33 2 baud_rate fixed bin (18) unal uns, 10 34 2 max_buf_size fixed bin (9) unal uns, 10 35 2 receive_mode_device bit (1) unal, /* device must be told to enter receive mode */ 10 36 2 pad bit (26) unal; 10 37 10 38 dcl 1 rtx_info aligned, /* for use with ACCEPT_INPUT interrupt */ 10 39 2 input_chain unaligned, 10 40 3 chain_head bit (18) unaligned, 10 41 3 chain_tail bit (18) unaligned, 10 42 2 input_count fixed bin (18) unal uns, 10 43 2 flags unaligned, 10 44 3 break_char bit (1), /* data contains a break character */ 10 45 3 output_in_fnp bit (1), /* there is output in the FNP */ 10 46 3 output_in_ring_0 bit (1), /* there is output in ring 0 */ 10 47 3 formfeed_present bit (1), /* input contains a formfeed character */ 10 48 3 pad bit (14); 10 49 10 50 dcl 1 timer_info aligned, /* Info supplied with TIMER interrupt */ 10 51 2 id bit (36) aligned, /* ID which was supplied in call to mcs_timer$set */ 10 52 2 subchan_idx fixed bin; /* Index of subchannel on whose behalf timer was set */ 10 53 10 54 /* END INCLUDE FILE ... mcs_interrupt_info.incl.pl1 */ 264 265 11 1 /* BEGIN INCLUDE FILE ... dn355_messages.incl.pl1 */ 11 2 11 3 /* created 1/31/75 by Robert S. Coren 11 4* * modified 5/19/76 by Robert S. Coren to add bootload messages 11 5* * Modified 1979 June 8 by Art Beattie to add messages to config_messages. 11 6* */ 11 7 11 8 /* This include file describes the data segment used in interpreting 11 9* * the info returned with an emergency interrupt from the 355, 11 10* * as well as error message mailboxes and bootload interrupts 11 11* */ 11 12 11 13 dcl dn355_messages$fault_names (0:10) char(16) aligned external; /* names associated with 355 fault codes */ 11 14 11 15 dcl dn355_messages$per_module fixed bin external; /* names and messages associated with 355 modules */ 11 16 11 17 dcl dn355_messages$error_messages (10) fixed bin ext; /* error_messages sent from the 355 */ 11 18 11 19 dcl dn355_messages$boot_messages (0:4) fixed bin external; /* messages describing major bootload status */ 11 20 11 21 dcl dn355_messages$config_messages (0:15) fixed bin external; /* messages describing configuration errors */ 11 22 11 23 dcl modulep ptr; 11 24 dcl reasonp ptr; 11 25 11 26 11 27 /* list of module names and message list offsets */ 11 28 11 29 dcl 1 dn355_modules (9) based (modulep) aligned, 11 30 2 name char(12), 11 31 2 list_offset fixed bin; 11 32 11 33 /* list of message offsets */ 11 34 11 35 dcl message_offset (22) fixed bin based; 11 36 11 37 11 38 /* crash messages for each module */ 11 39 11 40 dcl 1 dn355_reason aligned based (reasonp), 11 41 2 length fixed bin (8) unal, 11 42 2 msg char(0 refer (dn355_reason.length)) unal; 11 43 11 44 11 45 /* END INCLUDE FILE ... dn355_messages.incl.pl1 */ 266 267 12 1 /* BEGIN INCLUDE FILE...fnp_queue_entry.incl.pl1 */ 12 2 12 3 12 4 12 5 /****^ HISTORY COMMENTS: 12 6* 1) change(86-04-23,Coren), approve(86-04-23,MCR7300), 12 7* audit(86-05-19,Beattie), install(86-07-08,MR12.0-1089): 12 8* To increase the size of cmd_data to allow for 8-word echo-break tables. 12 9* END HISTORY COMMENTS */ 12 10 12 11 12 12 /* This include file defines the delay queue entries used by dn355 when an outbound 12 13* mailbox is unavailable */ 12 14 12 15 /* Extracted from dn355.pl1 by Robert Coren, September 1984 */ 12 16 12 17 dcl fnp_qptr pointer; 12 18 12 19 dcl 1 fnp_queue_entry based (fnp_qptr) aligned, /* definition of delay queue entry */ 12 20 2 opcode fixed bin (8) unal, /* opcode */ 12 21 2 cmd_count fixed bin (8) unal, /* count of valid command data */ 12 22 2 pcb_offset bit (18) unal, /* PCB of channel */ 12 23 2 cmd_data bit (8 * 36) unal, /* 8 words of command data */ 12 24 2 next fixed bin; /* offset of next queue entry */ 12 25 12 26 /* END INCLUDE FILE...fnp_queue_entry.incl.pl1 */ 268 13 1 /* BEGIN INCLUDE FILE ... channel_manager_dcls.incl.pl1 */ 13 2 13 3 /* Created 8/25/78 by J. Stern */ 13 4 13 5 13 6 /* call channel_manager$read (devx, chain_ptr, more_input_flag, code) */ 13 7 dcl channel_manager$read entry (fixed bin, ptr, bit (1) aligned, fixed bin (35)); 13 8 13 9 /* call channel_manager$write (devx, output_ptr, code) */ 13 10 dcl channel_manager$write entry (fixed bin, ptr, fixed bin (35)); 13 11 13 12 /* call channel_manager$control (devx, control_type, info_ptr, code) */ 13 13 dcl channel_manager$control entry (fixed bin, char (*), ptr, fixed bin (35)); 13 14 13 15 /* call channel_manager$set_modes (devx, mode_change_list_ptr, code) */ 13 16 dcl channel_manager$set_modes entry (fixed bin, ptr, fixed bin (35)); 13 17 13 18 /* call channel_manager$check_modes (devx, mode_change_list_ptr, code) */ 13 19 dcl channel_manager$check_modes entry (fixed bin, ptr, fixed bin (35)); 13 20 13 21 /* call channel_manager$get_modes (devx, modes, code) */ 13 22 dcl channel_manager$get_modes entry (fixed bin, char (*), fixed bin (35)); 13 23 13 24 /* call channel_manager$interrupt (devx, int_type, int_data) */ 13 25 dcl channel_manager$interrupt entry (fixed bin, fixed bin, bit (72) aligned); 13 26 13 27 /* call channel_manager$interrupt_later (devx, int_type, int_data) */ 13 28 dcl channel_manager$interrupt_later entry (fixed bin, fixed bin, bit (72) aligned); 13 29 13 30 /* call channel_manager$queued_interrupt (devx, int_type, int_data) */ 13 31 dcl channel_manager$queued_interrupt entry (fixed bin, fixed bin, bit (72) aligned); 13 32 13 33 13 34 /* END INCLUDE FILE ... channel_manager_dcls.incl.pl1 */ 269 14 1 /* BEGIN INCLUDE FILE ... tty_space_man_dcls.incl.pl1 */ 14 2 14 3 /* This include file declares all the entries in tty_space_man and defines the constants 14 4** to be used for the flags argument 14 5** Modified 08/21/78 by Robert Coren to eliminate "masked" flag 14 6** Modified March 1981 by Robert Coren to add get_perm_space entry 14 7** Modified April 1981 by Robert Coren to add switch_chain entry 14 8**/ 14 9 14 10 dcl tty_space_man$get_space entry (fixed bin, ptr); 14 11 dcl tty_space_man$get_perm_space entry (fixed bin, ptr); 14 12 dcl tty_space_man$free_space entry (fixed bin, ptr); 14 13 dcl tty_space_man$get_buffer entry (fixed bin, fixed bin, bit (1), ptr); 14 14 dcl tty_space_man$free_buffer entry (fixed bin, bit (1), ptr); 14 15 dcl tty_space_man$get_chain entry (fixed bin, fixed bin, fixed bin, bit (1), ptr); 14 16 dcl tty_space_man$free_chain entry (fixed bin, bit (1), ptr); 14 17 dcl tty_space_man$switch_chain entry (fixed bin, fixed bin, bit (1), bit (1), ptr); 14 18 dcl tty_space_man$needs_space entry (fixed bin); 14 19 14 20 dcl INPUT bit (1) int static options (constant) init ("0"b); 14 21 dcl OUTPUT bit (1) int static options (constant) init ("1"b); 14 22 14 23 /* END INCLUDE FILE ... tty_space_man_dcls.incl.pl1 */ 270 271 15 1 /* BEGIN INCLUDE FILE ... line_types.incl.pl1 */ 15 2 15 3 /* Written November 10 1975 by Paul Green */ 15 4 /* Modified October 1978 by Larry Johnson to include line_type_names */ 15 5 /* Modified 12/19/78 by J. Stern to add POLLED_VIP line type */ 15 6 /* Modified 9/27/79 by J. Stern to add X25LAP line type */ 15 7 /* Modified Spring 1981 by Charles Hornig to add HDLC line type */ 15 8 /* Modified May 1981 by Robert Coren to add COLTS line type */ 15 9 /* Modified September 1984 by Robert Coren to correctly count VIP as a synchronous line type */ 15 10 15 11 15 12 /****^ HISTORY COMMENTS: 15 13* 1) change(86-02-25,Negaret), approve(87-07-13,MCR7679), 15 14* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 15 15* Add a DSA line type. 15 16* 2) change(87-03-17,Beattie), approve(87-07-13,MCR7656), 15 17* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 15 18* Add HASP_OPR to identify HASP workstation consoles with login service. 15 19* END HISTORY COMMENTS */ 15 20 15 21 15 22 declare (LINE_MC initial (-2), 15 23 LINE_TELNET initial (-1), 15 24 LINE_UNKNOWN initial (0), 15 25 LINE_ASCII initial (1), 15 26 LINE_1050 initial (2), 15 27 LINE_2741 initial (3), 15 28 LINE_ARDS initial (4), 15 29 LINE_SYNCH initial (5), 15 30 LINE_G115 initial (6), 15 31 LINE_BSC initial (7), 15 32 LINE_ETX initial (8), 15 33 LINE_VIP initial (9), 15 34 LINE_ASYNC1 initial (10), 15 35 LINE_ASYNC2 initial (11), 15 36 LINE_ASYNC3 initial (12), 15 37 LINE_SYNC1 initial (13), 15 38 LINE_SYNC2 initial (14), 15 39 LINE_SYNC3 initial (15), 15 40 LINE_POLLED_VIP initial (16), 15 41 LINE_X25LAP initial (17), 15 42 LINE_HDLC initial (18), 15 43 LINE_COLTS initial (19), 15 44 LINE_DSA initial (20), 15 45 LINE_HASP_OPR initial (21) 15 46 ) fixed bin internal static options (constant); 15 47 15 48 dcl max_line_type fixed bin int static options (constant) init (21); 15 49 15 50 declare n_sync_line_types fixed bin int static options (constant) init (10); 15 51 15 52 declare sync_line_type (10) fixed bin int static options (constant) init (5, 6, 7, 9, 13, 14, 15, 16, 17, 18); 15 53 15 54 dcl line_types (-2:21) char (16) int static options (constant) init ( 15 55 "MC", /* -2 */ 15 56 "TELNET", /* -1 */ 15 57 "none", /* 0 */ 15 58 "ASCII", /* 1 */ 15 59 "1050", /* 2 */ 15 60 "2741", /* 3 */ 15 61 "ARDS", /* 4 */ 15 62 "Sync", /* 5 */ 15 63 "G115", /* 6 */ 15 64 "BSC", /* 7 */ 15 65 "202ETX", /* 8 */ 15 66 "VIP", /* 9 */ 15 67 "ASYNC1", /* 10 */ 15 68 "ASYNC2", /* 11 */ 15 69 "ASYNC3", /* 12 */ 15 70 "SYNC1", /* 13 */ 15 71 "SYNC2", /* 14 */ 15 72 "SYNC3", /* 15 */ 15 73 "POLLED_VIP", /* 16 */ 15 74 "X25LAP", /* 17 */ 15 75 "HDLC", /* 18 */ 15 76 "COLTS", /* 19 */ 15 77 "DSA", /* 20 */ 15 78 "HASP_OPR"); /* 21 */ 15 79 15 80 /* END INCLUDE FILE ... line_types.incl.pl1 */ 272 16 1 /* BEGIN INCLUDE FILE ... baud_rates.incl.pl1 */ 16 2 16 3 /* Defines valid baud rate values for communications channels */ 16 4 16 5 /* Created by somebody a long time ago */ 16 6 /* Modified April 1982 by Robert Coren to add speeds above 9600 (up to 72000) */ 16 7 16 8 dcl baud_table (15) fixed bin int static options (constant) init 16 9 (110, 133, 150, 300, 600, 1200, 1800, 2400, 4800, 7200, 16 10 9600, 19200, 40800, 50000, 72000); 16 11 16 12 /* END INCLUDE FILE ... baud_rates.incl.pl1 */ 273 274 17 1 /* BEGIN INCLUDE FILE ... net_event_message.incl.pl1 */ 17 2 17 3 /****^ HISTORY COMMENTS: 17 4* 1) change(86-07-30,Kissel), approve(86-07-30,MCR7475), audit(86-08-04,Coren), 17 5* install(86-10-09,MR12.0-1181): 17 6* This include file was formerly tty_event_message.incl.pl1. It has been 17 7* updated with different fields and new constants, and renamed to 17 8* net_event_message.incl.pl1 17 9* 2) change(87-04-20,GDixon), approve(87-07-13,MCR7694), 17 10* audit(87-06-24,Hartogs), install(87-08-04,MR12.1-1056): 17 11* Add NETWORK_TYPE_VALUES array. 17 12* END HISTORY COMMENTS */ 17 13 17 14 /* describes event message passed with wakeups from the tty DIM */ 17 15 /* Created 5/24/76 by Robert S. Coren */ 17 16 17 17 /* format: style3,linecom,ifthenstmt,indthenelse,^indnoniterdo,indnoniterend,initcol3,dclind5,idind32 */ 17 18 17 19 dcl net_event_message_arg fixed bin (71); /* For calling IPC */ 17 20 dcl NET_EVENT_MESSAGE_VERSION_1 bit (2) internal static options (constant) init ("10"b); 17 21 17 22 dcl 1 net_event_message aligned based (addr (net_event_message_arg)), 17 23 2 version bit (2) unaligned, /* Currently version 1 */ 17 24 2 reason bit (16) unaligned, /* Additional info about the event */ 17 25 2 pad bit (6) unaligned, /* Must be zero */ 17 26 2 network_type fixed bin (4) unsigned unaligned, 17 27 /* See below for constants */ 17 28 2 type fixed bin (8) unsigned unaligned, 17 29 /* Type of interrupt, see below */ 17 30 2 handle fixed bin (35) aligned;/* Caller's handle (devx for MCS, handle for DSA) */ 17 31 17 32 /* Network type constants */ 17 33 17 34 dcl MCS_NETWORK_TYPE fixed bin (4) unsigned internal static options (constant) init (0); 17 35 dcl DSA_NETWORK_TYPE fixed bin (4) unsigned internal static options (constant) init (1); 17 36 dcl MOWSE_NETWORK_TYPE fixed bin (4) unsigned internal static options (constant) init (2); 17 37 17 38 dcl NETWORK_TYPE_VALUES (0:2) char(8) varying int static options(constant) init( 17 39 "MCS", 17 40 "DSA", 17 41 "MOWSE"); 17 42 17 43 17 44 /* MCS event message type constants */ 17 45 17 46 dcl MAX_MCS_EVENT_MSG_TYPE fixed bin internal static options (constant) init (8); 17 47 17 48 dcl MCS_UNSPECIFIED_MSG fixed bin internal static options (constant) init (0); 17 49 /* used for "start" order, etc. */ 17 50 dcl MCS_DIALUP_MSG fixed bin internal static options (constant) init (1); 17 51 /* dialup */ 17 52 dcl MCS_HANGUP_MSG fixed bin internal static options (constant) init (2); 17 53 /* hangup */ 17 54 dcl MCS_DIALOUT_MSG fixed bin internal static options (constant) init (3); 17 55 /* dialout status returned */ 17 56 dcl MCS_QUIT_MSG fixed bin internal static options (constant) init (4); 17 57 /* quit */ 17 58 dcl MCS_READ_MSG fixed bin internal static options (constant) init (5); 17 59 /* input arrived */ 17 60 dcl MCS_WRITE_MSG fixed bin internal static options (constant) init (6); 17 61 /* output completed */ 17 62 dcl MCS_LINE_STATUS_MSG fixed bin internal static options (constant) init (7); 17 63 /* control tables sent status */ 17 64 dcl MCS_MASKED_MSG fixed bin internal static options (constant) init (8); 17 65 /* channel masked by FNP */ 17 66 17 67 dcl MCS_MSG_TYPE_TO_PNAME (0:8) char (20) internal static options (constant) init ("unspecified", 17 68 /* 0 */ 17 69 "dialup", /* 1 */ 17 70 "hangup", /* 2 */ 17 71 "dialout status", /* 3 */ 17 72 "quit", /* 4 */ 17 73 "read", /* 5 */ 17 74 "write", /* 6 */ 17 75 "line status", /* 7 */ 17 76 "masked"); /* 8 */ 17 77 17 78 /* DSA event message type constants */ 17 79 17 80 dcl MAX_DSA_EVENT_MSG_TYPE fixed bin internal static options (constant) init (19); 17 81 17 82 dcl DSA_UNSPECIFIED_MSG fixed bin (8) uns internal static options (constant) init (0); 17 83 dcl DSA_ATTENTION_MSG fixed bin (8) uns internal static options (constant) init (1); 17 84 dcl DSA_DATA_ATTENTION_MSG fixed bin (8) uns internal static options (constant) init (2); 17 85 dcl DSA_DEMAND_RELEASE_SRU_MSG fixed bin (8) uns internal static options (constant) init (3); 17 86 dcl DSA_DEMAND_TURN_MSG fixed bin (8) uns internal static options (constant) init (4); 17 87 dcl DSA_DEMAND_TURN_ACK_MSG fixed bin (8) uns internal static options (constant) init (5); 17 88 dcl DSA_PURGE_MSG fixed bin (8) uns internal static options (constant) init (6); 17 89 dcl DSA_RECOVER_MSG fixed bin (8) uns internal static options (constant) init (7); 17 90 dcl DSA_RECOVER_ACK_MSG fixed bin (8) uns internal static options (constant) init (8); 17 91 dcl DSA_RELEASE_SRU_MSG fixed bin (8) uns internal static options (constant) init (9); 17 92 dcl DSA_RESUME_MSG fixed bin (8) uns internal static options (constant) init (10); 17 93 dcl DSA_RESUME_ACK_MSG fixed bin (8) uns internal static options (constant) init (11); 17 94 dcl DSA_SUSPEND_MSG fixed bin (8) uns internal static options (constant) init (12); 17 95 dcl DSA_SUSPEND_ACK_MSG fixed bin (8) uns internal static options (constant) init (13); 17 96 dcl DSA_TERM_ABNORMAL_MSG fixed bin (8) uns internal static options (constant) init (14); 17 97 dcl DSA_ESTABLISHMENT_MSG fixed bin (8) uns internal static options (constant) init (15); 17 98 dcl DSA_TERMINATED_MSG fixed bin (8) uns internal static options (constant) init (16); 17 99 dcl DSA_USER_UNASSIGN_MSG fixed bin (8) uns internal static options (constant) init (17); 17 100 dcl DSA_DATA_INPUT_MSG fixed bin (8) uns internal static options (constant) init (18); 17 101 dcl DSA_DATA_OUTPUT_MSG fixed bin (8) uns internal static options (constant) init (19); 17 102 17 103 dcl DSA_MSG_TYPE_TO_PNAME (0:19) char (20) internal static options (constant) init ("unspecified", 17 104 /* 0 */ 17 105 "attention", /* 1 */ 17 106 "data_attention", /* 2 */ 17 107 "demand_release_sru", /* 3 */ 17 108 "demand_turn", /* 4 */ 17 109 "demand_turn_ack", /* 5 */ 17 110 "purge", /* 6 */ 17 111 "recover", /* 7 */ 17 112 "recover_ack", /* 8 */ 17 113 "release_sru", /* 9 */ 17 114 "resume", /* 10 */ 17 115 "resume_ack", /* 11 */ 17 116 "suspend", /* 12 */ 17 117 "suspend_ack", /* 13 */ 17 118 "terminate_abnormal", /* 14 */ 17 119 "establishment", /* 15 */ 17 120 "terminated", /* 16 */ 17 121 "user_unassign", /* 17 */ 17 122 "data input", /* 18 */ 17 123 "data output"); /* 19 */ 17 124 17 125 /* END INCLUDE FILE ... net_event_message.incl.pl1 */ 275 276 18 1 /* Begin include file fnp_mpx_msg_.incl.pl1 BIM 83-12-20 */ 18 2 /* Message from ring 0 fnp mpx to user ring mpx manager */ 18 3 /* format: style3 */ 18 4 18 5 dcl fnp_msg_ptr pointer; 18 6 dcl 1 fnp_msg aligned based (fnp_msg_ptr), 18 7 2 fnp_no fixed bin (17) unal, 18 8 2 state fixed bin (17) unal, 18 9 2 flags unaligned, 18 10 3 deconfigured bit, 18 11 3 pad bit (35); 18 12 18 13 /* End include file fnp_mpx_msg_.incl.pl1 */ 277 19 1 /* Begin include file io_manager_dcls.incl.pl1 */ 19 2 19 3 /* Written by Charles Hornig, late 1980 and early 1981 */ 19 4 /* Modified for MR10 interface, February 1982 */ 19 5 /* Channel reconfiguration entries added by Chris Jones, January 1984 */ 19 6 19 7 /* These entries are callable on unwired stacks. */ 19 8 19 9 /* call io_manager$assign (Chx, Channel, Handler, Index, Statusp, Code); */ 19 10 dcl io_manager$assign 19 11 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 19 12 fixed bin (35), ptr, fixed bin (35)); 19 13 19 14 /* call io_manager$assign_add (Chx, Channel, Handler, Index, Statusp, Code); */ 19 15 dcl io_manager$assign_add 19 16 entry (fixed bin (35), char (8) aligned, entry (fixed bin (35), fixed bin (3), bit (36) aligned), 19 17 fixed bin (35), ptr, fixed bin (35)); 19 18 19 19 /* call io_manager$unassign (Chx, Code); */ 19 20 dcl io_manager$unassign entry (fixed bin (35), fixed bin (35)); 19 21 19 22 /* call io_manager$unassign_delete (Chx, Code); */ 19 23 dcl io_manager$unassign_delete entry (fixed bin (35), fixed bin (35)); 19 24 19 25 /* call io_manager$connect (Io_manager_arg); */ 19 26 dcl io_manager$connect entry (1 aligned like io_manager_arg); 19 27 19 28 /* call io_manager$connect_abs (Io_manager_arg); */ 19 29 dcl io_manager$connect_abs entry (1 aligned like io_manager_arg); 19 30 19 31 /* call io_manager$connect_direct (Io_manager_arg); */ 19 32 dcl io_manager$connect_direct entry (1 aligned like io_manager_arg); 19 33 19 34 /* call io_manager$get_status (Chx, Io_status_entry_ptr); */ 19 35 dcl io_manager$get_status entry (fixed bin (35), ptr); 19 36 19 37 /* call io_manager$mask (Chx); */ 19 38 dcl io_manager$mask entry (fixed bin (35)); 19 39 19 40 /* call io_manager$ignore_interrupt (); */ 19 41 dcl io_manager$ignore_interrupt entry (fixed bin (35), fixed bin (3), bit (36) aligned); 19 42 19 43 /* call io_manager$data_tdcw (Io_manager_arg); 19 44* dcl io_manager$data_tdcw entry (1 aligned like io_manager_arg); 19 45* 19 46* /* call io_manager$workspace_tdcw (Io_manager_arg); */ 19 47 dcl io_manager$workspace_tdcw entry (1 aligned like io_manager_arg); 19 48 19 49 dcl io_manager_arg_ptr ptr; 19 50 dcl 1 io_manager_arg aligned based (io_manager_arg_ptr), 19 51 2 chx fixed bin (35), /* channel index from io_manager$assign */ 19 52 2 bound fixed bin (19), /* workspace size */ 19 53 2 pcw bit (36) aligned, /* or IDCW */ 19 54 2 listx fixed bin (18), /* DCW list offset */ 19 55 2 ptp ptr, /* page table pointer */ 19 56 2 listp ptr, /* DCW list pointer */ 19 57 2 dcw_pair_ptr ptr; /* DCW pair pointer */ 19 58 19 59 /* End include file io_manager_dcls.incl.pl1 */ 278 279 280 interrupt: 281 entry (x_dno, x_level, x_status); /* entry from iom_manager */ 282 283 dcl x_dno fixed bin (35); /* index from assignment time */ 284 dcl x_level fixed bin (3); /* interrupt level */ 285 dcl x_status bit (36) aligned; /* status after special or fault */ 286 287 if tc_data$system_shutdown ^= 0 288 then return; /* ignore 355's if shut down in progress */ 289 interrupt_entry = "1"b; 290 291 call setup; 292 level = x_level; /* copy level to local stack */ 293 if datanet_info.trace 294 then do; 295 if level ^= INT_LEVEL_3 | ^fnp_info.running 296 then syserr_severity = SYSERR_announce; 297 else syserr_severity = SYSERR_log; 298 call syserr (syserr_severity, 299 "uncp: FNP ^a level ^d status ^w^[ running^]^[ bootloading^]^[ t_and_d_in_progress^]", fnp_name, 300 level, x_status, fnp_info.running, fnp_info.bootloading, fnp_info.t_and_d_in_progress); 301 end; 302 if level ^= INT_LEVEL_3 & level ^= INT_LEVEL_7 303 then do; /* if not a good interrupt level */ 304 call syserr (SYSERR_beep, "uncp: FNP ^a invalid interrupt level ^o", fnp_name, level); 305 if fnp_info.bootloading 306 then if level = INT_LEVEL_1 /* system fault */ 307 then call uncp_boot_interrupt$system_fault (dno); 308 return; /* lets hope its benign */ 309 end; 310 311 if (^fnp_info.t_and_d_in_progress) & (^fnp_info.running) & (^fnp_info.bootloading) 312 then return; /* spurious interrupt */ 313 314 if ^stac (addr (lcte.lock), pds$processid) /* somebody else has it */ 315 then do; 316 317 do while (^stac (addr (fnp_info.queue_lock), pds$processid)); 318 end; 319 320 if level = INT_LEVEL_7 321 then fnp_info.level_7_pending = "1"b; 322 else fnp_info.level_3_pending = "1"b; 323 324 if stac (addr (lcte.lock), pds$processid) /* in case it got unlocked meanwhile */ 325 then call process_int_queue ("0"b); 326 327 else if ^stacq (fnp_info.queue_lock, "0"b, pds$processid) 328 then call syserr (SYSERR_crash, "uncp: inconsistent queue lock"); 329 end; 330 331 else do; 332 call process_int (level); 333 334 do while (^stac (addr (fnp_info.queue_lock), pds$processid)); 335 end; /* check the queue to see if anything came in while we had the lock */ 336 337 call process_int_queue ("0"b); 338 end; 339 340 return; 341 342 global_exit: /* if abort out of an internal proc */ 343 if interrupt_entry 344 then do; 345 if stacq (lcte.lock, "0"b, pds$processid) /* make sure we undo anything we did */ 346 then if lcte.notify_reqd 347 then do; 348 lcte.notify_reqd = "0"b; 349 call pxss$notify (tty_ev); 350 end; 351 352 lcte.locked_for_interrupt = "0"b; 353 354 end; 355 return; 356 357 /* entry to send a command to the FNP */ 358 send_wcd: 359 entry (a_fnpp, a_pcbp, opa, chrsa, data); 360 361 dcl a_fnpp ptr, /* parameters */ 362 a_pcbp ptr, 363 opa fixed bin (8), 364 data bit (*), /* allow use of 6 words in sub_mbx */ 365 chrsa fixed bin (8); /* numeric */ 366 367 dcl tdata bit (8 * 36); 368 dcl data_len fixed bin (8); 369 370 pcbp = a_pcbp; 371 go to send_join; 372 373 send_global_wcd: 374 entry (a_fnpp, opa, chrsa, data); 375 376 pcbp = null (); 377 fnpp = a_fnpp; 378 if opa = dial 379 then do; 380 do ix = 1 to max_special_name while (special_name (ix) ^= substr (data, 1, 36)); 381 end; 382 if ix <= max_special_name 383 then fnp_info.active_bit (ix) = substr (data, 37, 1); 384 return; 385 end; 386 387 send_join: 388 interrupt_entry = "0"b; 389 fnpp = a_fnpp; 390 ttybp = addr (tty_buf$); /* get ptr to tty buf */ 391 infop = addr (dn355_data$); /* and dn 355 info */ 392 uncpbp = datanet_info.uncp_bufp; /* get ptr to uncp buf */ 393 lctep = fnp_info.lcte_ptr; 394 operation = opa; /* and copy op to local stack */ 395 if ^fnp_info.running & /* can't talk to it if it's not listening */ 396 (^fnp_info.bootloading | operation ^= init_complete) 397 then return; 398 399 no_response = "0"b; 400 dno = fnp_info.fnp_number; 401 mbxp = fnp_info.mbx_pt; /* get pointer to mailbox */ 402 data_len = min (length (tdata), chrsa); /* compute bit length of command data */ 403 if data_len > 0 404 then tdata = substr (data, 1, data_len); 405 else tdata = "0"b; 406 407 if pcbp ^= null 408 then if operation = disconnect_this_line 409 then if pcb.dialed = "0"b 410 then return; 411 412 if operation = accept_direct_output 413 then if pcb.dumpout 414 then do; 415 call throw_away_output; 416 pcb.dumpout = "0"b; 417 end; 418 419 if operation = enter_receive 420 then do; 421 if pcb.connection_type = "10"b 422 then return; 423 424 ix = pcb.baud_rate; 425 if ix ^= BAUD_9600 426 then do; 427 pcb.turn = "1"b; 428 call send_dial; 429 return; 430 end; 431 432 if pcb.write_last ^= 0 433 then do; 434 blockp = ptr (ttybp, pcb.write_last); 435 buffer.turn = "1"b; 436 return; 437 end; 438 else do; 439 pcb.enter_receive_pending = "1"b; 440 if pcb.end_frame | ^pcb.send_output 441 then return; 442 else operation = accept_direct_output; 443 end; 444 445 end; 446 447 call assign_sub_mbx (sub_mbx_no, subp); /* find a free sub mbx */ 448 if sub_mbx_no = -1 /* no submailbox */ 449 then do; 450 call make_q_entry (operation, data_len, tdata); 451 fnp_info.mbx_unavailable = fnp_info.mbx_unavailable + 1; 452 /* form q entry element from data */ 453 end; 454 455 else do; /* we have a sub mbx, ship it off to the 355 */ 456 if pcbp ^= null () 457 then do; 458 string (sub_mbx.line_number) = string (pcb.line_number); 459 /* move line number to sub mbx */ 460 devx = pcb.devx; 461 end; 462 463 else string (sub_mbx.line_number) = "0"b; /* unless no pcb (global call) */ 464 465 sub_mbx.op_code = operation; /* set sub mbx op */ 466 sub_mbx.cmd_data_len = divide (data_len, 6, 17, 0); 467 /* set data length */ 468 if operation = accept_direct_output /* if output op */ 469 then do; 470 if ^pcb.flags.dialed /* output without a dialup? */ 471 then call throw_away_output; /* discard it */ 472 473 else call process_send_output (sub_mbx_no, "0"b); 474 end; 475 476 else do; 477 sub_mbx.io_cmd = wcd; /* set write control data cmd */ 478 smbx_cmd_data_long = substr (tdata, 1, data_len); 479 /* move command data to sub mbx */ 480 call send_mbx (sub_mbx_no); /* ship the mbx off to the 355 */ 481 fnp_info.output_control_transactions = fnp_info.output_control_transactions + 1; 482 end; 483 484 if ^sub_mbx_sent 485 then call release_sub_mbx (sub_mbx_no); 486 487 if no_response 488 then call report_fnp_no_response; 489 end; 490 491 492 return; /* return to caller */ 493 494 process_interrupt_queue: 495 entry (x_dno); 496 497 interrupt_entry = "0"b; 498 call setup; 499 on cleanup call check_lock; 500 masked = "1"b; /* have to mask and wire while holding queue lock */ 501 call pmut$wire_and_mask (wire_arg, wire_ptr); 502 503 do while (^stac (addr (fnp_info.queue_lock), pds$processid)); 504 end; 505 queue_locked = "1"b; 506 507 call process_int_queue ("1"b); 508 return; 509 510 setup: 511 proc; 512 513 ttybp = addr (tty_buf$); /* get addr of tty buffer segment */ 514 dno = x_dno; /* copy 355 number to local stack */ 515 infop = addr (dn355_data$); /* get address 0f 355 info segment */ 516 uncpbp = datanet_info.uncp_bufp; /* initialise l adresse du segment uncp_buf */ 517 518 fnpp = addr (datanet_info.per_datanet (dno)); 519 fnp_name = fnp_info.fnp_tag; 520 mbxp = fnp_info.mbx_pt; /* get mailbox pointer */ 521 lctep = fnp_info.lcte_ptr; 522 n_pcbs = fnp_info.no_of_channels; /* set number of channel control blocks to number of channels */ 523 524 return; 525 end setup; 526 527 process_int_queue: 528 proc (caller_masked); 529 530 /* called with queue locked. Empties the queue, and must unlock it when done */ 531 532 dcl caller_masked bit (1); /* indicates whether caller explicitly called pmut$wire_and_mask */ 533 534 do while (dequeue (level)); 535 fnp_info.processed_from_q = fnp_info.processed_from_q + 1; 536 /* meter */ 537 if ^stacq (fnp_info.queue_lock, "0"b, pds$processid) 538 then call syserr (SYSERR_crash, "uncp: inconsistent queue lock"); 539 540 queue_locked = "0"b; 541 if caller_masked 542 then call pmut$unwire_unmask (wire_arg, wire_ptr); 543 masked = "0"b; 544 545 call process_int (level); 546 547 if caller_masked 548 then do; /* if we unmasked, we have to mask again */ 549 masked = "1"b; 550 call pmut$wire_and_mask (wire_arg, wire_ptr); 551 end; 552 553 do while (^stac (addr (fnp_info.queue_lock), pds$processid)); 554 end; 555 queue_locked = "1"b; 556 end; 557 558 lcte.locked_for_interrupt = "0"b; 559 if ^stacq (lcte.lock, "0"b, pds$processid) 560 then call syserr (SYSERR_crash, "uncp: LCTE lock ^^= processid"); 561 562 if ^stacq (fnp_info.queue_lock, "0"b, pds$processid) 563 then call syserr (SYSERR_crash, "uncp: inconsistent queue lock"); 564 565 queue_locked = "0"b; 566 if caller_masked 567 then call pmut$unwire_unmask (wire_arg, wire_ptr); 568 masked = "0"b; 569 570 if lcte.notify_reqd 571 then do; 572 lcte.notify_reqd = "0"b; 573 call pxss$notify (tty_ev); 574 end; 575 576 return; 577 578 dequeue: 579 proc (a_level) returns (bit (1)); 580 581 dcl a_level fixed bin; 582 583 if fnp_info.level_3_pending 584 then do; 585 fnp_info.level_3_pending = "0"b; 586 a_level = INT_LEVEL_3; 587 return ("1"b); 588 end; 589 590 else if fnp_info.level_7_pending 591 then do; 592 fnp_info.level_7_pending = "0"b; 593 a_level = INT_LEVEL_7; 594 return ("1"b); 595 end; 596 597 else return ("0"b); 598 599 end /* dequeue */; 600 end /* process_int_queue */; 601 602 process_int: 603 proc (a_level); 604 605 /* internal procedure to process an interrupt, either when it occurs or from the queue */ 606 607 dcl a_level fixed bin; 608 609 level = a_level; 610 611 lcte.locked_for_interrupt = "1"b; 612 if level = INT_LEVEL_7 613 then do; /* emergency interrupt */ 614 615 if fnp_info.t_and_d_in_progress 616 then do; 617 if fnp_info.t_and_d_lev_7_occurred 618 then return; 619 fnp_info.t_and_d_lev_7_occurred = "1"b; 620 t_and_d_join: 621 if fnp_info.t_and_d_notify_requested 622 then do; 623 call pxss$notify (tty_ev); 624 fnp_info.t_and_d_notify_requested = "0"b; 625 end; 626 unspec (auto_net_event_message) = "0"b; 627 auto_net_event_message.version = NET_EVENT_MESSAGE_VERSION_1; 628 auto_net_event_message.network_type = MCS_NETWORK_TYPE; 629 auto_net_event_message.handle = dno; 630 auto_net_event_message.type = level; 631 unspec (net_event_message_arg) = unspec (auto_net_event_message); 632 call pxss$unique_ring_0_wakeup (fnp_info.boot_process_id, fnp_info.boot_ev_chan, 633 net_event_message_arg, 0); 634 return; 635 end; 636 637 fault_name = "STOPPING DATANET"; 638 call syserr (SYSERR_beep, "uncp: emergency interrupt from FNP ^a: ^a", fnp_info.fnp_tag, fault_name); 639 timw = ldac (addr (datanet_mbx.term_inpt_mpx_wd)); 640 if fnp_info.running 641 then call purge_write_texte; 642 643 644 call report_fnp_crash; /* report it and hang up lines */ 645 return; /* done with this interrupt */ 646 end; 647 648 if unspec (datanet_mbx.mailbox_requests) = "777777000000"b3 649 then do; /* DSA requesting init */ 650 datanet_mbx.mailbox_requests = datanet_mbx.mailbox_requests + 1; 651 652 if trace.load 653 then call syserr (SYSERR_log, "uncp: request_init"); 654 655 timw = ldac (addr (datanet_mbx.term_inpt_mpx_wd)); 656 if fnp_info.running 657 then call purge_write_texte; 658 call uncp_boot_interrupt$request_init (dno); 659 fnp_info.uncp_pcbx1, fnp_info.uncp_pcbx2 = 0; 660 return; 661 end; 662 663 if fnp_info.bootloading /* if this is bootload status */ 664 then do; 665 timw = ldac (addr (datanet_mbx.term_inpt_mpx_wd)); 666 if timwb (0) 667 then do; /* 1st mailbox for WCD_init_complete */ 668 subp = addr (datanet_mbx.dn355_sub_mbxes (0)); 669 datanet_mbx.mbx_used_flags.used (0) = "0"b; 670 /* free the mailbox */ 671 datanet_mbx.num_in_use = datanet_mbx.num_in_use - 1; 672 if (sub_mbx.io_cmd = wcd) & (sub_mbx.op_code = init_complete) 673 then do; 674 675 if trace.load 676 then call syserr (SYSERR_log, "uncp: WCD init_complete acknowledgement"); 677 678 call uncp_boot_interrupt (dno); /* let special routine figure it out */ 679 fnp_info.uncp_pcbx1, fnp_info.uncp_pcbx2 = 0; 680 end; 681 end; 682 return; /* Don't analyze the mailbox */ 683 end; 684 685 686 687 688 if fnp_info.t_and_d_in_progress 689 then do; 690 if fnp_info.t_and_d_lev_3_occurred 691 then return; 692 fnp_info.t_and_d_lev_3_occurred = "1"b; 693 go to t_and_d_join; 694 end; 695 696 if ^fnp_info.running /* if this interrupt is premature, ignore it */ 697 then return; 698 699 700 no_response = "0"b; /* initially */ 701 702 703 704 705 if used_string ^= (7)"1"b 706 then call spend_submailboxes; /* if some free mailboxes */ 707 708 /* process any submailboxes which have been returned by the 355 */ 709 710 timw = ldac (addr (datanet_mbx.term_inpt_mpx_wd));/* get timw and clear */ 711 712 713 /* mailbox number 0 & number 15 are reserved to init and abort */ 714 715 do i = lbound (timwb, 1) to hbound (timwb, 1); /* loop over submailbox indicators */ 716 717 if timwb (i) & ^no_response 718 then do; /* if mailbox was returned by 355 then we have something to do */ 719 sub_mbx_no = i; 720 unspec (local_sub_mbx) = unspec (datanet_mbx.dn355_sub_mbxes (sub_mbx_no)); 721 subp = addr (local_sub_mbx); 722 if trace.mailbox 723 then call syserr (SYSERR_log, "uncp: mbx received # ^o ^2( ^/ ^4( ^w ^) ^)", sub_mbx_no, 724 sub_mbx_array); 725 datanet_mbx.mbx_used_flags.used (sub_mbx_no) = "0"b; 726 /* clear submailbox used flag */ 727 sub_mbx_no = -1; /* indicate use of local copy */ 728 729 datanet_mbx.num_in_use = datanet_mbx.num_in_use - 1; 730 fnp_info.cumulative_mbx_in_use = fnp_info.cumulative_mbx_in_use + datanet_mbx.num_in_use; 731 fnp_info.mbx_in_use_updated = fnp_info.mbx_in_use_updated + 1; 732 733 734 call get_line_number; 735 736 /* WRITE COMMAND DATA */ 737 738 if sub_mbx.io_cmd = wcd 739 then do; 740 if (devx ^= -1) & (sub_mbx.op_code = disconnect_this_line) 741 then do; 742 if pcb.dialed 743 then do; 744 call throw_away_output; 745 if pcb.connection_type ^= "01"b 746 then call channel_manager$interrupt (devx, HANGUP, ""b); 747 disconnect_other_line: 748 if (pcb.connection_type ^= "00"b) & (pcb.uncp_pcbx ^= 0) 749 then do; 750 other_pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (pcb.uncp_pcbx)); 751 if other_pcbp -> pcb.dialed 752 then do; 753 string (sub_mbx.line_number) = string (other_pcbp -> pcb.line_number); 754 call return_mbx (sub_mbx_no); 755 end; 756 end; 757 end; 758 pcb.dialed = "0"b; 759 pcb.baud_rate = 0; 760 end; 761 762 if (devx ^= -1) & (sub_mbx.op_code = disconnect_accepted) 763 then do; 764 sub_mbx.op_code = disconnect_this_line; 765 goto disconnect_other_line; 766 end; 767 768 769 end; /* just free submbx */ 770 771 else do; 772 773 /* WRITE TEXTE */ 774 775 if sub_mbx.io_cmd = wtx 776 then do; /* check for write text */ 777 pcb.output_mbx_pending = "0"b; 778 if pcb.connection_type = "10"b 779 then pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (pcb.uncp_pcbx)); 780 if sub_mbx.command_data (3) ^= "0"b 781 then do; 782 da = bin (sub_mbx.data_addr, 18) - tty_buf.absorig; 783 /* get offset in tty buf */ 784 blockp = ptr (ttybp, da);/* set ptr to buffer */ 785 gateway_header = sub_mbx.command_data (3); 786 787 788 call tty_space_man$free_chain ((pcb.devx), OUTPUT, blockp); 789 /* and the output chain */ 790 791 792 793 end; 794 end; 795 796 /* READ CONTROL DATA */ 797 798 else if sub_mbx.io_cmd = rcd 799 then do; /* check for control stuff */ 800 if (sub_mbx.op_code = accept_direct_input) | (sub_mbx.op_code = send_output) 801 then do; 802 803 804 fnp_info.bleft_355 = 0; /* make it safe */ 805 806 if fnp_info.free_size > MAX_FREE_BUFFERS 807 then do; 808 fnp_info.free_size = 0; 809 fnp_info.free_count = 0; 810 end; 811 812 fnp_info.free_size = fnp_info.free_size + fnp_info.bleft_355; 813 fnp_info.free_count = fnp_info.free_count + 1; 814 end; 815 if sub_mbx.op_code = accept_direct_input 816 then fnp_info.input_data_transactions = fnp_info.input_data_transactions + 1; 817 else fnp_info.input_control_transactions = fnp_info.input_control_transactions + 1; 818 819 820 821 /* ACCEPT NEW TERMINAL */ 822 823 if sub_mbx.op_code = accept_new_terminal 824 then do; /* check for new terminal on line */ 825 if devx = -1 826 then do; 827 sub_mbx.io_cmd = wcd; 828 sub_mbx.op_code = terminal_rejected; 829 sub_mbx.cmd_data_len = 0; 830 call return_mbx (sub_mbx_no); 831 end; 832 else do; 833 834 835 pcb.line_type = LINE_ASCII; 836 pcb.send_lf = "0"b; 837 838 839 840 pcb.baud_rate = BAUD_9600; 841 /* highest speed for UNCP */ 842 843 do j = 1 to n_sync_line_types while (sync_line_type (j) ^= pcb.line_type); 844 end; 845 pcb.sync_line = (j <= n_sync_line_types); 846 847 if ^pcb.sync_line /* asynchronous */ 848 then bits_per_char = BPC_10; 849 else bits_per_char = BPC_8; 850 /* assumption for synchronous lines */ 851 852 max_buf_chars = 853 divide (divide (pcb.baud_rate, bits_per_char, 17, 0), buf_per_second, 17, 0); 854 pcb.max_buf_size = min (16 * divide (max_buf_chars + 67, 64, 17, 0), 128); 855 /* round up to multiple of 16 words */ 856 if pcb.line_type = LINE_COLTS 857 then pcb.max_buf_size = MAX_CHANNEL_BUFFER; 858 /* COLTS channel always gets big buffers */ 859 pcb.dialed, pcb.enter_receive_pending, pcb.turn, pcb.dumpout, pcb.send_output = 860 "0"b; 861 pcb.connection_type = "00"b; 862 863 sub_mbx.op_code = terminal_accepted; 864 /* inform 355 that term is ok */ 865 sub_mbx.cmd_data_len = CMD_DATA_LEN_3; 866 /* we will put write buffer threshold in command data */ 867 if ^pcb.high_speed /* less than 1200 baud */ 868 then addr (sub_mbx.command_data) -> unal_number = 2; 869 /* set low write buffer threshold */ 870 else addr (sub_mbx.command_data) -> unal_number = 4; 871 /* set high write buffer threshold */ 872 sub_mbx.io_cmd = wcd; 873 call return_mbx (sub_mbx_no); 874 end; 875 end; 876 877 /* DISCONNECTED LINE */ 878 879 else if sub_mbx.op_code = disconnected_line 880 then do; /* see if line just hung up */ 881 if pcb.dialed 882 then do; 883 call throw_away_output; 884 if pcb.connection_type ^= "01"b 885 then call channel_manager$interrupt (devx, HANGUP, ""b); 886 end; 887 pcb.dialed = "0"b; 888 sub_mbx.io_cmd = wcd; 889 sub_mbx.op_code = disconnect_accepted; 890 call return_mbx (sub_mbx_no); 891 end; 892 893 /* BREAK CONDITION */ 894 895 else if sub_mbx.op_code = break_condition 896 then do; /* check for break */ 897 if pcb.dialed 898 then do; 899 if pcb.hndlquit 900 then call throw_away_output; 901 call channel_manager$interrupt (devx, QUIT, ""b); 902 pcb.turn = "1"b; 903 end; 904 sub_mbx.io_cmd = wcd; 905 sub_mbx.op_code = break_acknowledged; 906 sub_mbx.cmd_data_len = 0; 907 call return_mbx (sub_mbx_no); 908 call make_q_entry (accept_direct_output, 0, ""b); 909 /* BREAK sends the turn */ 910 end; 911 912 /* SEND OUTPUT */ 913 914 else if sub_mbx.op_code = send_output 915 then do; /* is this request for output? */ 916 if pcb.dialed 917 then do; 918 if pcb.connection_type = "10"b 919 then pcb.turn = "1"b; 920 call process_send_output (sub_mbx_no, "1"b); 921 end; 922 923 end; 924 925 /* ACCEPT DIRECT INPUT */ 926 927 else if sub_mbx.op_code = accept_direct_input 928 then do; /* check for input from terminal */ 929 if pcb.dialed 930 then call process_accept_input; 931 end; 932 933 934 /* CONNECT TO SLAVE */ 935 /* CONNECT TO SLAVE WITH NO WAIT */ 936 else if (sub_mbx.op_code = connect_to_slave) | (sub_mbx.op_code = connect_to_slave_nowait) 937 then do; 938 pcb.extra_nl, pcb.lfecho = "0"b; 939 do ix = 1 to max_special_name while (special_name (ix) ^= sub_mbx.command_data (1)); 940 end; 941 if ix <= max_special_name 942 then do; 943 if (dial_name (ix) = "Multics") | (dial_name (ix) = "rbfdsa") 944 then fnp_info.active_bit (ix) = "1"b; 945 946 if ^fnp_info.active_bit (ix) 947 then do; 948 sub_mbx.io_cmd = wcd; 949 sub_mbx.op_code = disconnect_this_line; 950 call return_mbx (sub_mbx_no); 951 goto no_dialup; 952 end; 953 end; 954 955 if ix > max_special_name 956 then do; 957 ix = BAUD_9600; 958 pcb.turn, pcb.extra_nl, pcb.lfecho = "1"b; 959 end; 960 else do; 961 pcb.baud_rate = ix; 962 if index (special_name (ix), CONNECTION_TYPE_1) ^= 0 963 then pcb.connection_type = "01"b; 964 if index (special_name (ix), CONNECTION_TYPE_2) ^= 0 965 then pcb.connection_type = "10"b; 966 end; 967 968 pcb.dialed = "1"b; 969 970 if pcb.connection_type = "01"b 971 then do; 972 pcb.uncp_pcbx = 0; 973 if fnp_info.uncp_pcbx1 = 0 974 then do; 975 fnp_info.uncp_pcbx1 = j; 976 sub_mbx.op_code = enter_receive; 977 call return_mbx (sub_mbx_no); 978 end; 979 else if fnp_info.uncp_pcbx2 = 0 980 then fnp_info.uncp_pcbx2 = j; 981 goto no_dialup; 982 end; 983 984 if pcb.connection_type = "10"b 985 then do; 986 if fnp_info.uncp_pcbx1 = 0 987 then do; 988 call syserr (SYSERR_announce, 989 "uncp: Connection on output only not awaited. (dial '^a')", 990 dial_name (ix)); 991 goto no_dialup; 992 end; 993 else do; 994 other_pcbp = 995 addr (fnp_info.pcb_array_ptr -> pcb_array (fnp_info.uncp_pcbx1)); 996 other_pcbp -> pcb.uncp_pcbx = j; 997 pcb.uncp_pcbx = fnp_info.uncp_pcbx1; 998 pcb.turn = "1"b; 999 if dial_name (ix) = "Multics" 1000 then other_pcbp -> pcb.extra_nl = "1"b; 1001 1002 if (dial_name (ix) = "Multics") | (dial_name (ix) = "rbfdsa") 1003 then other_pcbp -> pcb.baud_rate, pcb.baud_rate = BAUD_9600; 1004 1005 1006 fnp_info.uncp_pcbx1 = 0; 1007 if fnp_info.uncp_pcbx2 ^= 0 1008 then do; 1009 other_pcbp = 1010 addr (fnp_info.pcb_array_ptr -> pcb_array (fnp_info.uncp_pcbx2)); 1011 fnp_info.uncp_pcbx1 = fnp_info.uncp_pcbx2; 1012 fnp_info.uncp_pcbx2 = 0; 1013 string (sub_mbx.line_number) = string (other_pcbp -> pcb.line_number); 1014 sub_mbx.op_code = enter_receive; 1015 call return_mbx (sub_mbx_no); 1016 j = fnp_info.hsla_idx (0); 1017 do j = j to fnp_info.no_of_channels while (fnp_info.uncp_pcbx2 = 0); 1018 other_pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (j)); 1019 if other_pcbp -> pcb.dialed 1020 & (other_pcbp -> pcb.connection_type = "01"b) 1021 & (other_pcbp -> pcb.uncp_pcbx = 0) 1022 then if (fnp_info.uncp_pcbx1 ^= j) 1023 then fnp_info.uncp_pcbx2 = j; 1024 end; 1025 end; 1026 end; 1027 end; 1028 1029 dialup_info.line_type = LINE_ASCII; 1030 dialup_info.receive_mode_device = "0"b; 1031 if pcb.connection_type = "00"b 1032 then dialup_info.receive_mode_device = "1"b; 1033 dialup_info.baud_rate = ix; 1034 dialup_info.max_buf_size = pcb.max_buf_size; 1035 dialup_info.buffer_pad = 0; 1036 dialup_info.pad = "0"b; 1037 interrupt_info = unspec (dialup_info); 1038 call channel_manager$interrupt (devx, DIALUP, interrupt_info); 1039 call process_send_output (sub_mbx_no, "1"b); 1040 no_dialup: 1041 end; 1042 1043 else if devx ^= -1 1044 then call syserr (SYSERR_announce, 1045 "uncp: unrecognized op code ^o with rcd from FNP ^a for devx ^o", sub_mbx.op_code, 1046 substr ("abcdefgh", dno, 1), devx); 1047 /* someone goofed */ 1048 1049 end; 1050 1051 /* READ TEXTE */ 1052 1053 else if sub_mbx.io_cmd = rtx 1054 then do; 1055 call process_rtx; /* check for read text */ 1056 if pcb.connection_type = "01"b 1057 then do; 1058 sub_mbx.op_code = enter_receive; 1059 call return_mbx (sub_mbx_no); 1060 end; 1061 end; 1062 else call syserr (SYSERR_beep, "uncp: unrecognized io command ^o from FNP ^a for line ^o", 1063 sub_mbx.io_cmd, substr ("abcdefgh", dno, 1), bin (string (sub_mbx.line_number), 10)); 1064 /* complain */ 1065 end; 1066 1067 1068 end; 1069 end; 1070 1071 /* use spend_submailboxes */ 1072 1073 1074 if ^no_response & used_string ^= (7)"1"b 1075 then /* see if we freed some submailboxes */ 1076 call spend_submailboxes; 1077 1078 1079 1080 1081 if no_response /* if someone discovered that the FNP was gone */ 1082 then call report_fnp_no_response; 1083 1084 /* Supprimer le label exit avec deverrouillage de lcte.lock */ 1085 1086 return; /* return to iom_manager */ 1087 end /* process_int */; 1088 1089 /* An internal procedure to perform interrupt-time tasks that consume submailboxes. 1090* First check for queued up work. Then attend to FNP mailbox requests. */ 1091 1092 spend_submailboxes: 1093 proc; 1094 1095 if fnp_info.count ^= 0 1096 then call process_q; /* were we waiting for a free mbx */ 1097 1098 1099 do while (datanet_mbx.mailbox_requests ^= datanet_mbx.last_mbx_req_count); 1100 /* try to service mailbox requests */ 1101 call assign_sub_mbx (sub_mbx_no, subp); /* find a free sub mbx */ 1102 if sub_mbx_no = -1 1103 then return; /* none available, will try again at next interrupt. */ 1104 sub_mbx.io_cmd = rcd; /* set rcd in sub mailbox. */ 1105 call send_mbx (sub_mbx_no); /* now ship submailbox off uncp. */ 1106 datanet_mbx.last_mbx_req_count = datanet_mbx.last_mbx_req_count + 1; 1107 if datanet_mbx.last_mbx_req_count > MAX_MBX_REQ_CNT 1108 then datanet_mbx.last_mbx_req_count = 0; 1109 if ^sub_mbx_sent 1110 then call release_sub_mbx (sub_mbx_no); 1111 end; 1112 end /* spend_submailboxes */; 1113 1114 process_q: 1115 proc; 1116 1117 /* process the queue of mailbox operations that could not be performed 1118* because no mailboxes wre available 1119**/ 1120 1121 q_first = fnp_info.cur_ptr; 1122 q_count = fnp_info.count; 1123 sub_mbx_no = 0; /* preset mbx# for do while */ 1124 1125 do while (q_count > 0 & sub_mbx_no >= 0); 1126 call assign_sub_mbx (sub_mbx_no, subp); /* find a free sub mbx */ 1127 if sub_mbx_no >= 0 /* now we can have one */ 1128 then do; 1129 qptr = ptr (ttybp, q_first); 1130 if q_entry.pcb_offset ^= "0"b /* for a specific channel */ 1131 then do; 1132 pcbp = ptr (ttybp, q_entry.pcb_offset); 1133 string (sub_mbx.line_number) = string (pcb.line_number); 1134 devx = pcb.devx; 1135 end; 1136 else string (sub_mbx.line_number) = ""b; 1137 1138 if q_entry.opcode = accept_direct_output 1139 then if pcb.dialed 1140 then call process_send_output (sub_mbx_no, "0"b); 1141 else ; 1142 1143 else do; 1144 sub_mbx.io_cmd = wcd; 1145 sub_mbx.op_code = q_entry.opcode; 1146 sub_mbx.cmd_data_len = divide (q_entry.cmd_count, 6, 8, 0); 1147 smbx_cmd_data_long = substr (q_entry.cmd_data, 1, q_entry.cmd_count); 1148 call send_mbx (sub_mbx_no); 1149 fnp_info.output_control_transactions = fnp_info.output_control_transactions + 1; 1150 end; 1151 1152 if no_response /* give up in this case */ 1153 then goto update_q_ptrs; 1154 1155 q_first = q_entry.next; /* on to next queue entry */ 1156 q_count = q_count - 1; 1157 call tty_space_man$free_space (size (q_entry), qptr); 1158 if ^sub_mbx_sent 1159 then call release_sub_mbx (sub_mbx_no); 1160 end; 1161 1162 else fnp_info.mbx_unavailable = fnp_info.mbx_unavailable + 1; 1163 end; 1164 1165 update_q_ptrs: 1166 fnp_info.cur_ptr = q_first; 1167 fnp_info.count = q_count; 1168 if q_count = 0 1169 then fnp_info.last_ptr = 0; 1170 1171 return; 1172 end /* process_q */; 1173 1174 send_dial: 1175 proc; 1176 pcb.send_output = "1"b; 1177 devx = pcb.devx; 1178 1179 if pcb.write_last ^= 0 1180 then do; 1181 blockp = ptr (ttybp, pcb.write_last); 1182 if buffer.turn 1183 then pcb.turn = "1"b; 1184 call throw_away_output; 1185 end; 1186 1187 if pcb.turn = "1"b 1188 then do; 1189 call tty_space_man$get_chain (devx, 16, 1, INPUT, inchain_ptr); 1190 if inchain_ptr = null 1191 then do; 1192 call syserr (SYSERR_announce, "uncp: special_dial, Failure of buffer to make '^a'", dial_name (ix)); 1193 call channel_manager$interrupt (devx, QUIT, ""b); 1194 return; 1195 end; 1196 inchain = rel (inchain_ptr); 1197 blockp = inchain_ptr; 1198 numchars = EIGHT; 1199 bufp = addr (dial_name (ix)); 1200 charp = addr (buffer.chars); 1201 charp -> chars = bufp -> chars; 1202 buffer.tally = numchars; 1203 rtx_info.break_char = "1"b; 1204 rtx_info.output_in_fnp = "0"b; 1205 rtx_info.output_in_ring_0 = "0"b; 1206 rtx_info.input_count = EIGHT; 1207 rtx_info.chain_head = inchain; 1208 rtx_info.chain_tail = rel (blockp); 1209 interrupt_info = unspec (rtx_info); 1210 call channel_manager$interrupt (devx, ACCEPT_INPUT, interrupt_info); 1211 pcb.baud_rate = BAUD_9600; 1212 pcb.dumpout = "1"b; 1213 end; 1214 call channel_manager$interrupt (devx, SEND_OUTPUT, ""b); 1215 return; 1216 1217 end send_dial; 1218 1219 /* internal subroutine to process send output */ 1220 1221 process_send_output: 1222 proc (a_mbx_num, interrupt_entry); 1223 1224 dcl a_mbx_num fixed bin; /* -1 indicates mailbox not already allocated */ 1225 dcl mbx_num fixed bin; 1226 dcl interrupt_entry bit (1) aligned; /* indicates whether or not called on interrupt side */ 1227 1228 mbx_num = a_mbx_num; 1229 1230 if pcb.end_frame | pcb.output_mbx_pending /* if we're waiting for form-feed */ 1231 then do; 1232 pcb.flags.send_output = "1"b; /* we'll want output eventually */ 1233 if pcb.turn = "1"b 1234 then call channel_manager$interrupt (devx, SEND_OUTPUT, ""b); 1235 /* For the Quit problem */ 1236 return; /* don't do anything else */ 1237 end; 1238 1239 if pcb.enter_receive_pending | pcb.send_lf 1240 then do; 1241 sub_mbx.op_code = enter_receive; 1242 call send_mbx (mbx_num); 1243 return; 1244 end; 1245 1246 if pcb.write_first = 0 1247 then do; 1248 1249 pcb.flags.send_output = "1"b; /* if no output then just set flag */ 1250 call channel_manager$interrupt (devx, SEND_OUTPUT, ""b); 1251 end; 1252 1253 else do; 1254 ix = pcb.baud_rate; 1255 if ix ^= BAUD_9600 1256 then do; 1257 call send_dial; 1258 return; 1259 end; 1260 1261 if pcb.turn = "0"b 1262 then return; /* Don't emit without the turn ON */ 1263 1264 if mbx_num = -1 /* caller didn't supply one */ 1265 then do; 1266 call assign_sub_mbx (mbx_num, subp); /* find a free sub mbx */ 1267 if mbx_num = -1 /* still? we didn't get one */ 1268 then do; 1269 call make_q_entry (accept_direct_output, 0, ""b); 1270 fnp_info.mbx_unavailable = fnp_info.mbx_unavailable + 1; 1271 return; /* we'll catch it later */ 1272 end; 1273 else do; 1274 string (sub_mbx.line_number) = string (pcb.line_number); 1275 end; 1276 end; 1277 1278 1279 pcb.flags.send_output = "0"b; /* make sure flag clear */ 1280 1281 1282 /* no DCW with UNCP */ 1283 1284 blockp = ptr (ttybp, pcb.write_first); /* get ptr to buffer */ 1285 if buffer.tally = 0 /* we don't want this in a dcw */ 1286 then call syserr (SYSERR_crash, "uncp: output buffer at ^o has zero tally", pcb.write_first); 1287 1288 /* no DCW with UNCP */ 1289 1290 1291 pcb.write_first = buffer.next; /* now bump to next buffer */ 1292 pcb.write_cnt = pcb.write_cnt - buffer.tally;/* decrement count of chars in chain */ 1293 1294 1295 if buffer.flags.end_of_page /* if this buffer fills a page/screen */ 1296 then pcb.flags.end_frame = "1"b; /* remember it */ 1297 1298 1299 if pcb.write_first ^= 0 1300 then buffer.flags.turn = "0"b; /* Give up turn if terminating */ 1301 1302 1303 sub_mbx.op_code = accept_direct_output; 1304 if buffer.flags.turn 1305 then pcb.flags.end_frame = "0"b; 1306 if buffer.flags.turn | buffer.flags.end_of_page 1307 then do; 1308 sub_mbx.op_code = accept_last_output; 1309 pcb.turn = "0"b; 1310 end; 1311 1312 sub_mbx.command_data (1) = "0"b; /* make sure it starts clean */ 1313 sub_mbx.data_addr = bit (bin (bin (rel (blockp), 18) + tty_buf.absorig, 18), 18); 1314 j = bin (buffer.tally, 18); 1315 sub_mbx.word_cnt = 1 + divide (j + 3, 4, 18, 0); 1316 buffer.next = 0; /* indicate end of active write block */ 1317 sub_mbx.command_data (3) = gateway_header; /* save buffer header in command_data (3) */ 1318 gateway_buf.cnt = j; 1319 gateway_buf.pad = "0"b; 1320 sub_mbx.io_cmd = wtx; /* set write text io command */ 1321 1322 if trace.buffer_out 1323 then call syserr (SYSERR_log, "uncp: buffer = ^v( ^w ^) ", sub_mbx.word_cnt, blockp -> buf_words); 1324 1325 if pcb.connection_type = "01"b & sub_mbx.op_code = accept_direct_output 1326 then string (sub_mbx.line_number) = 1327 string (addr (fnp_info.pcb_array_ptr -> pcb_array (pcb.uncp_pcbx)) -> pcb.line_number); 1328 pcb.output_mbx_pending = "1"b; 1329 call send_mbx (mbx_num); /* ship sub mbx off to 355 */ 1330 fnp_info.output_data_transactions = fnp_info.output_data_transactions + 1; 1331 /* meter */ 1332 if pcb.write_first = 0 1333 then do; /* see if we ran out of buffers */ 1334 pcb.write_last = 0; /* zero ptr to last */ 1335 if interrupt_entry 1336 then call channel_manager$interrupt (devx, SEND_OUTPUT, ""b); 1337 /* wakeup the user */ 1338 end; 1339 end; 1340 1341 return; /* and return to caller */ 1342 end; 1343 1344 /* internal procedure to respond to accept_input mailbox */ 1345 1346 process_accept_input: 1347 proc; 1348 1349 input_count = fixed (substr (sub_mbx.command_data (1), 1, 18), 18) + 4; 1350 /* get char count */ 1351 1352 j = divide (input_count + 3, 4, 17, 0); /* compute number of words of circular buffer needed */ 1353 1354 do while (^stac (addr (uncp_buf.cq_lock), pds$processid)); 1355 /* lock the circular queue lock */ 1356 end; 1357 1358 k = uncp_buf.cq_max_size - uncp_buf.cq_next; 1359 if j <= uncp_buf.cq_free /* if there's space in the queue */ 1360 then if enough_input_space (j) /* and buffers to spare */ 1361 then do; 1362 if j > k 1363 then if j <= uncp_buf.cq_free - k 1364 then uncp_buf.cq_next = 0; 1365 else go to reject; 1366 1367 qorig = tty_buf.absorig + fixed (rel (addr (uncp_buf.circular_queue (0)))); 1368 /* get abs origin of circular buffer */ 1369 1370 uncp_buf.cq_free = uncp_buf.cq_free - j;/* decrement count of free wds in circ buf */ 1371 1372 if uncp_buf.circular_queue_size > MAX_FREE_BUFFERS 1373 then do; /* getting too big */ 1374 uncp_buf.circular_queue_size = 0; /* reset */ 1375 uncp_buf.queue_ave_cnt = 0; 1376 end; 1377 uncp_buf.circular_queue_size = uncp_buf.circular_queue_size + 1378 /* update the ave size */ 1379 (uncp_buf.cq_max_size - uncp_buf.cq_free); 1380 /* with current size */ 1381 uncp_buf.queue_ave_cnt = uncp_buf.queue_ave_cnt + 1; 1382 /* bump q count */ 1383 1384 uncp_buf.circular_queue (uncp_buf.cq_next) = 0; 1385 sub_mbx.data_addr = bit (bin (qorig + uncp_buf.cq_next, 18), 18); 1386 /* leave abs buffer addr for 355 */ 1387 uncp_buf.cq_next = uncp_buf.cq_next + j;/* compute new cb free area offset */ 1388 1389 wrap_ptr = "0"b; /* clear wrap around ptr in sub mbx */ 1390 wrap_cnt = 0; /* and count in sub mbx */ 1391 1392 if uncp_buf.cq_next > uncp_buf.cq_max_size 1393 then do; /* we have wrap around */ 1394 wrap_ptr = bit (bin (qorig, 18), 18); 1395 /* leave wrap around pointer in sub mbx */ 1396 uncp_buf.cq_next = uncp_buf.cq_next - uncp_buf.cq_max_size; 1397 /* adjust free buffer offset */ 1398 wrap_cnt = input_count - 4 * (j - uncp_buf.cq_next); 1399 /* leave wrap count in sub mbx */ 1400 sub_mbx.word_cnt = input_count - wrap_cnt; 1401 /* and adjust word count */ 1402 end; 1403 1404 1405 1406 else sub_mbx.word_cnt = j; /* words count */ 1407 1408 if uncp_buf.cq_next = uncp_buf.cq_max_size 1409 then uncp_buf.cq_next = 0; /* exactly end of cb */ 1410 1411 1412 if trace.buffer_in 1413 then call syserr (SYSERR_log, "uncp$process_accept_input: cq_next = ^w , cq_free = ^w , count = ^w ", 1414 uncp_buf.cq_next, uncp_buf.cq_free, j); 1415 1416 sub_mbx.op_code = input_accepted; /* inform 355 that we will take input now */ 1417 sub_mbx.io_cmd = rtx; 1418 call return_mbx (sub_mbx_no); 1419 end; 1420 1421 else go to reject; 1422 1423 else do; 1424 uncp_buf.queue_full_cnt = uncp_buf.queue_full_cnt + 1; 1425 /* bump q full count */ 1426 reject: 1427 sub_mbx.io_cmd = wcd; 1428 sub_mbx.op_code = reject_request_temp; /* inform 355 that we can not accept input 1429* at the present time */ 1430 call return_mbx (sub_mbx_no); 1431 fnp_info.input_reject_count = fnp_info.input_reject_count + 1; 1432 call channel_manager$interrupt (devx, INPUT_REJECTED, ""b); 1433 end; 1434 1435 if ^stacq (uncp_buf.cq_lock, "0"b, pds$processid) 1436 then call syserr (SYSERR_crash, "uncp: inconsistent circular queue lock."); 1437 1438 end /* process_accept_input */; 1439 1440 /* internal proc to process rtx */ 1441 process_rtx: 1442 proc; 1443 1444 dcl (real_word_cnt, real_wrap_cnt) fixed bin; 1445 dcl chars_to_move fixed bin; 1446 dcl left_in_buffer fixed bin; 1447 dcl char_array (0:numchars) char (1) unaligned based; 1448 1449 sub_mbx.command_data (3) = "0"b; 1450 1451 bufp = ptr (ttybp, bin (sub_mbx.data_addr, 24) - tty_buf.absorig); 1452 real_word_cnt = bufp -> unal_number; 1453 if real_word_cnt = 0 1454 then goto update_free; 1455 1456 real_wrap_cnt = wrap_cnt; 1457 lcte.meters.in_bytes = lcte.meters.in_bytes + real_word_cnt; 1458 1459 rtx_info.break_char = "1"b; 1460 call check_ff ("0"b); /* see if input ends with a form feed */ 1461 input_count = real_word_cnt + real_wrap_cnt; 1462 if input_count ^= 0 /* must have been a single FF that we discarded */ 1463 then do; 1464 1465 rtx_info.output_in_fnp = "0"b; 1466 rtx_info.output_in_ring_0 = (pcb.write_first ^= 0); 1467 rtx_info.input_count = input_count; 1468 if input_count > (tty_buf.bleft - abs_buf_limit) * 4 1469 /* not now though */ 1470 then go to no_input_space; 1471 1472 nblocks = divide (input_count + bsizec - 1, bsizec, 17, 0); 1473 /* figure out how many we'll need */ 1474 call tty_space_man$get_chain (devx, 16, nblocks, INPUT, inchain_ptr); 1475 if inchain_ptr = null 1476 then do; 1477 no_input_space: 1478 call syserr (SYSERR_announce, 1479 "uncp: Unable to allocate input buffers for line ^o, input has been lost", 1480 string (pcb.line_number)); 1481 call channel_manager$interrupt (devx, QUIT, ""b); 1482 /* get the word to him somehow */ 1483 go to update_free; 1484 end; 1485 inchain = rel (inchain_ptr); 1486 1487 bufp = ptr (ttybp, bin (sub_mbx.data_addr, 24) - tty_buf.absorig + 1); 1488 /* get ptr to input buf */ 1489 1490 if trace.buffer_in 1491 then call syserr (SYSERR_log, "uncp: compte = ^w , buffer recu : ^v( ^w ^) ", input_count, 1492 divide (input_count + 3, 4, 17, 0), bufp -> buf_words); 1493 1494 chars_left = real_word_cnt + real_wrap_cnt; 1495 blockp = inchain_ptr; /* pointer to first buffer */ 1496 charp = addr (buffer.chars); 1497 chars_to_move = real_word_cnt; /* up to end of circular buffer */ 1498 left_in_buffer = bsizec; /* initially */ 1499 1500 do while (chars_left > 0); 1501 numchars = min (left_in_buffer, chars_to_move); 1502 charp -> chars = bufp -> chars; /* chars is declared char (numchars) */ 1503 chars_left = chars_left - numchars; 1504 chars_to_move = chars_to_move - numchars; 1505 buffer.tally = buffer.tally + numchars; 1506 1507 if chars_left > 0 /* there are more to do */ 1508 then do; 1509 if chars_to_move <= 0 /* used up first set */ 1510 then if real_wrap_cnt > 0 /* are there any more? */ 1511 then do; 1512 bufp = addr (uncp_buf.circular_queue (0)); 1513 chars_to_move = real_wrap_cnt; 1514 end; 1515 else ; 1516 1517 else bufp = addr (bufp -> char_array (numchars)); 1518 1519 if buffer.tally = bsizec /* buffer is full */ 1520 then do; 1521 blockp = ptr (ttybp, buffer.next); 1522 /* so move to next */ 1523 charp = addr (buffer.chars); 1524 left_in_buffer = bsizec; 1525 end; 1526 1527 else do; 1528 charp = addr (charp -> char_array (numchars)); 1529 left_in_buffer = left_in_buffer - numchars; 1530 end; 1531 end; 1532 end; 1533 1534 rtx_info.chain_head = inchain; 1535 rtx_info.chain_tail = rel (blockp); 1536 interrupt_info = unspec (rtx_info); 1537 call channel_manager$interrupt (devx, ACCEPT_INPUT, interrupt_info); 1538 pcb.turn = "1"b; 1539 if pcb.lfecho 1540 then pcb.send_lf = "1"b; 1541 end; 1542 1543 /* the following statement must generate an ASQ instruction or there will be a locking problem */ 1544 1545 1546 update_free: 1547 uncp_buf.cq_free = uncp_buf.cq_free + sub_mbx.word_cnt; 1548 1549 call make_q_entry (accept_direct_output, 0, ""b); 1550 1551 return; /* and return to caller */ 1552 1553 check_ff: 1554 proc (in_mbx); /* internal procedure to check input for form-feed */ 1555 1556 dcl in_mbx bit (1); 1557 dcl wrapped bit (1); 1558 1559 rtx_info.formfeed_present = "0"b; /* for now */ 1560 if pcb.sync_line /* form feeds not interesting in this case */ 1561 then return; 1562 wrapped = "0"b; 1563 1564 1565 1566 if wrap_ptr = "0"b 1567 then do; 1568 bufp = ptr (ttybp, bin (sub_mbx.data_addr, 24) - tty_buf.absorig + 1); 1569 chars_left = real_word_cnt; 1570 end; 1571 1572 1573 if pcb.extra_nl 1574 then substr (bufp -> input_chars, chars_left, 1) = " 1575 "; 1576 1577 if substr (bufp -> input_chars, chars_left, 1) = form_feed 1578 /* yup, input ends with FF */ 1579 then rtx_info.formfeed_present = "1"b; 1580 if pcb.flags.end_frame & rtx_info.break_char /* time to restart suspended output */ 1581 then do; 1582 if (chars_left <= 2) & ^wrapped 1583 then if verify (substr (bufp -> input_chars, 1, chars_left), ff_cr_lf) = 0 1584 then do; /* this input is just to restart output, discard it */ 1585 if in_mbx 1586 then numchars = 0; 1587 else real_word_cnt = 0; 1588 end; 1589 pcb.flags.end_frame = "0"b; 1590 pcb.turn = "1"b; 1591 if pcb.enter_receive_pending 1592 then call make_q_entry (accept_direct_output, 0, "0"b); 1593 1594 1595 if pcb.flags.send_output /* more output to ship */ 1596 then if pcb.write_first ^= 0 /* it's waiting in tty_buf */ 1597 then call make_q_entry (accept_direct_output, 0, ""b); 1598 /* we'll get to it shortly */ 1599 else call channel_manager$interrupt (devx, SEND_OUTPUT, ""b); 1600 end; 1601 1602 end /* check_ff */; 1603 1604 end /* process_rtx */; 1605 1606 /* internal proc to check if this channel can have input space */ 1607 1608 enough_input_space: 1609 proc (count) returns (bit (1)); 1610 1611 dcl count fixed bin; 1612 1613 lctp = tty_buf.lct_ptr; 1614 chan_lctep = addr (lct.lcte_array (devx)); 1615 return (chan_lctep -> lcte.input_words + count <= divide (tty_buf.bleft, input_bpart, 17, 0)); 1616 end /* enough_input_space */; 1617 1618 1619 /* internal proc to put an element onto delay queue */ 1620 1621 make_q_entry: 1622 proc (opc, cnt, databits); 1623 1624 dcl (opc, cnt) fixed bin (8), /* parameters */ 1625 databits bit (8 * 36); 1626 1627 call tty_space_man$get_space (size (q_entry), new_qp); 1628 if new_qp = null 1629 then do; 1630 call syserr (SYSERR_crash, "uncp: unable to allocate block for delay queue"); 1631 return; 1632 end; 1633 1634 if opc = accept_direct_output 1635 then pcb.flags.send_output = "0"b; /* Correction for the untimely disconnects */ 1636 new_qrel = bin (rel (new_qp)); 1637 if fnp_info.cur_ptr = 0 /* nothing in the queue yet */ 1638 then fnp_info.cur_ptr = new_qrel; 1639 else do; 1640 qptr = ptr (ttybp, fnp_info.last_ptr); 1641 q_entry.next = new_qrel; /* make the preceding entry point to the new one */ 1642 end; 1643 1644 fnp_info.last_ptr = new_qrel; 1645 qptr = new_qp; 1646 fnp_info.count = fnp_info.count + 1; 1647 fnp_info.q_entries_made = fnp_info.q_entries_made + 1; 1648 1649 q_entry.opcode = opc; /* set q element op code */ 1650 q_entry.cmd_count = cnt; /* and command count */ 1651 if pcbp ^= null () 1652 then q_entry.pcb_offset = rel (pcbp); 1653 else q_entry.pcb_offset = "0"b; 1654 q_entry.next = 0; 1655 q_entry.cmd_data = databits; /* move data to q element */ 1656 return; /* return to caller */ 1657 end; 1658 1659 /* internal procedure to derive devx & PCB pointer from mailbox line number */ 1660 1661 get_line_number: 1662 proc; 1663 1664 pcbp = null; 1665 devx = -1; 1666 1667 if string (sub_mbx.line_number) ^= "0"b 1668 then do; 1669 sub_mbx.line_number.is_hsla = "1"b; /* with uncp every line is high speed */ 1670 lano = sub_mbx.line_number.la_no; /* get line adapter number for devx lookup */ 1671 if sub_mbx.is_hsla 1672 then j = fnp_info.hsla_idx (fixed (lano)); 1673 else j = fnp_info.lsla_idx (fixed (lano)); /* get starting position */ 1674 do j = j to fnp_info.no_of_channels; /* loop thru devx table */ 1675 pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (j)); 1676 if string (pcb.line_number) = string (sub_mbx.line_number) 1677 then go to match; /* check for right slot */ 1678 end; 1679 if (sub_mbx.io_cmd = rcd) & (sub_mbx.op_code = accept_new_terminal) 1680 then do; 1681 devx = -1; 1682 return; 1683 end; 1684 else if sub_mbx.io_cmd ^= wcd 1685 then do; 1686 call syserr (SYSERR_beep, "uncp$interrupt: no slot number match for sub mbx ^o, FNP ^a", i, 1687 substr ("abcdefgh", dno, 1)); /* bitch */ 1688 sub_mbx.io_cmd = 0; /* To force an error */ 1689 end; 1690 return; 1691 match: 1692 devx = pcb.devx; /* copy devx to automatic */ 1693 if pcb.connection_type = "01"b 1694 then do; 1695 other_pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (pcb.uncp_pcbx)); 1696 devx = other_pcbp -> pcb.devx; 1697 end; 1698 end; 1699 return; 1700 1701 end /* get_line_number */; 1702 1703 1704 /* internal procedure to locate and assign a free sub mailbox */ 1705 1706 assign_sub_mbx: 1707 proc (a_sub_mbx_no, a_subp); 1708 1709 dcl a_sub_mbx_no fixed bin; 1710 dcl a_subp ptr; 1711 dcl sub_mbx_num fixed bin; 1712 1713 sub_mbx_num = index (used_string, "0"b) - 1; 1714 if sub_mbx_num = -1 1715 then do; /* none available */ 1716 a_sub_mbx_no = -1; 1717 a_subp = null (); 1718 return; 1719 end; 1720 1721 datanet_mbx.mbx_used_flags.used (sub_mbx_num) = "1"b; 1722 /* set used flag */ 1723 datanet_mbx.num_in_use = datanet_mbx.num_in_use + 1; 1724 fnp_info.max_mbx_in_use = max (fnp_info.max_mbx_in_use, datanet_mbx.num_in_use); 1725 fnp_info.cumulative_mbx_in_use = fnp_info.cumulative_mbx_in_use + datanet_mbx.num_in_use; 1726 fnp_info.mbx_in_use_updated = fnp_info.mbx_in_use_updated + 1; 1727 unspec (datanet_mbx.dn355_sub_mbxes (sub_mbx_num)) = "0"b; 1728 sub_mbx_sent = "0"b; 1729 a_sub_mbx_no = sub_mbx_num; 1730 a_subp = addr (datanet_mbx.dn355_sub_mbxes (sub_mbx_num)); 1731 return; 1732 end assign_sub_mbx; 1733 1734 /* internal procedure to release a sub mailbox when it wasn't really needed */ 1735 1736 release_sub_mbx: 1737 proc (a_sub_mbx_no); 1738 1739 dcl a_sub_mbx_no fixed bin; 1740 1741 if a_sub_mbx_no < 0 | a_sub_mbx_no > 6 1742 then return; /* not a valid mbx# */ 1743 datanet_mbx.mbx_used_flags.used (a_sub_mbx_no) = "0"b; 1744 /* reset used flag */ 1745 /* and decrement counters */ 1746 fnp_info.cumulative_mbx_in_use = fnp_info.cumulative_mbx_in_use - datanet_mbx.num_in_use; 1747 fnp_info.mbx_in_use_updated = fnp_info.mbx_in_use_updated - 1; 1748 datanet_mbx.num_in_use = datanet_mbx.num_in_use - 1; 1749 return; 1750 end release_sub_mbx; 1751 1752 1753 /* internal procedure to ship sub mbx off to 355 */ 1754 return_mbx: 1755 send_mbx: 1756 proc (a_mbx_no); 1757 1758 dcl a_mbx_no fixed bin; 1759 dcl mbx_no fixed bin; 1760 dcl counter fixed bin; 1761 dcl output_data_ptr ptr; 1762 dcl output_data (3) bit (36) aligned based (output_data_ptr); 1763 dcl 1 ima aligned like io_manager_arg; 1764 1765 mbx_no = a_mbx_no; 1766 if mbx_no = -1 /* caller running with local copy */ 1767 then do; 1768 call assign_sub_mbx (mbx_no, subp); /* find a free sub mbx */ 1769 if mbx_no = -1 /* OUCH! Should have had one! */ 1770 then do; 1771 call syserr (SYSERR_crash, "uncp: unable to re-assign fnp sub-mailbox."); 1772 return; 1773 end; 1774 unspec (sub_mbx) = unspec (local_sub_mbx); /* copy in local info */ 1775 a_mbx_no = mbx_no; 1776 end; 1777 1778 if ^fnp_info.io_manager_assigned 1779 then do; 1780 no_response = "1"b; /* lie, but effectively */ 1781 return; 1782 end; 1783 1784 do counter = 1 to LOOP_LIMIT while (datanet_mbx.dia_pcw.command ^= "0"b); 1785 /* loop until dia picks up last command */ 1786 end; 1787 if counter > LOOP_LIMIT /* it never did */ 1788 then no_response = "1"b; 1789 1790 else do; 1791 no_response = "0"b; 1792 1793 if (mbx_no >= 0) & (mbx_no <= 6) 1794 then do; 1795 sub_mbx.dn355_no = substr (bit (fnp_info.fnp_number), 7); 1796 if sub_mbx.op_code = enter_receive 1797 then do; 1798 sub_mbx.io_cmd = wtx; 1799 output_data_ptr = fnp_info.dcw_list_array_ptr; 1800 output_data (*) = ""b; 1801 1802 sub_mbx.command_data (1) = "0"b; 1803 sub_mbx.command_data (2) = "0"b; 1804 sub_mbx.command_data (3) = "0"b; 1805 if pcb.send_lf 1806 then do; 1807 sub_mbx.op_code = accept_direct_output; 1808 unspec (output_data (2)) = "000001000000"b3; 1809 unspec (output_data (3)) = "012000000000"b3; 1810 sub_mbx.word_cnt = 2; 1811 sub_mbx.data_addr = 1812 bit (bin (tty_buf.absorig + fixed (rel (addr (output_data (2)))), 18), 18); 1813 pcb.send_lf = "0"b; 1814 end; 1815 else do; 1816 sub_mbx.op_code = accept_last_output; 1817 output_data (1) = "0"b; 1818 sub_mbx.word_cnt = 1; 1819 sub_mbx.data_addr = 1820 bit (bin (tty_buf.absorig + fixed (rel (addr (output_data (1)))), 18), 18); 1821 pcb.enter_receive_pending, pcb.turn = "0"b; 1822 end; 1823 call get_line_number; 1824 pcb.output_mbx_pending = "1"b; 1825 end; 1826 1827 if sub_mbx.op_code = accept_last_output 1828 then do; 1829 call get_line_number; 1830 if pcb.connection_type = "10"b 1831 then do; 1832 pcb.turn = "1"b; 1833 sub_mbx.op_code = accept_direct_output; 1834 end; 1835 end; 1836 1837 if (sub_mbx.io_cmd = rtx) | (sub_mbx.io_cmd = wtx) 1838 then sub_mbx.pad3 = (15)"0"b3 || "777"b3; 1839 end; 1840 1841 sub_mbx.line_number.is_hsla = "0"b; /* for the line_number into uncp */ 1842 1843 if trace.mailbox 1844 then call syserr (SYSERR_log, "uncp$send_mbx: # ^o ^2( ^/ ^4( ^w ^) ^)", mbx_no, sub_mbx_array); 1845 1846 string (datanet_mbx.dia_pcw) = initial_pcw; /* initialize pcw */ 1847 datanet_mbx.dia_pcw.mbx_no = bit (fixed (mbx_no + 1, 6), 6); 1848 /* set sub mbx number */ 1849 1850 string (datanet_mbx.dia_pcw) = dn355_util$compute_parity (string (datanet_mbx.dia_pcw)); 1851 /* set the parity bit; bit 22 */ 1852 1853 1854 ima.chx = fnp_info.io_manager_chx; 1855 ima.ptp = fnp_info.ptp; 1856 call io_manager$connect_direct (ima); /* kick 355 */ 1857 sub_mbx_sent = "1"b; /* show actual use of mbx */ 1858 1859 return; /* return to caller */ 1860 end; 1861 end send_mbx; 1862 1863 /* entry and internal proc to hangup all lines on an FNP */ 1864 1865 hangup_fnp_lines: 1866 entry (a_fnp_no); 1867 1868 dcl a_fnp_no fixed bin; 1869 1870 infop = addr (dn355_data$); 1871 ttybp = addr (tty_buf$); 1872 uncpbp = datanet_info.uncp_bufp; 1873 call hangup_fnp (a_fnp_no); 1874 return; 1875 1876 1877 hangup_fnp: 1878 proc (fnp_no); 1879 1880 dcl fnp_no fixed bin; 1881 1882 fnpp = addr (datanet_info.per_datanet (fnp_no)); 1883 do j = 1 to fnp_info.no_of_channels; 1884 pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (j)); 1885 if pcb.dialed 1886 then do; 1887 call throw_away_output; 1888 if pcb.connection_type ^= "10"b 1889 then call channel_manager$interrupt ((pcb.devx), CRASH, ""b); 1890 end; 1891 end; 1892 1893 if fnp_info.count > 0 /* get rid of any outstanding delay queue entries */ 1894 then do; 1895 q_count = fnp_info.count; 1896 q_first = fnp_info.cur_ptr; 1897 do q_count = q_count to 0 by -1 while (q_first ^= 0); 1898 qptr = ptr (ttybp, q_first); /* get real pointer to queue entry */ 1899 q_first = qptr -> q_entry.next; /* save pointer to next one */ 1900 call tty_space_man$free_space (size (q_entry), qptr); 1901 end; 1902 1903 fnp_info.count, fnp_info.cur_ptr, fnp_info.last_ptr = 0; 1904 end; 1905 1906 end; 1907 1908 1909 1910 throw_away_output: 1911 proc; 1912 1913 /* throws away pending write chain on quit and hangup */ 1914 1915 if pcb.write_first ^= 0 1916 then do; 1917 call tty_space_man$free_chain ((pcb.devx), OUTPUT, ptr (ttybp, pcb.write_first)); 1918 pcb.write_first, pcb.write_last, pcb.write_cnt = 0; 1919 1920 end; 1921 1922 pcb.end_frame = "0"b; 1923 1924 return; 1925 end /* throw_away_output */; 1926 1927 /* internal procedure to report that DIA never set PCW to 0 */ 1928 1929 report_fnp_no_response: 1930 proc; 1931 1932 call syserr (SYSERR_beep, "uncp: FNP ^a did not respond to mailbox interrupt", fnp_info.fnp_tag); 1933 call report_fnp_crash; /* treat it like a crash */ 1934 return; 1935 1936 end /* report_fnp_no_response */; 1937 1938 1939 /* internal procedure to tell initializer and clean up when FNP crashes */ 1940 1941 report_fnp_crash: 1942 proc; 1943 1944 fnp_info.running = "0"b; /* it isn't any more */ 1945 1946 /* if fnp_info.dump_patch_in_progress somebody's waiting for this */ 1947 /* then call pxss$notify (FNP_DUMP_PATCH_EVENT); don't let them wait forever */ 1948 1949 if ^fnp_info.bootloading /* if we weren't still loading it */ 1950 then /* now report hangups for all lines that were dialed to it */ 1951 call hangup_fnp (dno); 1952 else fnp_info.bootloading = "0"b; 1953 1954 auto_fnp_msg.state = FNP_DOWN; /* tell the responsible process */ 1955 auto_fnp_msg.fnp_no = dno; 1956 auto_fnp_msg.flags = "0"b; 1957 unspec (fnp_event_message) = unspec (auto_fnp_msg); 1958 call pxss$ring_0_wakeup (fnp_info.boot_process_id, fnp_info.boot_ev_chan, fnp_event_message, 0); 1959 1960 return; 1961 1962 end report_fnp_crash; 1963 1964 purge_write_texte: 1965 proc; 1966 do i = 0 to 6; 1967 if timwb (i) 1968 then do; 1969 subp = addr (datanet_mbx.dn355_sub_mbxes (i)); 1970 call get_line_number; 1971 if sub_mbx.io_cmd = wtx 1972 then do; 1973 if pcb.output_mbx_pending & sub_mbx.command_data (3) ^= "0"b 1974 then do; 1975 da = bin (sub_mbx.data_addr, 18) - tty_buf.absorig; 1976 blockp = ptr (ttybp, da); /* set ptr to buffer */ 1977 if pcb.connection_type = "10"b 1978 then pcbp = addr (fnp_info.pcb_array_ptr -> pcb_array (pcb.uncp_pcbx)); 1979 gateway_header = sub_mbx.command_data (3); 1980 call tty_space_man$free_chain ((pcb.devx), OUTPUT, blockp); 1981 end; 1982 end; 1983 if sub_mbx.io_cmd = rtx 1984 then if sub_mbx.word_cnt ^= 0 1985 then do; 1986 uncp_buf.cq_free = uncp_buf.cq_free + sub_mbx.word_cnt; 1987 sub_mbx.word_cnt = 0; 1988 end; 1989 datanet_mbx.mbx_used_flags.used (i) = "0"b; 1990 datanet_mbx.num_in_use = datanet_mbx.num_in_use - 1; 1991 end; 1992 end; 1993 return; 1994 end; /* purge_write_texte */ 1995 1996 check_lock: 1997 proc; 1998 1999 /* the cleanup procedure -- makes sure we don't crawl out with lock set */ 2000 2001 if queue_locked 2002 then call syserr (SYSERR_crash, "uncp: attempted crawlout with FNP queue locked"); 2003 2004 else if masked 2005 then call pmut$unwire_unmask (wire_arg, wire_ptr);/* it's probably too late, but just in case */ 2006 2007 return; 2008 end check_lock; 2009 2010 2011 /* Begin message documentation invisible 2012* 2013* * This documentation lacks the standard token heading but rather uses 2014* * lowercase and the keyword invisible so that the messages documented 2015* * below will not be included in the standard error message documentation 2016* * shipment. 2017* 2018* Message: 2019* uncp: invalid interrupt level N 2020* 2021* S: $beep 2022* 2023* T: $run 2024* 2025* M: An FNP interrupt has been received with an invalid interrupt level of 2026* octal value N and will be ignored. If this message is displayed when a 2027* DN6670 is being powered up, this message can be ignored. If this message 2028* occurs under any other circumstances, there might be something wrong with 2029* the system's interface with the FNP and should be investigated by FE 2030* representatives. 2031* 2032* A: $inform 2033* 2034* 2035* Message: 2036* uncp: emergency interrupt from FNP X: FAULT 2037* .br 2038* FNP instruction counter = IC 2039* .br 2040* channel CHN, fault status = FS 2041* .br 2042* FNP_MODULE: REASON_FOR_CRASH 2043* 2044* S: $beep 2045* 2046* T: $run 2047* 2048* M: An emergency interrupt has been received from FNP X indicating 2049* it has crashed. All lines dialed to FNP X will be hung up. The 2050* crash was nominally caused by a fault of type FAULT. Lines 2051* following the first line of the message appear only in certain cases 2052* and provide additional information about the nature of the crash. 2053* 2054* A: The system will automatically attempt to reboot the crashed FNP. 2055* Subsequent messages will indicate the success or failure of this attempt. 2056* No action is required now, but action may be required if the 2057* automatic reboot fails. 2058* 2059* 2060* Message: 2061* uncp$interrupt: no slot number match for sub mbx N, FNP X 2062* 2063* S: $beeper 2064* 2065* T: $run 2066* 2067* M: An error has occurred processing submailbox N for FNP X. 2068* The submailbox indicates a line number for which no match could 2069* be found. 2070* 2071* A: $inform 2072* 2073* 2074* Message: 2075* uncp: Message from FNP X: MESSAGE 2076* 2077* S: $info 2078* 2079* T: $run 2080* 2081* M: An error has been detected by FNP X as explained by MESSAGE. 2082* 2083* A: No action is required by the operator to deal with the error mentioned 2084* in the message. Action may be required by appropriate personnel to correct 2085* the problem that caused the error and undo what the FNP may have done to 2086* continue operation. This may require shutting down the FNP for repairs by 2087* Field Engineering and reboot of the FNP to restore full operation. 2088* 2089* 2090* Message: 2091* uncp$interrupt: unrecognized op code OPCODE with rcd from FNP X for devx N 2092* 2093* S: $beeper 2094* 2095* T: $run 2096* 2097* M: An invalid op code, OPCODE, has been received from FNP X for device 2098* index N in a mailbox containing an rcd (read control data) command. 2099* 2100* A: $inform 2101* 2102* 2103* Message: 2104* uncp$interrupt: unrecognized io command from FNP X for line N 2105* 2106* S: $beeper 2107* 2108* T: $run 2109* 2110* M: An invalid io command was received from FNP X for line N. 2111* 2112* A: $inform 2113* 2114* 2115* Message: 2116* uncp: output buffer at N has zero tally 2117* 2118* S: $crash 2119* 2120* T: $run 2121* 2122* M: An output buffer with a zero tally has been found at offset N 2123* in the segment tty_buf. 2124* 2125* A: $inform 2126* 2127* 2128* Message: 2129* uncp: unable to allocate block for delay queue 2130* 2131* S: $crash 2132* 2133* T: $run 2134* 2135* M: There was insufficient space left in tty_buf to allocate a block 2136* in which to build a delay queue. 2137* 2138* A: $inform 2139* 2140* 2141* Message: 2142* FNP X did not respond to mailbox interrupt 2143* 2144* S: $beep 2145* 2146* T: $run 2147* 2148* M: An attempt to interrupt FNP X was unsuccessful. The FNP is assumed 2149* to be down. 2150* 2151* A: The system will automatically attempt to reboot the crashed FNP. 2152* Subsequent messages will indicate the success or failure of this attempt. 2153* No action is required now, but action may be required if the 2154* automatic reboot fails. 2155* 2156* 2157* Message: 2158* uncp: inconsistent queue lock 2159* 2160* S: $crash 2161* 2162* T: $run 2163* 2164* M: A process attempted to unlock the interrupt queue lock without having it 2165* locked. 2166* 2167* A: $inform 2168* 2169* 2170* Message: 2171* uncp: LCTE lock ^= processid 2172* 2173* S: $crash 2174* 2175* T: $run 2176* 2177* M: The FNP channel lock did not contain the processid of the process 2178* attempting to unlock it. 2179* 2180* 2181* Message: 2182* uncp: attempted crawlout with FNP queue locked 2183* 2184* S: $crash 2185* 2186* T: $run 2187* 2188* M: An attempt was made to crawl out while an FNP queue lock (a processor 2189* lock) was locked. 2190* 2191* A: $inform 2192* 2193* 2194* Message: 2195* uncp$interrupt: line number of 0 with non-global opcode in submbx N, FNP X 2196* 2197* S: $beeper 2198* 2199* T: $run 2200* 2201* M: Mailbox N from FNP X contained a non-global opcode which requires a 2202* non-zero line number. 2203* 2204* 2205* Message: 2206* uncp: unable to re-assign fnp sub-mailbox. 2207* 2208* S: $crash 2209* 2210* T: $run 2211* 2212* M: During interrupt processing the sub-mailbox from the FNP is 2213* copied to local storage and the sub-mbx freed. As part of handling the 2214* interrupt a need to return information to the FNP was found. However the 2215* sub-mbx could not be re-assigned. 2216* $err 2217* 2218* A: $inform 2219* $recover 2220* 2221* End message documentation invisible */ 2222 2223 2224 end uncp; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0827.2 uncp.pl1 >spec>install>1112>uncp.pl1 240 1 01/06/85 1422.1 tty_buf.incl.pl1 >ldd>include>tty_buf.incl.pl1 1-152 2 01/06/85 1422.1 hc_fast_lock.incl.pl1 >ldd>include>hc_fast_lock.incl.pl1 242 3 07/21/88 2036.0 uncp_buf.incl.pl1 >ldd>include>uncp_buf.incl.pl1 244 4 07/21/88 2036.0 tty_buffer_block.incl.pl1 >ldd>include>tty_buffer_block.incl.pl1 246 5 11/08/82 1005.8 lct.incl.pl1 >ldd>include>lct.incl.pl1 247 6 07/21/88 2036.0 pcb.incl.pl1 >ldd>include>pcb.incl.pl1 248 7 10/26/89 2011.9 dn355_data.incl.pl1 >ldd>include>dn355_data.incl.pl1 258 8 10/20/82 0938.5 dn355_mailbox.incl.pl1 >ldd>include>dn355_mailbox.incl.pl1 262 9 10/20/82 0938.6 mailbox_ops.incl.pl1 >ldd>include>mailbox_ops.incl.pl1 264 10 10/20/82 0938.6 mcs_interrupt_info.incl.pl1 >ldd>include>mcs_interrupt_info.incl.pl1 266 11 09/12/79 1808.7 dn355_messages.incl.pl1 >ldd>include>dn355_messages.incl.pl1 268 12 07/10/86 2015.0 fnp_queue_entry.incl.pl1 >ldd>include>fnp_queue_entry.incl.pl1 269 13 05/06/80 0958.2 channel_manager_dcls.incl.pl1 >ldd>include>channel_manager_dcls.incl.pl1 270 14 06/18/81 0900.8 tty_space_man_dcls.incl.pl1 >ldd>include>tty_space_man_dcls.incl.pl1 272 15 08/06/87 0913.4 line_types.incl.pl1 >ldd>include>line_types.incl.pl1 273 16 05/28/82 1334.9 baud_rates.incl.pl1 >ldd>include>baud_rates.incl.pl1 275 17 08/06/87 0913.5 net_event_message.incl.pl1 >ldd>include>net_event_message.incl.pl1 277 18 07/11/84 0937.3 fnp_mpx_msg_.incl.pl1 >ldd>include>fnp_mpx_msg_.incl.pl1 278 19 07/11/84 0937.3 io_manager_dcls.incl.pl1 >ldd>include>io_manager_dcls.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ACCEPT_INPUT 000116 constant fixed bin(17,0) initial dcl 10-15 set ref 1210* 1537* BAUD_9600 constant fixed bin(17,0) initial dcl 164 ref 425 840 957 1002 1211 1255 BPC_10 constant fixed bin(17,0) initial dcl 168 ref 847 BPC_8 constant fixed bin(17,0) initial dcl 169 ref 849 CMD_DATA_LEN_3 constant fixed bin(17,0) initial dcl 173 ref 865 CONNECTION_TYPE_1 010724 constant bit(12) initial packed unaligned dcl 180 ref 962 CONNECTION_TYPE_2 010723 constant bit(12) initial packed unaligned dcl 181 ref 964 CRASH 000135 constant fixed bin(17,0) initial dcl 10-12 set ref 1888* DIALUP 000143 constant fixed bin(17,0) initial dcl 10-10 set ref 1038* EIGHT constant fixed bin(17,0) initial dcl 178 ref 1198 1206 FNP_DOWN constant fixed bin(17,0) initial dcl 155 ref 1954 HANGUP 000142 constant fixed bin(17,0) initial dcl 10-11 set ref 745* 884* INPUT 000124 constant bit(1) initial packed unaligned dcl 14-20 set ref 1189* 1474* INPUT_REJECTED 000063 constant fixed bin(17,0) initial dcl 10-16 set ref 1432* INT_LEVEL_1 constant fixed bin(17,0) initial dcl 160 ref 305 INT_LEVEL_3 constant fixed bin(17,0) initial dcl 161 ref 295 302 586 INT_LEVEL_7 constant fixed bin(17,0) initial dcl 162 ref 302 320 593 612 LINE_ASCII constant fixed bin(17,0) initial dcl 15-22 ref 835 1029 LINE_COLTS constant fixed bin(17,0) initial dcl 15-22 ref 856 LOOP_LIMIT constant fixed bin(17,0) initial dcl 153 ref 1784 1787 MAX_CHANNEL_BUFFER constant fixed bin(17,0) initial dcl 171 ref 856 MAX_FREE_BUFFERS 000014 constant fixed bin(35,0) initial dcl 166 ref 806 1372 MAX_MBX_REQ_CNT constant fixed bin(35,0) initial dcl 176 ref 1107 MCS_NETWORK_TYPE constant fixed bin(4,0) initial unsigned dcl 17-34 ref 628 NET_EVENT_MESSAGE_VERSION_1 constant bit(2) initial packed unaligned dcl 17-20 ref 627 OUTPUT 000123 constant bit(1) initial packed unaligned dcl 14-21 set ref 788* 1917* 1980* QUIT 000137 constant fixed bin(17,0) initial dcl 10-17 set ref 901* 1193* 1481* SEND_OUTPUT 000136 constant fixed bin(17,0) initial dcl 10-13 set ref 1214* 1233* 1250* 1335* 1599* SYSERR_announce 000124 constant fixed bin(17,0) initial dcl 143 set ref 295 988* 1043* 1192* 1477* SYSERR_beep 000135 constant fixed bin(17,0) initial dcl 145 set ref 304* 638* 1062* 1686* 1932* SYSERR_crash 000143 constant fixed bin(17,0) initial dcl 144 set ref 327* 537* 559* 562* 1285* 1435* 1630* 1771* 2001* SYSERR_log 000136 constant fixed bin(17,0) initial dcl 146 set ref 297 652* 675* 722* 1322* 1412* 1490* 1843* a_fnp_no parameter fixed bin(17,0) dcl 1868 set ref 1865 1873* a_fnpp parameter pointer dcl 361 ref 358 373 377 389 a_level parameter fixed bin(17,0) dcl 607 in procedure "process_int" ref 602 609 a_level parameter fixed bin(17,0) dcl 581 in procedure "dequeue" set ref 578 586* 593* a_mbx_no parameter fixed bin(17,0) dcl 1758 set ref 1754 1754 1765 1775* a_mbx_num parameter fixed bin(17,0) dcl 1224 ref 1221 1228 a_pcbp parameter pointer dcl 361 ref 358 370 a_sub_mbx_no parameter fixed bin(17,0) dcl 1709 in procedure "assign_sub_mbx" set ref 1706 1716* 1729* a_sub_mbx_no parameter fixed bin(17,0) dcl 1739 in procedure "release_sub_mbx" ref 1736 1741 1741 1743 a_subp parameter pointer dcl 1710 set ref 1706 1717* 1730* abs_buf_limit constant fixed bin(18,0) initial dcl 1-19 ref 1468 absorig 1 based fixed bin(24,0) level 2 dcl 1-35 ref 782 1313 1367 1451 1487 1568 1811 1819 1975 accept_direct_input constant fixed bin(8,0) initial dcl 9-65 ref 800 815 927 accept_direct_output constant fixed bin(8,0) initial dcl 9-24 set ref 412 442 468 908* 1138 1269* 1303 1325 1549* 1591* 1595* 1634 1807 1833 accept_last_output constant fixed bin(8,0) initial dcl 9-24 ref 1308 1816 1827 accept_new_terminal constant fixed bin(8,0) initial dcl 9-65 ref 823 1679 active_bit 30(21) based bit(1) array level 4 packed packed unaligned dcl 7-67 set ref 382* 943* 946 active_dial 30(21) based structure level 3 packed packed unaligned dcl 7-67 addr builtin function dcl 188 ref 314 317 324 334 390 391 478 503 513 515 518 553 639 639 655 655 665 665 666 668 705 710 710 715 715 717 721 750 778 867 870 994 1009 1018 1074 1147 1199 1200 1325 1354 1367 1389 1390 1394 1398 1400 1456 1496 1512 1517 1523 1528 1566 1614 1675 1695 1713 1730 1811 1819 1870 1871 1882 1884 1967 1969 1977 address 5 based structure level 2 packed packed unaligned dcl 8-36 auto_fnp_msg 000170 automatic structure level 1 dcl 222 set ref 1957 auto_net_event_message 000166 automatic structure level 1 dcl 221 set ref 626* 631 baud_rate 2 based fixed bin(17,0) level 2 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" set ref 424 759* 840* 852 961* 1002* 1002* 1211* 1254 baud_rate 0(18) 000242 automatic fixed bin(18,0) level 2 in structure "dialup_info" packed packed unsigned unaligned dcl 10-30 in procedure "uncp" set ref 1033* bin builtin function dcl 188 ref 782 1062 1062 1313 1313 1314 1385 1394 1451 1487 1568 1636 1811 1819 1975 bit builtin function dcl 188 ref 1313 1385 1394 1795 1811 1819 1847 bits_per_char 000154 automatic fixed bin(17,0) dcl 133 set ref 847* 849* 852 bleft 3 based fixed bin(18,0) level 2 dcl 1-35 ref 1468 1615 bleft_355 27 based fixed bin(17,0) level 2 dcl 7-67 set ref 804* 812 blockp 000216 automatic pointer dcl 4-19 set ref 434* 435 784* 785 788* 1181* 1182 1197* 1200 1202 1208 1284* 1285 1291 1292 1295 1299 1304 1306 1306 1313 1314 1316 1317 1318 1319 1322 1495* 1496 1505 1505 1519 1521* 1521 1523 1535 1976* 1979 1980* boot_ev_chan 36 based fixed bin(71,0) level 2 dcl 7-67 set ref 632* 1958* boot_process_id 40 based bit(36) level 2 dcl 7-67 set ref 632* 1958* bootloading 30(01) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 298* 305 311 395 663 1949 1952* break_acknowledged constant fixed bin(8,0) initial dcl 9-24 ref 905 break_char 1(18) 000244 automatic bit(1) level 3 packed packed unaligned dcl 10-38 set ref 1203* 1459* 1580 break_condition constant fixed bin(8,0) initial dcl 9-65 ref 895 bsizec constant fixed bin(17,0) initial dcl 1-28 ref 1472 1472 1498 1519 1524 buf_per_second constant fixed bin(17,0) initial dcl 1-29 ref 852 buf_words based fixed bin(17,0) array dcl 256 set ref 1322* 1490* buffer based structure level 1 dcl 4-28 buffer_in 0(02) 000000 constant bit(1) initial level 2 packed packed unaligned dcl 75 ref 1412 1490 buffer_out 0(03) 000000 constant bit(1) initial level 2 packed packed unaligned dcl 75 ref 1322 buffer_pad 0(09) 000242 automatic fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 10-30 set ref 1035* bufp 000114 automatic pointer dcl 114 set ref 1199* 1201 1451* 1452 1487* 1490 1502 1512* 1517* 1517 1568* 1573 1577 1582 caller_masked parameter bit(1) packed unaligned dcl 532 ref 527 541 547 566 chain_head 000244 automatic bit(18) level 3 packed packed unaligned dcl 10-38 set ref 1207* 1534* chain_tail 0(18) 000244 automatic bit(18) level 3 packed packed unaligned dcl 10-38 set ref 1208* 1535* chan_lctep 000150 automatic pointer dcl 131 set ref 1614* 1615 channel_desc based structure level 2 packed packed unaligned dcl 6-27 channel_manager$interrupt 000046 constant entry external dcl 13-25 ref 745 884 901 1038 1193 1210 1214 1233 1250 1335 1432 1481 1537 1599 1888 char_array based char(1) array packed unaligned dcl 1447 set ref 1517 1528 charp 000116 automatic pointer dcl 114 set ref 1200* 1201 1496* 1502 1523* 1528* 1528 chars 1 based char(1) array level 2 in structure "buffer" packed packed unaligned dcl 4-28 in procedure "uncp" set ref 1200 1496 1523 chars based char packed unaligned dcl 191 in procedure "uncp" set ref 1201* 1201 1502* 1502 chars_left 000133 automatic fixed bin(17,0) dcl 114 set ref 1494* 1500 1503* 1503 1507 1569* 1573 1573 1577 1577 1582 1582 1582 chars_to_move 000400 automatic fixed bin(17,0) dcl 1445 set ref 1497* 1501 1504* 1504 1509 1513* chrsa parameter fixed bin(8,0) dcl 361 ref 358 373 402 chx 000466 automatic fixed bin(35,0) level 2 dcl 1763 set ref 1854* circular_queue 11 based fixed bin(18,0) array level 2 dcl 3-19 set ref 1367 1384* 1512 circular_queue_size 2 based fixed bin(35,0) level 2 dcl 3-19 set ref 1372 1374* 1377* 1377 cleanup 000204 stack reference condition dcl 238 ref 499 cmd_count 0(09) based fixed bin(8,0) level 2 packed packed unaligned dcl 225 set ref 1146 1147 1650* cmd_data 1 based bit(288) level 2 packed packed unaligned dcl 225 set ref 1147 1655* cmd_data_len 1(09) based fixed bin(8,0) level 2 packed packed unaligned dcl 8-36 set ref 466* 829* 865* 906* 1146* cnt based fixed bin(18,0) level 2 in structure "gateway_buf" packed packed unsigned unaligned dcl 250 in procedure "uncp" set ref 1318* cnt parameter fixed bin(8,0) dcl 1624 in procedure "make_q_entry" ref 1621 1650 command 0(30) based bit(6) level 3 packed packed unaligned dcl 8-12 set ref 1784 command_data 2 based bit(36) array level 2 packed packed unaligned dcl 8-36 set ref 478 780 785 867 870 939 1147 1312* 1317* 1349 1389 1390 1394 1398 1400 1449* 1456 1566 1802* 1803* 1804* 1973 1979 config_flags 66 based structure level 2 dcl 7-67 connect_to_slave constant fixed bin(8,0) initial dcl 9-65 ref 936 connect_to_slave_nowait constant fixed bin(8,0) initial dcl 260 ref 936 connection_type 4(19) based bit(2) level 3 packed packed unaligned dcl 6-27 set ref 421 745 747 778 861* 884 918 962* 964* 970 984 1019 1031 1056 1325 1693 1830 1888 1977 count 24 based fixed bin(17,0) level 2 in structure "fnp_info" dcl 7-67 in procedure "uncp" set ref 1095 1122 1167* 1646* 1646 1893 1895 1903* count parameter fixed bin(17,0) dcl 1611 in procedure "enough_input_space" ref 1608 1615 counter 000463 automatic fixed bin(17,0) dcl 1760 set ref 1784* 1787 cq_free 6 based fixed bin(18,0) level 2 dcl 3-19 set ref 1359 1362 1370* 1370 1377 1412* 1546* 1546 1986* 1986 cq_lock 10 based bit(36) level 2 dcl 3-19 set ref 1354 1435 cq_max_size 7 based fixed bin(17,0) level 2 dcl 3-19 ref 1358 1377 1392 1396 1408 cq_next 5 based fixed bin(18,0) level 2 dcl 3-19 set ref 1358 1362* 1384 1385 1387* 1387 1392 1396* 1396 1398 1408 1408* 1412* cumulative_mbx_in_use 55 based fixed bin(35,0) level 2 dcl 7-67 set ref 730* 730 1725* 1725 1746* 1746 cur_ptr 25 based fixed bin(17,0) level 2 dcl 7-67 set ref 1121 1165* 1637 1637* 1896 1903* da 000101 automatic fixed bin(24,0) dcl 106 set ref 782* 784 1975* 1976 data parameter bit packed unaligned dcl 361 ref 358 373 380 382 403 data_addr 5 based bit(18) level 3 packed packed unaligned dcl 8-36 set ref 782 1313* 1385* 1451 1487 1568 1811* 1819* 1975 data_len 000260 automatic fixed bin(8,0) dcl 368 set ref 402* 403 403 450* 466 478 databits parameter bit(288) packed unaligned dcl 1624 ref 1621 1655 datanet_info based structure level 1 dcl 7-52 datanet_mbx based structure level 1 dcl 8-12 dcw_list_array_ptr 4 based pointer level 2 dcl 7-67 ref 1799 devx based fixed bin(17,0) level 3 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" ref 460 788 1134 1177 1691 1696 1888 1917 1980 devx 000137 automatic fixed bin(17,0) dcl 114 in procedure "uncp" set ref 460* 740 745* 762 825 884* 901* 1038* 1043 1043* 1134* 1177* 1189* 1193* 1210* 1214* 1233* 1250* 1335* 1432* 1474* 1481* 1537* 1599* 1614 1665* 1681* 1691* 1696* dia_pcw based structure level 2 dcl 8-12 set ref 1846* 1850* 1850 1850 dial constant fixed bin(8,0) initial dcl 9-24 ref 378 dial_name 000016 constant char(8) initial array packed unaligned dcl 96 set ref 943 943 988* 999 1002 1002 1192* 1199 dialed 4(01) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 407 470 742 751 758* 859* 881 887* 897 916 929 968* 1019 1138 1885 dialup_info 000242 automatic structure level 1 dcl 10-30 set ref 1037 disconnect_accepted constant fixed bin(8,0) initial dcl 9-24 ref 762 889 disconnect_this_line constant fixed bin(8,0) initial dcl 9-24 ref 407 740 764 949 disconnected_line constant fixed bin(8,0) initial dcl 9-65 ref 879 divide builtin function dcl 188 ref 466 852 852 854 1146 1315 1352 1472 1490 1490 1615 dn355_data$ 000044 external static fixed bin(17,0) dcl 7-47 set ref 391 515 1870 dn355_no based bit(3) level 2 packed packed unaligned dcl 8-36 set ref 1795* dn355_sub_mbxes 10 based structure array level 2 dcl 8-12 set ref 668 720 1727* 1730 1969 dn355_util$compute_parity 000020 constant entry external dcl 207 ref 1850 dno 000126 automatic fixed bin(17,0) dcl 114 set ref 305* 400* 514* 518 629 658* 678* 1043 1043 1062 1062 1686 1686 1949* 1955 dumpout 4(17) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 412 416* 859* 1212* end_frame 4(05) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 440 1230 1295* 1304* 1580 1589* 1922* end_of_page 0(18) based bit(1) level 3 packed packed unaligned dcl 4-28 ref 1295 1306 enter_receive constant fixed bin(8,0) initial dcl 9-24 ref 419 976 1014 1058 1241 1796 enter_receive_pending 4(12) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 439* 859* 1239 1591 1821* extra_nl 4(14) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 938* 958* 999* 1573 fault_name 000177 automatic char(16) packed unaligned dcl 235 set ref 637* 638* ff_cr_lf 000013 constant char(3) initial packed unaligned dcl 201 ref 1582 fixed builtin function dcl 188 ref 1349 1367 1671 1673 1811 1819 1847 flags 1(18) 000244 automatic structure level 2 in structure "rtx_info" packed packed unaligned dcl 10-38 in procedure "uncp" flags 1 000170 automatic structure level 2 in structure "auto_fnp_msg" packed packed unaligned dcl 222 in procedure "uncp" set ref 1956* flags 4 based structure level 2 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" flags 0(18) based structure level 2 in structure "buffer" packed packed unaligned dcl 4-28 in procedure "uncp" flags 2(09) based structure level 2 in structure "lcte" packed packed unaligned dcl 5-20 in procedure "uncp" flags 30 based structure level 2 in structure "fnp_info" dcl 7-67 in procedure "uncp" fnp_event_message 000172 automatic fixed bin(71,0) dcl 223 set ref 1957* 1958* fnp_id 7 based structure level 2 dcl 7-67 fnp_info based structure level 1 dcl 7-67 fnp_msg based structure level 1 dcl 18-6 fnp_name 000143 automatic char(1) dcl 123 set ref 298* 304* 519* fnp_no parameter fixed bin(17,0) dcl 1880 in procedure "hangup_fnp" ref 1877 1882 fnp_no 000170 automatic fixed bin(17,0) level 2 in structure "auto_fnp_msg" packed packed unaligned dcl 222 in procedure "uncp" set ref 1955* fnp_number 7(09) based fixed bin(9,0) level 3 packed packed unsigned unaligned dcl 7-67 ref 400 1795 fnp_queue_entry based structure level 1 dcl 12-19 fnp_tag 7 based char(1) level 3 packed packed unaligned dcl 7-67 set ref 519 638* 1932* fnpp 000232 automatic pointer dcl 7-50 set ref 295 298 298 298 305 311 311 311 317 320 322 327 334 377* 382 389* 393 395 395 400 401 451 451 481 481 503 518* 519 520 521 522 535 535 537 553 562 583 585 590 592 615 617 619 620 624 632 632 638 640 656 659 659 663 679 679 688 690 692 696 730 730 731 731 750 778 804 806 808 809 812 812 812 813 813 815 815 817 817 943 946 973 975 979 979 986 994 994 997 1006 1007 1009 1009 1011 1011 1012 1016 1017 1017 1018 1019 1019 1095 1121 1122 1149 1149 1162 1162 1165 1167 1168 1270 1270 1325 1330 1330 1431 1431 1637 1637 1640 1644 1646 1646 1647 1647 1671 1673 1674 1675 1695 1724 1724 1725 1725 1726 1726 1746 1746 1747 1747 1778 1795 1799 1854 1855 1882* 1883 1884 1893 1895 1896 1903 1903 1903 1932 1944 1949 1952 1958 1958 1977 form_feed 010722 constant char(1) initial packed unaligned dcl 204 ref 1577 formfeed_present 1(21) 000244 automatic bit(1) level 3 packed packed unaligned dcl 10-38 set ref 1559* 1577* free_count 62 based fixed bin(17,0) level 2 dcl 7-67 set ref 809* 813* 813 free_size 61 based fixed bin(35,0) level 2 dcl 7-67 set ref 806 808* 812* 812 gateway_buf based structure level 1 dcl 250 gateway_header based bit(36) packed unaligned dcl 254 set ref 785* 1317 1979* handle 1 000166 automatic fixed bin(35,0) level 2 dcl 221 set ref 629* hbound builtin function dcl 188 ref 715 hc_fast_lock based structure level 1 dcl 2-10 high_speed 4(03) based bit(1) level 3 packed packed unaligned dcl 6-27 ref 867 hndlquit 4(06) based bit(1) level 3 packed packed unaligned dcl 6-27 ref 899 hsla_idx 21 based fixed bin(17,0) array level 2 dcl 7-67 ref 1016 1671 i 000127 automatic fixed bin(17,0) dcl 114 set ref 715* 717 719* 1686* 1966* 1967 1969 1989* ima 000466 automatic structure level 1 dcl 1763 set ref 1856* in 10 based structure level 3 in structure "lcte" dcl 5-20 in procedure "uncp" in 30 based structure array level 4 in structure "lct" dcl 5-11 in procedure "uncp" in 2 based structure level 2 in structure "saved_meters" dcl 5-68 in procedure "uncp" in_bytes 6 based fixed bin(35,0) level 3 dcl 5-20 set ref 1457* 1457 in_mbx parameter bit(1) packed unaligned dcl 1556 ref 1553 1585 inchain 000147 automatic bit(18) packed unaligned dcl 129 set ref 1196* 1207 1485* 1534 inchain_ptr 000152 automatic pointer dcl 132 set ref 1189* 1190 1196 1197 1474* 1475 1485 1495 index builtin function dcl 188 ref 962 964 1713 infop 000230 automatic pointer dcl 7-49 set ref 293 391* 392 515* 516 518 1870* 1872 1882 init_complete constant fixed bin(8,0) initial dcl 9-24 ref 395 672 initial_pcw 000015 constant bit(36) initial packed unaligned dcl 157 ref 1846 input_accepted constant fixed bin(8,0) initial dcl 9-24 ref 1416 input_bpart constant fixed bin(18,0) initial dcl 1-19 ref 1615 input_chain 000244 automatic structure level 2 packed packed unaligned dcl 10-38 input_chars based char packed unaligned dcl 194 set ref 1573* 1577 1582 input_control_transactions 53 based fixed bin(35,0) level 2 dcl 7-67 set ref 817* 817 input_count 000146 automatic fixed bin(17,0) dcl 128 in procedure "uncp" set ref 1349* 1352 1398 1400 1461* 1462 1467 1468 1472 1490* 1490 1490 input_count 1 000244 automatic fixed bin(18,0) level 2 in structure "rtx_info" packed packed unsigned unaligned dcl 10-38 in procedure "uncp" set ref 1206* 1467* input_data_transactions 51 based fixed bin(35,0) level 2 dcl 7-67 set ref 815* 815 input_reject_count 46 based fixed bin(17,0) level 2 dcl 7-67 set ref 1431* 1431 input_words 5 based fixed bin(17,0) level 3 packed packed unaligned dcl 5-20 ref 1615 interrupt_entry 000145 automatic bit(1) packed unaligned dcl 127 in procedure "uncp" set ref 289* 342 387* 497* interrupt_entry parameter bit(1) dcl 1226 in procedure "process_send_output" ref 1221 1335 interrupt_info 000240 automatic bit(72) dcl 10-28 set ref 1037* 1038* 1209* 1210* 1536* 1537* io_cmd 1(27) based fixed bin(8,0) level 2 packed packed unaligned dcl 8-36 set ref 477* 672 738 775 798 827* 872* 888* 904* 948* 1053 1062* 1104* 1144* 1320* 1417* 1426* 1679 1684 1688* 1798* 1837 1837 1971 1983 io_manager$connect_direct 000060 constant entry external dcl 19-32 ref 1856 io_manager_arg based structure level 1 dcl 19-50 io_manager_assigned 66(01) based bit(1) level 3 packed packed unaligned dcl 7-67 ref 1778 io_manager_chx 12 based fixed bin(35,0) level 2 dcl 7-67 ref 1854 is_hsla 0(08) based bit(1) level 3 packed packed unaligned dcl 8-36 set ref 1669* 1671 1841* ix 000130 automatic fixed bin(17,0) dcl 114 set ref 380* 380* 382 382 424* 425 939* 939* 941 943 943 943 946 955 957* 961 962 964 988 999 1002 1002 1033 1192 1199 1254* 1255 j 000136 automatic fixed bin(17,0) dcl 114 set ref 843* 843* 845 975 979 996 1016* 1017* 1017* 1018 1019 1019* 1314* 1315 1318 1352* 1359 1359* 1362 1362 1370 1387 1398 1406 1412* 1671* 1673* 1674* 1674* 1675* 1883* 1884* k 000135 automatic fixed bin(17,0) dcl 114 set ref 1358* 1362 1362 la_no 0(09) based bit(3) level 3 packed packed unaligned dcl 8-36 set ref 1670 lano 000141 automatic bit(3) packed unaligned dcl 114 set ref 1670* 1671 1673 last_mbx_req_count 3 based fixed bin(17,0) level 2 dcl 8-12 set ref 1099 1106* 1106 1107 1107* last_ptr 26 based fixed bin(17,0) level 2 dcl 7-67 set ref 1168* 1640 1644* 1903* lbound builtin function dcl 188 ref 715 lct based structure level 1 dcl 5-11 lct_ptr 6 based pointer level 2 dcl 1-35 ref 1613 lcte based structure level 1 dcl 5-20 lcte_array 20 based structure array level 2 dcl 5-11 set ref 1614 lcte_ptr 32 based pointer level 2 dcl 7-67 ref 393 521 lctep 000222 automatic pointer dcl 5-8 set ref 314 324 345 345 348 352 393* 521* 558 559 570 572 611 1457 1457 lctp 000220 automatic pointer dcl 5-7 set ref 1613* 1614 ldac 000016 constant entry external dcl 207 ref 639 655 665 710 left_in_buffer 000401 automatic fixed bin(17,0) dcl 1446 set ref 1498* 1501 1524* 1529* 1529 length builtin function dcl 188 ref 402 level 000125 automatic fixed bin(17,0) dcl 114 set ref 292* 295 298* 302 302 304* 305 320 332* 534* 545* 609* 612 630 level_3_pending 30(05) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 322* 583 585* level_7_pending 30(06) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 320* 590 592* lfecho 4(16) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 938* 958* 1539 line_number 0(08) based structure level 2 in structure "sub_mbx" packed packed unaligned dcl 8-36 in procedure "uncp" set ref 458* 463* 753* 1013* 1062 1062 1133* 1136* 1274* 1325* 1667 1676 line_number 0(26) based structure level 3 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" ref 458 753 1013 1133 1274 1325 1477 1477 1676 line_number 0(08) 000104 automatic structure level 2 in structure "local_sub_mbx" packed packed unaligned dcl 112 in procedure "uncp" line_type 000242 automatic fixed bin(9,0) level 2 in structure "dialup_info" packed packed unsigned unaligned dcl 10-30 in procedure "uncp" set ref 1029* line_type 2(18) based fixed bin(17,0) level 2 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" set ref 835* 843 856 load 000000 constant bit(1) initial level 2 packed packed unaligned dcl 75 ref 652 675 local_sub_mbx 000104 automatic structure level 1 dcl 112 set ref 720* 721 1774 lock based bit(36) level 2 dcl 5-20 set ref 314 324 345 559 locked_for_interrupt 2(12) based bit(1) level 3 packed packed unaligned dcl 5-20 set ref 352* 558* 611* lsla_idx 13 based fixed bin(17,0) array level 2 dcl 7-67 ref 1673 mailbox 0(01) 000000 constant bit(1) initial level 2 packed packed unaligned dcl 75 ref 722 1843 mailbox_requests 1 based fixed bin(17,0) level 2 dcl 8-12 set ref 648 650* 650 1099 masked 000162 automatic bit(1) packed unaligned dcl 138 set ref 500* 543* 549* 568* 2004 max builtin function dcl 188 ref 1724 max_buf_chars 000155 automatic fixed bin(17,0) dcl 134 set ref 852* 854 max_buf_size 1 000242 automatic fixed bin(9,0) level 2 in structure "dialup_info" packed packed unsigned unaligned dcl 10-30 in procedure "uncp" set ref 1034* max_buf_size 3 based fixed bin(17,0) level 2 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" set ref 854* 856* 1034 max_mbx_in_use 56 based fixed bin(17,0) level 2 dcl 7-67 set ref 1724* 1724 max_no_355s internal static fixed bin(17,0) initial dcl 7-45 ref 7-52 max_special_name constant fixed bin(17,0) initial dcl 81 ref 380 382 939 941 955 mbx_in_use_updated 57 based fixed bin(35,0) level 2 dcl 7-67 set ref 731* 731 1726* 1726 1747* 1747 mbx_no 000462 automatic fixed bin(17,0) dcl 1759 in procedure "send_mbx" set ref 1765* 1766 1768* 1769 1775 1793 1793 1843* 1847 mbx_no 0(24) based bit(6) level 3 in structure "datanet_mbx" packed packed unaligned dcl 8-12 in procedure "uncp" set ref 1847* mbx_num 000360 automatic fixed bin(17,0) dcl 1225 set ref 1228* 1242* 1264 1266* 1267 1329* mbx_pt based pointer level 2 dcl 7-67 ref 401 520 mbx_unavailable 60 based fixed bin(35,0) level 2 dcl 7-67 set ref 451* 451 1162* 1162 1270* 1270 mbx_used_flags 5 based structure level 2 dcl 8-12 mbxp 000236 automatic pointer dcl 8-100 set ref 401* 520* 639 639 648 650 650 655 655 665 665 668 669 671 671 705 710 710 720 725 729 729 730 1074 1099 1099 1106 1106 1107 1107 1713 1721 1723 1723 1724 1725 1727 1730 1743 1746 1748 1748 1784 1846 1847 1850 1850 1850 1969 1989 1990 1990 meters 6 based structure level 2 in structure "lcte" dcl 5-20 in procedure "uncp" meters 26 based structure array level 3 in structure "lct" dcl 5-11 in procedure "uncp" min builtin function dcl 188 ref 402 854 1501 n_pcbs 000224 automatic fixed bin(17,0) dcl 6-22 set ref 522* n_sync_line_types constant fixed bin(17,0) initial dcl 15-50 ref 843 845 nblocks 000142 automatic fixed bin(17,0) dcl 114 set ref 1472* 1474* net_event_message based structure level 1 dcl 17-22 net_event_message_arg 000246 automatic fixed bin(71,0) dcl 17-19 set ref 631* 632* network_type 0(24) 000166 automatic fixed bin(4,0) level 2 packed packed unsigned unaligned dcl 221 set ref 628* new_qp 000174 automatic pointer dcl 227 set ref 1627* 1628 1636 1645 new_qrel 000176 automatic fixed bin(17,0) dcl 228 set ref 1636* 1637 1641 1644 next based fixed bin(18,0) level 2 in structure "buffer" packed packed unsigned unaligned dcl 4-28 in procedure "uncp" set ref 1291 1316* 1521 next 11 based fixed bin(17,0) level 2 in structure "q_entry" dcl 225 in procedure "uncp" set ref 1155 1641* 1654* 1899 no_of_channels 6 based fixed bin(17,0) level 2 dcl 7-67 ref 522 1017 1674 1883 no_response 000144 automatic bit(1) dcl 125 set ref 399* 487 700* 717 1074 1081 1152 1780* 1787* 1791* notify_reqd 2(11) based bit(1) level 3 packed packed unaligned dcl 5-20 set ref 345 348* 570 572* null builtin function dcl 188 ref 376 407 456 1190 1475 1628 1651 1664 1717 num_in_use 4 based fixed bin(17,0) level 2 dcl 8-12 set ref 671* 671 729* 729 730 1723* 1723 1724 1725 1746 1748* 1748 1990* 1990 numchars 000134 automatic fixed bin(17,0) dcl 114 set ref 1198* 1201 1201 1202 1501* 1502 1502 1503 1504 1505 1517 1528 1529 1585* op_code 1(18) based fixed bin(8,0) level 2 packed packed unaligned dcl 8-36 set ref 465* 672 740 762 764* 800 800 815 823 828* 863* 879 889* 895 905* 914 927 936 936 949* 976* 1014* 1043* 1058* 1145* 1241* 1303* 1308* 1325 1416* 1428* 1679 1796 1807* 1816* 1827 1833* opa parameter fixed bin(8,0) dcl 361 ref 358 373 378 394 opc parameter fixed bin(8,0) dcl 1624 ref 1621 1634 1649 opcode based fixed bin(8,0) level 2 packed packed unaligned dcl 225 set ref 1138 1145 1649* operation 000140 automatic fixed bin(8,0) dcl 114 set ref 394* 395 407 412 419 442* 450* 465 468 other_pcbp 000122 automatic pointer dcl 114 set ref 750* 751 753 994* 996 999 1002 1009* 1013 1018* 1019 1019 1019 1695* 1696 output_control_transactions 54 based fixed bin(35,0) level 2 dcl 7-67 set ref 481* 481 1149* 1149 output_data based bit(36) array dcl 1762 set ref 1800* 1808* 1809* 1811 1817* 1819 output_data_ptr 000464 automatic pointer dcl 1761 set ref 1799* 1800 1808 1809 1811 1817 1819 output_data_transactions 52 based fixed bin(35,0) level 2 dcl 7-67 set ref 1330* 1330 output_in_fnp 1(19) 000244 automatic bit(1) level 3 packed packed unaligned dcl 10-38 set ref 1204* 1465* output_in_ring_0 1(20) 000244 automatic bit(1) level 3 packed packed unaligned dcl 10-38 set ref 1205* 1466* output_mbx_pending 4(08) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 777* 1230 1328* 1824* 1973 pad 0(18) based bit(18) level 2 in structure "gateway_buf" packed packed unaligned dcl 250 in procedure "uncp" set ref 1319* pad 1(10) 000242 automatic bit(26) level 2 in structure "dialup_info" packed packed unaligned dcl 10-30 in procedure "uncp" set ref 1036* pad3 6 based bit(72) level 2 packed packed unaligned dcl 8-36 set ref 1837* pcb based structure level 1 dcl 6-27 pcb_array based structure array level 1 dcl 6-25 set ref 750 778 994 1009 1018 1325 1675 1695 1884 1977 pcb_array_ptr 2 based pointer level 2 dcl 7-67 ref 750 778 994 1009 1018 1325 1675 1695 1884 1977 pcb_offset 0(18) based bit(18) level 2 packed packed unaligned dcl 225 set ref 1130 1132 1651* 1653* pcbp 000226 automatic pointer dcl 6-23 set ref 370* 376* 407 407 412 416 421 424 427 432 434 439 440 440 456 458 460 470 742 745 747 747 750 758 759 777 778 778* 778 788 835 836 840 843 845 847 852 854 856 856 859 859 859 859 859 861 867 881 884 887 897 899 902 916 918 918 929 938 938 958 958 958 961 962 964 968 970 972 984 997 998 1002 1031 1034 1056 1132* 1133 1134 1138 1176 1177 1179 1181 1182 1187 1211 1212 1230 1230 1232 1233 1239 1239 1246 1249 1254 1261 1274 1279 1284 1285 1291 1292 1292 1295 1299 1304 1309 1325 1325 1328 1332 1334 1466 1477 1477 1538 1539 1539 1560 1573 1580 1589 1590 1591 1595 1595 1634 1651 1651 1664* 1675* 1676 1691 1693 1695 1805 1813 1821 1821 1824 1830 1832 1884* 1885 1888 1888 1915 1917 1917 1917 1918 1918 1918 1922 1973 1977 1977* 1977 1980 pds$processid 000012 external static bit(36) dcl 199 ref 314 317 324 327 334 345 503 537 553 559 562 1354 1435 per_datanet 22 based structure array level 2 dcl 7-52 set ref 518 1882 pmut$unwire_unmask 000040 constant entry external dcl 220 ref 541 566 2004 pmut$wire_and_mask 000036 constant entry external dcl 219 ref 501 550 processed_from_q 47 based fixed bin(35,0) level 2 dcl 7-67 set ref 535* 535 ptp 4 000466 automatic pointer level 2 in structure "ima" dcl 1763 in procedure "send_mbx" set ref 1855* ptp 71 based pointer level 2 in structure "fnp_info" packed packed unaligned dcl 7-67 in procedure "uncp" ref 1855 ptr builtin function dcl 188 ref 434 784 1129 1132 1181 1284 1451 1487 1521 1568 1640 1898 1917 1917 1976 pxss$notify 000034 constant entry external dcl 207 ref 349 573 623 pxss$ring_0_wakeup 000030 constant entry external dcl 207 ref 1958 pxss$unique_ring_0_wakeup 000032 constant entry external dcl 207 ref 632 q_count 000132 automatic fixed bin(17,0) dcl 114 set ref 1122* 1125 1156* 1156 1167 1168 1895* 1897* 1897* q_entries_made 45 based fixed bin(35,0) level 2 dcl 7-67 set ref 1647* 1647 q_entry based structure level 1 dcl 225 set ref 1157 1157 1627 1627 1900 1900 q_first 000131 automatic fixed bin(17,0) dcl 114 set ref 1121* 1129 1155* 1165 1896* 1897 1898 1899* qorig 000100 automatic fixed bin(24,0) dcl 106 set ref 1367* 1385 1394 qptr 000120 automatic pointer dcl 114 set ref 1129* 1130 1132 1138 1145 1146 1147 1147 1155 1157 1157 1157* 1627 1627 1640* 1641 1645* 1649 1650 1651 1653 1654 1655 1898* 1899 1900 1900 1900* queue_ave_cnt 3 based fixed bin(18,0) level 2 dcl 3-19 set ref 1375* 1381* 1381 queue_full_cnt 4 based fixed bin(18,0) level 2 dcl 3-19 set ref 1424* 1424 queue_lock 43 based bit(36) level 2 dcl 7-67 set ref 317 327 334 503 537 553 562 queue_locked 000163 automatic bit(1) packed unaligned dcl 139 set ref 505* 540* 555* 565* 2001 rcd constant fixed bin(8,0) initial dcl 9-14 ref 798 1104 1679 real_word_cnt 000376 automatic fixed bin(17,0) dcl 1444 set ref 1452* 1453 1457 1461 1494 1497 1569 1587* real_wrap_cnt 000377 automatic fixed bin(17,0) dcl 1444 set ref 1456* 1461 1494 1509 1513 receive_mode_device 1(09) 000242 automatic bit(1) level 2 packed packed unaligned dcl 10-30 set ref 1030* 1031* reject_request_temp constant fixed bin(8,0) initial dcl 9-24 ref 1428 rel builtin function dcl 188 ref 1196 1208 1313 1367 1485 1535 1636 1651 1811 1819 rtx constant fixed bin(8,0) initial dcl 9-14 ref 1053 1417 1837 1983 rtx_info 000244 automatic structure level 1 dcl 10-38 set ref 1209 1536 running 30(02) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 295 298* 311 395 640 656 696 1944* send_lf 4(15) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 836* 1239 1539* 1805 1813* send_output constant fixed bin(8,0) initial dcl 9-65 in procedure "uncp" ref 800 914 send_output 4(02) based bit(1) level 3 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" set ref 440 859* 1176* 1232* 1249* 1279* 1595 1634* size builtin function dcl 188 ref 1157 1157 1627 1627 1900 1900 smbx_cmd_data_long based bit(216) packed unaligned dcl 196 set ref 478* 1147* special_name 000046 constant bit(36) initial array packed unaligned dcl 82 ref 380 939 962 964 stac builtin function dcl 188 ref 314 317 324 334 503 553 1354 stacq builtin function dcl 188 ref 327 345 537 559 562 1435 state 0(18) 000170 automatic fixed bin(17,0) level 2 packed packed unaligned dcl 222 set ref 1954* string builtin function dcl 188 set ref 458* 458 463* 753* 753 1013* 1013 1062 1062 1133* 1133 1136* 1274* 1274 1325* 1325 1477 1477 1667 1676 1676 1846* 1850* 1850 1850 sub_mbx based structure level 1 dcl 8-36 set ref 1774* sub_mbx_array based bit(36) array dcl 111 set ref 722* 1843* sub_mbx_no 000103 automatic fixed bin(17,0) dcl 110 set ref 447* 448 473* 480* 484* 719* 720 722* 725 727* 754* 830* 873* 890* 907* 920* 950* 977* 1015* 1039* 1059* 1101* 1102 1105* 1109* 1123* 1125 1126* 1127 1138* 1148* 1158* 1418* 1430* sub_mbx_num 000444 automatic fixed bin(17,0) dcl 1711 set ref 1713* 1714 1721 1727 1729 1730 sub_mbx_sent 000102 automatic bit(1) packed unaligned dcl 109 set ref 484 1109 1158 1728* 1857* subp 000234 automatic pointer dcl 8-99 set ref 447* 458 463 465 466 477 478 668* 672 672 721* 722 738 740 753 762 764 775 780 782 785 798 800 800 815 823 827 828 829 863 865 867 870 872 879 888 889 895 904 905 906 914 927 936 936 939 948 949 976 1013 1014 1043 1053 1058 1062 1062 1062 1101* 1104 1126* 1133 1136 1144 1145 1146 1147 1241 1266* 1274 1303 1308 1312 1313 1315 1317 1320 1322 1325 1325 1349 1385 1389 1390 1394 1398 1400 1400 1406 1416 1417 1426 1428 1449 1451 1456 1487 1546 1566 1568 1667 1669 1670 1671 1676 1679 1679 1684 1688 1768* 1774 1795 1796 1798 1802 1803 1804 1807 1810 1811 1816 1818 1819 1827 1833 1837 1837 1837 1841 1843 1969* 1971 1973 1975 1979 1983 1983 1986 1987 substr builtin function dcl 188 set ref 380 382 403 478 1043 1043 1062 1062 1147 1349 1573* 1577 1582 1686 1686 1795 sync_line 4(04) based bit(1) level 3 packed packed unaligned dcl 6-27 set ref 845* 847 1560 sync_line_type 000001 constant fixed bin(17,0) initial array dcl 15-52 ref 843 syserr 000014 constant entry external dcl 207 ref 298 304 327 537 559 562 638 652 675 722 988 1043 1062 1192 1285 1322 1412 1435 1477 1490 1630 1686 1771 1843 1932 2001 syserr_severity 000164 automatic fixed bin(35,0) dcl 141 set ref 295* 297* 298* t_and_d_in_progress 30(08) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 298* 311 615 688 t_and_d_lev_3_occurred 30(09) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 690 692* t_and_d_lev_7_occurred 30(10) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 617 619* t_and_d_notify_requested 30(11) based bit(1) level 3 packed packed unaligned dcl 7-67 set ref 620 624* tally 0(27) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 4-28 set ref 1202* 1285 1292 1314 1505* 1505 1519 tc_data$system_shutdown 000010 external static fixed bin(17,0) dcl 198 ref 287 tdata 000250 automatic bit(288) packed unaligned dcl 367 set ref 402 403* 405* 450* 478 term_inpt_mpx_wd 2 based bit(36) level 2 dcl 8-12 set ref 639 639 655 655 665 665 710 710 terminal_accepted constant fixed bin(8,0) initial dcl 9-24 ref 863 terminal_rejected constant fixed bin(8,0) initial dcl 9-24 ref 828 timw 000124 automatic fixed bin(24,0) dcl 114 set ref 639* 655* 665* 666 710* 715 715 717 1967 timwb based bit(1) array packed unaligned dcl 183 ref 666 715 715 717 1967 trace 000000 constant structure level 1 packed packed unaligned dcl 75 in procedure "uncp" trace 5 based bit(1) level 2 in structure "datanet_info" dcl 7-52 in procedure "uncp" ref 293 tty_buf based structure level 1 dcl 1-35 tty_buf$ 000042 external static fixed bin(17,0) dcl 1-19 set ref 390 513 1871 tty_ev 000015 constant fixed bin(17,0) initial dcl 1-19 set ref 349* 573* 623* tty_space_man$free_chain 000056 constant entry external dcl 14-16 ref 788 1917 1980 tty_space_man$free_space 000052 constant entry external dcl 14-12 ref 1157 1900 tty_space_man$get_chain 000054 constant entry external dcl 14-15 ref 1189 1474 tty_space_man$get_space 000050 constant entry external dcl 14-10 ref 1627 ttybp 000212 automatic pointer dcl 1-19 set ref 390* 434 513* 782 784 1129 1132 1181 1284 1313 1367 1451 1451 1468 1487 1487 1521 1568 1568 1613 1615 1640 1811 1819 1871* 1898 1917 1917 1975 1976 turn 0(22) based bit(1) level 3 in structure "buffer" packed packed unaligned dcl 4-28 in procedure "uncp" set ref 435* 1182 1299* 1304 1306 turn 4(13) based bit(1) level 3 in structure "pcb" packed packed unaligned dcl 6-27 in procedure "uncp" set ref 427* 859* 902* 918* 958* 998* 1182* 1187 1233 1261 1309* 1538* 1590* 1821* 1832* type 0(28) 000166 automatic fixed bin(8,0) level 2 packed packed unsigned unaligned dcl 221 set ref 630* unal_number based fixed bin(17,0) packed unaligned dcl 191 set ref 867* 870* 1452 uncp_boot_interrupt 000022 constant entry external dcl 207 ref 678 uncp_boot_interrupt$request_init 000026 constant entry external dcl 207 ref 658 uncp_boot_interrupt$system_fault 000024 constant entry external dcl 207 ref 305 uncp_buf based structure level 1 dcl 3-19 uncp_bufp 10 based pointer level 2 dcl 7-52 ref 392 516 1872 uncp_pcbx 4(27) based fixed bin(9,0) level 3 packed packed unsigned unaligned dcl 6-27 set ref 747 750 778 972* 996* 997* 1019 1325 1695 1977 uncp_pcbx1 67 based fixed bin(17,0) level 2 packed packed unaligned dcl 7-67 set ref 659* 679* 973 975* 986 994 997 1006* 1011* 1019 uncp_pcbx2 67(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 7-67 set ref 659* 679* 979 979* 1007 1009 1011 1012* 1017 1019* uncpbp 000214 automatic pointer dcl 3-16 set ref 392* 516* 1354 1358 1358 1359 1362 1362 1367 1370 1370 1372 1374 1375 1377 1377 1377 1377 1381 1381 1384 1384 1385 1387 1387 1392 1392 1396 1396 1396 1398 1408 1408 1408 1412 1412 1424 1424 1435 1512 1546 1546 1872* 1986 1986 unspec builtin function dcl 188 set ref 626* 631* 631 648 720* 720 1037 1209 1536 1727* 1774* 1774 1808* 1809* 1957* 1957 used 5 based bit(1) array level 3 packed packed unaligned dcl 8-12 set ref 669* 705 725* 1074 1713 1721* 1743* 1989* used_string based bit(7) packed unaligned dcl 183 ref 705 1074 1713 verify builtin function dcl 188 ref 1582 version 000166 automatic bit(2) level 2 packed packed unaligned dcl 221 set ref 627* wcd constant fixed bin(8,0) initial dcl 9-14 ref 477 672 738 827 872 888 904 948 1144 1426 1684 wire_arg 000156 automatic fixed bin(71,0) dcl 136 set ref 501* 541* 550* 566* 2004* wire_ptr 000160 automatic pointer dcl 137 set ref 501* 541* 550* 566* 2004* word_cnt 5(18) based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 8-36 set ref 1315* 1322* 1400* 1406* 1546 1810* 1818* 1983 1986 1987* word_counts 5 based structure level 2 dcl 5-20 wrap_cnt 0(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 230 set ref 1390* 1398* 1400 1456 wrap_ptr based bit(18) level 2 packed packed unaligned dcl 230 set ref 1389* 1394* 1566 wrap_q_address based structure level 1 dcl 230 wrapped 000410 automatic bit(1) packed unaligned dcl 1557 set ref 1562* 1582 write_cnt 3(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 6-27 set ref 1292* 1292 1918* write_first 1 based fixed bin(17,0) level 2 packed packed unaligned dcl 6-27 set ref 1246 1284 1285* 1291* 1299 1332 1466 1595 1915 1917 1917 1918* write_last 1(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 6-27 set ref 432 434 1179 1181 1334* 1918* wtx constant fixed bin(8,0) initial dcl 9-14 ref 775 1320 1798 1837 1971 x_dno parameter fixed bin(35,0) dcl 283 ref 280 494 514 x_level parameter fixed bin(3,0) dcl 284 ref 280 292 x_status parameter bit(36) dcl 285 set ref 280 298* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACKNOWLEDGE_ECHNEGO_INIT internal static fixed bin(17,0) initial dcl 10-22 ACKNOWLEDGE_ECHNEGO_STOP internal static fixed bin(17,0) initial dcl 10-23 Block_xfer internal static fixed bin(8,0) initial dcl 9-89 Break internal static fixed bin(8,0) initial dcl 9-89 Breakall internal static fixed bin(8,0) initial dcl 9-89 Breakchar internal static fixed bin(8,0) initial dcl 9-89 Chngstring internal static fixed bin(8,0) initial dcl 9-89 Crecho internal static fixed bin(8,0) initial dcl 9-89 DIAL_STATUS internal static fixed bin(17,0) initial dcl 10-19 DSA_ATTENTION_MSG internal static fixed bin(8,0) initial unsigned dcl 17-83 DSA_DATA_ATTENTION_MSG internal static fixed bin(8,0) initial unsigned dcl 17-84 DSA_DATA_INPUT_MSG internal static fixed bin(8,0) initial unsigned dcl 17-100 DSA_DATA_OUTPUT_MSG internal static fixed bin(8,0) initial unsigned dcl 17-101 DSA_DEMAND_RELEASE_SRU_MSG internal static fixed bin(8,0) initial unsigned dcl 17-85 DSA_DEMAND_TURN_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 17-87 DSA_DEMAND_TURN_MSG internal static fixed bin(8,0) initial unsigned dcl 17-86 DSA_ESTABLISHMENT_MSG internal static fixed bin(8,0) initial unsigned dcl 17-97 DSA_MSG_TYPE_TO_PNAME internal static char(20) initial array packed unaligned dcl 17-103 DSA_NETWORK_TYPE internal static fixed bin(4,0) initial unsigned dcl 17-35 DSA_PURGE_MSG internal static fixed bin(8,0) initial unsigned dcl 17-88 DSA_RECOVER_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 17-90 DSA_RECOVER_MSG internal static fixed bin(8,0) initial unsigned dcl 17-89 DSA_RELEASE_SRU_MSG internal static fixed bin(8,0) initial unsigned dcl 17-91 DSA_RESUME_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 17-93 DSA_RESUME_MSG internal static fixed bin(8,0) initial unsigned dcl 17-92 DSA_SUSPEND_ACK_MSG internal static fixed bin(8,0) initial unsigned dcl 17-95 DSA_SUSPEND_MSG internal static fixed bin(8,0) initial unsigned dcl 17-94 DSA_TERMINATED_MSG internal static fixed bin(8,0) initial unsigned dcl 17-98 DSA_TERM_ABNORMAL_MSG internal static fixed bin(8,0) initial unsigned dcl 17-96 DSA_UNSPECIFIED_MSG internal static fixed bin(8,0) initial unsigned dcl 17-82 DSA_USER_UNASSIGN_MSG internal static fixed bin(8,0) initial unsigned dcl 17-99 Dumpinput internal static fixed bin(8,0) initial dcl 9-89 Dumpoutput internal static fixed bin(8,0) initial dcl 9-89 Echoplex internal static fixed bin(8,0) initial dcl 9-89 Eight_bit_in internal static fixed bin(8,0) initial dcl 9-89 Eight_bit_out internal static fixed bin(8,0) initial dcl 9-89 Errormsg internal static fixed bin(8,0) initial dcl 9-89 FIRST_BOOTLOAD_PAGEX internal static fixed bin(17,0) initial dcl 7-166 FIRST_TTY_BUF_PAGEX internal static fixed bin(17,0) initial dcl 7-167 FNP_DUMP_PATCH_EVENT internal static fixed bin(17,0) initial dcl 1-31 FNP_METER_EVENT internal static fixed bin(17,0) initial dcl 1-32 Fullduplex internal static fixed bin(8,0) initial dcl 9-89 Hndlquit internal static fixed bin(8,0) initial dcl 9-89 INPUT_AVAILABLE internal static fixed bin(17,0) initial dcl 10-14 Input_flow_control internal static fixed bin(8,0) initial dcl 9-89 LINE_1050 internal static fixed bin(17,0) initial dcl 15-22 LINE_2741 internal static fixed bin(17,0) initial dcl 15-22 LINE_ARDS internal static fixed bin(17,0) initial dcl 15-22 LINE_ASYNC1 internal static fixed bin(17,0) initial dcl 15-22 LINE_ASYNC2 internal static fixed bin(17,0) initial dcl 15-22 LINE_ASYNC3 internal static fixed bin(17,0) initial dcl 15-22 LINE_BSC internal static fixed bin(17,0) initial dcl 15-22 LINE_DSA internal static fixed bin(17,0) initial dcl 15-22 LINE_ETX internal static fixed bin(17,0) initial dcl 15-22 LINE_G115 internal static fixed bin(17,0) initial dcl 15-22 LINE_HASP_OPR internal static fixed bin(17,0) initial dcl 15-22 LINE_HDLC internal static fixed bin(17,0) initial dcl 15-22 LINE_MC internal static fixed bin(17,0) initial dcl 15-22 LINE_POLLED_VIP internal static fixed bin(17,0) initial dcl 15-22 LINE_STATUS internal static fixed bin(17,0) initial dcl 10-18 LINE_SYNC1 internal static fixed bin(17,0) initial dcl 15-22 LINE_SYNC2 internal static fixed bin(17,0) initial dcl 15-22 LINE_SYNC3 internal static fixed bin(17,0) initial dcl 15-22 LINE_SYNCH internal static fixed bin(17,0) initial dcl 15-22 LINE_TELNET internal static fixed bin(17,0) initial dcl 15-22 LINE_UNKNOWN internal static fixed bin(17,0) initial dcl 15-22 LINE_VIP internal static fixed bin(17,0) initial dcl 15-22 LINE_X25LAP internal static fixed bin(17,0) initial dcl 15-22 Lfecho internal static fixed bin(8,0) initial dcl 9-89 Listen internal static fixed bin(8,0) initial dcl 9-89 Lock internal static fixed bin(8,0) initial dcl 9-89 MASKED internal static fixed bin(17,0) initial dcl 10-26 MAX_DSA_EVENT_MSG_TYPE internal static fixed bin(17,0) initial dcl 17-80 MAX_MCS_EVENT_MSG_TYPE internal static fixed bin(17,0) initial dcl 17-46 MCS_DIALOUT_MSG internal static fixed bin(17,0) initial dcl 17-54 MCS_DIALUP_MSG internal static fixed bin(17,0) initial dcl 17-50 MCS_HANGUP_MSG internal static fixed bin(17,0) initial dcl 17-52 MCS_LINE_STATUS_MSG internal static fixed bin(17,0) initial dcl 17-62 MCS_MASKED_MSG internal static fixed bin(17,0) initial dcl 17-64 MCS_MSG_TYPE_TO_PNAME internal static char(20) initial array packed unaligned dcl 17-67 MCS_QUIT_MSG internal static fixed bin(17,0) initial dcl 17-56 MCS_READ_MSG internal static fixed bin(17,0) initial dcl 17-58 MCS_UNSPECIFIED_MSG internal static fixed bin(17,0) initial dcl 17-48 MCS_WRITE_MSG internal static fixed bin(17,0) initial dcl 17-60 MOWSE_NETWORK_TYPE internal static fixed bin(4,0) initial unsigned dcl 17-36 Meter internal static fixed bin(8,0) initial dcl 9-89 Msg internal static fixed bin(8,0) initial dcl 9-89 NETWORK_TYPE_VALUES internal static varying char(8) initial array dcl 17-38 Nocontrol internal static fixed bin(8,0) initial dcl 9-89 Odd_parity internal static fixed bin(8,0) initial dcl 9-89 Output_flow_control internal static fixed bin(8,0) initial dcl 9-89 Polite internal static fixed bin(8,0) initial dcl 9-89 Prefixnl internal static fixed bin(8,0) initial dcl 9-89 Replay internal static fixed bin(8,0) initial dcl 9-89 SPACE_AVAILABLE internal static fixed bin(17,0) initial dcl 10-21 Sensepos internal static fixed bin(8,0) initial dcl 9-89 Set_buffer_size internal static fixed bin(8,0) initial dcl 9-89 Setbusy internal static fixed bin(8,0) initial dcl 9-89 TIMER internal static fixed bin(17,0) initial dcl 10-24 TTY_AREA_LOCK_EVENT internal static bit(36) initial dcl 1-33 Tabecho internal static fixed bin(8,0) initial dcl 9-89 USER_INTERRUPT internal static fixed bin(17,0) initial dcl 10-25 Upstate internal static fixed bin(8,0) initial dcl 9-89 WRU_TIMEOUT internal static fixed bin(17,0) initial dcl 10-20 Wru internal static fixed bin(8,0) initial dcl 9-89 Xmit_hold internal static fixed bin(8,0) initial dcl 9-89 accept_calls internal static fixed bin(8,0) initial dcl 9-24 ack_echnego_init internal static fixed bin(8,0) initial dcl 9-65 ack_echnego_stop internal static fixed bin(8,0) initial dcl 9-65 acu_dial_failure internal static fixed bin(8,0) initial dcl 9-65 acu_line_occupied internal static fixed bin(8,0) initial dcl 9-65 acu_no_good internal static fixed bin(8,0) initial dcl 9-65 acu_no_power internal static fixed bin(8,0) initial dcl 9-65 alter_parameters internal static fixed bin(8,0) initial dcl 9-24 baud_table internal static fixed bin(17,0) initial array dcl 16-8 blast internal static fixed bin(8,0) initial dcl 9-24 channel_manager$check_modes 000000 constant entry external dcl 13-19 channel_manager$control 000000 constant entry external dcl 13-13 channel_manager$get_modes 000000 constant entry external dcl 13-22 channel_manager$interrupt_later 000000 constant entry external dcl 13-28 channel_manager$queued_interrupt 000000 constant entry external dcl 13-31 channel_manager$read 000000 constant entry external dcl 13-7 channel_manager$set_modes 000000 constant entry external dcl 13-16 channel_manager$write 000000 constant entry external dcl 13-10 checksum_error internal static fixed bin(8,0) initial dcl 9-24 disconnect_all_lines internal static fixed bin(8,0) initial dcl 9-24 dn355_messages$boot_messages external static fixed bin(17,0) array dcl 11-19 dn355_messages$config_messages external static fixed bin(17,0) array dcl 11-21 dn355_messages$error_messages external static fixed bin(17,0) array dcl 11-17 dn355_messages$fault_names external static char(16) array dcl 11-13 dn355_messages$per_module external static fixed bin(17,0) dcl 11-15 dn355_modules based structure array level 1 dcl 11-29 dn355_reason based structure level 1 dcl 11-40 dont_accept_calls internal static fixed bin(8,0) initial dcl 9-24 dump_mem internal static fixed bin(8,0) initial dcl 9-24 error_message internal static fixed bin(8,0) initial dcl 9-65 first_acu_op_code internal static fixed bin(8,0) initial dcl 9-65 fnp_break internal static fixed bin(8,0) initial dcl 9-24 fnp_msg_ptr automatic pointer dcl 18-5 fnp_qptr automatic pointer dcl 12-17 fnp_sub_mbx based structure level 1 dcl 8-63 free_block based structure level 1 dcl 4-23 free_blockp automatic pointer dcl 4-20 global_opcodes internal static fixed bin(8,0) initial array dcl 9-126 init_echo_negotiation internal static fixed bin(8,0) initial dcl 9-24 input_fc_chars internal static fixed bin(8,0) initial dcl 9-24 input_in_mailbox internal static fixed bin(8,0) initial dcl 9-65 input_sub_mbx based structure level 1 dcl 8-84 io_manager$assign 000000 constant entry external dcl 19-10 io_manager$assign_add 000000 constant entry external dcl 19-15 io_manager$connect 000000 constant entry external dcl 19-26 io_manager$connect_abs 000000 constant entry external dcl 19-29 io_manager$get_status 000000 constant entry external dcl 19-35 io_manager$ignore_interrupt 000000 constant entry external dcl 19-41 io_manager$mask 000000 constant entry external dcl 19-38 io_manager$unassign 000000 constant entry external dcl 19-20 io_manager$unassign_delete 000000 constant entry external dcl 19-23 io_manager$workspace_tdcw 000000 constant entry external dcl 19-47 io_manager_arg_ptr automatic pointer dcl 19-49 last_acu_op_code internal static fixed bin(8,0) initial dcl 9-65 lcnt based structure level 1 dcl 5-65 lcntp automatic pointer dcl 5-63 lct_size automatic fixed bin(17,0) dcl 5-9 line_control internal static fixed bin(8,0) initial dcl 9-24 line_masked internal static fixed bin(8,0) initial dcl 9-65 line_status internal static fixed bin(8,0) initial dcl 9-65 line_types internal static char(16) initial array packed unaligned dcl 15-54 lock_ptr automatic pointer dcl 2-9 max_buffer_tally internal static fixed bin(17,0) initial array dcl 4-43 max_line_type internal static fixed bin(17,0) initial dcl 15-48 message_offset based fixed bin(17,0) array dcl 11-35 modulep automatic pointer dcl 11-23 output_bpart internal static fixed bin(18,0) initial dcl 1-19 output_fc_chars internal static fixed bin(8,0) initial dcl 9-24 patch_mem internal static fixed bin(8,0) initial dcl 9-24 qblock_size internal static fixed bin(17,0) initial dcl 1-27 reasonp automatic pointer dcl 11-24 report_meters internal static fixed bin(8,0) initial dcl 9-24 s6180_params internal static fixed bin(8,0) initial dcl 9-65 saved_meters based structure level 1 dcl 5-68 set_delay_table internal static fixed bin(8,0) initial dcl 9-24 set_echnego_break_table internal static fixed bin(8,0) initial dcl 9-24 set_framing_chars internal static fixed bin(8,0) initial dcl 9-24 set_line_type internal static fixed bin(8,0) initial dcl 9-24 start_negotiated_echo internal static fixed bin(8,0) initial dcl 9-24 stop_negotiated_echo internal static fixed bin(8,0) initial dcl 9-24 sync_msg_size internal static fixed bin(8,0) initial dcl 9-24 timer_info automatic structure level 1 dcl 10-50 tty_space_man$free_buffer 000000 constant entry external dcl 14-14 tty_space_man$get_buffer 000000 constant entry external dcl 14-13 tty_space_man$get_perm_space 000000 constant entry external dcl 14-11 tty_space_man$needs_space 000000 constant entry external dcl 14-18 tty_space_man$switch_chain 000000 constant entry external dcl 14-17 wru_timeout internal static fixed bin(8,0) initial dcl 9-65 NAMES DECLARED BY EXPLICIT CONTEXT. assign_sub_mbx 007121 constant entry internal dcl 1706 ref 447 1101 1126 1266 1768 check_ff 006373 constant entry internal dcl 1553 ref 1460 check_lock 010241 constant entry internal dcl 1996 ref 499 dequeue 002205 constant entry internal dcl 578 ref 534 disconnect_other_line 003026 constant label dcl 747 ref 765 enough_input_space 006551 constant entry internal dcl 1608 ref 1359 get_line_number 006733 constant entry internal dcl 1661 ref 734 1823 1829 1970 global_exit 001154 constant label dcl 342 hangup_fnp 007624 constant entry internal dcl 1877 ref 1873 1949 hangup_fnp_lines 001672 constant entry external dcl 1865 interrupt 000651 constant entry external dcl 280 make_q_entry 006601 constant entry internal dcl 1621 ref 450 908 1269 1549 1591 1595 match 007100 constant label dcl 1691 ref 1676 no_dialup 004216 constant label dcl 1040 ref 951 981 991 no_input_space 006077 constant label dcl 1477 ref 1468 process_accept_input 005463 constant entry internal dcl 1346 ref 929 process_int 002245 constant entry internal dcl 602 ref 332 545 process_int_queue 001746 constant entry internal dcl 527 ref 324 337 507 process_interrupt_queue 001607 constant entry external dcl 494 process_q 004431 constant entry internal dcl 1114 ref 1095 process_rtx 005760 constant entry internal dcl 1441 ref 1055 process_send_output 005037 constant entry internal dcl 1221 ref 473 920 1039 1138 purge_write_texte 010111 constant entry internal dcl 1964 ref 640 656 reject 005703 constant label dcl 1426 ref 1359 1362 release_sub_mbx 007202 constant entry internal dcl 1736 ref 484 1109 1158 report_fnp_crash 010042 constant entry internal dcl 1941 ref 644 1933 report_fnp_no_response 010012 constant entry internal dcl 1929 ref 487 1081 return_mbx 007240 constant entry internal dcl 1754 ref 754 830 873 890 907 950 977 1015 1059 1418 1430 send_dial 004611 constant entry internal dcl 1174 ref 428 1257 send_global_wcd 001242 constant entry external dcl 373 send_join 001321 constant label dcl 387 ref 371 send_mbx 007235 constant entry internal dcl 1754 ref 480 1105 1148 1242 1329 send_wcd 001211 constant entry external dcl 358 setup 001716 constant entry internal dcl 510 ref 291 498 spend_submailboxes 004371 constant entry internal dcl 1092 ref 705 1074 t_and_d_join 002270 constant label dcl 620 ref 693 throw_away_output 007750 constant entry internal dcl 1910 ref 415 470 744 883 899 1184 1887 uncp 000637 constant entry external dcl 32 update_free 006357 constant label dcl 1546 ref 1453 1483 update_q_ptrs 004601 constant label dcl 1165 ref 1152 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 11254 11336 10726 11264 Length 12214 10726 62 642 326 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME uncp 948 external procedure is an external procedure. on unit on line 499 92 on unit setup internal procedure shares stack frame of external procedure uncp. process_int_queue internal procedure shares stack frame of external procedure uncp. dequeue internal procedure shares stack frame of external procedure uncp. process_int internal procedure shares stack frame of external procedure uncp. spend_submailboxes internal procedure shares stack frame of external procedure uncp. process_q internal procedure shares stack frame of external procedure uncp. send_dial internal procedure shares stack frame of external procedure uncp. process_send_output internal procedure shares stack frame of external procedure uncp. process_accept_input internal procedure shares stack frame of external procedure uncp. process_rtx internal procedure shares stack frame of external procedure uncp. check_ff internal procedure shares stack frame of external procedure uncp. enough_input_space internal procedure shares stack frame of external procedure uncp. make_q_entry internal procedure shares stack frame of external procedure uncp. get_line_number internal procedure shares stack frame of external procedure uncp. assign_sub_mbx internal procedure shares stack frame of external procedure uncp. release_sub_mbx internal procedure shares stack frame of external procedure uncp. send_mbx internal procedure shares stack frame of external procedure uncp. hangup_fnp internal procedure shares stack frame of external procedure uncp. throw_away_output internal procedure shares stack frame of external procedure uncp. report_fnp_no_response internal procedure shares stack frame of external procedure uncp. report_fnp_crash internal procedure shares stack frame of external procedure uncp. purge_write_texte internal procedure shares stack frame of external procedure uncp. check_lock internal procedure shares stack frame of on unit on line 499. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME uncp 000100 qorig uncp 000101 da uncp 000102 sub_mbx_sent uncp 000103 sub_mbx_no uncp 000104 local_sub_mbx uncp 000114 bufp uncp 000116 charp uncp 000120 qptr uncp 000122 other_pcbp uncp 000124 timw uncp 000125 level uncp 000126 dno uncp 000127 i uncp 000130 ix uncp 000131 q_first uncp 000132 q_count uncp 000133 chars_left uncp 000134 numchars uncp 000135 k uncp 000136 j uncp 000137 devx uncp 000140 operation uncp 000141 lano uncp 000142 nblocks uncp 000143 fnp_name uncp 000144 no_response uncp 000145 interrupt_entry uncp 000146 input_count uncp 000147 inchain uncp 000150 chan_lctep uncp 000152 inchain_ptr uncp 000154 bits_per_char uncp 000155 max_buf_chars uncp 000156 wire_arg uncp 000160 wire_ptr uncp 000162 masked uncp 000163 queue_locked uncp 000164 syserr_severity uncp 000166 auto_net_event_message uncp 000170 auto_fnp_msg uncp 000172 fnp_event_message uncp 000174 new_qp uncp 000176 new_qrel uncp 000177 fault_name uncp 000212 ttybp uncp 000214 uncpbp uncp 000216 blockp uncp 000220 lctp uncp 000222 lctep uncp 000224 n_pcbs uncp 000226 pcbp uncp 000230 infop uncp 000232 fnpp uncp 000234 subp uncp 000236 mbxp uncp 000240 interrupt_info uncp 000242 dialup_info uncp 000244 rtx_info uncp 000246 net_event_message_arg uncp 000250 tdata uncp 000260 data_len uncp 000360 mbx_num process_send_output 000376 real_word_cnt process_rtx 000377 real_wrap_cnt process_rtx 000400 chars_to_move process_rtx 000401 left_in_buffer process_rtx 000410 wrapped check_ff 000444 sub_mbx_num assign_sub_mbx 000462 mbx_no send_mbx 000463 counter send_mbx 000464 output_data_ptr send_mbx 000466 ima send_mbx THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as r_le_a call_ext_out_desc call_ext_out return_mac stac_mac enable_op ext_entry ext_entry_desc int_entry set_bits_eis index_bits_eis index_bs_1_eis stacq_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. channel_manager$interrupt dn355_util$compute_parity io_manager$connect_direct ldac pmut$unwire_unmask pmut$wire_and_mask pxss$notify pxss$ring_0_wakeup pxss$unique_ring_0_wakeup syserr tty_space_man$free_chain tty_space_man$free_space tty_space_man$get_chain tty_space_man$get_space uncp_boot_interrupt uncp_boot_interrupt$request_init uncp_boot_interrupt$system_fault THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dn355_data$ pds$processid tc_data$system_shutdown tty_buf$ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 32 000636 34 000644 280 000645 287 000656 289 000661 291 000663 292 000664 293 000667 295 000672 297 000703 298 000705 302 000762 304 000767 305 001016 308 001034 311 001035 314 001041 317 001050 318 001060 320 001061 322 001070 324 001073 327 001106 329 001133 332 001134 334 001136 335 001146 337 001147 340 001153 342 001154 345 001156 348 001170 349 001172 352 001200 355 001203 358 001204 370 001230 371 001234 373 001235 376 001261 377 001263 378 001267 380 001272 381 001307 382 001311 384 001320 387 001321 389 001322 390 001325 391 001330 392 001332 393 001334 394 001337 395 001341 399 001352 400 001353 401 001357 402 001361 403 001366 405 001375 407 001400 412 001413 415 001422 416 001423 419 001426 421 001431 424 001437 425 001442 427 001444 428 001446 429 001447 432 001450 434 001455 435 001460 436 001462 439 001463 440 001465 442 001473 447 001475 448 001477 450 001502 451 001504 453 001511 456 001512 458 001516 460 001523 461 001526 463 001527 465 001531 466 001535 468 001541 470 001544 473 001552 474 001556 477 001557 478 001561 480 001565 481 001567 484 001574 487 001600 492 001603 494 001604 497 001614 498 001615 499 001616 500 001634 501 001636 503 001647 504 001660 505 001661 507 001663 508 001666 1865 001667 1870 001677 1871 001702 1872 001704 1873 001706 1874 001715 510 001716 513 001717 514 001722 515 001725 516 001727 518 001731 519 001734 520 001737 521 001741 522 001743 524 001745 527 001746 534 001750 535 001755 537 001762 540 002007 541 002010 543 002027 545 002030 547 002032 549 002040 550 002042 553 002053 554 002064 555 002065 556 002067 558 002070 559 002073 562 002120 565 002146 566 002147 568 002166 570 002167 572 002173 573 002175 576 002204 578 002205 583 002207 585 002213 586 002215 587 002217 590 002224 592 002227 593 002231 594 002233 597 002240 602 002245 609 002247 611 002251 612 002254 615 002256 617 002262 619 002266 620 002270 623 002274 624 002303 626 002306 627 002310 628 002314 629 002320 630 002322 631 002326 632 002330 634 002346 637 002347 638 002355 639 002405 640 002421 644 002426 645 002427 648 002430 650 002434 652 002435 655 002460 656 002474 658 002501 659 002510 660 002515 663 002516 665 002522 666 002535 668 002540 669 002543 671 002546 672 002550 675 002562 678 002602 679 002611 682 002616 688 002617 690 002622 692 002626 693 002630 696 002631 700 002635 705 002636 710 002643 715 002657 717 002663 719 002671 720 002672 721 002700 722 002702 725 002734 727 002741 729 002743 730 002745 731 002752 734 002756 738 002757 740 002766 742 002776 744 003002 745 003003 747 003026 750 003036 751 003043 753 003046 754 003053 758 003055 759 003060 762 003062 764 003073 765 003075 769 003076 775 003077 777 003101 778 003104 780 003120 782 003122 784 003127 785 003132 788 003136 794 003154 798 003155 800 003157 804 003167 806 003171 808 003174 809 003175 812 003176 813 003202 815 003203 817 003214 823 003221 825 003224 827 003227 828 003231 829 003233 830 003235 831 003237 835 003240 836 003243 840 003245 843 003247 844 003266 845 003270 847 003300 849 003306 852 003310 854 003315 856 003325 859 003334 861 003346 863 003350 865 003353 867 003355 870 003363 872 003365 873 003367 875 003371 879 003372 881 003374 883 003400 884 003401 887 003424 888 003427 889 003432 890 003434 891 003436 895 003437 897 003441 899 003445 901 003451 902 003466 904 003471 905 003474 906 003476 907 003500 908 003502 910 003510 914 003511 916 003513 918 003517 920 003526 923 003532 927 003533 929 003535 931 003542 936 003543 938 003547 939 003554 940 003567 941 003571 943 003573 946 003617 948 003625 949 003630 950 003632 951 003634 955 003635 957 003640 958 003642 959 003651 961 003652 962 003655 964 003671 968 003704 970 003706 972 003714 973 003716 975 003722 976 003725 977 003730 978 003732 979 003733 981 003741 984 003742 986 003744 988 003751 991 003777 994 004000 996 004004 997 004006 998 004010 999 004012 1002 004026 1006 004051 1007 004053 1009 004057 1011 004063 1012 004066 1013 004070 1014 004075 1015 004100 1016 004102 1017 004105 1018 004122 1019 004127 1024 004150 1029 004152 1030 004154 1031 004156 1033 004164 1034 004166 1035 004171 1036 004173 1037 004175 1038 004177 1039 004212 1040 004216 1043 004217 1049 004264 1053 004265 1055 004267 1056 004270 1058 004276 1059 004301 1061 004303 1062 004304 1069 004353 1074 004355 1081 004365 1086 004370 1092 004371 1095 004372 1099 004376 1101 004402 1102 004404 1104 004410 1105 004413 1106 004415 1107 004417 1109 004423 1111 004427 1112 004430 1114 004431 1121 004432 1122 004435 1123 004437 1125 004440 1126 004444 1127 004446 1129 004450 1130 004454 1132 004460 1133 004463 1134 004470 1135 004473 1136 004474 1138 004476 1141 004512 1144 004513 1145 004516 1146 004521 1147 004527 1148 004535 1149 004537 1152 004544 1155 004546 1156 004551 1157 004553 1158 004566 1160 004572 1162 004573 1163 004600 1165 004601 1167 004604 1168 004606 1171 004610 1174 004611 1176 004612 1177 004615 1179 004620 1181 004624 1182 004627 1184 004634 1187 004635 1189 004643 1190 004666 1192 004672 1193 004720 1194 004735 1196 004736 1197 004740 1198 004742 1199 004744 1200 004750 1201 004753 1202 004757 1203 004762 1204 004764 1205 004766 1206 004770 1207 004772 1208 004774 1209 004777 1210 005001 1211 005014 1212 005017 1214 005021 1215 005036 1221 005037 1228 005041 1230 005043 1232 005047 1233 005051 1236 005073 1239 005074 1241 005077 1242 005102 1243 005104 1246 005105 1249 005110 1250 005112 1251 005127 1254 005130 1255 005133 1257 005135 1258 005136 1261 005137 1264 005143 1266 005146 1267 005150 1269 005153 1270 005161 1271 005166 1274 005167 1279 005174 1284 005177 1285 005204 1291 005233 1292 005236 1295 005246 1299 005253 1303 005260 1304 005263 1306 005270 1308 005273 1309 005275 1312 005277 1313 005300 1314 005311 1315 005313 1316 005317 1317 005322 1318 005326 1319 005331 1320 005333 1322 005335 1325 005372 1328 005422 1329 005424 1330 005426 1332 005433 1334 005437 1335 005441 1341 005462 1346 005463 1349 005464 1352 005471 1354 005474 1356 005504 1358 005505 1359 005511 1362 005521 1367 005532 1370 005541 1372 005544 1374 005547 1375 005550 1377 005551 1381 005557 1384 005560 1385 005562 1387 005572 1389 005574 1390 005576 1392 005600 1394 005603 1396 005610 1398 005612 1400 005621 1402 005625 1406 005626 1408 005630 1412 005634 1416 005672 1417 005675 1418 005677 1419 005701 1424 005702 1426 005703 1428 005706 1430 005710 1431 005712 1432 005714 1435 005731 1438 005757 1441 005760 1449 005761 1451 005763 1452 005772 1453 006000 1456 006001 1457 006004 1459 006011 1460 006013 1461 006017 1462 006022 1465 006023 1466 006025 1467 006035 1468 006040 1472 006046 1474 006052 1475 006073 1477 006077 1481 006126 1483 006143 1485 006144 1487 006146 1490 006157 1494 006220 1495 006223 1496 006225 1497 006230 1498 006232 1500 006234 1501 006236 1502 006243 1503 006250 1504 006252 1505 006254 1507 006261 1509 006263 1512 006267 1513 006272 1515 006273 1517 006274 1519 006300 1521 006304 1523 006311 1524 006313 1525 006315 1528 006316 1529 006322 1532 006324 1534 006325 1535 006327 1536 006332 1537 006334 1538 006347 1539 006352 1546 006357 1549 006364 1551 006372 1553 006373 1559 006375 1560 006377 1562 006404 1566 006405 1568 006411 1569 006421 1573 006423 1577 006433 1580 006443 1582 006451 1585 006470 1587 006477 1589 006500 1590 006502 1591 006504 1595 006515 1599 006533 1602 006550 1608 006551 1613 006553 1614 006556 1615 006562 1621 006601 1627 006603 1628 006616 1630 006622 1631 006642 1634 006643 1636 006652 1637 006655 1640 006663 1641 006667 1644 006671 1645 006672 1646 006674 1647 006675 1649 006701 1650 006705 1651 006711 1653 006722 1654 006724 1655 006726 1656 006732 1661 006733 1664 006734 1665 006736 1667 006740 1669 006743 1670 006745 1671 006751 1673 006762 1674 006767 1675 006777 1676 007004 1678 007014 1679 007016 1681 007032 1682 007034 1684 007035 1686 007040 1688 007074 1690 007077 1691 007100 1693 007103 1695 007110 1696 007115 1699 007120 1706 007121 1713 007123 1714 007132 1716 007134 1717 007137 1718 007141 1721 007142 1723 007145 1724 007146 1725 007154 1726 007160 1727 007164 1728 007172 1729 007173 1730 007177 1731 007201 1736 007202 1741 007204 1743 007211 1746 007215 1747 007224 1748 007232 1749 007234 1754 007235 1765 007242 1766 007244 1768 007246 1769 007250 1771 007253 1772 007273 1774 007274 1775 007300 1778 007302 1780 007306 1781 007310 1784 007311 1786 007324 1787 007326 1791 007333 1793 007334 1795 007340 1796 007352 1798 007360 1799 007362 1800 007364 1802 007375 1803 007377 1804 007400 1805 007401 1807 007405 1808 007407 1809 007411 1810 007413 1811 007415 1813 007427 1814 007432 1816 007433 1817 007435 1818 007436 1819 007440 1821 007452 1822 007457 1823 007460 1824 007461 1827 007464 1829 007472 1830 007473 1832 007501 1833 007503 1837 007506 1841 007522 1843 007524 1846 007556 1847 007560 1850 007571 1854 007604 1855 007607 1856 007611 1857 007620 1859 007622 1861 007623 1877 007624 1882 007626 1883 007633 1884 007643 1885 007650 1887 007653 1888 007654 1891 007702 1893 007704 1895 007707 1896 007710 1897 007712 1898 007720 1899 007723 1900 007725 1901 007740 1903 007743 1906 007747 1910 007750 1915 007751 1917 007755 1918 010000 1922 010007 1924 010011 1929 010012 1932 010013 1933 010040 1934 010041 1941 010042 1944 010043 1949 010046 1952 010054 1954 010056 1955 010060 1956 010063 1957 010067 1958 010071 1960 010110 1964 010111 1966 010112 1967 010117 1969 010123 1970 010127 1971 010130 1973 010136 1975 010144 1976 010151 1977 010154 1979 010170 1980 010174 1983 010212 1986 010223 1987 010225 1989 010227 1990 010234 1992 010236 1993 010240 1996 010241 2001 010242 2004 010266 2007 010301 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved