COMPILATION LISTING OF SEGMENT console_server Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 07/18/86 1353.2 mst Fri Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 12 /****^ HISTORY COMMENTS: 13* 1) change(86-06-04,Hartogs), approve(86-06-04,MCR7383), 14* audit(86-06-05,Coppola), install(86-07-18,MR12.0-1098): 15* Changed to user version constant in rcp_device_info.incl.pl1. 16* END HISTORY COMMENTS */ 17 18 19 /* CONSOLE_SERVER - Program to manage a console channel as a login device. */ 20 /* Written May 1980 by Larry Johnson as his last official act. */ 21 22 console_server: proc; 23 24 /* Automatic */ 25 26 dcl code fixed bin (35); 27 dcl argp ptr; 28 dcl argl fixed bin; 29 dcl console_infop ptr; 30 dcl consp ptr; 31 dcl n_consoles fixed bin; 32 dcl debug_sw bit (1); 33 dcl forceread_sw bit (1); 34 dcl argno fixed bin; 35 dcl n_args fixed bin; 36 dcl arg_list_ptr ptr; 37 dcl prompt_string char (16); 38 dcl prompt_string_length fixed bin (21); 39 dcl more_args bit (1); 40 dcl areap ptr; 41 dcl processid bit (36); 42 dcl i fixed bin; 43 dcl event_wait_type_ptr ptr; 44 dcl dial_manager_channel fixed bin (71); /* Event channel for dealing with dial_manager */ 45 dcl comment char (128); 46 dcl rcp_state fixed bin; 47 dcl dmap ptr; /* Pointer to dial_manager_arg structure */ 48 dcl io_module char (32); 49 dcl device char (32); 50 dcl input_len fixed bin (21); 51 dcl xmit fixed bin (21); 52 53 dcl 1 auto_event_wait_info like event_wait_info aligned automatic; 54 dcl 1 auto_dial_manager_arg like dial_manager_arg aligned automatic; 55 dcl 1 get_channel_info aligned, /* For get_channel_info order */ 56 2 version fixed bin, 57 2 devx fixed bin, 58 2 channel_name char (32); 59 dcl 1 dial_status aligned, /* Flags set by convert dial message */ 60 2 dialed_up bit (1) unaligned, 61 2 hung_up bit (1) unaligned, 62 2 control bit (1) unaligned, 63 2 pad bit (33) unaligned; 64 dcl 1 console_info aligned, /* Info to control N consoles */ 65 2 console (8) like cons; /* Can control 8 pairs */ 66 67 dcl 1 greeting unal, 68 2 cr1 char (1), 69 2 nl1 char (1), 70 2 pad1 (4) char (1), 71 2 msg1 char (24) init ("Console server ready at "), 72 2 msg2 char (24), 73 2 cr2 char (1), 74 2 nl2 char (1), 75 2 pad2 (4) char (1); 76 77 dcl 1 crnl unal, 78 2 cr char (1), 79 2 nl char (1), 80 2 pad (4) char (1); 81 82 /* Constants */ 83 84 dcl name char (14) int static options (constant) init ("console_server"); 85 dcl foo char (4) int static options (constant) init ("foo 86 "); 87 dcl CR_INIT bit (9) int static options (constant) init ("015"b3); 88 dcl CR char (1) based (addr (CR_INIT)); 89 dcl NL_INIT bit (9) int static options (constant) init ("012"b3); 90 dcl NL char (1) based (addr (NL_INIT)); 91 dcl NUL_INIT bit (9) int static options (constant) init ("000"b3); 92 dcl NUL char (1) based (addr (NUL_INIT)); 93 dcl ESC_INIT bit (9) int static options (constant) init ("033"b3); 94 dcl ESC char (1) based (addr (ESC_INIT)); 95 96 dcl WRITE_ASCII bit (6) int static options (constant) init ("33"b3); 97 dcl READ_ASCII bit (6) int static options (constant) init ("23"b3); 98 99 /* Based */ 100 101 dcl arg char (argl) based (argp); 102 dcl free_area area based (areap); 103 104 dcl 1 cons aligned based (consp), /* Info for a single console */ 105 2 console_name char (32), /* Name of console device */ 106 2 tty_name char (32), /* Name of tty device */ 107 2 rcp_id bit (36) aligned, /* Rcp id for console attachment */ 108 2 ioi_index fixed bin, /* Ioi index for console */ 109 2 iocbp ptr, /* IOCB pointer for tty_ switch */ 110 2 tty_devx fixed bin, /* Ring 0's tty devx */ 111 2 state_index fixed bin, /* Current state of console attachment */ 112 /* 1 = not attached, 2 = in progress, 3 = attached */ 113 2 io_state fixed bin, /* Type of I/O in progress */ 114 2 rcp_channel fixed bin (71), /* Event channel for ioi/rcp */ 115 2 tty_channel fixed bin (71), /* Event channel for tty_ */ 116 2 rcp_device_info like device_info, /* Copy of rcp device info structure for attachment */ 117 2 max_work fixed bin (19), /* Max workspace size */ 118 2 max_time fixed bin (71), /* Max connect time */ 119 2 workspacep ptr, /* Address of ioi workspace */ 120 2 tty_buffer char (256), /* Tty input done into here */ 121 2 tty_buffer_used fixed bin (21), 122 2 tty_buffer_left fixed bin (21), 123 2 suppress_next_read bit (1), 124 2 tty_hungup bit (1); 125 126 /* Settings for cons.io_state */ 127 128 dcl (IO_STATE_GREET init (1), /* Writing greeting */ 129 IO_STATE_INIT init (2), /* Waiting for initial request from console */ 130 IO_STATE_DIAL init (3), /* Waiting for sty channel dial to complete */ 131 IO_STATE_IDLE init (4), /* Every thing attached, but console idle */ 132 IO_STATE_WRITE init (5), /* Write in progress */ 133 IO_STATE_READ init (6), /* Read in progress */ 134 IO_STATE_NL init (7) /* Writing NL after input */ 135 ) fixed bin int static options (constant); 136 137 dcl 1 ioi_work aligned based (cons.workspacep), /* The ioi workspace */ 138 2 status_queue like istat, 139 2 pcw bit (36), 140 2 dcw1 bit (36), 141 2 idcw bit (36), 142 2 dcw2 bit (36), 143 2 write_buffer char (512), 144 2 read_buffer char (512); 145 146 dcl 1 event_wait_type (event_wait_list_n_channels) aligned based (event_wait_type_ptr), 147 2 channel_type fixed bin, /* 1 = dial_manager, 2 = rcp-/ioi, 3=tty */ 148 2 channel_index fixed bin; /* Index into console array */ 149 150 /* External */ 151 152 dcl analyze_ioi_istat_ entry (ptr, ptr, char (*) var); 153 dcl com_err_ entry options (variable); 154 dcl convert_dial_message_ entry (fixed bin (71), char (*), char (*), fixed bin, 1 like dial_status aligned, fixed bin (35)); 155 dcl convert_ipc_code_ entry (fixed bin (35)); 156 dcl cu_$arg_count entry (fixed bin); 157 dcl cu_$arg_list_ptr entry (ptr); 158 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin, fixed bin (35), ptr); 159 dcl date_time_ entry (fixed bin (71), char (*)); 160 dcl dial_manager_$dial_out entry (ptr, fixed bin (35)); 161 dcl dial_manager_$release_channel entry (ptr, fixed bin (35)); 162 dcl get_process_id_ entry returns (bit (36)); 163 dcl get_system_free_area_ entry returns (ptr); 164 dcl hcs_$tty_read entry (fixed bin, ptr, fixed bin (21), fixed bin (21), fixed bin (21), fixed bin, fixed bin (35)); 165 dcl hcs_$tty_write entry (fixed bin, ptr, fixed bin (21), fixed bin (21), fixed bin (21), fixed bin, fixed bin (35)); 166 dcl hcs_$wakeup entry (bit (36), fixed bin (71), fixed bin (71), fixed bin (35)); 167 dcl ioa_ entry options (variable); 168 dcl ioi_$connect entry (fixed bin, fixed bin, fixed bin (35)); 169 dcl ioi_$connect_pcw entry (fixed bin, fixed bin, bit (36), fixed bin (35)); 170 dcl ioi_$set_status entry (fixed bin, fixed bin (18), fixed bin (8), fixed bin (35)); 171 dcl ioi_$workspace entry (fixed bin, ptr, fixed bin (18), fixed bin (35)); 172 dcl iox_$attach_name entry (char (*), ptr, char (*), ptr, fixed bin (35)); 173 dcl iox_$close entry (ptr, fixed bin (35)); 174 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 175 dcl iox_$detach_iocb entry (ptr, fixed bin (35)); 176 dcl iox_$open entry (ptr, fixed bin, bit (1) aligned, fixed bin (35)); 177 dcl iox_$put_chars entry (ptr, ptr, fixed bin (21), fixed bin (35)); 178 dcl ipc_$block entry (ptr, ptr, fixed bin (35)); 179 dcl ipc_$create_ev_chn entry (fixed bin (71), fixed bin (35)); 180 dcl ipc_$delete_ev_chn entry (fixed bin (71), fixed bin (35)); 181 dcl rcp_$attach entry (char (*), ptr, fixed bin (71), char (*), bit (36) aligned, fixed bin (35)); 182 dcl rcp_$check_attach entry (bit (36) aligned, ptr, char (*), fixed bin, fixed bin (19), fixed bin (71), fixed bin, fixed bin (35)); 183 dcl rcp_$detach entry (bit (36) aligned, bit (*), fixed bin, char (*), fixed bin (35)); 184 dcl timer_manager_$sleep entry (fixed bin (71), bit (2)); 185 186 dcl error_table_$noarg ext fixed bin (35); 187 dcl error_table_$badopt ext fixed bin (35); 188 dcl opc_status_table_$opc_status_table_ ext; 189 190 dcl cleanup condition; 191 192 dcl (addr, bin, bit, clock, divide, hbound, index, length, low, min, null, rel, reverse, string, substr, unspec) builtin; 193 194 /* Argument processing */ 195 196 call cu_$arg_list_ptr (arg_list_ptr); 197 call cu_$arg_count (n_args); 198 199 n_consoles = 0; 200 event_wait_list_ptr = null (); 201 event_wait_type_ptr = null (); 202 dial_manager_channel = 0; 203 204 call scan_args; 205 206 on cleanup call clean_up; 207 208 /* Set up event channels and wait list */ 209 210 processid = get_process_id_ (); 211 event_wait_list_n_channels = 2 * n_consoles + 1; 212 areap = get_system_free_area_ (); 213 allocate event_wait_list in (free_area); 214 event_wait_list.n_channels = 0; 215 216 allocate event_wait_type in (free_area); 217 218 dial_manager_channel = get_evchn (); 219 call store_chan (dial_manager_channel, 1, 0); 220 do i = 1 to n_consoles; 221 consp = addr (console_info.console (i)); 222 cons.rcp_channel = get_evchn (); 223 call store_chan (cons.rcp_channel, 2, i); 224 cons.state_index = 1; 225 call hcs_$wakeup (processid, cons.rcp_channel, (0), code); /* Wakeup to kick things off */ 226 end; 227 228 /* The program should, from now on, spend most of its time, here, blocked */ 229 230 event_wait_info_ptr = addr (auto_event_wait_info); 231 block: call ipc_$block (event_wait_list_ptr, event_wait_info_ptr, code); 232 if code ^= 0 then do; 233 call convert_ipc_code_ (code); 234 call com_err_ (code, name, "Unable to block."); 235 go to done; 236 end; 237 238 /* Got a wakeup. branch depending on who it is from/for */ 239 240 go to wakeup_type (event_wait_type.channel_type (event_wait_info.channel_index)); 241 242 wakeup_type (1): 243 go to dial_manager_wakeup; 244 wakeup_type (2): 245 go to rcp_ioi_wakeup; 246 wakeup_type (3): 247 go to tty_wakeup; 248 249 done: call clean_up; 250 return; 251 252 /* Process dial_manager_wakeup */ 253 254 dial_manager_wakeup: 255 call convert_dial_message_ (event_wait_info.message, device, io_module, (0), dial_status, code); 256 if code ^= 0 then do; 257 call com_err_ (code, name, "Bad dial code"); 258 go to done; 259 end; 260 if dial_status.dialed_up then do; 261 if debug_sw then call ioa_ ("^a dialed", device); 262 do i = 1 to n_consoles; 263 consp = addr (console_info.console (i)); 264 if cons.tty_name = device then do; 265 if cons.io_state ^= IO_STATE_DIAL then go to bad_dial; 266 call iox_$attach_name (device, cons.iocbp, "tty_ " || device, null (), code); 267 if code ^= 0 then do; 268 call com_err_ (code, name, "Unable to attach ^a", device); 269 go to done; 270 end; 271 call iox_$open (cons.iocbp, Stream_input_output, "0"b, code); 272 if code ^= 0 then do; 273 call com_err_ (code, name, "Unable to open ^a", device); 274 go to done; 275 end; 276 get_channel_info.version = 1; 277 call iox_$control (cons.iocbp, "get_channel_info", addr (get_channel_info), code); 278 if code ^= 0 then do; 279 call com_err_ (code, name, "Unable to get devx for ^a", device); 280 go to done; 281 end; 282 cons.tty_devx = get_channel_info.devx; 283 call iox_$control (cons.iocbp, "event_info", addr (cons.tty_channel), code); 284 if code ^= 0 then do; 285 call com_err_ (code, name, "Unable to get event channel used for ^a", device); 286 go to done; 287 end; 288 call store_chan (cons.tty_channel, 3, i); 289 cons.io_state = IO_STATE_IDLE; 290 go to tty_read; 291 end; 292 end; 293 bad_dial: call ioa_ ("Ignored dialup for ^a", device); 294 go to block; 295 end; 296 297 else if dial_status.hung_up then do; 298 if debug_sw then call ioa_ ("^a hungup", device); 299 do i = 1 to n_consoles; 300 consp = addr (console_info.console (i)); 301 if cons.tty_name = device then do; 302 if cons.iocbp ^= null then do; 303 call iox_$close (cons.iocbp, code); 304 call iox_$detach_iocb (cons.iocbp, code); 305 call forget_chan (cons.tty_channel); 306 cons.tty_channel = 0; 307 cons.iocbp = null (); 308 end; 309 call reset_tty_buffer; 310 cons.tty_hungup = "0"b; 311 if cons.io_state = IO_STATE_IDLE | cons.io_state = IO_STATE_INIT | cons.io_state = IO_STATE_DIAL then 312 go to prepare_greeting; 313 cons.tty_hungup = "1"b; 314 go to block; 315 end; 316 end; 317 call ioa_ ("Ignored hangup for ^a", device); 318 go to block; 319 end; 320 go to block; 321 322 /* Come here on RCP or IOI wakeups */ 323 324 rcp_ioi_wakeup: 325 consp = addr (console_info.console (event_wait_type.channel_index (event_wait_info.channel_index))); 326 go to rcp_wakeup (cons.state_index); 327 328 /* Console must be attached from RCP */ 329 330 rcp_wakeup (1): 331 device_info_ptr = addr (cons.rcp_device_info); 332 device_info.version_num = DEVICE_INFO_VERSION_1; 333 device_info.usage_time = 0; 334 device_info.wait_time = 0; 335 device_info.system_flag = "0"b; 336 device_info.device_name = cons.console_name; 337 device_info.model = 0; 338 device_info.qualifiers (*) = 0; 339 340 call rcp_$attach ("special", device_info_ptr, cons.rcp_channel, "", cons.rcp_id, code); 341 if code ^= 0 then do; 342 attach_err: call com_err_ (code, name, "Unable to attach ^a.", cons.console_name); 343 go to done; 344 end; 345 cons.state_index = 2; 346 347 348 /* Wakup to complete attachment */ 349 350 rcp_wakeup (2): 351 device_info_ptr = addr (cons.rcp_device_info); 352 call rcp_$check_attach (cons.rcp_id, device_info_ptr, comment, cons.ioi_index, cons.max_work, cons.max_time, 353 rcp_state, code); 354 if rcp_state = 3 then go to attach_err; 355 if rcp_state = 1 then do; /* Short wait */ 356 if comment ^= "" then call ioa_ ("^a: Waiting for attachment of ^a. ^a", name, cons.console_name, comment); 357 go to block; 358 end; 359 if rcp_state = 2 then do; /* Long wait */ 360 call ioa_ ("^a: Long wait for attachment of ^a. ^a", name, cons.console_name, comment); 361 go to block; 362 end; 363 if rcp_state ^= 0 then go to attach_err; /* 0 should be all thats left */ 364 cons.state_index = 3; /* Now attached */ 365 366 call ioi_$workspace (cons.ioi_index, cons.workspacep, 1024, code); 367 if code ^= 0 then do; 368 call com_err_ (code, name, "Unable to get workspace for ^a", cons.console_name); 369 go to done; 370 end; 371 call ioi_$set_status (cons.ioi_index, bin (rel (addr (ioi_work.status_queue))), 1, code); 372 if code ^= 0 then do; 373 call com_err_ (code, name, "Unable to setup status queue for ^a", cons.console_name); 374 go to done; 375 end; 376 if debug_sw then call ioa_ ("^a: ^a attached", name, cons.console_name); 377 378 prepare_greeting: 379 cons.tty_hungup = "0"b; 380 greeting.cr1, greeting.cr2 = CR; 381 greeting.nl1, greeting.nl2 = NL; 382 greeting.pad1 (*), greeting.pad2 (*) = NUL; 383 call date_time_ (clock (), greeting.msg2); 384 cons.tty_buffer = string (greeting); 385 call setup_output (addr (cons.tty_buffer), length (string (greeting))); 386 call connect; 387 cons.io_state = IO_STATE_GREET; 388 go to block; 389 390 /* This wakeup is really from IOI_ */ 391 392 rcp_wakeup (3): 393 imp = addr (event_wait_info.message); 394 isp = addr (ioi_work.status_queue); 395 statp = addr (istat.iom_stat); 396 if imess.level = "7"b3 then do; /* This is a special */ 397 if cons.tty_hungup then go to block; 398 else go to ioi_special (cons.io_state); 399 end; 400 else if imess.level = "3"b3 then do; 401 if cons.tty_hungup then go to prepare_greeting; 402 else go to ioi_terminate (cons.io_state); 403 end; 404 else if cons.tty_hungup then go to prepare_greeting; 405 else return; 406 407 /* Process special status */ 408 409 ioi_special (2): /* No device attached yet */ 410 attach_terminal: 411 dmap = addr (auto_dial_manager_arg); 412 dmap -> dial_manager_arg.version = dial_manager_arg_version_2; 413 dmap -> dial_manager_arg.dial_out_destination = cons.console_name; /* Ignored, but make nice message on console */ 414 dmap -> dial_manager_arg.dial_channel = dial_manager_channel; 415 dmap -> dial_manager_arg.channel_name = cons.tty_name; 416 dmap -> dial_manager_arg.reservation_string = ""; 417 call dial_manager_$dial_out (dmap, code); 418 if code ^= 0 then do; 419 call com_err_ (code, name, """Dialing"" to ^a.", cons.tty_name); 420 go to done; 421 end; 422 cons.io_state = IO_STATE_DIAL; 423 go to block; 424 425 ioi_special (1): 426 ioi_special (3): 427 ioi_special (0): 428 ioi_special (6): 429 ioi_special (7): 430 go to block; /* Ignore more specials until channel is dialed */ 431 432 ioi_special (4): 433 start_read: 434 call setup_input; /* Request while idle */ 435 call connect; 436 cons.io_state = IO_STATE_READ; 437 go to block; 438 439 ioi_special (5): /* Request during outpuit */ 440 call cause_quit; 441 go to block; 442 443 /* Process terminate status */ 444 445 446 ioi_terminate (1): 447 if istat.er & debug_sw then call print_io_error ("Error writing greeting"); 448 cons.io_state = IO_STATE_INIT; 449 if forceread_sw then go to start_read; 450 go to block; 451 ioi_terminate (2): 452 ioi_terminate (3): 453 ioi_terminate (4): 454 ioi_terminate (0): 455 go to block; 456 ioi_terminate (5): 457 ioi_terminate (7): 458 if istat.er & debug_sw then call print_io_error ("Write"); 459 cons.io_state = IO_STATE_IDLE; 460 go to tty_read; 461 ioi_terminate (6): /* End of input */ 462 cons.io_state = IO_STATE_IDLE; 463 if cons.iocbp = null () then do; /* Must be forceread mode */ 464 if ^istat.er then go to attach_terminal; 465 if status.major = "0011"b & status.sub = "001000"b then do; /* operator discracted */ 466 cons.io_state = IO_STATE_INIT; 467 go to block; 468 end; 469 else go to attach_terminal; 470 end; 471 if ^istat.st then go to write_nl; 472 if istat.er then do; 473 if debug_sw then call print_io_error ("Read"); 474 statp = addr (istat.iom_stat); 475 if status.major = "0011"b & status.sub = "001000"b then /* Operator distracted */ 476 cons.suppress_next_read = "1"b; 477 else cons.suppress_next_read = "0"b; 478 go to write_nl; 479 end; 480 input_len = length (ioi_work.read_buffer) - 4 * bin (status.tally); 481 if status.char_pos ^= "0"b then 482 input_len = input_len - (4 - bin (status.char_pos, 3)); 483 if input_len = 2 then if substr (ioi_work.read_buffer, 1, 2) = "!q" then do; 484 call cause_quit; 485 go to write_nl; 486 end; 487 substr (ioi_work.read_buffer, input_len + 1, 1) = NL; 488 if input_len = 0 then cons.suppress_next_read = "1"b; 489 else cons.suppress_next_read = "0"b; 490 input_len = input_len + 1; 491 call iox_$put_chars (cons.iocbp, addr (ioi_work.read_buffer), input_len, code); 492 493 write_nl: crnl.cr = CR; 494 crnl.nl = NL; 495 crnl.pad (*) = NUL; 496 call setup_output (addr (crnl), length (string (crnl))); 497 call connect; 498 cons.io_state = IO_STATE_NL; 499 go to tty_read; 500 501 /* Process tty wakeups */ 502 503 tty_wakeup: 504 consp = addr (console_info.console (event_wait_type.channel_index (event_wait_info.channel_index))); 505 tty_read: if cons.io_state ^= IO_STATE_IDLE then go to block; 506 call fill_tty_buffer; 507 if cons.tty_buffer_used = 0 then do; 508 no_input: if forceread_sw then do; 509 if cons.suppress_next_read then do; 510 cons.suppress_next_read = "0"b; 511 go to block; 512 end; 513 else go to start_read; 514 end; 515 else go to block; 516 end; 517 i = index (reverse (substr (cons.tty_buffer, 1, cons.tty_buffer_used)), NL); /* Try to break at line */ 518 if i ^= 0 then do; 519 xmit = cons.tty_buffer_used - i + 1; 520 do while (xmit < cons.tty_buffer_used & substr (cons.tty_buffer, xmit + 1, 1) = NUL); 521 xmit = xmit + 1; /* Include padding for NL */ 522 end; 523 end; 524 else do; /* No NL's */ 525 xmit = cons.tty_buffer_used; 526 if substr (cons.tty_buffer, xmit, 1) = ESC then 527 xmit = xmit - 1; /* Console ignores trailing escapes */ 528 if xmit = 0 then go to no_input; /* Hold on to lone escape until rest of output arrives */ 529 end; 530 call setup_output (addr (cons.tty_buffer), xmit); 531 if xmit < cons.tty_buffer_used then /* Shift remaining text */ 532 substr (cons.tty_buffer, 1, cons.tty_buffer_used - xmit) = substr (cons.tty_buffer, xmit + 1, cons.tty_buffer_used - xmit); 533 cons.tty_buffer_used = cons.tty_buffer_used - xmit; 534 cons.tty_buffer_left = cons.tty_buffer_left + xmit; 535 536 call connect; 537 cons.io_state = IO_STATE_WRITE; 538 cons.suppress_next_read = "0"b; 539 go to block; 540 541 fill_tty_buffer: proc; 542 543 dcl amt_read fixed bin (21); 544 dcl state fixed bin; 545 546 amt_read = -1; 547 do while (cons.tty_buffer_left > 0 & amt_read ^= 0); 548 call hcs_$tty_read (cons.tty_devx, addr (cons.tty_buffer), cons.tty_buffer_used, cons.tty_buffer_left, 549 amt_read, state, code); 550 if code ^= 0 then amt_read = 0; 551 cons.tty_buffer_used = cons.tty_buffer_used + amt_read; 552 cons.tty_buffer_left = cons.tty_buffer_left - amt_read; 553 end; 554 return; 555 556 end fill_tty_buffer; 557 558 reset_tty_buffer: proc; 559 560 cons.tty_buffer_used = 0; 561 cons.tty_buffer_left = length (cons.tty_buffer); 562 cons.tty_buffer = ""; 563 return; 564 565 end reset_tty_buffer; 566 567 cause_quit: proc; 568 569 call reset_tty_buffer; 570 call iox_$control (cons.iocbp, "abort", null (), code); 571 call iox_$control (cons.iocbp, "interrupt", null (), code); 572 return; 573 574 end cause_quit; 575 576 /* Setup dcw list for doing output */ 577 578 setup_output: proc (p, n); 579 580 dcl p ptr; /* Address of data */ 581 dcl n fixed bin (21); /* Its length */ 582 dcl c char (n) based (p); 583 dcl tally fixed bin (12) uns; 584 dcl cpos fixed bin (3) uns; 585 586 tally = divide (n + 3, 4, 17, 0); /* Length of message in words */ 587 cpos = 4 * tally - n; /* Where to start so end is word boundry */ 588 substr (ioi_work.write_buffer, cpos + 1, n) = c; /* Copy into buffer */ 589 if cpos > 0 then substr (ioi_work.write_buffer, 1, cpos) = low (cpos); 590 /* Does neatness count? */ 591 592 idcwp = addr (ioi_work.pcw); 593 unspec (idcw) = "0"b; 594 idcw.command = WRITE_ASCII; 595 idcw.code = "111"b; 596 dcwp = addr (ioi_work.dcw1); 597 unspec (dcw) = "0"b; 598 dcw.address = rel (addr (ioi_work.write_buffer)); 599 dcw.tally = bit (tally); 600 dcw.char_pos = bit (cpos); 601 return; 602 603 end setup_output; 604 605 setup_input: proc; 606 607 dcl tally fixed bin (12) uns; 608 609 if prompt_string_length = 0 then do; 610 idcwp = addr (ioi_work.pcw); 611 dcwp = addr (ioi_work.dcw1); 612 end; 613 else do; 614 call setup_output (addr (prompt_string), prompt_string_length); 615 idcwp = addr (ioi_work.pcw); 616 substr (idcw.control, 1, 1) = "1"b; /* Continue */ 617 idcwp = addr (ioi_work.idcw); 618 dcwp = addr (ioi_work.dcw2); 619 end; 620 unspec (idcw) = "0"b; 621 idcw.command = READ_ASCII; 622 idcw.code = "111"b; 623 unspec (dcw) = "0"b; 624 dcw.address = rel (addr (ioi_work.read_buffer)); 625 tally = divide (length (ioi_work.read_buffer), 4, 12, 0); 626 dcw.tally = bit (tally); 627 return; 628 629 end setup_input; 630 631 connect: proc; 632 633 call ioi_$connect_pcw (cons.ioi_index, bin (rel (addr (ioi_work.dcw1))), (ioi_work.pcw), code); 634 return; 635 636 end connect; 637 638 /* Scan argument list */ 639 640 scan_args: proc; 641 642 dcl console_expected bit (1); 643 dcl i fixed bin; 644 645 console_expected = "1"b; 646 debug_sw = "0"b; 647 forceread_sw = "0"b; 648 prompt_string = ""; 649 prompt_string_length = 0; 650 argno = 1; 651 more_args = (argno <= n_args); 652 if n_args = 0 then do; 653 usage: call com_err_ (error_table_$noarg, name, "Usage: ^a console_name sty_name", name); 654 go to done; 655 end; 656 657 do while (more_args); 658 call get_arg; 659 if substr (arg, 1, 1) = "-" then do; 660 if arg = "-debug" | arg = "-db" then debug_sw = "1"b; 661 else if arg = "-forceread" then forceread_sw = "1"b; 662 else if arg = "-prompt" then do; 663 if ^more_args then do; 664 prompt_string = "->"; 665 prompt_string_length = 2; 666 end; 667 else do; 668 call get_arg; 669 prompt_string = arg; 670 prompt_string_length = min (length (prompt_string), length (arg)); 671 end; 672 end; 673 else do; 674 call com_err_ (error_table_$badopt, name, "^a", arg); 675 go to done; 676 677 end; 678 end; 679 else if console_expected then do; 680 if n_consoles >= hbound (console_info.console, 1) then do; 681 call com_err_ (0, name, "Too many consoles specifed. Max is ^d.", 682 hbound (console_info.console, 1)); 683 go to done; 684 end; 685 i = n_consoles + 1; 686 consp = addr (console_info.console (i)); 687 cons.console_name = arg; 688 cons.tty_name = ""; 689 cons.rcp_id = "0"b; 690 cons.ioi_index = -1; 691 cons.iocbp = null (); 692 cons.tty_devx = -1; 693 cons.state_index = 0; 694 cons.rcp_channel = 0; 695 cons.io_state = 0; 696 call reset_tty_buffer; 697 cons.suppress_next_read = "0"b; 698 cons.tty_hungup = "0"b; 699 n_consoles = i; 700 console_expected = "0"b; 701 end; 702 else do; 703 cons.tty_name = arg; 704 console_expected = "1"b; 705 end; 706 end; 707 708 if n_consoles = 0 then go to usage; 709 if ^console_expected then do; 710 call com_err_ (0, name, "No tty channel specified for ^a", cons.console_name); 711 go to done; 712 end; 713 714 end scan_args; 715 716 get_arg: proc; 717 718 call cu_$arg_ptr_rel (argno, argp, argl, code, arg_list_ptr); 719 if code ^= 0 then do; /* Cant fail */ 720 call com_err_ (code, name, "Arg ^d.", argno); 721 go to done; 722 end; 723 argno = argno + 1; 724 more_args = (argno <= n_args); 725 return; 726 727 end get_arg; 728 729 /* Entry to get an event channel */ 730 731 get_evchn: proc returns (fixed bin (71)); 732 733 dcl ev fixed bin (71); 734 735 call ipc_$create_ev_chn (ev, code); 736 if code ^= 0 then do; 737 call convert_ipc_code_ (code); 738 call com_err_ (code, name, "Unable to create event channel."); 739 go to done; 740 end; 741 return (ev); 742 743 end get_evchn; 744 745 /* Entry to make list in event wait list for channel */ 746 747 store_chan: proc (chan, type, index); 748 749 dcl chan fixed bin (71); 750 dcl (type, index) fixed bin; 751 dcl i fixed bin; 752 753 i = event_wait_list.n_channels + 1; 754 event_wait_list.n_channels = i; 755 event_wait_list.channel_id (i) = chan; 756 event_wait_type.channel_type (i) = type; 757 event_wait_type.channel_index (i) = index; 758 return; 759 760 end store_chan; 761 762 free_chan: proc (chan); 763 764 dcl chan fixed bin (71); 765 766 if chan = 0 then return; 767 call ipc_$delete_ev_chn (chan, code); 768 chan = 0; 769 return; 770 771 end free_chan; 772 773 /* remove channel from wait list */ 774 775 forget_chan: proc (chan); 776 777 dcl chan fixed bin (71); 778 dcl i fixed bin; 779 780 do i = 1 to event_wait_list.n_channels; 781 if event_wait_list.channel_id (i) = chan then do; 782 do i = i + 1 to event_wait_list.n_channels; 783 event_wait_list.channel_id (i - 1) = event_wait_list.channel_id (i); 784 end; 785 event_wait_list.channel_id (event_wait_list.n_channels) = 0; 786 event_wait_list.n_channels = event_wait_list.n_channels - 1; 787 return; 788 end; 789 end; 790 return; 791 792 end forget_chan; 793 794 795 print_io_error: proc (prefix); 796 797 dcl prefix char (*); 798 dcl message char (100) var; 799 800 call analyze_ioi_istat_ (isp, addr (opc_status_table_$opc_status_table_), message); 801 call ioa_ ("^a error on ^a: ^a", prefix, cons.console_name, message); 802 return; 803 804 end print_io_error; 805 806 807 clean_up: proc; 808 809 dcl i fixed bin; 810 811 if event_wait_list_ptr ^= null () then do; 812 event_wait_list.n_channels = event_wait_list_n_channels; 813 free event_wait_list; 814 end; 815 if event_wait_type_ptr ^= null () then 816 free event_wait_type; 817 818 do i = 1 to n_consoles; 819 consp = addr (console_info.console (i)); 820 call free_chan (cons.rcp_channel); 821 if cons.rcp_id ^= "0"b then 822 call rcp_$detach (cons.rcp_id, "0"b, 0, "", code); 823 if cons.io_state > IO_STATE_INIT then do; 824 if cons.iocbp ^= null () then do; 825 call iox_$close (cons.iocbp, code); 826 call iox_$detach_iocb (cons.iocbp, code); 827 end; 828 dmap = addr (auto_dial_manager_arg); 829 dmap -> dial_manager_arg.version = dial_manager_arg_version_2; 830 dmap -> dial_manager_arg.dial_qualifier = ""; 831 dmap -> dial_manager_arg.dial_channel = dial_manager_channel; 832 dmap -> dial_manager_arg.channel_name = cons.tty_name; 833 call dial_manager_$release_channel (dmap, code); 834 end; 835 end; 836 837 call free_chan (dial_manager_channel); 838 839 return; 840 841 end clean_up; 842 1 1 /* BEGIN INCLUDE FILE ... event_wait_list.incl.pl1 */ 1 2 1 3 /* ipc_$block wait list structure -- Must begin on an even word boundary. 1 4* 1 5* Written 9-May-79 by M. N. Davidoff. 1 6**/ 1 7 1 8 declare event_wait_list_n_channels 1 9 fixed binary; 1 10 declare event_wait_list_ptr pointer; 1 11 1 12 declare 1 event_wait_list aligned based (event_wait_list_ptr), 1 13 2 n_channels fixed binary, /* number of channels in wait list */ 1 14 2 pad bit (36), 1 15 2 channel_id (event_wait_list_n_channels refer (event_wait_list.n_channels)) fixed binary (71); 1 16 /* event channels to wait on */ 1 17 1 18 /* END INCLUDE FILE ... event_wait_list.incl.pl1 */ 843 844 2 1 /* BEGIN INCLUDE FILE event_wait_info.incl.pl1 */ 2 2 2 3 /* T. Casey, May 1978 */ 2 4 2 5 dcl event_wait_info_ptr ptr; 2 6 2 7 dcl 1 event_wait_info aligned based (event_wait_info_ptr), /* argument structure filled in on return from ipc_$block */ 2 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 2 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 2 10 2 sender bit (36), /* process id of sender */ 2 11 2 origin, 2 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 2 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 2 14 2 channel_index fixed bin; /* index of this channel in the event wait list */ 2 15 2 16 /* END INCLUDE FILE event_wait_info.incl.pl1 */ 845 846 3 1 /* Begin include file rcp_device_info.incl.pl1 3 2** 3 3** Created on 01/08/75 by Bill Silver. 3 4** This include file defines the RCP device info structure for a general device. 3 5**/ 3 6 3 7 3 8 /****^ HISTORY COMMENTS: 3 9* 1) change(86-06-04,Hartogs), approve(86-06-04,MCR7383), 3 10* audit(86-06-05,Coppola), install(86-07-18,MR12.0-1098): 3 11* Added DEVICE_INFO_VERSION_1 constant. 3 12* END HISTORY COMMENTS */ 3 13 3 14 3 15 dcl device_info_ptr ptr; /* Pointer to general device info structure. */ 3 16 3 17 dcl 1 device_info based(device_info_ptr) aligned, /* RCP device info structure for any device. */ 3 18 2 version_num fixed bin, /* Version number of this structure. */ 3 19 2 usage_time fixed bin, /* Number of minutes device will/may be used. */ 3 20 2 wait_time fixed bin, /* Number of minutes user will/must wait. */ 3 21 2 system_flag bit(1), /* ON => user wants to be a system process. */ 3 22 2 device_name char(8), /* Device name. */ 3 23 2 model fixed bin, /* Device model number. */ 3 24 2 qualifiers(4) fixed bin(35); /* Qualifying characteristics. */ 3 25 3 26 dcl DEVICE_INFO_VERSION_1 fixed bin int static options (constant) init (1); 3 27 3 28 /* End of include file ... rcp_device_info.incl.pl1 */ 847 848 4 1 4 2 /* Begin include file ...... ioi_stat.incl.pl1 */ 4 3 /* Last modified 3/24/75 by Noel I. Morris */ 4 4 4 5 dcl isp ptr; /* pointer to status structure */ 4 6 4 7 dcl 1 istat based (isp) aligned, /* I/O Interfacer status structure */ 4 8 2 completion, /* completion flags */ 4 9 (3 st bit (1), /* "1"b if status returned */ 4 10 3 er bit (1), /* "1"b if status indicates error condition */ 4 11 3 run bit (1), /* "1"b if channel still running */ 4 12 3 time_out bit (1)) unal, /* "1"b if time-out occurred */ 4 13 2 level fixed bin (3), /* IOM interrupt level */ 4 14 2 offset fixed bin (18), /* DCW list offset */ 4 15 2 absaddr fixed bin (24), /* absolute address of workspace */ 4 16 2 iom_stat bit (72), /* IOM status */ 4 17 2 lpw bit (72); /* LPW residue */ 4 18 4 19 dcl imp ptr; /* pointer to message structure */ 4 20 4 21 dcl 1 imess based (imp) aligned, /* I/O Interfacer event message structure */ 4 22 (2 completion like istat.completion, /* completion flags */ 4 23 2 pad bit (11), 4 24 2 level bit (3), /* interrupt level */ 4 25 2 offset bit (18), /* DCW list offset */ 4 26 2 status bit (36)) unal; /* first 36 bits of status */ 4 27 4 28 /* End of include file ...... ioi_stat.incl.pl1 */ 4 29 849 850 5 1 5 2 /* Begin include file ...... iom_stat.incl.pl1 */ 5 3 /* Last modified on 10/31/74 by Noel I. Morris */ 5 4 5 5 dcl statp ptr; /* pointer to status */ 5 6 5 7 dcl 1 status based (statp) aligned, /* IOM status information */ 5 8 (2 t bit (1), /* set to "1"b by IOM */ 5 9 2 power bit (1), /* non-zero if peripheral absent or power off */ 5 10 2 major bit (4), /* major status */ 5 11 2 sub bit (6), /* substatus */ 5 12 2 eo bit (1), /* even/odd bit */ 5 13 2 marker bit (1), /* non-zero if marker status */ 5 14 2 soft bit (2), /* software status */ 5 15 2 initiate bit (1), /* initiate bit */ 5 16 2 abort bit (1), /* software abort bit */ 5 17 2 channel_stat bit (3), /* IOM channel status */ 5 18 2 central_stat bit (3), /* IOM central status */ 5 19 2 mbz bit (6), 5 20 2 rcount bit (6), /* record count residue */ 5 21 2 address bit (18), /* DCW address residue */ 5 22 2 char_pos bit (3), /* character position residue */ 5 23 2 r bit (1), /* non-zero if reading */ 5 24 2 type bit (2), /* type of last DCW */ 5 25 2 tally bit (12)) unal; /* DCW tally residue */ 5 26 5 27 dcl 1 faultword based (statp) aligned, /* system fault word */ 5 28 (2 mbz1 bit (9), 5 29 2 channel bit (9), /* channel number */ 5 30 2 serv_req bit (5), /* service request */ 5 31 2 mbz2 bit (3), 5 32 2 controller_fault bit (4), /* system controller fault code */ 5 33 2 io_fault bit (6)) unal; /* I/O fault code */ 5 34 5 35 dcl 1 special_status based (statp) aligned, /* special status from PSIA */ 5 36 (2 t bit (1), /* entry present bit */ 5 37 2 channel bit (8), /* channel number */ 5 38 2 pad1 bit (3), 5 39 2 device bit (6), /* device address */ 5 40 2 pad2 bit (1), 5 41 2 byte2 bit (8), /* device dependent information */ 5 42 2 pad3 bit (1), 5 43 2 byte3 bit (8)) unal; /* device dependent information */ 5 44 5 45 /* End of include file iom_stat.incl.pl1 */ 5 46 851 852 6 1 /* BEGIN INCLUDE FILE ... dial_manager_arg.incl.pl1 */ 6 2 6 3 /* Modified by E. N. Kittlitz 11/80 to add reservation string, move dial-out 6 4* destination from dial_qualifier, add dial_message. 6 5* Modified by Robert Coren 4/83 to add required access class stuff. 6 6* Modified 1984-08-27 BIM for V4, privileged_operation. 6 7**/ 6 8 6 9 6 10 dcl dial_manager_arg_version_2 fixed bin internal static initial (2) options (constant); 6 11 dcl dial_manager_arg_version_3 fixed bin internal static initial (3) options (constant); 6 12 dcl dial_manager_arg_version_4 fixed bin internal static initial (4) options (constant); 6 13 6 14 dcl 1 dial_manager_arg based aligned, 6 15 2 version fixed bin, /* = 4 */ 6 16 2 dial_qualifier char (22), /* identify different processes with same process group id */ 6 17 2 dial_channel fixed bin (71), /* event wait channel */ 6 18 2 channel_name char (32), /* channel name for privileged attach */ 6 19 /* limit of version 1 structure */ 6 20 2 dial_out_destination char (32), /* dial-out destination (e.g. phone_no) */ 6 21 2 reservation_string char (256), /* reservation string */ 6 22 2 dial_message fixed bin (71), /* OUTPUT: A.S. message received by dial_manager_ */ 6 23 /* limit of version 2 structure */ 6 24 2 access_class bit (72), /* access class to be associated with the attachment */ 6 25 2 flags aligned, 6 26 3 access_class_required bit (1) unaligned, /* indicates whether to enforce access_class */ 6 27 3 privileged_operation bit (1) unaligned, /* for accept_dials, accepts dials from */ 6 28 /* system_low:access_class */ 6 29 /* no effect on other operations yet. */ 6 30 3 mbz bit (34) unaligned; /* must be zero */ 6 31 6 32 /* END INCLUDE FILE ... dial_manager_arg.incl.pl1 */ 853 854 7 1 /* Begin include file ..... iox_modes.incl.pl1 */ 7 2 7 3 /* Written by C. D. Tavares, 03/17/75 */ 7 4 /* Updated 10/31/77 by CDT to include short iox mode strings */ 7 5 7 6 dcl iox_modes (13) char (24) int static options (constant) aligned initial 7 7 ("stream_input", "stream_output", "stream_input_output", 7 8 "sequential_input", "sequential_output", "sequential_input_output", "sequential_update", 7 9 "keyed_sequential_input", "keyed_sequential_output", "keyed_sequential_update", 7 10 "direct_input", "direct_output", "direct_update"); 7 11 7 12 dcl short_iox_modes (13) char (4) int static options (constant) aligned initial 7 13 ("si", "so", "sio", "sqi", "sqo", "sqio", "squ", "ksqi", "ksqo", "ksqu", "di", "do", "du"); 7 14 7 15 dcl (Stream_input initial (1), 7 16 Stream_output initial (2), 7 17 Stream_input_output initial (3), 7 18 Sequential_input initial (4), 7 19 Sequential_output initial (5), 7 20 Sequential_input_output initial (6), 7 21 Sequential_update initial (7), 7 22 Keyed_sequential_input initial (8), 7 23 Keyed_sequential_output initial (9), 7 24 Keyed_sequential_update initial (10), 7 25 Direct_input initial (11), 7 26 Direct_output initial (12), 7 27 Direct_update initial (13)) fixed bin int static options (constant); 7 28 7 29 /* End include file ..... iox_modes.incl.pl1 */ 855 856 8 1 8 2 /* Begin include file ...... iom_pcw.incl.pl1 */ 8 3 8 4 dcl pcwp ptr; /* pointer to PCW */ 8 5 8 6 dcl 1 pcw based (pcwp) aligned, /* Peripheral Control Word */ 8 7 (2 command bit (6), /* device command */ 8 8 2 device bit (6), /* device code */ 8 9 2 ext bit (6), /* address extension */ 8 10 2 code bit (3), /* should be "111"b for PCW */ 8 11 2 mask bit (1), /* channel mask bit */ 8 12 2 control bit (2), /* terminate/proceed and marker control bits */ 8 13 2 chan_cmd bit (6), /* type of I/O operation */ 8 14 2 count bit (6), /* record count or control character */ 8 15 2 mbz1 bit (3), 8 16 2 channel bit (6), /* channel number */ 8 17 2 mbz2 bit (27)) unal; 8 18 8 19 dcl idcwp ptr; /* pointer to IDCW */ 8 20 8 21 dcl 1 idcw based (idcwp) aligned, /* Instruction DCW */ 8 22 (2 command bit (6), /* device command */ 8 23 2 device bit (6), /* device code */ 8 24 2 ext bit (6), /* address extension */ 8 25 2 code bit (3), /* should be "111"b for PCW */ 8 26 2 ext_ctl bit (1), /* "1"b if address extension to be used */ 8 27 2 control bit (2), /* terminate/proceed and marker control bits */ 8 28 2 chan_cmd bit (6), /* type of I/O operation */ 8 29 2 count bit (6)) unal; /* record count or control character */ 8 30 8 31 /* End include file ...... iom_pcw.incl.pl1 */ 8 32 857 858 9 1 9 2 /* Begin include file ...... iom_dcw.incl.pl1 */ 9 3 9 4 dcl dcwp ptr, /* pointer to DCW */ 9 5 tdcwp ptr; /* pointer to TDCW */ 9 6 9 7 dcl 1 dcw based (dcwp) aligned, /* Data Control Word */ 9 8 (2 address bit (18), /* address for data transfer */ 9 9 2 char_pos bit (3), /* character position */ 9 10 2 m64 bit (1), /* non-zero for mod 64 address */ 9 11 2 type bit (2), /* DCW type */ 9 12 2 tally bit (12)) unal; /* tally for data transfer */ 9 13 9 14 dcl 1 tdcw based (tdcwp) aligned, /* Transfer DCW */ 9 15 (2 address bit (18), /* address to transfer to */ 9 16 2 mbz1 bit (4), 9 17 2 type bit (2), /* should be "10"b for TDCW */ 9 18 2 mbz2 bit (9), 9 19 2 ec bit (1), /* non-zero to set LPW AE bit */ 9 20 2 res bit (1), /* non-zero to restrict further use of IDCW */ 9 21 2 rel bit (1)) unal; /* non-zero to set relative mode after transfer */ 9 22 9 23 /* End of include file ...... iom_dcw.incl.pl1 */ 9 24 859 860 861 end console_server; 862 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/18/86 1235.1 console_server.pl1 >spec>install>1098>console_server.pl1 843 1 06/29/79 1728.0 event_wait_list.incl.pl1 >ldd>include>event_wait_list.incl.pl1 845 2 06/29/79 1727.8 event_wait_info.incl.pl1 >ldd>include>event_wait_info.incl.pl1 847 3 07/18/86 1218.3 rcp_device_info.incl.pl1 >spec>install>1098>rcp_device_info.incl.pl1 849 4 08/17/79 2215.0 ioi_stat.incl.pl1 >ldd>include>ioi_stat.incl.pl1 851 5 01/10/75 1343.6 iom_stat.incl.pl1 >ldd>include>iom_stat.incl.pl1 853 6 09/13/84 0921.5 dial_manager_arg.incl.pl1 >ldd>include>dial_manager_arg.incl.pl1 855 7 02/02/78 1229.7 iox_modes.incl.pl1 >ldd>include>iox_modes.incl.pl1 857 8 05/06/74 1742.1 iom_pcw.incl.pl1 >ldd>include>iom_pcw.incl.pl1 859 9 11/12/74 1550.1 iom_dcw.incl.pl1 >ldd>include>iom_dcw.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. CR based char(1) unaligned dcl 88 ref 380 493 CR_INIT 000030 constant bit(9) initial unaligned dcl 87 set ref 380 493 DEVICE_INFO_VERSION_1 constant fixed bin(17,0) initial dcl 3-26 ref 332 ESC based char(1) unaligned dcl 94 ref 526 ESC_INIT 000026 constant bit(9) initial unaligned dcl 93 set ref 526 IO_STATE_DIAL constant fixed bin(17,0) initial dcl 128 ref 265 311 422 IO_STATE_GREET constant fixed bin(17,0) initial dcl 128 ref 387 IO_STATE_IDLE constant fixed bin(17,0) initial dcl 128 ref 289 311 459 461 505 IO_STATE_INIT constant fixed bin(17,0) initial dcl 128 ref 311 448 466 823 IO_STATE_NL constant fixed bin(17,0) initial dcl 128 ref 498 IO_STATE_READ constant fixed bin(17,0) initial dcl 128 ref 436 IO_STATE_WRITE constant fixed bin(17,0) initial dcl 128 ref 537 NL based char(1) unaligned dcl 90 ref 381 487 494 517 NL_INIT 000027 constant bit(9) initial unaligned dcl 89 set ref 381 487 494 517 NUL based char(1) unaligned dcl 92 ref 382 495 520 NUL_INIT constant bit(9) initial unaligned dcl 91 set ref 382 495 520 READ_ASCII constant bit(6) initial unaligned dcl 97 ref 621 Stream_input_output 000072 constant fixed bin(17,0) initial dcl 7-15 set ref 271* WRITE_ASCII constant bit(6) initial unaligned dcl 96 ref 594 addr builtin function dcl 192 ref 221 230 263 277 277 283 283 300 324 330 350 371 371 380 381 382 385 385 392 394 395 409 474 487 491 491 493 494 495 496 496 503 517 520 526 530 530 548 548 592 596 598 610 611 614 614 615 617 618 624 633 633 686 800 800 819 828 address based bit(18) level 2 packed unaligned dcl 9-7 set ref 598* 624* amt_read 002272 automatic fixed bin(21,0) dcl 543 set ref 546* 547 548* 550* 551 552 analyze_ioi_istat_ 000010 constant entry external dcl 152 ref 800 areap 000126 automatic pointer dcl 40 set ref 212* 213 216 arg based char unaligned dcl 101 set ref 659 660 660 661 662 669 670 674* 687 703 arg_list_ptr 000116 automatic pointer dcl 36 set ref 196* 718* argl 000104 automatic fixed bin(17,0) dcl 28 set ref 659 660 660 661 662 669 670 674 674 687 703 718* argno 000113 automatic fixed bin(17,0) dcl 34 set ref 650* 651 718* 720* 723* 723 724 argp 000102 automatic pointer dcl 27 set ref 659 660 660 661 662 669 670 674 687 703 718* auto_dial_manager_arg 000234 automatic structure level 1 dcl 54 set ref 409 828 auto_event_wait_info 000224 automatic structure level 1 dcl 53 set ref 230 bin builtin function dcl 192 ref 371 371 480 481 633 633 bit builtin function dcl 192 ref 599 600 626 c based char unaligned dcl 582 ref 588 chan parameter fixed bin(71,0) dcl 777 in procedure "forget_chan" ref 775 781 chan parameter fixed bin(71,0) dcl 749 in procedure "store_chan" ref 747 755 chan parameter fixed bin(71,0) dcl 764 in procedure "free_chan" set ref 762 766 767* 768* channel_id 2 based fixed bin(71,0) array level 2 dcl 1-12 set ref 755* 781 783* 783 785* channel_index 1 based fixed bin(17,0) array level 2 in structure "event_wait_type" dcl 146 in procedure "console_server" set ref 324 503 757* channel_index 6 based fixed bin(17,0) level 2 in structure "event_wait_info" dcl 2-7 in procedure "console_server" ref 240 324 503 channel_name 12 based char(32) level 2 dcl 6-14 set ref 415* 832* channel_type based fixed bin(17,0) array level 2 dcl 146 set ref 240 756* char_pos 1(18) based bit(3) level 2 in structure "status" packed unaligned dcl 5-7 in procedure "console_server" ref 481 481 char_pos 0(18) based bit(3) level 2 in structure "dcw" packed unaligned dcl 9-7 in procedure "console_server" set ref 600* cleanup 002230 stack reference condition dcl 190 ref 206 clock builtin function dcl 192 ref 383 383 code 000100 automatic fixed bin(35,0) dcl 26 in procedure "console_server" set ref 225* 231* 232 233* 234* 254* 256 257* 266* 267 268* 271* 272 273* 277* 278 279* 283* 284 285* 303* 304* 340* 341 342* 352* 366* 367 368* 371* 372 373* 417* 418 419* 491* 548* 550 570* 571* 633* 718* 719 720* 735* 736 737* 738* 767* 821* 825* 826* 833* code 0(18) based bit(3) level 2 in structure "idcw" packed unaligned dcl 8-21 in procedure "console_server" set ref 595* 622* com_err_ 000012 constant entry external dcl 153 ref 234 257 268 273 279 285 342 368 373 419 653 674 681 710 720 738 command based bit(6) level 2 packed unaligned dcl 8-21 set ref 594* 621* comment 000136 automatic char(128) unaligned dcl 45 set ref 352* 356 356* 360* completion based structure level 2 in structure "istat" dcl 4-7 in procedure "console_server" completion based structure level 3 in structure "ioi_work" dcl 137 in procedure "console_server" cons based structure level 1 dcl 104 console 000406 automatic structure array level 2 dcl 64 set ref 221 263 300 324 503 680 681 681 686 819 console_expected 002344 automatic bit(1) unaligned dcl 642 set ref 645* 679 700* 704* 709 console_info 000406 automatic structure level 1 dcl 64 console_name based char(32) level 2 dcl 104 set ref 336 342* 356* 360* 368* 373* 376* 413 687* 710* 801* consp 000106 automatic pointer dcl 30 set ref 221* 222 223 224 225 263* 264 265 266 271 277 282 283 283 283 288 289 300* 301 302 303 304 305 306 307 310 311 311 311 313 324* 326 330 336 340 340 342 345 350 352 352 352 352 356 360 364 366 366 368 371 371 371 373 376 378 384 385 385 387 394 397 398 401 402 404 413 415 419 422 436 448 459 461 463 466 475 477 480 483 487 488 489 491 491 491 498 503* 505 507 509 510 517 517 519 520 520 525 526 530 530 531 531 531 531 531 533 533 534 534 537 538 547 548 548 548 548 548 551 551 552 552 560 561 561 562 570 571 588 589 592 596 598 610 611 615 617 618 624 625 633 633 633 633 686* 687 688 689 690 691 692 693 694 695 697 698 703 710 801 819* 820 821 821 823 824 825 826 832 control 0(22) based bit(2) level 2 packed unaligned dcl 8-21 set ref 616* convert_dial_message_ 000014 constant entry external dcl 154 ref 254 convert_ipc_code_ 000016 constant entry external dcl 155 ref 233 737 cpos 002317 automatic fixed bin(3,0) unsigned dcl 584 set ref 587* 588 589 589 589 600 cr 002226 automatic char(1) level 2 packed unaligned dcl 77 set ref 493* cr1 002206 automatic char(1) level 2 packed unaligned dcl 67 set ref 380* cr2 15(18) 002206 automatic char(1) level 2 packed unaligned dcl 67 set ref 380* crnl 002226 automatic structure level 1 packed unaligned dcl 77 set ref 496 496 496 496 cu_$arg_count 000020 constant entry external dcl 156 ref 197 cu_$arg_list_ptr 000022 constant entry external dcl 157 ref 196 cu_$arg_ptr_rel 000024 constant entry external dcl 158 ref 718 date_time_ 000026 constant entry external dcl 159 ref 383 dcw based structure level 1 dcl 9-7 set ref 597* 623* dcw1 11 based bit(36) level 2 dcl 137 set ref 596 611 633 633 dcw2 13 based bit(36) level 2 dcl 137 set ref 618 dcwp 002256 automatic pointer dcl 9-4 set ref 596* 597 598 599 600 611* 618* 623 624 626 debug_sw 000111 automatic bit(1) unaligned dcl 32 set ref 261 298 376 446 456 473 646* 660* device 000212 automatic char(32) unaligned dcl 49 set ref 254* 261* 264 266* 266 268* 273* 279* 285* 293* 298* 301 317* device_info based structure level 1 dcl 3-17 device_info_ptr 002244 automatic pointer dcl 3-15 set ref 330* 332 333 334 335 336 337 338 340* 350* 352* device_name 4 based char(8) level 2 dcl 3-17 set ref 336* devx 1 000373 automatic fixed bin(17,0) level 2 dcl 55 set ref 282 dial_channel 10 based fixed bin(71,0) level 2 dcl 6-14 set ref 414* 831* dial_manager_$dial_out 000030 constant entry external dcl 160 ref 417 dial_manager_$release_channel 000032 constant entry external dcl 161 ref 833 dial_manager_arg based structure level 1 dcl 6-14 dial_manager_arg_version_2 constant fixed bin(17,0) initial dcl 6-10 ref 412 829 dial_manager_channel 000134 automatic fixed bin(71,0) dcl 44 set ref 202* 218* 219* 414 831 837* dial_out_destination 22 based char(32) level 2 dcl 6-14 set ref 413* dial_qualifier 1 based char(22) level 2 dcl 6-14 set ref 830* dial_status 000405 automatic structure level 1 dcl 59 set ref 254* dialed_up 000405 automatic bit(1) level 2 packed unaligned dcl 59 set ref 260 divide builtin function dcl 192 ref 586 625 dmap 000200 automatic pointer dcl 47 set ref 409* 412 413 414 415 416 417* 828* 829 830 831 832 833* er 0(01) based bit(1) level 3 packed unaligned dcl 4-7 ref 446 456 464 472 error_table_$badopt 000106 external static fixed bin(35,0) dcl 187 set ref 674* error_table_$noarg 000104 external static fixed bin(35,0) dcl 186 set ref 653* ev 002362 automatic fixed bin(71,0) dcl 733 set ref 735* 741 event_wait_info based structure level 1 dcl 2-7 event_wait_info_ptr 002242 automatic pointer dcl 2-5 set ref 230* 231* 240 254 324 392 503 event_wait_list based structure level 1 dcl 1-12 set ref 213 813 event_wait_list_n_channels 002236 automatic fixed bin(17,0) dcl 1-8 set ref 211* 213 213 216 812 815 event_wait_list_ptr 002240 automatic pointer dcl 1-10 set ref 200* 213* 214 231* 753 754 755 780 781 782 783 783 785 785 786 786 811 812 813 event_wait_type based structure array level 1 dcl 146 set ref 216 815 event_wait_type_ptr 000132 automatic pointer dcl 43 set ref 201* 216* 240 324 503 756 757 815 815 forceread_sw 000112 automatic bit(1) unaligned dcl 33 set ref 449 508 647* 661* free_area based area(1024) dcl 102 ref 213 216 get_channel_info 000373 automatic structure level 1 dcl 55 set ref 277 277 get_process_id_ 000034 constant entry external dcl 162 ref 210 get_system_free_area_ 000036 constant entry external dcl 163 ref 212 greeting 002206 automatic structure level 1 packed unaligned dcl 67 set ref 384 385 385 hbound builtin function dcl 192 ref 680 681 681 hcs_$tty_read 000040 constant entry external dcl 164 ref 548 hcs_$wakeup 000042 constant entry external dcl 166 ref 225 hung_up 0(01) 000405 automatic bit(1) level 2 packed unaligned dcl 59 set ref 297 i 000106 automatic fixed bin(17,0) dcl 809 in procedure "clean_up" set ref 818* 819* i 000131 automatic fixed bin(17,0) dcl 42 in procedure "console_server" set ref 220* 221 223* 262* 263 288* 299* 300* 517* 518 519 i 002372 automatic fixed bin(17,0) dcl 751 in procedure "store_chan" set ref 753* 754 755 756 757 i 002345 automatic fixed bin(17,0) dcl 643 in procedure "scan_args" set ref 685* 686 699 i 002402 automatic fixed bin(17,0) dcl 778 in procedure "forget_chan" set ref 780* 781 782* 782* 783 783* idcw based structure level 1 dcl 8-21 in procedure "console_server" set ref 593* 620* idcw 12 based bit(36) level 2 in structure "ioi_work" dcl 137 in procedure "console_server" set ref 617 idcwp 002254 automatic pointer dcl 8-19 set ref 592* 593 594 595 610* 615* 616 617* 620 621 622 imess based structure level 1 dcl 4-21 imp 002250 automatic pointer dcl 4-19 set ref 392* 396 400 index builtin function dcl 192 in procedure "console_server" ref 517 index parameter fixed bin(17,0) dcl 750 in procedure "store_chan" ref 747 757 input_len 000222 automatic fixed bin(21,0) dcl 50 set ref 480* 481* 481 483 487 488 490* 490 491* io_module 000202 automatic char(32) unaligned dcl 48 set ref 254* io_state 26 based fixed bin(17,0) level 2 dcl 104 set ref 265 289* 311 311 311 387* 398 402 422* 436* 448* 459* 461* 466* 498* 505 537* 695* 823 ioa_ 000044 constant entry external dcl 167 ref 261 293 298 317 356 360 376 801 iocbp 22 based pointer level 2 dcl 104 set ref 266* 271* 277* 283* 302 303* 304* 307* 463 491* 570* 571* 691* 824 825* 826* ioi_$connect_pcw 000046 constant entry external dcl 169 ref 633 ioi_$set_status 000050 constant entry external dcl 170 ref 371 ioi_$workspace 000052 constant entry external dcl 171 ref 366 ioi_index 21 based fixed bin(17,0) level 2 dcl 104 set ref 352* 366* 371* 633* 690* ioi_work based structure level 1 dcl 137 iom_stat 4 based bit(72) level 2 dcl 4-7 set ref 395 474 iox_$attach_name 000054 constant entry external dcl 172 ref 266 iox_$close 000056 constant entry external dcl 173 ref 303 825 iox_$control 000060 constant entry external dcl 174 ref 277 283 570 571 iox_$detach_iocb 000062 constant entry external dcl 175 ref 304 826 iox_$open 000064 constant entry external dcl 176 ref 271 iox_$put_chars 000066 constant entry external dcl 177 ref 491 ipc_$block 000070 constant entry external dcl 178 ref 231 ipc_$create_ev_chn 000072 constant entry external dcl 179 ref 735 ipc_$delete_ev_chn 000074 constant entry external dcl 180 ref 767 isp 002246 automatic pointer dcl 4-5 set ref 394* 395 446 456 464 471 472 474 800* istat based structure level 1 dcl 4-7 length builtin function dcl 192 ref 385 385 480 496 496 561 625 670 670 level 0(15) based bit(3) level 2 packed unaligned dcl 4-21 ref 396 400 low builtin function dcl 192 ref 589 major 0(02) based bit(4) level 2 packed unaligned dcl 5-7 ref 465 475 max_time 50 based fixed bin(71,0) level 2 dcl 104 set ref 352* max_work 47 based fixed bin(19,0) level 2 dcl 104 set ref 352* message 002414 automatic varying char(100) dcl 798 in procedure "print_io_error" set ref 800* 801* message 2 based fixed bin(71,0) level 2 in structure "event_wait_info" dcl 2-7 in procedure "console_server" set ref 254* 392 min builtin function dcl 192 ref 670 model 6 based fixed bin(17,0) level 2 dcl 3-17 set ref 337* more_args 000125 automatic bit(1) unaligned dcl 39 set ref 651* 657 663 724* msg1 1(18) 002206 automatic char(24) initial level 2 packed unaligned dcl 67 set ref 67* msg2 7(18) 002206 automatic char(24) level 2 packed unaligned dcl 67 set ref 383* n parameter fixed bin(21,0) dcl 581 ref 578 586 587 588 588 n_args 000114 automatic fixed bin(17,0) dcl 35 set ref 197* 651 652 724 n_channels based fixed bin(17,0) level 2 dcl 1-12 set ref 213* 214* 753 754* 780 782 785 786* 786 812* 813 n_consoles 000110 automatic fixed bin(17,0) dcl 31 set ref 199* 211 220 262 299 680 685 699* 708 818 name 000031 constant char(14) initial unaligned dcl 84 set ref 234* 257* 268* 273* 279* 285* 342* 356* 360* 368* 373* 376* 419* 653* 653* 674* 681* 710* 720* 738* nl 0(09) 002226 automatic char(1) level 2 packed unaligned dcl 77 set ref 494* nl1 0(09) 002206 automatic char(1) level 2 packed unaligned dcl 67 set ref 381* nl2 15(27) 002206 automatic char(1) level 2 packed unaligned dcl 67 set ref 381* null builtin function dcl 192 ref 200 201 266 266 302 307 463 570 570 571 571 691 811 815 824 opc_status_table_$opc_status_table_ 000110 external static fixed bin(17,0) dcl 188 set ref 800 800 p parameter pointer dcl 580 ref 578 588 pad 0(18) 002226 automatic char(1) array level 2 packed unaligned dcl 77 set ref 495* pad1 0(18) 002206 automatic char(1) array level 2 packed unaligned dcl 67 set ref 382* pad2 16 002206 automatic char(1) array level 2 packed unaligned dcl 67 set ref 382* pcw 10 based bit(36) level 2 dcl 137 set ref 592 610 615 633 prefix parameter char unaligned dcl 797 set ref 795 801* processid 000130 automatic bit(36) unaligned dcl 41 set ref 210* 225* prompt_string 000120 automatic char(16) unaligned dcl 37 set ref 614 614 648* 664* 669* 670 prompt_string_length 000124 automatic fixed bin(21,0) dcl 38 set ref 609 614* 649* 665* 670* qualifiers 7 based fixed bin(35,0) array level 2 dcl 3-17 set ref 338* rcp_$attach 000076 constant entry external dcl 181 ref 340 rcp_$check_attach 000100 constant entry external dcl 182 ref 352 rcp_$detach 000102 constant entry external dcl 183 ref 821 rcp_channel 30 based fixed bin(71,0) level 2 dcl 104 set ref 222* 223* 225* 340* 694* 820* rcp_device_info 34 based structure level 2 dcl 104 set ref 330 350 rcp_id 20 based bit(36) level 2 dcl 104 set ref 340* 352* 689* 821 821* rcp_state 000176 automatic fixed bin(17,0) dcl 46 set ref 352* 354 355 359 363 read_buffer 214 based char(512) level 2 dcl 137 set ref 480 483 487* 491 491 624 625 rel builtin function dcl 192 ref 371 371 598 624 633 633 reservation_string 32 based char(256) level 2 dcl 6-14 set ref 416* reverse builtin function dcl 192 ref 517 st based bit(1) level 3 packed unaligned dcl 4-7 ref 471 state 002273 automatic fixed bin(17,0) dcl 544 set ref 548* state_index 25 based fixed bin(17,0) level 2 dcl 104 set ref 224* 326 345* 364* 693* statp 002252 automatic pointer dcl 5-5 set ref 395* 465 465 474* 475 475 480 481 481 status based structure level 1 dcl 5-7 status_queue based structure level 2 dcl 137 set ref 371 371 394 string builtin function dcl 192 ref 384 385 385 496 496 sub 0(06) based bit(6) level 2 packed unaligned dcl 5-7 ref 465 475 substr builtin function dcl 192 set ref 483 487* 517 520 526 531* 531 588* 589* 616* 659 suppress_next_read 156 based bit(1) level 2 dcl 104 set ref 475* 477* 488* 489* 509 510* 538* 697* system_flag 3 based bit(1) level 2 dcl 3-17 set ref 335* tally 002316 automatic fixed bin(12,0) unsigned dcl 583 in procedure "setup_output" set ref 586* 587 599 tally 002326 automatic fixed bin(12,0) unsigned dcl 607 in procedure "setup_input" set ref 625* 626 tally 1(24) based bit(12) level 2 in structure "status" packed unaligned dcl 5-7 in procedure "console_server" ref 480 tally 0(24) based bit(12) level 2 in structure "dcw" packed unaligned dcl 9-7 in procedure "console_server" set ref 599* 626* tty_buffer 54 based char(256) level 2 dcl 104 set ref 384* 385 385 517 520 526 530 530 531* 531 548 548 561 562* tty_buffer_left 155 based fixed bin(21,0) level 2 dcl 104 set ref 534* 534 547 548* 552* 552 561* tty_buffer_used 154 based fixed bin(21,0) level 2 dcl 104 set ref 507 517 519 520 525 531 531 531 533* 533 548* 551* 551 560* tty_channel 32 based fixed bin(71,0) level 2 dcl 104 set ref 283 283 288* 305* 306* tty_devx 24 based fixed bin(17,0) level 2 dcl 104 set ref 282* 548* 692* tty_hungup 157 based bit(1) level 2 dcl 104 set ref 310* 313* 378* 397 401 404 698* tty_name 10 based char(32) level 2 dcl 104 set ref 264 301 415 419* 688* 703* 832 type parameter fixed bin(17,0) dcl 750 ref 747 756 unspec builtin function dcl 192 set ref 593* 597* 620* 623* usage_time 1 based fixed bin(17,0) level 2 dcl 3-17 set ref 333* version 000373 automatic fixed bin(17,0) level 2 in structure "get_channel_info" dcl 55 in procedure "console_server" set ref 276* version based fixed bin(17,0) level 2 in structure "dial_manager_arg" dcl 6-14 in procedure "console_server" set ref 412* 829* version_num based fixed bin(17,0) level 2 dcl 3-17 set ref 332* wait_time 2 based fixed bin(17,0) level 2 dcl 3-17 set ref 334* workspacep 52 based pointer level 2 dcl 104 set ref 366* 371 371 394 480 483 487 491 491 588 589 592 596 598 610 611 615 617 618 624 625 633 633 633 write_buffer 14 based char(512) level 2 dcl 137 set ref 588* 589* 598 xmit 000223 automatic fixed bin(21,0) dcl 51 set ref 519* 520 520 521* 521 525* 526 526* 526 528 530* 531 531 531 531 533 534 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Direct_input internal static fixed bin(17,0) initial dcl 7-15 Direct_output internal static fixed bin(17,0) initial dcl 7-15 Direct_update internal static fixed bin(17,0) initial dcl 7-15 Keyed_sequential_input internal static fixed bin(17,0) initial dcl 7-15 Keyed_sequential_output internal static fixed bin(17,0) initial dcl 7-15 Keyed_sequential_update internal static fixed bin(17,0) initial dcl 7-15 Sequential_input internal static fixed bin(17,0) initial dcl 7-15 Sequential_input_output internal static fixed bin(17,0) initial dcl 7-15 Sequential_output internal static fixed bin(17,0) initial dcl 7-15 Sequential_update internal static fixed bin(17,0) initial dcl 7-15 Stream_input internal static fixed bin(17,0) initial dcl 7-15 Stream_output internal static fixed bin(17,0) initial dcl 7-15 console_infop automatic pointer dcl 29 dial_manager_arg_version_3 internal static fixed bin(17,0) initial dcl 6-11 dial_manager_arg_version_4 internal static fixed bin(17,0) initial dcl 6-12 faultword based structure level 1 dcl 5-27 foo internal static char(4) initial unaligned dcl 85 hcs_$tty_write 000000 constant entry external dcl 165 ioi_$connect 000000 constant entry external dcl 168 iox_modes internal static char(24) initial array dcl 7-6 pcw based structure level 1 dcl 8-6 pcwp automatic pointer dcl 8-4 short_iox_modes internal static char(4) initial array dcl 7-12 special_status based structure level 1 dcl 5-35 tdcw based structure level 1 dcl 9-14 tdcwp automatic pointer dcl 9-4 timer_manager_$sleep 000000 constant entry external dcl 184 NAMES DECLARED BY EXPLICIT CONTEXT. attach_err 001735 constant label dcl 342 ref 354 363 attach_terminal 002467 constant label dcl 409 ref 464 465 bad_dial 001440 constant label dcl 293 ref 265 block 000627 constant label dcl 231 ref 294 314 318 320 357 361 388 397 423 425 437 441 450 451 467 505 508 511 539 cause_quit 003255 constant entry internal dcl 567 ref 439 484 clean_up 004430 constant entry internal dcl 807 ref 206 249 connect 003503 constant entry internal dcl 631 ref 386 435 497 536 console_server 000414 constant entry external dcl 22 dial_manager_wakeup 000722 constant label dcl 254 ref 242 done 000715 constant label dcl 249 ref 235 258 269 274 280 286 343 369 374 420 654 675 683 711 721 739 fill_tty_buffer 003174 constant entry internal dcl 541 ref 506 forget_chan 004272 constant entry internal dcl 775 ref 305 free_chan 004247 constant entry internal dcl 762 ref 820 837 get_arg 004072 constant entry internal dcl 716 ref 658 668 get_evchn 004152 constant entry internal dcl 731 ref 218 222 ioi_special 000006 constant label array(0:7) dcl 409 ref 398 ioi_terminate 000016 constant label array(0:7) dcl 446 ref 402 no_input 003071 constant label dcl 508 ref 528 prepare_greeting 002332 constant label dcl 378 ref 311 401 404 print_io_error 004341 constant entry internal dcl 795 ref 446 456 473 rcp_ioi_wakeup 001637 constant label dcl 324 ref 244 rcp_wakeup 000003 constant label array(3) dcl 330 set ref 326 reset_tty_buffer 003244 constant entry internal dcl 558 ref 309 569 696 scan_args 003533 constant entry internal dcl 640 ref 204 setup_input 003427 constant entry internal dcl 605 ref 432 setup_output 003345 constant entry internal dcl 578 ref 385 496 530 614 start_read 002564 constant label dcl 432 ref 449 509 store_chan 004227 constant entry internal dcl 747 ref 219 223 288 tty_read 003061 constant label dcl 505 ref 290 460 499 tty_wakeup 003055 constant label dcl 503 ref 246 usage 003553 constant label dcl 653 ref 708 wakeup_type 000000 constant label array(3) dcl 242 ref 240 write_nl 003020 constant label dcl 493 ref 471 478 485 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5336 5450 4734 5346 Length 6112 4734 112 425 402 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME console_server 1640 external procedure is an external procedure. on unit on line 206 64 on unit fill_tty_buffer internal procedure shares stack frame of external procedure console_server. reset_tty_buffer internal procedure shares stack frame of external procedure console_server. cause_quit internal procedure shares stack frame of external procedure console_server. setup_output internal procedure shares stack frame of external procedure console_server. setup_input internal procedure shares stack frame of external procedure console_server. connect internal procedure shares stack frame of external procedure console_server. scan_args internal procedure shares stack frame of external procedure console_server. get_arg internal procedure shares stack frame of external procedure console_server. get_evchn internal procedure shares stack frame of external procedure console_server. store_chan internal procedure shares stack frame of external procedure console_server. free_chan internal procedure shares stack frame of internal procedure clean_up. forget_chan internal procedure shares stack frame of external procedure console_server. print_io_error internal procedure shares stack frame of external procedure console_server. clean_up 110 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME clean_up 000106 i clean_up console_server 000100 code console_server 000102 argp console_server 000104 argl console_server 000106 consp console_server 000110 n_consoles console_server 000111 debug_sw console_server 000112 forceread_sw console_server 000113 argno console_server 000114 n_args console_server 000116 arg_list_ptr console_server 000120 prompt_string console_server 000124 prompt_string_length console_server 000125 more_args console_server 000126 areap console_server 000130 processid console_server 000131 i console_server 000132 event_wait_type_ptr console_server 000134 dial_manager_channel console_server 000136 comment console_server 000176 rcp_state console_server 000200 dmap console_server 000202 io_module console_server 000212 device console_server 000222 input_len console_server 000223 xmit console_server 000224 auto_event_wait_info console_server 000234 auto_dial_manager_arg console_server 000373 get_channel_info console_server 000405 dial_status console_server 000406 console_info console_server 002206 greeting console_server 002226 crnl console_server 002236 event_wait_list_n_channels console_server 002240 event_wait_list_ptr console_server 002242 event_wait_info_ptr console_server 002244 device_info_ptr console_server 002246 isp console_server 002250 imp console_server 002252 statp console_server 002254 idcwp console_server 002256 dcwp console_server 002272 amt_read fill_tty_buffer 002273 state fill_tty_buffer 002316 tally setup_output 002317 cpos setup_output 002326 tally setup_input 002344 console_expected scan_args 002345 i scan_args 002362 ev get_evchn 002372 i store_chan 002402 i forget_chan 002414 message print_io_error THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_le_a alloc_cs call_ext_out_desc call_ext_out call_int_this call_int_other return mpfx2 enable shorten_stack ext_entry int_entry alloc_based free_based clock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. analyze_ioi_istat_ com_err_ convert_dial_message_ convert_ipc_code_ cu_$arg_count cu_$arg_list_ptr cu_$arg_ptr_rel date_time_ dial_manager_$dial_out dial_manager_$release_channel get_process_id_ get_system_free_area_ hcs_$tty_read hcs_$wakeup ioa_ ioi_$connect_pcw ioi_$set_status ioi_$workspace iox_$attach_name iox_$close iox_$control iox_$detach_iocb iox_$open iox_$put_chars ipc_$block ipc_$create_ev_chn ipc_$delete_ev_chn rcp_$attach rcp_$check_attach rcp_$detach THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$noarg opc_status_table_$opc_status_table_ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000413 67 000421 196 000424 197 000432 199 000441 200 000442 201 000444 202 000445 204 000447 206 000450 210 000472 211 000501 212 000505 213 000514 214 000525 216 000526 218 000534 219 000536 220 000543 221 000553 222 000556 223 000564 224 000601 225 000604 226 000623 230 000625 231 000627 232 000642 233 000644 234 000653 235 000702 240 000703 242 000712 244 000713 246 000714 249 000715 250 000721 254 000722 256 000757 257 000761 258 001010 260 001011 261 001014 262 001037 263 001047 264 001052 265 001056 266 001061 267 001121 268 001123 269 001156 271 001157 272 001177 273 001201 274 001231 276 001232 277 001234 278 001271 279 001273 280 001323 282 001324 283 001327 284 001362 285 001364 286 001414 288 001415 289 001432 290 001435 292 001436 293 001440 294 001463 297 001464 298 001467 299 001512 300 001521 301 001524 302 001530 303 001534 304 001545 305 001557 306 001566 307 001571 309 001573 310 001574 311 001576 313 001605 314 001607 316 001610 317 001612 318 001635 320 001636 324 001637 326 001643 330 001645 332 001647 333 001651 334 001652 335 001653 336 001654 337 001660 338 001661 340 001673 341 001733 342 001735 343 001770 345 001771 350 001774 352 001777 354 002044 355 002047 356 002051 357 002105 359 002106 360 002110 361 002140 363 002141 364 002143 366 002146 367 002165 368 002167 369 002217 371 002220 372 002246 373 002250 374 002300 376 002301 378 002332 380 002334 381 002341 382 002347 383 002376 384 002417 385 002423 386 002431 387 002432 388 002435 392 002436 394 002440 395 002442 396 002444 397 002452 398 002454 400 002456 401 002460 402 002462 404 002464 405 002466 409 002467 412 002471 413 002473 414 002477 415 002501 416 002504 417 002507 418 002520 419 002522 420 002556 422 002557 423 002562 425 002563 432 002564 435 002565 436 002566 437 002571 439 002572 441 002573 446 002574 448 002612 449 002615 450 002617 451 002620 456 002621 459 002633 460 002636 461 002637 463 002641 464 002645 465 002650 466 002662 467 002664 471 002665 472 002670 473 002673 474 002702 475 002705 477 002723 478 002725 480 002726 481 002737 483 002753 484 002763 485 002764 487 002765 488 002772 489 002777 490 003000 491 003001 493 003020 494 003022 495 003025 496 003042 497 003050 498 003051 499 003054 503 003055 505 003061 506 003065 507 003066 508 003071 509 003073 510 003076 511 003077 517 003100 518 003111 519 003112 520 003116 521 003126 522 003127 523 003130 525 003131 526 003133 528 003141 530 003143 531 003150 533 003162 534 003164 536 003166 537 003167 538 003172 539 003173 541 003174 546 003175 547 003177 548 003205 550 003232 551 003235 552 003240 553 003242 554 003243 558 003244 560 003245 561 003247 562 003251 563 003254 567 003255 569 003256 570 003257 571 003310 572 003344 578 003345 586 003347 587 003353 588 003356 589 003366 592 003377 593 003402 594 003403 595 003405 596 003407 597 003411 598 003412 599 003415 600 003420 601 003426 605 003427 609 003430 610 003432 611 003436 612 003440 614 003441 615 003445 616 003451 617 003453 618 003455 620 003457 621 003460 622 003463 623 003465 624 003466 625 003473 626 003476 627 003502 631 003503 633 003504 634 003532 640 003533 645 003534 646 003536 647 003537 648 003540 649 003543 650 003544 651 003546 652 003551 653 003553 654 003602 657 003603 658 003606 659 003607 660 003614 661 003630 662 003637 663 003643 664 003645 665 003650 666 003652 668 003653 669 003654 670 003661 672 003666 674 003667 675 003721 678 003722 679 003723 680 003725 681 003730 683 003763 685 003764 686 003766 687 003771 688 003775 689 004000 690 004001 691 004003 692 004005 693 004007 694 004010 695 004012 696 004013 697 004014 698 004016 699 004017 700 004021 701 004022 703 004023 704 004030 706 004032 708 004033 709 004035 710 004037 711 004070 714 004071 716 004072 718 004073 719 004112 720 004114 721 004143 723 004144 724 004145 725 004151 731 004152 735 004154 736 004165 737 004167 738 004176 739 004222 741 004223 747 004227 753 004231 754 004234 755 004235 756 004241 757 004244 758 004246 762 004247 766 004251 767 004254 768 004266 769 004271 775 004272 780 004274 781 004303 782 004310 783 004317 784 004324 785 004326 786 004333 787 004335 789 004336 790 004340 795 004341 800 004352 801 004374 802 004426 807 004427 811 004435 812 004442 813 004444 815 004450 818 004461 819 004471 820 004476 821 004504 823 004544 824 004551 825 004555 826 004566 828 004601 829 004605 830 004607 831 004612 832 004614 833 004620 835 004631 837 004633 839 004642 ----------------------------------------------------------- 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