COMPILATION LISTING OF SEGMENT priv_hasp_mpx Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1007.5 mst Sat 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 13 /* HASP multiplexer: This multiplexer processes most of the HASP RJE protocol in either host or workstation mode. 14* This multiplexer expects data from the user ring to be already compressed and converted to EBCDIC. 15* This procedure implements the privileged entries of the multiplexer; it will not be invoked at interrupt time 16* and needn't be wired. 17* */ 18 19 /* Created: October 1979 by G. Palter */ 20 /* Modified: December 1980 by G. Palter as part of "loopback bug" fix */ 21 /* Modified: 24 July 1981 by G. Palter to implement SIGNON processing and metering */ 22 /* Modified: 28 December 1981 by G. Palter to zero saved meters space after allocating (not a zero-on-free area) */ 23 /* Modified: November 1984 by Robert Coren to use tty_area_manager entries to allocate and free saved meters */ 24 25 priv_hasp_mpx: 26 procedure (); 27 28 return; /* not an entry */ 29 30 31 /* Parameters */ 32 33 dcl P_hmd_ptr pointer parameter; /* -> multiplexer data for this channel */ 34 dcl P_code fixed binary (35) parameter; /* status code */ 35 36 dcl P_devx fixed binary parameter; /* init_multiplexer: LCT index of the major channel */ 37 dcl P_miip pointer parameter; /* init_multiplexer: -> multiplexer initialization data */ 38 39 dcl P_info_ptr pointer parameter; /* priv_control, hpriv_control: -> data for control order */ 40 dcl P_order character (*) parameter; /* priv_control, hpriv_control: control order to execute */ 41 42 43 /* Remaining declarations */ 44 45 46 dcl code fixed binary (35); 47 48 dcl devx fixed binary; /* local copies */ 49 50 dcl info_ptr pointer; 51 dcl order character (32); 52 53 dcl subchannel_name character (32); /* name of sub-channel being examined sans multiplexer part */ 54 dcl start_subchannel_name_idx fixed binary; /* idx of first character in name specific to sub-channel */ 55 56 dcl (found_console, /* ON => operator's console found in the sub-channels */ 57 (found_readers, /* ON => indicated card reader found */ 58 found_printers, found_punches) dimension (8)) 59 bit (1) aligned; 60 61 dcl (device_type, device_number) fixed binary; /* device type and number for this sub-channel */ 62 63 dcl rcb_char character (1) unaligned; /* RCB character for the current sub-channel */ 64 dcl 1 rcb unaligned based (addr (rcb_char)) like hasp_rcb_byte; 65 66 dcl idx fixed binary; 67 68 dcl initialized bit (1) aligned static initial ("0"b); /* system wide constant: ON => multiplexer wired and ready */ 69 70 dcl NUL character (1) static options (constant) initial (""); /* EBCDIC NUL character ("000"b3) */ 71 72 dcl pds$processid bit (36) aligned external; 73 74 dcl (error_table_$action_not_performed, error_table_$bad_channel, error_table_$bad_mpx_load_data, 75 error_table_$bigarg, error_table_$noalloc, error_table_$null_info_ptr, error_table_$undefined_order_request, 76 error_table_$unimplemented_version) 77 fixed binary (35) external; 78 79 dcl (area, cleanup) condition; 80 81 dcl tty_area_manager$allocate entry (fixed bin, ptr); 82 dcl tty_area_manager$free entry (fixed bin, ptr); 83 dcl hasp_mpx$crash entry (pointer); 84 dcl hasp_mpx$dialup entry (pointer, fixed binary); 85 dcl hasp_mpx$system_initialize entry (); 86 87 dcl (addr, binary, clock, currentsize, length, mod, null, rtrim, size, substr, verify) builtin; 88 89 /* Allocate and initialize the multiplexer database for a given major channel */ 90 91 init_multiplexer: 92 entry (P_devx, P_miip, P_hmd_ptr, P_code); 93 94 devx = P_devx; 95 miip = P_miip; 96 P_hmd_ptr = null (); /* in case of failure */ 97 98 ttybp = addr (tty_buf$); 99 lctp = tty_buf.lct_ptr; 100 lcntp = lct.lcnt_ptr; 101 hmd_ptr = null (); 102 103 hmd_n_subchannels = mux_init_info.no_channels; /* to compute size (hmd) */ 104 if hmd_n_subchannels > 17 then do; /* console, 8 readers, 8 printers/punches */ 105 P_code = error_table_$bigarg; 106 return; 107 end; 108 109 call tty_space_man$get_space (size (hmd), hmd_ptr); /* make space for the multiplexer database */ 110 if hmd_ptr = null () then do; /* no room */ 111 INITIALIZE_FAILS_NOALLOC: 112 P_code = error_table_$noalloc; 113 return; 114 end; 115 116 hmd.saved_meters_ptr, /* for cleanup/area handlers */ 117 hmd.subchannels(*).saved_meters_ptr = null (); 118 119 hmd.n_subchannels = hmd_n_subchannels; 120 121 on condition (cleanup) 122 call release_mpx_storage (); 123 124 on condition (area) /* can't allocate metering structures */ 125 begin; 126 call release_mpx_storage (); 127 go to INITIALIZE_FAILS_NOALLOC; 128 end; 129 130 hmd.name = lcnt.names (devx); 131 hmd.devx = devx; 132 133 hmd.state = HMD_DOWN; /* the multiplexer isn't up yet */ 134 135 call tty_area_manager$allocate (size (hasp_mpx_meters), hmd.saved_meters_ptr); 136 hmd.saved_meters_ptr -> hasp_mpx_meters = 0; 137 138 139 /* Initialize data for the individual sub-channels */ 140 141 start_subchannel_name_idx = length (rtrim (hmd.name)) + 2; 142 143 found_console = "0"b; 144 found_readers (*), 145 found_printers (*), 146 found_punches (*) = ""b; 147 148 do idx = 1 to hmd.n_subchannels; 149 150 subchannel_name = substr (mux_init_info.name (idx), start_subchannel_name_idx); 151 152 call parse_subchannel_name (); /* sets device_type & device_number */ 153 154 hste_ptr = addr (hmd.subchannels (idx)); 155 156 hste.name = subchannel_name; 157 hste.subchannel_idx = idx; /* needed in output processing */ 158 hste.device_type = device_type; 159 hste.devx = mux_init_info.devx (idx); 160 161 lctep = addr (lct.lcte_array (hste.devx)); /* place sub-channel index inot LCT for channel_manager */ 162 lcte.subchannel = idx; 163 164 if (hste.device_type = HASP_CONSOLE) then /* remember the console: it is special */ 165 hmd.console_hste_idx = idx; 166 167 if (hste.device_type = HASP_PUNCH) then 168 hste.device_wab_idx = 9 - device_number; /* for punch, wait-a-bits are backwards */ 169 else hste.device_wab_idx = device_number; 170 171 rcb_char = NUL; /* create the template RCB character */ 172 rcb.not_eob = "1"b; 173 174 if (hste.device_type = HASP_CONSOLE) 175 then do; /* for console: always stream 1, type is set on the fly */ 176 rcb.stream = 1; 177 rcb.type = 0; 178 end; 179 180 else do; /* other devices */ 181 rcb.stream = mod (device_number, 8); /* streams are number 1 ... 0 */ 182 if (hste.device_type = HASP_READER) then 183 rcb.type = HASP_RCB_TYPE_READER_INPUT; 184 else if (hste.device_type = HASP_PRINTER) then 185 rcb.type = HASP_RCB_TYPE_PRINT_OUTPUT; 186 else if (hste.device_type = HASP_PUNCH) then 187 rcb.type = HASP_RCB_TYPE_PUNCH_OUTPUT; 188 else go to BAD_CHANNEL; /* shouldn't get here, but ... */ 189 end; 190 191 hste.rcb = rcb_char; /* RCB for this device has now been determined */ 192 193 call tty_area_manager$allocate (size (hasp_subchannel_meters), hste.saved_meters_ptr); 194 hste.saved_meters_ptr -> hasp_subchannel_meters = 0; 195 end; 196 197 if ^found_console then go to BAD_CHANNEL; /* no operator's console supplied for this multiplexer */ 198 199 200 if ^initialized then do; 201 call hasp_mpx$system_initialize (); 202 initialized = "1"b; 203 end; 204 205 P_hmd_ptr = hmd_ptr; 206 P_code = 0; /* success */ 207 208 return; 209 210 211 /* Transfer here when an error is found in the definition of one or more sub-channels */ 212 213 BAD_CHANNEL: 214 call release_mpx_storage (); 215 216 P_code = error_table_$bad_channel; 217 return; 218 219 /* Perform a privileged control operation on the multiplexer */ 220 221 priv_control: 222 entry (P_hmd_ptr, P_order, P_info_ptr, P_code); 223 224 hmd_ptr = P_hmd_ptr; 225 order = P_order; 226 info_ptr = P_info_ptr; 227 code = 0; 228 229 230 if (order = "copy_meters") 231 then do; 232 233 /* Copy the current multiplexer meters for use with the -since_dialup option to channel_comm_meters */ 234 235 hmd.time_meters_copied = clock (); /* needed to compute idle percentage */ 236 hmd.saved_meters_ptr -> hasp_mpx_meters = hmd.meters; 237 call channel_manager$control (hmd.devx, order, info_ptr, code); 238 end; 239 240 241 else if (order = "get_meters") 242 then do; 243 244 /* Return the current and saved multiplexer metering data */ 245 246 if (info_ptr = null ()) then /* must have an info structure */ 247 code = error_table_$null_info_ptr; 248 249 else if info_ptr -> get_comm_meters_info.version ^= GET_COMM_METERS_INFO_VERSION_1 then 250 code = error_table_$unimplemented_version; 251 252 else do; 253 hmmd_ptr = info_ptr -> get_comm_meters_info.subchan_ptr; 254 if hmmd_ptr ^= null () then /* caller wants our meters */ 255 if hasp_mpx_meters_data.version ^= HASP_MPX_METERS_DATA_VERSION_1 then 256 code = error_table_$unimplemented_version; 257 else do; 258 hasp_mpx_meters_data.time_mpx_booted = hmd.time_mpx_booted; 259 hasp_mpx_meters_data.time_meters_copied = hmd.time_meters_copied; 260 hasp_mpx_meters_data.idle_interval = hmd.transmit_timeout; 261 hasp_mpx_meters_data.current_meters = hmd.meters; 262 hasp_mpx_meters_data.saved_meters = hmd.saved_meters_ptr -> hasp_mpx_meters; 263 call channel_manager$control (hmd.devx, order, info_ptr, code); 264 end; 265 end; 266 end; 267 268 else code = error_table_$undefined_order_request; 269 270 P_code = code; 271 272 return; 273 274 /* Perform a highly privileged control operation on the multiplexer */ 275 276 hpriv_control: 277 entry (P_hmd_ptr, P_order, P_info_ptr, P_code); 278 279 hmd_ptr = P_hmd_ptr; 280 order = P_order; 281 code = 0; 282 283 if (order = "load_mpx") 284 then do; 285 286 /* Bootload the multiplexer: copy the load data (includes configuration information), determine the direction of each 287* sub-channel, validate that the load data is for this channel, and listen on the major channel for a dialup */ 288 289 if (P_info_ptr = null ()) then 290 code = error_table_$null_info_ptr; 291 292 else if (hmd.state ^= HMD_DOWN) then /* can't already be booting or booted */ 293 code = error_table_$action_not_performed; 294 295 else do; 296 hld_ptr = P_info_ptr; 297 298 if hasp_load_data.n_subchannels ^= hmd.n_subchannels then 299 BAD_LOAD_DATA: code = error_table_$bad_mpx_load_data; 300 301 else do; /* correct number of subchannels */ 302 hmd.configuration_data = hasp_load_data.configuration_data; 303 304 hmd.loader_process_id = pds$processid; 305 hmd.loader_event_channel = hasp_load_data.event_channel; 306 307 hmd.send_output, /* these flags are valid during life of a bootload */ 308 hmd.flags.input_available = "0"b; 309 310 hmd.output_chain_ptr, 311 hmd.input.first_bufferp, hmd.input.last_bufferp, 312 hmd.loopback.first_bufferp, hmd.loopback.last_bufferp, 313 hmd.output_block.first_bufferp, hmd.output_block.last_bufferp, 314 hmd.signon_data_ptr, hmd.minor_state_stack, hmd.loopback_block_chain_stack = null (); 315 316 hmd.output_block.subchannel_idx, hmd.output_block.tally = 0; 317 318 hmd.subchannels_for_output = 0; /* empty the queue */ 319 hmd.meters = 0; /* can't possibly have any metering data */ 320 321 do idx = 1 to hmd.n_subchannels; 322 hste_ptr = addr (hmd.subchannels (idx)); 323 hste.meters = 0; /* starting fresh */ 324 325 if hasp_load_data.subchannels(idx).devx ^= hste.devx then 326 go to BAD_LOAD_DATA; /* not the right set of sub-channels */ 327 328 if (hste.device_type = HASP_CONSOLE) then 329 hste.direction = HSTE_INPUT_OUTPUT; 330 else if (hmd.type = HASP_HOST) then 331 if (hste.device_type = HASP_READER) then 332 hste.direction = HSTE_INPUT_ONLY; 333 else hste.direction = HSTE_OUTPUT_ONLY; 334 else if (hmd.type = HASP_WORKSTATION) then 335 if (hste.device_type = HASP_READER) then 336 hste.direction = HSTE_OUTPUT_ONLY; 337 else hste.direction = HSTE_INPUT_ONLY; 338 else go to BAD_LOAD_DATA; /* multiplexer type is wrong(?) */ 339 end; 340 341 call channel_manager$control (hmd.devx, "listen", null (), code); 342 343 if code = 0 then /* have successfully started to load it */ 344 hmd.state = HMD_LOADING; 345 end; 346 end; 347 end; 348 349 else code = error_table_$undefined_order_request; /* only "load_mpx" is supported now */ 350 351 352 P_code = code; 353 return; 354 355 /* Permit dialups on a multiplexer's sub-channels */ 356 357 start: 358 entry (P_hmd_ptr, P_code); 359 360 hmd_ptr = P_hmd_ptr; 361 362 if hmd.state < HMD_LOADED then /* device must be loaded or already started */ 363 P_code = error_table_$action_not_performed; 364 365 else do; 366 P_code = 0; /* always succeeds */ 367 hmd.state = HMD_STARTED; 368 hmd.suspend_all_input = "0"b; /* allow foreign side to send all the input it wants */ 369 hmd.suspend_all_output = "0"b; /* allow local devices to send output */ 370 string (hmd.output_wabs) = (9)"1"b; 371 if (hmd.minor_state < HMD_NORMAL) then /* must send a SIGNON record: only console may dialup */ 372 if (hmd.subchannels(hmd.console_hste_idx).state = HSTE_LISTENING) then 373 call hasp_mpx$dialup (hmd_ptr, hmd.console_hste_idx); 374 else; /* console isn't listening yet */ 375 else /* dialup any sub-channels that are listening */ 376 do idx = 1 to hmd.n_subchannels; 377 if hmd.subchannels(idx).state = HSTE_LISTENING then 378 call hasp_mpx$dialup (hmd_ptr, idx); 379 end; 380 end; 381 382 return; 383 384 385 386 /* Forbid further dialups on a sub-channel */ 387 388 stop: 389 entry (P_hmd_ptr, P_code); 390 391 hmd_ptr = P_hmd_ptr; 392 393 if hmd.state = HMD_STARTED then /* if it was started, it isn't now */ 394 hmd.state = HMD_LOADED; 395 396 P_code = 0; 397 return; 398 399 /* Shutdown the multiplexer: equivalent to a crash */ 400 401 shutdown: 402 entry (P_hmd_ptr, P_code); 403 404 hmd_ptr = P_hmd_ptr; 405 406 if hmd.state > HMD_DOWN then /* channel might be dialed up: hangup */ 407 call channel_manager$control (hmd.devx, "hangup", null (), (0)); 408 409 call hasp_mpx$crash (hmd_ptr); /* do the dirty work */ 410 411 P_code = 0; 412 return; 413 414 415 416 /* Terminate the multiplexer database for a given major channel */ 417 418 terminate_multiplexer: 419 entry (P_hmd_ptr, P_code); 420 421 hmd_ptr = P_hmd_ptr; 422 423 call release_mpx_storage (); 424 425 P_hmd_ptr = null (); 426 P_code = 0; 427 428 return; 429 430 431 432 /* Free all storage allocated by this module for a HASP multiplexer */ 433 434 release_mpx_storage: 435 procedure (); 436 437 dcl idx fixed binary; 438 439 if hmd_ptr ^= null () then do; /* used in cleanup/area handlers */ 440 441 if hmd.saved_meters_ptr ^= null () then 442 call tty_area_manager$free (size (hasp_mpx_meters), hmd.saved_meters_ptr); 443 444 do idx = 1 to hmd.n_subchannels; 445 if hmd.subchannels(idx).saved_meters_ptr ^= null () then 446 call tty_area_manager$free (size (hasp_subchannel_meters), hmd.subchannels(idx).saved_meters_ptr); 447 end; 448 449 call tty_space_man$free_space (currentsize (hmd), hmd_ptr); 450 end; 451 452 return; 453 454 end release_mpx_storage; 455 456 /* Parse a sub-channel name: validate that the channel name is legal and not a duplicate */ 457 458 parse_subchannel_name: 459 procedure (); 460 461 dcl (name_part, number_part) character (3) varying; 462 dcl name_lth fixed binary; 463 464 name_lth = length (rtrim (subchannel_name)); 465 if (name_lth < 3) | (name_lth > 6) then go to BAD_CHANNEL; 466 467 name_part = substr (subchannel_name, 1, 3); 468 469 if name_lth > 3 then /* seems to have a device number */ 470 number_part = substr (subchannel_name, 4, (name_lth - 3)); 471 else number_part = ""; 472 473 if (name_part ^= "opr") & (name_part ^= "rdr") & (name_part ^= "prt") & (name_part ^= "pun") then 474 go to BAD_CHANNEL; /* unknown device type */ 475 476 477 /* Determine device number */ 478 479 if (name_part = "opr") then /* the "operator's" console */ 480 if length (number_part) ^= 0 then /* can't have a number */ 481 go to BAD_CHANNEL; 482 else device_number = 0; /* operator's console always has device number of 0 */ 483 484 else do; /* reader/printer/punch */ 485 if length (number_part) = 0 then /* must have device number */ 486 go to BAD_CHANNEL; 487 if verify (number_part, "0123456789") ^= 0 then go to BAD_CHANNEL; 488 device_number = binary (number_part, 17, 0); 489 if (device_number < 1) | (device_number > 8) then go to BAD_CHANNEL; 490 end; 491 492 493 /* Determine device type and whether this is a duplicate */ 494 495 if (name_part = "opr") then 496 if found_console then go to BAD_CHANNEL; 497 else do; 498 found_console = "1"b; 499 device_type = HASP_CONSOLE; 500 end; 501 502 else if (name_part = "rdr") then 503 if found_readers (device_number) then go to BAD_CHANNEL; 504 else do; 505 found_readers (device_number) = "1"b; 506 device_type = HASP_READER; 507 end; 508 509 else if (name_part = "prt") then 510 if found_printers (device_number) then 511 go to BAD_CHANNEL; 512 else if found_punches (9-device_number) then 513 go to BAD_CHANNEL; 514 else do; 515 found_printers (device_number) = "1"b; 516 device_type = HASP_PRINTER; 517 end; 518 519 else if (name_part = "pun") then /* last possibility */ 520 if found_punches (device_number) then 521 go to BAD_CHANNEL; 522 else if found_printers (9-device_number) then 523 go to BAD_CHANNEL; 524 else do; 525 found_punches (device_number) = "1"b; 526 device_type = HASP_PUNCH; 527 end; 528 529 return; 530 531 end parse_subchannel_name; 532 1 1 /* BEGIN INCLUDE FILE ... hasp_load_data.incl.pl1 */ 1 2 /* Created: October 1979 by G. Palter */ 1 3 /* Modified: 16 April 1981 by G. Palter to add rts_mode */ 1 4 1 5 /* Data structure for "load_mpx" highly-privileged control order */ 1 6 1 7 dcl 1 hasp_load_data aligned based (hld_ptr), 1 8 2 event_channel fixed binary (71), /* event channel to signal loading, crashes, etc. */ 1 9 2 configuration_data like hasp_configuration_data, /* data which controls multiplexer (see below) */ 1 10 2 n_subchannels fixed binary, /* # of configured sub-channels */ 1 11 2 subchannels (hasp_load_data_n_subchannels refer (hasp_load_data.n_subchannels)), 1 12 3 devx fixed binary, /* device index of sub-channel for validating the load */ 1 13 3 device_type fixed binary, /* type of device -- console/printer/reader/punch */ 1 14 3 device_number fixed binary; /* if not console, the device's number (EG: printer 3) */ 1 15 1 16 dcl hasp_load_data_n_subchannels fixed binary; 1 17 dcl hld_ptr pointer; 1 18 1 19 1 20 /* Event messages for a HASP multiplexer bootload channel */ 1 21 1 22 dcl (HASP_MPX_UP initial (1), /* multiplexer has come up */ 1 23 HASP_MPX_DOWN initial (2), /* multiplexer has gone down */ 1 24 HASP_MPX_MASKED initial (3)) /* multiplexer channel was masked */ 1 25 fixed binary (71) static options (constant); 1 26 1 27 1 28 /* Multiplexer configuration data */ 1 29 1 30 dcl 1 hasp_configuration_data aligned based, 1 31 2 type fixed binary, /* type of multiplexer -- workstation/host */ 1 32 2 max_block_size fixed binary, /* maximum block size for transmission over the line */ 1 33 2 max_device_input_records fixed binary, /* maximum # of input records to be held for a device */ 1 34 2 max_device_output_records fixed binary, /* maximum # of output records to be held */ 1 35 2 ic_timeout fixed binary, /* # of seconds to wait for initial connection */ 1 36 2 receive_timeout fixed binary, /* # of seconds to wait before sending a NAK */ 1 37 2 transmit_timeout fixed binary, /* # of seconds to wait before sending ACK0 (workstation) */ 1 38 2 max_naks fixed binary, /* # of NAKs received/transmitted before line considered down */ 1 39 2 flags, 1 40 3 suspend_all_mode bit (1) unaligned, /* ON => multiplexer should disallow all input whenever a 1 41* single input device goes not ready */ 1 42 3 signon_mode bit (1) unaligned, /* ON => multiplexer must send/receive a SIGNON record before 1 43* allowing data transfer on other devices */ 1 44 3 multileave_mode bit (1) unaligned, /* ON => multiplexer may include records for several devices 1 45* in a single block */ 1 46 3 trace_mode bit (1) unaligned, /* ON => multiplexer should record input and output blocks via 1 47* MCS tracing mechansim */ 1 48 3 rts_mode bit (1) unaligned, /* ON => multiplexer must request permission from remote 1 49* host/workstation before transmitting new files */ 1 50 3 pad bit (31) unaligned; 1 51 1 52 dcl (HASP_WORKSTATION initial (0), /* multiplexer is a workstation */ 1 53 HASP_HOST initial (1)) /* multiplexer is a host */ 1 54 fixed binary static options (constant); 1 55 2 1 /* BEGIN INCLUDE FILE ... hasp_device_data.incl.pl1 */ 2 2 /* Created: November 1979 by G. Palter */ 2 3 2 4 /* HASP device types */ 2 5 2 6 dcl (HASP_CONSOLE initial (1), /* operator's console */ 2 7 HASP_READER initial (2), 2 8 HASP_PRINTER initial (3), 2 9 HASP_PUNCH initial (4)) 2 10 fixed binary static options (constant); 2 11 2 12 2 13 /* Name of each type of device as used by the remote I/O daemon software */ 2 14 2 15 dcl HASP_DEVICE_NAMES (4) character (32) static options (constant) initial ("teleprinter", "reader", "printer", "punch"); 2 16 2 17 2 18 /* Maximum record length for each type of device */ 2 19 2 20 dcl HASP_MAX_DEVICE_RECORD_LTHS (4) fixed binary (21) static options (constant) initial (80, 80, 132, 80); 2 21 2 22 /* END INCLUDE FILE ... hasp_device_data.incl.pl1 */ 1 56 1 57 1 58 dcl (HASP_MIN_MAX_BLOCK_SIZE initial (400), /* minimum block size allowed as maximum block size */ 1 59 HASP_MAX_MAX_BLOCK_SIZE initial (1017)) 1 60 fixed binary static options (constant); 1 61 1 62 1 63 /* Default values for HASP configuration */ 1 64 1 65 dcl 1 DEFAULT_HASP_CONFIGURATION_DATA aligned static options (constant), 1 66 2 type fixed binary initial (1), /* host */ 1 67 2 max_block_size fixed binary initial (400), 1 68 2 max_device_input_records fixed binary initial (6), 1 69 2 max_device_output_records fixed binary initial (6), 1 70 2 ic_timeout fixed binary initial (30), 1 71 2 receive_timeout fixed binary initial (3), 1 72 2 transmit_timeout fixed binary initial (2), 1 73 2 max_naks fixed binary initial (10), 1 74 2 flags, 1 75 3 suspend_all_mode bit (1) unaligned initial ("0"b), 1 76 3 signon_mode bit (1) unaligned initial ("0"b), 1 77 3 multileave_mode bit (1) unaligned initial ("1"b), 1 78 3 trace_mode bit (1) unaligned initial ("0"b), 1 79 3 rts_mode bit (1) unaligned initial ("0"b), 1 80 3 pad bit (31) unaligned initial (""b); 1 81 1 82 /* END INCLUDE FILE ... hasp_load_data.incl.pl1 */ 533 534 3 1 /* BEGIN INCLUDE FILE ... hasp_mpx_data.incl.pl1 */ 3 2 /* Created: September-October 1979 by G. Palter */ 3 3 /* Modified: December 1980 by G. Palter as part of "loopback bug" fix */ 3 4 /* Modified: 30 March 1981 by G. Palter to add last_loopback_bcb */ 3 5 /* Modified: 24 July 1981 by G. Palter to add hmd_signon_data, update minor states, and add metering data */ 3 6 3 7 3 8 /* HASP multiplexer data */ 3 9 3 10 dcl 1 hmd aligned based (hmd_ptr), 3 11 2 name character (32) unaligned, /* name of major channel */ 3 12 2 devx fixed binary, /* device (LCT) index of the channel */ 3 13 2 configuration_data like hasp_configuration_data, /* data supplied by load operation that controls multiplexer 3 14* operation (EG: type, block size, etc.) */ 3 15 2 loader_process_id bit (36), /* process to be notified on state change for multiplexer */ 3 16 2 loader_event_channel fixed binary (71), /* ... and the channel to be used */ 3 17 2 dialup_info like dialup_info, /* information saved from DIALUP interrupt */ 3 18 2 state fixed binary, /* state of multiplexer -- down/loading/loaded/started */ 3 19 2 minor_state fixed binary, /* state when running -- normal/need sync/loopback/etc. */ 3 20 2 foreign_block_count fixed binary, /* # of last block received from foreign side */ 3 21 2 foreign_fcs_bytes character (2) unaligned, /* last FCS received from foreign side */ 3 22 2 local_block_count fixed binary, /* # of last block sent by multiplexer */ 3 23 2 local_fcs_bytes character (2) unaligned, /* last FCS sent by multiplexer */ 3 24 2 subchannels_for_output, /* a queue of sub-channels waiting SEND OUTPUT interrupts */ 3 25 3 first fixed binary, /* ... index of first sub-channel to interrupt */ 3 26 3 last fixed binary, /* ... index of last sub-channel */ 3 27 2 output_chain_ptr pointer, /* -> chain of buffers presently being sent to the FNP */ 3 28 2 input, /* chain of input blocks waiting to be split into records */ 3 29 3 first_bufferp pointer, /* ... -> first buffer in the chain */ 3 30 3 last_bufferp pointer, /* ... -> last buffer in the chain */ 3 31 2 loopback, /* chain of loopbacked blocks waiting to be retransmitted */ 3 32 3 first_bufferp pointer, 3 33 3 last_bufferp pointer, 3 34 2 output_block, /* the output block presently being constructed */ 3 35 3 subchannel_idx fixed binary, /* ... sub-channel whose records are contained in this block, 3 36* or -1 if this block contains records from several */ 3 37 3 tally fixed binary, /* ... # of characters in the block */ 3 38 3 first_bufferp pointer, /* ... -> first buffer in the block */ 3 39 3 last_bufferp pointer, /* ... -> last buffer in the block */ 3 40 2 signon_data_ptr pointer, /* -> data needed to send a SIGNON record */ 3 41 2 minor_state_stack pointer, /* -> top of minor state stack */ 3 42 2 loopback_block_chain_stack pointer, /* -> top of loopback block chain stack */ 3 43 2 last_loopback_bcb character (1) unaligned, /* BCB character of last block loopbacked from FNP */ 3 44 2 pad bit (27) unaligned, 3 45 2 bit_arrays aligned, 3 46 3 input_wabs (0:8) bit (1) unaligned, /* input wait-a-bits: OFF => input device not ready; foreign 3 47* side should not send further data */ 3 48 3 output_wabs (0:8) bit (1) unaligned, /* output wait-a-bits: OFF => output device not ready; 3 49* multiplexer should not send further data */ 3 50 3 send_rts (0:8) bit (1) unaligned, /* ON => an RTS record should be sent */ 3 51 3 send_rts_ack (0:8) bit (1) unaligned, /* ON => an RTS acknowledgement record should be sent */ 3 52 2 flags aligned, 3 53 3 suspend_all_output bit (1) unaligned, /* ON => don't send any output at all to foreign side */ 3 54 3 suspend_all_input bit (1) unaligned, /* ON => foreign side should send no input: this flag is only 3 55* set while multiplexer is loaded but not started */ 3 56 3 send_output bit (1) unaligned, /* ON => have permission to send data to FNP */ 3 57 3 input_available bit (1) unaligned, /* ON => input is being held for us by our parent */ 3 58 3 output_in_progress bit (1) unaligned, /* ON => a data block is being sent to the FNP */ 3 59 3 first_foreign_block bit (1) unaligned, /* ON => first block yet to arrive from foreign side; when it 3 60* does, accept it's block count without question */ 3 61 3 reset_local_block_count bit (1) unaligned, /* ON => set local block count to known value in next block */ 3 62 3 retry_transmit_output bit (1) unaligned, /* ON => write to the parent failed: lack of room */ 3 63 3 retry_process_output bit (1) unaligned, /* ON => call to process_output_block failed: lack of room */ 3 64 3 retry_process_loopback_records bit (1) unaligned, /* ON => call to process_loopback_records failed: no room */ 3 65 3 retry_process_input bit (1) unaligned, /* ON => call to process_input_block failed: lack of room */ 3 66 3 pad bit (25) unaligned, 3 67 2 time_mpx_booted fixed binary (71), /* date/time when multiplexer completed loading */ 3 68 2 time_meters_copied fixed binary (71), /* date/time multiplexer meters were last saved */ 3 69 2 meters like hasp_mpx_meters, /* interesting events */ 3 70 2 saved_meters_ptr pointer, /* -> hasp_mpx_meters structure for copy_meters order */ 3 71 2 console_hste_idx fixed binary, /* index of sub-channel data for operator's console */ 3 72 2 n_subchannels fixed binary, /* # of sub-channels configured in this multiplexer */ 3 73 2 subchannels (hmd_n_subchannels refer (hmd.n_subchannels)) like hste; 3 74 3 75 dcl hmd_ptr pointer; 3 76 dcl hmd_n_subchannels fixed binary; /* to allocate hmd structure */ 3 77 3 78 dcl (HMD_DOWN initial (1), /* multiplexer is down */ 3 79 HMD_LOADING initial (2), /* multiplexer is being loaded */ 3 80 HMD_LOADED initial (3), /* multiplexer has been successfully loaded */ 3 81 HMD_STARTED initial (4)) /* multiplexer has been started (will dialup sub-channels) */ 3 82 fixed binary static options (constant); 3 83 3 84 dcl (HMD_SEND_SIGNON initial (1), /* multiplexer waiting to transmit a SIGNON record */ 3 85 HMD_WAIT_SIGNON_RESPONSE initial (2), /* multiplexer is waiting for remote system's response */ 3 86 HMD_NORMAL initial (3), /* normal data transfer */ 3 87 HMD_SEND_SYNC_BLOCK initial (4), /* multiplexer must send special block to FNP to cause the FNP 3 88* to stop loopback process */ 3 89 HMD_LOOPBACK initial (5), /* FNP is returning previous output of multiplexer */ 3 90 HMD_REPROCESS initial (6), /* multiplexer is making initial pass over records loopbacked 3 91* by FNP: records are being rewritten or saved */ 3 92 HMD_SEND_BAD_BCB_BLOCK initial (7), /* multiplexer must send bad BCB block on next SEND OUTPUT */ 3 93 HMD_HANGUP_LINE initial (8)) /* multiplexer must hangup the line on next SEND OUTPUT */ 3 94 fixed binary static options (constant); 3 95 3 96 3 97 /* HASP sub-channel data */ 3 98 3 99 dcl 1 hste aligned based (hste_ptr), 3 100 2 name character (8) unaligned, /* name of device excluding name of multiplexer */ 3 101 2 subchannel_idx fixed binary, /* index of this entry in hmd.subchannels array */ 3 102 2 device_type fixed binary, /* type of device -- console/reader/printer/punch */ 3 103 2 direction fixed binary, /* direction of transfers permitted */ 3 104 2 devx fixed binary, /* channel (LCT) index of this subchannel */ 3 105 2 rcb character (1) unaligned, /* the RCB for this sub-channel */ 3 106 2 device_wab_idx fixed binary, /* index in wait-a-bit arrays for this device */ 3 107 2 dialup_info aligned like dialup_info, /* information for DIALUP interrupt */ 3 108 2 state fixed binary, /* state of sub-channel -- hungup/listening/dialed */ 3 109 2 minor_state fixed binary, /* clarification of dialed-up state -- 3 110* normal/send-rts/wait-ack */ 3 111 2 next_subchannel_for_output fixed binary, /* # of next sub-channel to receive SEND OUTPUT after us */ 3 112 2 input, /* input records waiting to be supplied to user ring */ 3 113 3 n_records fixed binary, /* ... # of records in the chain */ 3 114 3 first_bufferp pointer, /* ... -> first buffer in chain: individual records are 3 115* separated by buffer.break */ 3 116 3 last_bufferp pointer, /* ... -> last buffer in chain */ 3 117 2 loopback, /* loopbacked records waiting to be transmitted */ 3 118 3 n_records fixed binary, /* ... # of records (not used) */ 3 119 3 first_bufferp pointer, 3 120 3 last_bufferp pointer, 3 121 2 output, /* partial output record taken from tty_write to allow ... */ 3 122 3 first_bufferp pointer, /* ... MCS to request yet more output from the user */ 3 123 3 last_bufferp pointer, 3 124 2 flags aligned, 3 125 3 requested_input bit (1) unaligned, /* ON => read called with no input available: send interrupt 3 126* when some becomes available */ 3 127 3 input_available bit (1) unaligned, /* ON => some input is present in an as yet not completely 3 128* processed block: send this sub-channel an interrupt */ 3 129 3 holding_output bit (1) unaligned, /* ON => write called but not all output taken: send 3 130* interrupt when more output may be processed */ 3 131 3 pad bit (33) unaligned, 3 132 2 meters like hasp_subchannel_meters, /* interesting events for this subchannel */ 3 133 2 saved_meters_ptr pointer; /* -> hasp_subchannel_meters structure for copy_meters call */ 3 134 3 135 dcl hste_ptr pointer; 3 136 3 137 dcl (HSTE_HUNGUP initial (1), /* sub-channel is hungup */ 3 138 HSTE_LISTENING initial (2), /* sub-channel is waiting for a dialup from major channel */ 3 139 HSTE_DIALED initial (3)) /* sub-channel is dialed-up and capable of data transfer under 3 140* the control of the following minor states */ 3 141 fixed binary static options (constant); 3 142 3 143 dcl (HSTE_NORMAL initial (1), /* sub-channel is in normal data transfer */ 3 144 HSTE_SEND_RTS initial (2), /* sub-channel needs to request permission from foreign side 3 145* to transmit a file */ 3 146 HSTE_WAIT_RTS_ACK initial (3)) /* sub-channel is waiting for permission from foreign side */ 3 147 fixed binary static options (constant); 3 148 3 149 dcl (HSTE_INPUT_OUTPUT initial (0), /* device can perform input and output */ 3 150 HSTE_INPUT_ONLY initial (1), /* device can perform input only */ 3 151 HSTE_OUTPUT_ONLY initial (2)) /* device can perform output only */ 3 152 fixed binary static options (constant); 3 153 3 154 3 155 /* Data required to transmit a SIGNON record to the remote host */ 3 156 3 157 dcl 1 hmd_signon_data aligned based (hsd_ptr), 3 158 2 processid bit (36), /* process to be informed of results */ 3 159 2 pad bit (36), 3 160 2 event_channel fixed binary (71), /* IPC event channel on which signal is sent */ 3 161 2 record character (80) unaligned; /* the actual SIGNON record */ 3 162 3 163 dcl hsd_ptr pointer; 3 164 3 165 3 166 /* HASP minor state stack entry */ 3 167 3 168 dcl 1 msse aligned based (msse_ptr), 3 169 2 previous pointer, /* -> prior entry on the stack */ 3 170 2 minor_state fixed binary, /* minor state of multiplexer when this entry created */ 3 171 2 subchannels (hmd.n_subchannels), 3 172 3 loopback, /* subchannel's loopback chain when this entry created */ 3 173 4 n_records fixed binary, 3 174 4 first_bufferp pointer, 3 175 4 last_bufferp pointer; 3 176 3 177 dcl msse_ptr pointer; 3 178 3 179 3 180 /* HASP loopback block chain stack entry */ 3 181 3 182 dcl 1 lbcse aligned based (lbcse_ptr), 3 183 2 previous pointer, /* -> previous entry on the stack */ 3 184 2 loopback, /* loopback block chain when this entry was created */ 3 185 3 first_bufferp pointer, 3 186 3 last_bufferp pointer; 3 187 3 188 dcl lbcse_ptr pointer; 3 189 3 190 /* END INCLUDE FILE ... hasp_mpx_data.incl.pl1 */ 535 536 4 1 /* BEGIN INCLUDE FILE ... hasp_mpx_meters.incl.pl1 */ 4 2 /* Created: 24 July 1981 by G. Palter */ 4 3 4 4 /* Data returned by comm_meters_ for a HASP multiplexer channel */ 4 5 4 6 dcl 1 hasp_mpx_meters_data aligned based (hmmd_ptr), 4 7 2 version fixed binary, 4 8 2 time_mpx_booted fixed binary (71), /* time when multiplexer actually loaded */ 4 9 2 time_meters_copied fixed binary (71), /* time meters last copied */ 4 10 2 idle_interval fixed binary, /* # of seconds to go once around the idle loop */ 4 11 2 current_meters like hasp_mpx_meters, 4 12 2 saved_meters like hasp_mpx_meters; 4 13 4 14 dcl hmmd_ptr pointer; 4 15 4 16 dcl HASP_MPX_METERS_DATA_VERSION_1 fixed binary static options (constant) initial (1); 4 17 4 18 4 19 /* Meters accumulated for a HASP multiplexer channel */ 4 20 4 21 dcl 1 hasp_mpx_meters aligned based (hmm_ptr), 4 22 2 input_meters, 4 23 3 n_local_wab_set fixed binary (35), /* # times we stopped accepting ALL input */ 4 24 3 n_input_blocks fixed binary (35), 4 25 3 n_input_records fixed binary (35), 4 26 3 n_duplicate_input_blocks fixed binary (35), /* # of input blocks ignored as duplicates */ 4 27 2 output_meters, 4 28 3 n_foreign_wab_set fixed binary (35), /* # times they stopped ALL our output */ 4 29 3 n_output_blocks fixed binary (35), 4 30 3 n_output_records fixed binary (35), 4 31 2 wraparound_meters, /* describes when our output was returned by FNP */ 4 32 3 n_wraparounds fixed binary (35), 4 33 3 n_wraparound_blocks fixed binary (35); 4 34 4 35 dcl hmm_ptr pointer; 4 36 4 37 /* END INCLUDE FILE ... hasp_mpx_meters.incl.pl1 */ 537 538 5 1 /* BEGIN INCLUDE FILE ... hasp_subchannel_meters.incl.pl1 */ 5 2 /* Created: 24 July 1981 by G. Palter */ 5 3 5 4 /* Data returned by comm_meters_ for a subchannel of a HASP multiplexer channel */ 5 5 5 6 dcl 1 hasp_subchannel_meters_data aligned based (hsmd_ptr), 5 7 2 version fixed binary, 5 8 2 flags, 5 9 3 report_input_meters bit (1) unaligned, /* ON => report input meters for this subchannel */ 5 10 3 report_output_meters bit (1) unaligned, /* ON => report output meters for this subchannel */ 5 11 3 pad bit (34) unaligned, 5 12 2 current_meters like hasp_subchannel_meters, 5 13 2 saved_meters like hasp_subchannel_meters; 5 14 5 15 dcl hsmd_ptr pointer; 5 16 5 17 dcl HASP_SUBCHANNEL_METERS_DATA_VERSION_1 fixed binary static options (constant) initial (1); 5 18 5 19 5 20 /* Meters accumulated for a subchannel of a HASP multiplexer channel */ 5 21 5 22 dcl 1 hasp_subchannel_meters aligned based (hsm_ptr), 5 23 2 input_meters, 5 24 3 device_n_local_wab_set fixed binary (35), /* # of times we had to stop accepting input */ 5 25 3 device_n_input_records fixed binary (35), 5 26 3 device_n_input_eof_records fixed binary (35), 5 27 2 output_meters, 5 28 3 device_n_foreign_wab_set fixed binary (35), /* # of times local system stopped our output */ 5 29 3 device_n_output_records fixed binary (35), 5 30 3 device_n_output_eof_records fixed binary (35); 5 31 5 32 dcl hsm_ptr pointer; 5 33 5 34 /* END INCLUDE FILE ... hasp_subchannel_meters.incl.pl1 */ 539 540 6 1 /* BEGIN INCLUDE FILE ... hasp_rcb_byte.incl.pl1 */ 6 2 /* Created: October 1979 by G. Palter from hasp_block_record_data.incl because only the RCB is used by priv_hasp_mpx */ 6 3 6 4 /* HASP Record Control Byte (RCB) */ 6 5 6 6 dcl 1 hasp_rcb_byte unaligned based (hasp_rcb_byte_ptr), 6 7 2 pad1 bit (1) unaligned, /* padding supplied by MCS */ 6 8 2 not_eob bit (1) unaligned, /* ON => not end-of-block indicator */ 6 9 2 stream fixed binary (3) unaligned unsigned, /* identifies which device record is from or what control 6 10* function depending on contents of type field below */ 6 11 2 type fixed binary (4) unaligned unsigned; /* type of record */ 6 12 6 13 dcl hasp_rcb_byte_ptr pointer; 6 14 6 15 dcl (HASP_RCB_TYPE_CONTROL initial (0), /* RCB of some form of a control record */ 6 16 HASP_RCB_TYPE_CONSOLE_OUTPUT initial (1), /* RCB of message from host to workstation console */ 6 17 HASP_RCB_TYPE_CONSOLE_INPUT initial (2), /* RCB of input line from workstation console to host */ 6 18 HASP_RCB_TYPE_READER_INPUT initial (3), /* RCB of card from workstation card reader */ 6 19 HASP_RCB_TYPE_PRINT_OUTPUT initial (4), /* RCB ofprint line from host */ 6 20 HASP_RCB_TYPE_PUNCH_OUTPUT initial (5)) /* RCB of card from host to workstation card punch */ 6 21 fixed binary (4) unsigned static options (constant); 6 22 6 23 dcl (HASP_RCB_STREAM_RTS initial (1), /* RCB of request-to-send control record */ 6 24 HASP_RCB_STREAM_RTS_ACK initial (2), /* RCB of acknowledgement to request-to-send control record */ 6 25 HASP_RCB_STREAM_BAD_BCB initial (6), /* RCB of bad-BCB control record */ 6 26 HASP_RCB_STREAM_CONTROL initial (7)) /* RCB of "general" control record (escape) */ 6 27 fixed binary (3) unsigned static options (constant); 6 28 6 29 /* END INCLUDE FILE ... hasp_rcb_byte.incl.pl1 */ 541 542 7 1 /* BEGIN INCLUDE FILE ... mux_init_info.incl.pl1 */ 7 2 7 3 /* Created 8/2/78 by J. Stern */ 7 4 7 5 7 6 dcl miip ptr; /* ptr to mux_init_info structure */ 7 7 dcl mii_chan_count fixed bin; /* channel count when allocating mux_init_info */ 7 8 7 9 7 10 dcl 1 mux_init_info aligned based (miip), /* multiplexer initialization info */ 7 11 2 no_channels fixed bin, /* number of multiplexed channels */ 7 12 2 channels (mii_chan_count refer (mux_init_info.no_channels)), /* one entry per channel */ 7 13 3 name char (32) unal, /* channel name */ 7 14 3 devx fixed bin; /* device index for channel */ 7 15 7 16 7 17 /* END INCLUDE FILE ... mux_init_info.incl.pl1 */ 543 544 8 1 /* BEGIN INCLUDE FILE ... tty_buf.incl.pl1 */ 8 2 8 3 /* Date Last Modified and Reason 8 4* Created 04/19/77 by J. Stern (from part of tty.incl.pl1) 8 5* Modified January 1978 by Robert Coren and Larry Johnson for variable-size buffers 8 6* Modified 2/6/78 by Robert Coren to make circular_queue size settable 8 7* Modified Aug 78 by J. Nicholls to move the buffer block format to a file of its own 8 8* and wtcb to its own plus other modification for ring 0 multiplexing, tty_buffer_block.incl.pl1 8 9* Modified 7/17/79 by B. Greenberg for echo negotiation meters. 8 10* Modified November 1979 by C. Hornig for MCS tracing. 8 11* Modified December 1979 by Robert Coren to add FNP channel lock meter 8 12* Modified February 1980 by Robert Coren to remove all references to circular buffer 8 13* Modified March 1980 by Robert Coren to reorganize metering information 8 14* Modified December 1980 by Robert Coren to add FNP-specific events 8 15* Modified 24 March 1982, W. Olin Sibert, to add mcs_timer support, recoverable_error_severity 8 16* Modified November 1984 by Robert Coren to add tty_area_lock 8 17**/ 8 18 8 19 dcl ttybp ptr, 8 20 tty_buf$ ext static, /* tty buffer segment */ 8 21 tty_ev fixed bin int static options (constant) init (57), /* event used for wait and notify */ 8 22 abs_buf_limit fixed bin (18) static options (constant) init (64), /* minimum number of words we will leave free */ 8 23 input_bpart fixed bin (18) static options (constant) init (2), /* fraction of bleft we will allow for input */ 8 24 output_bpart fixed bin (18) static options (constant) init (4); /* fraction of bleft we will allow for output */ 8 25 8 26 8 27 dcl qblock_size fixed bin int static options (constant) init (16); /* size in words of a delay queue block */ 8 28 dcl bsizec fixed bin int static options (constant) init (60); /* number of characters in smallest buffer */ 8 29 dcl buf_per_second fixed bin int static options (constant) init (10); /* for figuring out max. buffer size based on speed */ 8 30 8 31 dcl FNP_DUMP_PATCH_EVENT fixed bin int static options (constant) init (58); 8 32 dcl FNP_METER_EVENT fixed bin int static options (constant) init (59); 8 33 dcl TTY_AREA_LOCK_EVENT bit (36) aligned int static options (constant) init ("74"b3); 8 34 8 35 dcl 1 tty_buf aligned based (ttybp), /* declaration of tty buffer seg */ 8 36 2 slock bit (36), /* per system lock */ 8 37 2 absorig fixed bin (24), /* abs address of this seg */ 8 38 2 borig bit (18), /* index of start of buffer area */ 8 39 2 bleft fixed bin (18), /* words left in pool */ 8 40 2 free bit (18), /* pointer to start of free pool */ 8 41 2 fnp_config_flags (8) bit (1) unal, /* flag(i) ON if fnp(i) configured */ 8 42 2 padb1 bit (28) unaligned, 8 43 2 lct_ptr ptr, /* pointer to logical channel table */ 8 44 8 45 2 nrawread fixed bin (35), /* number of raw chars input, total */ 8 46 2 nrawwrite fixed bin (35), /* number of raw characters output */ 8 47 2 ninchars fixed bin (35), /* total input chars after conversion */ 8 48 2 noutchars fixed bin (35), /* total output chars before conversion */ 8 49 2 readblocked fixed bin (35), /* number of times go input blocked */ 8 50 2 nblocked fixed bin (35), /* number of times process output blocked */ 8 51 2 minbuf fixed bin (18), /* min output buffer size */ 8 52 2 totbuf fixed bin (35), /* divide by nblocked to get ave buffer size */ 8 53 8 54 2 preconverted fixed bin (35), /* number of converted chars held in tty_buf */ 8 55 2 input_restart fixed bin, /* number of times tty_read had to start over */ 8 56 2 output_restart fixed bin, /* number of times tty_write has had to start over */ 8 57 2 output_buffer_overflow fixed bin, /* number of times tty_write has run out of buffers */ 8 58 2 read_time fixed bin (71), /* total time spent in tty_read */ 8 59 2 write_time fixed bin (71), /* total time spent in tty_write */ 8 60 8 61 2 read_calls fixed bin (35), /* number of calls to tty_read */ 8 62 2 write_calls fixed bin (35), /* number of calls to tty_write */ 8 63 2 bfx fixed bin, /* used in calls to iobm */ 8 64 2 nquits fixed bin (35), /* number of quits */ 8 65 2 space_needed_data, 8 66 3 space_needed bit (1) unal, /* space_needed bit on in at least 1 lcte */ 8 67 3 space_needed_calls fixed bin (34) unal, /* meter of uses of this facility */ 8 68 2 space_lock_count fixed bin (35), /* count of times tty_buf.slock locked */ 8 69 2 space_lock_wait_count fixed bin (35), /* count of times necessary to loop to lock it */ 8 70 2 space_lock_wait_time fixed bin (35), /* total time looped trying to lock it */ 8 71 8 72 2 alloc_calls fixed bin (35), /* total number of allocations performed in tty_buf */ 8 73 2 free_calls fixed bin (35), /* total number of freeings in tty_buf */ 8 74 2 alloc_time fixed bin (35), /* time spent masked in tty_space_man$get entries */ 8 75 2 free_time fixed bin (35), /* time spent masked in tty_space_man$free entries */ 8 76 2 total_alloc_steps fixed bin (35), /* number of steps thru free chain while doing above */ 8 77 2 alloc_failures fixed bin (35), /* number of unsuccessful attempts to allocate space */ 8 78 2 cumulative_input_space fixed bin (71), /* cumulative amount of space allocated for input */ 8 79 8 80 2 cumulative_output_space fixed bin (71), /* cumulative amount of space allocated for output */ 8 81 2 cumulative_control_space fixed bin (71), /* cumulative amount of space allocated by tty_space_man$get_space */ 8 82 2 input_space_updates fixed bin (35), /* number of increments to cumulative_input_space */ 8 83 2 output_space_updates fixed bin (35), /* number of increments to cumulative_output_space */ 8 84 2 control_space_updates fixed bin (35), /* number of increments to cumulative_control_space */ 8 85 2 minimum_free_space fixed bin (18), /* smallest amount of free space ever available */ 8 86 8 87 2 current_input_space fixed bin (18), /* amount of space currently allocated for input */ 8 88 2 current_output_space fixed bin (18), /* amount of space currently allocated for output */ 8 89 2 current_control_space fixed bin (18), /* amount of space currently allocated by get_space */ 8 90 2 tty_lock_calls fixed bin (35), /* number of calls to tty_lock$lock entries */ 8 91 2 found_channel_locked fixed bin (35), /* number of times tty_lock found channel already locked */ 8 92 2 max_wait_time fixed bin (35), /* longest time waited for any channel lock */ 8 93 2 total_wait_time fixed bin (71), /* total amount of time spent waiting for channel locks */ 8 94 8 95 2 echo_neg_time fixed bin (71), /* cumulative time spent doing echo negotiation */ 8 96 2 echo_neg_interrupts fixed bin (35), /* Echo-negotiated shipments */ 8 97 2 echo_neg_r0_chars fixed bin (35), /* Chars echoed by ring 0 */ 8 98 2 echo_neg_mux_chars fixed bin (35), /* Chars echoed by mux */ 8 99 2 echo_neg_sndopt_restarts fixed bin (35), /* Echo reinits */ 8 100 2 echo_neg_mux_nonecho fixed bin (35), 8 101 2 echo_neg_entries fixed bin (35), /* Entries into negotiate */ 8 102 8 103 2 echo_neg_mux_inhibit bit (1) aligned, /* For testing */ 8 104 2 n_queued_interrupts fixed bin (35), /* number of interrupts queued by tty_lock */ 8 105 2 trace unaligned, /* tracing information */ 8 106 3 flags, 8 107 4 enable bit, /* global tracing control */ 8 108 4 default_mode bit, /* whether to trace channels by default */ 8 109 4 read bit, /* read */ 8 110 4 write bit, /* write */ 8 111 4 data bit, /* buffers on reads and writes */ 8 112 4 control bit, /* control, priv_control, and hpriv_control */ 8 113 4 modes bit, /* (get set check)_modes */ 8 114 4 interrupt bit, /* interrupt, interrupt_later */ 8 115 4 init bit, /* init_multiplexer, terminate_multiplexer */ 8 116 4 start bit, /* start, stop */ 8 117 4 shutdown bit, /* shutdown */ 8 118 4 space_man bit, /* tty_space_man$* */ 8 119 4 pad_flags bit (6), 8 120 3 data_offset bit (18), /* offset of tracing data */ 8 121 8 122 2 recoverable_error_severity fixed bin, /* Syserr severity for recoverable MCS errors */ 8 123 8 124 2 timer_lock bit (36) aligned, /* Lock owned by mcs_timer */ 8 125 2 next_timer_offset bit (18) aligned, /* Offset of next timer to come due */ 8 126 2 timer_count fixed bin, /* Number of timers outstanding */ 8 127 2 timer_process bit (36) aligned, /* Who is doing timers? */ 8 128 8 129 2 timer_ev_chn fixed bin (71), /* How get get him */ 8 130 2 timer_lock_wait_time fixed bin (71), /* CPU time spent spinning on timer lock */ 8 131 8 132 2 timer_lock_count fixed bin (35), /* Number of times timer lock locked */ 8 133 2 timer_lock_wait_count fixed bin (35), /* Number of times imer lock waited on */ 8 134 2 timer_call_time fixed bin (71), /* CPU time spent in call side timer operations */ 8 135 8 136 2 timer_polling_time fixed bin (71), /* CPU time spent polling (including channel_manager) */ 8 137 2 timer_set_calls fixed bin (35), /* Number of calls to mcs_timer$set, set_wired */ 8 138 2 timer_reset_calls fixed bin (35), /* Number of calls to mcs_timer$reset, reset_wired */ 8 139 8 140 2 timer_change_calls fixed bin (35), /* Number of calls to mcs_timer$change, change_wired */ 8 141 2 timer_poll_calls fixed bin (35), /* Number of calls to mcs_timer$poll */ 8 142 2 timer_error_calls fixed bin (35), /* Number of mcs_timer calls ending with recoverable errors */ 8 143 2 timer_duplicate_pollings fixed bin (35), /* Number of timer polling found in progress on other CPU */ 8 144 8 145 2 tty_area_lock like hc_fast_lock, /* to prevent contention in allocating/freeing in tty_area */ 8 146 8 147 2 pad2 (13) fixed bin (35), 8 148 8 149 2 free_space fixed bin; /* start of free space region */ 8 150 8 151 9 1 /* BEGIN INCLUDE FILE...hc_fast_lock.incl.pl1 */ 9 2 9 3 /* Created November 1984 by Robert Coren to replace hc_lock.incl.pl1 */ 9 4 9 5 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 9 6 9 7 /* format: style3 */ 9 8 9 9 declare lock_ptr pointer; 9 10 declare 1 hc_fast_lock aligned based (lock_ptr), 9 11 2 pid bit (36) aligned, /* holder of lock */ 9 12 2 event bit (36) aligned, /* event associated with lock */ 9 13 2 flags aligned, 9 14 3 notify_sw bit (1) unaligned, 9 15 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 9 16 9 17 /* END INCLUDE FILE...hc_fast_lock.incl.pl1 */ 8 152 8 153 8 154 /* END INCLUDE FILE ... tty_buf.incl.pl1 */ 545 546 10 1 /* BEGIN INCLUDE FILE ... lct.incl.pl1 */ 10 2 10 3 /* Created by J. Stern 7/26/78 */ 10 4 /* Metering information added by C. Hornig, March 1980. */ 10 5 /* Unwired saved meters added by Robert Coren, December 1980 */ 10 6 10 7 dcl lctp ptr; /* ptr to logical channel table */ 10 8 dcl lctep ptr; /* ptr to logical channel table entry */ 10 9 dcl lct_size fixed bin; /* size of lcte_array when allocated */ 10 10 10 11 dcl 1 lct aligned based (lctp), /* logical channel table */ 10 12 2 max_no_lctes fixed bin, /* maximum number of lct entries */ 10 13 2 cur_no_lctes fixed bin, /* current number of lct entries used */ 10 14 2 lcnt_ptr ptr, /* ptr to logical channel name table */ 10 15 2 queue_lock bit (36), /* lock used to serialize queueing operations */ 10 16 2 pad (11) fixed bin, 10 17 2 lcte_array (lct_size refer (lct.max_no_lctes)) like lcte; /* lct entries */ 10 18 10 19 10 20 dcl 1 lcte aligned based (lctep), /* logical channel table entry */ 10 21 2 lock bit (36), /* channel lock */ 10 22 2 data_base_ptr ptr unal, /* ptr to channel data base */ 10 23 2 channel_type fixed bin (8) unal, /* identifies channel manager program */ 10 24 2 flags unal, 10 25 3 entry_in_use bit (1) unal, /* ON if this entry in use */ 10 26 3 initialized bit (1) unal, /* ON if this channel initialized */ 10 27 3 notify_reqd bit (1) unal, /* ON if must notify when unlocking this channel */ 10 28 3 locked_for_interrupt bit (1) unal, /* ON if lock set by interrupt handler */ 10 29 3 space_needed bit (1) unal, /* ON if this channel needs buffer space */ 10 30 3 special_lock bit (1) unal, /* ON if lock is managed by multiplexer */ 10 31 3 trace_force bit (1) unal, /* ON to trace based on next bit only */ 10 32 /* OFF to XOR next bit with tty_buf.default_tracing */ 10 33 3 trace bit (1) unal, /* ON to trace this channel */ 10 34 3 unused bit (1) unal, 10 35 2 physical_channel_devx fixed bin (17) unal, /* devx of physical chan from which logical chan is derived */ 10 36 2 major_channel_info, 10 37 3 major_channel_devx fixed bin unal, /* major channel device index */ 10 38 3 subchannel fixed bin (17) unal, /* subchannel id (or data ptr) wrt major channel */ 10 39 2 queue_entries, 10 40 3 queue_head bit (18) unal, /* ptr to first queue entry for this channel */ 10 41 3 queue_tail bit (18) unal, /* ptr to last queue entry for this channel */ 10 42 2 word_counts, 10 43 3 input_words fixed bin (17) unal, /* number of input words charged to this channel */ 10 44 3 output_words fixed bin (17) unal, /* number of output words charged to this channel */ 10 45 10 46 2 meters, 10 47 3 in_bytes fixed bin (35), 10 48 3 out_bytes fixed bin (35), 10 49 3 in, 10 50 4 calls fixed bin (35), 10 51 4 interrupts fixed bin (35), 10 52 4 call_time fixed bin (71), 10 53 4 interrupt_time fixed bin (71), 10 54 3 out like lcte.meters.in, 10 55 3 control like lcte.meters.in, 10 56 2 saved_meters_ptr ptr, /* pointer to unwired copy of meters saved at last dialup */ 10 57 10 58 2 timer_offset bit (18) aligned, /* Head of list of timers for this channel */ 10 59 10 60 2 pad (3) fixed bin (35); 10 61 10 62 10 63 dcl lcntp ptr; /* ptr to logical channel name table */ 10 64 10 65 dcl 1 lcnt aligned based (lcntp), /* logical channel name table */ 10 66 2 names (lct.max_no_lctes) char (32) unal; /* channel names */ 10 67 10 68 dcl 1 saved_meters aligned based like lcte.meters; /* meters saved at dialup, allocated in tty_area */ 10 69 10 70 10 71 /* END INCLUDE FILE ... lct.incl.pl1 */ 547 548 11 1 /* BEGIN INCLUDE FILE ... mcs_interrupt_info.incl.pl1 */ 11 2 11 3 /* Defines constants and structures used by MCS interrupt handlers */ 11 4 11 5 /* Created 08/21/78 by Robert Coren */ 11 6 /* Echo negotiation types added sometime by Bernie Greenberg */ 11 7 /* TIMER and USER_INTERRUPT added in spring of 1982 by Olin Sibert */ 11 8 /* MASKED type added June 23, 1982, by Robert Coren */ 11 9 11 10 dcl DIALUP fixed bin int static options (constant) init (1); 11 11 dcl HANGUP fixed bin int static options (constant) init (2); 11 12 dcl CRASH fixed bin int static options (constant) init (3); 11 13 dcl SEND_OUTPUT fixed bin int static options (constant) init (4); 11 14 dcl INPUT_AVAILABLE fixed bin int static options (constant) init (5); 11 15 dcl ACCEPT_INPUT fixed bin int static options (constant) init (6); 11 16 dcl INPUT_REJECTED fixed bin int static options (constant) init (7); 11 17 dcl QUIT fixed bin int static options (constant) init (8); 11 18 dcl LINE_STATUS fixed bin int static options (constant) init (9); 11 19 dcl DIAL_STATUS fixed bin int static options (constant) init (10); 11 20 dcl WRU_TIMEOUT fixed bin int static options (constant) init (11); 11 21 dcl SPACE_AVAILABLE fixed bin int static options (constant) init (12); 11 22 dcl ACKNOWLEDGE_ECHNEGO_INIT fixed bin int static options (constant) init (13); 11 23 dcl ACKNOWLEDGE_ECHNEGO_STOP fixed bin int static options (constant) init (14); 11 24 dcl TIMER fixed bin int static options (constant) init (15); 11 25 dcl USER_INTERRUPT fixed bin int static options (constant) init (16); 11 26 dcl MASKED fixed bin int static options (constant) init (17); 11 27 11 28 dcl interrupt_info bit (72) aligned; 11 29 11 30 dcl 1 dialup_info aligned, /* for use with DIALUP interrupt */ 11 31 2 line_type fixed bin (9) unal uns, 11 32 2 buffer_pad fixed bin (9) unal uns, /* free space multiplexer would like in output bufs */ 11 33 2 baud_rate fixed bin (18) unal uns, 11 34 2 max_buf_size fixed bin (9) unal uns, 11 35 2 receive_mode_device bit (1) unal, /* device must be told to enter receive mode */ 11 36 2 pad bit (26) unal; 11 37 11 38 dcl 1 rtx_info aligned, /* for use with ACCEPT_INPUT interrupt */ 11 39 2 input_chain unaligned, 11 40 3 chain_head bit (18) unaligned, 11 41 3 chain_tail bit (18) unaligned, 11 42 2 input_count fixed bin (18) unal uns, 11 43 2 flags unaligned, 11 44 3 break_char bit (1), /* data contains a break character */ 11 45 3 output_in_fnp bit (1), /* there is output in the FNP */ 11 46 3 output_in_ring_0 bit (1), /* there is output in ring 0 */ 11 47 3 formfeed_present bit (1), /* input contains a formfeed character */ 11 48 3 pad bit (14); 11 49 11 50 dcl 1 timer_info aligned, /* Info supplied with TIMER interrupt */ 11 51 2 id bit (36) aligned, /* ID which was supplied in call to mcs_timer$set */ 11 52 2 subchan_idx fixed bin; /* Index of subchannel on whose behalf timer was set */ 11 53 11 54 /* END INCLUDE FILE ... mcs_interrupt_info.incl.pl1 */ 549 550 12 1 /* BEGIN INCLUDE FILE ... channel_manager_dcls.incl.pl1 */ 12 2 12 3 /* Created 8/25/78 by J. Stern */ 12 4 12 5 12 6 /* call channel_manager$read (devx, chain_ptr, more_input_flag, code) */ 12 7 dcl channel_manager$read entry (fixed bin, ptr, bit (1) aligned, fixed bin (35)); 12 8 12 9 /* call channel_manager$write (devx, output_ptr, code) */ 12 10 dcl channel_manager$write entry (fixed bin, ptr, fixed bin (35)); 12 11 12 12 /* call channel_manager$control (devx, control_type, info_ptr, code) */ 12 13 dcl channel_manager$control entry (fixed bin, char (*), ptr, fixed bin (35)); 12 14 12 15 /* call channel_manager$set_modes (devx, mode_change_list_ptr, code) */ 12 16 dcl channel_manager$set_modes entry (fixed bin, ptr, fixed bin (35)); 12 17 12 18 /* call channel_manager$check_modes (devx, mode_change_list_ptr, code) */ 12 19 dcl channel_manager$check_modes entry (fixed bin, ptr, fixed bin (35)); 12 20 12 21 /* call channel_manager$get_modes (devx, modes, code) */ 12 22 dcl channel_manager$get_modes entry (fixed bin, char (*), fixed bin (35)); 12 23 12 24 /* call channel_manager$interrupt (devx, int_type, int_data) */ 12 25 dcl channel_manager$interrupt entry (fixed bin, fixed bin, bit (72) aligned); 12 26 12 27 /* call channel_manager$interrupt_later (devx, int_type, int_data) */ 12 28 dcl channel_manager$interrupt_later entry (fixed bin, fixed bin, bit (72) aligned); 12 29 12 30 /* call channel_manager$queued_interrupt (devx, int_type, int_data) */ 12 31 dcl channel_manager$queued_interrupt entry (fixed bin, fixed bin, bit (72) aligned); 12 32 12 33 12 34 /* END INCLUDE FILE ... channel_manager_dcls.incl.pl1 */ 551 552 13 1 /* BEGIN INCLUDE FILE ... tty_space_man_dcls.incl.pl1 */ 13 2 13 3 /* This include file declares all the entries in tty_space_man and defines the constants 13 4** to be used for the flags argument 13 5** Modified 08/21/78 by Robert Coren to eliminate "masked" flag 13 6** Modified March 1981 by Robert Coren to add get_perm_space entry 13 7** Modified April 1981 by Robert Coren to add switch_chain entry 13 8**/ 13 9 13 10 dcl tty_space_man$get_space entry (fixed bin, ptr); 13 11 dcl tty_space_man$get_perm_space entry (fixed bin, ptr); 13 12 dcl tty_space_man$free_space entry (fixed bin, ptr); 13 13 dcl tty_space_man$get_buffer entry (fixed bin, fixed bin, bit (1), ptr); 13 14 dcl tty_space_man$free_buffer entry (fixed bin, bit (1), ptr); 13 15 dcl tty_space_man$get_chain entry (fixed bin, fixed bin, fixed bin, bit (1), ptr); 13 16 dcl tty_space_man$free_chain entry (fixed bin, bit (1), ptr); 13 17 dcl tty_space_man$switch_chain entry (fixed bin, fixed bin, bit (1), bit (1), ptr); 13 18 dcl tty_space_man$needs_space entry (fixed bin); 13 19 13 20 dcl INPUT bit (1) int static options (constant) init ("0"b); 13 21 dcl OUTPUT bit (1) int static options (constant) init ("1"b); 13 22 13 23 /* END INCLUDE FILE ... tty_space_man_dcls.incl.pl1 */ 553 554 14 1 /* BEGIN INCLUDE FILE...get_comm_meters_info.incl.pl1 */ 14 2 14 3 /* This include file defines the info structure(s) used with the get_meters order to MCM */ 14 4 /* A program that includes this include file must alos include lct.incl.pl1 */ 14 5 14 6 /* Written Decemeber 1980 by Robert Coren */ 14 7 14 8 dcl 1 get_comm_meters_info aligned based, /* info_ptr points to this */ 14 9 2 version fixed bin, 14 10 2 pad fixed bin, 14 11 2 subchan_ptr pointer, /* pointer to meters kept by the subchannel */ 14 12 2 logical_chan_ptr pointer, /* pointer to meters kept by channel_manager */ 14 13 2 parent_ptr pointer, /* pointer to meters kept by the parent multiplexer */ 14 14 2 subchan_type fixed bin, /* multiplexer type of subchannel */ 14 15 2 parent_type fixed bin; /* multiplexer type of parent */ 14 16 14 17 dcl 1 logical_chan_meters based aligned, /* pointed to by get_comm_meters_info.logical_chan_ptr */ 14 18 2 current_meters like lcte.meters, /* latest values */ 14 19 2 saved_meters like lcte.meters; /* values as of last copy_meters */ 14 20 14 21 dcl GET_COMM_METERS_INFO_VERSION_1 fixed bin int static options (constant) init (1); 14 22 14 23 /* END INCLUDE FILE...get_comm_meters_info.incl.pl1 */ 555 556 557 end priv_hasp_mpx; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0804.9 priv_hasp_mpx.pl1 >spec>install>1111>priv_hasp_mpx.pl1 533 1 10/20/82 0938.5 hasp_load_data.incl.pl1 >ldd>include>hasp_load_data.incl.pl1 1-56 2 03/27/82 0436.6 hasp_device_data.incl.pl1 >ldd>include>hasp_device_data.incl.pl1 535 3 03/27/82 0429.7 hasp_mpx_data.incl.pl1 >ldd>include>hasp_mpx_data.incl.pl1 537 4 03/27/82 0429.7 hasp_mpx_meters.incl.pl1 >ldd>include>hasp_mpx_meters.incl.pl1 539 5 03/27/82 0429.7 hasp_subchannel_meters.incl.pl1 >ldd>include>hasp_subchannel_meters.incl.pl1 541 6 03/27/82 0436.6 hasp_rcb_byte.incl.pl1 >ldd>include>hasp_rcb_byte.incl.pl1 543 7 02/23/79 1434.9 mux_init_info.incl.pl1 >ldd>include>mux_init_info.incl.pl1 545 8 01/06/85 1422.1 tty_buf.incl.pl1 >ldd>include>tty_buf.incl.pl1 8-152 9 01/06/85 1422.1 hc_fast_lock.incl.pl1 >ldd>include>hc_fast_lock.incl.pl1 547 10 11/08/82 1005.8 lct.incl.pl1 >ldd>include>lct.incl.pl1 549 11 10/20/82 0938.6 mcs_interrupt_info.incl.pl1 >ldd>include>mcs_interrupt_info.incl.pl1 551 12 05/06/80 0958.2 channel_manager_dcls.incl.pl1 >ldd>include>channel_manager_dcls.incl.pl1 553 13 06/18/81 0900.8 tty_space_man_dcls.incl.pl1 >ldd>include>tty_space_man_dcls.incl.pl1 555 14 06/18/81 0900.6 get_comm_meters_info.incl.pl1 >ldd>include>get_comm_meters_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. GET_COMM_METERS_INFO_VERSION_1 constant fixed bin(17,0) initial dcl 14-21 ref 249 HASP_CONSOLE constant fixed bin(17,0) initial dcl 2-6 ref 164 174 328 499 HASP_HOST constant fixed bin(17,0) initial dcl 1-52 ref 330 HASP_MPX_METERS_DATA_VERSION_1 constant fixed bin(17,0) initial dcl 4-16 ref 254 HASP_PRINTER constant fixed bin(17,0) initial dcl 2-6 ref 184 516 HASP_PUNCH constant fixed bin(17,0) initial dcl 2-6 ref 167 186 526 HASP_RCB_TYPE_PRINT_OUTPUT constant fixed bin(4,0) initial unsigned dcl 6-15 ref 184 HASP_RCB_TYPE_PUNCH_OUTPUT constant fixed bin(4,0) initial unsigned dcl 6-15 ref 186 HASP_RCB_TYPE_READER_INPUT constant fixed bin(4,0) initial unsigned dcl 6-15 ref 182 HASP_READER constant fixed bin(17,0) initial dcl 2-6 ref 182 330 334 506 HASP_WORKSTATION constant fixed bin(17,0) initial dcl 1-52 ref 334 HMD_DOWN constant fixed bin(17,0) initial dcl 3-78 ref 133 292 406 HMD_LOADED constant fixed bin(17,0) initial dcl 3-78 ref 362 393 HMD_LOADING constant fixed bin(17,0) initial dcl 3-78 ref 343 HMD_NORMAL constant fixed bin(17,0) initial dcl 3-84 ref 371 HMD_STARTED constant fixed bin(17,0) initial dcl 3-78 ref 367 393 HSTE_INPUT_ONLY constant fixed bin(17,0) initial dcl 3-149 ref 330 337 HSTE_INPUT_OUTPUT constant fixed bin(17,0) initial dcl 3-149 ref 328 HSTE_LISTENING constant fixed bin(17,0) initial dcl 3-137 ref 371 377 HSTE_OUTPUT_ONLY constant fixed bin(17,0) initial dcl 3-149 ref 333 334 NUL constant char(1) initial packed unaligned dcl 70 ref 171 P_code parameter fixed bin(35,0) dcl 34 set ref 91 105* 111* 206* 216* 221 270* 276 352* 357 362* 366* 388 396* 401 411* 418 426* P_devx parameter fixed bin(17,0) dcl 36 ref 91 94 P_hmd_ptr parameter pointer dcl 33 set ref 91 96* 205* 221 224 276 279 357 360 388 391 401 404 418 421 425* P_info_ptr parameter pointer dcl 39 ref 221 226 276 289 296 P_miip parameter pointer dcl 37 ref 91 95 P_order parameter char packed unaligned dcl 40 ref 221 225 276 280 addr builtin function dcl 87 ref 98 154 161 172 176 177 181 182 184 186 322 area 000162 stack reference condition dcl 79 ref 124 binary builtin function dcl 87 ref 488 bit_arrays 67 based structure level 2 dcl 3-10 channel_manager$control 000050 constant entry external dcl 12-13 ref 237 263 341 406 channels 1 based structure array level 2 dcl 7-10 cleanup 000170 stack reference condition dcl 79 ref 121 clock builtin function dcl 87 ref 235 code 000100 automatic fixed bin(35,0) dcl 46 set ref 227* 237* 246* 249* 254* 263* 268* 270 281* 289* 292* 298* 341* 343 349* 352 configuration_data 2 based structure level 2 in structure "hasp_load_data" dcl 1-7 in procedure "priv_hasp_mpx" ref 302 configuration_data 11 based structure level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 302* console_hste_idx 112 based fixed bin(17,0) level 2 dcl 3-10 set ref 164* 371 371* current_meters 7 based structure level 2 dcl 4-6 set ref 261* currentsize builtin function dcl 87 ref 449 449 device_number 000157 automatic fixed bin(17,0) dcl 61 set ref 167 169 181 482* 488* 489 489 502 505 509 512 515 519 522 525 device_type 000156 automatic fixed bin(17,0) dcl 61 in procedure "priv_hasp_mpx" set ref 158 499* 506* 516* 526* device_type 3 based fixed bin(17,0) level 2 in structure "hste" dcl 3-99 in procedure "priv_hasp_mpx" set ref 158* 164 167 174 182 184 186 328 330 334 device_wab_idx 7 based fixed bin(17,0) level 2 dcl 3-99 set ref 167* 169* devx 000101 automatic fixed bin(17,0) dcl 48 in procedure "priv_hasp_mpx" set ref 94* 130 131 devx 10 based fixed bin(17,0) level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 131* 237* 263* 341* 406* devx 14 based fixed bin(17,0) array level 3 in structure "hasp_load_data" dcl 1-7 in procedure "priv_hasp_mpx" ref 325 devx 5 based fixed bin(17,0) level 2 in structure "hste" dcl 3-99 in procedure "priv_hasp_mpx" set ref 159* 161 325 devx 11 based fixed bin(17,0) array level 3 in structure "mux_init_info" dcl 7-10 in procedure "priv_hasp_mpx" ref 159 dialup_info 000222 automatic structure level 1 dcl 11-30 direction 4 based fixed bin(17,0) level 2 dcl 3-99 set ref 328* 330* 333* 334* 337* error_table_$action_not_performed 000014 external static fixed bin(35,0) dcl 74 ref 292 362 error_table_$bad_channel 000016 external static fixed bin(35,0) dcl 74 ref 216 error_table_$bad_mpx_load_data 000020 external static fixed bin(35,0) dcl 74 ref 298 error_table_$bigarg 000022 external static fixed bin(35,0) dcl 74 ref 105 error_table_$noalloc 000024 external static fixed bin(35,0) dcl 74 ref 111 error_table_$null_info_ptr 000026 external static fixed bin(35,0) dcl 74 ref 246 289 error_table_$undefined_order_request 000030 external static fixed bin(35,0) dcl 74 ref 268 349 error_table_$unimplemented_version 000032 external static fixed bin(35,0) dcl 74 ref 249 254 event_channel based fixed bin(71,0) level 2 dcl 1-7 ref 305 first_bufferp 42 based pointer level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 310* first_bufferp 46 based pointer level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 310* first_bufferp 54 based pointer level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 310* flags 70 based structure level 2 dcl 3-10 found_console 000125 automatic bit(1) dcl 56 set ref 143* 197 495 498* found_printers 000136 automatic bit(1) array dcl 56 set ref 144* 509 515* 522 found_punches 000146 automatic bit(1) array dcl 56 set ref 144* 512 519 525* found_readers 000126 automatic bit(1) array dcl 56 set ref 144* 502 505* get_comm_meters_info based structure level 1 dcl 14-8 hasp_configuration_data based structure level 1 dcl 1-30 hasp_load_data based structure level 1 dcl 1-7 hasp_mpx$crash 000040 constant entry external dcl 83 ref 409 hasp_mpx$dialup 000042 constant entry external dcl 84 ref 371 377 hasp_mpx$system_initialize 000044 constant entry external dcl 85 ref 201 hasp_mpx_meters based structure level 1 dcl 4-21 set ref 135 135 136* 236* 262 441 441 hasp_mpx_meters_data based structure level 1 dcl 4-6 hasp_rcb_byte based structure level 1 packed packed unaligned dcl 6-6 hasp_subchannel_meters based structure level 1 dcl 5-22 set ref 193 193 194* 445 445 hc_fast_lock based structure level 1 dcl 9-10 hld_ptr 000176 automatic pointer dcl 1-17 set ref 296* 298 302 305 325 hmd based structure level 1 dcl 3-10 set ref 109 109 449 449 hmd_n_subchannels 000202 automatic fixed bin(17,0) dcl 3-76 set ref 103* 104 109 109 119 hmd_ptr 000200 automatic pointer dcl 3-75 set ref 101* 109 109 109* 110 116 116 119 130 131 133 135 136 141 148 154 164 205 224* 235 236 236 237 258 259 260 261 262 263 279* 292 298 302 304 305 307 307 310 310 310 310 310 310 310 310 310 310 316 316 318 319 321 322 330 334 341 343 360* 362 367 368 369 370 371 371 371 371* 371 375 377 377* 391* 393 393 404* 406 406 409* 421* 439 441 441 444 445 445 449 449 449* hmm_ptr automatic pointer dcl 4-35 ref 135 135 441 441 hmmd_ptr 000206 automatic pointer dcl 4-14 set ref 253* 254 254 258 259 260 261 262 hsm_ptr automatic pointer dcl 5-32 ref 193 193 445 445 hste based structure level 1 dcl 3-99 hste_ptr 000204 automatic pointer dcl 3-135 set ref 154* 156 157 158 159 161 164 167 167 169 174 182 184 186 191 193 194 322* 323 325 328 328 330 330 333 334 334 337 idle_interval 6 based fixed bin(17,0) level 2 dcl 4-6 set ref 260* idx 000161 automatic fixed bin(17,0) dcl 66 in procedure "priv_hasp_mpx" set ref 148* 150 154 157 159 162 164* 321* 322 325* 375* 377 377* idx 000100 automatic fixed bin(17,0) dcl 437 in procedure "release_mpx_storage" set ref 444* 445 445* in 2 based structure level 2 in structure "saved_meters" dcl 10-68 in procedure "priv_hasp_mpx" in 10 based structure level 3 in structure "lcte" dcl 10-20 in procedure "priv_hasp_mpx" in 30 based structure array level 4 in structure "lct" dcl 10-11 in procedure "priv_hasp_mpx" in 2 based structure level 3 in structure "logical_chan_meters" dcl 14-17 in procedure "priv_hasp_mpx" in 26 based structure level 3 in structure "logical_chan_meters" dcl 14-17 in procedure "priv_hasp_mpx" info_ptr 000102 automatic pointer dcl 50 set ref 226* 237* 246 249 253 263* initialized 000010 internal static bit(1) initial dcl 68 set ref 200 202* input 42 based structure level 2 dcl 3-10 input_available 70(03) based bit(1) level 3 packed packed unaligned dcl 3-10 set ref 307* last_bufferp 44 based pointer level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 310* last_bufferp 56 based pointer level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 310* last_bufferp 50 based pointer level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 310* lcnt based structure level 1 dcl 10-65 lcnt_ptr 2 based pointer level 2 dcl 10-11 ref 100 lcntp 000220 automatic pointer dcl 10-63 set ref 100* 130 lct based structure level 1 dcl 10-11 lct_ptr 6 based pointer level 2 dcl 8-35 ref 99 lcte based structure level 1 dcl 10-20 lcte_array 20 based structure array level 2 dcl 10-11 set ref 161 lctep 000216 automatic pointer dcl 10-8 set ref 161* 162 lctp 000214 automatic pointer dcl 10-7 set ref 99* 100 161 length builtin function dcl 87 ref 141 464 479 485 loader_event_channel 24 based fixed bin(71,0) level 2 dcl 3-10 set ref 305* loader_process_id 22 based bit(36) level 2 dcl 3-10 set ref 304* loopback 46 based structure level 2 dcl 3-10 loopback_block_chain_stack 64 based pointer level 2 dcl 3-10 set ref 310* major_channel_info 3 based structure level 2 dcl 10-20 meters 37 based structure level 2 in structure "hste" dcl 3-99 in procedure "priv_hasp_mpx" set ref 323* meters 26 based structure array level 3 in structure "lct" dcl 10-11 in procedure "priv_hasp_mpx" meters 6 based structure level 2 in structure "lcte" dcl 10-20 in procedure "priv_hasp_mpx" meters 76 based structure level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 236 261 319* miip 000210 automatic pointer dcl 7-6 set ref 95* 103 150 159 minor_state 31 based fixed bin(17,0) level 2 dcl 3-10 ref 371 minor_state_stack 62 based pointer level 2 dcl 3-10 set ref 310* mod builtin function dcl 87 ref 181 mux_init_info based structure level 1 dcl 7-10 n_subchannels 13 based fixed bin(17,0) level 2 in structure "hasp_load_data" dcl 1-7 in procedure "priv_hasp_mpx" ref 298 n_subchannels 113 based fixed bin(17,0) level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 116 119* 148 298 321 375 444 449 449 name based char(8) level 2 in structure "hste" packed packed unaligned dcl 3-99 in procedure "priv_hasp_mpx" set ref 156* name 1 based char(32) array level 3 in structure "mux_init_info" packed packed unaligned dcl 7-10 in procedure "priv_hasp_mpx" ref 150 name based char(32) level 2 in structure "hmd" packed packed unaligned dcl 3-10 in procedure "priv_hasp_mpx" set ref 130* 141 name_lth 000246 automatic fixed bin(17,0) dcl 462 set ref 464* 465 465 469 469 name_part 000242 automatic varying char(3) dcl 461 set ref 467* 473 473 473 473 479 495 502 509 519 names based char(32) array level 2 packed packed unaligned dcl 10-65 ref 130 no_channels based fixed bin(17,0) level 2 dcl 7-10 ref 103 not_eob 0(01) based bit(1) level 2 packed packed unaligned dcl 64 set ref 172* null builtin function dcl 87 ref 96 101 110 116 246 254 289 310 341 341 406 406 425 439 441 445 number_part 000244 automatic varying char(3) dcl 461 set ref 469* 471* 479 485 487 488 order 000104 automatic char(32) packed unaligned dcl 51 set ref 225* 230 237* 241 263* 280* 283 output_block 52 based structure level 2 dcl 3-10 output_chain_ptr 40 based pointer level 2 dcl 3-10 set ref 310* output_wabs 67(09) based bit(1) array level 3 packed packed unaligned dcl 3-10 set ref 370* pds$processid 000012 external static bit(36) dcl 72 ref 304 rcb 6 based char(1) level 2 in structure "hste" packed packed unaligned dcl 3-99 in procedure "priv_hasp_mpx" set ref 191* rcb based structure level 1 packed packed unaligned dcl 64 in procedure "priv_hasp_mpx" rcb_char 000160 automatic char(1) packed unaligned dcl 63 set ref 171* 172 176 177 181 182 184 186 191 rtrim builtin function dcl 87 ref 141 464 saved_meters 20 based structure level 2 dcl 4-6 set ref 262* saved_meters_ptr 46 based pointer level 2 in structure "hste" dcl 3-99 in procedure "priv_hasp_mpx" set ref 193* 194 saved_meters_ptr 162 based pointer array level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 116* 445 445* saved_meters_ptr 110 based pointer level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 116* 135* 136 236 262 441 441* send_output 70(02) based bit(1) level 3 packed packed unaligned dcl 3-10 set ref 307* signon_data_ptr 60 based pointer level 2 dcl 3-10 set ref 310* size builtin function dcl 87 ref 109 109 135 135 193 193 441 441 445 445 start_subchannel_name_idx 000124 automatic fixed bin(17,0) dcl 54 set ref 141* 150 state 30 based fixed bin(17,0) level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 133* 292 343* 362 367* 393 393* 406 state 126 based fixed bin(17,0) array level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 371 377 stream 0(02) based fixed bin(3,0) level 2 packed packed unsigned unaligned dcl 64 set ref 176* 181* subchan_ptr 2 based pointer level 2 dcl 14-8 ref 253 subchannel 3(18) based fixed bin(17,0) level 3 packed packed unaligned dcl 10-20 set ref 162* subchannel_idx 2 based fixed bin(17,0) level 2 in structure "hste" dcl 3-99 in procedure "priv_hasp_mpx" set ref 157* subchannel_idx 52 based fixed bin(17,0) level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 316* subchannel_name 000114 automatic char(32) packed unaligned dcl 53 set ref 150* 156 464 467 469 subchannels 114 based structure array level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 154 322 subchannels 14 based structure array level 2 in structure "hasp_load_data" dcl 1-7 in procedure "priv_hasp_mpx" subchannels_for_output 36 based structure level 2 dcl 3-10 set ref 318* substr builtin function dcl 87 ref 150 467 469 suspend_all_input 70(01) based bit(1) level 3 packed packed unaligned dcl 3-10 set ref 368* suspend_all_output 70 based bit(1) level 3 packed packed unaligned dcl 3-10 set ref 369* tally 53 based fixed bin(17,0) level 3 dcl 3-10 set ref 316* time_meters_copied 4 based fixed bin(71,0) level 2 in structure "hasp_mpx_meters_data" dcl 4-6 in procedure "priv_hasp_mpx" set ref 259* time_meters_copied 74 based fixed bin(71,0) level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 235* 259 time_mpx_booted 72 based fixed bin(71,0) level 2 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" ref 258 time_mpx_booted 2 based fixed bin(71,0) level 2 in structure "hasp_mpx_meters_data" dcl 4-6 in procedure "priv_hasp_mpx" set ref 258* transmit_timeout 17 based fixed bin(17,0) level 3 dcl 3-10 set ref 260 tty_area_manager$allocate 000034 constant entry external dcl 81 ref 135 193 tty_area_manager$free 000036 constant entry external dcl 82 ref 441 445 tty_buf based structure level 1 dcl 8-35 tty_buf$ 000046 external static fixed bin(17,0) dcl 8-19 set ref 98 tty_space_man$free_space 000054 constant entry external dcl 13-12 ref 449 tty_space_man$get_space 000052 constant entry external dcl 13-10 ref 109 ttybp 000212 automatic pointer dcl 8-19 set ref 98* 99 type 11 based fixed bin(17,0) level 3 in structure "hmd" dcl 3-10 in procedure "priv_hasp_mpx" set ref 330 334 type 0(05) based fixed bin(4,0) level 2 in structure "rcb" packed packed unsigned unaligned dcl 64 in procedure "priv_hasp_mpx" set ref 177* 182* 184* 186* verify builtin function dcl 87 ref 487 version based fixed bin(17,0) level 2 in structure "hasp_mpx_meters_data" dcl 4-6 in procedure "priv_hasp_mpx" ref 254 version based fixed bin(17,0) level 2 in structure "get_comm_meters_info" dcl 14-8 in procedure "priv_hasp_mpx" ref 249 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACCEPT_INPUT internal static fixed bin(17,0) initial dcl 11-15 ACKNOWLEDGE_ECHNEGO_INIT internal static fixed bin(17,0) initial dcl 11-22 ACKNOWLEDGE_ECHNEGO_STOP internal static fixed bin(17,0) initial dcl 11-23 CRASH internal static fixed bin(17,0) initial dcl 11-12 DEFAULT_HASP_CONFIGURATION_DATA internal static structure level 1 dcl 1-65 DIALUP internal static fixed bin(17,0) initial dcl 11-10 DIAL_STATUS internal static fixed bin(17,0) initial dcl 11-19 FNP_DUMP_PATCH_EVENT internal static fixed bin(17,0) initial dcl 8-31 FNP_METER_EVENT internal static fixed bin(17,0) initial dcl 8-32 HANGUP internal static fixed bin(17,0) initial dcl 11-11 HASP_DEVICE_NAMES internal static char(32) initial array packed unaligned dcl 2-15 HASP_MAX_DEVICE_RECORD_LTHS internal static fixed bin(21,0) initial array dcl 2-20 HASP_MAX_MAX_BLOCK_SIZE internal static fixed bin(17,0) initial dcl 1-58 HASP_MIN_MAX_BLOCK_SIZE internal static fixed bin(17,0) initial dcl 1-58 HASP_MPX_DOWN internal static fixed bin(71,0) initial dcl 1-22 HASP_MPX_MASKED internal static fixed bin(71,0) initial dcl 1-22 HASP_MPX_UP internal static fixed bin(71,0) initial dcl 1-22 HASP_RCB_STREAM_BAD_BCB internal static fixed bin(3,0) initial unsigned dcl 6-23 HASP_RCB_STREAM_CONTROL internal static fixed bin(3,0) initial unsigned dcl 6-23 HASP_RCB_STREAM_RTS internal static fixed bin(3,0) initial unsigned dcl 6-23 HASP_RCB_STREAM_RTS_ACK internal static fixed bin(3,0) initial unsigned dcl 6-23 HASP_RCB_TYPE_CONSOLE_INPUT internal static fixed bin(4,0) initial unsigned dcl 6-15 HASP_RCB_TYPE_CONSOLE_OUTPUT internal static fixed bin(4,0) initial unsigned dcl 6-15 HASP_RCB_TYPE_CONTROL internal static fixed bin(4,0) initial unsigned dcl 6-15 HASP_SUBCHANNEL_METERS_DATA_VERSION_1 internal static fixed bin(17,0) initial dcl 5-17 HMD_HANGUP_LINE internal static fixed bin(17,0) initial dcl 3-84 HMD_LOOPBACK internal static fixed bin(17,0) initial dcl 3-84 HMD_REPROCESS internal static fixed bin(17,0) initial dcl 3-84 HMD_SEND_BAD_BCB_BLOCK internal static fixed bin(17,0) initial dcl 3-84 HMD_SEND_SIGNON internal static fixed bin(17,0) initial dcl 3-84 HMD_SEND_SYNC_BLOCK internal static fixed bin(17,0) initial dcl 3-84 HMD_WAIT_SIGNON_RESPONSE internal static fixed bin(17,0) initial dcl 3-84 HSTE_DIALED internal static fixed bin(17,0) initial dcl 3-137 HSTE_HUNGUP internal static fixed bin(17,0) initial dcl 3-137 HSTE_NORMAL internal static fixed bin(17,0) initial dcl 3-143 HSTE_SEND_RTS internal static fixed bin(17,0) initial dcl 3-143 HSTE_WAIT_RTS_ACK internal static fixed bin(17,0) initial dcl 3-143 INPUT internal static bit(1) initial packed unaligned dcl 13-20 INPUT_AVAILABLE internal static fixed bin(17,0) initial dcl 11-14 INPUT_REJECTED internal static fixed bin(17,0) initial dcl 11-16 LINE_STATUS internal static fixed bin(17,0) initial dcl 11-18 MASKED internal static fixed bin(17,0) initial dcl 11-26 OUTPUT internal static bit(1) initial packed unaligned dcl 13-21 QUIT internal static fixed bin(17,0) initial dcl 11-17 SEND_OUTPUT internal static fixed bin(17,0) initial dcl 11-13 SPACE_AVAILABLE internal static fixed bin(17,0) initial dcl 11-21 TIMER internal static fixed bin(17,0) initial dcl 11-24 TTY_AREA_LOCK_EVENT internal static bit(36) initial dcl 8-33 USER_INTERRUPT internal static fixed bin(17,0) initial dcl 11-25 WRU_TIMEOUT internal static fixed bin(17,0) initial dcl 11-20 abs_buf_limit internal static fixed bin(18,0) initial dcl 8-19 bsizec internal static fixed bin(17,0) initial dcl 8-28 buf_per_second internal static fixed bin(17,0) initial dcl 8-29 channel_manager$check_modes 000000 constant entry external dcl 12-19 channel_manager$get_modes 000000 constant entry external dcl 12-22 channel_manager$interrupt 000000 constant entry external dcl 12-25 channel_manager$interrupt_later 000000 constant entry external dcl 12-28 channel_manager$queued_interrupt 000000 constant entry external dcl 12-31 channel_manager$read 000000 constant entry external dcl 12-7 channel_manager$set_modes 000000 constant entry external dcl 12-16 channel_manager$write 000000 constant entry external dcl 12-10 hasp_load_data_n_subchannels automatic fixed bin(17,0) dcl 1-16 hasp_rcb_byte_ptr automatic pointer dcl 6-13 hasp_subchannel_meters_data based structure level 1 dcl 5-6 hmd_signon_data based structure level 1 dcl 3-157 hsd_ptr automatic pointer dcl 3-163 hsmd_ptr automatic pointer dcl 5-15 input_bpart internal static fixed bin(18,0) initial dcl 8-19 interrupt_info automatic bit(72) dcl 11-28 lbcse based structure level 1 dcl 3-182 lbcse_ptr automatic pointer dcl 3-188 lct_size automatic fixed bin(17,0) dcl 10-9 lock_ptr automatic pointer dcl 9-9 logical_chan_meters based structure level 1 dcl 14-17 mii_chan_count automatic fixed bin(17,0) dcl 7-7 msse based structure level 1 dcl 3-168 msse_ptr automatic pointer dcl 3-177 output_bpart internal static fixed bin(18,0) initial dcl 8-19 qblock_size internal static fixed bin(17,0) initial dcl 8-27 rtx_info automatic structure level 1 dcl 11-38 saved_meters based structure level 1 dcl 10-68 timer_info automatic structure level 1 dcl 11-50 tty_ev internal static fixed bin(17,0) initial dcl 8-19 tty_space_man$free_buffer 000000 constant entry external dcl 13-14 tty_space_man$free_chain 000000 constant entry external dcl 13-16 tty_space_man$get_buffer 000000 constant entry external dcl 13-13 tty_space_man$get_chain 000000 constant entry external dcl 13-15 tty_space_man$get_perm_space 000000 constant entry external dcl 13-11 tty_space_man$needs_space 000000 constant entry external dcl 13-18 tty_space_man$switch_chain 000000 constant entry external dcl 13-17 NAMES DECLARED BY EXPLICIT CONTEXT. BAD_CHANNEL 000560 constant label dcl 213 ref 186 197 465 473 479 485 487 489 495 502 509 512 519 522 BAD_LOAD_DATA 001072 constant label dcl 298 set ref 325 334 INITIALIZE_FAILS_NOALLOC 000133 constant label dcl 111 ref 127 hpriv_control 001007 constant entry external dcl 276 init_multiplexer 000053 constant entry external dcl 91 parse_subchannel_name 001665 constant entry internal dcl 458 ref 152 priv_control 000575 constant entry external dcl 221 priv_hasp_mpx 000040 constant entry external dcl 25 release_mpx_storage 001555 constant entry internal dcl 434 ref 121 126 213 423 shutdown 001442 constant entry external dcl 401 start 001302 constant entry external dcl 357 stop 001414 constant entry external dcl 388 terminate_multiplexer 001527 constant entry external dcl 418 NAME DECLARED BY CONTEXT OR IMPLICATION. string builtin function ref 370 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2654 2732 2315 2664 Length 3452 2315 56 504 337 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME priv_hasp_mpx 362 external procedure is an external procedure. on unit on line 121 64 on unit on unit on line 124 64 on unit release_mpx_storage 74 internal procedure is called by several nonquick procedures. parse_subchannel_name internal procedure shares stack frame of external procedure priv_hasp_mpx. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 initialized priv_hasp_mpx STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME priv_hasp_mpx 000100 code priv_hasp_mpx 000101 devx priv_hasp_mpx 000102 info_ptr priv_hasp_mpx 000104 order priv_hasp_mpx 000114 subchannel_name priv_hasp_mpx 000124 start_subchannel_name_idx priv_hasp_mpx 000125 found_console priv_hasp_mpx 000126 found_readers priv_hasp_mpx 000136 found_printers priv_hasp_mpx 000146 found_punches priv_hasp_mpx 000156 device_type priv_hasp_mpx 000157 device_number priv_hasp_mpx 000160 rcb_char priv_hasp_mpx 000161 idx priv_hasp_mpx 000176 hld_ptr priv_hasp_mpx 000200 hmd_ptr priv_hasp_mpx 000202 hmd_n_subchannels priv_hasp_mpx 000204 hste_ptr priv_hasp_mpx 000206 hmmd_ptr priv_hasp_mpx 000210 miip priv_hasp_mpx 000212 ttybp priv_hasp_mpx 000214 lctp priv_hasp_mpx 000216 lctep priv_hasp_mpx 000220 lcntp priv_hasp_mpx 000222 dialup_info priv_hasp_mpx 000242 name_part parse_subchannel_name 000244 number_part parse_subchannel_name 000246 name_lth parse_subchannel_name release_mpx_storage 000100 idx release_mpx_storage THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 mdfx1 enable_op ext_entry ext_entry_desc int_entry any_to_any_truncate_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. channel_manager$control hasp_mpx$crash hasp_mpx$dialup hasp_mpx$system_initialize tty_area_manager$allocate tty_area_manager$free tty_space_man$free_space tty_space_man$get_space THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$bad_channel error_table_$bad_mpx_load_data error_table_$bigarg error_table_$noalloc error_table_$null_info_ptr error_table_$undefined_order_request error_table_$unimplemented_version pds$processid tty_buf$ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 25 000037 28 000045 91 000046 94 000065 95 000070 96 000073 98 000075 99 000100 100 000102 101 000104 103 000105 104 000107 105 000111 106 000113 109 000114 110 000127 111 000133 113 000136 116 000137 119 000157 121 000161 124 000203 126 000217 127 000224 130 000227 131 000237 133 000241 135 000243 136 000256 141 000271 143 000304 144 000305 148 000336 150 000347 152 000365 154 000366 156 000373 157 000376 158 000400 159 000402 161 000406 162 000412 164 000414 167 000422 169 000431 171 000433 172 000435 174 000437 176 000444 177 000450 178 000454 181 000455 182 000464 184 000474 186 000503 191 000511 193 000513 194 000526 195 000536 197 000540 200 000542 201 000545 202 000551 205 000554 206 000556 208 000557 213 000560 216 000564 217 000567 221 000570 224 000615 225 000620 226 000626 227 000631 230 000632 235 000636 236 000641 237 000645 238 000672 241 000673 246 000677 249 000707 253 000716 254 000720 258 000733 259 000736 260 000740 261 000742 262 000745 263 000751 266 000776 268 000777 270 001002 272 001004 276 001005 279 001027 280 001032 281 001040 283 001041 289 001045 292 001055 296 001064 298 001067 302 001076 304 001101 305 001104 307 001106 310 001112 316 001125 318 001127 319 001131 321 001142 322 001151 323 001155 325 001163 328 001171 330 001177 333 001211 334 001214 337 001224 339 001226 341 001230 343 001262 347 001267 349 001270 352 001273 353 001275 357 001276 360 001314 362 001317 366 001326 367 001327 368 001331 369 001333 370 001335 371 001337 374 001360 375 001361 377 001371 379 001407 382 001411 388 001412 391 001426 393 001431 396 001436 397 001437 401 001440 404 001454 406 001457 409 001514 411 001523 412 001524 418 001525 421 001541 423 001544 425 001550 426 001552 428 001553 434 001554 439 001562 441 001567 444 001606 445 001617 447 001643 449 001645 452 001664 458 001665 464 001666 465 001700 467 001704 469 001711 471 001725 473 001726 479 001752 482 001761 485 001763 487 001765 488 002000 489 002010 495 002015 498 002024 499 002026 500 002030 502 002031 505 002041 506 002043 507 002045 509 002046 512 002056 515 002062 516 002064 517 002066 519 002067 522 002077 525 002103 526 002105 529 002107 ----------------------------------------------------------- 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