COMPILATION LISTING OF SEGMENT ssu_invocation_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/04/87 1640.1 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 8 /* Subsystem invocation manager */ 9 10 /* Created: by W. Olin Sibert */ 11 /* Modified: 15 February 1982 by G. Palter to add create_standalone and manage invocation lists without requiring the 12* caller to supply an invocation_list_ptr */ 13 /* Modified: 25 February 1982 by G. Palter to insure create_invocation is invoked with the proper number of arguments */ 14 /* Modified: 26 May 1982 by G. Palter to manage request processor options */ 15 /* Modified: August 1982 by Jay Pattin to setup temporaries manager before request table manager */ 16 /* Modified: 6 November 1984 by G. Palter for version 3 SCIs */ 17 18 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 19 20 21 ssu_invocation_: 22 procedure (); 23 24 return; /* not an entrypoint */ 25 26 27 /* Parameters */ 28 29 dcl P_sci_ptr pointer parameter; 30 31 dcl P_code fixed binary (35) parameter; /* create, standalone_invocation */ 32 33 dcl P_subsystem_name character (*) parameter; /* create: name of subsystem */ 34 dcl P_subsystem_version character (*) parameter; /* create: version # of subsystem */ 35 dcl P_info_ptr pointer parameter; /* create, set_info_ptr: -> subsystem's internal data */ 36 dcl P_request_table_ptr pointer parameter; /* create: -> initial request table (if any) */ 37 dcl P_info_dir character (*) parameter; /* create: initial info directory (if any) */ 38 39 dcl P_command_name character (*) parameter; /* create_standalone: name of command/AF */ 40 dcl P_command_version character (*) parameter; /* create_standalone: version # of the command/AF */ 41 dcl P_arg_list_ptr pointer parameter; /* create_standalone: -> the command/AF's argument list */ 42 dcl P_abort_procedure entry () variable parameter; /* create_standalone: entry to call on ssu_$abort_* */ 43 44 dcl P_this_level fixed binary parameter; /* get_invocation_count: set to level of this invocation */ 45 dcl P_max_level fixed binary parameter; /* get_invocation_count: set to maximum level used */ 46 47 dcl P_new_sci_ptr pointer parameter; /* get_level_n_sci_ptr: set -> SCI of requested level */ 48 dcl P_new_info_ptr pointer parameter; /* get_level_n_sci_ptr: set -> requested level's info */ 49 50 51 /* Active subsystem invocation lists known by the utilties: invocations are grouped by subsystem name and version */ 52 53 dcl 1 ilie aligned based (ilie_ptr), /* a single active subsystem's invocation list */ 54 2 subsystem_name character (32) unaligned, 55 2 subsystem_version character (32) unaligned, 56 2 first_sci_ptr pointer, /* -> SCI of first invocation of this subsystem */ 57 2 last_sci_ptr pointer, /* -> SCI of last invocation of this subsystem */ 58 2 max_level fixed binary, /* level # of last invocation */ 59 2 pad bit (36); 60 dcl ilie_ptr pointer; 61 62 dcl 1 static_ili aligned internal static, /* room for 16 invocation lists without having to allocate */ 63 2 header, 64 3 n_ilies fixed binary initial (16), 65 3 pad bit (36) initial (""b), 66 2 ilies (16) like ilie; 67 68 dcl 1 ili aligned based (ili_ptr), /* references are made to this structure, however */ 69 2 header like static_ili.header, 70 2 ilies (ili_n_ilies refer (ili.n_ilies)) like ilie; 71 dcl ili_ptr pointer internal static initial (null ()); 72 dcl ili_n_ilies fixed binary; 73 74 75 /* Local copies of parameters */ 76 77 dcl arg_list_ptr pointer; 78 79 dcl code fixed binary (35); 80 81 82 /* Remaining declarations */ 83 84 dcl system_area area based (system_area_ptr); 85 dcl system_area_ptr pointer; 86 87 dcl n_arguments fixed binary; 88 89 dcl next_sci_ptr pointer; 90 91 dcl return_name character (72) varying; 92 93 dcl SSU_CREATE_INVOCATION character (32) static options (constant) initial ("ssu_$create_invocation"); 94 dcl CANT_RESTART character (1) static options (constant) initial ("s"); 95 96 dcl error_table_$badcall fixed binary (35) external; 97 dcl error_table_$wrong_no_of_args fixed binary (35) external; 98 99 dcl ssu_$null_entry entry () variable external; 100 dcl ssu_$null_label label variable external; 101 102 dcl cu_$arg_count entry (fixed binary); 103 dcl cu_$af_return_arg_rel entry (fixed binary, pointer, fixed binary (21), fixed binary (35), pointer); 104 dcl get_system_free_area_ entry () returns (pointer); 105 dcl hcs_$fs_get_path_name entry (pointer, character (*), fixed binary, character (*), fixed binary (35)); 106 dcl hcs_$fs_get_seg_ptr entry (character (*), pointer, fixed binary (35)); 107 dcl hcs_$initiate 108 entry (character (*), character (*), character (*), fixed binary (1), fixed binary (2), pointer, 109 fixed binary (35)); 110 dcl ssu_$add_info_dir entry (pointer, character (*), fixed binary, fixed binary (35)); 111 dcl ssu_$add_request_table entry (pointer, pointer, fixed binary, fixed binary (35)); 112 dcl ssu_info_mgr_$init_info_dirs entry (pointer); 113 dcl ssu_info_mgr_$term_info_dirs entry (pointer); 114 dcl ssu_procedure_mgr_$set_all_default entry (pointer); 115 dcl ssu_request_mgr_$init_request_tables entry (pointer); 116 dcl ssu_request_mgr_$term_request_tables entry (pointer); 117 dcl ssu_request_processor_$init_rp_options entry (pointer); 118 dcl ssu_request_processor_$term_rp_options entry (pointer); 119 dcl ssu_temp_mgr_$release_everything entry (pointer); 120 dcl sub_err_ entry () options (variable); 121 dcl term_$single_refname entry (character (*), fixed binary (35)); 122 123 dcl (addr, codeptr, null, pointer, rtrim, stackframeptr, string) builtin; 124 125 create: 126 entry (P_subsystem_name, P_subsystem_version, P_info_ptr, P_request_table_ptr, P_info_dir, P_sci_ptr, P_code); 127 128 call cu_$arg_count (n_arguments); /* check for old-style call */ 129 if n_arguments ^= 7 then do; 130 RESIGNAL_WRONG_NO_OF_ARGS: 131 call sub_err_ (error_table_$wrong_no_of_args, SSU_CREATE_INVOCATION, CANT_RESTART, null (), (0), 132 "^a expects 7 arguments; ^d were supplied.", SSU_CREATE_INVOCATION, n_arguments); 133 go to RESIGNAL_WRONG_NO_OF_ARGS; 134 end; 135 136 if P_subsystem_name = "" then do; /* you've got to be kidding */ 137 P_code = error_table_$badcall; 138 return; 139 end; 140 141 P_sci_ptr = null (); 142 143 system_area_ptr = get_system_free_area_ (); 144 145 call switch_ssu_refnames (); /* make sure we get proper version of everything */ 146 147 allocate sci in (system_area) set (sci_ptr); 148 149 sci.version = SCI_VERSION_3; /* make it appear legitimate */ 150 sci.parent_area_ptr = system_area_ptr; /* for possible later allocation and freeing */ 151 152 sci.subsystem_name = P_subsystem_name; 153 sci.subsystem_version = P_subsystem_version; 154 sci.info_ptr = P_info_ptr; /* copy info from parameters */ 155 sci.standalone_abort_entry = ssu_$null_entry; 156 string (sci.global_info.flags) = ""b; /* this is right */ 157 158 sci.temp_info_ptr = null (); /* no temporaries yet */ 159 160 call ssu_request_mgr_$init_request_tables (sci_ptr); 161 if P_request_table_ptr ^= null () then do; /* user supplied an initial request table */ 162 call ssu_$add_request_table (sci_ptr, P_request_table_ptr, 1, P_code); 163 if P_code ^= 0 then do; 164 call ssu_request_mgr_$term_request_tables (sci_ptr); 165 free sci in (system_area); 166 return; 167 end; 168 end; 169 170 call ssu_request_processor_$init_rp_options (sci_ptr); 171 172 sci.request_processor_info.abort_line_label = ssu_$null_label; 173 sci.request_data_ptr = null (); /* no request running yet */ 174 175 sci.prompt = "^/" || rtrim (P_subsystem_name) || "^[ (^d)^]:^2x"; 176 /* standard prompt */ 177 string (sci.prompt_mode) = ""b; /* default prompting */ 178 sci.ready_enabled = "0"b; /* no ready messages by default */ 179 180 sci.listener_info.abort_subsystem_label = ssu_$null_label; 181 sci.listener_info.temp_seg_ptr = null (); /* initialize to use automatic buffer */ 182 183 184 sci.info_prefix = ""; /* defaults to any info segment name */ 185 186 call ssu_info_mgr_$init_info_dirs (sci_ptr); 187 if P_info_dir ^= "" then do; /* user supplied an initial info directory */ 188 call ssu_$add_info_dir (sci_ptr, P_info_dir, 1, P_code); 189 if P_code ^= 0 then do; 190 call ssu_info_mgr_$term_info_dirs (sci_ptr); 191 call ssu_request_processor_$term_rp_options (sci_ptr); 192 call ssu_request_mgr_$term_request_tables (sci_ptr); 193 free sci in (system_area); 194 return; 195 end; 196 end; 197 198 sci.ec_info.ec_suffix = sci.subsystem_name; 199 sci.ec_info.ec_search_list = ""; 200 sci.subsystem_dir_ptr = null (); 201 202 call ssu_procedure_mgr_$set_all_default (sci_ptr);/* setup all the entry variables to default states */ 203 204 call find_ilie (); /* find appropriate invocation list */ 205 206 sci.recursion_info.previous_sci_ptr = ilie.last_sci_ptr; 207 sci.recursion_info.next_sci_ptr = null (); /* this is the last invocation */ 208 ilie.last_sci_ptr = sci_ptr; 209 210 if ilie.first_sci_ptr = null () then /* first invocation of this subsystem */ 211 ilie.first_sci_ptr = sci_ptr; 212 else sci.recursion_info.previous_sci_ptr -> sci.recursion_info.next_sci_ptr = sci_ptr; 213 214 ilie.max_level, sci.recursion_info.level = ilie.max_level + 1; 215 216 P_sci_ptr = sci_ptr; 217 P_code = 0; /* success */ 218 219 return; 220 221 /* Finds an invocation_list_info entry (ilie) for this subsystem name/version combination: grows the ili if necessary, 222* starts a new invocation list if necessary, and sets sci.invocation_data_idx */ 223 224 find_ilie: 225 procedure (); 226 227 dcl (free_ilie_idx, idx) fixed binary; 228 dcl new_ili_ptr pointer; 229 230 if ili_ptr = null () then do; /* first time in this process */ 231 ili_ptr = addr (static_ili); /* ... use the internal one */ 232 do idx = 1 to ili.n_ilies; 233 ili.ilies (idx).subsystem_name = ""; /* ... mark all entries as free */ 234 end; 235 end; 236 237 free_ilie_idx = 0; 238 239 do idx = 1 to ili.n_ilies; 240 ilie_ptr = addr (ili.ilies (idx)); 241 if (ilie.subsystem_name = sci.subsystem_name) & (ilie.subsystem_version = sci.subsystem_version) then do; 242 sci.invocation_data_idx = idx; /* found it */ 243 return; 244 end; 245 else if (ilie.subsystem_name = "") & (free_ilie_idx = 0) then free_ilie_idx = idx; 246 end; /* remember first free entry */ 247 248 249 /* Here iff this is the first active invocation for this subsystem */ 250 251 if free_ilie_idx = 0 then do; /* no free slots: grow the ili ... */ 252 ili_n_ilies = 2 * ili.n_ilies; 253 allocate ili in (system_area) set (new_ili_ptr); 254 do idx = 1 to ili.n_ilies; /* copy current lists */ 255 new_ili_ptr -> ili.ilies (idx) = ili.ilies (idx); 256 end; 257 free_ilie_idx = ili.n_ilies + 1; /* use first free slot */ 258 do idx = (ili.n_ilies + 1) to new_ili_ptr -> ili.n_ilies; 259 new_ili_ptr -> ili.ilies (idx).subsystem_name = ""; 260 end; /* mark the rest free */ 261 if ili_ptr ^= addr (static_ili) then /* free old structure */ 262 free ili in (system_area); 263 ili_ptr = new_ili_ptr; /* zap */ 264 end; 265 266 ilie_ptr = addr (ili.ilies (free_ilie_idx)); 267 268 ilie.subsystem_name = sci.subsystem_name; 269 ilie.subsystem_version = sci.subsystem_version; 270 ilie.first_sci_ptr, ilie.last_sci_ptr = null (); 271 ilie.max_level = 0; /* haven't used any yet */ 272 273 sci.invocation_data_idx = free_ilie_idx; 274 275 return; 276 277 end find_ilie; 278 279 /* Create a standalone invocation: Standalone invocations are used by procedures which are coded to work both as Multics 280* command/AFs and as subsystem requests; the standalaone invocation is created when the procedure is invoked from 281* Multics. All references to ssu_$print_message, ssu_$abort_line, and ssu_$abort_subsystem in a standalone invocation 282* are converted to appropriate calls to com_err_/active_fnc_err_; after the message is printed for the abort entries, the 283* procedure's abort entry is invoked which is expected to perform a non-local goto back to the cleanup code of the 284* procedure. Calls to ssu_$execute_line and ssu_$evaluate_active_string are translated into calls to cu_$cp and 285* cu_$evaluate_active_string, respectively */ 286 287 create_standalone: 288 entry (P_sci_ptr, P_command_name, P_command_version, P_arg_list_ptr, P_abort_procedure, P_code); 289 290 if P_arg_list_ptr = null () then /* get the caller's argument list */ 291 arg_list_ptr = stackframeptr () -> stack_frame.prev_sp -> stack_frame.arg_ptr; 292 else arg_list_ptr = P_arg_list_ptr; 293 294 if arg_list_ptr = null () then do; /* couldn't get the argument list pointer */ 295 P_code = error_table_$badcall; 296 return; 297 end; 298 299 system_area_ptr = get_system_free_area_ (); 300 301 allocate sci in (system_area) set (sci_ptr); 302 303 sci.version = SCI_VERSION_3; /* setup the data structure */ 304 sci.parent_area_ptr = system_area_ptr; 305 306 sci.subsystem_name = P_command_name; 307 sci.subsystem_version = P_command_version; 308 sci.info_ptr = null (); /* none needed for a Multics command/AF */ 309 sci.standalone_abort_entry = P_abort_procedure; 310 string (sci.global_info.flags) = ""b; 311 sci.standalone_invocation = "1"b; 312 sci.executing_request = "1"b; /* causes most other procedures to react properly */ 313 314 sci.recursion_info.invocation_data_idx = 0; /* no invocation lists are kept for standalone invocations */ 315 sci.recursion_info.level = 1; 316 sci.recursion_info.previous_sci_ptr, sci.recursion_info.next_sci_ptr = null (); 317 318 sci.request_tables_ptr = null (); /* no request tables: can't execute requests */ 319 sci.rp_options_ptr = null (); /* no request processor: will never use options */ 320 sci.request_processor_info.abort_line_label = ssu_$null_label; 321 allocate request_data in (system_area) set (sci.request_data_ptr); 322 323 sci.prompt = ""; /* no listener loop allowed: no prompts or ready messages */ 324 string (sci.prompt_mode) = ""b; 325 sci.ready_enabled = "0"b; 326 327 sci.listener_info.abort_subsystem_label = ssu_$null_label; 328 sci.listener_info.temp_seg_ptr = null (); /* no listener either */ 329 330 sci.temp_info_ptr = null (); /* no temporary segments/areas yet */ 331 332 sci.info_dirs_ptr = null (); /* no help/list_help requests */ 333 sci.info_prefix = ""; 334 335 sci.ec_suffix, sci.ec_search_list = ""; /* no exec_com request either */ 336 sci.ec_info.subsystem_dir_ptr = null (); 337 338 call ssu_procedure_mgr_$set_all_default (sci_ptr); 339 340 341 /* Create a fake executing request which is acutally the Multics command/AF */ 342 343 request_data_ptr = sci.request_data_ptr; 344 345 request_data.full_name = P_command_name; /* so the procedure can use get_request_name */ 346 347 request_data.entry = ssu_$null_entry; /* nothing will ever call this anyway */ 348 string (request_data.flags) = ""b; 349 request_data.name_list_ptr = null (); /* don't bother to make up a fake name list ... */ 350 request_data.info_string.ptr = null (); /* ... or documentation string */ 351 request_data.info_string.lth = 0; 352 353 request_data.call_info.arg_list_ptr = arg_list_ptr; 354 355 call cu_$af_return_arg_rel (request_data.arg_count, request_data.rv_ptr, request_data.rv_lth, code, 356 request_data.arg_list_ptr); /* get argument count and return string (if any) */ 357 358 if code = 0 then /* a Multics active function */ 359 request_data.af_sw = "1"b; 360 else request_data.af_sw = "0"b; /* a Multics command */ 361 362 P_sci_ptr = sci_ptr; /* all done */ 363 P_code = 0; 364 365 return; 366 367 /* Destroy a subsystem invocation: removes the invocation from the list of active invocations of the subsystem */ 368 369 destroy: 370 entry (P_sci_ptr); 371 372 if P_sci_ptr = null () then /* protect against confused cleanup handlers */ 373 return; 374 375 call ssu_check_sci (P_sci_ptr); 376 377 sci_ptr = P_sci_ptr; 378 379 P_sci_ptr = null (); /* prevent multiple attempts to destroy this invocation */ 380 381 if ^sci.standalone_invocation then do; /* pop a level */ 382 ilie_ptr = addr (ili.ilies (sci.invocation_data_idx)); 383 if ilie.last_sci_ptr = sci_ptr then /* was the last active invocation */ 384 ilie.last_sci_ptr = sci.recursion_info.previous_sci_ptr; 385 else sci.recursion_info.next_sci_ptr -> sci.previous_sci_ptr = sci.previous_sci_ptr; 386 if ilie.first_sci_ptr = sci_ptr then /* was the first active invocation */ 387 ilie.first_sci_ptr = sci.recursion_info.next_sci_ptr; 388 else sci.recursion_info.previous_sci_ptr -> sci.next_sci_ptr = sci.next_sci_ptr; 389 if ilie.last_sci_ptr = null () then /* no longer any active invocations */ 390 ilie.max_level = 0; 391 else ilie.max_level = ilie.last_sci_ptr -> sci.recursion_info.level; 392 end; /* make sure highest active invocation level is correct */ 393 394 system_area_ptr = sci.parent_area_ptr; 395 396 call ssu_temp_mgr_$release_everything (sci_ptr); /* free all temporaries ... */ 397 call ssu_info_mgr_$term_info_dirs (sci_ptr); /* ... and any tables acquired by utility procedures */ 398 call ssu_request_processor_$term_rp_options (sci_ptr); 399 call ssu_request_mgr_$term_request_tables (sci_ptr); 400 401 if sci.standalone_invocation & (sci.request_data_ptr ^= null ()) then do; 402 free sci.request_data_ptr -> request_data in (system_area); 403 sci.request_data_ptr = null (); 404 end; 405 406 free sci in (system_area); /* get rid of the structure */ 407 408 return; 409 410 /* Returns a pointer to the subsystem's internal data */ 411 412 get_info_ptr: 413 entry (P_sci_ptr) returns (pointer); 414 415 call ssu_check_sci (P_sci_ptr); 416 417 return (P_sci_ptr -> sci.info_ptr); 418 419 420 421 /* Sets the pointer to the subsystem's internal data: allows a subsystem to postpone creation of its internal data until 422* it knows that the subsystem invocation was successfully created */ 423 424 set_info_ptr: 425 entry (P_sci_ptr, P_info_ptr); 426 427 call ssu_check_sci (P_sci_ptr); 428 429 P_sci_ptr -> sci.info_ptr = P_info_ptr; 430 431 return; 432 433 /* Returns the subsystem's name */ 434 435 get_subsystem_name: 436 entry (P_sci_ptr) returns (character (32)); 437 438 call ssu_check_sci (P_sci_ptr); 439 440 return (P_sci_ptr -> sci.subsystem_name); 441 442 443 444 /* Returns the version number of the subsystem */ 445 446 get_subsystem_version: 447 entry (P_sci_ptr) returns (character (32)); 448 449 call ssu_check_sci (P_sci_ptr); 450 451 return (P_sci_ptr -> sci.subsystem_version); 452 453 454 455 /* Returns the name of the subsystem request being executed (if any): for standalone invocations, returns the name of 456* Multics command/AF which created the invocation */ 457 458 get_request_name: 459 entry (P_sci_ptr) returns (character (32)); 460 461 call ssu_check_sci (P_sci_ptr); 462 463 sci_ptr = P_sci_ptr; 464 465 if sci.executing_request then 466 return (sci.request_data_ptr -> request_data.full_name); 467 468 else return (""); 469 470 471 472 /* Returns the subsystem's and current request's names in the form with the request name enclosed in parentheses */ 473 474 get_subsystem_and_request_name: 475 entry (P_sci_ptr) returns (character (72) varying); 476 477 call ssu_check_sci (P_sci_ptr); 478 479 sci_ptr = P_sci_ptr; 480 481 return_name = rtrim (sci.subsystem_name); 482 483 if sci.executing_request & ^sci.standalone_invocation then do; 484 return_name = return_name || " ("; 485 return_name = return_name || rtrim (sci.request_data_ptr -> request_data.full_name); 486 return_name = return_name || ")"; 487 end; 488 489 return (return_name); 490 491 /* Returns the level # of this subsystem invocation and the # of the highest active invocation of the subsystem */ 492 493 get_invocation_count: 494 entry (P_sci_ptr, P_this_level, P_max_level); 495 496 call ssu_check_sci (P_sci_ptr); 497 498 sci_ptr = P_sci_ptr; 499 500 if sci.standalone_invocation then /* shouldn't ask, but ... */ 501 P_this_level, P_max_level = 1; 502 503 else do; 504 ilie_ptr = addr (ili.ilies (sci.invocation_data_idx)); 505 P_this_level = sci.recursion_info.level; 506 P_max_level = ilie.max_level; 507 end; 508 509 return; 510 511 /* Returns a pointer to the SCI and subsystem's internal database for the requested invocation of the subsystem */ 512 513 get_level_n_sci_ptr: 514 entry (P_sci_ptr, P_this_level, P_new_sci_ptr, P_new_info_ptr); 515 516 call ssu_check_sci (P_sci_ptr); 517 518 sci_ptr = P_sci_ptr; 519 520 if sci.standalone_invocation then /* shouldn't ask for this, but ... */ 521 if P_this_level = 1 then do; /* ... only 1 level for standalone invocations */ 522 P_new_sci_ptr = sci_ptr; 523 P_new_info_ptr = sci.info_ptr; 524 end; 525 else P_new_sci_ptr, P_new_info_ptr = null (); 526 527 else do; 528 P_new_sci_ptr, P_new_info_ptr = null (); /* assume failure */ 529 ilie_ptr = addr (ili.ilies (sci.invocation_data_idx)); 530 do next_sci_ptr = ilie.first_sci_ptr repeat (next_sci_ptr -> sci.next_sci_ptr) 531 while (next_sci_ptr ^= null ()); 532 if next_sci_ptr -> sci.recursion_info.level = P_this_level then do; 533 P_new_sci_ptr = next_sci_ptr; 534 P_new_info_ptr = next_sci_ptr -> sci.info_ptr; 535 end; 536 end; 537 end; 538 539 return; 540 541 /* Return a pointer to the SCI and subsystem's internal database for the previous active invocation of this subsystem */ 542 543 get_prev_sci_ptr: 544 entry (P_sci_ptr, P_new_sci_ptr, P_new_info_ptr); 545 546 call ssu_check_sci (P_sci_ptr); 547 548 sci_ptr = P_sci_ptr; 549 550 if sci.previous_sci_ptr ^= null () then do; /* there is a previous invocation */ 551 P_new_sci_ptr = sci.recursion_info.previous_sci_ptr; 552 P_new_info_ptr = sci.recursion_info.previous_sci_ptr -> sci.info_ptr; 553 end; 554 555 else do; /* no previous invocation */ 556 P_new_sci_ptr = null (); 557 P_new_info_ptr = null (); 558 end; 559 560 return; 561 562 /* Insures that the reference names ssu_et_, ssu_requests_, and ssu_request_tables_ are on the same object segment as 563* ssu_: If this is not done, references to either of the other two names from user programs could reference the wrong 564* (older or newer) versions of these segments which can cause problems -- for ssu_et_, the error codes would be unequal 565* as this segment's references to them are bound away and always reference the codes in this segment; for ssu_requests_, 566* the older/newer versions of the requests might have different ideas as to the nature of the SCI structure; for 567* ssu_request_tables_, the older/newer versions of the tables might have different requests */ 568 569 switch_ssu_refnames: 570 procedure (); 571 572 dcl dirname character (168); 573 dcl ename character (32); 574 dcl other_ssu_ptr pointer; 575 576 call hcs_$fs_get_seg_ptr ("ssu_et_", other_ssu_ptr, code); 577 if (code ^= 0) then do; /* didn't find the refname at all */ 578 SWITCH_SSU_ET_REFNAME: 579 call term_$single_refname ("ssu_et_", (0)); /* terminate it, whether initiated or not */ 580 call hcs_$fs_get_path_name (codeptr (ssu_invocation_), dirname, (0), ename, (0)); 581 call hcs_$initiate (dirname, ename, "ssu_et_", 0, 0, (null ()), (0)); 582 end; 583 else if pointer (other_ssu_ptr, 0) ^= pointer (codeptr (ssu_invocation_), 0) then go to SWITCH_SSU_ET_REFNAME; 584 /* wrong object segment */ 585 586 call hcs_$fs_get_seg_ptr ("ssu_requests_", other_ssu_ptr, code); 587 if (code ^= 0) then do; /* didn't find the refname at all */ 588 SWITCH_SSU_REQUESTS_REFNAME: 589 call term_$single_refname ("ssu_requests_", (0)); 590 /* terminate it, whether initiated or not */ 591 call hcs_$fs_get_path_name (codeptr (ssu_invocation_), dirname, (0), ename, (0)); 592 call hcs_$initiate (dirname, ename, "ssu_requests_", 0, 0, (null ()), (0)); 593 end; 594 else if pointer (other_ssu_ptr, 0) ^= pointer (codeptr (ssu_invocation_), 0) then 595 go to SWITCH_SSU_REQUESTS_REFNAME; /* wrong object segment */ 596 597 call hcs_$fs_get_seg_ptr ("ssu_request_tables_", other_ssu_ptr, code); 598 if (code ^= 0) then do; /* didn't find the refname at all */ 599 SWITCH_SSU_REQUEST_TABLES_REFNAME: 600 call term_$single_refname ("ssu_request_tables_", (0)); 601 /* terminate it, whether initiated or not */ 602 call hcs_$fs_get_path_name (codeptr (ssu_invocation_), dirname, (0), ename, (0)); 603 call hcs_$initiate (dirname, ename, "ssu_request_tables_", 0, 0, (null ()), (0)); 604 end; 605 else if pointer (other_ssu_ptr, 0) ^= pointer (codeptr (ssu_invocation_), 0) then 606 go to SWITCH_SSU_REQUEST_TABLES_REFNAME; /* wrong object segment */ 607 608 return; 609 610 end switch_ssu_refnames; 611 1 1 /* BEGIN: _ssu_check_sci.incl.pl1 * * * * * */ 1 2 1 3 /* Created: 25 February 1982 by G. Palter */ 1 4 /* Modified: 6 November 1984 by G. Palter for version 3 and new sub_err_ 1 5* calling sequence */ 1 6 1 7 1 8 /****^ HISTORY COMMENTS: 1 9* 1) change(87-02-07,GDixon), approve(87-05-25,MCR7680), 1 10* audit(87-06-02,Parisek), install(87-08-04,MR12.1-1056): 1 11* Modified to verify that p_sci_ptr has proper its modifier by overlaying it 1 12* with the structure in its.incl.pl1, rather than assuming knowledge of 1 13* pointer format. 1 14* END HISTORY COMMENTS */ 1 15 1 16 1 17 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 1 18 1 19 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 20 /* */ 1 21 /* Validates that the caller's sci_ptr acutally references a valid */ 1 22 /* subsystem control info structure. */ 1 23 /* */ 1 24 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 1 25 1 26 ssu_check_sci: 1 27 procedure (p_sci_ptr); 1 28 1 29 dcl p_sci_ptr pointer parameter; 1 30 1 31 dcl SSU_ character (32) static options (constant) initial ("ssu_"); 1 32 1 33 dcl error_table_$bad_ptr fixed binary (35) external; 1 34 dcl error_table_$null_info_ptr fixed binary (35) external; 1 35 dcl error_table_$unimplemented_version fixed binary (35) external; 1 36 1 37 dcl sub_err_ entry () options (variable); 1 38 1 39 dcl (null, substr, unspec) builtin; 1 40 1 41 if addr(p_sci_ptr) -> its.its_mod ^= ITS_MODIFIER then do; 1 42 RESIGNAL_BAD_POINTER: 1 43 call sub_err_ (error_table_$bad_ptr, SSU_, ACTION_CANT_RESTART, null (), (0), "^24.3b", unspec (p_sci_ptr)); 1 44 go to RESIGNAL_BAD_POINTER; 1 45 end; 1 46 1 47 if p_sci_ptr = null () then do; 1 48 RESIGNAL_NULL_POINTER: 1 49 call sub_err_ (error_table_$null_info_ptr, SSU_, ACTION_CANT_RESTART, null (), (0), "sci_ptr"); 1 50 go to RESIGNAL_NULL_POINTER; 1 51 end; 1 52 1 53 if p_sci_ptr -> sci.version = SCI_VERSION_3 then /* all is well */ 1 54 return; 1 55 1 56 RESIGNAL_BAD_VERSION: 1 57 call sub_err_ (error_table_$unimplemented_version, SSU_, ACTION_CANT_RESTART, null (), (0), "^24.3b", 1 58 unspec (p_sci_ptr -> sci.version)); 1 59 go to RESIGNAL_BAD_VERSION; 1 60 2 1 /* BEGIN INCLUDE FILE its.incl.pl1 2 2* modified 27 July 79 by JRDavis to add its_unsigned 2 3* Internal format of ITS pointer, including ring-number field for follow-on processor */ 2 4 2 5 dcl 1 its based aligned, /* declaration for ITS type pointer */ 2 6 2 pad1 bit (3) unaligned, 2 7 2 segno bit (15) unaligned, /* segment number within the pointer */ 2 8 2 ringno bit (3) unaligned, /* ring number within the pointer */ 2 9 2 pad2 bit (9) unaligned, 2 10 2 its_mod bit (6) unaligned, /* should be 43(8) */ 2 11 2 12 2 offset bit (18) unaligned, /* word offset within the addressed segment */ 2 13 2 pad3 bit (3) unaligned, 2 14 2 bit_offset bit (6) unaligned, /* bit offset within the word */ 2 15 2 pad4 bit (3) unaligned, 2 16 2 mod bit (6) unaligned; /* further modification */ 2 17 2 18 dcl 1 itp based aligned, /* declaration for ITP type pointer */ 2 19 2 pr_no bit (3) unaligned, /* number of pointer register to use */ 2 20 2 pad1 bit (27) unaligned, 2 21 2 itp_mod bit (6) unaligned, /* should be 41(8) */ 2 22 2 23 2 offset bit (18) unaligned, /* word offset from pointer register word offset */ 2 24 2 pad2 bit (3) unaligned, 2 25 2 bit_offset bit (6) unaligned, /* bit offset relative to new word offset */ 2 26 2 pad3 bit (3) unaligned, 2 27 2 mod bit (6) unaligned; /* further modification */ 2 28 2 29 2 30 dcl 1 its_unsigned based aligned, /* just like its, but with unsigned binary */ 2 31 2 pad1 bit (3) unaligned, 2 32 2 segno fixed bin (15) unsigned unaligned, 2 33 2 ringno fixed bin (3) unsigned unaligned, 2 34 2 pad2 bit (9) unaligned, 2 35 2 its_mod bit (6) unaligned, 2 36 2 37 2 offset fixed bin (18) unsigned unaligned, 2 38 2 pad3 bit (3) unaligned, 2 39 2 bit_offset fixed bin (6) unsigned unaligned, 2 40 2 pad4 bit (3) unaligned, 2 41 2 mod bit (6) unaligned; 2 42 2 43 dcl 1 itp_unsigned based aligned, /* just like itp, but with unsigned binary where appropriate */ 2 44 2 pr_no fixed bin (3) unsigned unaligned, 2 45 2 pad1 bit (27) unaligned, 2 46 2 itp_mod bit (6) unaligned, 2 47 2 48 2 offset fixed bin (18) unsigned unaligned, 2 49 2 pad2 bit (3) unaligned, 2 50 2 bit_offset fixed bin (6) unsigned unaligned, 2 51 2 pad3 bit (3) unaligned, 2 52 2 mod bit (6) unaligned; 2 53 2 54 2 55 dcl ITS_MODIFIER bit (6) unaligned internal static options (constant) init ("43"b3); 2 56 dcl ITP_MODIFIER bit (6) unaligned internal static options (constant) init ("41"b3); 2 57 2 58 /* END INCLUDE FILE its.incl.pl1 */ 1 61 1 62 3 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 3 2 /* format: style3 */ 3 3 3 4 /* These constants are to be used for the flags argument of sub_err_ */ 3 5 /* They are just "string (condition_info_header.action_flags)" */ 3 6 3 7 declare ( 3 8 ACTION_CAN_RESTART init (""b), 3 9 ACTION_CANT_RESTART init ("1"b), 3 10 ACTION_DEFAULT_RESTART 3 11 init ("01"b), 3 12 ACTION_QUIET_RESTART 3 13 init ("001"b), 3 14 ACTION_SUPPORT_SIGNAL 3 15 init ("0001"b) 3 16 ) bit (36) aligned internal static options (constant); 3 17 3 18 /* End include file */ 1 63 1 64 1 65 end ssu_check_sci; 1 66 1 67 1 68 /* END OF: _ssu_check_sci.incl.pl1 * * * * * */ 612 613 4 1 /* BEGIN INCLUDE FILE ... _ssu_sci.incl.pl1 */ 4 2 /* Created: 31 April 1980 by W. Olin Sibert */ 4 3 /* Modified: 17 November 1981 by Jay Pattin to add info_prefix */ 4 4 /* Modified: 10 December 1981 by G. Palter to make arg_count, arg_ptr, return_arg, and arg_list_ptr replaceable */ 4 5 /* Modified: 10 February 1982 by G. Palter to reorganize and make changes required for installation */ 4 6 /* Modified: June 1982 by G. Palter for version 2 (new request processor options and replaceable procedures) */ 4 7 /* Modified: 6 November 1984 by G. Palter for version 3 (get_subsystem_and_request_name is now replaceable) */ 4 8 4 9 /* format: style4,^delnl */ 4 10 4 11 4 12 /* Structure used internally by subsystem utilities to contain control information about a single invocation */ 4 13 4 14 dcl 1 sci aligned based (sci_ptr), 4 15 2 version character (8), 4 16 2 parent_area_ptr pointer, /* -> area holding this data and referenced structures */ 4 17 4 18 2 global_info, /* global information about this subsystem ... */ 4 19 3 subsystem_name char (32) unaligned, /* ... its name (eg: read_mail) */ 4 20 3 subsystem_version char (32) unaligned, /* ... its version numer (eg: 4.3j) */ 4 21 3 info_ptr pointer, /* ... -> data maintained by the subsystem */ 4 22 3 standalone_abort_entry entry () variable, /* ... for standalone invocations: called by ssu_$abort_* */ 4 23 3 flags, 4 24 4 standalone_invocation bit (1) unaligned, /* ... ON => ssu_$standalone_invocation was used */ 4 25 4 in_listener bit (1) unaligned, /* ... ON => in subsystem listener loop */ 4 26 4 executing_request bit (1) unaligned, /* ... ON => executing a request */ 4 27 4 debug_mode bit (1) unaligned, /* ... ON => debugging the subsystem */ 4 28 4 pad bit (32) unaligned, 4 29 4 30 2 recursion_info, /* describes relationship of this invocation to other active 4 31* invocations of the same subsystem ... */ 4 32 3 invocation_data_idx fixed binary, /* ... locates the list of active invocations */ 4 33 3 level fixed binary, /* ... # of active invocations when this one created + 1 */ 4 34 3 previous_sci_ptr pointer, /* ... -> description of previous invocation */ 4 35 3 next_sci_ptr pointer, /* ... -> description of next invocation */ 4 36 4 37 2 request_processor_info, /* information related to request line processing ... */ 4 38 3 request_tables_ptr pointer, /* ... -> list of request tables in use */ 4 39 3 rp_options_ptr pointer, /* ... -> options controlling the processor */ 4 40 3 abort_line_label label variable, 4 41 3 request_data_ptr pointer, /* ... -> request_data structure for current request */ 4 42 4 43 2 prompt_and_ready_info, /* information related to prompts and ready messages ... */ 4 44 3 prompt character (64) varying, /* the prompt (if any): an ioa_ control string */ 4 45 3 prompt_mode, /* controls prompting ... */ 4 46 4 dont_prompt bit (1) unaligned, /* ... ON => never prompt */ 4 47 4 prompt_after_null_lines bit (1) unaligned, /* ... ON => prompt after a blank line if prompts enabled */ 4 48 4 dont_prompt_if_typeahead bit (1) unaligned, /* ... ON => suppress prompts if request line available */ 4 49 4 pad bit (33) unaligned, 4 50 3 ready_enabled bit (1) aligned, /* ... ON => ready procedure should be invoked */ 4 51 4 52 2 listener_info, /* information used by the listener ... */ 4 53 3 abort_subsystem_label label variable, 4 54 3 temp_seg_ptr pointer, /* ... -> temporary segment used for long request lines */ 4 55 4 56 2 temp_info_ptr pointer, /* pointer to data used by ssu_temp_mgr_ */ 4 57 4 58 2 info_info, /* information related to self-documentation ... */ 4 59 3 info_dirs_ptr pointer, /* ... -> list of info directories */ 4 60 3 info_prefix character (32), /* ... prefix used to form info segment names */ 4 61 4 62 2 ec_info, /* data for subsystem exec_com processing ... */ 4 63 3 ec_suffix char (32) unaligned, /* ... suffix of exec_com segments */ 4 64 3 ec_search_list char (32) unaligned, /* ... search list used to find exec_coms */ 4 65 3 subsystem_dir_ptr pointer, /* ... defines referencing_dir rule for above search list */ 4 66 4 67 2 entries, /* all replaceable entries ... */ 4 68 ( 4 69 3 abort_line, /* ... invoked by ssu_$abort_line */ 4 70 3 abort_subsystem, /* ... invoked by ssu_$abort_subsystem */ 4 71 3 print_message, /* ... invoked by ssu_$print_message */ 4 72 3 program_interrupt, /* ... cannot be called externally */ 4 73 3 pre_request_line, /* ... cannot be called externally */ 4 74 3 post_request_line, /* ... cannot be called externally */ 4 75 3 ready, /* ... invoked by ssu_$ready_proc */ 4 76 3 cpescape, /* ... cannot be called externally */ 4 77 3 unknown_request, /* ... invoked by ssu_$unknown_request */ 4 78 3 listen, /* ... invoked by ssu_$listen */ 4 79 3 execute_line, /* ... invoked by ssu_$execute_line */ 4 80 3 evaluate_active_string, /* ... invoked by ssu_$evaluate_active_string */ 4 81 3 invoke_request, /* ... invoked by ssu_$invoke_request */ 4 82 3 locate_request, /* ... invoked by ssu_$locate_request */ 4 83 3 arg_count, /* ... invoked by ssu_$arg_count */ 4 84 3 arg_ptr, /* ... invoked by ssu_$arg_ptr */ 4 85 3 return_arg, /* ... invoked by ssu_$return_arg */ 4 86 3 arg_list_ptr, /* ... invoked by ssu_$arg_list_ptr */ 4 87 3 get_default_rp_options, /* ... invoked by ssu_$get_default_rp_options */ 4 88 3 get_rp_options, /* ... invoked by ssu_$get_request_processor_options */ 4 89 3 set_rp_options, /* ... invoked by ssu_$set_request_processor_options */ 4 90 3 reset_rp_options, /* ... invoked by ssu_$reset_request_processor_options */ 4 91 3 get_subsys_and_request_name /* ... invoked by ssu_$get_subsystem_and_request_name */ 4 92 ) entry () variable options (variable); 4 93 4 94 dcl sci_ptr pointer; 4 95 4 96 dcl sci_parent_area area based (sci.parent_area_ptr); 4 97 4 98 dcl SCI_VERSION_3 character (8) static options (constant) init ("sci_0003"); 4 99 4 100 /* END INCLUDE FILE ... _ssu_sci.incl.pl1 */ 614 615 5 1 /* BEGIN INCLUDE FILE ... _ssu_request_data.incl.pl1 */ 5 2 /* Created: 13 May 1980 by W. Olin Sibert */ 5 3 /* Modified: 28 February 1982 by G. Palter to add dont_summarize and dont_list */ 5 4 /* Modified: 2 August 1982 by Jay Pattin to add unknown flag */ 5 5 5 6 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 5 7 5 8 5 9 /* Description of a subsystem request returned by ssu_$locate_request */ 5 10 5 11 dcl 1 request_data aligned based (request_data_ptr), 5 12 2 full_name character (32) unaligned, /* its primary name */ 5 13 2 entry entry (pointer, pointer) variable, /* entry to call to implement the request */ 5 14 2 call_info, /* describes current invocation of the request ... */ 5 15 3 arg_list_ptr pointer, /* ... -> argument list */ 5 16 3 arg_count fixed binary, 5 17 3 af_sw bit (1) aligned, /* ... ON => invoked as an active request */ 5 18 3 rv_ptr pointer, /* ... -> active request's return string */ 5 19 3 rv_lth fixed binary (21), /* ... maxlength of the return string */ 5 20 2 flags aligned like request_flags, /* attributes of the request (from the request table) */ 5 21 2 name_list_ptr pointer unaligned, /* -> list of all valid names for the request */ 5 22 2 info_string, /* brief description of the request (if any) */ 5 23 3 ptr pointer unaligned, 5 24 3 lth fixed binary (18), 5 25 2 pad (4) bit (36); 5 26 5 27 dcl request_data_ptr pointer; 5 28 5 29 5 30 /* Request attributes from the request table */ 5 31 5 32 dcl 1 request_flags aligned based, 5 33 2 system_flags unaligned, 5 34 3 allow_command bit (1) unaligned, /* ON => request may be called as a command */ 5 35 3 allow_af bit (1) unaligned, /* ON => request may be called as an active function */ 5 36 3 unimplemented bit (1) unaligned, /* ON => request is not yet implemented */ 5 37 3 multics_request bit (1) unaligned, /* ON => this request is really just a Multics command */ 5 38 3 dont_summarize bit (1) unaligned, /* ON => summarize_requests doesn't list this request */ 5 39 3 dont_list bit (1) unaligned, /* ON => list_requests doesn't match this one without -all */ 5 40 3 unknown bit (1) unaligned, /* ON => return unknown_request, don't list or summarize ever */ 5 41 3 pad bit (11) unaligned, 5 42 2 user_flags bit (18) unaligned; /* no longer used */ 5 43 5 44 5 45 /* List of all names for a given request */ 5 46 5 47 dcl 1 request_name_list aligned based (request_name_list_ptr), 5 48 2 n_names fixed binary, /* structure describing name list */ 5 49 2 name (request_name_list_n_names refer (request_name_list.n_names)) character (32) unaligned; 5 50 5 51 dcl request_name_list_ptr pointer; 5 52 dcl request_name_list_n_names fixed binary; 5 53 5 54 5 55 /* Brief description of a request */ 5 56 5 57 dcl request_info_string character (request_info_string_lth) based (request_info_string_ptr); 5 58 dcl request_info_string_lth fixed binary (21); 5 59 dcl request_info_string_ptr pointer; 5 60 5 61 /* END INCLUDE FILE ... _ssu_request_data.incl.pl1 */ 616 617 6 1 /* BEGIN INCLUDE FILE ... stack_frame.incl.pl1 ... */ 6 2 6 3 /* format: off */ 6 4 6 5 /* Modified: 16 Dec 1977, D. Levin - to add fio_ps_ptr and pl1_ps_ptr */ 6 6 /* Modified: 3 Feb 1978, P. Krupp - to add run_unit_manager bit & main_proc bit */ 6 7 /* Modified: 21 March 1978, D. Levin - change fio_ps_ptr to support_ptr */ 6 8 /* Modified: 03/01/84, S. Herbst - Added RETURN_PTR_MASK */ 6 9 6 10 6 11 /****^ HISTORY COMMENTS: 6 12* 1) change(86-09-15,Kissel), approve(86-09-15,MCR7473), 6 13* audit(86-10-01,Fawcett), install(86-11-03,MR12.0-1206): 6 14* Modified to add constants for the translator_id field in the stack_frame 6 15* structure. 6 16* END HISTORY COMMENTS */ 6 17 6 18 6 19 dcl RETURN_PTR_MASK bit (72) int static options (constant) /* mask to be AND'd with stack_frame.return_ptr */ 6 20 init ("777777777777777777000000"b3); /* when copying, to ignore bits that a call fills */ 6 21 /* with indicators (nonzero for Fortran hexfp caller) */ 6 22 /* say: unspec(ptr) = unspec(stack_frame.return_ptr) & RETURN_PTR_MASK; */ 6 23 6 24 dcl TRANSLATOR_ID_PL1V2 bit (18) internal static options (constant) init ("000000"b3); 6 25 dcl TRANSLATOR_ID_ALM bit (18) internal static options (constant) init ("000001"b3); 6 26 dcl TRANSLATOR_ID_PL1V1 bit (18) internal static options (constant) init ("000002"b3); 6 27 dcl TRANSLATOR_ID_SIGNAL_CALLER bit (18) internal static options (constant) init ("000003"b3); 6 28 dcl TRANSLATOR_ID_SIGNALLER bit (18) internal static options (constant) init ("000004"b3); 6 29 6 30 6 31 dcl sp pointer; /* pointer to beginning of stack frame */ 6 32 6 33 dcl stack_frame_min_length fixed bin static init(48); 6 34 6 35 6 36 dcl 1 stack_frame based(sp) aligned, 6 37 2 pointer_registers(0 : 7) ptr, 6 38 2 prev_sp pointer, 6 39 2 next_sp pointer, 6 40 2 return_ptr pointer, 6 41 2 entry_ptr pointer, 6 42 2 operator_and_lp_ptr ptr, /* serves as both */ 6 43 2 arg_ptr pointer, 6 44 2 static_ptr ptr unaligned, 6 45 2 support_ptr ptr unal, /* only used by fortran I/O */ 6 46 2 on_unit_relp1 bit(18) unaligned, 6 47 2 on_unit_relp2 bit(18) unaligned, 6 48 2 translator_id bit(18) unaligned, /* Translator ID (see constants above) 6 49* 0 => PL/I version II 6 50* 1 => ALM 6 51* 2 => PL/I version I 6 52* 3 => signal caller frame 6 53* 4 => signaller frame */ 6 54 2 operator_return_offset bit(18) unaligned, 6 55 2 x(0: 7) bit(18) unaligned, /* index registers */ 6 56 2 a bit(36), /* accumulator */ 6 57 2 q bit(36), /* q-register */ 6 58 2 e bit(36), /* exponent */ 6 59 2 timer bit(27) unaligned, /* timer */ 6 60 2 pad bit(6) unaligned, 6 61 2 ring_alarm_reg bit(3) unaligned; 6 62 6 63 6 64 dcl 1 stack_frame_flags based(sp) aligned, 6 65 2 pad(0 : 7) bit(72), /* skip over prs */ 6 66 2 xx0 bit(22) unal, 6 67 2 main_proc bit(1) unal, /* on if frame belongs to a main procedure */ 6 68 2 run_unit_manager bit(1) unal, /* on if frame belongs to run unit manager */ 6 69 2 signal bit(1) unal, /* on if frame belongs to logical signal_ */ 6 70 2 crawl_out bit(1) unal, /* on if this is a signal caller frame */ 6 71 2 signaller bit(1) unal, /* on if next frame is signaller's */ 6 72 2 link_trap bit(1) unal, /* on if this frame was made by the linker */ 6 73 2 support bit(1) unal, /* on if frame belongs to a support proc */ 6 74 2 condition bit(1) unal, /* on if condition established in this frame */ 6 75 2 xx0a bit(6) unal, 6 76 2 xx1 fixed bin, 6 77 2 xx2 fixed bin, 6 78 2 xx3 bit(25) unal, 6 79 2 old_crawl_out bit (1) unal, /* on if this is a signal caller frame */ 6 80 2 old_signaller bit(1) unal, /* on if next frame is signaller's */ 6 81 2 xx3a bit(9) unaligned, 6 82 2 xx4(9) bit(72) aligned, 6 83 2 v2_pl1_op_ret_base ptr, /* When a V2 PL/I program calls an operator the 6 84* * operator puts a pointer to the base of 6 85* * the calling procedure here. (text base ptr) */ 6 86 2 xx5 bit(72) aligned, 6 87 2 pl1_ps_ptr ptr; /* ptr to ps for this frame; also used by fio. */ 6 88 6 89 /* format: on */ 6 90 6 91 /* END INCLUDE FILE ... stack_frame.incl.pl1 */ 618 619 620 end ssu_invocation_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1539.3 ssu_invocation_.pl1 >special_ldd>install>MR12.1-1054>ssu_invocation_.pl1 612 1 08/04/87 1140.5 _ssu_check_sci.incl.pl1 >spec>install>1056>_ssu_check_sci.incl.pl1 1-61 2 11/26/79 1320.6 its.incl.pl1 >ldd>include>its.incl.pl1 1-63 3 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.incl.pl1 614 4 01/21/85 0912.2 _ssu_sci.incl.pl1 >ldd>include>_ssu_sci.incl.pl1 616 5 09/28/82 1437.6 _ssu_request_data.incl.pl1 >ldd>include>_ssu_request_data.incl.pl1 618 6 11/07/86 1550.3 stack_frame.incl.pl1 >ldd>include>stack_frame.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. ACTION_CANT_RESTART 000034 constant bit(36) initial dcl 3-7 set ref 1-42* 1-48* 1-56* CANT_RESTART 000012 constant char(1) initial unaligned dcl 94 set ref 130* ITS_MODIFIER constant bit(6) initial unaligned dcl 2-55 ref 1-41 P_abort_procedure parameter entry variable dcl 42 ref 287 309 P_arg_list_ptr parameter pointer dcl 41 ref 287 290 292 P_code parameter fixed bin(35,0) dcl 31 set ref 125 137* 162* 163 188* 189 217* 287 295* 363* P_command_name parameter char unaligned dcl 39 ref 287 306 345 P_command_version parameter char unaligned dcl 40 ref 287 307 P_info_dir parameter char unaligned dcl 37 set ref 125 187 188* P_info_ptr parameter pointer dcl 35 ref 125 154 424 429 P_max_level parameter fixed bin(17,0) dcl 45 set ref 493 500* 506* P_new_info_ptr parameter pointer dcl 48 set ref 513 523* 525* 528* 534* 543 552* 557* P_new_sci_ptr parameter pointer dcl 47 set ref 513 522* 525* 528* 533* 543 551* 556* P_request_table_ptr parameter pointer dcl 36 set ref 125 161 162* P_sci_ptr parameter pointer dcl 29 set ref 125 141* 216* 287 362* 369 372 375* 377 379* 412 415* 417 424 427* 429 435 438* 440 446 449* 451 458 461* 463 474 477* 479 493 496* 498 513 516* 518 543 546* 548 P_subsystem_name parameter char unaligned dcl 33 ref 125 136 152 175 P_subsystem_version parameter char unaligned dcl 34 ref 125 153 P_this_level parameter fixed bin(17,0) dcl 44 set ref 493 500* 505* 513 520 532 SCI_VERSION_3 000010 constant char(8) initial unaligned dcl 4-98 ref 149 303 1-53 SSU_ 000000 constant char(32) initial unaligned dcl 1-31 set ref 1-42* 1-48* 1-56* SSU_CREATE_INVOCATION 000013 constant char(32) initial unaligned dcl 93 set ref 130* 130* abort_line_label 46 based label variable level 3 dcl 4-14 set ref 172* 320* abort_subsystem_label 100 based label variable level 3 dcl 4-14 set ref 180* 327* addr builtin function dcl 123 ref 231 240 261 266 382 504 529 1-41 af_sw 17 based bit(1) level 3 dcl 5-11 set ref 358* 360* arg_count 16 based fixed bin(17,0) level 3 dcl 5-11 set ref 355* arg_list_ptr 000104 automatic pointer dcl 77 in procedure "ssu_invocation_" set ref 290* 292* 294 353 arg_list_ptr 14 based pointer level 3 in structure "request_data" dcl 5-11 in procedure "ssu_invocation_" set ref 353* 355* arg_ptr 32 based pointer level 2 dcl 6-36 ref 290 call_info 14 based structure level 2 dcl 5-11 code 000106 automatic fixed bin(35,0) dcl 79 set ref 355* 358 576* 577 586* 587 597* 598 codeptr builtin function dcl 123 ref 580 580 583 591 591 594 602 602 605 cu_$af_return_arg_rel 000566 constant entry external dcl 103 ref 355 cu_$arg_count 000564 constant entry external dcl 102 ref 128 dirname 000206 automatic char(168) unaligned dcl 572 set ref 580* 581* 591* 592* 602* 603* ec_info 122 based structure level 2 dcl 4-14 ec_search_list 132 based char(32) level 3 packed unaligned dcl 4-14 set ref 199* 335* ec_suffix 122 based char(32) level 3 packed unaligned dcl 4-14 set ref 198* 335* ename 000260 automatic char(32) unaligned dcl 573 set ref 580* 581* 591* 592* 602* 603* entry 10 based entry variable level 2 dcl 5-11 set ref 347* error_table_$bad_ptr 000630 external static fixed bin(35,0) dcl 1-33 set ref 1-42* error_table_$badcall 000554 external static fixed bin(35,0) dcl 96 ref 137 295 error_table_$null_info_ptr 000632 external static fixed bin(35,0) dcl 1-34 set ref 1-48* error_table_$unimplemented_version 000634 external static fixed bin(35,0) dcl 1-35 set ref 1-56* error_table_$wrong_no_of_args 000556 external static fixed bin(35,0) dcl 97 set ref 130* executing_request 32(02) based bit(1) level 4 packed unaligned dcl 4-14 set ref 312* 465 483 first_sci_ptr 20 based pointer level 2 dcl 53 set ref 210 210* 270* 386 386* 530 flags 23 based structure level 2 in structure "request_data" dcl 5-11 in procedure "ssu_invocation_" set ref 348* flags 32 based structure level 3 in structure "sci" dcl 4-14 in procedure "ssu_invocation_" set ref 156* 310* free_ilie_idx 000170 automatic fixed bin(17,0) dcl 227 set ref 237* 245 245* 251 257* 266 273 full_name based char(32) level 2 packed unaligned dcl 5-11 set ref 345* 465 485 get_system_free_area_ 000570 constant entry external dcl 104 ref 143 299 global_info 4 based structure level 2 dcl 4-14 hcs_$fs_get_path_name 000572 constant entry external dcl 105 ref 580 591 602 hcs_$fs_get_seg_ptr 000574 constant entry external dcl 106 ref 576 586 597 hcs_$initiate 000576 constant entry external dcl 107 ref 581 592 603 header 000010 internal static structure level 2 in structure "static_ili" dcl 62 in procedure "ssu_invocation_" header based structure level 2 in structure "ili" dcl 68 in procedure "ssu_invocation_" idx 000171 automatic fixed bin(17,0) dcl 227 set ref 232* 233* 239* 240 242 245* 254* 255 255* 258* 259* ili based structure level 1 dcl 68 set ref 253 261 ili_n_ilies 000102 automatic fixed bin(17,0) dcl 72 set ref 252* 253 253 ili_ptr 000552 internal static pointer initial dcl 71 set ref 230 231* 232 233 239 240 252 254 255 257 258 261 261 263* 266 382 504 529 ilie based structure level 1 dcl 53 ilie_ptr 000100 automatic pointer dcl 60 set ref 206 208 210 210 214 214 240* 241 241 245 266* 268 269 270 270 271 382* 383 383 386 386 389 389 391 391 504* 506 529* 530 ilies 2 based structure array level 2 dcl 68 set ref 240 255* 255 266 382 504 529 info_dirs_ptr 110 based pointer level 3 dcl 4-14 set ref 332* info_info 110 based structure level 2 dcl 4-14 info_prefix 112 based char(32) level 3 dcl 4-14 set ref 184* 333* info_ptr 24 based pointer level 3 dcl 4-14 set ref 154* 308* 417 429* 523 534 552 info_string 25 based structure level 2 dcl 5-11 invocation_data_idx 34 based fixed bin(17,0) level 3 dcl 4-14 set ref 242* 273* 314* 382 504 529 its based structure level 1 dcl 2-5 its_mod 0(30) based bit(6) level 2 packed unaligned dcl 2-5 ref 1-41 last_sci_ptr 22 based pointer level 2 dcl 53 set ref 206 208* 270* 383 383* 389 391 level 35 based fixed bin(17,0) level 3 dcl 4-14 set ref 214* 315* 391 505 532 listener_info 100 based structure level 2 dcl 4-14 lth 26 based fixed bin(18,0) level 3 dcl 5-11 set ref 351* max_level 24 based fixed bin(17,0) level 2 dcl 53 set ref 214 214* 271* 389* 391* 506 n_arguments 000112 automatic fixed bin(17,0) dcl 87 set ref 128* 129 130* n_ilies based fixed bin(17,0) initial level 3 dcl 68 set ref 232 239 252 253* 253* 254 257 258 258 261 name_list_ptr 24 based pointer level 2 packed unaligned dcl 5-11 set ref 349* new_ili_ptr 000172 automatic pointer dcl 228 set ref 253* 255 258 259 263 next_sci_ptr 40 based pointer level 3 in structure "sci" dcl 4-14 in procedure "ssu_invocation_" set ref 207* 212* 316* 385 386 388* 388 536 next_sci_ptr 000114 automatic pointer dcl 89 in procedure "ssu_invocation_" set ref 530* 530* 532 533 534* 536 null builtin function dcl 123 in procedure "ssu_invocation_" ref 130 130 141 158 161 173 181 200 207 210 230 270 290 294 308 316 318 319 328 330 332 336 349 350 372 379 389 401 403 525 528 530 550 556 557 581 592 603 null builtin function dcl 1-39 in procedure "ssu_check_sci" ref 1-42 1-42 1-47 1-48 1-48 1-56 1-56 other_ssu_ptr 000270 automatic pointer dcl 574 set ref 576* 583 586* 594 597* 605 p_sci_ptr parameter pointer dcl 1-29 set ref 1-26 1-41 1-42 1-42 1-47 1-53 1-56 1-56 pad 1 based bit(36) initial level 3 dcl 68 set ref 253* parent_area_ptr 2 based pointer level 2 dcl 4-14 set ref 150* 304* 394 pointer builtin function dcl 123 ref 583 583 594 594 605 605 prev_sp 20 based pointer level 2 dcl 6-36 ref 290 previous_sci_ptr 36 based pointer level 3 dcl 4-14 set ref 206* 212 316* 383 385* 385 388 550 551 552 prompt 54 based varying char(64) level 3 dcl 4-14 set ref 175* 323* prompt_and_ready_info 54 based structure level 2 dcl 4-14 prompt_mode 75 based structure level 3 dcl 4-14 set ref 177* 324* ptr 25 based pointer level 3 packed unaligned dcl 5-11 set ref 350* ready_enabled 76 based bit(1) level 3 dcl 4-14 set ref 178* 325* recursion_info 34 based structure level 2 dcl 4-14 request_data based structure level 1 dcl 5-11 set ref 321 402 request_data_ptr 52 based pointer level 3 in structure "sci" dcl 4-14 in procedure "ssu_invocation_" set ref 173* 321* 343 401 402 403* 465 485 request_data_ptr 000144 automatic pointer dcl 5-27 in procedure "ssu_invocation_" set ref 343* 345 347 348 349 350 351 353 355 355 355 355 358 360 request_flags based structure level 1 dcl 5-32 request_processor_info 42 based structure level 2 dcl 4-14 request_tables_ptr 42 based pointer level 3 dcl 4-14 set ref 318* return_name 000116 automatic varying char(72) dcl 91 set ref 481* 484* 484 485* 485 486* 486 489 rp_options_ptr 44 based pointer level 3 dcl 4-14 set ref 319* rtrim builtin function dcl 123 ref 175 481 485 rv_lth 22 based fixed bin(21,0) level 3 dcl 5-11 set ref 355* rv_ptr 20 based pointer level 3 dcl 5-11 set ref 355* sci based structure level 1 dcl 4-14 set ref 147 165 193 301 406 sci_ptr 000142 automatic pointer dcl 4-94 set ref 147* 149 150 152 153 154 155 156 158 160* 162* 164* 165 170* 172 173 175 177 178 180 181 184 186* 188* 190* 191* 192* 193 198 198 199 200 202* 206 207 208 210 212 212 214 216 241 241 242 268 269 273 301* 303 304 306 307 308 309 310 311 312 314 315 316 316 318 319 320 321 323 324 325 327 328 330 332 333 335 335 336 338* 343 362 377* 381 382 383 383 385 385 386 386 388 388 394 396* 397* 398* 399* 401 401 402 403 406 463* 465 465 479* 481 483 483 485 498* 500 504 505 518* 520 522 523 529 548* 550 551 552 ssu_$add_info_dir 000600 constant entry external dcl 110 ref 188 ssu_$add_request_table 000602 constant entry external dcl 111 ref 162 ssu_$null_entry 000560 external static entry variable dcl 99 ref 155 347 ssu_$null_label 000562 external static label variable dcl 100 ref 172 180 320 327 ssu_info_mgr_$init_info_dirs 000604 constant entry external dcl 112 ref 186 ssu_info_mgr_$term_info_dirs 000606 constant entry external dcl 113 ref 190 397 ssu_procedure_mgr_$set_all_default 000610 constant entry external dcl 114 ref 202 338 ssu_request_mgr_$init_request_tables 000612 constant entry external dcl 115 ref 160 ssu_request_mgr_$term_request_tables 000614 constant entry external dcl 116 ref 164 192 399 ssu_request_processor_$init_rp_options 000616 constant entry external dcl 117 ref 170 ssu_request_processor_$term_rp_options 000620 constant entry external dcl 118 ref 191 398 ssu_temp_mgr_$release_everything 000622 constant entry external dcl 119 ref 396 stack_frame based structure level 1 dcl 6-36 stackframeptr builtin function dcl 123 ref 290 standalone_abort_entry 26 based entry variable level 3 dcl 4-14 set ref 155* 309* standalone_invocation 32 based bit(1) level 4 packed unaligned dcl 4-14 set ref 311* 381 401 483 500 520 static_ili 000010 internal static structure level 1 dcl 62 set ref 231 261 string builtin function dcl 123 set ref 156* 177* 310* 324* 348* sub_err_ 000636 constant entry external dcl 1-37 in procedure "ssu_check_sci" ref 1-42 1-48 1-56 sub_err_ 000624 constant entry external dcl 120 in procedure "ssu_invocation_" ref 130 subsystem_dir_ptr 142 based pointer level 3 dcl 4-14 set ref 200* 336* subsystem_name 2 based char(32) array level 3 in structure "ili" packed unaligned dcl 68 in procedure "ssu_invocation_" set ref 233* 259* subsystem_name 4 based char(32) level 3 in structure "sci" packed unaligned dcl 4-14 in procedure "ssu_invocation_" set ref 152* 198 241 268 306* 440 481 subsystem_name based char(32) level 2 in structure "ilie" packed unaligned dcl 53 in procedure "ssu_invocation_" set ref 241 245 268* subsystem_version 10 based char(32) level 2 in structure "ilie" packed unaligned dcl 53 in procedure "ssu_invocation_" set ref 241 269* subsystem_version 14 based char(32) level 3 in structure "sci" packed unaligned dcl 4-14 in procedure "ssu_invocation_" set ref 153* 241 269 307* 451 system_area based area(1024) dcl 84 ref 147 165 193 253 261 301 321 402 406 system_area_ptr 000110 automatic pointer dcl 85 set ref 143* 147 150 165 193 253 261 299* 301 304 321 394* 402 406 temp_info_ptr 106 based pointer level 2 dcl 4-14 set ref 158* 330* temp_seg_ptr 104 based pointer level 3 dcl 4-14 set ref 181* 328* term_$single_refname 000626 constant entry external dcl 121 ref 578 588 599 unspec builtin function dcl 1-39 ref 1-42 1-42 1-56 1-56 version based char(8) level 2 dcl 4-14 set ref 149* 303* 1-53 1-56 1-56 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 3-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 3-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 3-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 3-7 ITP_MODIFIER internal static bit(6) initial unaligned dcl 2-56 RETURN_PTR_MASK internal static bit(72) initial unaligned dcl 6-19 TRANSLATOR_ID_ALM internal static bit(18) initial unaligned dcl 6-25 TRANSLATOR_ID_PL1V1 internal static bit(18) initial unaligned dcl 6-26 TRANSLATOR_ID_PL1V2 internal static bit(18) initial unaligned dcl 6-24 TRANSLATOR_ID_SIGNALLER internal static bit(18) initial unaligned dcl 6-28 TRANSLATOR_ID_SIGNAL_CALLER internal static bit(18) initial unaligned dcl 6-27 itp based structure level 1 dcl 2-18 itp_unsigned based structure level 1 dcl 2-43 its_unsigned based structure level 1 dcl 2-30 request_info_string based char unaligned dcl 5-57 request_info_string_lth automatic fixed bin(21,0) dcl 5-58 request_info_string_ptr automatic pointer dcl 5-59 request_name_list based structure level 1 dcl 5-47 request_name_list_n_names automatic fixed bin(17,0) dcl 5-52 request_name_list_ptr automatic pointer dcl 5-51 sci_parent_area based area(1024) dcl 4-96 sp automatic pointer dcl 6-31 stack_frame_flags based structure level 1 dcl 6-64 stack_frame_min_length internal static fixed bin(17,0) initial dcl 6-33 substr builtin function dcl 1-39 NAMES DECLARED BY EXPLICIT CONTEXT. RESIGNAL_BAD_POINTER 003600 constant label dcl 1-42 ref 1-44 RESIGNAL_BAD_VERSION 003732 constant label dcl 1-56 set ref 1-59 RESIGNAL_NULL_POINTER 003660 constant label dcl 1-48 ref 1-50 RESIGNAL_WRONG_NO_OF_ARGS 000220 constant label dcl 130 ref 133 SWITCH_SSU_ET_REFNAME 003035 constant label dcl 578 ref 583 SWITCH_SSU_REQUESTS_REFNAME 003224 constant label dcl 588 ref 594 SWITCH_SSU_REQUEST_TABLES_REFNAME 003421 constant label dcl 599 ref 605 create 000150 constant entry external dcl 125 create_standalone 000766 constant entry external dcl 287 destroy 001310 constant entry external dcl 369 find_ilie 002553 constant entry internal dcl 224 ref 204 get_info_ptr 001522 constant entry external dcl 412 get_invocation_count 002261 constant entry external dcl 493 get_level_n_sci_ptr 002351 constant entry external dcl 513 get_prev_sci_ptr 002472 constant entry external dcl 543 get_request_name 001774 constant entry external dcl 458 get_subsystem_and_request_name 002105 constant entry external dcl 474 get_subsystem_name 001636 constant entry external dcl 435 get_subsystem_version 001715 constant entry external dcl 446 set_info_ptr 001566 constant entry external dcl 424 ssu_check_sci 003572 constant entry internal dcl 1-26 ref 375 415 427 438 449 461 477 496 516 546 ssu_invocation_ 000117 constant entry external dcl 21 ref 580 580 583 591 591 594 602 602 605 switch_ssu_refnames 003007 constant entry internal dcl 569 ref 145 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4524 5364 4013 4534 Length 5776 4013 640 375 511 544 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ssu_invocation_ 380 external procedure is an external procedure. find_ilie internal procedure shares stack frame of external procedure ssu_invocation_. switch_ssu_refnames internal procedure shares stack frame of external procedure ssu_invocation_. ssu_check_sci internal procedure shares stack frame of external procedure ssu_invocation_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 static_ili ssu_invocation_ 000552 ili_ptr ssu_invocation_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ssu_invocation_ 000100 ilie_ptr ssu_invocation_ 000102 ili_n_ilies ssu_invocation_ 000104 arg_list_ptr ssu_invocation_ 000106 code ssu_invocation_ 000110 system_area_ptr ssu_invocation_ 000112 n_arguments ssu_invocation_ 000114 next_sci_ptr ssu_invocation_ 000116 return_name ssu_invocation_ 000142 sci_ptr ssu_invocation_ 000144 request_data_ptr ssu_invocation_ 000170 free_ilie_idx find_ilie 000171 idx find_ilie 000172 new_ili_ptr find_ilie 000206 dirname switch_ssu_refnames 000260 ename switch_ssu_refnames 000270 other_ssu_ptr switch_ssu_refnames THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out return_mac signal_op shorten_stack ext_entry ext_entry_desc op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$af_return_arg_rel cu_$arg_count get_system_free_area_ hcs_$fs_get_path_name hcs_$fs_get_seg_ptr hcs_$initiate ssu_$add_info_dir ssu_$add_request_table ssu_info_mgr_$init_info_dirs ssu_info_mgr_$term_info_dirs ssu_procedure_mgr_$set_all_default ssu_request_mgr_$init_request_tables ssu_request_mgr_$term_request_tables ssu_request_processor_$init_rp_options ssu_request_processor_$term_rp_options ssu_temp_mgr_$release_everything sub_err_ sub_err_ term_$single_refname THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_ptr error_table_$badcall error_table_$null_info_ptr error_table_$unimplemented_version error_table_$wrong_no_of_args ssu_$null_entry ssu_$null_label LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 21 000116 24 000126 125 000142 128 000206 129 000215 130 000220 133 000272 136 000273 137 000302 138 000305 141 000322 143 000324 145 000333 147 000334 149 000341 150 000344 152 000346 153 000354 154 000361 155 000364 156 000373 158 000374 160 000376 161 000404 162 000411 163 000430 164 000432 165 000441 166 000443 170 000460 172 000467 173 000476 175 000500 177 000546 178 000550 180 000551 181 000555 184 000557 186 000562 187 000570 188 000577 189 000627 190 000631 191 000640 192 000647 193 000656 194 000660 198 000675 199 000701 200 000704 202 000706 204 000715 206 000716 207 000722 208 000724 210 000726 212 000733 214 000735 216 000741 217 000742 219 000743 287 000760 290 001015 292 001027 294 001032 295 001036 296 001041 299 001056 301 001065 303 001072 304 001075 306 001077 307 001105 308 001112 309 001114 310 001122 311 001123 312 001125 314 001127 315 001130 316 001132 318 001135 319 001137 320 001140 321 001146 323 001154 324 001155 325 001156 327 001157 328 001165 330 001167 332 001170 333 001171 335 001174 336 001202 338 001203 343 001211 345 001214 347 001222 348 001230 349 001231 350 001233 351 001234 353 001235 355 001237 358 001255 360 001263 362 001265 363 001267 365 001270 369 001305 372 001322 375 001343 377 001351 379 001354 381 001356 382 001361 383 001367 385 001376 386 001401 388 001410 389 001413 391 001421 394 001424 396 001426 397 001435 398 001444 399 001453 401 001462 402 001472 403 001474 406 001477 408 001501 412 001516 415 001534 417 001542 424 001563 427 001602 429 001610 431 001615 435 001632 438 001650 440 001656 446 001712 449 001727 451 001735 458 001771 461 002006 463 002014 465 002017 468 002054 474 002100 477 002116 479 002124 481 002127 483 002147 484 002155 485 002167 486 002214 489 002223 493 002254 496 002273 498 002301 500 002304 504 002314 505 002322 506 002325 509 002327 513 002344 516 002367 518 002375 520 002400 522 002407 523 002410 524 002412 525 002413 528 002417 529 002422 530 002430 532 002436 533 002443 534 002444 536 002446 539 002451 543 002466 546 002510 548 002516 550 002521 551 002525 552 002527 553 002532 556 002533 557 002535 560 002536 224 002553 230 002554 231 002561 232 002563 233 002573 234 002602 237 002604 239 002605 240 002615 241 002622 242 002633 243 002635 245 002636 246 002646 251 002650 252 002652 253 002656 254 002672 255 002703 256 002714 257 002716 258 002722 259 002733 260 002741 261 002743 263 002757 266 002762 268 002770 269 002774 270 002777 271 003002 273 003003 275 003006 569 003007 576 003010 577 003033 578 003035 580 003055 581 003112 582 003162 583 003163 586 003175 587 003222 588 003224 591 003246 592 003303 593 003355 594 003356 597 003370 598 003417 599 003421 602 003445 603 003502 604 003556 605 003557 608 003571 1 26 003572 1 41 003574 1 42 003600 1 44 003653 1 47 003654 1 48 003660 1 50 003722 1 53 003723 1 56 003732 1 59 004006 ----------------------------------------------------------- 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