COMPILATION LISTING OF SEGMENT ssu_request_processor_ 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 1638.6 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 8 /* format: off */ 9 10 /* Default subsystem request line processor and active string evaluator */ 11 12 /* Created: 3 May 1980 by W. Olin Sibert */ 13 /* Modified: 15 February 1982 by G. Palter to support standalone invocations, rename eval_string to evaluate_active_string 14* and correct its calling sequence, return ssu_et_$null_request_line rather than 100, and reflect the reorganization 15* of the sci structure */ 16 /* Modified: 26 February 1982 by G. Palter to make execute_line handle program_interrupt when there is no active listener 17* in this subsystem invocation */ 18 /* Modified: June 1982 by G. Palter to split execute_line and evaluate_active_string into part which is always executed 19* and part which is replaceable (ssu 14), to always trapping calls to ssu_$abort_line (ssu 12), to pass along request 20* processor options to the Multics command processor (which does most of the work for subsystems), and to add 21* (set get)_abbrev_info and (get free set reset)_request_processor_options and get_default_rp_options entries (ssu 6) 22* */ 23 24 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 25 26 ssu_request_processor_: 27 procedure (); 28 29 return; /* not an entrypoint */ 30 31 32 /* Parameters */ 33 34 dcl P_sci_ptr pointer parameter; 35 dcl P_code fixed binary (35) parameter; 36 37 dcl P_rp_options_ptr pointer parameter; /* evaluate_active_string, (get get_default set)_rp_options */ 38 39 dcl P_request_line_ptr pointer parameter; /* execute_line: -> the request line */ 40 dcl P_request_line_lth fixed binary (21) parameter; /* execute_line: length of said string */ 41 42 dcl P_request_string character (*) parameter; /* execute_string: the request line to execute */ 43 44 dcl P_active_string character (*) parameter; /* evaluate_active_string: the active string (no []'s) */ 45 dcl P_active_string_type fixed binary parameter; /* evaluate_active_string: type of string supplied */ 46 dcl P_return_value character (*) varying parameter; /* evaluate_active_string: results of evaluation */ 47 48 dcl P_rp_options_version character (8) parameter; /* (get get_default)_rp_options: which version to return */ 49 50 dcl P_default_profile_ptr pointer parameter; /* get_abbrev_info, set_abbrev_info: -> default profile */ 51 dcl P_profile_ptr pointer parameter; /* get_abbrev_info, set_abbrev_info: -> current profile */ 52 dcl P_abbrev_mode bit (1) aligned parameter; /* get_abbrev_info, set_abbrev_info: ON => enable abbrevs */ 53 54 55 /* Local copies of parameters */ 56 57 dcl request_line character (request_line_lth) based (request_line_ptr); 58 dcl request_line_lth fixed binary (21); 59 dcl request_line_ptr pointer; 60 61 dcl code fixed binary (35); 62 63 64 /* Internal representation of the subsystem's current request processor options */ 65 66 dcl 1 irpo aligned based (sci.rp_options_ptr), 67 2 cp_subsys_info like cp_subsys_info, /* command language definition */ 68 2 abbrev_info, 69 3 abbrev_enabled bit (1), /* ON => expand request lines before execution */ 70 3 default_profile_ptr pointer, /* -> default profile (used if profile_ptr is null) */ 71 3 profile_ptr pointer; /* -> current profile */ 72 73 74 /* Remaining declarations */ 75 76 dcl 1 lcsi aligned like cp_subsys_info; 77 78 dcl (saved_abort_subsystem_label, saved_abort_line_label) label variable; 79 dcl (saved_in_listener, saved_executing_request) bit (1) aligned; 80 81 dcl (idx, jdx) fixed binary (21); 82 83 dcl WHITESPACE character (5) static options (constant) initial (" 84 "); /* NL, HT, SP, VT, FF */ 85 86 dcl 1 cp_data_$standard_language aligned external, /* standard Multics command language definition */ 87 2 character_types (0:511) fixed binary (9) unaligned unsigned; 88 89 dcl error_table_$unimplemented_version fixed binary (35) external; 90 91 /* format: off */ 92 dcl (ssu_et_$null_request_line, ssu_et_$program_interrupt, ssu_et_$request_line_aborted, ssu_et_$subsystem_aborted) 93 fixed binary (35) external; 94 /* format: on */ 95 96 dcl abbrev_$subsys_process_line 97 entry (character (*), pointer, entry, pointer, entry, pointer, pointer, character (*), fixed binary (35)); 98 dcl command_processor_$subsys_execute_line 99 entry (character (*), pointer, entry, pointer, character (*), fixed binary (35)); 100 dcl command_processor_$subsys_eval_string 101 entry (character (*), pointer, entry, pointer, character (*), fixed binary, character (*) varying, 102 fixed binary (35)); 103 dcl command_processor_$validate_cp_subsys_info entry (pointer, fixed binary (35)); 104 dcl cu_$cp entry (pointer, fixed binary (21), fixed binary (35)); 105 dcl cu_$evaluate_active_string entry (pointer, character (*), fixed binary, character (*) varying, fixed binary (35)); 106 dcl hcs_$terminate_noname entry (pointer, fixed binary (35)); 107 dcl ssu_$execute_line entry (pointer, pointer, fixed binary (21), fixed binary (35)); 108 dcl ssu_$get_subsystem_and_request_name entry (pointer) returns (character (72) varying); 109 dcl ssu_$invoke_request entry () options (variable); 110 111 dcl (cleanup, program_interrupt) condition; 112 113 dcl (addr, index, length, null, substr, unspec, verify) builtin; 114 115 /* */ 116 117 /* Initialize the subsystem's request processor options */ 118 119 init_rp_options: 120 entry (P_sci_ptr); 121 122 sci_ptr = P_sci_ptr; 123 124 allocate irpo in (sci_parent_area) set (sci.rp_options_ptr); 125 126 irpo.cp_subsys_info.version = CP_SUBSYS_INFO_VERSION_1; 127 irpo.cp_subsys_info.non_standard_language = "0"b; 128 129 irpo.abbrev_info.abbrev_enabled = "0"b; 130 irpo.abbrev_info.default_profile_ptr, irpo.abbrev_info.profile_ptr = null (); 131 132 return; 133 134 135 136 /* Release the subsystem's request processor options (called by ssu_$destroy_invocation) */ 137 138 term_rp_options: 139 entry (P_sci_ptr); 140 141 sci_ptr = P_sci_ptr; 142 143 if sci.rp_options_ptr = null () then return; /* nothing there anyway */ 144 145 call maybe_terminate_profiles (null (), null ()); /* terminate the profiles */ 146 147 free irpo in (sci_parent_area); 148 sci.rp_options_ptr = null (); /* all gone */ 149 150 return; 151 152 /* */ 153 154 /* Prepares to call the execute_line procedure: if in a standalone invocation, transfers directly to cu_$cp; otherwise, 155* sets up the label used by ssu_$abort_line and then invokes the actual replaceable execute_line procedure. This entry 156* is called by the ssu_$execute_line transfer vector */ 157 158 prepare_to_execute_line: 159 entry (P_sci_ptr, P_request_line_ptr, P_request_line_lth, P_code); 160 161 call ssu_check_sci (P_sci_ptr); 162 163 sci_ptr = P_sci_ptr; 164 165 if sci.standalone_invocation then do; /* a Multics command/AF simulating a subsystem ... */ 166 call cu_$cp (P_request_line_ptr, P_request_line_lth, P_code); 167 if P_code = 100 then P_code = ssu_et_$null_request_line; 168 return; 169 end; 170 171 saved_in_listener = sci.in_listener; 172 saved_executing_request = sci.executing_request; /* in case this is called by a request */ 173 saved_abort_line_label = sci.request_processor_info.abort_line_label; 174 175 sci.request_processor_info.abort_line_label = LINE_ABORT_RETURN; 176 177 if ^sci.in_listener then do; /* no listener: trap subsystem abort and program interrupt */ 178 saved_abort_subsystem_label = sci.listener_info.abort_subsystem_label; 179 sci.listener_info.abort_subsystem_label = SUBSYSTEM_ABORT_RETURN; 180 on condition (program_interrupt) 181 begin; 182 call sci.entries.program_interrupt (sci_ptr); 183 P_code = ssu_et_$program_interrupt;/* let caller know it wasn't a clean execution */ 184 go to RETURN_FROM_EXECUTE_LINE; 185 end; 186 end; 187 188 on condition (cleanup) 189 begin; 190 sci.in_listener = saved_in_listener; 191 sci.executing_request = saved_executing_request; 192 if ^sci.in_listener then sci.listener_info.abort_subsystem_label = saved_abort_subsystem_label; 193 sci.request_processor_info.abort_line_label = saved_abort_line_label; 194 end; 195 196 call sci.entries.execute_line (sci_ptr, P_request_line_ptr, P_request_line_lth, code); 197 198 if code = 100 then /* translate null line code to appropriate value */ 199 P_code = ssu_et_$null_request_line; 200 else P_code = 0; /* error messages have already been printed */ 201 202 RETURN_FROM_EXECUTE_LINE: 203 sci.in_listener = saved_in_listener; /* restore state */ 204 sci.executing_request = saved_executing_request; 205 if ^sci.in_listener then sci.listener_info.abort_subsystem_label = saved_abort_subsystem_label; 206 sci.request_processor_info.abort_line_label = saved_abort_line_label; 207 208 return; 209 210 211 SUBSYSTEM_ABORT_RETURN: /* user/program asked to abort the subsystem */ 212 P_code = ssu_et_$subsystem_aborted; 213 go to RETURN_FROM_EXECUTE_LINE; 214 215 LINE_ABORT_RETURN: /* user/program asked to abort the request line */ 216 P_code = ssu_et_$request_line_aborted; 217 go to RETURN_FROM_EXECUTE_LINE; 218 219 /* */ 220 221 /* Execute a subsystem request line: this is the default procedure invoked by prepare_to_execute_line which is called 222* externally as ssu_$execute_line */ 223 224 execute_line: 225 entry (P_sci_ptr, P_request_line_ptr, P_request_line_lth, P_code); 226 227 sci_ptr = P_sci_ptr; 228 229 request_line_ptr = P_request_line_ptr; 230 request_line_lth = P_request_line_lth; 231 232 if request_line_lth > 2 then do; /* implement ".." escape here */ 233 idx = index (request_line, ".."); 234 if idx ^= 0 then do; /* ... seems to be one */ 235 if idx > 1 then /* ... insure only white space preceeds it */ 236 jdx = verify (substr (request_line, 1, idx - 1), WHITESPACE); 237 else jdx = 0; /* ... just a ".." somewhere in the middle of the line */ 238 if jdx = 0 then do; /* ... a true escape: do it */ 239 /* format: off */ 240 call sci.entries.cpescape 241 (sci_ptr, addr (substr (request_line, idx + 2, 1)), request_line_lth - (idx + 1), 242 P_code); /* format: on */ 243 if P_code = 100 then P_code = 0; /* ... censor null lines as the line isn't really blank */ 244 return; 245 end; 246 end; 247 end; 248 249 if irpo.abbrev_info.abbrev_enabled then /* user wants abbreviations expanded */ 250 call abbrev_$subsys_process_line (ssu_$get_subsystem_and_request_name (sci_ptr), sci_ptr, 251 ssu_$invoke_request, addr (irpo.cp_subsys_info), command_processor_$subsys_execute_line, 252 irpo.abbrev_info.default_profile_ptr, irpo.abbrev_info.profile_ptr, request_line, P_code); 253 254 else call command_processor_$subsys_execute_line (ssu_$get_subsystem_and_request_name (sci_ptr), sci_ptr, 255 ssu_$invoke_request, addr (irpo.cp_subsys_info), request_line, P_code); 256 257 return; 258 259 260 261 /* Allows for execution of constant request strings: simply calls ssu_$execute_line so that replacement of that procedure 262* will properly affect this one */ 263 264 execute_string: 265 entry (P_sci_ptr, P_request_string, P_code); 266 267 call ssu_$execute_line (P_sci_ptr, addr (substr (P_request_string, 1, 1)), length (P_request_string), P_code); 268 269 return; 270 271 /* */ 272 273 /* Prepares to invoke the evaluate_active_string procedure: if in a standalone invocation, transfers directly to 274* cu_$evaluate_active_string; otherwise, sets up the labels used by ssu_$abort_line and then invokes the actual 275* replaceable evaluate_active_string procedure. This entry is called by the ssu_$evaluate_active_string transfer 276* vector */ 277 278 prepare_to_evaluate_string: 279 entry (P_sci_ptr, P_rp_options_ptr, P_active_string, P_active_string_type, P_return_value, P_code); 280 281 call ssu_check_sci (P_sci_ptr); 282 283 sci_ptr = P_sci_ptr; 284 285 if sci.standalone_invocation then do; /* a Multics command/AF simulating a subsystem ... */ 286 call cu_$evaluate_active_string (null (), P_active_string, P_active_string_type, P_return_value, P_code); 287 return; 288 end; 289 290 saved_in_listener = sci.in_listener; 291 saved_executing_request = sci.executing_request; /* in case this is called by a request */ 292 saved_abort_line_label = sci.request_processor_info.abort_line_label; 293 294 sci.request_processor_info.abort_line_label = LINE_ABORT_RETURN; 295 296 if ^sci.in_listener then do; /* no listener: trap subsystem aborts */ 297 saved_abort_subsystem_label = sci.listener_info.abort_subsystem_label; 298 sci.listener_info.abort_subsystem_label = SUBSYSTEM_ABORT_RETURN; 299 end; 300 301 on condition (cleanup) 302 begin; 303 sci.in_listener = saved_in_listener; 304 sci.executing_request = saved_executing_request; 305 if ^sci.in_listener then sci.listener_info.abort_subsystem_label = saved_abort_subsystem_label; 306 sci.request_processor_info.abort_line_label = saved_abort_line_label; 307 end; 308 309 /* format: off */ 310 call sci.entries.evaluate_active_string 311 (P_sci_ptr, P_rp_options_ptr, P_active_string, P_active_string_type, P_return_value, P_code); 312 /* format: on */ 313 314 sci.in_listener = saved_in_listener; 315 sci.executing_request = saved_executing_request; 316 if ^sci.in_listener then sci.listener_info.abort_subsystem_label = saved_abort_subsystem_label; 317 sci.request_processor_info.abort_line_label = saved_abort_line_label; 318 319 return; 320 321 /* */ 322 323 /* Evaluate a subsystem active string: this is the default procedure invoked by prepare_to_evaluate_string which is called 324* externally as ssu_$evaluate_active_string */ 325 326 evaluate_active_string: 327 entry (P_sci_ptr, P_rp_options_ptr, P_active_string, P_active_string_type, P_return_value, P_code); 328 329 sci_ptr = P_sci_ptr; 330 331 if P_rp_options_ptr ^= null () then do; /* caller wishes to override subsystem's default options */ 332 rp_options_ptr = P_rp_options_ptr; 333 if rp_options.version ^= RP_OPTIONS_VERSION_1 then do; 334 P_code = error_table_$unimplemented_version; 335 return; /* ... but we don't understand it */ 336 end; 337 cp_subsys_info_ptr = addr (lcsi); /* ... validate that these options are OK */ 338 lcsi.version = CP_SUBSYS_INFO_VERSION_1; 339 lcsi.non_standard_language = rp_options.non_standard_language; 340 unspec (lcsi.full_tct_table) = unspec (rp_options.character_types); 341 call command_processor_$validate_cp_subsys_info (cp_subsys_info_ptr, P_code); 342 if P_code ^= 0 then return; /* ... there's something wrong with them */ 343 end; 344 else cp_subsys_info_ptr = sci.rp_options_ptr; /* use the subsystem's current options */ 345 346 call command_processor_$subsys_eval_string (ssu_$get_subsystem_and_request_name (sci_ptr), sci_ptr, 347 ssu_$invoke_request, cp_subsys_info_ptr, P_active_string, P_active_string_type, P_return_value, P_code); 348 349 return; 350 351 /* */ 352 353 /* Returns the request processor options presently in effect in this subsystem */ 354 355 get_rp_options: 356 entry (P_sci_ptr, P_rp_options_version, P_rp_options_ptr, P_code); 357 358 call ssu_check_sci (P_sci_ptr); 359 360 sci_ptr = P_sci_ptr; 361 rp_options_ptr = P_rp_options_ptr; 362 363 if P_rp_options_version ^= RP_OPTIONS_VERSION_1 then do; 364 P_code = error_table_$unimplemented_version; 365 return; /* we only support this version at present */ 366 end; 367 368 if sci.rp_options_ptr = null () then call init_rp_options (sci_ptr); 369 /* be sure there's something to look at */ 370 371 rp_options.version = RP_OPTIONS_VERSION_1; /* it's the only version we have */ 372 373 rp_options.non_standard_language = irpo.cp_subsys_info.non_standard_language; 374 if irpo.cp_subsys_info.non_standard_language then /* be sure caller sees proper language definition */ 375 unspec (rp_options.character_types) = unspec (irpo.cp_subsys_info.full_tct_table); 376 else unspec (rp_options.character_types) = unspec (cp_data_$standard_language); 377 378 rp_options.expand_request_lines = irpo.abbrev_info.abbrev_enabled; 379 rp_options.default_profile_ptr = irpo.abbrev_info.default_profile_ptr; 380 rp_options.profile_ptr = irpo.abbrev_info.profile_ptr; 381 382 P_code = 0; /* success */ 383 384 return; 385 386 /* */ 387 388 /* Returns the default request processor options for a subsystem */ 389 390 get_default_rp_options: 391 entry (P_sci_ptr, P_rp_options_version, P_rp_options_ptr, P_code); 392 393 call ssu_check_sci (P_sci_ptr); 394 395 sci_ptr = P_sci_ptr; 396 rp_options_ptr = P_rp_options_ptr; 397 398 if P_rp_options_version ^= RP_OPTIONS_VERSION_1 then do; 399 P_code = error_table_$unimplemented_version; 400 return; /* we only support this version at present */ 401 end; 402 403 rp_options.version = RP_OPTIONS_VERSION_1; /* it's the only version we have */ 404 405 rp_options.non_standard_language = "0"b; /* default is the standard language */ 406 unspec (rp_options.character_types) = unspec (cp_data_$standard_language); 407 408 rp_options.expand_request_lines = "0"b; /* abbrev is off by default */ 409 rp_options.default_profile_ptr, rp_options.profile_ptr = null (); 410 411 P_code = 0; /* success */ 412 413 return; 414 415 /* */ 416 417 /* Sets the request processor options to be used in this subsystem */ 418 419 set_rp_options: 420 entry (P_sci_ptr, P_rp_options_ptr, P_code); 421 422 call ssu_check_sci (P_sci_ptr); 423 424 sci_ptr = P_sci_ptr; 425 rp_options_ptr = P_rp_options_ptr; 426 427 if rp_options.version ^= RP_OPTIONS_VERSION_1 then do; 428 P_code = error_table_$unimplemented_version; 429 return; /* we only support this version at present */ 430 end; 431 432 if sci.rp_options_ptr = null () then call init_rp_options (sci_ptr); 433 /* be sure there's something to look at */ 434 435 lcsi.version = CP_SUBSYS_INFO_VERSION_1; /* validate the caller's request language definition */ 436 lcsi.non_standard_language = rp_options.non_standard_language; 437 unspec (lcsi.full_tct_table) = unspec (rp_options.character_types); 438 call command_processor_$validate_cp_subsys_info (addr (lcsi), P_code); 439 if P_code ^= 0 then return; /* ... it's illegal */ 440 441 irpo.cp_subsys_info = lcsi; /* OK: set the options */ 442 443 call maybe_terminate_profiles (rp_options.default_profile_ptr, rp_options.profile_ptr); 444 445 irpo.abbrev_info.abbrev_enabled = rp_options.expand_request_lines; 446 irpo.abbrev_info.default_profile_ptr = rp_options.default_profile_ptr; 447 irpo.abbrev_info.profile_ptr = rp_options.profile_ptr; 448 449 P_code = 0; /* success */ 450 451 return; 452 453 /* */ 454 455 /* Resets the request processor options in use by this subsystem to their default state */ 456 457 reset_rp_options: 458 entry (P_sci_ptr); 459 460 call ssu_check_sci (P_sci_ptr); 461 462 sci_ptr = P_sci_ptr; 463 if sci.rp_options_ptr = null () then call init_rp_options (sci_ptr); 464 /* be sure there's something to look at */ 465 466 irpo.cp_subsys_info.version = CP_SUBSYS_INFO_VERSION_1; 467 irpo.cp_subsys_info.non_standard_language = "0"b; /* but you already knew that */ 468 469 call maybe_terminate_profiles (null (), null ()); /* terminate the profile segments if needed */ 470 irpo.abbrev_info.abbrev_enabled = "0"b; /* no abbrev expansion */ 471 irpo.abbrev_info.default_profile_ptr, irpo.abbrev_info.profile_ptr = null (); 472 473 return; 474 475 /* */ 476 477 /* Returns all data related to abbreviation processing of request lines in this subsystem */ 478 479 get_abbrev_info: 480 entry (P_sci_ptr, P_default_profile_ptr, P_profile_ptr, P_abbrev_mode); 481 482 call ssu_check_sci (P_sci_ptr); 483 484 sci_ptr = P_sci_ptr; /* need to check that options were setup */ 485 if sci.rp_options_ptr = null () then call init_rp_options (sci_ptr); 486 487 P_default_profile_ptr = irpo.abbrev_info.default_profile_ptr; 488 P_profile_ptr = irpo.abbrev_info.profile_ptr; 489 P_abbrev_mode = irpo.abbrev_info.abbrev_enabled; 490 491 return; 492 493 494 495 /* Sets all data related to abbreviation processing */ 496 497 set_abbrev_info: 498 entry (P_sci_ptr, P_default_profile_ptr, P_profile_ptr, P_abbrev_mode); 499 500 call ssu_check_sci (P_sci_ptr); 501 502 sci_ptr = P_sci_ptr; /* need to check that options were setup */ 503 if sci.rp_options_ptr = null () then call init_rp_options (sci_ptr); 504 505 call maybe_terminate_profiles (P_default_profile_ptr, P_profile_ptr); 506 507 irpo.abbrev_info.default_profile_ptr = P_default_profile_ptr; 508 irpo.abbrev_info.profile_ptr = P_profile_ptr; 509 irpo.abbrev_info.abbrev_enabled = P_abbrev_mode; 510 511 return; 512 513 /* */ 514 515 /* Conditionally terminate the current subsystem profile segments: never terminates a segment if one of the other 516* pointers (old or new) references it and never terminates a segment more than once. Some subsystems only initiate their 517* profile segment once even though they set it as the default and current profiles; therefore, it isn't safe to just 518* terminate the old profile segments */ 519 520 maybe_terminate_profiles: 521 procedure (p_new_default_profile_ptr, p_new_profile_ptr); 522 523 dcl (p_new_default_profile_ptr, p_new_profile_ptr) pointer parameter; 524 dcl (old_default_profile_ptr, old_profile_ptr) pointer; 525 526 old_default_profile_ptr = irpo.abbrev_info.default_profile_ptr; 527 old_profile_ptr = irpo.abbrev_info.profile_ptr; 528 529 if old_default_profile_ptr ^= null () then /* may not be using the default profile any longer */ 530 if ((old_default_profile_ptr ^= p_new_default_profile_ptr) 531 & (old_default_profile_ptr ^= p_new_profile_ptr)) then 532 call hcs_$terminate_noname (old_default_profile_ptr, (0)); 533 534 if old_profile_ptr ^= null () then /* may not be using the current profile any longer */ 535 if old_profile_ptr ^= old_default_profile_ptr then 536 if ((old_profile_ptr ^= p_new_default_profile_ptr) & (old_profile_ptr ^= p_new_profile_ptr)) then 537 call hcs_$terminate_noname (old_profile_ptr, (0)); 538 539 return; 540 541 end maybe_terminate_profiles; 542 543 /* */ 544 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 * * * * * */ 545 546 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 */ 547 548 5 1 /* BEGIN INCLUDE FILE ... ssu_rp_options.incl.pl1 */ 5 2 /* Created: June 1982 by G. Palter */ 5 3 5 4 /* Options for the standard subsystem request processor */ 5 5 5 6 dcl 1 rp_options aligned based (rp_options_ptr), 5 7 2 version character (8), 5 8 2 language_info, /* defines the request language */ 5 9 3 non_standard_language bit (1) aligned, /* ... ON => use language defined in following array */ 5 10 3 character_types (0 : 511) fixed binary (9) unaligned unsigned, 5 11 2 abbrev_info, /* information related to abbreviation processing ... */ 5 12 3 expand_request_lines bit (1) aligned, /* ... ON => request processor should expand abbreviations */ 5 13 3 default_profile_ptr pointer, /* ... -> profile to use if ".u" given without pathname */ 5 14 3 profile_ptr pointer; /* ... -> abbreviation profile used by this subsystem */ 5 15 5 16 dcl rp_options_ptr pointer; 5 17 5 18 dcl RP_OPTIONS_VERSION_1 character (8) static options (constant) initial ("rpo_0001"); 5 19 5 20 /* END INCLUDE FILE ... ssu_rp_options.incl.pl1 */ 549 550 6 1 /* BEGIN INCLUDE FILE ... _cp_subsys_info.incl.pl1 */ 6 2 6 3 6 4 /****^ HISTORY COMMENTS: 6 5* 1) change(82-06-01,Palter), approve(), audit(), install(): 6 6* Created include file. 6 7* 2) change(86-05-18,GDixon), approve(86-05-18,MCR7357), 6 8* audit(86-06-16,Farley), install(86-07-18,MR12.0-1098): 6 9* Modify cp_subsys_info to make TCT table entries aligned. Calling sequence 6 10* of tct_ changed when the routine was renamed to find_char_. 6 11* END HISTORY COMMENTS */ 6 12 6 13 6 14 /* Data structure passed by subsystem utilities to the command processor to convey request processor options to the 6 15* command processor */ 6 16 6 17 dcl 1 cp_subsys_info aligned based (cp_subsys_info_ptr), 6 18 2 version character (8), 6 19 2 language_info, 6 20 3 non_standard_language bit (1) aligned, /* ON => a non-standard language definition is to be used */ 6 21 3 full_tct_table character (512), /* PL/I search table for scanning the request line */ 6 22 3 tokens_only_tct_table character (512); /* PL/I search table for scanning |[...] return strings */ 6 23 6 24 6 25 dcl cp_subsys_info_ptr pointer; 6 26 6 27 dcl CP_SUBSYS_INFO_VERSION_1 character (8) static options (constant) initial ("csi_0001"); 6 28 6 29 /* END INCLUDE FILE ... _cp_subsys_info.incl.pl1 */ 551 552 553 554 end ssu_request_processor_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1539.3 ssu_request_processor_.pl1 >special_ldd>install>MR12.1-1054>ssu_request_processor_.pl1 545 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 547 4 01/21/85 0912.2 _ssu_sci.incl.pl1 >ldd>include>_ssu_sci.incl.pl1 549 5 09/28/82 1437.6 ssu_rp_options.incl.pl1 >ldd>include>ssu_rp_options.incl.pl1 551 6 07/24/86 2051.7 _cp_subsys_info.incl.pl1 >ldd>include>_cp_subsys_info.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ACTION_CANT_RESTART 000000 constant bit(36) initial dcl 3-7 set ref 1-42* 1-48* 1-56* CP_SUBSYS_INFO_VERSION_1 000012 constant char(8) initial unaligned dcl 6-27 ref 126 338 435 466 ITS_MODIFIER constant bit(6) initial unaligned dcl 2-55 ref 1-41 P_abbrev_mode parameter bit(1) dcl 52 set ref 479 489* 497 509 P_active_string parameter char unaligned dcl 44 set ref 278 286* 310* 326 346* P_active_string_type parameter fixed bin(17,0) dcl 45 set ref 278 286* 310* 326 346* P_code parameter fixed bin(35,0) dcl 35 set ref 158 166* 167 167* 183* 198* 200* 211* 215* 224 240* 243 243* 249* 254* 264 267* 278 286* 310* 326 334* 341* 342 346* 355 364* 382* 390 399* 411* 419 428* 438* 439 449* P_default_profile_ptr parameter pointer dcl 50 set ref 479 487* 497 505* 507 P_profile_ptr parameter pointer dcl 51 set ref 479 488* 497 505* 508 P_request_line_lth parameter fixed bin(21,0) dcl 40 set ref 158 166* 196* 224 230 P_request_line_ptr parameter pointer dcl 39 set ref 158 166* 196* 224 229 P_request_string parameter char unaligned dcl 42 set ref 264 267 267 267 267 P_return_value parameter varying char dcl 46 set ref 278 286* 310* 326 346* P_rp_options_ptr parameter pointer dcl 37 set ref 278 310* 326 331 332 355 361 390 396 419 425 P_rp_options_version parameter char(8) unaligned dcl 48 ref 355 363 390 398 P_sci_ptr parameter pointer dcl 34 set ref 119 122 138 141 158 161* 163 224 227 264 267* 278 281* 283 310* 326 329 355 358* 360 390 393* 395 419 422* 424 457 460* 462 479 482* 484 497 500* 502 RP_OPTIONS_VERSION_1 000014 constant char(8) initial unaligned dcl 5-18 ref 333 363 371 398 403 427 SCI_VERSION_3 000016 constant char(8) initial unaligned dcl 4-98 ref 1-53 SSU_ 000001 constant char(32) initial unaligned dcl 1-31 set ref 1-42* 1-48* 1-56* WHITESPACE 000020 constant char(5) initial unaligned dcl 83 ref 235 abbrev_$subsys_process_line 000024 constant entry external dcl 96 ref 249 abbrev_enabled 404 based bit(1) level 3 dcl 66 set ref 129* 249 378 445* 470* 489 509* abbrev_info 404 based structure level 2 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" abbrev_info 204 based structure level 2 in structure "rp_options" dcl 5-6 in procedure "ssu_request_processor_" abort_line_label 46 based label variable level 3 dcl 4-14 set ref 173 175* 193* 206* 292 294* 306* 317* abort_subsystem_label 100 based label variable level 3 dcl 4-14 set ref 178 179* 192* 205* 297 298* 305* 316* addr builtin function dcl 113 ref 240 240 249 249 254 254 267 267 337 438 438 1-41 character_types 3 based fixed bin(9,0) array level 3 packed unsigned unaligned dcl 5-6 set ref 340 374* 376* 406* 437 cleanup 000524 stack reference condition dcl 111 ref 188 301 code 000104 automatic fixed bin(35,0) dcl 61 set ref 196* 198 command_processor_$subsys_eval_string 000030 constant entry external dcl 100 ref 346 command_processor_$subsys_execute_line 000026 constant entry external dcl 98 ref 249 249 254 command_processor_$validate_cp_subsys_info 000032 constant entry external dcl 103 ref 341 438 cp_data_$standard_language 000010 external static structure level 1 dcl 86 ref 376 406 cp_subsys_info based structure level 2 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" set ref 249 249 254 254 441* cp_subsys_info based structure level 1 dcl 6-17 in procedure "ssu_request_processor_" cp_subsys_info_ptr 000544 automatic pointer dcl 6-25 set ref 337* 341* 344* 346* cpescape 200 based entry variable level 3 dcl 4-14 ref 240 cu_$cp 000034 constant entry external dcl 104 ref 166 cu_$evaluate_active_string 000036 constant entry external dcl 105 ref 286 default_profile_ptr 406 based pointer level 3 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" set ref 130* 249* 379 446* 471* 487 507* 526 default_profile_ptr 206 based pointer level 3 in structure "rp_options" dcl 5-6 in procedure "ssu_request_processor_" set ref 379* 409* 443* 446 entries 144 based structure level 2 dcl 4-14 error_table_$bad_ptr 000050 external static fixed bin(35,0) dcl 1-33 set ref 1-42* error_table_$null_info_ptr 000052 external static fixed bin(35,0) dcl 1-34 set ref 1-48* error_table_$unimplemented_version 000012 external static fixed bin(35,0) dcl 89 in procedure "ssu_request_processor_" ref 334 364 399 428 error_table_$unimplemented_version 000054 external static fixed bin(35,0) dcl 1-35 in procedure "ssu_check_sci" set ref 1-56* evaluate_active_string 220 based entry variable level 3 dcl 4-14 ref 310 execute_line 214 based entry variable level 3 dcl 4-14 ref 196 executing_request 32(02) based bit(1) level 4 packed unaligned dcl 4-14 set ref 172 191* 204* 291 304* 315* expand_request_lines 204 based bit(1) level 3 dcl 5-6 set ref 378* 408* 445 flags 32 based structure level 3 dcl 4-14 full_tct_table 3 000105 automatic char(512) level 3 in structure "lcsi" dcl 76 in procedure "ssu_request_processor_" set ref 340* 437* full_tct_table 3 based char(512) level 4 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" set ref 374 global_info 4 based structure level 2 dcl 4-14 hcs_$terminate_noname 000040 constant entry external dcl 106 ref 529 534 idx 000522 automatic fixed bin(21,0) dcl 81 set ref 233* 234 235 235 240 240 240 in_listener 32(01) based bit(1) level 4 packed unaligned dcl 4-14 set ref 171 177 190* 192 202* 205 290 296 303* 305 314* 316 index builtin function dcl 113 ref 233 irpo based structure level 1 dcl 66 set ref 124 147 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 jdx 000523 automatic fixed bin(21,0) dcl 81 set ref 235* 237* 238 language_info 2 based structure level 2 in structure "rp_options" dcl 5-6 in procedure "ssu_request_processor_" language_info 2 based structure level 3 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" language_info 2 000105 automatic structure level 2 in structure "lcsi" dcl 76 in procedure "ssu_request_processor_" lcsi 000105 automatic structure level 1 dcl 76 set ref 337 438 438 441 length builtin function dcl 113 ref 267 267 listener_info 100 based structure level 2 dcl 4-14 non_standard_language 2 based bit(1) level 3 in structure "rp_options" dcl 5-6 in procedure "ssu_request_processor_" set ref 339 373* 405* 436 non_standard_language 2 based bit(1) level 4 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" set ref 127* 373 374 467* non_standard_language 2 000105 automatic bit(1) level 3 in structure "lcsi" dcl 76 in procedure "ssu_request_processor_" set ref 339* 436* 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 null builtin function dcl 113 in procedure "ssu_request_processor_" ref 130 143 145 145 145 145 148 286 286 331 368 409 432 463 469 469 469 469 471 485 503 529 534 old_default_profile_ptr 000560 automatic pointer dcl 524 set ref 526* 529 529 529 529* 534 old_profile_ptr 000562 automatic pointer dcl 524 set ref 527* 534 534 534 534 534* p_new_default_profile_ptr parameter pointer dcl 523 ref 520 529 534 p_new_profile_ptr parameter pointer dcl 523 ref 520 529 534 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 parent_area_ptr 2 based pointer level 2 dcl 4-14 ref 124 147 profile_ptr 210 based pointer level 3 in structure "rp_options" dcl 5-6 in procedure "ssu_request_processor_" set ref 380* 409* 443* 447 profile_ptr 410 based pointer level 3 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" set ref 130* 249* 380 447* 471* 488 508* 527 program_interrupt 160 based entry variable level 3 in structure "sci" dcl 4-14 in procedure "ssu_request_processor_" ref 182 program_interrupt 000532 stack reference condition dcl 111 in procedure "ssu_request_processor_" ref 180 request_line based char unaligned dcl 57 set ref 233 235 240 240 249* 254* request_line_lth 000100 automatic fixed bin(21,0) dcl 58 set ref 230* 232 233 235 240 240 240 249 249 254 254 request_line_ptr 000102 automatic pointer dcl 59 set ref 229* 233 235 240 240 249 254 request_processor_info 42 based structure level 2 dcl 4-14 rp_options based structure level 1 dcl 5-6 rp_options_ptr 000542 automatic pointer dcl 5-16 in procedure "ssu_request_processor_" set ref 332* 333 339 340 361* 371 373 374 376 378 379 380 396* 403 405 406 408 409 409 425* 427 436 437 443 443 445 446 447 rp_options_ptr 44 based pointer level 3 in structure "sci" dcl 4-14 in procedure "ssu_request_processor_" set ref 124* 126 127 129 130 130 143 147 148* 249 249 249 249 249 254 254 344 368 373 374 374 378 379 380 432 441 445 446 447 463 466 467 470 471 471 485 487 488 489 503 507 508 509 526 527 saved_abort_line_label 000514 automatic label variable dcl 78 set ref 173* 193 206 292* 306 317 saved_abort_subsystem_label 000510 automatic label variable dcl 78 set ref 178* 192 205 297* 305 316 saved_executing_request 000521 automatic bit(1) dcl 79 set ref 172* 191 204 291* 304 315 saved_in_listener 000520 automatic bit(1) dcl 79 set ref 171* 190 202 290* 303 314 sci based structure level 1 dcl 4-14 sci_parent_area based area(1024) dcl 4-96 ref 124 147 sci_ptr 000540 automatic pointer dcl 4-94 set ref 122* 124 124 126 127 129 130 130 141* 143 147 147 148 163* 165 171 172 173 175 177 178 179 182 182* 190 191 192 192 193 196 196* 202 204 205 205 206 227* 240 240* 249 249* 249* 249 249 249 249 254* 254* 254 254 283* 285 290 291 292 294 296 297 298 303 304 305 305 306 310 314 315 316 316 317 329* 344 346* 346* 360* 368 368* 373 374 374 378 379 380 395* 424* 432 432* 441 445 446 447 462* 463 463* 466 467 470 471 471 484* 485 485* 487 488 489 502* 503 503* 507 508 509 526 527 ssu_$execute_line 000042 constant entry external dcl 107 ref 267 ssu_$get_subsystem_and_request_name 000044 constant entry external dcl 108 ref 249 254 346 ssu_$invoke_request 000046 constant entry external dcl 109 ref 249 249 254 254 346 346 ssu_et_$null_request_line 000014 external static fixed bin(35,0) dcl 92 ref 167 198 ssu_et_$program_interrupt 000016 external static fixed bin(35,0) dcl 92 ref 183 ssu_et_$request_line_aborted 000020 external static fixed bin(35,0) dcl 92 ref 215 ssu_et_$subsystem_aborted 000022 external static fixed bin(35,0) dcl 92 ref 211 standalone_invocation 32 based bit(1) level 4 packed unaligned dcl 4-14 ref 165 285 sub_err_ 000056 constant entry external dcl 1-37 ref 1-42 1-48 1-56 substr builtin function dcl 113 ref 235 240 240 267 267 unspec builtin function dcl 113 in procedure "ssu_request_processor_" set ref 340* 340 374* 374 376* 376 406* 406 437* 437 unspec builtin function dcl 1-39 in procedure "ssu_check_sci" ref 1-42 1-42 1-56 1-56 verify builtin function dcl 113 ref 235 version based char(8) level 3 in structure "irpo" dcl 66 in procedure "ssu_request_processor_" set ref 126* 466* version based char(8) level 2 in structure "rp_options" dcl 5-6 in procedure "ssu_request_processor_" set ref 333 371* 403* 427 version 000105 automatic char(8) level 2 in structure "lcsi" dcl 76 in procedure "ssu_request_processor_" set ref 338* 435* version based char(8) level 2 in structure "sci" dcl 4-14 in procedure "ssu_request_processor_" ref 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 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 substr builtin function dcl 1-39 NAMES DECLARED BY EXPLICIT CONTEXT. LINE_ABORT_RETURN 000461 constant label dcl 215 ref 175 294 RESIGNAL_BAD_POINTER 002422 constant label dcl 1-42 ref 1-44 RESIGNAL_BAD_VERSION 002554 constant label dcl 1-56 set ref 1-59 RESIGNAL_NULL_POINTER 002502 constant label dcl 1-48 ref 1-50 RETURN_FROM_EXECUTE_LINE 000426 constant label dcl 202 ref 184 213 217 SUBSYSTEM_ABORT_RETURN 000455 constant label dcl 211 ref 179 298 evaluate_active_string 001351 constant entry external dcl 326 execute_line 000467 constant entry external dcl 224 execute_string 001016 constant entry external dcl 264 get_abbrev_info 002166 constant entry external dcl 479 get_default_rp_options 001664 constant entry external dcl 390 get_rp_options 001553 constant entry external dcl 355 init_rp_options 000075 constant entry external dcl 119 ref 368 432 463 485 503 maybe_terminate_profiles 002322 constant entry internal dcl 520 ref 145 443 469 505 prepare_to_evaluate_string 001065 constant entry external dcl 278 prepare_to_execute_line 000167 constant entry external dcl 158 reset_rp_options 002104 constant entry external dcl 457 set_abbrev_info 002240 constant entry external dcl 497 set_rp_options 001750 constant entry external dcl 419 ssu_check_sci 002414 constant entry internal dcl 1-26 ref 161 281 358 393 422 460 482 500 ssu_request_processor_ 000064 constant entry external dcl 26 term_rp_options 000131 constant entry external dcl 138 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3532 3612 3050 3542 Length 4206 3050 60 360 461 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ssu_request_processor_ 504 external procedure is an external procedure. on unit on line 180 72 on unit on unit on line 188 64 on unit on unit on line 301 64 on unit maybe_terminate_profiles internal procedure shares stack frame of external procedure ssu_request_processor_. ssu_check_sci internal procedure shares stack frame of external procedure ssu_request_processor_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ssu_request_processor_ 000100 request_line_lth ssu_request_processor_ 000102 request_line_ptr ssu_request_processor_ 000104 code ssu_request_processor_ 000105 lcsi ssu_request_processor_ 000510 saved_abort_subsystem_label ssu_request_processor_ 000514 saved_abort_line_label ssu_request_processor_ 000520 saved_in_listener ssu_request_processor_ 000521 saved_executing_request ssu_request_processor_ 000522 idx ssu_request_processor_ 000523 jdx ssu_request_processor_ 000540 sci_ptr ssu_request_processor_ 000542 rp_options_ptr ssu_request_processor_ 000544 cp_subsys_info_ptr ssu_request_processor_ 000560 old_default_profile_ptr maybe_terminate_profiles 000562 old_profile_ptr maybe_terminate_profiles THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ent_var_desc call_ext_in call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op shorten_stack ext_entry ext_entry_desc int_entry op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. abbrev_$subsys_process_line command_processor_$subsys_eval_string command_processor_$subsys_execute_line command_processor_$validate_cp_subsys_info cu_$cp cu_$evaluate_active_string hcs_$terminate_noname ssu_$execute_line ssu_$get_subsystem_and_request_name ssu_$invoke_request sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. cp_data_$standard_language error_table_$bad_ptr error_table_$null_info_ptr error_table_$unimplemented_version error_table_$unimplemented_version ssu_et_$null_request_line ssu_et_$program_interrupt ssu_et_$request_line_aborted ssu_et_$subsystem_aborted LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 26 000063 29 000071 119 000072 122 000102 124 000106 126 000115 127 000120 129 000121 130 000122 132 000126 138 000127 141 000136 143 000142 145 000146 147 000153 148 000156 150 000161 158 000162 161 000177 163 000206 165 000212 166 000215 167 000230 168 000236 171 000237 172 000243 173 000250 175 000254 177 000257 178 000261 179 000265 180 000270 182 000304 183 000316 184 000322 188 000325 190 000341 191 000350 192 000355 193 000364 194 000370 196 000371 198 000416 200 000425 202 000426 204 000434 205 000441 206 000450 208 000454 211 000455 213 000460 215 000461 217 000464 224 000465 227 000477 229 000503 230 000506 232 000510 233 000512 234 000523 235 000524 237 000542 238 000543 240 000545 243 000603 244 000607 249 000610 254 000720 257 001010 264 001012 267 001034 269 001056 278 001057 281 001112 283 001121 285 001125 286 001130 287 001164 290 001165 291 001171 292 001176 294 001202 296 001205 297 001207 298 001213 301 001216 303 001232 304 001241 305 001246 306 001255 307 001261 310 001262 314 001320 315 001326 316 001333 317 001342 319 001346 326 001347 329 001376 331 001402 332 001406 333 001411 334 001415 335 001420 337 001421 338 001423 339 001426 340 001430 341 001433 342 001444 343 001446 344 001447 346 001451 349 001544 355 001546 358 001565 360 001574 361 001600 363 001603 364 001610 365 001613 368 001614 371 001626 373 001632 374 001636 376 001644 378 001651 379 001653 380 001655 382 001660 384 001661 390 001662 393 001676 395 001705 396 001711 398 001714 399 001721 400 001724 403 001725 405 001730 406 001731 408 001736 409 001737 411 001742 413 001743 419 001744 422 001762 424 001771 425 001775 427 002000 428 002004 429 002007 432 002010 435 002022 436 002025 437 002030 438 002033 439 002046 441 002050 443 002055 445 002066 446 002073 447 002075 449 002100 451 002101 457 002102 460 002111 462 002120 463 002124 466 002136 467 002143 469 002144 470 002151 471 002154 473 002160 479 002161 482 002173 484 002202 485 002206 487 002220 488 002225 489 002231 491 002235 497 002236 500 002245 502 002254 503 002260 505 002272 507 002303 508 002311 509 002315 511 002321 520 002322 526 002324 527 002330 529 002332 534 002360 539 002413 1 26 002414 1 41 002416 1 42 002422 1 44 002475 1 47 002476 1 48 002502 1 50 002544 1 53 002545 1 56 002554 1 59 002630 ----------------------------------------------------------- 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