COMPILATION LISTING OF SEGMENT g115_ Compiled by: Multics PL/I Compiler, Release 27c, of June 15, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 08/30/82 1138.3 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 g115_: proc; 12 13 return; /* not a legal entry */ 14 15 16 /* Rewritten by D. Vinograd, 11/77, to make the G115 an iox based module for MR 6.1 */ 17 /* Modified by J. Nicholls 7/78 to change full_cc to rr_cnt to use reocrd counting instead of character counting */ 18 /* Modified by D. Vinograd, 10/78, for compatibility with MCS 3.3 and above */ 19 /* Modified by J. C. Whitmore, 11/78, to make all attach options consistent with the remote_xxx_ dims */ 20 /* Modified by J. C. Whitmore, 3/79, to correct size and initialization of delay variable */ 21 /* Modified by J. C. Whitmore, 8/79, grossley changed to accept binary output mode and multiple channels per process */ 22 23 24 25 26 /* Parameters */ 27 28 dcl a_code fixed bin (35) parameter; 29 dcl (a_new_mode, a_old_mode) char (*) parameter; 30 dcl a_nelem fixed bin (21) parameter; 31 dcl a_nelemt fixed bin (21) parameter; 32 dcl a_devx fixed bin parameter; 33 dcl a_ddp ptr parameter; 34 dcl a_adp ptr parameter; 35 dcl a_bufp ptr parameter; 36 dcl a_iocbp ptr parameter; 37 dcl a_option (*) char (*) var parameter; 38 dcl a_comerr_sw bit (1) parameter; 39 dcl a_open_mode fixed bin parameter; 40 dcl a_order char (*) parameter; 41 dcl a_infop ptr parameter; 42 43 /* Automatic */ 44 45 dcl attach_description char (256) var; 46 dcl bufp ptr; 47 dcl chn fixed bin (71); 48 dcl code fixed bin (35); 49 dcl comerr_sw bit (1) init ("0"b); 50 dcl comm char (32); 51 dcl delay fixed bin (35); 52 dcl device char (32); 53 dcl device_type fixed bin; 54 dcl dial_msg_chan char (32); /* Variables for dial manager */ 55 dcl dial_msg_module char (32); 56 dcl dial_msg_ndialed fixed bin; 57 dcl dummy_arg char (32); 58 dcl i fixed bin; 59 dcl ignore fixed bin (35); 60 dcl infop ptr; 61 dcl iocbp ptr; 62 dcl level fixed bin; 63 dcl mask bit (36); 64 dcl max_length fixed bin; 65 dcl open_mode fixed bin; 66 dcl order char (32); 67 dcl state fixed bin; 68 dcl temp_ptr ptr; 69 dcl terminal_type char (32); 70 dcl tty char (32); 71 72 /* Internal Static */ 73 74 dcl attach_areap ptr int static init (null); /* pointer to attach_area */ 75 dcl first_device_data_p ptr int static init (null); /* head of chain of device data structures */ 76 dcl last_device_data_p ptr int static init (null); /* tail of this chain */ 77 dcl static_comerr_sw bit (1) int static init ("0"b); /* to force error messages during debug */ 78 79 /* Based variables */ 80 81 dcl attach_area area (262144) based (attach_areap); /* space for device_data and attach data structures */ 82 dcl info_string char (32) based (infop); /* for the control entry */ 83 84 /* External Entries */ 85 86 dcl cv_dec_check_ entry (char (*), fixed bin (35)) returns (fixed bin (35)); 87 dcl timer_manager_$sleep entry (fixed bin (71), bit (2)); 88 dcl get_process_id_ entry () returns (bit (36)); 89 dcl get_ttt_info_ entry (ptr, fixed bin (35)); 90 dcl hcs_$tty_abort entry (fixed bin, fixed bin, fixed bin, fixed bin (35)); 91 dcl ipc_$delete_ev_chn entry (fixed bin (71), fixed bin (35)); 92 dcl ipc_$decl_ev_wait_chn entry (fixed bin (71), fixed bin (35)); 93 dcl ipc_$decl_ev_call_chn entry (fixed bin (71), entry, ptr, fixed bin, fixed bin (35)); 94 dcl ipc_$block entry (ptr, ptr, fixed bin (35)); 95 dcl hcs_$tty_attach entry (char (*), fixed bin (71), fixed bin, fixed bin, fixed bin (35)); 96 dcl ioa_ entry options (variable); 97 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 98 dcl hcs_$tty_detach entry (fixed bin, fixed bin, fixed bin, fixed bin (35)); 99 dcl g115_io_$read_status entry (ptr, ptr, fixed bin (35)); 100 dcl g115_io_$write entry (ptr, ptr, fixed bin (35)); 101 dcl hcs_$tty_order entry (fixed bin, char (*), ptr, fixed bin, fixed bin (35)); 102 dcl ipc_$create_ev_chn entry (fixed bin (71), fixed bin (35)); 103 dcl convert_ipc_code_ entry (fixed bin (35)); 104 dcl dial_manager_$privileged_attach entry (ptr, fixed bin (35)); 105 dcl dial_manager_$release_channel entry (ptr, fixed bin (35)); 106 dcl dial_manager_$dial_out entry (ptr, fixed bin (35)); 107 dcl convert_dial_message_ entry (bit (72) aligned, char (*), char (*), fixed bin, 1 like dial_msg_flags aligned, 108 fixed bin (35)); 109 dcl com_err_ entry options (variable); 110 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 111 dcl release_temp_segment_ entry (char (*), ptr, fixed bin (35)); 112 dcl continue_to_signal_ entry (fixed bin (35)); 113 dcl iox_$err_no_operation entry; 114 dcl hcs_$set_ips_mask entry (bit (36), bit (36)); 115 dcl iox_$propagate entry (ptr); 116 dcl hcs_$reset_ips_mask entry (bit (36), bit (36)); 117 dcl g115_protocol_$write entry (ptr, ptr, ptr, fixed bin (21), fixed bin (35)); 118 dcl g115_protocol_$read entry (ptr, ptr, ptr, fixed bin (21), fixed bin (21), fixed bin (35)); 119 120 /* Builtins and Conditions */ 121 122 dcl (null, addr, hbound, length, rtrim, ltrim, unspec, empty) builtin; 123 124 dcl cleanup condition; 125 dcl any_other condition; 126 127 /* Error Table Entries */ 128 129 dcl error_table_$bad_conversion fixed bin (35) ext; 130 dcl error_table_$noarg fixed bin (35) ext; 131 dcl error_table_$line_status_pending ext fixed bin (35); 132 dcl error_table_$action_not_performed ext fixed bin (35); 133 dcl error_table_$ionmat ext fixed bin (35); 134 dcl error_table_$wrong_no_of_args ext fixed bin (35); 135 dcl error_table_$badopt ext fixed bin (35); 136 dcl error_table_$bad_mode ext fixed bin (35); 137 dcl error_table_$multiple_io_attachment ext fixed bin (35); 138 dcl error_table_$invalid_read ext fixed bin (35); 139 dcl error_table_$invalid_write ext fixed bin (35); 140 dcl error_table_$not_attached fixed bin (35) ext; 141 dcl error_table_$not_detached fixed bin (35) ext; 142 dcl error_table_$not_open fixed bin (35) ext; 143 dcl error_table_$not_closed fixed bin (35) ext; 144 dcl error_table_$no_operation fixed bin (35) ext; 145 dcl error_table_$io_no_permission fixed bin (35) ext; 146 dcl error_table_$resource_attached fixed bin (35) ext; 147 148 /* Constants */ 149 150 dcl devices (4) char (32) static options (constant) init ("reader", "printer", "teleprinter", "punch"); 151 152 /* Line Control and Status Values */ 153 154 dcl set_g115_remote_mode fixed bin int static init (3) options (constant); 155 dcl test_for_fnp_output fixed bin int static init (5) options (constant); 156 dcl reset_g115_remote_mode fixed bin int static static init (6) options (constant); 157 dcl fnp_output_pending fixed bin int static init (8) options (constant); 158 159 /* Structures */ 160 161 dcl 1 line_status aligned, /* for the Ring 0 line_status order */ 162 (2 value, 163 2 mbz1, 164 2 mbz2, 165 2 mbz3) fixed bin unal; 166 167 dcl 1 hangup_proc aligned based (infop), /* Data for hangup_proc order */ 168 2 entry_var entry variable, 169 2 data_ptr ptr, 170 2 prior fixed bin; 171 172 dcl 1 info_structure aligned based (infop), /* for the read_status control order */ 173 2 ev_chan fixed bin (71), 174 2 input_available bit (1); 175 176 dcl 1 modes aligned, /* for the Ring 0 tty modes order */ 177 2 len fixed bin, 178 2 str char (256); 179 180 dcl 1 event_info aligned, /* data returned by ipc_$block */ 181 2 channel_id fixed bin (71), /* event channel which signalled this wakeup */ 182 2 message fixed bin (71), /* 72 bit event message from sender */ 183 2 sender bit (36), /* process id of sending process */ 184 2 origin, 185 3 dev_signal bit (18) unal, 186 3 ring bit (18) unal, 187 2 channel_index fixed bin (17); /* index of channel_id in the wait list we blocked on */ 188 189 dcl 1 dial_msg_flags aligned, /* data returned from convert_dial_message_ */ 190 2 dialed_up bit (1) unal, 191 2 hung_up bit (1) unal, 192 2 control bit (1) unal, 193 2 pad bit (33) unal; 194 195 dcl 1 dma aligned, /* data for dial_manager_ to attach, dial_out or allow dials */ 196 2 version fixed bin, /* this is the version 1 structure */ 197 2 dial_qual char (22), /* phone number for dial_out, qualifier for allow dials */ 198 2 dial_mgr_ev_chan fixed bin (71), /* IPC chan for Ans. Serv. to notify us on */ 199 2 device_name char (32); /* name of the tty channel we want to have assigned */ 200 201 dcl 1 dial_wait_list aligned, /* IPC wait list for blocking after calling dial_manager_ */ 202 2 nchan fixed bin init (1), /* number of channels in this list: always 1 */ 203 2 dummy_word fixed bin, /* so the next will be on even word */ 204 2 dial_mgr_ev_chan fixed bin (71); 205 206 1 1 /* BEGIN INCLUDE FILE ..... iocb.incl.pl1 ..... 13 Feb 1975, M. Asherman */ 1 2 /* format: style2 */ 1 3 1 4 dcl 1 iocb aligned based, /* I/O control block. */ 1 5 2 version character (4) aligned, 1 6 2 name char (32), /* I/O name of this block. */ 1 7 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 1 8 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 1 9 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 1 10 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 1 11 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 1 12 2 reserved bit (72), /* Reserved for future use. */ 1 13 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 1 14 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 1 15 /* open(p,mode,not_used,s) */ 1 16 2 close entry (ptr, fixed (35)),/* close(p,s) */ 1 17 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 1 18 /* get_line(p,bufptr,buflen,actlen,s) */ 1 19 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 1 20 /* get_chars(p,bufptr,buflen,actlen,s) */ 1 21 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 1 22 /* put_chars(p,bufptr,buflen,s) */ 1 23 2 modes entry (ptr, char (*), char (*), fixed (35)), 1 24 /* modes(p,newmode,oldmode,s) */ 1 25 2 position entry (ptr, fixed, fixed (21), fixed (35)), 1 26 /* position(p,u1,u2,s) */ 1 27 2 control entry (ptr, char (*), ptr, fixed (35)), 1 28 /* control(p,order,infptr,s) */ 1 29 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 1 30 /* read_record(p,bufptr,buflen,actlen,s) */ 1 31 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 1 32 /* write_record(p,bufptr,buflen,s) */ 1 33 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 1 34 /* rewrite_record(p,bufptr,buflen,s) */ 1 35 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 1 36 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 1 37 /* seek_key(p,key,len,s) */ 1 38 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 1 39 /* read_key(p,key,len,s) */ 1 40 2 read_length entry (ptr, fixed (21), fixed (35)); 1 41 /* read_length(p,len,s) */ 1 42 1 43 declare iox_$iocb_version_sentinel 1 44 character (4) aligned external static; 1 45 1 46 /* END INCLUDE FILE ..... iocb.incl.pl1 ..... */ 207 208 2 1 /* Begin include file ..... iox_modes.incl.pl1 */ 2 2 2 3 /* Written by C. D. Tavares, 03/17/75 */ 2 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 2 5 2 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 2 7 ("stream_input", "stream_output", "stream_input_output", 2 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 2 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 2 10 "direct_input", "direct_output", "direct_update"); 2 11 2 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 2 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 2 14 2 15 dcl (Stream_input initial (1), 2 16 Stream_output initial (2), 2 17 Stream_input_output initial (3), 2 18 Sequential_input initial (4), 2 19 Sequential_output initial (5), 2 20 Sequential_input_output initial (6), 2 21 Sequential_update initial (7), 2 22 Keyed_sequential_input initial (8), 2 23 Keyed_sequential_output initial (9), 2 24 Keyed_sequential_update initial (10), 2 25 Direct_input initial (11), 2 26 Direct_output initial (12), 2 27 Direct_update initial (13)) fixed bin int static options (constant); 2 28 2 29 /* End include file ..... iox_modes.incl.pl1 */ 209 210 3 1 /* Begin include file ..... io_call_info.incl.pl1 */ 3 2 3 3 /* This include file defines the info_structure used by an I/O module to perform an "io_call" order 3 4* on behalf of the io_call command. */ 3 5 /* Coded April 1976 by Larry Johnson */ 3 6 /* Changed June 1977 by Larry Johnson for "io_call_af" order */ 3 7 3 8 dcl io_call_infop ptr; 3 9 3 10 dcl 1 io_call_info aligned based (io_call_infop), 3 11 2 version fixed bin, 3 12 2 caller_name char (32), /* Caller name for error messages */ 3 13 2 order_name char (32), /* Actual name of the order to be performed */ 3 14 2 report entry variable options (variable), 3 15 /* Entry to ioa_ like procedure to report results */ 3 16 2 error entry variable options (variable), 3 17 /* Entry to com_err_ like procedure to report results */ 3 18 2 af_returnp ptr, /* Pointer to return string if "io_call_af" order */ 3 19 2 af_returnl fixed bin, /* Length of string */ 3 20 2 fill (5) bit (36) aligned, 3 21 2 nargs fixed bin, /* Number of additional command arguments provided */ 3 22 2 max_arglen fixed bin, /* Length of longest argument (used to define array) */ 3 23 2 args (0 refer (io_call_info.nargs)) char (0 refer (io_call_info.max_arglen)) varying; 3 24 3 25 dcl io_call_af_ret char (io_call_info.af_returnl) based (io_call_info.af_returnp) varying; 3 26 /* Return string for active function */ 3 27 3 28 /* End include file ..... io_call_info.incl.pl1 */ 211 212 4 1 /* BEGIN include file g115_attach_data.incl.pl1 */ 4 2 4 3 /* This structure describes all data which is defined per g115 switch attachment */ 4 4 4 5 /* Modified by J. C. Whitmore, 8/79, adding new fields and changing name from g115_data.incl.pl1 */ 4 6 4 7 dcl adp ptr init (null); 4 8 4 9 dcl 1 g115_attach_data aligned based (adp), 4 10 2 ttt_info like remote_ttt_info, 4 11 2 device_ptr ptr, /* pointer to g115_device_data for this attachment */ 4 12 2 media_code char (1) unal, /* current media code used for this attachment */ 4 13 2 attach_description char (256) var, 4 14 2 open_description char (32) var, 4 15 2 device char (32), /* name of the generic type of remote device */ 4 16 2 device_type fixed bin; /* device type code in fixed bin form */ 4 17 /* 1 = reader */ 4 18 /* 2 = printer */ 4 19 /* 3 = teleprinter */ 4 20 /* 4 = punch */ 4 21 4 22 /* Constants which describe the defined device types */ 4 23 4 24 dcl reader fixed bin static options (constant) init (1); 4 25 dcl printer fixed bin static options (constant) init (2); 4 26 dcl teleprinter fixed bin static options (constant) init (3); 4 27 dcl punch fixed bin static options (constant) init (4); 4 28 4 29 /* END include file g115_attach_data.incl.pl1 */ 213 214 5 1 /* BEGIN INCLUDE FILE ... g115_device_data.incl.pl1 ... 9-7-79 */ 5 2 5 3 5 4 /* This structure describes all the data specific to a tty channel used for the G115 protocol. 5 5* There is one device data block per channel chained together in a list. Chaining and allocation 5 6* of each data block is managed by g115_.pl1 5 7**/ 5 8 5 9 dcl device_data_p ptr init (null); 5 10 5 11 dcl 1 g115_device_data aligned based (device_data_p), 5 12 2 fwd_ptr ptr, /* forward pointer in chain of these structures */ 5 13 2 back_ptr ptr, /* backward pointer " " " " */ 5 14 2 tty_name char (32), /* name of the device channel for devx */ 5 15 2 devx fixed bin, /* Ring 0 device index for the device */ 5 16 2 attach_count fixed bin, /* number of switches currently active */ 5 17 2 dial_mgr_ev_chan fixed bin (71), /* IPC channel for dial manager */ 5 18 2 as_ev_chan fixed bin (71), /* IPC event channel from answering service */ 5 19 2 wait_list, /* IPC wait list to block on for hardcore tty dim */ 5 20 3 nchan fixed bin, /* this must be 2 and must be on an even word */ 5 21 3 dummy_word fixed bin, 5 22 3 tty_ev_channel fixed bin (71), /* because the compiler wants this on even word */ 5 23 3 timeout_ev_channel fixed bin (71), 5 24 2 control_bits, 5 25 3 as_priv_no_block bit (1) unal, /* ON for answering service reads and writes */ 5 26 3 write_split bit (1) unal, /* ON if split records are to be sent to device */ 5 27 3 write_compress bit (1) unal, /* ON if compressed records are to be sent */ 5 28 3 hangup_signalled bit (1) unal, /* ON if a hangup control is sent */ 5 29 2 delay fixed bin (35), /* runout delay for L6 bug */ 5 30 2 fmt_code, /* the current data and operator msg format codes */ 5 31 3 data bit (9) unal, /* format code for data transfer to remote terminal */ 5 32 3 control bit (9) unal, /* format code for operator messages (teleprinter) */ 5 33 2 process_id bit (36), /* process id for sending wakeups to ourselves */ 5 34 2 padding (14) fixed bin, /* for the future */ 5 35 2 buffer_areap ptr, /* ptr to area for buffer allocation */ 5 36 2 first_bp ptr, /* ptr to first input buffer of chain */ 5 37 2 last_bp ptr, /* ptr to last input buffer of chain */ 5 38 2 template_ptr ptr, /* ptr to template output buffer */ 5 39 2 level fixed bin, /* write recursion (or quit) level index */ 5 40 2 outp (100) ptr; /* pointers to output buffers in buffer area 5 41* indexed by level */ 5 42 5 43 dcl buffer_area based (g115_device_data.buffer_areap) area (262144); /* area for input and output buffers */ 5 44 5 45 /* END INCLUDE FILE ... g115_device_data.incl.pl1 */ 215 216 6 1 /* BEGIN include file ... g115_message.incl.pl1 */ 6 2 6 3 /* This structure describes the format of any message which may be sent by the 6 4* g115_dim to the G115 data terminal or received by the dim from that terminal. 6 5* The structure includes some state information associated with the processing 6 6* of the message block. 6 7**/ 6 8 6 9 /* Modified 04/10/77 by Bob Franklin to unpack input blocks */ 6 10 /* Modified by J. Nicholls 7/78 to allow for remaing_record_count instead of character */ 6 11 /* Modified by J. Whitmore, 8/79, to remove null char field, count and garbage variables, and to improve comments */ 6 12 6 13 dcl msgp ptr init (null); /* pointer to message structure */ 6 14 6 15 dcl 1 g115_message aligned based (msgp), /* message and related state variables */ 6 16 2 next_bp ptr, /* forward thread when buffers are chained */ 6 17 6 18 2 text_char_count fixed bin, /* character count of text */ 6 19 2 rec_count fixed bin, /* remaining text records to be processed (input only) */ 6 20 2 last_char_read fixed bin, /* index of last processed input char (Record Separator) */ 6 21 2 being_changed bit (1), /* message or state is being modified */ 6 22 6 23 2 g115_msg_block, /* chars forming the message to/from ring 0 */ 6 24 6 25 3 soh bit (9) unal, /* start of header character */ 6 26 3 fmt_code bit (9) unal, /* format code */ 6 27 3 seq_code bit (9) unal, /* sequence code */ 6 28 3 addr_code bit (9) unal, /* address code */ 6 29 3 op_code unal, /* operations code */ 6 30 4 ascii_pad bit (2) unal, /* -- */ 6 31 4 use bit (1) unal, /* should = "1"b */ 6 32 4 ack bit (3) unal, /* acknowledgement field */ 6 33 4 cmd bit (3) unal, /* instruction field */ 6 34 3 id_code bit (9) unal, /* identification code */ 6 35 3 stx bit (9) unal, /* start of text character */ 6 36 3 text (324 refer (text_char_count)) char (1) unal, /* text of message: ... */ 6 37 3 etx bit (9) unal; /* end of text character */ 6 38 6 39 6 40 /* END include file ... g115_message.incl.pl1 */ 217 218 7 1 /* BEGIN include file G115.incl.pl1 */ 7 2 7 3 /* This include file defines several special character codes used by the Ring 4 portion of the 7 4* Multics support for G115 (GRTS/NPS) protocol */ 7 5 7 6 /* JCW, 8/79 */ 7 7 7 8 dcl 1 G115 aligned internal static options (constant), 7 9 7 10 /* This group defines input/output media codes associated with records within the text of a message block */ 7 11 7 12 2 media_codes unal, 7 13 3 bcd_input_mc char (1) init ("H"), /* Input media code for BCD data - 110 octal */ 7 14 3 bin_input_mc char (1) init ("P"), /* Input media code for Binary data - 120 octal */ 7 15 7 16 3 printer_mc char (1) init ("L"), /* printer output media code - 114 octal */ 7 17 3 punch_bcd_mc char (1) init ("O"), /* punch output media code (BCD data) - 117 octal */ 7 18 3 punch_bin_mc char (1) init ("W"), /* punch output media code (Binary data) - 127 octal */ 7 19 3 teleprinter_mc char (1) init ("N"), /* teleprinter output media code - 116 octal */ 7 20 7 21 /* This group defines the message format codes which apply to all records in a single message block */ 7 22 7 23 2 format_codes unal, 7 24 3 info_ns_nc bit (9) init ("110"b3), /* information message, no split, no compression */ 7 25 3 info_ns_c bit (9) init ("111"b3), /* information message, no split, compression */ 7 26 3 info_s_nc bit (9) init ("112"b3), /* information message, split, no compression */ 7 27 3 info_s_c bit (9) init ("113"b3), /* information message, split, compression */ 7 28 3 special_nc bit (9) init ("104"b3), /* Special control record, no compression */ 7 29 3 special_c bit (9) init ("105"b3), /* Special control record, compression */ 7 30 7 31 /* This group defines reserved characters which appear in the message block */ 7 32 7 33 2 char_codes unal, 7 34 3 stx_char bit (9) init ("002"b3), /* start-of-text (STX) char */ 7 35 3 etx_char bit (9) init ("003"b3), /* end-of-text (ETX) char */ 7 36 3 soh_char bit (9) init ("001"b3), /* start-of-header (SOH) char */ 7 37 3 addr_code_char bit (9) init ("100"b3), /* address code character */ 7 38 3 id_code_char bit (9) init ("100"b3), /* identification code character */ 7 39 3 RS char (1) init (""), /* record separator - 036 octal */ 7 40 3 CC char (1) init (""), /* compression character code - 037 octal */ 7 41 7 42 /* The maximum size of a single g115 message from SOH to ETX */ 7 43 7 44 2 max_msg_len fixed bin init (324); /* max data in a message */ 7 45 7 46 7 47 /* END include file G115.incl.pl1 */ 219 220 8 1 /* BEGIN... remote_ttt_info.incl.pl1 ... 5/78 */ 8 2 8 3 dcl rttp ptr; /* ptr to data structure */ 8 4 8 5 8 6 dcl 1 remote_ttt_info based (rttp) aligned, /* data */ 8 7 2 ttt_bits, /* control bits */ 8 8 (3 escape_output bit (1), /* if on enables output escape processing */ 8 9 3 translate_output bit (1), /* if on enables output translation */ 8 10 3 translate_input bit (1), /* if on enables input translation */ 8 11 3 escape_input bit (1), /* if on enables input escape processing */ 8 12 3 erase_input bit (1), /* if on enables input erase processing */ 8 13 3 canonicalize_input bit (1), /* if on enables input canonicalization */ 8 14 3 edited bit (1)) unal, /* if on enables edited escape processing */ 8 15 2 terminal_type char (32), /* terminal type in TTT */ 8 16 2 kill_char char (1), /* specified kil character */ 8 17 2 erase_char char (1), /* and erase character */ 8 18 2 ttt_ptrs, /* ptr to various ttt tables */ 8 19 3 input_mvtp ptr, /* input translation table */ 8 20 3 output_mvtp ptr, /* output translation table */ 8 21 3 input_tctp ptr, /* input escape table */ 8 22 3 output_tctp ptr, /* output escape table */ 8 23 3 specp ptr; /* special table */ 8 24 8 25 /* END remote_ttt_info.incl.pl1 */ 221 222 223 g115_attach: entry (a_iocbp, a_option, a_comerr_sw, a_code); 224 225 comerr_sw = static_comerr_sw | a_comerr_sw; /* print error messages if either switch is on */ 226 227 adp, device_data_p = null; /* no attach data or device data structures defined yet */ 228 terminal_type, tty, comm, device = ""; 229 delay, code, a_code = 0; 230 iocbp = a_iocbp; /* copy the input iocb pointer */ 231 232 if iocbp -> iocb.attach_descrip_ptr ^= null then do; /* already used? */ 233 code = error_table_$not_detached; 234 call abort_attach ("Already attached", ""); 235 end; 236 237 if hbound (a_option, 1) < 1 then do; 238 code = error_table_$wrong_no_of_args; 239 call abort_attach ("No attach description", ""); 240 end; 241 242 if attach_areap = null then do; /* make an area for attach data structures */ 243 call get_temp_segment_ ("g115_attach", attach_areap, code); 244 if code ^= 0 then call abort_attach ("Unable to create temp segment", ""); 245 attach_area = empty; /* initialize the area */ 246 end; 247 248 on cleanup call clean_up_handler; 249 250 dma.dial_qual = ""; /* prepare for call to dial manager */ 251 attach_description = "g115_"; /* start building att desc which we will tell iox_ about */ 252 do i = 1 to hbound (a_option, 1); 253 attach_description = attach_description || " " || a_option (i); 254 if a_option (i) = "-device" then device = get_option_arg (i); 255 else if a_option (i) = "-tty" then tty = get_option_arg (i); 256 else if a_option (i) = "-comm" then comm = get_option_arg (i); 257 else if a_option (i) = "-auto_call" then dma.dial_qual = get_option_arg (i); 258 else if a_option (i) = "-ascii" then; /* ignore ascii/ebcdic specification */ 259 else if a_option (i) = "-physical_line_length" | a_option (i) = "-pll" then dummy_arg = get_option_arg (i); 260 /* ignore -pll N but no error */ 261 else if a_option (i) = "-terminal_type" | a_option (i) = "-ttp" then terminal_type = get_option_arg (i); 262 else if a_option (i) = "-delay" then do; 263 delay = cv_dec_check_ ((get_option_arg (i)), code); 264 if code ^= 0 | delay < 0 then do; 265 code = error_table_$bad_conversion; 266 call abort_attach ("Invalid delay value", (a_option (i))); 267 end; 268 end; 269 else do; 270 code = error_table_$badopt; 271 call abort_attach ("Invalid attach description option", (a_option (i))); 272 end; 273 end; 274 275 if comm ^= "rci" then do; 276 code = error_table_$badopt; /* indicate bad, but not which one???? */ 277 call abort_attach ("Invalid or missing -comm option", (comm)); 278 end; 279 280 if tty = "" then do; 281 code = error_table_$badopt; 282 call abort_attach ("No ""-tty"" option given", ""); 283 end; 284 285 do i = 1 to hbound (devices, 1) while (device ^= devices (i)); 286 end; 287 if i > hbound (devices, 1) then do; 288 code = error_table_$badopt; 289 call abort_attach ("Invalid device specified", (device)); 290 end; 291 else device_type = i; 292 293 do temp_ptr = first_device_data_p repeat (temp_ptr -> g115_device_data.fwd_ptr) 294 while (temp_ptr ^= null & device_data_p = null); 295 if temp_ptr -> g115_device_data.tty_name = tty then /* channel already defined ? */ 296 device_data_p = temp_ptr; /* then grab the ptr and exit loop */ 297 end; 298 299 if device_data_p = null then do; /* first init for this device */ 300 call ipc_$create_ev_chn (dial_wait_list.dial_mgr_ev_chan, code); 301 if code ^= 0 then call abort_attach ("Unable to create dial event channel", ""); 302 303 dma.version = 1; /* Setup dial manager request structure */ 304 dma.dial_mgr_ev_chan = dial_wait_list.dial_mgr_ev_chan; 305 dma.device_name = tty; /* say which tty channel we want */ 306 307 if dma.dial_qual = "" /* normal attach or auto_call (dial_out) */ 308 then call dial_manager_$privileged_attach (addr (dma), code); 309 else call dial_manager_$dial_out (addr (dma), code); 310 if code = error_table_$action_not_performed | code = error_table_$resource_attached 311 then go to maybe_mine_already; 312 if code ^= 0 then call abort_attach ("From dial_manager_ attaching ^a", (tty)); 313 314 dial_wait: call ipc_$block (addr (dial_wait_list), addr (event_info), code); 315 /* wait for Answering Service to give us the device */ 316 if code ^= 0 then do; 317 call convert_ipc_code_ (code); 318 call abort_attach ("From ipc_$block waiting for ^a attachment.", (tty)); 319 end; 320 321 /* Call convert_dial_message_ so it can update it's table of attached channels */ 322 323 call convert_dial_message_ (unspec (event_info.message), dial_msg_chan, dial_msg_module, 324 dial_msg_ndialed, dial_msg_flags, code); 325 if code ^= 0 then call abort_attach ("From dial_manager_ attaching ^a", (tty)); 326 327 if ^dial_msg_flags.dialed_up then do; /* OOPS - we got a wakeup for some other event - PUNT */ 328 call com_err_ (0, "g115_", "Dial message received: ^[HANGUP^;CONTROL^] on channel: ^a", 329 dial_msg_flags.hung_up, dial_msg_chan); 330 go to dial_wait; /* wait for our channel */ 331 end; 332 333 maybe_mine_already: 334 335 call create_device_data (device_data_p); /* allocate structure and link it */ 336 337 call init_g115_device_data (device_data_p, code); /* then initialize it for this tty device */ 338 339 if code ^= 0 then call abort_attach ("Unable to initialize device data", ""); 340 341 g115_device_data.tty_name = tty; /* save name for future attaches */ 342 g115_device_data.dial_mgr_ev_chan = dial_wait_list.dial_mgr_ev_chan; 343 g115_device_data.delay = delay; /* use the value from attach options */ 344 345 /* set up IPC wait list to use for input/output blocking: two channels, tty and timeout */ 346 347 call ipc_$create_ev_chn (g115_device_data.tty_ev_channel, code); /* create ring 0 tty event channel */ 348 if code ^= 0 then call abort_attach ("Unable to create tty event channel", "");; 349 350 call ipc_$create_ev_chn (g115_device_data.timeout_ev_channel, code); 351 if code ^= 0 then call abort_attach ("Unable to create timeout event channel", "");; 352 353 g115_device_data.nchan = 2; 354 355 call hcs_$tty_attach (tty, g115_device_data.tty_ev_channel, g115_device_data.devx, state, code); 356 if state ^= 5 then code = error_table_$io_no_permission; 357 if code ^= 0 then call abort_attach ("Unable to attach communications channel.", ""); 358 359 modes.str = "rawo,rawi,^hndlquit"; 360 modes.len = length (modes.str); /* set the max size for return info */ 361 362 call hcs_$tty_order (g115_device_data.devx, "modes", addr (modes), state, code); 363 if state ^= 5 then code = error_table_$io_no_permission; 364 if code ^= 0 then call abort_attach ("Unable to set initial modes", ""); 365 366 max_length = G115.max_msg_len + 10; /* tell ring 0 the largest msg we will see */ 367 368 call hcs_$tty_order (g115_device_data.devx, "set_input_message_size", addr (max_length), state, code); 369 if state ^= 5 then code = error_table_$io_no_permission; 370 if code ^= 0 then call abort_attach ("Unable to set input message size", ""); 371 end; 372 373 allocate g115_attach_data in (attach_area) set (adp); /* get a place for the attach data structure */ 374 375 unspec (g115_attach_data) = "0"b; /* initialize the attach data structure */ 376 g115_attach_data.device_type = device_type; /* record the device type code (fixed bin) */ 377 g115_attach_data.device = device; /* set device name in here (char) */ 378 g115_attach_data.attach_description = attach_description; 379 g115_attach_data.device_ptr = device_data_p; /* point it back to the device block */ 380 381 /* define the media code for this attachment */ 382 383 if device_type = teleprinter then g115_attach_data.media_code = G115.teleprinter_mc; 384 else if device_type = printer then g115_attach_data.media_code = G115.printer_mc; 385 else if device_type = punch then g115_attach_data.media_code = G115.punch_bcd_mc; /* default data type */ 386 else g115_attach_data.media_code = ""; /* others are input devices */ 387 388 /* set default ttt data */ 389 390 g115_attach_data.terminal_type = terminal_type; 391 g115_attach_data.kill_char = "@"; 392 g115_attach_data.erase_char = "#"; 393 g115_attach_data.ttt_bits = "1"b; 394 g115_attach_data.ttt_ptrs = null; 395 396 if g115_attach_data.device_type = reader then g115_attach_data.canonicalize_input = "0"b; 397 398 if g115_attach_data.terminal_type ^= "" then do; 399 call get_ttt_info_ (addr (g115_attach_data.ttt_info), code); 400 if code ^= 0 then call abort_attach ("Unknown terminal type specified", ""); 401 end; 402 403 mask = "0"b; 404 405 on any_other call any_other_handler; 406 407 call hcs_$set_ips_mask ("0"b, mask); 408 409 iocbp -> iocb.attach_descrip_ptr = addr (g115_attach_data.attach_description); 410 iocbp -> iocb.attach_data_ptr = adp; 411 iocbp -> iocb.open = g115_open; 412 iocbp -> iocb.detach_iocb = g115_detach; 413 iocbp -> iocb.control = iox_$err_no_operation; 414 iocbp -> iocb.position = iox_$err_no_operation; 415 iocbp -> iocb.modes = iox_$err_no_operation; 416 iocbp -> iocb.put_chars = iox_$err_no_operation; 417 iocbp -> iocb.get_chars = iox_$err_no_operation; 418 iocbp -> iocb.get_line = iox_$err_no_operation; 419 iocbp -> iocb.read_record = iox_$err_no_operation; 420 iocbp -> iocb.write_record = iox_$err_no_operation; 421 422 g115_device_data.attach_count = g115_device_data.attach_count + 1; /* count up attaches */ 423 424 call iox_$propagate (iocbp); 425 426 revert cleanup; 427 428 call hcs_$reset_ips_mask (mask, mask); 429 430 revert any_other; 431 432 code = 0; 433 434 attach_return: 435 436 a_code = code; /* pass back any error codes */ 437 438 return; 439 440 g115_open: entry (a_iocbp, a_open_mode, a_comerr_sw, a_code); 441 442 a_code, code = 0; /* be sure to initialize */ 443 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 444 adp = iocbp -> iocb.attach_data_ptr; 445 device_data_p = g115_attach_data.device_ptr; 446 447 if adp = null | device_data_p = null then do; 448 a_code = error_table_$not_attached; 449 return; 450 end; 451 452 if g115_device_data.hangup_signalled then do; /* Illegal if we sent a hangup to the device */ 453 a_code = error_table_$io_no_permission; 454 return; 455 end; 456 457 open_mode = a_open_mode; 458 459 if ^((open_mode = Stream_input) | (open_mode = Stream_output) | (open_mode = Stream_input_output)) then do; 460 a_code = error_table_$bad_mode; 461 return; 462 end; 463 464 g115_attach_data.open_description = rtrim (iox_modes (open_mode)); 465 466 mask = "0"b; 467 468 on any_other call any_other_handler; 469 470 call hcs_$set_ips_mask ("0"b, mask); 471 472 if ((open_mode = Stream_input) | (open_mode = Stream_input_output)) then do; 473 iocbp -> iocb.get_chars = g115_get_chars; 474 iocbp -> iocb.get_line = g115_get_chars; 475 end; 476 if ((open_mode = Stream_output) | (open_mode = Stream_input_output)) then do; 477 iocbp -> iocb.put_chars = g115_put_chars; 478 end; 479 iocbp -> iocb.read_record = iox_$err_no_operation; 480 iocbp -> iocb.write_record = iox_$err_no_operation; 481 iocbp -> iocb.control = g115_control; 482 iocbp -> iocb.modes = g115_modes; 483 iocbp -> iocb.close = g115_close; 484 iocbp -> iocb.open_descrip_ptr = addr (g115_attach_data.open_description); 485 486 call iox_$propagate (iocbp); 487 488 call hcs_$reset_ips_mask (mask, mask); 489 490 revert any_other; 491 492 return; 493 494 g115_close: entry (a_iocbp, a_code); 495 496 a_code, code = 0; /* be sure to initialize */ 497 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 498 adp = iocbp -> iocb.attach_data_ptr; 499 device_data_p = g115_attach_data.device_ptr; 500 501 if adp = null | device_data_p = null then do; 502 a_code = error_table_$not_attached; 503 return; 504 end; 505 506 if iocbp -> iocb.open_descrip_ptr = null then do; 507 a_code = error_table_$not_open; 508 return; 509 end; 510 511 mask = "0"b; 512 513 on any_other call any_other_handler; 514 515 call hcs_$set_ips_mask ("0"b, mask); 516 517 iocbp -> iocb.open_descrip_ptr = null; 518 iocbp -> iocb.open = g115_open; 519 iocbp -> iocb.detach_iocb = g115_detach; 520 iocbp -> iocb.control = iox_$err_no_operation; 521 iocbp -> iocb.position = iox_$err_no_operation; 522 iocbp -> iocb.modes = iox_$err_no_operation; 523 iocbp -> iocb.put_chars = iox_$err_no_operation; 524 iocbp -> iocb.get_chars = iox_$err_no_operation; 525 iocbp -> iocb.get_line = iox_$err_no_operation; 526 iocbp -> iocb.read_record = iox_$err_no_operation; 527 iocbp -> iocb.write_record = iox_$err_no_operation; 528 529 call iox_$propagate (iocbp); 530 531 call hcs_$reset_ips_mask (mask, mask); 532 533 return; 534 535 g115_get_chars: entry (a_iocbp, a_bufp, a_nelem, a_nelemt, a_code); 536 537 /* This is an entry to get the next record from an input message block. 538* The data is written into a_bufp -> buffer without any G115 media codes or record separators. 539* The calling procedure must add on a trailing NL char if desired. 540**/ 541 542 a_code, code = 0; /* be sure to initialize */ 543 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 544 adp = iocbp -> iocb.attach_data_ptr; 545 device_data_p = g115_attach_data.device_ptr; 546 547 if adp = null | device_data_p = null then do; 548 a_code = error_table_$not_attached; 549 return; 550 end; 551 552 if g115_device_data.hangup_signalled then do; /* Illegal if we sent a hangup to the device */ 553 a_code = error_table_$io_no_permission; 554 return; 555 end; 556 557 if g115_attach_data.device_type = printer | /* not a readable device */ 558 g115_attach_data.device_type = punch then do; 559 a_code = error_table_$invalid_read; 560 return; 561 end; 562 563 call g115_protocol_$read (adp, device_data_p, a_bufp, a_nelem, a_nelemt, a_code); /* pass on read */ 564 565 return; 566 567 g115_put_chars: entry (a_iocbp, a_bufp, a_nelem, a_code); 568 569 /* This is an entry to write a record which may be a partial or complete G115 message block. 570* The record format is a string of ASCII characters without any media code or record separator 571* characters. If the attachment is for the printer device, the last character of the input 572* record is a slew control character. 573**/ 574 575 a_code, code = 0; /* be sure to initialize */ 576 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 577 adp = iocbp -> iocb.attach_data_ptr; 578 device_data_p = g115_attach_data.device_ptr; 579 580 if adp = null | device_data_p = null then do; 581 a_code = error_table_$not_attached; 582 return; 583 end; 584 585 if g115_device_data.hangup_signalled then do; /* Illegal if we sent a hangup to the device */ 586 a_code = error_table_$io_no_permission; 587 return; 588 end; 589 590 if g115_attach_data.device_type = reader then do; 591 a_code = error_table_$invalid_write; 592 return; 593 end; 594 595 596 call g115_protocol_$write (adp, device_data_p, a_bufp, a_nelem, a_code); 597 598 return; 599 600 g115_modes: entry (a_iocbp, a_new_mode, a_old_mode, a_code); 601 602 a_code, code = 0; /* be sure to initialize */ 603 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 604 adp = iocbp -> iocb.attach_data_ptr; 605 device_data_p = g115_attach_data.device_ptr; 606 607 if adp = null | device_data_p = null then do; 608 a_code = error_table_$not_attached; 609 return; 610 end; 611 612 if g115_device_data.hangup_signalled then do; /* Illegal if we sent a hangup to the device */ 613 a_code = error_table_$io_no_permission; 614 return; 615 end; 616 617 a_old_mode = ""; /* initialize return string */ 618 619 if a_new_mode = "non_edited" then g115_attach_data.edited = "0"b; 620 else if a_new_mode = "default" then g115_attach_data.edited = "1"b; 621 else do; 622 modes.str = a_new_mode; 623 modes.len = length (modes.str); /* set the max size for return info */ 624 M_1: 625 call hcs_$tty_order (g115_device_data.devx, "modes", addr (modes), state, code); 626 if state ^= 5 then code = error_table_$io_no_permission; 627 if line_status_pending (code) then go to M_1; 628 a_old_mode = modes.str; /* copy back the old value */ 629 end; 630 631 a_code = code; 632 633 return; 634 635 g115_control: entry (a_iocbp, a_order, a_infop, a_code); 636 637 a_code, code = 0; /* be sure to initialize */ 638 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 639 adp = iocbp -> iocb.attach_data_ptr; 640 device_data_p = g115_attach_data.device_ptr; 641 642 if adp = null | device_data_p = null then do; 643 a_code = error_table_$not_attached; 644 return; 645 end; 646 647 if g115_device_data.hangup_signalled then do; /* Illegal if we sent a hangup to the device */ 648 a_code = error_table_$io_no_permission; 649 return; 650 end; 651 652 order = a_order; /* get the order name */ 653 infop = a_infop; /* and the data pointer */ 654 655 if order = "io_call" then do; /* check this first so we can redefine the order */ 656 657 if infop = null then do; 658 bad_call: a_code = error_table_$no_operation; /* say we didn't do it */ 659 return; 660 end; 661 662 order = infop -> io_call_info.order_name; /* get the new order name */ 663 infop = null; /* make this cheap, only a few orders accepted */ 664 end; 665 666 if order = "hangup" then do; 667 dma.version = 1; /* make structure for call to dial_manager_ */ 668 dma.dial_mgr_ev_chan = g115_device_data.dial_mgr_ev_chan; 669 dma.device_name = g115_device_data.tty_name; 670 dma.dial_qual = ""; 671 672 call ipc_$decl_ev_wait_chn (g115_device_data.dial_mgr_ev_chan, code); 673 /* in case a hangup_proc order was given */ 674 call dial_manager_$release_channel (addr (dma), code); 675 if code ^= 0 then 676 call hcs_$tty_order (g115_device_data.devx, order, infop, state, (0)); /* pass it on */ 677 678 g115_device_data.hangup_signalled = "1"b; /* this will end all but close and detach */ 679 code = 0; /* say it was good, since they MUST close and detach */ 680 end; 681 else if order = "select_device" then do; /* order to set device type for next write */ 682 if infop = null then go to bad_call; /* this order requires this pointer */ 683 if info_string = "teleprinter" then do; 684 g115_attach_data.media_code = G115.teleprinter_mc; 685 end; 686 else if info_string = "punch" then do; 687 688 /* g115_attach_data.media_code = G115.punch_bcd_mc; */ 689 end; 690 else if info_string = "printer" then do; 691 g115_attach_data.media_code = G115.printer_mc; 692 end; 693 else if info_string = "reader" then do; 694 g115_attach_data.media_code = G115.bcd_input_mc; /* character only */ 695 end; 696 else do; /* not a legal value, tell the caller */ 697 code = error_table_$action_not_performed; 698 end; 699 end; 700 else if order = "runout" then do; 701 msgp = g115_device_data.outp (g115_device_data.level + 1); /* buffer we would write into */ 702 if msgp = null then return; /* in case it was not allocated yet */ 703 if g115_message.text_char_count = 0 then return; /* make it fast if nothing to runout */ 704 705 if ^g115_message.being_changed then /* only write consistent messages */ 706 call g115_io_$write (device_data_p, msgp, code); 707 708 g115_message.text_char_count = 0; /* mark this as written */ 709 g115_message.fmt_code = ""b; 710 g115_message.being_changed = "0"b; 711 712 call timer_manager_$sleep ((g115_device_data.delay), "10"b); 713 end; 714 else if order = "hangup_proc" then do; 715 if infop = null then go to bad_call; /* this order requires this pointer */ 716 call ipc_$decl_ev_call_chn (g115_device_data.dial_mgr_ev_chan, hangup_proc.entry_var, hangup_proc.data_ptr, 717 hangup_proc.prior, code); 718 if code ^= 0 then call convert_ipc_code_ (code); 719 end; 720 else if order = "reset" then do; 721 if g115_attach_data.device_type = punch then 722 g115_attach_data.media_code = G115.punch_bcd_mc; 723 end; 724 else if order = "binary_punch" then do; 725 if g115_attach_data.device_type ^= punch then go to bad_call; 726 g115_attach_data.media_code = G115.punch_bin_mc; /* all future records will be binary coded */ 727 end; 728 else if order = "read_status" then do; /* order to get read status */ 729 if infop = null then go to bad_call; /* this order requires this pointer */ 730 info_structure.ev_chan = g115_device_data.tty_ev_channel; /* return ev chn on which read will return */ 731 info_structure.input_available = "0"b; /* none yet */ 732 msgp = g115_device_data.first_bp; /* set auto reference ptr */ 733 follow_chain: if g115_message.rec_count > 0 then do; /* input is ready */ 734 info_structure.input_available = "1"b; /* go to it daemons */ 735 return; 736 end; 737 if g115_message.next_bp ^= null then do; /* if a chain exists, check it out */ 738 msgp = g115_message.next_bp; 739 go to follow_chain; 740 end; 741 742 call g115_io_$read_status (device_data_p, infop, code); /* check for any ring-0 data */ 743 end; 744 else if order = "end_write_mode" then do; 745 call iox_$control (iocbp, "runout", null, code); 746 if code ^= 0 then return; 747 line_status.value = fnp_output_pending; 748 do while (line_status.value = fnp_output_pending); 749 C_1: line_status.value = test_for_fnp_output; 750 call hcs_$tty_order (g115_device_data.devx, "line_control", addr (line_status), state, code); 751 if state ^= 5 then code = error_table_$io_no_permission; 752 if line_status_pending (code) then go to C_1; 753 call timer_manager_$sleep (1, "11"b); /* give fnp a chance to digest line_control */ 754 call hcs_$tty_order (g115_device_data.devx, "line_status", addr (line_status), state, code); 755 if state ^= 5 then code = error_table_$io_no_permission; 756 if line_status_pending (code) then go to C_1; 757 if line_status.value = fnp_output_pending then 758 call timer_manager_$sleep (10, "11"b); 759 end; 760 end; 761 else if order = "resetread" then do; 762 msgp = g115_device_data.first_bp; 763 bufp = g115_message.next_bp; /* find next input buffer in chain */ 764 unspec (g115_message) = "0"b; /* clear out everything */ 765 g115_message.next_bp = null; /* mark as chain end */ 766 g115_device_data.last_bp = msgp; /* " " */ 767 do while (bufp ^= null); 768 msgp = bufp; 769 bufp = g115_message.next_bp; /* walk the chain */ 770 free msgp -> g115_message in (buffer_area); /* Poof, it's gone */ 771 end; 772 C_2: call hcs_$tty_abort (g115_device_data.devx, 1, state, code); 773 if state ^= 5 then code = error_table_$io_no_permission; 774 if line_status_pending (code) then go to C_2; 775 end; 776 else if order = "resetwrite" then do; 777 msgp = g115_device_data.outp (g115_device_data.level); 778 g115_message.text_char_count = 0; 779 g115_message.fmt_code = "0"b; 780 C_3: call hcs_$tty_abort (g115_device_data.devx, 2, state, code); 781 if state ^= 5 then code = error_table_$io_no_permission; 782 if line_status_pending (code) then go to C_3; 783 end; 784 else if order = "set_remote_mode" then do; /* order to tell control tables to act as L6 */ 785 C_4: line_status.value = set_g115_remote_mode; /* set the proper value */ 786 call hcs_$tty_order (g115_device_data.devx, "line_control", addr (line_status), state, code); 787 if state ^= 5 then code = error_table_$io_no_permission; 788 if line_status_pending (code) then go to C_4; 789 end; 790 else if order = "reset_remote_mode" then do; /* order to tell control tables to act as host */ 791 C_5: line_status.value = reset_g115_remote_mode; 792 call hcs_$tty_order (g115_device_data.devx, "line_control", addr (line_status), state, code); 793 if state ^= 5 then code = error_table_$io_no_permission; 794 if line_status_pending (code) then go to C_5; 795 end; 796 else do; 797 C_6: call hcs_$tty_order (g115_device_data.devx, order, infop, state, code); /* pass it on */ 798 if state ^= 5 then code = error_table_$io_no_permission; 799 if line_status_pending (code) then go to C_6; 800 end; 801 802 a_code = code; 803 804 return; 805 806 g115_detach: entry (a_iocbp, a_code); /* entry to detach device */ 807 808 a_code, code = 0; /* be sure to initialize */ 809 iocbp = a_iocbp -> iocb.actual_iocb_ptr; 810 adp = iocbp -> iocb.attach_data_ptr; 811 device_data_p = g115_attach_data.device_ptr; 812 813 if adp = null | device_data_p = null then do; 814 a_code = error_table_$not_attached; 815 return; 816 end; 817 818 if iocbp -> iocb.open_descrip_ptr ^= null then do; 819 a_code = error_table_$not_closed; 820 return; 821 end; 822 823 mask = "0"b; 824 825 on any_other call any_other_handler; 826 827 call hcs_$set_ips_mask ("0"b, mask); 828 829 iocbp -> iocb.attach_descrip_ptr = null; 830 831 call iox_$propagate (iocbp); 832 833 g115_device_data.attach_count = g115_device_data.attach_count - 1; /* count down for detach */ 834 835 call cleanup_and_detach (a_code); 836 837 call hcs_$reset_ips_mask (mask, mask); 838 839 return; 840 841 as_init: entry (a_devx, a_ddp, a_adp, a_code); 842 843 if attach_areap = null then do; 844 call get_temp_segment_ ("g115_attach", attach_areap, a_code); 845 if a_code ^= 0 then return; 846 attach_area = empty; 847 end; 848 849 call create_device_data (device_data_p); /* make a new block for AS */ 850 851 call init_g115_device_data (device_data_p, a_code); 852 if a_code ^= 0 then return; 853 854 g115_device_data.tty_name = "as_tty"; /* make up a dummy name for now */ 855 g115_device_data.devx = a_devx; 856 g115_device_data.dial_mgr_ev_chan = 0; 857 g115_device_data.tty_ev_channel = 0; 858 g115_device_data.timeout_ev_channel = 0; 859 g115_device_data.as_priv_no_block = "1"b; /* this is the answering service! */ 860 861 allocate g115_attach_data in (attach_area) set (adp); 862 863 g115_attach_data.media_code = G115.teleprinter_mc; /* answering service is only a teleprinter */ 864 g115_attach_data.device = "teleprinter"; 865 g115_attach_data.device_type = teleprinter; 866 g115_attach_data.attach_description = "AS_direct_attach"; 867 g115_attach_data.open_description = "stream_input_output"; 868 g115_attach_data.device_ptr = device_data_p; 869 g115_attach_data.terminal_type = ""; 870 g115_attach_data.kill_char = "@"; 871 g115_attach_data.erase_char = "#"; 872 g115_attach_data.ttt_bits = "1"b; 873 g115_attach_data.ttt_ptrs = null; 874 875 a_ddp = device_data_p; 876 a_adp = adp; 877 878 return; 879 880 881 882 as_detach: entry (a_devx, a_ddp, a_adp, a_code); 883 884 adp = a_adp; 885 device_data_p = a_ddp; 886 887 free adp -> g115_attach_data in (attach_area); 888 889 call release_temp_segment_ ("g115_io_buffer", g115_device_data.buffer_areap, a_code); 890 891 call delete_device_data (device_data_p); /* remove from the chain */ 892 893 return; 894 895 flip_comerr_sw: entry; 896 897 static_comerr_sw = ^static_comerr_sw; /* change the bit */ 898 899 call ioa_ ("g115_: Static com_err_ switch is ^[on^;off^]", static_comerr_sw); 900 901 return; 902 903 904 cleanup_and_detach: proc (ec); 905 906 dcl ec fixed bin (35); 907 dcl ignore fixed bin (35); 908 909 if adp ^= null then 910 free adp -> g115_attach_data in (attach_area); 911 912 if device_data_p ^= null then /* check on deleting the device data */ 913 if g115_device_data.attach_count < 1 then do; /* no more streams attached, free block */ 914 if ^g115_device_data.hangup_signalled then do; /* hang up the line if caller didn't */ 915 dma.version = 1; /* make structure for call to dial_manager_ */ 916 dma.dial_mgr_ev_chan = g115_device_data.dial_mgr_ev_chan; 917 dma.device_name = g115_device_data.tty_name; 918 dma.dial_qual = ""; 919 920 call ipc_$decl_ev_wait_chn (g115_device_data.dial_mgr_ev_chan, ignore); 921 /* in case a hangup_proc order was given */ 922 call dial_manager_$release_channel (addr (dma), ignore); 923 if code ^= 0 then 924 call hcs_$tty_order (g115_device_data.devx, order, infop, state, ignore); /* pass it on */ 925 end; 926 do chn = g115_device_data.tty_ev_channel, g115_device_data.timeout_ev_channel, 927 g115_device_data.dial_mgr_ev_chan; 928 call ipc_$delete_ev_chn (chn, ignore); 929 end; 930 931 call hcs_$tty_detach (g115_device_data.devx, 0, state, ec); 932 933 call release_temp_segment_ ("g115_io_buffer", g115_device_data.buffer_areap, ignore); 934 935 call delete_device_data (device_data_p); /* remove from the chain */ 936 937 end; 938 939 end cleanup_and_detach; 940 941 942 943 get_option_arg: proc (idx) returns (char (*) var); 944 945 /* this proc is used to do multiple tests and assignments within a one line then clause of an if statement */ 946 947 dcl idx fixed bin; 948 949 idx = idx + 1; /* bump the current option index, to find the option arg */ 950 if idx > hbound (a_option, 1) then do; /* still in range? */ 951 code = error_table_$noarg; /* tell process it left out an arg */ 952 call abort_attach ("No argument after ", (a_option (i - 1))); 953 end; 954 955 attach_description = attach_description || " " || a_option (idx); /* include the arg in attach description */ 956 957 return (a_option (idx)); 958 959 end get_option_arg; 960 961 abort_attach: proc (control_string, arg_value); /* this proc handles attach errors */ 962 963 dcl (control_string, arg_value) char (*) aligned; 964 dcl saved_code fixed bin (35); 965 966 if comerr_sw then call com_err_ (code, "g115_", control_string, arg_value); 967 968 saved_code = code; /* keep a copy */ 969 970 call cleanup_and_detach (code); 971 if saved_code ^= 0 then code = saved_code; /* use former reason if any */ 972 973 go to attach_return; /* non local transfer to finish off the abort */ 974 975 end abort_attach; 976 977 978 979 any_other_handler: proc; 980 981 /* this is the any_other handler to protect us while masked against IPS signals */ 982 983 if mask then call hcs_$reset_ips_mask (mask, mask); 984 mask = ""b; 985 986 call continue_to_signal_ (code); 987 988 return; 989 990 end any_other_handler; 991 992 993 994 995 clean_up_handler: proc; 996 997 /* this is the cleanup condition handler for errors during the attach entry */ 998 999 call cleanup_and_detach (ignore); 1000 1001 return; 1002 1003 end clean_up_handler; 1004 1005 init_g115_device_data: proc (ddp, ec); 1006 1007 dcl ddp ptr; 1008 dcl ec fixed bin (35); 1009 dcl msgp ptr; 1010 dcl bp ptr; 1011 1012 ddp -> g115_device_data.tty_name = ""; /* let the main proc define this */ 1013 ddp -> g115_device_data.fmt_code.control = G115.special_nc; 1014 ddp -> g115_device_data.fmt_code.data = G115.info_s_c; /* data will be compressed and split */ 1015 ddp -> g115_device_data.write_split, ddp -> g115_device_data.write_compress = "1"b; /* for easy test */ 1016 ddp -> g115_device_data.delay = 50000; /* default to 50 msec for AS */ 1017 ddp -> g115_device_data.level = 0; /* the write invocation level */ 1018 ddp -> g115_device_data.outp (*) = null; 1019 ddp -> g115_device_data.process_id = get_process_id_ (); /* record our process id for wakeups */ 1020 1021 /* make an area for allocation of input/output buffers */ 1022 1023 call get_temp_segment_ ("g115_io_buffer", ddp -> g115_device_data.buffer_areap, ec); 1024 if ec ^= 0 then return; 1025 1026 bp = ddp -> g115_device_data.buffer_areap; /* get short pointer name */ 1027 bp -> buffer_area = empty; /* initialize the area */ 1028 1029 allocate g115_message in (bp -> buffer_area) set (ddp -> g115_device_data.template_ptr); /* OUTPUT buffer */ 1030 1031 msgp = ddp -> g115_device_data.template_ptr; /* for easy structure reference */ 1032 1033 /* set up the template output buffer for speed later */ 1034 1035 unspec (msgp -> g115_message) = "0"b; /* set everything to zero */ 1036 msgp -> g115_message.next_bp = null; /* output buffers are not chained */ 1037 msgp -> g115_message.soh = G115.soh_char; 1038 msgp -> g115_message.addr_code = G115.addr_code_char; 1039 msgp -> g115_message.op_code.use = "1"b; 1040 msgp -> g115_message.id_code = G115.id_code_char; 1041 msgp -> g115_message.stx = G115.stx_char; 1042 msgp -> g115_message.etx = G115.etx_char; 1043 1044 allocate g115_message in (bp -> buffer_area) set (ddp -> g115_device_data.first_bp); /* INPUT buffer */ 1045 1046 msgp, ddp -> g115_device_data.last_bp = ddp -> g115_device_data.first_bp; /* set the chain */ 1047 unspec (msgp -> g115_message) = "0"b; /* make it clean */ 1048 msgp -> g115_message.next_bp = null; 1049 1050 return; 1051 1052 end init_g115_device_data; 1053 1054 create_device_data: proc (ddp); 1055 1056 /* this proc allocates a copy of g115_device_data and threads it into the list */ 1057 1058 dcl ddp ptr; 1059 1060 allocate g115_device_data in (attach_area) set (ddp); 1061 1062 unspec (ddp -> g115_device_data) = "0"b; /* set everything to zero */ 1063 1064 ddp -> g115_device_data.back_ptr = last_device_data_p; /* point back to previous tail */ 1065 ddp -> g115_device_data.fwd_ptr = null; /* this is the new tail of the chain */ 1066 if last_device_data_p ^= null /* if tail already exists */ 1067 then last_device_data_p -> g115_device_data.fwd_ptr = ddp; /* link it to this block */ 1068 else first_device_data_p = ddp; /* otherwise start the chain */ 1069 last_device_data_p = ddp; /* record the new tail */ 1070 1071 return; 1072 1073 delete_device_data: entry (ddp); 1074 1075 /* this entry removes a link in the chain and frees the data block */ 1076 1077 if ddp -> g115_device_data.back_ptr = null then /* was this the head of the chain? */ 1078 first_device_data_p = ddp -> g115_device_data.fwd_ptr; /* make the next one the head */ 1079 else ddp -> g115_device_data.back_ptr -> g115_device_data.fwd_ptr = ddp -> g115_device_data.fwd_ptr; 1080 /* move our fwd ptr to previous block */ 1081 1082 if ddp -> g115_device_data.fwd_ptr = null then /* was this the tail of the chain */ 1083 last_device_data_p = ddp -> g115_device_data.back_ptr; /* make previous the new tail */ 1084 else ddp -> g115_device_data.fwd_ptr -> g115_device_data.back_ptr = ddp -> g115_device_data.back_ptr; 1085 /* move our back ptr to next block */ 1086 1087 free ddp -> g115_device_data in (attach_area); 1088 1089 ddp = null; /* just to be sure */ 1090 1091 return; 1092 1093 end create_device_data; 1094 1095 line_status_pending: proc (ec) returns (bit (1)); 1096 1097 dcl ec fixed bin (35); 1098 1099 /* this proc returns true if there was a line status code and we cleared the line, ready for a retry */ 1100 1101 if ec = 0 then return ("0"b); /* avoid a loop for normal case */ 1102 1103 do while (ec = error_table_$line_status_pending); 1104 call hcs_$tty_order (g115_device_data.devx, "line_status", addr (line_status), state, ec); 1105 if state ^= 5 then ec = error_table_$io_no_permission; 1106 end; 1107 1108 if ec = 0 then return ("1"b); /* OK to retry */ 1109 1110 return ("0"b); /* Do not retry */ 1111 1112 end line_status_pending; 1113 1114 1115 1116 1117 end g115_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/30/82 1138.3 g115_.pl1 >spec>on>08/30/82>g115_.pl1 207 1 07/28/81 1333.4 iocb.incl.pl1 >ldd>include>iocb.incl.pl1 209 2 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 211 3 07/19/79 1547.1 io_call_info.incl.pl1 >ldd>include>io_call_info.incl.pl1 213 4 02/07/80 0930.1 g115_attach_data.incl.pl1 >ldd>include>g115_attach_data.incl.pl1 215 5 02/07/80 0930.1 g115_device_data.incl.pl1 >ldd>include>g115_device_data.incl.pl1 217 6 02/07/80 0930.1 g115_message.incl.pl1 >ldd>include>g115_message.incl.pl1 219 7 02/07/80 0930.1 G115.incl.pl1 >ldd>include>G115.incl.pl1 221 8 08/03/78 2021.0 remote_ttt_info.incl.pl1 >ldd>include>remote_ttt_info.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. G115 000000 constant structure level 1 dcl 7-8 Stream_input constant fixed bin(17,0) initial dcl 2-15 ref 459 472 Stream_input_output constant fixed bin(17,0) initial dcl 2-15 ref 459 472 476 Stream_output constant fixed bin(17,0) initial dcl 2-15 ref 459 476 a_adp parameter pointer dcl 34 set ref 841 876* 882 884 a_bufp parameter pointer dcl 35 set ref 535 563* 567 596* a_code parameter fixed bin(35,0) dcl 28 set ref 223 229* 434* 440 442* 448* 453* 460* 494 496* 502* 507* 535 542* 548* 553* 559* 563* 567 575* 581* 586* 591* 596* 600 602* 608* 613* 631* 635 637* 643* 648* 658* 802* 806 808* 814* 819* 835* 841 844* 845 851* 852 882 889* a_comerr_sw parameter bit(1) unaligned dcl 38 ref 223 225 440 a_ddp parameter pointer dcl 33 set ref 841 875* 882 885 a_devx parameter fixed bin(17,0) dcl 32 ref 841 855 882 a_infop parameter pointer dcl 41 ref 635 653 a_iocbp parameter pointer dcl 36 ref 223 230 440 443 494 497 535 543 567 576 600 603 635 638 806 809 a_nelem parameter fixed bin(21,0) dcl 30 set ref 535 563* 567 596* a_nelemt parameter fixed bin(21,0) dcl 31 set ref 535 563* a_new_mode parameter char unaligned dcl 29 ref 600 619 620 622 a_old_mode parameter char unaligned dcl 29 set ref 600 617* 628* a_open_mode parameter fixed bin(17,0) dcl 39 ref 440 457 a_option parameter varying char array dcl 37 ref 223 237 252 253 254 255 256 257 258 259 259 261 261 262 266 271 950 952 955 957 a_order parameter char unaligned dcl 40 ref 635 652 actual_iocb_ptr 12 based pointer level 2 dcl 1-4 ref 443 497 543 576 603 638 809 addr builtin function dcl 122 ref 307 307 309 309 314 314 314 314 362 362 368 368 399 399 409 484 624 624 674 674 750 750 754 754 786 786 792 792 922 922 1104 1104 addr_code 6(27) based bit(9) level 3 packed unaligned dcl 6-15 set ref 1038* addr_code_char 3(27) 000000 constant bit(9) initial level 3 packed unaligned dcl 7-8 ref 1038 adp 000506 automatic pointer initial dcl 4-7 set ref 227* 373* 375 376 377 378 379 383 384 385 386 390 391 392 393 394 396 396 398 399 399 409 410 444* 445 447 464 484 498* 499 501 544* 545 547 557 557 563* 577* 578 580 590 596* 604* 605 607 619 620 639* 640 642 684 691 694 721 721 725 726 810* 811 813 861* 863 864 865 866 867 868 869 870 871 872 873 876 884* 887 4-7* 909 909 any_other 000336 stack reference condition dcl 125 ref 405 430 468 490 513 825 arg_value parameter char dcl 963 set ref 961 966* as_priv_no_block 30 based bit(1) level 3 packed unaligned dcl 5-11 set ref 859* attach_area based area(262144) dcl 81 set ref 245* 373 846* 861 887 909 1060 1087 attach_areap 000010 internal static pointer initial dcl 74 set ref 242 243* 245 373 843 844* 846 861 887 909 1060 1087 attach_count 15 based fixed bin(17,0) level 2 dcl 5-11 set ref 422* 422 833* 833 912 attach_data_ptr 16 based pointer level 2 dcl 1-4 set ref 410* 444 498 544 577 604 639 810 attach_descrip_ptr 14 based pointer level 2 dcl 1-4 set ref 232 409* 829* attach_description 31 based varying char(256) level 2 in structure "g115_attach_data" dcl 4-9 in procedure "g115_" set ref 378* 409 866* attach_description 000100 automatic varying char(256) dcl 45 in procedure "g115_" set ref 251* 253* 253 378 955* 955 back_ptr 2 based pointer level 2 dcl 5-11 set ref 1064* 1077 1079 1082 1084* 1084 bcd_input_mc 000000 constant char(1) initial level 3 packed unaligned dcl 7-8 ref 694 being_changed 5 based bit(1) level 2 dcl 6-15 set ref 705 710* bp 000530 automatic pointer dcl 1010 set ref 1026* 1027 1029 1044 buffer_area based area(262144) dcl 5-43 set ref 770 1027* 1029 1044 buffer_areap 52 based pointer level 2 dcl 5-11 set ref 770 889* 933* 1023* 1026 bufp 000202 automatic pointer dcl 46 set ref 763* 767 768 769* canonicalize_input 0(05) based bit(1) level 4 packed unaligned dcl 4-9 set ref 396* char_codes 3 000000 constant structure level 2 packed unaligned dcl 7-8 chn 000204 automatic fixed bin(71,0) dcl 47 set ref 926* 928* cleanup 000330 stack reference condition dcl 124 ref 248 426 close 36 based entry variable level 2 dcl 1-4 set ref 483* code 000206 automatic fixed bin(35,0) dcl 48 set ref 229* 233* 238* 243* 244 263* 264 265* 270* 276* 281* 288* 300* 301 307* 309* 310 310 312 314* 316 317* 323* 325 337* 339 347* 348 350* 351 355* 356* 357 362* 363* 364 368* 369* 370 399* 400 432* 434 442* 496* 542* 575* 602* 624* 626* 627* 631 637* 672* 674* 675 679* 697* 705* 716* 718 718* 742* 745* 746 750* 751* 752* 754* 755* 756* 772* 773* 774* 780* 781* 782* 786* 787* 788* 792* 793* 794* 797* 798* 799* 802 808* 923 951* 966* 968 970* 971* 986* com_err_ 000074 constant entry external dcl 109 ref 328 966 comerr_sw 000207 automatic bit(1) initial unaligned dcl 49 set ref 49* 225* 966 comm 000210 automatic char(32) unaligned dcl 50 set ref 228* 256* 275 277 continue_to_signal_ 000102 constant entry external dcl 112 ref 986 control 32(09) based bit(9) level 3 in structure "g115_device_data" packed unaligned dcl 5-11 in procedure "g115_" set ref 1013* control 66 based entry variable level 2 in structure "iocb" dcl 1-4 in procedure "g115_" set ref 413* 481* 520* control_bits 30 based structure level 2 dcl 5-11 control_string parameter char dcl 963 set ref 961 966* convert_dial_message_ 000072 constant entry external dcl 107 ref 323 convert_ipc_code_ 000062 constant entry external dcl 103 ref 317 718 cv_dec_check_ 000020 constant entry external dcl 86 ref 263 data 32 based bit(9) level 3 packed unaligned dcl 5-11 set ref 1014* data_ptr 4 based pointer level 2 dcl 167 set ref 716* ddp parameter pointer dcl 1007 in procedure "init_g115_device_data" ref 1005 1012 1013 1014 1015 1015 1016 1017 1018 1019 1023 1026 1029 1031 1044 1046 1046 ddp parameter pointer dcl 1058 in procedure "create_device_data" set ref 1054 1060* 1062 1064 1065 1066 1068 1069 1073 1077 1077 1079 1079 1082 1082 1084 1084 1087 1089* delay 000220 automatic fixed bin(35,0) dcl 51 in procedure "g115_" set ref 229* 263* 264 343 delay 31 based fixed bin(35,0) level 2 in structure "g115_device_data" dcl 5-11 in procedure "g115_" set ref 343* 712 1016* detach_iocb 26 based entry variable level 2 dcl 1-4 set ref 412* 519* device 000221 automatic char(32) unaligned dcl 52 in procedure "g115_" set ref 228* 254* 285 289 377 device 143 based char(32) level 2 in structure "g115_attach_data" dcl 4-9 in procedure "g115_" set ref 377* 864* device_data_p 000510 automatic pointer initial dcl 5-9 set ref 227* 293 295* 299 333* 337* 341 342 343 347 350 353 355 355 362 368 379 422 422 445* 447 452 499* 501 545* 547 552 563* 578* 580 585 596* 605* 607 612 624 640* 642 647 668 669 672 675 678 701 701 705* 712 716 730 732 742* 750 754 762 766 770 772 777 777 780 786 792 797 811* 813 833 833 849* 851* 854 855 856 857 858 859 868 875 885* 889 891* 5-9* 912 912 914 916 917 920 923 926 926 926 931 933 935* 1104 device_name 12 000460 automatic char(32) level 2 dcl 195 set ref 305* 669* 917* device_ptr 26 based pointer level 2 dcl 4-9 set ref 379* 445 499 545 578 605 640 811 868* device_type 000231 automatic fixed bin(17,0) dcl 53 in procedure "g115_" set ref 291* 376 383 384 385 device_type 153 based fixed bin(17,0) level 2 in structure "g115_attach_data" dcl 4-9 in procedure "g115_" set ref 376* 396 557 557 590 721 725 865* devices 000124 constant char(32) initial array unaligned dcl 150 ref 285 285 287 devx 14 based fixed bin(17,0) level 2 dcl 5-11 set ref 355* 362* 368* 624* 675* 750* 754* 772* 780* 786* 792* 797* 855* 923* 931* 1104* dial_manager_$dial_out 000070 constant entry external dcl 106 ref 309 dial_manager_$privileged_attach 000064 constant entry external dcl 104 ref 307 dial_manager_$release_channel 000066 constant entry external dcl 105 ref 674 922 dial_mgr_ev_chan 10 000460 automatic fixed bin(71,0) level 2 in structure "dma" dcl 195 in procedure "g115_" set ref 304* 668* 916* dial_mgr_ev_chan 16 based fixed bin(71,0) level 2 in structure "g115_device_data" dcl 5-11 in procedure "g115_" set ref 342* 668 672* 716* 856* 916 920* 926 dial_mgr_ev_chan 2 000502 automatic fixed bin(71,0) level 2 in structure "dial_wait_list" dcl 201 in procedure "g115_" set ref 300* 304 342 dial_msg_chan 000232 automatic char(32) unaligned dcl 54 set ref 323* 328* dial_msg_flags 000457 automatic structure level 1 dcl 189 set ref 323* dial_msg_module 000242 automatic char(32) unaligned dcl 55 set ref 323* dial_msg_ndialed 000252 automatic fixed bin(17,0) dcl 56 set ref 323* dial_qual 1 000460 automatic char(22) level 2 dcl 195 set ref 250* 257* 307 670* 918* dial_wait_list 000502 automatic structure level 1 dcl 201 set ref 314 314 dialed_up 000457 automatic bit(1) level 2 packed unaligned dcl 189 set ref 327 dma 000460 automatic structure level 1 dcl 195 set ref 307 307 309 309 674 674 922 922 dummy_arg 000253 automatic char(32) unaligned dcl 57 set ref 259* ec parameter fixed bin(35,0) dcl 1097 in procedure "line_status_pending" set ref 1095 1101 1103 1104* 1105* 1108 ec parameter fixed bin(35,0) dcl 1008 in procedure "init_g115_device_data" set ref 1005 1023* 1024 ec parameter fixed bin(35,0) dcl 906 in procedure "cleanup_and_detach" set ref 904 931* edited 0(06) based bit(1) level 4 packed unaligned dcl 4-9 set ref 619* 620* empty builtin function dcl 122 ref 245 846 1027 entry_var based entry variable level 2 dcl 167 set ref 716* erase_char 12 based char(1) level 3 dcl 4-9 set ref 392* 871* error_table_$action_not_performed 000126 external static fixed bin(35,0) dcl 132 ref 310 697 error_table_$bad_conversion 000120 external static fixed bin(35,0) dcl 129 ref 265 error_table_$bad_mode 000134 external static fixed bin(35,0) dcl 136 ref 460 error_table_$badopt 000132 external static fixed bin(35,0) dcl 135 ref 270 276 281 288 error_table_$invalid_read 000136 external static fixed bin(35,0) dcl 138 ref 559 error_table_$invalid_write 000140 external static fixed bin(35,0) dcl 139 ref 591 error_table_$io_no_permission 000154 external static fixed bin(35,0) dcl 145 ref 356 363 369 453 553 586 613 626 648 751 755 773 781 787 793 798 1105 error_table_$line_status_pending 000124 external static fixed bin(35,0) dcl 131 ref 1103 error_table_$no_operation 000152 external static fixed bin(35,0) dcl 144 ref 658 error_table_$noarg 000122 external static fixed bin(35,0) dcl 130 ref 951 error_table_$not_attached 000142 external static fixed bin(35,0) dcl 140 ref 448 502 548 581 608 643 814 error_table_$not_closed 000150 external static fixed bin(35,0) dcl 143 ref 819 error_table_$not_detached 000144 external static fixed bin(35,0) dcl 141 ref 233 error_table_$not_open 000146 external static fixed bin(35,0) dcl 142 ref 507 error_table_$resource_attached 000156 external static fixed bin(35,0) dcl 146 ref 310 error_table_$wrong_no_of_args 000130 external static fixed bin(35,0) dcl 134 ref 238 etx based bit(9) level 3 packed unaligned dcl 6-15 set ref 1042* etx_char 3(09) 000000 constant bit(9) initial level 3 packed unaligned dcl 7-8 ref 1042 ev_chan based fixed bin(71,0) level 2 dcl 172 set ref 730* event_info 000450 automatic structure level 1 dcl 180 set ref 314 314 first_bp 54 based pointer level 2 dcl 5-11 set ref 732 762 1044* 1046 first_device_data_p 000012 internal static pointer initial dcl 75 set ref 293 1068* 1077* fmt_code 6(09) based bit(9) level 3 in structure "g115_message" packed unaligned dcl 6-15 in procedure "g115_" set ref 709* 779* fmt_code 32 based structure level 2 in structure "g115_device_data" dcl 5-11 in procedure "g115_" fnp_output_pending constant fixed bin(17,0) initial dcl 157 ref 747 748 757 format_codes 1(18) 000000 constant structure level 2 packed unaligned dcl 7-8 fwd_ptr based pointer level 2 dcl 5-11 set ref 297 1065* 1066* 1077 1079* 1079 1082 1084 g115_attach_data based structure level 1 dcl 4-9 set ref 373 375* 861 887 909 g115_device_data based structure level 1 dcl 5-11 set ref 1060 1062* 1087 g115_io_$read_status 000052 constant entry external dcl 99 ref 742 g115_io_$write 000054 constant entry external dcl 100 ref 705 g115_message based structure level 1 dcl 6-15 set ref 764* 770 1029 1035* 1044 1047* g115_msg_block 6 based structure level 2 dcl 6-15 g115_protocol_$read 000116 constant entry external dcl 118 ref 563 g115_protocol_$write 000114 constant entry external dcl 117 ref 596 get_chars 46 based entry variable level 2 dcl 1-4 set ref 417* 473* 524* get_line 42 based entry variable level 2 dcl 1-4 set ref 418* 474* 525* get_process_id_ 000024 constant entry external dcl 88 ref 1019 get_temp_segment_ 000076 constant entry external dcl 110 ref 243 844 1023 get_ttt_info_ 000026 constant entry external dcl 89 ref 399 hangup_proc based structure level 1 dcl 167 hangup_signalled 30(03) based bit(1) level 3 packed unaligned dcl 5-11 set ref 452 552 585 612 647 678* 914 hbound builtin function dcl 122 ref 237 252 285 287 950 hcs_$reset_ips_mask 000112 constant entry external dcl 116 ref 428 488 531 837 983 hcs_$set_ips_mask 000106 constant entry external dcl 114 ref 407 470 515 827 hcs_$tty_abort 000030 constant entry external dcl 90 ref 772 780 hcs_$tty_attach 000042 constant entry external dcl 95 ref 355 hcs_$tty_detach 000050 constant entry external dcl 98 ref 931 hcs_$tty_order 000056 constant entry external dcl 101 ref 362 368 624 675 750 754 786 792 797 923 1104 hung_up 0(01) 000457 automatic bit(1) level 2 packed unaligned dcl 189 set ref 328* i 000263 automatic fixed bin(17,0) dcl 58 set ref 252* 253 254 254* 255 255* 256 256* 257 257* 258 259 259 259* 261 261 261* 262 263* 266 271* 285* 285* 287 291 952 id_code 7(09) based bit(9) level 3 packed unaligned dcl 6-15 set ref 1040* id_code_char 4 000000 constant bit(9) initial level 3 packed unaligned dcl 7-8 ref 1040 idx parameter fixed bin(17,0) dcl 947 set ref 943 949* 949 950 955 957 ignore 000100 automatic fixed bin(35,0) dcl 907 in procedure "cleanup_and_detach" set ref 920* 922* 923* 928* 933* ignore 000264 automatic fixed bin(35,0) dcl 59 in procedure "g115_" set ref 999* info_s_c 2(09) 000000 constant bit(9) initial level 3 packed unaligned dcl 7-8 ref 1014 info_string based char(32) unaligned dcl 82 ref 683 686 690 693 info_structure based structure level 1 dcl 172 infop 000266 automatic pointer dcl 60 set ref 653* 657 662 663* 675* 682 683 686 690 693 715 716 716 716 729 730 731 734 742* 797* 923* input_available 2 based bit(1) level 2 dcl 172 set ref 731* 734* io_call_info based structure level 1 dcl 3-10 ioa_ 000044 constant entry external dcl 96 ref 899 iocb based structure level 1 dcl 1-4 iocbp 000270 automatic pointer dcl 61 set ref 230* 232 409 410 411 412 413 414 415 416 417 418 419 420 424* 443* 444 473 474 477 479 480 481 482 483 484 486* 497* 498 506 517 518 519 520 521 522 523 524 525 526 527 529* 543* 544 576* 577 603* 604 638* 639 745* 809* 810 818 829 831* iox_$control 000046 constant entry external dcl 97 ref 745 iox_$err_no_operation 000104 constant entry external dcl 113 ref 413 414 415 416 417 418 419 420 479 480 520 521 522 523 524 525 526 527 iox_$propagate 000110 constant entry external dcl 115 ref 424 486 529 831 iox_modes 000006 constant char(24) initial array dcl 2-6 ref 464 ipc_$block 000040 constant entry external dcl 94 ref 314 ipc_$create_ev_chn 000060 constant entry external dcl 102 ref 300 347 350 ipc_$decl_ev_call_chn 000036 constant entry external dcl 93 ref 716 ipc_$decl_ev_wait_chn 000034 constant entry external dcl 92 ref 672 920 ipc_$delete_ev_chn 000032 constant entry external dcl 91 ref 928 kill_char 11 based char(1) level 3 dcl 4-9 set ref 391* 870* last_bp 56 based pointer level 2 dcl 5-11 set ref 766* 1046* last_device_data_p 000014 internal static pointer initial dcl 76 set ref 1064 1066 1066 1069* 1082* len 000346 automatic fixed bin(17,0) level 2 dcl 176 set ref 360* 623* length builtin function dcl 122 ref 360 623 level 62 based fixed bin(17,0) level 2 dcl 5-11 set ref 701 777 1017* line_status 000344 automatic structure level 1 dcl 161 set ref 750 750 754 754 786 786 792 792 1104 1104 mask 000272 automatic bit(36) unaligned dcl 63 set ref 403* 407* 428* 428* 466* 470* 488* 488* 511* 515* 531* 531* 823* 827* 837* 837* 983 983* 983* 984* max_length 000273 automatic fixed bin(17,0) dcl 64 set ref 366* 368 368 max_msg_len 5 000000 constant fixed bin(17,0) initial level 2 dcl 7-8 ref 366 media_code 30 based char(1) level 2 packed unaligned dcl 4-9 set ref 383* 384* 385* 386* 684* 691* 694* 721* 726* 863* media_codes 000000 constant structure level 2 packed unaligned dcl 7-8 message 2 000450 automatic fixed bin(71,0) level 2 dcl 180 set ref 323 323 modes 000346 automatic structure level 1 dcl 176 in procedure "g115_" set ref 362 362 624 624 modes 56 based entry variable level 2 in structure "iocb" dcl 1-4 in procedure "g115_" set ref 415* 482* 522* msgp 000512 automatic pointer initial dcl 6-13 in procedure "g115_" set ref 701* 702 703 705 705* 708 709 710 732* 733 737 738* 738 762* 763 764 765 766 768* 769 770 777* 778 779 6-13* msgp 000526 automatic pointer dcl 1009 in procedure "init_g115_device_data" set ref 1031* 1035 1036 1037 1038 1039 1040 1041 1042 1046* 1047 1048 nchan 22 based fixed bin(17,0) level 3 in structure "g115_device_data" dcl 5-11 in procedure "g115_" set ref 353* nchan 000502 automatic fixed bin(17,0) initial level 2 in structure "dial_wait_list" dcl 201 in procedure "g115_" set ref 201* next_bp based pointer level 2 dcl 6-15 set ref 737 738 763 765* 769 1036* 1048* null builtin function dcl 122 ref 227 232 242 293 293 299 394 447 447 501 501 506 517 547 547 580 580 607 607 642 642 657 663 682 702 715 729 737 745 745 765 767 813 813 818 829 843 873 4-7 5-9 6-13 909 912 1018 1036 1048 1065 1066 1077 1082 1089 op_code 7 based structure level 3 packed unaligned dcl 6-15 open 32 based entry variable level 2 dcl 1-4 set ref 411* 518* open_descrip_ptr 20 based pointer level 2 dcl 1-4 set ref 484* 506 517* 818 open_description 132 based varying char(32) level 2 dcl 4-9 set ref 464* 484 867* open_mode 000274 automatic fixed bin(17,0) dcl 65 set ref 457* 459 459 459 464 472 472 476 476 order 000275 automatic char(32) unaligned dcl 66 set ref 652* 655 662* 666 675* 681 700 714 720 724 728 744 761 776 784 790 797* 923* order_name 11 based char(32) level 2 dcl 3-10 ref 662 outp 64 based pointer array level 2 dcl 5-11 set ref 701 777 1018* position 62 based entry variable level 2 dcl 1-4 set ref 414* 521* printer constant fixed bin(17,0) initial dcl 4-25 ref 384 557 printer_mc 0(18) 000000 constant char(1) initial level 3 packed unaligned dcl 7-8 ref 384 691 prior 6 based fixed bin(17,0) level 2 dcl 167 set ref 716* process_id 33 based bit(36) level 2 dcl 5-11 set ref 1019* punch constant fixed bin(17,0) initial dcl 4-27 ref 385 557 721 725 punch_bcd_mc 0(27) 000000 constant char(1) initial level 3 packed unaligned dcl 7-8 ref 385 721 punch_bin_mc 1 000000 constant char(1) initial level 3 packed unaligned dcl 7-8 ref 726 put_chars 52 based entry variable level 2 dcl 1-4 set ref 416* 477* 523* read_record 72 based entry variable level 2 dcl 1-4 set ref 419* 479* 526* reader constant fixed bin(17,0) initial dcl 4-24 ref 396 590 rec_count 3 based fixed bin(17,0) level 2 dcl 6-15 set ref 733 release_temp_segment_ 000100 constant entry external dcl 111 ref 889 933 remote_ttt_info based structure level 1 dcl 8-6 reset_g115_remote_mode constant fixed bin(17,0) initial dcl 156 ref 791 rtrim builtin function dcl 122 ref 464 saved_code 000100 automatic fixed bin(35,0) dcl 964 set ref 968* 971 971 set_g115_remote_mode constant fixed bin(17,0) initial dcl 154 ref 785 soh 6 based bit(9) level 3 packed unaligned dcl 6-15 set ref 1037* soh_char 3(18) 000000 constant bit(9) initial level 3 packed unaligned dcl 7-8 ref 1037 special_nc 2(18) 000000 constant bit(9) initial level 3 packed unaligned dcl 7-8 ref 1013 state 000305 automatic fixed bin(17,0) dcl 67 set ref 355* 356 362* 363 368* 369 624* 626 675* 750* 751 754* 755 772* 773 780* 781 786* 787 792* 793 797* 798 923* 931* 1104* 1105 static_comerr_sw 000016 internal static bit(1) initial unaligned dcl 77 set ref 225 897* 897 899* str 1 000346 automatic char(256) level 2 dcl 176 set ref 359* 360 622* 623 628 stx 7(18) based bit(9) level 3 packed unaligned dcl 6-15 set ref 1041* stx_char 3 000000 constant bit(9) initial level 3 packed unaligned dcl 7-8 ref 1041 teleprinter constant fixed bin(17,0) initial dcl 4-26 ref 383 865 teleprinter_mc 1(09) 000000 constant char(1) initial level 3 packed unaligned dcl 7-8 ref 383 684 863 temp_ptr 000306 automatic pointer dcl 68 set ref 293* 293* 295 295* 297 template_ptr 60 based pointer level 2 dcl 5-11 set ref 1029* 1031 terminal_type 000310 automatic char(32) unaligned dcl 69 in procedure "g115_" set ref 228* 261* 390 terminal_type 1 based char(32) level 3 in structure "g115_attach_data" dcl 4-9 in procedure "g115_" set ref 390* 398 869* test_for_fnp_output constant fixed bin(17,0) initial dcl 155 ref 749 text_char_count 2 based fixed bin(17,0) level 2 dcl 6-15 set ref 703 708* 764 770 778* 1029* 1035 1042 1044* 1047 timeout_ev_channel 26 based fixed bin(71,0) level 3 dcl 5-11 set ref 350* 858* 926 timer_manager_$sleep 000022 constant entry external dcl 87 ref 712 753 757 ttt_bits based structure level 3 dcl 4-9 set ref 393* 872* ttt_info based structure level 2 dcl 4-9 set ref 399 399 ttt_ptrs 14 based structure level 3 dcl 4-9 set ref 394* 873* tty 000320 automatic char(32) unaligned dcl 70 set ref 228* 255* 280 295 305 312 318 325 341 355* tty_ev_channel 24 based fixed bin(71,0) level 3 dcl 5-11 set ref 347* 355* 730 857* 926 tty_name 4 based char(32) level 2 dcl 5-11 set ref 295 341* 669 854* 917 1012* unspec builtin function dcl 122 set ref 323 323 375* 764* 1035* 1047* 1062* use 7(02) based bit(1) level 4 packed unaligned dcl 6-15 set ref 1039* value 000344 automatic fixed bin(17,0) level 2 packed unaligned dcl 161 set ref 747* 748 749* 757 785* 791* version 000460 automatic fixed bin(17,0) level 2 dcl 195 set ref 303* 667* 915* wait_list 22 based structure level 2 dcl 5-11 write_compress 30(02) based bit(1) level 3 packed unaligned dcl 5-11 set ref 1015* write_record 76 based entry variable level 2 dcl 1-4 set ref 420* 480* 527* write_split 30(01) based bit(1) level 3 packed unaligned dcl 5-11 set ref 1015* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 2-15 Direct_output internal static fixed bin(17,0) initial dcl 2-15 Direct_update internal static fixed bin(17,0) initial dcl 2-15 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 2-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 2-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 2-15 Sequential_input internal static fixed bin(17,0) initial dcl 2-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 2-15 Sequential_output internal static fixed bin(17,0) initial dcl 2-15 Sequential_update internal static fixed bin(17,0) initial dcl 2-15 error_table_$ionmat external static fixed bin(35,0) dcl 133 error_table_$multiple_io_attachment external static fixed bin(35,0) dcl 137 io_call_af_ret based varying char dcl 3-25 io_call_infop automatic pointer dcl 3-8 iox_$iocb_version_sentinel external static char(4) dcl 1-43 level automatic fixed bin(17,0) dcl 62 ltrim builtin function dcl 122 rttp automatic pointer dcl 8-3 short_iox_modes internal static char(4) initial array dcl 2-12 NAMES DECLARED BY EXPLICIT CONTEXT. C_1 005166 constant label dcl 749 ref 752 756 C_2 005431 constant label dcl 772 ref 774 C_3 005500 constant label dcl 780 ref 782 C_4 005540 constant label dcl 785 ref 788 C_5 005622 constant label dcl 791 ref 794 C_6 005700 constant label dcl 797 ref 799 M_1 004322 constant label dcl 624 ref 627 abort_attach 007060 constant entry internal dcl 961 ref 234 239 244 266 271 277 282 289 301 312 318 325 339 348 351 357 364 370 400 952 any_other_handler 007154 constant entry internal dcl 979 ref 405 468 513 825 as_detach 006321 constant entry external dcl 882 as_init 006120 constant entry external dcl 841 attach_return 003324 constant label dcl 434 ref 973 bad_call 004505 constant label dcl 658 ref 682 715 725 729 clean_up_handler 007205 constant entry internal dcl 995 ref 248 cleanup_and_detach 006437 constant entry internal dcl 904 ref 835 970 999 create_device_data 007454 constant entry internal dcl 1054 ref 333 849 delete_device_data 007520 constant entry internal dcl 1073 ref 891 935 dial_wait 002235 constant label dcl 314 ref 330 flip_comerr_sw 006401 constant entry external dcl 895 follow_chain 005070 constant label dcl 733 ref 739 g115_ 000734 constant entry external dcl 11 g115_attach 000750 constant entry external dcl 223 g115_close 003605 constant entry external dcl 494 ref 483 g115_control 004410 constant entry external dcl 635 ref 481 g115_detach 005751 constant entry external dcl 806 ref 412 519 g115_get_chars 003773 constant entry external dcl 535 ref 473 474 g115_modes 004205 constant entry external dcl 600 ref 482 g115_open 003334 constant entry external dcl 440 ref 411 518 g115_put_chars 004102 constant entry external dcl 567 ref 477 get_option_arg 006703 constant entry internal dcl 943 ref 254 255 256 257 259 261 263 init_g115_device_data 007217 constant entry internal dcl 1005 ref 337 851 line_status_pending 007567 constant entry internal dcl 1095 ref 627 752 756 774 782 788 794 799 maybe_mine_already 002436 constant label dcl 333 set ref 310 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 10712 11072 7713 10722 Length 11632 7713 160 524 777 10 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME g115_ 504 external procedure is an external procedure. on unit on line 248 76 on unit on unit on line 405 64 on unit on unit on line 468 64 on unit on unit on line 513 64 on unit on unit on line 825 64 on unit cleanup_and_detach 99 internal procedure is called by several nonquick procedures. get_option_arg 86 internal procedure uses returns(char(*)) or returns(bit(*)). abort_attach 88 internal procedure is called during a stack extension. any_other_handler 70 internal procedure is called by several nonquick procedures. clean_up_handler internal procedure shares stack frame of on unit on line 248. init_g115_device_data internal procedure shares stack frame of external procedure g115_. create_device_data 64 internal procedure is called by several nonquick procedures. line_status_pending internal procedure shares stack frame of external procedure g115_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 attach_areap g115_ 000012 first_device_data_p g115_ 000014 last_device_data_p g115_ 000016 static_comerr_sw g115_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME abort_attach 000100 saved_code abort_attach cleanup_and_detach 000100 ignore cleanup_and_detach g115_ 000100 attach_description g115_ 000202 bufp g115_ 000204 chn g115_ 000206 code g115_ 000207 comerr_sw g115_ 000210 comm g115_ 000220 delay g115_ 000221 device g115_ 000231 device_type g115_ 000232 dial_msg_chan g115_ 000242 dial_msg_module g115_ 000252 dial_msg_ndialed g115_ 000253 dummy_arg g115_ 000263 i g115_ 000264 ignore g115_ 000266 infop g115_ 000270 iocbp g115_ 000272 mask g115_ 000273 max_length g115_ 000274 open_mode g115_ 000275 order g115_ 000305 state g115_ 000306 temp_ptr g115_ 000310 terminal_type g115_ 000320 tty g115_ 000344 line_status g115_ 000346 modes g115_ 000450 event_info g115_ 000457 dial_msg_flags g115_ 000460 dma g115_ 000502 dial_wait_list g115_ 000506 adp g115_ 000510 device_data_p g115_ 000512 msgp g115_ 000526 msgp init_g115_device_data 000530 bp init_g115_device_data THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return tra_ext enable shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc return_chars_eis alloc_based free_based empty THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ continue_to_signal_ convert_dial_message_ convert_ipc_code_ cv_dec_check_ dial_manager_$dial_out dial_manager_$privileged_attach dial_manager_$release_channel g115_io_$read_status g115_io_$write g115_protocol_$read g115_protocol_$write get_process_id_ get_temp_segment_ get_ttt_info_ hcs_$reset_ips_mask hcs_$set_ips_mask hcs_$tty_abort hcs_$tty_attach hcs_$tty_detach hcs_$tty_order ioa_ iox_$control iox_$err_no_operation iox_$propagate ipc_$block ipc_$create_ev_chn ipc_$decl_ev_call_chn ipc_$decl_ev_wait_chn ipc_$delete_ev_chn release_temp_segment_ timer_manager_$sleep THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$bad_conversion error_table_$bad_mode error_table_$badopt error_table_$invalid_read error_table_$invalid_write error_table_$io_no_permission error_table_$line_status_pending error_table_$no_operation error_table_$noarg error_table_$not_attached error_table_$not_closed error_table_$not_detached error_table_$not_open error_table_$resource_attached error_table_$wrong_no_of_args LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 49 000722 201 000723 4 7 000725 5 9 000727 6 13 000730 11 000733 13 000742 223 000743 225 000767 227 001001 228 001004 229 001020 230 001023 232 001026 233 001032 234 001034 237 001054 238 001061 239 001064 242 001106 243 001113 244 001137 245 001160 248 001164 250 001202 251 001205 252 001212 253 001223 254 001274 255 001324 256 001354 257 001404 258 001434 259 001443 261 001477 262 001534 263 001542 264 001610 265 001615 266 001620 267 001663 268 001664 270 001665 271 001670 272 001720 273 001721 275 001723 276 001727 277 001732 280 001754 281 001760 282 001763 285 002005 286 002020 287 002022 288 002025 289 002030 290 002055 291 002056 293 002057 295 002072 297 002100 299 002103 300 002107 301 002120 303 002141 304 002143 305 002145 307 002150 309 002170 310 002203 312 002211 314 002235 316 002254 317 002256 318 002265 323 002307 325 002345 327 002371 328 002374 330 002435 333 002436 337 002444 339 002446 341 002467 342 002473 343 002475 347 002477 348 002510 350 002531 351 002543 353 002564 355 002567 356 002617 357 002625 359 002646 360 002651 362 002653 363 002710 364 002716 366 002737 368 002741 369 003002 370 003010 373 003031 375 003037 376 003042 377 003044 378 003047 379 003054 383 003056 384 003066 385 003075 386 003103 390 003105 391 003110 392 003112 393 003114 394 003132 396 003140 398 003145 399 003151 400 003164 403 003205 405 003206 407 003230 409 003243 410 003247 411 003250 412 003254 413 003257 414 003263 415 003265 416 003267 417 003271 418 003273 419 003275 420 003277 422 003301 424 003303 426 003311 428 003312 430 003322 432 003323 434 003324 438 003326 440 003327 442 003345 443 003347 444 003354 445 003356 447 003360 448 003370 449 003373 452 003374 453 003377 454 003402 457 003403 459 003405 460 003413 461 003416 464 003417 466 003447 468 003450 470 003472 472 003505 473 003514 474 003521 476 003523 477 003530 479 003535 480 003543 481 003545 482 003550 483 003553 484 003556 486 003561 488 003567 490 003577 492 003600 494 003601 496 003616 497 003620 498 003625 499 003627 501 003631 502 003641 503 003644 506 003645 507 003651 508 003654 511 003655 513 003656 515 003700 517 003713 518 003716 519 003722 520 003725 521 003731 522 003733 523 003735 524 003737 525 003741 526 003743 527 003745 529 003747 531 003755 533 003765 535 003766 542 004004 543 004006 544 004013 545 004015 547 004017 548 004027 549 004032 552 004033 553 004036 554 004041 557 004042 559 004047 560 004052 563 004053 565 004074 567 004075 575 004113 576 004115 577 004122 578 004124 580 004126 581 004136 582 004141 585 004142 586 004145 587 004150 590 004151 591 004154 592 004157 596 004160 598 004177 600 004200 602 004231 603 004233 604 004240 605 004242 607 004244 608 004254 609 004257 612 004260 613 004263 614 004266 617 004267 619 004274 620 004305 622 004315 623 004320 624 004322 626 004357 627 004365 628 004372 631 004400 633 004402 635 004403 637 004427 638 004431 639 004436 640 004440 642 004442 643 004452 644 004455 647 004456 648 004461 649 004464 652 004465 653 004472 655 004475 657 004501 658 004505 659 004510 662 004511 663 004514 666 004516 667 004522 668 004524 669 004526 670 004531 672 004534 674 004545 675 004560 678 004614 679 004617 680 004620 681 004621 682 004625 683 004631 684 004636 685 004643 686 004644 689 004650 690 004651 691 004655 692 004662 693 004663 694 004667 695 004673 697 004674 699 004677 700 004700 701 004704 702 004710 703 004714 705 004716 708 004733 709 004735 710 004737 712 004740 713 004757 714 004760 715 004764 716 004770 718 005010 719 005021 720 005022 721 005026 723 005035 724 005036 725 005042 726 005046 727 005051 728 005052 729 005056 730 005062 731 005064 732 005066 733 005070 734 005073 735 005076 737 005077 738 005103 739 005105 742 005106 743 005121 744 005122 745 005126 746 005156 747 005160 748 005162 749 005166 750 005170 751 005230 752 005236 753 005243 754 005260 755 005317 756 005325 757 005332 759 005353 760 005354 761 005355 762 005361 763 005363 764 005365 765 005402 766 005404 767 005405 768 005411 769 005413 770 005416 771 005430 772 005431 773 005451 774 005457 775 005464 776 005465 777 005471 778 005475 779 005476 780 005500 781 005520 782 005526 783 005533 784 005534 785 005540 786 005542 787 005602 788 005610 789 005615 790 005616 791 005622 792 005624 793 005664 794 005672 795 005677 797 005700 798 005731 799 005737 802 005744 804 005746 806 005747 808 005762 809 005764 810 005771 811 005773 813 005775 814 006005 815 006010 818 006011 819 006015 820 006020 823 006021 825 006022 827 006044 829 006057 831 006062 833 006071 835 006074 837 006102 839 006112 841 006113 843 006131 844 006136 845 006162 846 006164 849 006170 851 006176 852 006206 854 006210 855 006214 856 006217 857 006221 858 006222 859 006223 861 006225 863 006233 864 006237 865 006242 866 006244 867 006251 868 006256 869 006260 870 006263 871 006265 872 006267 873 006305 875 006313 876 006315 878 006316 882 006317 884 006332 885 006336 887 006341 889 006343 891 006371 893 006377 895 006400 897 006407 899 006416 901 006435 904 006436 909 006444 912 006453 914 006464 915 006467 916 006471 917 006473 918 006476 920 006501 922 006512 923 006526 926 006562 928 006570 929 006602 931 006621 933 006642 935 006671 939 006701 943 006702 949 006710 950 006712 951 006720 952 006722 953 006771 955 006772 957 007045 961 007057 966 007100 968 007132 970 007135 971 007144 973 007150 979 007153 983 007161 984 007173 986 007175 988 007204 995 007205 999 007206 1001 007216 1005 007217 1012 007221 1013 007226 1014 007231 1015 007234 1016 007240 1017 007242 1018 007243 1019 007261 1023 007275 1024 007322 1026 007326 1027 007332 1029 007335 1031 007353 1035 007354 1036 007371 1037 007373 1038 007376 1039 007400 1040 007402 1041 007405 1042 007410 1044 007416 1046 007430 1047 007432 1048 007450 1050 007452 1054 007453 1060 007461 1062 007470 1064 007473 1065 007476 1066 007501 1068 007510 1069 007513 1071 007516 1073 007517 1077 007525 1079 007540 1082 007542 1084 007554 1087 007560 1089 007563 1091 007566 1095 007567 1101 007571 1103 007600 1104 007605 1105 007643 1106 007652 1108 007653 1110 007662 ----------------------------------------------------------- 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