COMPILATION LISTING OF SEGMENT mc_util_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx, AZ, Sys-M Compiled on: 09/03/87 1209.6 mst Thu Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 /* format: style4,indattr */ 13 14 mc_util_: procedure; 15 16 /* This procedure contains utility routines used by the message coordinator. 17* It contains the following entries: 18* init: 19* mrt_source: 20* mrt_stream: 21* get_seg: 22* queue 23**/ 24 25 /* message_coordr_ was originally created by Dennis Capps 26* with advice from TH VanVleck in October of 1972. 27* mc_util_ created by Bill Silver on May 31, 1974. 28* modified August 1976 by Robert Coren to get pointer to CDT and to behave sensibly if init entry is called twice. 29* Modified June 1971 by T. Casey for MR9.0 for new wakeup priorities. 30* Modified 1984-12, BIM: iox_ message coordinator. 31**/ 32 33 34 /****^ HISTORY COMMENTS: 35* 1) change(86-01-07,MSharpe), approve(87-05-01,MCR7690), 36* audit(87-05-10,Parisek), install(87-08-04,MR12.1-1055): 37* Added the new "virtual_flag" and "cdt_channel_flag" arguments to the 38* declaration and calls to mc_commands_$new_tty. 39* 2) change(87-02-05,GDixon), approve(87-05-01,MCR7690), 40* audit(87-05-10,Parisek), install(87-08-04,MR12.1-1055): 41* Modified for a change to mc_anstbl.incl.pl1. 42* Added the new "cdt_channel_flag" argument to the declaration and 43* calls to mc_commands_$new_tty. 44* 3) change(87-03-27,Parisek), approve(87-05-01,MCR7690), 45* audit(87-08-03,GDixon), install(87-08-04,MR12.1-1055): 46* Initialize the mc_anstbl.dsa_ring_number entry in the mc_anstbl 47* structure. 48* END HISTORY COMMENTS */ 49 50 51 /* Parameters */ 52 declare 53 arg_alarm bit (1), /* ON => alarm message. */ 54 arg_code fixed bin, /* Error code. */ 55 arg_entry_name char (*), /* Name of segment to initiate. */ 56 arg_qp ptr, /* Pointer to output queue segment. */ 57 arg_seg_ptr ptr, /* Pointer to segment that was initiated. */ 58 arg_source_name char (*), /* Name of source entry. */ 59 arg_sourcex fixed bin, /* Index to source entry. */ 60 arg_stream_name char (*), /* Name of stream entry. */ 61 arg_streamp ptr, /* Pointer to stream entry. */ 62 arg_streamx fixed bin, /* Index to stream entry. */ 63 arg_string_len fixed bin, /* Length of input string. */ 64 arg_source fixed bin, /* Source index */ 65 arg_string_ptr ptr, /* Pointer to input string. */ 66 ansptr ptr, /* Returned pointer to mc_anstbl. */ 67 cons_cont_proc entry, /* Entry to call to twitch typewriter. */ 68 intty char (*), /* Console name. */ 69 inttyp ptr, /* Returned pointer to mc_ate. */ 70 sdir char (*); /* Pathname of system directory for tables. */ 71 72 /* Declarations of POINTERS */ 73 declare 74 cdtp ptr, /* to Channel Definition Table */ 75 mc_ansp_stat ptr int static init (null), /* to mc_anstbl */ 76 mcmp ptr int static init (null), /* to message seg for message coordinator */ 77 messp ptr int static init (null), /* to a partic message */ 78 mrtp ptr int static init (null), /* to Message Routing Table */ 79 qp ptr, /* to queue of lines to be typed on a device */ 80 seg_ptr ptr, /* to make a segment. */ 81 streamp ptr, /* to a stream entry in MRT. */ 82 string_ptr ptr, /* to input string. */ 83 temp_SDBp ptr int static init (null), /* to temp_SDB */ 84 vcep ptr, /* to an entry in virtual console table */ 85 vconsp ptr int static init (null); /* to Virtual CONSole table */ 86 87 /* Fixed binary quantities */ 88 declare 89 ackn fixed bin (71) init (0), /* event message for calls to hcs_$wakeup */ 90 code fixed bin, /* Error code */ 91 i fixed bin, /* a temporary index */ 92 j fixed bin, /* another temporary index */ 93 sourcex fixed bin, 94 streamx fixed bin, 95 string_len fixed bin, 96 vacantx fixed bin; 97 98 /* Character strings */ 99 declare 100 entry_name char (32), 101 source_name char (32), 102 stream_name char (32), 103 sysdir char (168) int static init (">system_control_1"); 104 105 /* BIT strings */ 106 declare 107 dont_log bit (1) init ("0"b), /* "1"b=>Sentinel-- Needn't be logged */ 108 initialized bit (1) int static init ("0"b), /* to prevent multiple initializations */ 109 wake_typer bit (1); /* ON => send wakeup. */ 110 111 /* BUILTIN FUNCTIONS */ 112 declare 113 addr builtin, 114 null builtin, 115 string builtin; 116 117 /* EXTERNAL ENTRIES */ 118 declare 119 get_process_id_ entry returns (bit (36)), 120 hcs_$add_acl_entries entry (char (*), char (*), ptr, fixed bin, fixed bin), 121 hcs_$initiate entry (char (*), char (*), char (*), fixed bin (1), fixed bin (2), ptr, fixed bin), 122 hcs_$make_seg entry (char (*), char (*), char (*), fixed bin (5), ptr, fixed bin), 123 hcs_$terminate_noname entry (ptr, fixed bin), 124 hcs_$truncate_seg entry (ptr, fixed bin, fixed bin), 125 hcs_$wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin), 126 ipc_$create_ev_chn entry (fixed bin (71), fixed bin), 127 ipc_$decl_ev_call_chn entry (fixed bin (71), entry, ptr, fixed bin, fixed bin), 128 mc_commands_$define entry (char (*), char (*), char (*), fixed bin), 129 mc_commands_$init entry (ptr, ptr, ptr, ptr, ptr), 130 mc_commands_$new_tty entry (char (*), bit (36), bit (1) aligned, 131 ptr, fixed bin), 132 mc_con_rec_$init entry (ptr), 133 mc_util_$get_seg entry (char (*), ptr, fixed bin), 134 mc_wakeups_$init entry (ptr, ptr, ptr, ptr), 135 mc_wakeups_$protocol entry (ptr), 136 mc_wakeups_$router entry (ptr); 137 138 /* EXTERNAL constants */ 139 declare 140 error_table_$ioname_not_found ext fixed bin, 141 error_table_$noentry ext fixed bin; 142 143 /* STRUCTURES */ 144 declare 145 1 temp_SDB int static aligned like stream, /* For calls to mrd_util_$read */ 146 1 temp_mess int static aligned like message_block; /* ditto */ 147 148 dcl based_string char (string_len) based (string_ptr); 149 150 declare 151 1 segment_acl (1) aligned, 152 2 access_name char (32), 153 2 modes bit (36), 154 2 mbz bit (36) init ("0"b), 155 2 status_code fixed bin (35); 156 157 158 init: entry (sdir, intty, cons_cont_proc, ansptr, inttyp, arg_code); 159 160 161 /* This entry is called to initialize the message coordinator. 162* It sets up all the tables used by the message coordinator. 163* It calls the initialization entries of the other procedures 164* that make up the message coordinator. 165**/ 166 sysdir = sdir; 167 code = 0; 168 169 if initialized /* already been called */ 170 then do; /* we still have to fill in output arguments */ 171 call hcs_$initiate (sysdir, "mc_anstbl", "", 0, 1, ansptr, code); 172 if ansptr ^= null 173 then do; 174 call hcs_$terminate_noname (ansptr, code); /* once is enough */ 175 call mc_commands_$new_tty (intty, (36)"1"b, "1"b, inttyp, code); 176 arg_code = 0; 177 end; 178 179 else arg_code = code; 180 return; 181 end; 182 183 messp = addr (temp_mess); 184 temp_SDBp = addr (temp_SDB); 185 temp_SDB.ourmess = null; 186 temp_SDB.hismess = null; 187 temp_SDB.source = "(op)"; 188 temp_SDB.stream = "reply"; 189 temp_SDB.source_index = 0; 190 temp_SDB.stream_index = 0; 191 temp_SDB.prev_trans.first_block = 0; 192 temp_SDB.prev_trans.end_block = 0; 193 temp_SDB.prev_trans.current_block = 0; 194 temp_SDB.prev_trans.offset = 0; 195 temp_SDB.no_of_vcons = 0; 196 string (temp_SDB.flags) = "0"b; 197 198 /* Initiate mc.message */ 199 call mc_util_$get_seg ("mc.message", mcmp, code); 200 if code ^= 0 201 then goto INIT_RETURN; 202 203 temp_SDB.ourmess = mcmp; 204 205 /* Initialize mc.message */ 206 call hcs_$truncate_seg (mcmp, 0, code); /* Zero it */ 207 mcmp -> syscon_mseg.current_process_id = get_process_id_ (); 208 mcmp -> syscon_mseg.ipc_el.n = 1; 209 call ipc_$create_ev_chn (mcmp -> syscon_mseg.ipc_el.channel, code); 210 if code ^= 0 then goto INIT_RETURN; 211 mcmp -> syscon_mseg.proto_el.n = 1; 212 call ipc_$create_ev_chn (mcmp -> syscon_mseg.proto_el.channel, code); 213 if code ^= 0 then goto INIT_RETURN; 214 215 /* Make these event call channels so sources can get some action going */ 216 call ipc_$decl_ev_call_chn (mcmp -> syscon_mseg.ipc_el.channel, mc_wakeups_$router, null, MC_PRIO, code); 217 call ipc_$decl_ev_call_chn (mcmp -> syscon_mseg.proto_el.channel, mc_wakeups_$protocol, null, MC_PRIO, code); 218 219 /* Initiate other segs */ 220 call mc_util_$get_seg ("mc_anstbl", mc_ansp, code); 221 if code ^= 0 222 then goto INIT_RETURN; 223 mc_ansp_stat, ansptr = mc_ansp; 224 225 call mc_util_$get_seg ("cdt", cdtp, code); 226 if code ^= 0 then go to INIT_RETURN; 227 228 call mc_util_$get_seg ("vcons_tab", vconsp, code); 229 if code ^= 0 230 then goto INIT_RETURN; 231 232 call mc_util_$get_seg ("MRT", mrtp, code); 233 if code ^= 0 234 then goto INIT_RETURN; 235 236 /* Set up mc_anstbl */ 237 /* First fill in the header */ 238 call hcs_$truncate_seg (mc_ansp, 0, code); 239 mc_anstbl.max_size = 256; /* No of entries permitted. */ 240 mc_anstbl.mc_procid = mcmp -> syscon_mseg.current_process_id; 241 mc_anstbl.sysdir = sysdir; /* Where to find put data segs. */ 242 mc_anstbl.mrtp = mrtp; /* Pointer to MRT */ 243 mc_anstbl.vconsp = vconsp; /* Pointer to Virtual Console Table */ 244 mc_anstbl.cons_cont_proc = cons_cont_proc; /* Proc to wake when tty wants something. */ 245 mc_anstbl.max_sources = 32; 246 mc_anstbl.dsa_ring_number = 2; /* DSA ring */ 247 248 249 /* Now we must initialize some of the other procedures which make up 250* the message coordinator. We will pass them some pointers they are 251* interrested in. 252**/ 253 call mc_commands_$init (mc_ansp, cdtp, temp_SDBp, mcmp, messp); 254 call mc_con_rec_$init (mc_ansp); 255 call mc_wakeups_$init (mc_ansp, temp_SDBp, mcmp, messp); 256 257 /* Set up first entry in mc_anstbl. 258**/ 259 call mc_commands_$new_tty (intty, (36)"1"b, "1"b, inttyp, code); 260 if code ^= 0 then 261 if code = error_table_$ioname_not_found then code = 0; 262 else goto INIT_RETURN; 263 264 call hcs_$truncate_seg (vconsp, 0, code); /* Initialize virtual console table. */ 265 266 /* Fill in * entry */ 267 vcep = addr (vcons_tab.star_entry); 268 vcons.vcons = "*"; 269 vcons.no_of_dest = 1; 270 vcons.dest (1).type = 1; 271 vcons.dest (1).dest = intty; 272 vcons.dest (1).queue_seg_ptr = addr (mc_anstbl.entry (1)) -> mc_ate.queue_ptr; 273 274 /* Define the default virtual console. */ 275 call mc_commands_$define ("default_vcons", "tty", intty, code); 276 if code ^= 0 then 277 if code = error_table_$ioname_not_found then code = 0; 278 279 280 /* Initialize the MRT */ 281 call hcs_$truncate_seg (mrtp, 0, code); 282 MRT.star_entry.source = "*"; 283 MRT.star_entry.hismess = null; 284 MRT.star_entry.no_of_streams = 1; 285 streamp = addr (MRT.star_entry.stream); 286 stream.stream = "*"; 287 stream.ourmess = mcmp; 288 stream.no_of_vcons = 1; 289 stream.vcons (1) = "default_vcons"; 290 stream.vcons_index (1) = 1; 291 initialized = "1"b; 292 293 INIT_RETURN: 294 arg_code = code; 295 return; 296 297 298 mrt_source: entry (arg_source_name, arg_sourcex, arg_code); 299 300 301 /* This entry is called to look for a source entry in the Message 302* Routing Table. It returns the index associated with this 303* source entry. 304**/ 305 306 source_name = arg_source_name; /* Copy input argument. */ 307 vacantx = 0; /* We remember first vacant entry. */ 308 309 do sourcex = 1 to MRT.no_of_sources; 310 if MRT.source (sourcex).source = source_name 311 then do; /* We found the right source entry. */ 312 arg_sourcex = sourcex; /* Set return arguments. */ 313 arg_code = 0; 314 return; 315 end; 316 if vacantx = 0 /* Is this a vacant entry? */ 317 then if ^MRT.source (sourcex).flags.valid 318 then vacantx = sourcex; 319 end; 320 321 arg_sourcex = vacantx; /* Didn't find right source entry. */ 322 arg_code = error_table_$ioname_not_found; 323 324 return; 325 326 327 mrt_stream: entry (arg_sourcex, arg_stream_name, arg_streamp, arg_streamx, arg_code); 328 329 330 /* This entry is called to find a stream entry within a source entry. 331* It will return a pointer to the stream entry as well as the array 332* index associated with this stream entry. 333**/ 334 335 sourcex = arg_sourcex; /* Copy argument data. */ 336 stream_name = arg_stream_name; 337 338 vacantx = 0; /* We're going to remember the first vacancy. */ 339 340 do streamx = 1 to MRT.source (sourcex).no_of_streams; 341 streamp = addr (MRT.source (sourcex).stream (streamx)); 342 if streamp -> stream.stream = stream_name 343 then do; /* Found the right stream entry. */ 344 arg_streamp = streamp; 345 arg_streamx = streamx; 346 arg_code = 0; 347 return; 348 end; 349 if vacantx = 0 /* Save index of first vacant entry. */ 350 then if ^(streamp -> stream.flags.valid) 351 then vacantx = streamx; 352 end; 353 354 streamx = vacantx; /* Didn't find the right stream entry. */ 355 if streamx = 0 /* Did we find a vacant entry? */ 356 then arg_streamp = null (); /* No. */ 357 else arg_streamp = addr (MRT.source (sourcex).stream (streamx)); 358 arg_streamx = streamx; 359 arg_code = error_table_$ioname_not_found; 360 361 return; 362 363 364 get_seg: entry (arg_entry_name, arg_seg_ptr, arg_code); 365 366 367 /* This entry is called to obtain a pointer to a segment whose entry name 368* is passed as an argument. If we cannot initiate the segment, we will 369* make a new segment with that name. 370**/ 371 372 entry_name = arg_entry_name; /* Initialize arguments. */ 373 code = 0; 374 375 call hcs_$initiate (sysdir, entry_name, "", 0, 1, seg_ptr, code); 376 if seg_ptr ^= null 377 then code = 0; /* Not null, forget code. */ 378 else if code = error_table_$noentry /* Null => segment not there. */ 379 then do; 380 call hcs_$make_seg (sysdir, entry_name, "", 01011b, seg_ptr, code); 381 if seg_ptr ^= null 382 then do; /* We have created it. */ 383 segment_acl (1).access_name = "*.SysDaemon.*"; 384 segment_acl (1).modes = "101"b; 385 call hcs_$add_acl_entries (sysdir, entry_name, 386 addr (segment_acl), 1, code); 387 end; 388 end; 389 390 arg_seg_ptr = seg_ptr; /* Return arguments. */ 391 arg_code = code; 392 393 return; 394 395 396 queue: entry (arg_qp, arg_alarm, arg_string_ptr, arg_string_len, arg_source, arg_code); 397 398 399 /* This entry is called to put a message in a device output queue. 400**/ 401 402 qp = arg_qp; /* Copy arguments. */ 403 code = 0; 404 string_ptr = arg_string_ptr; 405 string_len = arg_string_len; 406 407 code = 0; 408 mc_ansp = mc_ansp_stat; 409 410 if device_queue.top_of_queue = 0 then /* Empty queue */ 411 do; 412 wake_typer = "1"b; /* REmember to wake typer_out */ 413 if device_queue.free_top = 0 then /* Empty free storage list */ 414 j, /* Allocate new block */ 415 device_queue.top_of_queue, 416 device_queue.end_of_queue, 417 device_queue.next_free = device_queue.next_free + 1; 418 else do; /* Take block from free list */ 419 j, device_queue.top_of_queue, 420 device_queue.end_of_queue = device_queue.free_top; 421 device_queue.free_top = device_queue.line (j).next_line; 422 end; 423 end; 424 else do; /* Stuff already in queue */ 425 wake_typer = "0"b; /* Wakeup will come from self or tty_aught */ 426 if device_queue.free_top = 0 then /* Empty free storage list */ 427 j, /* Allocate new block */ 428 device_queue.next_free = device_queue.next_free + 1; 429 else do; /* Take block from free list */ 430 j = device_queue.free_top; 431 device_queue.free_top = device_queue.line (j).next_line; 432 end; 433 i = device_queue.end_of_queue; /* Put it on end of queue */ 434 device_queue.line (i).next_line, 435 device_queue.end_of_queue = j; 436 end; 437 device_queue.line (j).not_done = "0"b; /* Fill it in */ 438 device_queue.line (j).alarm = arg_alarm; 439 device_queue.line (j).next_line = 0; 440 device_queue.line (j).offset = 0; 441 device_queue.line (j).line_length = string_len; 442 device_queue.line (j).source = arg_source; 443 device_queue.line (j).string = based_string; 444 device_queue.no_of_messages = device_queue.no_of_messages + 1; 445 if wake_typer 446 then call hcs_$wakeup (mc_anstbl.mc_procid, device_queue.channel, 0, code); 447 arg_code = code; 448 return; 449 450 /* BEGIN INCLUDE FILE as_wakeup_priorities.incl.pl1 */ 1 2 1 3 /* This include file defines the priorities of all of the event channels used by the answering service. 1 4* 1 5* They are declared as named constants. They are used in calls to ipc_$decl_ev_call_chn. 1 6* The names correspond to the functions of the event call handlers. 1 7* For brevity in names, MC means message coordinator, and LOGIN includes logout as well. 1 8* 1 9* The comment on each constant lists the procedure(s) that use it to set event channel priorities. 1 10* See the code in those procedures for information on the handlers themselves 1 11* (which are entry variables in some cases, and thus could not be documented in this file). 1 12* 1 13* The priorities range from zero (highest) to 22 (lowest used by the answering service). 1 14* 1 15* The event wait channel on which the A.S. goes blocked awaiting input on the initializer console has highest 1 16* of all priorities, set by as_init_ calling ipc_$set_wait_prior. 1 17* 1 18* Written June 1981 by T. Casey for MR9.0 1 19* Modified 1984-10-15 BIM for sac -> as_request. 1 20* as_request is above login, since sac is important and 1 21* dial requests for already logged in users can take 1 22* first dibs over new logins. 1 23**/ 1 24 1 25 dcl MC_PRIO fixed bin int static options (constant) init (1); /* mc_commands_, mc_con_rec_, mc_util_, mrd_tester */ 1 26 dcl SYSERR_COPY_PRIO fixed bin int static options (constant) init (2); /* syserr_log_man_ */ 1 27 dcl SHUTDOWN_PRIO fixed bin int static options (constant) init (3); /* admin */ 1 28 dcl ACCT_UPDATE_PRIO fixed bin int static options (constant) init (4); /* act_ctl_ */ 1 29 dcl DAEMON_LOGIN_PRIO fixed bin int static options (constant) init (8); /* daemon_user_manager_ */ 1 30 dcl AS_REQUEST_PRIO fixed bin int static options (constant) init (7); /* as_request_ */ 1 31 dcl INSTALL_PRIO fixed bin int static options (constant) init (8); /* up_sysctl_ */ 1 32 dcl INT_LOGIN_PRIO fixed bin int static options (constant) init (8); /* asu_, dialup_, ftp_dialup_ */ 1 33 dcl MPX_LOAD_PRIO fixed bin int static options (constant) init (11); 1 34 /* as_vip7760_mpx_, as_mcs_mpx_, as_ibm3270_mpx_, as_hasp_mpx_ */ 1 35 dcl ABS_DEFER_PRIO fixed bin int static options (constant) init (19); /* absentee_utility_ */ 1 36 dcl ABS_LOGIN_PRIO fixed bin int static options (constant) init (20); /* abentee_user_manager_ */ 1 37 dcl CORE_FLUSH_PRIO fixed bin int static options (constant) init (22); /* as_meter_ */ 1 38 1 39 /* END INCLUDE FILE as_wakeup_priorities.incl.pl1 */ 450 451 /* ====== BEGIN INCLUDE SEGMENT syscon_mseg.incl.pl1 ====================================== */ 2 2 2 3 2 4 2 5 /****^ HISTORY COMMENTS: 2 6* 1) change(87-09-02,Parisek), approve(87-09-03,MECR0004), 2 7* audit(87-09-02,GDixon), install(87-09-03,MR12.1-1098): 2 8* Increase quit_bits from 72 bits to 504 bits so more than 72 sources 2 9* may enable quit without error. (phx20974) 2 10* END HISTORY COMMENTS */ 2 11 2 12 2 13 /* Message Coordinator message segment declaration. Each daemon process 2 14* enqueues its messages in a segment like this one. 2 15* 2 16* The segment consists of a header followed by many message blocks, 2 17* each capable of holding a message of 132 characters plus 2 18* information on when the message was sent, who it's from, etc. 2 19* These blocks are "allocated" only as needed and placed on a free 2 20* storage list when freed. Blocks in use are chained together in a 2 21* first-in-first-out queue. */ 2 22 2 23 dcl buff_len fixed bin init (132) internal static; 2 24 2 25 dcl 1 syscon_mseg aligned based, /* This header is of length 24 dec 30 oct words */ 2 26 2 mlock bit (36) aligned, 2 27 2 current_process_id bit (36), 2 28 2 ipc_el, /* mrdim_ blocks on this list for normal reads */ 2 29 3 n fixed bin, 2 30 3 pad fixed bin, 2 31 3 channel fixed bin (71), 2 32 2 proto_el, /* mrdim_ blocks on this list for attach and detach */ 2 33 3 n fixed bin, 2 34 3 pad fixed bin, 2 35 3 channel fixed bin (71), 2 36 2 flags unaligned, 2 37 3 test_mode bit (1), /* ON if running in test environment */ 2 38 3 receiver_woken bit (1), /* ON if wakeup sent but not received yet */ 2 39 3 unused bit (34), 2 40 2 first_message fixed bin, /* index of head of message chain */ 2 41 2 last_message fixed bin, /* index of tail of message chain */ 2 42 2 first_proto fixed bin, /* index of head of protocol chain */ 2 43 2 last_proto fixed bin, /* index of tail of protocol chain */ 2 44 2 first_free_buffer fixed bin, /* head of free chain */ 2 45 2 last_assigned_buffer fixed bin, /* high water mark of buffers ever used */ 2 46 2 no_of_streams fixed bin, 2 47 2 quit_bits bit (504), /* used in mc.message to mark a source waiting to be quit */ 2 48 2 locked_by_pid bit (36), /* process id of locker */ 2 49 2 mescount fixed bin, /* Count of unprinted messages */ 2 50 2 output_wait bit (1), /* TRUE if in output wait - mc_wakeups resets */ 2 51 2 pad fixed bin, 2 52 2 message (1) like message_block aligned; /* the array of messages */ 2 53 2 54 dcl 1 message_block aligned based (messp), /* 56 dec 70 oct words */ 2 55 2 time_sent fixed bin (71), 2 56 2 from_source char (32), 2 57 2 from_stream char (32), 2 58 2 source_index fixed bin, /* index in MRT */ 2 59 2 stream_index fixed bin, /* .. */ 2 60 2 next_message fixed bin, /* foward pointer of message chain */ 2 61 2 flags unal, 2 62 3 continue bit (1), /* ON if message continued in next block */ 2 63 3 introduction bit (1), /* ON if message is an introduction */ 2 64 3 farewell bit (1), /* ON if message is farewell */ 2 65 3 sentinel bit (1), /* ON if special formatting wanted */ 2 66 3 trace bit (1), /* used only by dump_msg */ 2 67 3 unused bit (31) unal, 2 68 2 length fixed bin, /* number of characters in body */ 2 69 2 message_body char (132); /* text of message */ 2 70 2 71 dcl 1 debug_info based aligned, 2 72 2 flag fixed bin (71), 2 73 2 time fixed bin (71), 2 74 2 last_pid bit (36), 2 75 2 first_msg fixed bin, 2 76 2 last_msg fixed bin, 2 77 2 first_pro fixed bin, 2 78 2 last_pro fixed bin, 2 79 2 free_chain fixed bin; 2 80 2 81 /* ------ END INCLUDE SEGMENT syscon_mseg.incl.pl1 -------------------------------------- */ 451 452 /* Begin include file mess_route_table.incl.pl1 */ 3 2 3 3 /* 3 4*Message Routing Table 3 5* 3 6*This table will be used by the protocol & router entries of the 3 7*message coordinator to match source (e.g. I/O Daemon, answering 3 8*service) -- stream (e.g. "user_i/o","error_output") combinations 3 9*with virtual consoles to which messages are to be directed. 3 10**/ 3 11 3 12 dcl 1 MRT aligned based(mrtp), /* header 4 words */ 3 13 2 lock bit(36), /* 0 */ 3 14 2 no_of_sources fixed bin, 3 15 2 flags bit(36), 3 16 2 pad1 fixed bin, 3 17 2 star_entry aligned, /* 4 * */ 3 18 3 source char(32), 3 19 3 hismess ptr, 3 20 3 no_of_streams fixed bin, 3 21 3 flags, 3 22 4 init bit(1) unal, 3 23 4 valid bit(1) unal, 3 24 4 unused bit(34) unal, 3 25 3 stream like stream aligned, /* 20 * str */ 3 26 2 source(16) aligned, /* source entry head 12 dec 14 oct words */ 3 27 3 source char(32), /* 220-1,2240-2,4260-3 */ 3 28 3 hismess ptr, 3 29 3 no_of_streams fixed bin, 3 30 3 flags, 3 31 4 init bit(1) unal, 3 32 4 valid bit(1) unal, 3 33 4 unused bit(34) unal, 3 34 3 stream(8) like stream aligned; 3 35 3 36 3 37 dcl 1 stream aligned based(streamp), /* 128dec 200 oct words */ 3 38 2 gumbo(28) fixed bin, /* This stuff is not used */ 3 39 2 ourmess ptr, 3 40 2 hismess ptr, 3 41 2 source char(32), 3 42 2 stream char(32), 3 43 2 source_index fixed bin, /* Our own address */ 3 44 2 stream_index fixed bin, 3 45 2 flags, 3 46 3 valid bit(1) unal, 3 47 3 read bit(1) unal, 3 48 3 write bit(1) unal, 3 49 3 active bit(1) unal, 3 50 3 more bit(1) unal, 3 51 3 unused bit(23) unal, 3 52 3 alarm bit (8) unal, 3 53 2 prev_trans, 3 54 3 first_block fixed bin, 3 55 3 end_block fixed bin, 3 56 3 current_block fixed bin, 3 57 3 offset fixed bin, 3 58 3 59 2 no_of_vcons fixed bin, 3 60 2 vcons(8) char(32), 3 61 2 vcons_index(8) fixed bin; 3 62 /* 3 63*MRT 3 64*lock 3 65*no_of_sources Number of source rows in this matrix. 3 66*flags 3 67*star_entry Contains default routing. 3 68*source The source rows 3 69*source Name of this source. 3 70*no_of_streams Number of stream columns that have 3 71* entries in this row. 3 72*flags 3 73*init "1"b -- This entry is for a source which 3 74* is currently attached & sending messages. 3 75*valid "1"b -- This entry contains correct information. 3 76*stream The virtual consoles for this element 3 77* of the matrix. 3 78* The Source Data Block, which 3 79* corresponds to the Stream Data 3 80* Block on the mrd side has been included 3 81* in the MRT. 3 82*gumbo Stream DB has stuff here we dont need. 3 83*ourmess Pointer to message seg for this 3 84* function (in this case mc_ ). 3 85*hismess Pointer to message seg for other 3 86* guy (in this case, the source). 3 87*source Name of this source 3 88*stream Name of this stream. 3 89*source_index in MRT 3 90*stream_index 3 91*flags 3 92*valid "1"b -- This entry contains correct information. 3 93*active "1"b -- This entry is for a stream which 3 94* is currently attached & sending messages. 3 95*alarm "1"b -- These messages are "alarm-class" messages. 3 96*prev_trans Information useful to mrd_util_ if more than 3 97* one read call is made. 3 98*first_block of the message 3 99*end_block of the message 3 100*current_block out of which we are taking text 3 101*offset of current character in current_block 3 102* 3 103*no_of_vcons 3 104*vcons Virtual consoles to which messages should 3 105* go when originating from this source 3 106* over this stream. 3 107*vcons-index Index in the virtual console table 3 108*ev_chn For waking up function waiting for 3 109* input. 3 110*messp Pointer to message segment if this is 3 111* input stream. 3 112**/ 3 113 3 114 /* End include file mess_route_table.incl.pl1 */ 452 453 /* BEGIN INCLUDE FILE vcons_tab.incl.pl1 */ 4 2 /* 4 3*Virtual Console Table 4 4* 4 5*Associates virtual consoles with physical devices and/or log 4 6*segments. */ 4 7 4 8 4 9 dcl 1 vcons_tab aligned based based(vconsp), /* header 4 words */ 4 10 2 lock bit(36), 4 11 2 no_of_vcons fixed bin, 4 12 2 flags bit(36), 4 13 2 pad1 fixed bin, 4 14 2 star_entry like vcons aligned, 4 15 2 vcons(32) like vcons aligned; 4 16 4 17 dcl 1 vcons aligned based(vcep), /* This header 10 dec 12 oct words */ 4 18 2 vcons char(32), 4 19 2 no_of_dest fixed bin, 4 20 2 flags, 4 21 3 inuse bit(1) unal, 4 22 3 unused bit(35) unal, 4 23 2 dest(8) aligned, /* 12 dec 14 oct words */ 4 24 3 type fixed bin, 4 25 3 pad2 fixed bin, 4 26 3 dest char(32), 4 27 3 queue_seg_ptr ptr; 4 28 /* 4 29* 4 30*vcons_tab 4 31*lock 4 32*no_of_vcons 4 33*vcons 4 34*vcons Symbolic name of virtual console 4 35*no_of_dest Number of physical destinations for 4 36* messages to this virtual console. 4 37*inuse "1"b if this entry is in use. 4 38*dest Where the message is to be sent 4 39*type 1 for tty, 2 for segment 4 40*dest Symbolic name of physical destination 4 41*tty_index If tty, index in mess coordr answer table 4 42*seg_ptr if segment, pointer to it. 4 43**/ 4 44 /* END INCLUDE FILE vcons_tab.incl.pl1 */ 453 454 /* Beginning of include file device_queue.incl.pl1 */ 5 2 5 3 /* This structure describes the queue segment associated with 5 4*each operator console in which are placed lines to be typed. */ 5 5 5 6 declare 5 7 1 device_queue aligned based(qp), /* Header 24 dec 30 oct words */ 5 8 2 mc_atep ptr, 5 9 2 channel fixed bin(71), 5 10 2 device_name char(32), 5 11 2 no_of_messages fixed bin, 5 12 2 top_of_queue fixed bin, 5 13 2 end_of_queue fixed bin, 5 14 2 free_top fixed bin, 5 15 2 next_free fixed bin, 5 16 2 pad(7) fixed bin, 5 17 2 line (1), /* 40 dec 50 oct words */ 5 18 3 not_done bit(1) unal, 5 19 3 alarm bit (1) unal, 5 20 3 xpad bit (16) unal, 5 21 3 source fixed bin (17) unal, 5 22 3 next_line fixed bin, 5 23 3 pad(3) fixed bin, 5 24 3 offset fixed bin, 5 25 3 line_length fixed bin, 5 26 3 string char(132); 5 27 5 28 /* End of include file device_queue.incl.pl1 */ 454 455 /* BEGIN INCLUDE FILE ... mc_anstbl.incl.pl1 */ 6 2 6 3 6 4 /****^ HISTORY COMMENTS: 6 5* 1) change(85-12-19,MSharpe), approve(87-05-25,MCR7690), 6 6* audit(87-03-30,GDixon), install(87-08-04,MR12.1-1056): 6 7* Added the pending and virtual flags and virtual_tty_name to mc_ate; 6 8* changed mc_ate.tty_name to mc_ate.real_tty_name; added mc_ate.ls_procid, 6 9* mc_ate.ls_term_ev_chn, mc_ate.ls_resp_ev_chn, mc_ate.ls_handle. 6 10* 2) change(87-02-04,GDixon), approve(87-05-25,MCR7690), 6 11* audit(87-06-01,Parisek), install(87-08-04,MR12.1-1056): 6 12* Add mc_ate.vchn_requires_accept in support of virtual channels. Explicitly 6 13* declare implicit pad fields which the compile adds for element alignment 6 14* purposes. Declare mc_ansp and mc_atep, on which major structures are 6 15* based, rather than depending upon includers do to so. 6 16* 3) change(87-03-27,Parisek), approve(87-05-25,MCR7690), 6 17* audit(87-06-11,GDixon), install(87-08-04,MR12.1-1056): 6 18* Added the dsa_ring_number element to provide a constant for determining 6 19* the DSA ring. 6 20* END HISTORY COMMENTS */ 6 21 6 22 6 23 /* format: style3,idind30 */ 6 24 6 25 dcl 1 mc_anstbl based (mc_ansp) aligned, 6 26 /* Structure of answer table */ 6 27 2 max_size fixed bin, /* max number of entries table can grow */ 6 28 2 current_size fixed bin, /* actual size of table (in entries) */ 6 29 2 mc_procid bit (36), /* process ID of message coordinator */ 6 30 2 sysdir char (168), /* name of main system control directory */ 6 31 2 pad_ptrs bit (36), 6 32 2 mrtp ptr, 6 33 2 vconsp ptr, 6 34 2 cons_cont_proc entry, /* mc_tty_ */ 6 35 2 con_rec, /* Data for console recovery. */ 6 36 3 mc_ate_ptr ptr, /* Pts to recovery device. */ 6 37 3 ec_id fixed bin (71), /* Recovery event chan. */ 6 38 3 seq_num fixed bin (35), /* Syserr sequence number. */ 6 39 3 offset bit (18), /* Log entry offset. */ 6 40 3 flags, 6 41 ( 4 enabled bit (1), /* ON => recovery possible. */ 6 42 4 active bit (1), 6 43 4 pad_flags bit (16) 6 44 ) unaligned, /* ON => recovery going on. */ 6 45 2 n_sources fixed bin, /* number of communicating sources */ 6 46 2 max_sources fixed bin, /* maximum number of sources allowed */ 6 47 2 current_time fixed bin (71), /* Time of last transaction */ 6 48 2 trace bit (1) aligned, 6 49 2 dsa_ring_number fixed bin, /* DSA ring number */ 6 50 2 pad_entries (30) bit (36) aligned, 6 51 2 entry (0 refer (mc_anstbl.current_size)) aligned like mc_ate, 6 52 mc_ansp ptr; 6 53 6 54 dcl 1 mc_ate based (mc_atep) aligned, 6 55 /* declaration of a single answer table entry */ 6 56 2 flags aligned, 6 57 3 virtual bit (1) unaligned, /* 1 => login -vchn XXX */ 6 58 3 pending bit (1) unaligned, /* 1 => pending entry created for DSA channel 6 59* since we can't keep info in cdte for it */ 6 60 3 active bit (1) unaligned, 6 61 3 the_system_console bit (1) unaligned, /* otw_/ocd_ */ 6 62 3 a_system_console bit (1) unaligned, /* Not yet implemented -- a random opc through a */ 6 63 /* nonexistent I/O module */ 6 64 3 pad001 bit (1) unaligned, 6 65 3 signed_on bit (1) unaligned, 6 66 3 reply_restricted bit (1) unaligned, 6 67 3 broadcast bit (1) unaligned, 6 68 3 broadcast_all bit (1) unaligned, 6 69 3 vchn_requires_accept bit (1) unaligned, 6 70 3 pad_flags bit (25) unaligned, 6 71 2 virtual_tty_name char (32) unaligned, 6 72 2 real_tty_name char (32) unaligned, 6 73 2 pad_ptrs bit (36), 6 74 2 cdtep pointer, /* we get info from cdt */ 6 75 2 iocb pointer, /* do I/O here */ 6 76 2 sci_ptr pointer, 6 77 2 tra_vec fixed bin, 6 78 2 restrict_reply char (32), /* Source name. if "", everybody. */ 6 79 /* Broadcasting information. */ 6 80 2 n_casts fixed bin, /* If flag is 1 */ 6 81 2 cast (10) char (32), /* If flag is 1, list of consoles. */ 6 82 2 oper_info, /* for oper assigned this console... */ 6 83 3 personid char (32), 6 84 3 last_input_time fixed bin (71), /* time of last input on this console... */ 6 85 2 queue_ptr ptr, 6 86 2 queue_event fixed bin (71), 6 87 2 event fixed binary (71), /* name of event call channel associated with TTY */ 6 88 2 ls_procid bit (36), /* ID of login_server who will wake us up with connect 6 89* and disconnect -- used only for network channels */ 6 90 2 pad_ev_chn bit (36), 6 91 2 ls_term_ev_chn fixed bin (71), /* event channel to send terminate response to ls */ 6 92 2 ls_resp_ev_chn fixed bin (71), /* event channel to send operator response to ls */ 6 93 2 ls_handle bit (72), /* login server handle for this connection */ 6 94 2 authority, 6 95 3 privilege (36) bit (1) unaligned, 6 96 2 control, 6 97 3 inhibit bit (1) unal, 6 98 3 output_wait bit (1) unal, 6 99 3 output_pending bit (1) unal, 6 100 3 pad_control bit (33) unal, 6 101 mc_atep ptr; 6 102 6 103 declare ( 6 104 MC_WAIT_DIALUP init (1), 6 105 MC_WAIT_ANSWERBACK init (2), 6 106 MC_WAIT_READY init (3), 6 107 MC_WAIT_COMMAND init (4) 6 108 ) fixed bin int static options (constant); 6 109 6 110 /* END INCLUDE FILE ... mc_anstbl.incl.pl1 */ 455 456 end mc_util_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/03/87 1209.7 mc_util_.pl1 >spec>install>MR12.1-1098>mc_util_.pl1 450 1 01/21/85 0912.2 as_wakeup_priorities.incl.pl1 >ldd>include>as_wakeup_priorities.incl.pl1 451 2 09/03/87 1208.8 syscon_mseg.incl.pl1 >spec>install>MR12.1-1098>syscon_mseg.incl.pl1 452 3 05/06/74 1743.1 mess_route_table.incl.pl1 >ldd>include>mess_route_table.incl.pl1 453 4 05/06/74 1759.4 vcons_tab.incl.pl1 >ldd>include>vcons_tab.incl.pl1 454 5 07/29/76 1747.7 device_queue.incl.pl1 >ldd>include>device_queue.incl.pl1 455 6 08/06/87 0913.5 mc_anstbl.incl.pl1 >ldd>include>mc_anstbl.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. MC_PRIO 000024 constant fixed bin(17,0) initial dcl 1-25 set ref 216* 217* MRT based structure level 1 dcl 3-12 access_name 000157 automatic char(32) array level 2 dcl 150 set ref 383* ackn 000114 automatic fixed bin(71,0) initial dcl 88 set ref 88* addr builtin function dcl 112 ref 183 184 267 272 285 341 357 385 385 alarm 30(01) based bit(1) array level 3 packed unaligned dcl 5-6 set ref 438* ansptr parameter pointer dcl 52 set ref 158 171* 172 174* 223* arg_alarm parameter bit(1) unaligned dcl 52 ref 396 438 arg_code parameter fixed bin(17,0) dcl 52 set ref 158 176* 179* 293* 298 313* 322* 327 346* 359* 364 391* 396 447* arg_entry_name parameter char unaligned dcl 52 ref 364 372 arg_qp parameter pointer dcl 52 ref 396 402 arg_seg_ptr parameter pointer dcl 52 set ref 364 390* arg_source parameter fixed bin(17,0) dcl 52 ref 396 442 arg_source_name parameter char unaligned dcl 52 ref 298 306 arg_sourcex parameter fixed bin(17,0) dcl 52 set ref 298 312* 321* 327 335 arg_stream_name parameter char unaligned dcl 52 ref 327 336 arg_streamp parameter pointer dcl 52 set ref 327 344* 355* 357* arg_streamx parameter fixed bin(17,0) dcl 52 set ref 327 345* 358* arg_string_len parameter fixed bin(17,0) dcl 52 ref 396 405 arg_string_ptr parameter pointer dcl 52 ref 396 404 based_string based char unaligned dcl 148 ref 443 cdtp 000100 automatic pointer dcl 73 set ref 225* 253* channel 4 based fixed bin(71,0) level 3 in structure "syscon_mseg" dcl 2-25 in procedure "mc_util_" set ref 209* 216* channel 10 based fixed bin(71,0) level 3 in structure "syscon_mseg" dcl 2-25 in procedure "mc_util_" set ref 212* 217* channel 2 based fixed bin(71,0) level 2 in structure "device_queue" dcl 5-6 in procedure "mc_util_" set ref 445* code 000116 automatic fixed bin(17,0) dcl 88 set ref 167* 171* 174* 175* 179 199* 200 206* 209* 210 212* 213 216* 217* 220* 221 225* 226 228* 229 232* 233 238* 259* 260 260 260* 264* 275* 276 276 276* 281* 293 373* 375* 376* 378 380* 385* 391 403* 407* 445* 447 cons_cont_proc 62 based entry variable level 2 in structure "mc_anstbl" dcl 6-25 in procedure "mc_util_" set ref 244* cons_cont_proc parameter entry variable dcl 52 in procedure "mc_util_" ref 158 244 current_block 65 000100 internal static fixed bin(17,0) level 3 dcl 144 set ref 193* current_process_id 1 based bit(36) level 2 dcl 2-25 set ref 207* 240 dest 14 based char(32) array level 3 in structure "vcons" dcl 4-17 in procedure "mc_util_" set ref 271* dest 12 based structure array level 2 in structure "vcons" dcl 4-17 in procedure "mc_util_" device_queue based structure level 1 dcl 5-6 dont_log 000155 automatic bit(1) initial unaligned dcl 106 set ref 106* dsa_ring_number 103 based fixed bin(17,0) level 2 dcl 6-25 set ref 246* end_block 64 000100 internal static fixed bin(17,0) level 3 dcl 144 set ref 192* end_of_queue 16 based fixed bin(17,0) level 2 dcl 5-6 set ref 413* 419* 433 434* entry 142 based structure array level 2 dcl 6-25 set ref 272 entry_name 000125 automatic char(32) unaligned dcl 99 set ref 372* 375* 380* 385* error_table_$ioname_not_found 000432 external static fixed bin(17,0) dcl 139 ref 260 276 322 359 error_table_$noentry 000434 external static fixed bin(17,0) dcl 139 ref 378 first_block 63 000100 internal static fixed bin(17,0) level 3 dcl 144 set ref 191* flags 62 000100 internal static structure level 2 in structure "temp_SDB" dcl 144 in procedure "mc_util_" set ref 196* flags 62 based structure level 2 in structure "stream" dcl 3-37 in procedure "mc_util_" flags 233 based structure array level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" free_top 17 based fixed bin(17,0) level 2 dcl 5-6 set ref 413 419 421* 426 430 431* get_process_id_ 000370 constant entry external dcl 118 ref 207 hcs_$add_acl_entries 000372 constant entry external dcl 118 ref 385 hcs_$initiate 000374 constant entry external dcl 118 ref 171 375 hcs_$make_seg 000376 constant entry external dcl 118 ref 380 hcs_$terminate_noname 000400 constant entry external dcl 118 ref 174 hcs_$truncate_seg 000402 constant entry external dcl 118 ref 206 238 264 281 hcs_$wakeup 000404 constant entry external dcl 118 ref 445 hismess 14 based pointer level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" set ref 283* hismess 36 000100 internal static pointer level 2 in structure "temp_SDB" dcl 144 in procedure "mc_util_" set ref 186* i 000117 automatic fixed bin(17,0) dcl 88 set ref 433* 434 initialized 000076 internal static bit(1) initial unaligned dcl 106 set ref 169 291* intty parameter char unaligned dcl 52 set ref 158 175* 259* 271 275* inttyp parameter pointer dcl 52 set ref 158 175* 259* ipc_$create_ev_chn 000406 constant entry external dcl 118 ref 209 212 ipc_$decl_ev_call_chn 000410 constant entry external dcl 118 ref 216 217 ipc_el 2 based structure level 2 dcl 2-25 j 000120 automatic fixed bin(17,0) dcl 88 set ref 413* 419* 421 426* 430* 431 434 437 438 439 440 441 442 443 line 30 based structure array level 2 dcl 5-6 line_length 36 based fixed bin(17,0) array level 3 dcl 5-6 set ref 441* max_size based fixed bin(17,0) level 2 dcl 6-25 set ref 239* max_sources 76 based fixed bin(17,0) level 2 dcl 6-25 set ref 245* mbz 11 000157 automatic bit(36) initial array level 2 dcl 150 set ref 150* mc_ansp 000172 automatic pointer dcl 6-25 set ref 220* 223 238* 239 240 241 242 243 244 245 246 253* 254* 255* 272 408* 445 mc_ansp_stat 000010 internal static pointer initial dcl 73 set ref 223* 408 mc_anstbl based structure level 1 dcl 6-25 mc_ate based structure level 1 dcl 6-54 mc_commands_$define 000412 constant entry external dcl 118 ref 275 mc_commands_$init 000414 constant entry external dcl 118 ref 253 mc_commands_$new_tty 000416 constant entry external dcl 118 ref 175 259 mc_con_rec_$init 000420 constant entry external dcl 118 ref 254 mc_procid 2 based bit(36) level 2 dcl 6-25 set ref 240* 445* mc_util_$get_seg 000422 constant entry external dcl 118 ref 199 220 225 228 232 mc_wakeups_$init 000424 constant entry external dcl 118 ref 255 mc_wakeups_$protocol 000426 constant entry external dcl 118 ref 217 217 mc_wakeups_$router 000430 constant entry external dcl 118 ref 216 216 mcmp 000012 internal static pointer initial dcl 73 set ref 199* 203 206* 207 208 209 211 212 216 217 240 253* 255* 287 message_block based structure level 1 dcl 2-54 messp 000014 internal static pointer initial dcl 73 set ref 183* 253* 255* modes 10 000157 automatic bit(36) array level 2 dcl 150 set ref 384* mrtp 000016 internal static pointer initial dcl 73 in procedure "mc_util_" set ref 232* 242 281* 282 283 284 285 309 310 316 340 341 357 mrtp 56 based pointer level 2 in structure "mc_anstbl" dcl 6-25 in procedure "mc_util_" set ref 242* n 2 based fixed bin(17,0) level 3 in structure "syscon_mseg" dcl 2-25 in procedure "mc_util_" set ref 208* n 6 based fixed bin(17,0) level 3 in structure "syscon_mseg" dcl 2-25 in procedure "mc_util_" set ref 211* next_free 20 based fixed bin(17,0) level 2 dcl 5-6 set ref 413 413* 426 426* next_line 31 based fixed bin(17,0) array level 3 dcl 5-6 set ref 421 431 434* 439* no_of_dest 10 based fixed bin(17,0) level 2 dcl 4-17 set ref 269* no_of_messages 14 based fixed bin(17,0) level 2 dcl 5-6 set ref 444* 444 no_of_sources 1 based fixed bin(17,0) level 2 dcl 3-12 ref 309 no_of_streams 232 based fixed bin(17,0) array level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" ref 340 no_of_streams 16 based fixed bin(17,0) level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" set ref 284* no_of_vcons 67 based fixed bin(17,0) level 2 in structure "stream" dcl 3-37 in procedure "mc_util_" set ref 288* no_of_vcons 67 000100 internal static fixed bin(17,0) level 2 in structure "temp_SDB" dcl 144 in procedure "mc_util_" set ref 195* not_done 30 based bit(1) array level 3 packed unaligned dcl 5-6 set ref 437* null builtin function dcl 112 ref 172 185 186 216 216 217 217 283 355 376 381 offset 66 000100 internal static fixed bin(17,0) level 3 in structure "temp_SDB" dcl 144 in procedure "mc_util_" set ref 194* offset 35 based fixed bin(17,0) array level 3 in structure "device_queue" dcl 5-6 in procedure "mc_util_" set ref 440* ourmess 34 000100 internal static pointer level 2 in structure "temp_SDB" dcl 144 in procedure "mc_util_" set ref 185* 203* ourmess 34 based pointer level 2 in structure "stream" dcl 3-37 in procedure "mc_util_" set ref 287* prev_trans 63 000100 internal static structure level 2 dcl 144 proto_el 6 based structure level 2 dcl 2-25 qp 000102 automatic pointer dcl 73 set ref 402* 410 413 413 413 413 413 419 419 419 421 421 426 426 426 430 431 431 433 434 434 437 438 439 440 441 442 443 444 444 445 queue_ptr 174 based pointer level 2 dcl 6-54 ref 272 queue_seg_ptr 24 based pointer array level 3 dcl 4-17 set ref 272* sdir parameter char unaligned dcl 52 ref 158 166 seg_ptr 000104 automatic pointer dcl 73 set ref 375* 376 380* 381 390 segment_acl 000157 automatic structure array level 1 dcl 150 set ref 385 385 source 40 000100 internal static char(32) level 2 in structure "temp_SDB" dcl 144 in procedure "mc_util_" set ref 187* source 4 based char(32) level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" set ref 282* source 220 based char(32) array level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" ref 310 source 220 based structure array level 2 in structure "MRT" dcl 3-12 in procedure "mc_util_" source 30(18) based fixed bin(17,0) array level 3 in structure "device_queue" packed unaligned dcl 5-6 in procedure "mc_util_" set ref 442* source_index 60 000100 internal static fixed bin(17,0) level 2 dcl 144 set ref 189* source_name 000135 automatic char(32) unaligned dcl 99 set ref 306* 310 sourcex 000121 automatic fixed bin(17,0) dcl 88 set ref 309* 310 312 316 316* 335* 340 341 357 star_entry 4 based structure level 2 in structure "vcons_tab" dcl 4-9 in procedure "mc_util_" set ref 267 star_entry 4 based structure level 2 in structure "MRT" dcl 3-12 in procedure "mc_util_" stream 20 based structure level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" set ref 285 stream based structure level 1 dcl 3-37 in procedure "mc_util_" stream 50 000100 internal static char(32) level 2 in structure "temp_SDB" dcl 144 in procedure "mc_util_" set ref 188* stream 234 based structure array level 3 in structure "MRT" dcl 3-12 in procedure "mc_util_" set ref 341 357 stream 50 based char(32) level 2 in structure "stream" dcl 3-37 in procedure "mc_util_" set ref 286* 342 stream_index 61 000100 internal static fixed bin(17,0) level 2 dcl 144 set ref 190* stream_name 000145 automatic char(32) unaligned dcl 99 set ref 336* 342 streamp 000106 automatic pointer dcl 73 set ref 285* 286 287 288 289 290 341* 342 344 349 streamx 000122 automatic fixed bin(17,0) dcl 88 set ref 340* 341 345 349* 354* 355 357 358 string 37 based char(132) array level 3 in structure "device_queue" dcl 5-6 in procedure "mc_util_" set ref 443* string builtin function dcl 112 in procedure "mc_util_" set ref 196* string_len 000123 automatic fixed bin(17,0) dcl 88 set ref 405* 441 443 string_ptr 000110 automatic pointer dcl 73 set ref 404* 443 syscon_mseg based structure level 1 dcl 2-25 sysdir 000024 internal static char(168) initial unaligned dcl 99 in procedure "mc_util_" set ref 166* 171* 241 375* 380* 385* sysdir 3 based char(168) level 2 in structure "mc_anstbl" dcl 6-25 in procedure "mc_util_" set ref 241* temp_SDB 000100 internal static structure level 1 dcl 144 set ref 184 temp_SDBp 000020 internal static pointer initial dcl 73 set ref 184* 253* 255* temp_mess 000300 internal static structure level 1 dcl 144 set ref 183 top_of_queue 15 based fixed bin(17,0) level 2 dcl 5-6 set ref 410 413* 419* type 12 based fixed bin(17,0) array level 3 dcl 4-17 set ref 270* vacantx 000124 automatic fixed bin(17,0) dcl 88 set ref 307* 316 316* 321 338* 349 349* 354 valid 233(01) based bit(1) array level 4 in structure "MRT" packed unaligned dcl 3-12 in procedure "mc_util_" ref 316 valid 62 based bit(1) level 3 in structure "stream" packed unaligned dcl 3-37 in procedure "mc_util_" ref 349 vcep 000112 automatic pointer dcl 73 set ref 267* 268 269 270 271 272 vcons based char(32) level 2 in structure "vcons" dcl 4-17 in procedure "mc_util_" set ref 268* vcons based structure level 1 dcl 4-17 in procedure "mc_util_" vcons 70 based char(32) array level 2 in structure "stream" dcl 3-37 in procedure "mc_util_" set ref 289* vcons_index 170 based fixed bin(17,0) array level 2 dcl 3-37 set ref 290* vcons_tab based structure level 1 dcl 4-9 vconsp 60 based pointer level 2 in structure "mc_anstbl" dcl 6-25 in procedure "mc_util_" set ref 243* vconsp 000022 internal static pointer initial dcl 73 in procedure "mc_util_" set ref 228* 243 264* 267 wake_typer 000156 automatic bit(1) unaligned dcl 106 set ref 412* 425* 445 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ABS_DEFER_PRIO internal static fixed bin(17,0) initial dcl 1-35 ABS_LOGIN_PRIO internal static fixed bin(17,0) initial dcl 1-36 ACCT_UPDATE_PRIO internal static fixed bin(17,0) initial dcl 1-28 AS_REQUEST_PRIO internal static fixed bin(17,0) initial dcl 1-30 CORE_FLUSH_PRIO internal static fixed bin(17,0) initial dcl 1-37 DAEMON_LOGIN_PRIO internal static fixed bin(17,0) initial dcl 1-29 INSTALL_PRIO internal static fixed bin(17,0) initial dcl 1-31 INT_LOGIN_PRIO internal static fixed bin(17,0) initial dcl 1-32 MC_WAIT_ANSWERBACK internal static fixed bin(17,0) initial dcl 6-103 MC_WAIT_COMMAND internal static fixed bin(17,0) initial dcl 6-103 MC_WAIT_DIALUP internal static fixed bin(17,0) initial dcl 6-103 MC_WAIT_READY internal static fixed bin(17,0) initial dcl 6-103 MPX_LOAD_PRIO internal static fixed bin(17,0) initial dcl 1-33 SHUTDOWN_PRIO internal static fixed bin(17,0) initial dcl 1-27 SYSERR_COPY_PRIO internal static fixed bin(17,0) initial dcl 1-26 buff_len internal static fixed bin(17,0) initial dcl 2-23 debug_info based structure level 1 dcl 2-71 mc_atep automatic pointer dcl 6-54 NAMES DECLARED BY EXPLICIT CONTEXT. INIT_RETURN 001167 constant label dcl 293 ref 200 210 213 221 226 229 233 260 get_seg 001441 constant entry external dcl 364 init 000110 constant entry external dcl 158 mc_util_ 000073 constant entry external dcl 14 mrt_source 001176 constant entry external dcl 298 mrt_stream 001302 constant entry external dcl 327 queue 001664 constant entry external dcl 396 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2324 2762 2050 2334 Length 3346 2050 436 350 254 360 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mc_util_ 184 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 mc_ansp_stat mc_util_ 000012 mcmp mc_util_ 000014 messp mc_util_ 000016 mrtp mc_util_ 000020 temp_SDBp mc_util_ 000022 vconsp mc_util_ 000024 sysdir mc_util_ 000076 initialized mc_util_ 000100 temp_SDB mc_util_ 000300 temp_mess mc_util_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mc_util_ 000100 cdtp mc_util_ 000102 qp mc_util_ 000104 seg_ptr mc_util_ 000106 streamp mc_util_ 000110 string_ptr mc_util_ 000112 vcep mc_util_ 000114 ackn mc_util_ 000116 code mc_util_ 000117 i mc_util_ 000120 j mc_util_ 000121 sourcex mc_util_ 000122 streamx mc_util_ 000123 string_len mc_util_ 000124 vacantx mc_util_ 000125 entry_name mc_util_ 000135 source_name mc_util_ 000145 stream_name mc_util_ 000155 dont_log mc_util_ 000156 wake_typer mc_util_ 000157 segment_acl mc_util_ 000172 mc_ansp mc_util_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_process_id_ hcs_$add_acl_entries hcs_$initiate hcs_$make_seg hcs_$terminate_noname hcs_$truncate_seg hcs_$wakeup ipc_$create_ev_chn ipc_$decl_ev_call_chn mc_commands_$define mc_commands_$init mc_commands_$new_tty mc_con_rec_$init mc_util_$get_seg mc_wakeups_$init mc_wakeups_$protocol mc_wakeups_$router THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$ioname_not_found error_table_$noentry LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 88 000060 106 000062 150 000063 14 000072 158 000101 166 000134 167 000143 169 000144 171 000146 172 000215 174 000222 175 000233 176 000272 177 000273 179 000274 180 000276 183 000277 184 000301 185 000303 186 000305 187 000306 188 000311 189 000314 190 000315 191 000316 192 000317 193 000320 194 000321 195 000322 196 000323 199 000324 200 000351 203 000353 206 000356 207 000371 208 000404 209 000406 210 000416 211 000420 212 000424 213 000434 216 000436 217 000464 220 000512 221 000537 223 000541 225 000546 226 000570 228 000572 229 000617 232 000621 233 000644 238 000646 239 000662 240 000664 241 000671 242 000674 243 000676 244 000700 245 000706 246 000710 253 000712 254 000730 255 000737 259 000754 260 001013 264 001021 267 001035 268 001041 269 001044 270 001046 271 001047 272 001055 275 001060 276 001115 281 001123 282 001137 283 001144 284 001146 285 001151 286 001153 287 001156 288 001160 289 001161 290 001164 291 001165 293 001167 295 001171 298 001172 306 001217 307 001225 309 001226 310 001237 312 001250 313 001252 314 001253 316 001254 319 001265 321 001267 322 001271 324 001274 327 001275 335 001323 336 001325 338 001333 340 001334 341 001347 342 001361 344 001365 345 001367 346 001371 347 001372 349 001373 352 001402 354 001404 355 001406 357 001413 358 001426 359 001431 361 001434 364 001435 372 001460 373 001466 375 001467 376 001533 378 001541 380 001545 381 001603 383 001607 384 001612 385 001614 390 001650 391 001653 393 001655 396 001656 402 001675 403 001701 404 001702 405 001705 407 001707 408 001710 410 001713 412 001715 413 001717 419 001730 421 001733 423 001736 425 001737 426 001740 430 001747 431 001750 433 001753 434 001755 437 001765 438 001771 439 002000 440 002001 441 002002 442 002005 443 002010 444 002016 445 002017 447 002040 448 002042 ----------------------------------------------------------- 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