COMPILATION LISTING OF SEGMENT gcos_daemon Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/19/82 0959.9 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* 13*Modified: Scott C. Akers FEB 82 Add 'help' request, change action 14* of 'return' request to just quit 15* out of Daemon instead of 16* NEW_PROCing the user. 17* 18**/ 19 20 gcos_daemon: proc; /* MAIN ENTRY */ 21 22 23 call init_pointers; 24 test_entry = "0"b; 25 call default_handler_$set (standard_default_handler_); /* use standard fault handler */ 26 call gcos_daemon_init_ (fatal_error); 27 go to COMMON; 28 29 /* TEST ENTRY */ 30 31 32 test: entry; 33 34 35 /* 36*" N__a_m_e: test 37*" 38*" The test entry point to gcos_daemon 39*" allows testing of the daemon from a private user process. It 40*" allows the user to specify a private directory (instead of 41*" >ddd>GCOS) to be used as the root directory during testing. 42*" 43*" U__s_a_g_e 44*" gcos_daemon$test path 45*" or 46*" gcos_daemon$test control_arg 47*" 48*" where: 49*" 1. path is the pathname of a root directory to be used in 50*" the test. 51*" 52*" 2. control_arg is -wd or -working_dir if the working 53*" directory is to be used as the root directory. 54*" 55*" N__o_t_e 56*" Prior to calling this entry point the following setup must be 57*" done for the root directory. The gcos_user_table_ must be copied 58*" from >ddd>GCOS into the root directory. Table entries must exist 59*" for the gcos_account_id, Multics Person_id and Multics Project_id 60*" which will be used in testing the gcos daemon. See Appendix B of 61*" the GCOS Environment Simulator manual AN05 for information on 62*" setting up the gcos_user_table_. 63*" 64*" Next four subdirectories should be created in the root directory. 65*" They are "input_dir", "pool_dir", "Anonymous", and "gdd". The 66*" Access Control List for the subdirectories must include: 67*" 68*" sma Anonymous.GCOS.* 69*" 70*" and the Initial Access Control List for the subdirectories must 71*" include: 72*" 73*" rw Anonymous.GCOS.* 74*" 75*" Under gdd a subdirectory must be created and named with the 76*" Multics Project_id as specified in the gcos_user_table_. Under 77*" this project directory a subdirectory must be created and named 78*" with the Multics Person_id as specified in the gcos_user_table_. 79*" This person directory must have an Access Control List which 80*" includes: 81*" 82*" sma Anonymous.GCOS.* 83*" 84*" and an Initial Access Control List which includes: 85*" 86*" rw Anonymous.GCOS.* 87*" 88**/ 89 90 call init_pointers; 91 test_entry = "1"b; 92 93 call cu_$arg_count (arg_count); 94 if arg_count = 0 then do; 95 code = error_table_$noarg; 96 call com_err_ (code, "gcos_daemon$test", 97 "^/Usage: gcos_daemon$test directory_name"); 98 return; 99 end; 100 101 if arg_count > 1 then do; 102 code = error_table_$too_many_args; 103 call com_err_ (code, "gcos_daemon$test", 104 "^/Usage: gcos_daemon$test directory_name"); 105 return; 106 end; 107 108 call cu_$arg_ptr (1, arg_ptr, arg_len, code); 109 if code ^= 0 then do; 110 call com_err_ (code, "gcos_daemon$test"); 111 return; 112 end; 113 114 if arg = "-wd" | arg = "-working_dir" then 115 abspath = get_wdir_ (); 116 else if substr (arg, 1, 1) = "-" 117 then do; 118 code = error_table_$badopt; 119 call com_err_ (code, "gcos_daemon$test", "^a", arg); 120 return; 121 end; 122 else do; 123 call absolute_pathname_ (arg, abspath, code); 124 if code ^= 0 then do; 125 call com_err_ (code, "gcos_daemon$test", 126 "/^a", arg); 127 return; 128 end; 129 end; 130 131 path_len = length (rtrim (abspath)); 132 133 gcos_daemon_stat_$default_home_dir = rtrim (abspath)||">Anonymous"; 134 gcos_daemon_stat_$home_root_dir = rtrim (abspath)||">gdd"; 135 gcos_daemon_stat_$input_dir = rtrim (abspath)||">input_dir"; 136 gcos_daemon_stat_$pool_dir = rtrim (abspath)||">pool_dir"; 137 gcos_daemon_stat_$root_dir = abspath; 138 gcos_daemon_stat_$default_home_dir_len = path_len + length (">Anonymous"); 139 gcos_daemon_stat_$home_root_dir_len = path_len + length (">gdd"); 140 gcos_daemon_stat_$input_dir_len = path_len + length (">input_dir"); 141 gcos_daemon_stat_$pool_dir_len = path_len + length (">pool_dir"); 142 gcos_daemon_stat_$root_dir_len = path_len; 143 144 call gcos_daemon_init_$gd_test (fatal_error); 145 go to COMMON; 146 147 148 149 /* QUIT ENTRY */ 150 151 quit_entry: entry; 152 153 call init_pointers; 154 call ios_$resetread ("user_i/o", status_stuff); 155 code = status.code; 156 if code ^= 0 157 then do; 158 call com_err_ (code, "gcos_daemon", "Error resetting user_i/o"); 159 go to GET_REQUEST; 160 end; 161 162 invocation_level = invocation_level + 1; /* bump count of times called */ 163 go to SET_QUIT; 164 165 166 /* OVERFLOW ENTRIES */ 167 168 overflow_handler: entry; 169 170 call init_pointers; 171 call ioa_ ("Record quota overflow: Input for snumb ^a deleted", gcos_daemon_stat_$snumb); 172 signal condition (goback); 173 174 abs_overflow_handler: entry; 175 176 call init_pointers; 177 call ioa_ ("******ATTENTION******^/Record quota overflow from absentee gcos job in^/^a", 178 gcos_daemon_stat2_$overflow_dir); 179 return; 180 181 COMMON: ; 182 if (fatal_error) 183 then do; 184 call com_err_ (0, "gcos_daemon", "Fatal error encountered during initialization"); 185 return; 186 end; 187 188 if (^init) /* first time called */ 189 then do; 190 init = "1"b; /* remember */ 191 cleanup_return = CLEANUP_RETURN; /* set internal static label */ 192 end; 193 194 reader_is_attached = "0"b; 195 196 input_dir = substr (gcos_daemon_stat_$input_dir, 1, gcos_daemon_stat_$input_dir_len); 197 198 /* run date deleter */ 199 200 if ^test_entry 201 then do; 202 call hcs_$make_ptr (myp, "date_deleter", "date_deleter", ddp, code); /* get pointer to date_deleter */ 203 if ddp = null /* error getting pointer */ 204 then call com_err_ (code, "gcos_daemon", "Error finding date deleter"); 205 else /* got pointer */ 206 do dir_name = input_dir, substr (gcos_daemon_stat_$pool_dir, 1, gcos_daemon_stat_$pool_dir_len), 207 substr (gcos_daemon_stat_$default_home_dir, 1, gcos_daemon_stat_$default_home_dir_len); 208 call ioa_$rsnnl ("^d", delete_interval, i, gcos_daemon_stat_$delete_interval); /* get time interval */ 209 call cu_$ptr_call (ddp, dir_name, delete_interval); 210 end; 211 end; 212 213 /* set up condition handlers */ 214 215 CLEANUP_RETURN: ; 216 217 on condition (goback) 218 begin; 219 220 invocation_level = 0; /* will bring daemon back to lowest invocation level */ 221 call ioa_ ("Cleanup invoked"); 222 go to cleanup_return; /* pop stack back to first invocation level */ 223 224 end; 225 226 SET_QUIT: ; 227 228 on condition (record_quota_overflow) 229 call gcos_daemon$overflow_handler; 230 231 on condition (quit) 232 call gcos_daemon$quit_entry; 233 234 GET_REQUEST: ; 235 236 request = " "; /* blank out request line */ 237 238 call ioa_ ("ENTER REQUEST"); /* ask for a request */ 239 240 NULL_REQUEST: ; 241 242 call ios_$read_ptr (addr (request), 120, request_len); /* read the request */ 243 if request_len = 1 /* null request */ 244 then go to NULL_REQUEST; 245 246 if substr (request, 1, 4) = "imcv" /* request to read tape */ 247 then do; 248 call gcos_read_tape_ (request, request_len - 1, test_entry); 249 go to GET_REQUEST; 250 end; 251 252 else 253 if substr (request, 1, 6) = "attach" /* request to attach card reader */ 254 then do; 255 256 if (reader_is_attached) /* card reader already attached */ 257 then call com_err_ (0, "gcos_daemon", "Card reader already attached"); 258 259 else /* card reader not yet attached */ 260 do; 261 call ios_$attach ("card_input", gcos_daemon_stat_$card_dim, "rdra", "", status_stuff); 262 code = status.code; 263 if code ^= 0 264 then do; 265 call com_err_ (code, "gcos_daemon", "Error attaching card reader"); 266 go to GET_REQUEST; 267 end; 268 else 269 reader_is_attached = "1"b; 270 end; 271 272 end; 273 274 else 275 if substr (request, 1, 4) = "read" /* request to block on card reader */ 276 then do; 277 278 if (^reader_is_attached) /* card reader isn't attached yet */ 279 then do; 280 call com_err_ (0, "gcos_daemon", "Card reader is not attached"); 281 go to GET_REQUEST; 282 end; 283 284 else do; /* reader is attached, prepare to read */ 285 code = 0; 286 eof_found = "0"b; 287 do while (code = 0 & ^eof_found); 288 call gcos_read_cards_ ("card_input", test_entry, eof_found, code); /* pass request on */ 289 end; 290 end; 291 end; 292 293 else 294 if substr (request, 1, 5) = "abort" /* request to abort current job */ 295 then do; 296 297 if invocation_level = 0 /* at lowest invocation level */ 298 then do; 299 call ioa_ ("You are at command level"); 300 go to GET_REQUEST; 301 end; 302 303 signal condition (goback); 304 305 end; 306 307 else 308 if substr (request, 1, 6) = "detach" /* request to detach card reader */ 309 then do; 310 311 if (^reader_is_attached) /* reader is not attached */ 312 then do; 313 call com_err_ (0, "gcos_daemon", "Card reader is not attached"); 314 go to GET_REQUEST; 315 end; 316 317 call detach; /* detach card reader */ 318 if code = 0 /* successful detach */ 319 then reader_is_attached = "0"b; 320 321 end; 322 323 else 324 if substr (request, 1, 7) = "re_init" /* request to re-initialize process */ 325 then do; 326 327 RE_INIT: ; 328 if (reader_is_attached) /* card reader is attached */ 329 then call detach; 330 331 call new_proc; /* create a new process */ 332 333 end; 334 335 else 336 if substr (request, 1, 6) = "logout" /* request to log process out */ 337 then do; 338 339 if (reader_is_attached) /* card reader is attached */ 340 then call detach; 341 342 call logout; /* log daemon out */ 343 344 end; 345 346 else 347 if substr (request, 1, 5) = "admin" /* request to enter admin mode */ 348 then do; 349 350 on quit system; /* take away control of quits */ 351 revert condition (record_quota_overflow); /* and record quota overflows */ 352 call user_info_ (name, project, account); 353 if project = "SysDaemon" 354 then do; 355 call hcs_$initiate ( 356 substr (gcos_daemon_stat_$sysdir, 1, gcos_daemon_stat_$sysdir_len), 357 "communications", "", 0, 1, com_p, code); 358 if com_p ^= null then do; 359 if communications.admin_word = "*" then go to enter_admin; 360 call ioa_ ("Password:"); 361 call iox_$control (iox_$user_io, "printer_off", null, ioxcode); 362 call iox_$get_line (iox_$user_io, addr (request), 120, i, ioxcode); 363 call iox_$control (iox_$user_io, "printer_on", null, ioxcode); 364 w_password = substr (request, 1, i-1); /* Get password. */ 365 if w_password = communications.admin_word then go to enter_admin; 366 call com_err_ (0, "gcos_daemon", "password incorrect"); 367 go to xadmin; 368 end; 369 else call com_err_ (code, "gcos_daemon", "Error in initiating communications segment"); 370 end; 371 372 enter_admin: ; 373 call enter_admin_mode_ (); /* Call Multics listener. */ 374 375 xadmin: ; /* Get here on "ame" command. */ 376 call change_wdir_ (input_dir, code); /* make sure in proper dir */ 377 if code ^= 0 /* can't do it */ 378 then call com_err_ (code, "gcos_daemon", "Error changing to ^a", input_dir); 379 go to SET_QUIT; 380 381 end; 382 383 else 384 if substr (request, 1, 3) = "smq" /* request to reset maximum queue priority */ 385 then do; 386 387 code = 0; /* prevents spurious message printing */ 388 i = index (request, " "); /* find first blank in request */ 389 390 if i > request_len /* no blank: no second argument */ 391 then do; 392 NO_QUEUE: ; 393 call com_err_ (0, "gcos_daemon", "Missing or invalid queue number in smq request"); 394 go to GET_REQUEST; 395 end; 396 397 do j = i to request_len while /* find beginning of argument */ 398 (substr (request, j, 1) = " "); 399 end; 400 if j > request_len /* no second argument */ 401 then go to NO_QUEUE; 402 403 max_queue = cv_dec_check_ (substr (request, j, request_len-j), code); 404 if code ^= 0 /* invalid queue specification */ 405 then go to NO_QUEUE; 406 407 call gcos_queue_job_$set_priority (max_queue); 408 409 end; 410 411 else 412 if substr (request, 1, 5) = "start" /* request to return from quit */ 413 then do; 414 415 if invocation_level = 0 /* at lowest level */ 416 then do; 417 call ioa_ ("You are at command level"); 418 go to GET_REQUEST; 419 end; 420 invocation_level = invocation_level - 1; /* decrement count of stacked invocations */ 421 return; /* and return */ 422 end; 423 424 else 425 if substr (request, 1, 6) = "return" /* request to return to command level */ 426 then do; 427 428 if (^test_entry) /* not allowed for daemon itself */ 429 then go to NOT_RECOGNIZED; 430 431 goto ALL_DONE; 432 433 end; 434 435 else 436 if substr (request, 1, 1) = "." /* user wants to know who he is */ 437 then call ioa_ ("gcos_daemon"); 438 439 else if substr (request, 1, 1) = "?" 440 | substr (request, 1, 4) = "help" 441 then call ioa_ ( "^/REQUEST^-DESCRIPTION" 442 ||"^2/abort^-Abort current job" 443 ||"^/admin^-Enter 'admin' mode" 444 ||"^/attach^-Attach the card reader" 445 ||"^/detach^-Detach the card reader" 446 ||"^/help^-Print this list" 447 ||"^/imcv^-Read from tape" 448 ||"^/logout^-Log out the Daemon" 449 ||"^/read^-Read from the card reader" 450 ||"^/return^-Return to command level" 451 ||"^/^-(test entry only)" 452 ||"^/re_init^-Reinitialize the Daemon" 453 ||"^/smq N^-Set max priority abs queue for Daemon to N" 454 ||"^/^-(Default is 1)" 455 ||"^/start^-Restart from QUIT" 456 ||"^/.^-Tell Daemon to identify itself" 457 ||"^/?^-Print this list" 458 ||"^/"); 459 460 else /* request not recognized */ 461 462 NOT_RECOGNIZED: 463 464 call com_err_ (0, "gcos_daemon", "Unrecognized request:^-^a", request); 465 466 go to GET_REQUEST; 467 468 /* INTERNAL PROCEDURES */ 469 470 471 detach: proc; /* procedure to detach devices */ 472 473 call ios_$detach ("card_input", "rdra", "", status_stuff); 474 code = status.code; 475 if code ^= 0 476 then call com_err_ (code, "gcos_daemon", "Error detaching card reader"); 477 return; 478 end detach; 479 480 481 init_pointers: proc; 482 myp = addr (gcos_daemon$); /* pointer to this proc */ 483 sp = addr (status_stuff); /* overlay pointer for ios_ status */ 484 return; 485 end init_pointers; 486 487 ALL_DONE: ; 488 489 return; /* Bail out from the Daemon. */ 490 491 /* fixed bin */ 492 /* ----- --- */ 493 494 dcl ( 495 gcos_daemon_stat_$default_home_dir_len ext, /* length of default home dir name */ 496 gcos_daemon_stat_$delete_interval ext, /* days afted which to delete segment */ 497 gcos_daemon_stat_$input_dir_len ext, /* length of input directory name */ 498 gcos_daemon_stat_$pool_dir_len ext, /* length of pool dir name */ 499 gcos_daemon_stat_$sysdir_len ext, /* length of sysdir name */ 500 gcos_daemon_stat_$home_root_dir_len ext, /* length of home root dir name */ 501 gcos_daemon_stat_$root_dir_len ext, /* length of root dir name */ 502 i, /* random variable */ 503 invocation_level int static init (0), /* number of stacked calls to quit entry */ 504 j, /* random variable */ 505 max_queue, /* maximum priority queue for absentee, output */ 506 arg_count, /* total number of args in cmd line */ 507 arg_len, /* size in chars of last arg retrieved with cu_$arg_ptr */ 508 path_len, /* length of root dir name specified by gcos_test entry */ 509 request_len /* length of request typed by operator */ 510 ) fixed bin aligned; 511 512 dcl ( 513 ioxcode, /* error code from iox */ 514 code, /* error code */ 515 error_table_$noarg ext, 516 error_table_$too_many_args ext, 517 error_table_$badopt ext 518 ) fixed bin (35) aligned; 519 520 /* bit strings */ 521 /* --- ------- */ 522 523 dcl ( 524 fatal_error, /* ON when fatal error occurs during initialization */ 525 eof_found, /* ON when eof is found reading cards */ 526 init int static init ("0"b), /* internal static initialization switch */ 527 reader_is_attached int static, /* ON when card reader is attached */ 528 test_entry int static /* ON when called by user */ 529 ) bit (1) aligned; 530 531 dcl ( 532 status_stuff /* return location for ios_ status */ 533 ) bit (72) aligned; 534 535 /* character strings */ 536 /* --------- ------- */ 537 538 dcl ( 539 gcos_daemon_stat_$snumb ext 540 ) char (6) aligned; 541 542 dcl ( 543 w_password, /* Password for entering admin mode. */ 544 delete_interval init (""), /* days after which to delete segment */ 545 gcos_daemon_stat_$card_dim ext /* variable dim name for debugging */ 546 ) char (8) aligned; 547 548 dcl ( 549 name, /* name returned by user_info_ */ 550 project, /* project returned by user_info_ */ 551 account /* account returned by user_info_ */ 552 ) char (32) aligned; 553 554 dcl ( 555 request /* request from operator */ 556 ) char (120) aligned; 557 558 dcl ( 559 dir_name, /* loop dir name */ 560 gcos_daemon_stat2_$overflow_dir ext, 561 gcos_daemon_stat_$default_home_dir ext, /* default home dir for absentee jobs */ 562 gcos_daemon_stat_$input_dir ext, /* input directory name */ 563 gcos_daemon_stat_$pool_dir ext, /* pool directory name */ 564 gcos_daemon_stat_$sysdir ext, /* sysdir directory name */ 565 gcos_daemon_stat_$home_root_dir ext, /* home root dir name */ 566 gcos_daemon_stat_$root_dir ext, /* root dir name */ 567 input_dir internal static /* input directory name (internal) */ 568 ) char (168) aligned; 569 570 dcl abspath char (168); /* absolute path for root dir given by gcos_test entry */ 571 572 /* pointers */ 573 /* -------- */ 574 575 dcl ( 576 arg_ptr, /* returned by cu_$arg_ptr */ 577 com_p, /* pointer to sc1>communications */ 578 iox_$user_io ext, 579 ddp, /* pointer to date_deleter proc */ 580 myp, /* pointer to this proc */ 581 sp /* overlay pointer for ios_ status */ 582 ) pointer aligned; 583 584 /* built in functions */ 585 /* ----- -- --------- */ 586 587 dcl ( 588 addr, 589 index, 590 null, 591 substr 592 ) builtin; 593 594 /* masks */ 595 /* ----- */ 596 597 dcl arg char (arg_len) based (arg_ptr); 598 599 dcl 1 status aligned based (sp), /* return status from ios_ */ 600 2 code fixed bin (35); /* error code portion */ 601 602 /* labels */ 603 /* ------ */ 604 605 dcl ( 606 cleanup_return 607 ) label int static; 608 609 610 /* conditions */ 611 /* ---------- */ 612 613 dcl ( 614 goback, 615 quit, 616 record_quota_overflow 617 ) condition; 618 619 /* entries */ 620 /* ------- */ 621 622 dcl change_wdir_ ext entry (char (168) aligned, fixed bin (35) aligned); 623 dcl com_err_ ext entry options (variable); 624 dcl cu_$ptr_call ext entry options (variable); 625 dcl cv_dec_check_ ext entry (char (*), fixed bin (35) aligned) returns (fixed bin aligned); 626 dcl default_handler_$set ext entry (entry); 627 dcl enter_admin_mode_ ext entry; 628 dcl gcos_daemon$ entry; 629 dcl gcos_daemon$overflow_handler ext entry; 630 dcl gcos_daemon$quit_entry ext entry; 631 dcl gcos_daemon_init_ ext entry (bit (1) aligned); 632 dcl gcos_daemon_init_$gd_test ext entry (bit (1) aligned); 633 dcl gcos_queue_job_$set_priority ext entry (fixed bin aligned); 634 dcl gcos_read_cards_ ext entry (char (12) aligned, bit (1) aligned, bit (1) aligned, fixed bin (35) aligned); 635 dcl gcos_read_tape_ ext entry (char (120) aligned, fixed bin aligned, bit (1) aligned); 636 dcl hcs_$make_ptr ext entry (ptr aligned, char (*), char (*), ptr aligned, fixed bin (35) aligned); 637 dcl ioa_ ext entry options (variable); 638 dcl ioa_$rsnnl ext entry options (variable); 639 dcl ios_$attach ext entry (char (*) aligned, char (*) aligned, char (*) aligned, char (*) aligned, bit (72) aligned); 640 dcl ios_$detach ext entry (char (*) aligned, char (*) aligned, char (*) aligned, bit (72) aligned); 641 dcl ios_$read_ptr ext entry (ptr aligned, fixed bin aligned, fixed bin aligned); 642 dcl ios_$resetread ext entry (char (*) aligned, bit (72) aligned); 643 dcl logout ext entry; 644 dcl new_proc ext entry; 645 dcl standard_default_handler_ ext entry; 646 dcl user_info_ ext entry (char (*) aligned, char (*) aligned, char (*) aligned); 647 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 648 dcl iox_$get_line entry (ptr, ptr, fixed bin, fixed bin, fixed bin (35)); 649 dcl hcs_$initiate entry (char (*) aligned, char (*) aligned, char (*) aligned, fixed bin (1), fixed bin (2), ptr, fixed bin (35)); 650 dcl cu_$arg_count entry (fixed bin); 651 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)); 652 dcl absolute_pathname_ entry (char (*), char (*), fixed bin (35)); 653 dcl get_wdir_ entry returns (char (168)); 654 1 1 /* *********************************************************** 1 2* * * 1 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 1 4* * * 1 5* *********************************************************** */ 1 6 /* Structure of "communications" segment */ 1 7 1 8 dcl communications_version_1 fixed bin init (1) int static options (constant); 1 9 1 10 dcl 1 communications based (com_p) aligned, /* Administrators and answering service use it */ 1 11 2 admin_word char (8) unal, /* Operator password for admin mode */ 1 12 2 ppmdl fixed bin, /* Per-process master drum limit */ 1 13 2 ppmdl_daemon fixed bin, /* ... for daemon */ 1 14 2 ssdq fixed bin, /* Process directory disk quota */ 1 15 2 ssdq_daemon fixed bin, /* ... for daemon */ 1 16 2 junk (4) fixed bin, 1 17 2 version fixed bin, 1 18 2 admin_sw fixed bin, /* Length of administrator's command */ 1 19 2 admin_comment char (80) unal, /* any old comment */ 1 20 2 admin_sender char (32) unal, /* Who sent it */ 1 21 2 as_procid bit (36), /* Process id of answering service */ 1 22 2 admin_com_chn fixed bin (71), /* Event-call channel for admin command */ 1 23 2 admin_com char (4000) unaligned; /* actual command line */ 1 24 1 25 /* end of "communications" */ 655 656 657 end gcos_daemon; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/19/82 0853.2 gcos_daemon.pl1 >spec>on>11/19/82>gcos_daemon.pl1 655 1 06/10/82 1045.1 communications.incl.pl1 >ldd>include>communications.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. absolute_pathname_ 000236 constant entry external dcl 652 ref 123 abspath 000262 automatic char(168) unaligned dcl 570 set ref 114* 123* 131 133 134 135 136 137 account 000142 automatic char(32) dcl 548 set ref 352* addr builtin function dcl 587 ref 242 242 362 362 482 483 admin_word based char(8) level 2 packed unaligned dcl 1-10 ref 359 365 arg based char unaligned dcl 597 set ref 114 114 116 119* 123* 125* arg_count 000103 automatic fixed bin(17,0) dcl 494 set ref 93* 94 101 arg_len 000104 automatic fixed bin(17,0) dcl 494 set ref 108* 114 114 116 119 119 123 123 125 125 arg_ptr 000334 automatic pointer dcl 575 set ref 108* 114 114 116 119 123 125 change_wdir_ 000142 constant entry external dcl 622 ref 376 cleanup_return 000066 internal static label variable dcl 605 set ref 191* 222 code 000110 automatic fixed bin(35,0) dcl 512 in procedure "gcos_daemon" set ref 95* 96* 102* 103* 108* 109 110* 118* 119* 123* 124 125* 155* 156 158* 202* 203* 262* 263 265* 285* 287 288* 318 355* 369* 376* 377 377* 387* 403* 404 474* 475 475* code based fixed bin(35,0) level 2 in structure "status" dcl 599 in procedure "gcos_daemon" ref 155 262 474 com_err_ 000144 constant entry external dcl 623 ref 96 103 110 119 125 158 184 203 256 265 280 313 366 369 377 393 460 475 com_p 000336 automatic pointer dcl 575 set ref 355* 358 359 365 communications based structure level 1 dcl 1-10 cu_$arg_count 000232 constant entry external dcl 650 ref 93 cu_$arg_ptr 000234 constant entry external dcl 651 ref 108 cu_$ptr_call 000146 constant entry external dcl 624 ref 209 cv_dec_check_ 000150 constant entry external dcl 625 ref 403 ddp 000340 automatic pointer dcl 575 set ref 202* 203 209* default_handler_$set 000152 constant entry external dcl 626 ref 25 delete_interval 000120 automatic char(8) initial dcl 542 set ref 208* 209* 542* dir_name 000210 automatic char(168) dcl 558 set ref 205* 209* enter_admin_mode_ 000154 constant entry external dcl 627 ref 373 eof_found 000112 automatic bit(1) dcl 523 set ref 286* 287 288* error_table_$badopt 000114 external static fixed bin(35,0) dcl 512 ref 118 error_table_$noarg 000110 external static fixed bin(35,0) dcl 512 ref 95 error_table_$too_many_args 000112 external static fixed bin(35,0) dcl 512 ref 102 fatal_error 000111 automatic bit(1) dcl 523 set ref 26* 144* 182 gcos_daemon$ 000156 constant entry external dcl 628 set ref 482 gcos_daemon$overflow_handler 000160 constant entry external dcl 629 ref 228 gcos_daemon$quit_entry 000162 constant entry external dcl 630 ref 231 gcos_daemon_init_ 000164 constant entry external dcl 631 ref 26 gcos_daemon_init_$gd_test 000166 constant entry external dcl 632 ref 144 gcos_daemon_stat2_$overflow_dir 000122 external static char(168) dcl 558 set ref 177* gcos_daemon_stat_$card_dim 000120 external static char(8) dcl 542 set ref 261* gcos_daemon_stat_$default_home_dir 000124 external static char(168) dcl 558 set ref 133* 205 gcos_daemon_stat_$default_home_dir_len 000072 external static fixed bin(17,0) dcl 494 set ref 138* 205 gcos_daemon_stat_$delete_interval 000074 external static fixed bin(17,0) dcl 494 set ref 208* gcos_daemon_stat_$home_root_dir 000134 external static char(168) dcl 558 set ref 134* gcos_daemon_stat_$home_root_dir_len 000104 external static fixed bin(17,0) dcl 494 set ref 139* gcos_daemon_stat_$input_dir 000126 external static char(168) dcl 558 set ref 135* 196 gcos_daemon_stat_$input_dir_len 000076 external static fixed bin(17,0) dcl 494 set ref 140* 196 gcos_daemon_stat_$pool_dir 000130 external static char(168) dcl 558 set ref 136* 205 gcos_daemon_stat_$pool_dir_len 000100 external static fixed bin(17,0) dcl 494 set ref 141* 205 gcos_daemon_stat_$root_dir 000136 external static char(168) dcl 558 set ref 137* gcos_daemon_stat_$root_dir_len 000106 external static fixed bin(17,0) dcl 494 set ref 142* gcos_daemon_stat_$snumb 000116 external static char(6) dcl 538 set ref 171* gcos_daemon_stat_$sysdir 000132 external static char(168) dcl 558 ref 355 355 gcos_daemon_stat_$sysdir_len 000102 external static fixed bin(17,0) dcl 494 ref 355 355 gcos_queue_job_$set_priority 000170 constant entry external dcl 633 ref 407 gcos_read_cards_ 000172 constant entry external dcl 634 ref 288 gcos_read_tape_ 000174 constant entry external dcl 635 ref 248 get_wdir_ 000240 constant entry external dcl 653 ref 114 goback 000346 stack reference condition dcl 613 ref 172 217 303 hcs_$initiate 000230 constant entry external dcl 649 ref 355 hcs_$make_ptr 000176 constant entry external dcl 636 ref 202 i 000100 automatic fixed bin(17,0) dcl 494 set ref 208* 362* 364 388* 390 397 index builtin function dcl 587 ref 388 init 000011 internal static bit(1) initial dcl 523 set ref 188 190* input_dir 000014 internal static char(168) dcl 558 set ref 196* 205 376* 377* invocation_level 000010 internal static fixed bin(17,0) initial dcl 494 set ref 162* 162 220* 297 415 420* 420 ioa_ 000200 constant entry external dcl 637 ref 171 177 221 238 299 360 417 435 439 ioa_$rsnnl 000202 constant entry external dcl 638 ref 208 ios_$attach 000204 constant entry external dcl 639 ref 261 ios_$detach 000206 constant entry external dcl 640 ref 473 ios_$read_ptr 000210 constant entry external dcl 641 ref 242 ios_$resetread 000212 constant entry external dcl 642 ref 154 iox_$control 000224 constant entry external dcl 647 ref 361 363 iox_$get_line 000226 constant entry external dcl 648 ref 362 iox_$user_io 000140 external static pointer dcl 575 set ref 361* 362* 363* ioxcode 000107 automatic fixed bin(35,0) dcl 512 set ref 361* 362* 363* j 000101 automatic fixed bin(17,0) dcl 494 set ref 397* 397* 400 403 403 403 403 logout 000214 constant entry external dcl 643 ref 342 max_queue 000102 automatic fixed bin(17,0) dcl 494 set ref 403* 407* myp 000342 automatic pointer dcl 575 set ref 202* 482* name 000122 automatic char(32) dcl 548 set ref 352* new_proc 000216 constant entry external dcl 644 ref 331 null builtin function dcl 587 ref 203 358 361 361 363 363 path_len 000105 automatic fixed bin(17,0) dcl 494 set ref 131* 138 139 140 141 142 project 000132 automatic char(32) dcl 548 set ref 352* 353 quit 000354 stack reference condition dcl 613 ref 231 350 reader_is_attached 000012 internal static bit(1) dcl 523 set ref 194* 256 268* 278 311 318* 328 339 record_quota_overflow 000362 stack reference condition dcl 613 ref 228 351 request 000152 automatic char(120) dcl 554 set ref 236* 242 242 246 248* 252 274 293 307 323 335 346 362 362 364 383 388 397 403 403 411 424 435 439 439 460* request_len 000106 automatic fixed bin(17,0) dcl 494 set ref 242* 243 248 390 397 400 403 403 sp 000344 automatic pointer dcl 575 set ref 155 262 474 483* standard_default_handler_ 000220 constant entry external dcl 645 ref 25 25 status based structure level 1 dcl 599 status_stuff 000114 automatic bit(72) dcl 531 set ref 154* 261* 473* 483 substr builtin function dcl 587 ref 116 196 205 205 246 252 274 293 307 323 335 346 355 355 364 383 397 403 403 411 424 435 439 439 test_entry 000013 internal static bit(1) dcl 523 set ref 24* 91* 200 248* 288* 428 user_info_ 000222 constant entry external dcl 646 ref 352 w_password 000116 automatic char(8) dcl 542 set ref 364* 365 NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. communications_version_1 internal static fixed bin(17,0) initial dcl 1-8 NAMES DECLARED BY EXPLICIT CONTEXT. ALL_DONE 003610 constant label dcl 487 ref 431 CLEANUP_RETURN 002011 constant label dcl 215 ref 191 COMMON 001535 constant label dcl 181 ref 27 145 GET_REQUEST 002113 constant label dcl 234 ref 159 249 266 281 300 314 394 418 466 NOT_RECOGNIZED 003551 constant label dcl 460 ref 428 NO_QUEUE 003251 constant label dcl 392 ref 400 404 NULL_REQUEST 002136 constant label dcl 240 ref 243 RE_INIT 002532 constant label dcl 327 SET_QUIT 002050 constant label dcl 226 set ref 163 379 abs_overflow_handler 001505 constant entry external dcl 174 detach 003612 constant entry internal dcl 471 ref 317 328 339 enter_admin 003152 constant label dcl 372 ref 359 365 gcos_daemon 000621 constant entry external dcl 20 init_pointers 003702 constant entry internal dcl 481 ref 23 90 153 170 176 overflow_handler 001451 constant entry external dcl 168 quit_entry 001363 constant entry external dcl 151 test 000655 constant entry external dcl 32 xadmin 003160 constant label dcl 375 ref 367 NAMES DECLARED BY CONTEXT OR IMPLICATION. length builtin function ref 131 138 139 140 141 rtrim builtin function ref 131 133 134 135 136 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4564 5026 3717 4574 Length 5370 3717 242 326 645 62 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME gcos_daemon 556 external procedure is an external procedure. on unit on line 217 74 on unit on unit on line 228 64 on unit on unit on line 231 64 on unit on unit on line 350 64 on unit detach internal procedure shares stack frame of external procedure gcos_daemon. init_pointers internal procedure shares stack frame of external procedure gcos_daemon. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 invocation_level gcos_daemon 000011 init gcos_daemon 000012 reader_is_attached gcos_daemon 000013 test_entry gcos_daemon 000014 input_dir gcos_daemon 000066 cleanup_return gcos_daemon STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME gcos_daemon 000100 i gcos_daemon 000101 j gcos_daemon 000102 max_queue gcos_daemon 000103 arg_count gcos_daemon 000104 arg_len gcos_daemon 000105 path_len gcos_daemon 000106 request_len gcos_daemon 000107 ioxcode gcos_daemon 000110 code gcos_daemon 000111 fatal_error gcos_daemon 000112 eof_found gcos_daemon 000114 status_stuff gcos_daemon 000116 w_password gcos_daemon 000120 delete_interval gcos_daemon 000122 name gcos_daemon 000132 project gcos_daemon 000142 account gcos_daemon 000152 request gcos_daemon 000210 dir_name gcos_daemon 000262 abspath gcos_daemon 000334 arg_ptr gcos_daemon 000336 com_p gcos_daemon 000340 ddp gcos_daemon 000342 myp gcos_daemon 000344 sp gcos_daemon THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return tra_label_var signal enable shorten_stack ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ change_wdir_ com_err_ cu_$arg_count cu_$arg_ptr cu_$ptr_call cv_dec_check_ default_handler_$set enter_admin_mode_ gcos_daemon$ gcos_daemon$overflow_handler gcos_daemon$quit_entry gcos_daemon_init_ gcos_daemon_init_$gd_test gcos_queue_job_$set_priority gcos_read_cards_ gcos_read_tape_ get_wdir_ hcs_$initiate hcs_$make_ptr ioa_ ioa_$rsnnl ios_$attach ios_$detach ios_$read_ptr ios_$resetread iox_$control iox_$get_line logout new_proc standard_default_handler_ user_info_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$noarg error_table_$too_many_args gcos_daemon_stat2_$overflow_dir gcos_daemon_stat_$card_dim gcos_daemon_stat_$default_home_dir gcos_daemon_stat_$default_home_dir_len gcos_daemon_stat_$delete_interval gcos_daemon_stat_$home_root_dir gcos_daemon_stat_$home_root_dir_len gcos_daemon_stat_$input_dir gcos_daemon_stat_$input_dir_len gcos_daemon_stat_$pool_dir gcos_daemon_stat_$pool_dir_len gcos_daemon_stat_$root_dir gcos_daemon_stat_$root_dir_len gcos_daemon_stat_$snumb gcos_daemon_stat_$sysdir gcos_daemon_stat_$sysdir_len iox_$user_io LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 542 000614 20 000620 23 000627 24 000630 25 000632 26 000644 27 000653 32 000654 90 000663 91 000664 93 000667 94 000675 95 000677 96 000702 98 000733 101 000734 102 000736 103 000741 105 000772 108 000773 109 001012 110 001014 111 001037 114 001040 116 001062 118 001066 119 001071 120 001130 123 001131 124 001155 125 001157 127 001217 131 001220 133 001232 134 001253 135 001273 136 001311 137 001330 138 001335 139 001340 140 001343 141 001346 142 001351 144 001353 145 001361 151 001362 153 001371 154 001372 155 001411 156 001413 158 001414 159 001444 162 001445 163 001447 168 001450 170 001457 171 001460 172 001500 174 001503 176 001513 177 001514 179 001534 181 001535 182 001536 184 001541 185 001572 188 001573 190 001576 191 001600 194 001603 196 001604 200 001611 202 001614 203 001654 205 001711 208 001717 209 001745 210 001766 215 002011 217 002012 220 002026 221 002027 222 002045 226 002050 228 002051 231 002072 234 002113 236 002114 238 002117 240 002136 242 002137 243 002156 246 002161 248 002164 249 002201 252 002202 256 002207 261 002243 262 002301 263 002303 265 002304 266 002334 268 002335 272 002340 274 002341 278 002344 280 002347 281 002377 285 002400 286 002401 287 002402 288 002407 289 002427 291 002430 293 002431 297 002436 299 002441 300 002454 303 002455 305 002460 307 002461 311 002464 313 002467 314 002517 317 002520 318 002521 321 002525 323 002526 327 002532 328 002533 331 002537 333 002544 335 002545 339 002550 342 002554 344 002561 346 002562 350 002565 351 002602 352 002603 353 002622 355 002626 358 002710 359 002715 360 002725 361 002742 362 002775 363 003020 364 003052 365 003057 366 003065 367 003121 369 003122 372 003152 373 003153 375 003160 376 003161 377 003172 379 003230 383 003231 387 003235 388 003236 390 003247 392 003251 393 003252 394 003303 397 003304 399 003317 400 003321 403 003323 404 003356 407 003361 409 003370 411 003371 415 003374 417 003377 418 003412 420 003413 421 003415 424 003416 428 003421 431 003425 435 003426 439 003451 460 003551 466 003607 487 003610 489 003611 471 003612 473 003613 474 003646 475 003650 477 003701 481 003702 482 003703 483 003706 484 003710 ----------------------------------------------------------- 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