COMPILATION LISTING OF SEGMENT dm_system_shutdown Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/04/85 0932.6 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 4* * * 5* *********************************************************** */ 6 7 /* format: ^indcomtxt */ 8 /* DESCRIPTION: 9* 10* This routine implements the dm_system_shutdown command and the 11* "shutdown" DM daemon request. The command and request are almost 12* identical, having the same syntax, but differ slightly in how they are 13* invoked. The shutdown request is an ssu_ subsystem request. 14* 15* The main procedure implements the dm_system_shutdown command. It sets up 16* up an ssu_ standalone invocation. 17* The entry dm_system_shutdown$shutdown_request implements the request. 18* It is invoked from within an ssu_ subsystem, so does not have to create 19* a subsystem invocation, instead just using the p_sci_ptr passed to 20* it as a parameter to identify the subsystem invocation. As required of 21* an ssu_ request procedure it also takes a p_info_ptr parameter, but that 22* parameter is not used. 23* 24* The command is expected to be executed in a Data Management administrator's 25* process, the request in the Data Management daemon's process. Despite the 26* difference, for simplicity the code is the same no matter which process in 27* which it is being executed. This is why a request is sent to the daemon 28* to finish up scheduling the shutdown, even though we might already be in 29* the daemon's process. 30* 31* Error handling is done in the standard ssu_ manner, using ssu_$abort_line 32* and ssu_$print_message. 33* 34* The argument processing technology deserves some explanation. The constant 35* array CONTROL_ARGUMENT has the names of all control arguments. The constant 36* array ARGUMENT_TYPE contains a short description of the type of argument 37* expected to follow a given control argument. The index into CONTOL_ARGUMENT 38* of a control argument corresponds with the index of its expected argument 39* type in ARGUMENT_TYPE. The type is used in error messages only. 40* 41* Two variables control the argument processing, accept_control_argument (a 42* flag) and control argument_idx (an array index). If accept_control_argument 43* is on, the argument being processed is expected to be a control argument. 44* If it is off, the argument must not be a control argument. When 45* accept_control_argument is on, control_argument_idx is equal to -1, 46* otherwise it is equal to the CONTROL_ARGUMENT index of the last control 47* argument last processed. 48* 49* Each argument is processed in one iteration of the ARG_PROCESSING_LOOP as 50* follows: If accept_control_argument is on, process it as a control argument 51* by calling PROCESS_CONTROL_ARGUMENT, which will set accept_control_argument 52* to off if it expects an argument to follow and will set control_argument_idx 53* to its CONTROL_ARGUMENT index. If accept_control_argument is off and the 54* argument being processed does not begin with "-" (the trigger character 55* for control arguments), process the argument by calling 56* PROCESS_ARGUMENT, which will reset accept_control_argument to on and 57* control_argument_idx to -1 if no more arguments are expected for the 58* current control argument. If accept_control_argument is off and the 59* argument being processed is a supported control argument, abort; 60* otherwise call PROCESS_ARGUMENT. 61* 62* PROCESS_ARGUMENT also processes the argument it is given is a fashion 63* particular to the current control argument (e.g., processes the 64* argument following -user_bump_time as a time string, the one following 65* -dm_system_directory as a pathname) and stores the processed value of the 66* argument in the arg_info structure. 67* 68* 69* Following is info file documentation of the dm_system_shutdown command. 70* The request has the same syntax, with the name shutdown instead of 71* dm_system_shutdown. 72* 73* (continued) 74* 75* 08/21/84 dm_system_shutdown 76* 77* Syntax: dm_system_shutdown {-cargs} 78* 79* 80* Function: This command schedules a Data Management system (DMS) 81* shutdown. The DMS can be specified by the pathname of the its 82* per-system directory, i.e., the directory in which it resides. By 83* default, the DMS which this process is currently using is scheduled to 84* be shut down. Processes using the DMS are notified of the scheduled 85* shutdown via the dm_shutdown_scheduled_ IPS signal. 86* 87* The system shutdown process consists of five events executed at the 88* following five points in time, usually, but not necessarily, in the 89* given order: 90* 91* 1) At user-warning-time: 92* a warning message is printed in each process using the 93* DMS as follows: 94* 95* DM is shutting down; no new transaction will be allowed after 96* 9:00. Please use the dm_ser_shutdown command, or, at 9:15, a 97* forced shutdown will be done. Shutdown reason: {reason from 98* dm_system_data_}. 99* 100* 2) At begin-shutdown-time: 101* the Data Management daemon puts the DMS in a state wherin 102* no new transactions can be created. This is considered the 103* beginning of the DMS shutdown. 104* 105* 3) At user-shutdown-time: 106* for each user process still using the DMS, a DM user 107* shutdown is executed in the process. A message is printed 108* informing the user, as follows: 109* 110* The Data Management system is shutting down; starting DM user 111* shutdown. Shutdown reaon: {reason from dm_system_data_}. 112* 113* 4) At user-bump-time: 114* the Data Management daemon bumps each process still using 115* the DMS. 116* 117* 5) At daemon-logout-time: 118* the shutdown is made complete by logging out the Data 119* Management daemon. 120* 121* The time of each event is determined according to the following rules: 122* 123* 1) If the time is specified with a control argument ending in 124* "_time" the event is scheduled to occur at that time. 125* 2) Starting from each specified time, the times for 126* subsequent events are calculated using the specified or 127* default delays, until an event is reached which has a 128* specified time. 129* 3) If the first event is not scheduled, then starting from 130* the first specified time, calculate the times for previous 131* events using specified or default delays, until the first 132* event is reached. 133* 4) If no times are specified, the user-bump-time defaults to 134* the scheduled Multics shutdown time, and other times are 135* calculated from there. 136* 5) If no times are specified and there is no Multics shutdown 137* scheduled, an error message is returned. 138* 139* 140* Control arguments: 141* -dm_system_directory PATH, -dmsd PATH 142* is the pathname, PATH, of the DM per-system directory in which the 143* DMS resides. Several DMSs may reside in the DM per-system directory. 144* The one selected is the one for the current bootload at the AIM 145* authorization of the caller. If not specified, the default DMS is 146* the DMS the process is currently using. If not specified and the 147* process is not currently using a DMS, an error message is printed and 148* no action is performed. 149* -reason STRING 150* is the reason, STRING, why the DMS is being shut down. This reason 151* is ultimately part of the messages received by users of the DMS. If 152* not specified, a prompt is issued for the reason. STRING can be no 153* longer than 64 characters. STRING must be quoted if it contains 154* whitespace. 155* -user_warning_time TIME, -uwtm TIME 156* specifies the user-warning-time. TIME may be absolute or relative to 157* the time at which the dm_system_shutdown command is invoked. TIME 158* must be acceptable to the convert_date_to_binary_ subroutine. If no 159* user-warning-time is specified, the default is to use the config file 160* begin_shutdown_delay to determine the user-warning-time, calculating 161* backwrads in time. 162* -begin_shutdown_delay DELAY, -bsd DELAY 163* specifies the time period between the user-warning-time and the 164* begin-shutdown-time. DELAY must be in a form acceptable to the 165* convert_date_to_binary_ subroutine. If no begin-shutdown-time is 166* specified, the default is to use the config file begin_shutdown_delay 167* to determine the begin-shutdown-time. 168* -begin_shutdown_time TIME, -bstm TIME 169* specifies the begin-shutdown-time. TIME may be absolute or relative 170* to the time at which the dm_system_shutdown command is invoked. TIME 171* must be acceptable to the convert_date_to_binary_ subroutine. If no 172* begin-shutdown-time is specified, the default is to use the config 173* file begin_shutdown_delay to determine the begin-shutdown-time. 174* -user_shutdown_delay DELAY, -usd DELAY 175* specifies the time period between the begin-shutdown-time and the 176* user-shutdown-time. DELAY must be in a form acceptable to the 177* convert_date_to_binary_ subroutine. If no user-shutdown-time is 178* specified, the default is to use the config file user_shutdown_delay 179* to determine the user-shutdown-time. 180* -user_shutdown_time TIME, -ustm TIME 181* specifies the user-shutdown-time. TIME may be absolute or relative 182* to the time at which the dm_system_shutdown command is invoked. TIME 183* must be acceptable to the convert_date_to_binary_ subroutine. If no 184* user-shutdown-time is specified, the default is to use the config 185* file user_shutdown_delay to determine the user-shutdown-time. 186* -user_bump_delay DELAY, -ubd DELAY 187* specifies the time period between the user-shutdown-time and the 188* user-bump-time. DELAY must be in a form acceptable to the 189* convert_date_to_binary_ subroutine. If no user-bump-time is 190* specified, the default is to use the config file user_bump_delay to 191* determine the user-bump-time. 192* -user_bump_time TIME, -ubtm TIME 193* specifies the user-bump-time. TIME may be absolute or relative to 194* the time at which the dm_system_shutdown command is invoked. TIME 195* must be acceptable to the convert_date_to_binary_ subroutine. If no 196* times are specified via a -..._time control argument, the 197* user-bump-time defaults to the scheduled Multics shutdown time. If a 198* time other than the user-bump-time is specified, the default is to 199* use the config file user_bump_delay to determine the user-bump-time. 200* -daemon_logout_delay DELAY, -dld DELAY 201* specifies the time period between the user-bump-time and the 202* daemon-logout-time. DELAY must be in a form acceptable to the 203* convert_date_to_binary_ subroutine. If no daemon-logout-time is 204* specified, the default is to use the config file daemon_logout_delay 205* to determine the daemon-logout-time. 206* -daemon_logout_time TIME, -dltm TIME 207* specifies the daemon-logout-time. TIME may be absolute or relative 208* to the time at which the dm_system_shutdown command is invoked. TIME 209* must be acceptable to the convert_date_to_binary_ subroutine. If no 210* daemon-logout-time is specified, the default is to use the config 211* file daemon_logout_delay to determine the daemon-logout-time. 212* 213* 214* Notes on access requirements: 're' permission to dm_admin_gate_ is 215* required to execute this command. 216* 217* 218* Examples: 219* 220* Given: 221* Multics shutdown scheduled for 8:00. 222* All default delays are five minutes. 223* 224* dm_system_shutdown -bsd 20min 225* 226* Schedules shutdown with following times: 227* user-warning: 7:30 (specified delay) 228* begin-shutdown: 7:50 (default delay) 229* user-shutdown: 7:55 (default delay) 230* user-bump: 8:00 (default time) 231* daemon-logout: 8:05 (default delay) 232* 233* dm_system_shutdown -uwtm 5:00 -ustm 6:10 -ubtm 6:00 234* 235* Schedules shutdown with following times: 236* user-warning: 5:00 (specified time) 237* begin-shutdown: 5:05 (default delay) 238* user-shutdown: 6:10 (specified time) 239* user-bump: 6:00 (specified time) 240* daemon-logout: 6:05 (default delay) 241**/ 242 243 /* HISTORY: 244* 245*Written by Matthew Pierret, 09/05/84. 246*Modified: 247*10/03/84 by Lee A. Newcomb: to call dm_misc_util_$set_system_dir as this 248* entry is not privileged now and call it with a code arg. 249*10/04/84 by Lee A. Newcomb: Set char strings that are tested to "" after 250* unspec'ing the structure containing them, e.g., 251* arg_info.dm_system_directory. 252*10/29/84 by Lee A. Newcomb: Fixed to not use dm_ prefix in dm_misc_util 253* entries. 254*11/22/84 by Lee A. Newcomb: Changed dm_misc_util_$(get set)_system_dir 255* to use correct calling sequences. 256*02/22/85 by Lee A. Newcomb: Fixed the short names of the -*_time control args 257* to all end with "tm" instead of "t" (e.g., -uwt --> -uwtm). 258*03/19/85 by S. Cox: Added dm_not_available_ handler. 259**/ 260 261 /* format: style2,ll79,indnoniterend,^indnoniterdo */ 262 /* format: comcol50,indblkcom,indcomtxt */ 263 264 dm_system_shutdown: 265 proc (); 266 267 /* START OF DECLARATIONS */ 268 /* Parameter */ 269 270 dcl p_info_ptr ptr parm; 271 dcl p_sci_ptr ptr parm; 272 273 /* Automatic */ 274 275 dcl arg_info_ptr ptr; 276 dcl arg_list_ptr ptr; 277 dcl accept_control_argument 278 bit (1) aligned; 279 dcl arg_idx fixed bin; 280 dcl arg_len fixed bin (21); 281 dcl arg_ptr ptr; 282 dcl control_argument_idx fixed bin; 283 dcl is_active_function bit (1) aligned; 284 dcl number_of_args fixed bin; 285 dcl return_arg_len fixed bin (21); 286 dcl return_arg_ptr ptr; 287 288 dcl myname char (32); 289 dcl myversion char (32); 290 dcl 1 my_arg_info aligned like arg_info; 291 dcl 1 my_shutdown_info aligned like shutdown_info; 292 293 dcl code fixed bin (35) init (0); 294 dcl info_ptr ptr; 295 dcl sci_ptr ptr; 296 dcl this_is_a_standalone_invocation 297 bit (1) aligned; 298 dcl begin_shutdown_time_string 299 char (16); 300 dcl user_bump_time_string char (16); 301 dcl dummy_tm_shutdown_info_ptr 302 ptr; 303 304 /* Based */ 305 306 dcl arg char (arg_len) based (arg_ptr); 307 dcl 1 arg_info aligned based (arg_info_ptr), 308 2 spec aligned like shutdown_spec, 309 2 dm_system_directory 310 char (168) unal; 311 312 /* Builtin */ 313 314 dcl (addr, hbound, index, length, min, null, rtrim, substr, 315 unspec) builtin; 316 317 /* Constant */ 318 319 dcl ( 320 YES init ("1"b), 321 NO init ("0"b) 322 ) bit (1) aligned int static 323 options (constant); 324 dcl ( 325 COMMAND_NAME init ("dm_system_shutdown"), 326 COMMAND_VERSION init ("1.0"), 327 REQUEST_NAME init ("shutdown"), 328 REQUEST_VERSION init ("1.0") 329 ) char (32) int static 330 options (constant); 331 dcl ARGUMENT_TYPE (22) internal static 332 options (constant) char (64) 333 varying 334 init ("pathname", "pathname", 335 "reason", "reason", "time", "time", 336 "time", "time", "time delay", 337 "time delay", "time", "time", 338 "time delay", "time delay", "time", 339 "time", "time delay", "time delay", 340 "time", "time", "time delay", 341 "time delay"); 342 343 dcl CONTROL_ARGUMENT (22) internal static 344 options (constant) char (64) 345 varying 346 init ("-dm_system_directory", "-dmsd", 347 "-reason", "-reason", 348 "-user_warning_time", "-uwtm", 349 "-begin_shutdown_time", "-bstm", 350 "-begin_shutdown_delay", "-bsd", 351 "-user_shutdown_time", "-ustm", 352 "-user_shutdown_delay", "-usd", 353 "-user_bump_time", "-ubtm", 354 "-user_bump_delay", "-ubd", 355 "-daemon_logout_time", "-dltm", 356 "-daemon_logout_delay", "-dld"); 357 358 359 /* Condition */ 360 361 dcl dm_not_available_ condition; 362 363 /* Entry */ 364 365 dcl absolute_pathname_ entry (char (*), char (*), 366 fixed bin (35)); 367 dcl convert_date_to_binary_ 368 entry (char (*), fixed bin (71), 369 fixed bin (35)); 370 dcl convert_date_to_binary_$relative 371 entry (char (*), fixed bin (71), 372 fixed bin (71), fixed bin (35)); 373 dcl clock_ entry () returns (fixed bin (71)); 374 dcl cu_$arg_list_ptr entry (ptr); 375 dcl date_time_ entry (fixed bin (71), char (*)); 376 dcl dm_admin_util_$schedule_shutdown 377 entry (ptr, ptr); 378 dcl dm_misc_util_$get_system_dir 379 entry (char (*)); 380 dcl dm_misc_util_$set_system_dir 381 entry (char (*)); 382 dcl get_system_free_area_ entry () returns (ptr); 383 dcl ssu_$abort_line entry () options (variable); 384 dcl ssu_$arg_ptr entry (ptr, fixed bin, ptr, 385 fixed bin (21)); 386 dcl ssu_$destroy_invocation 387 entry (ptr); 388 dcl ssu_$print_message entry () options (variable); 389 dcl ssu_$return_arg entry (ptr, fixed bin, 390 bit (1) aligned, ptr, fixed bin (21)); 391 dcl ssu_$standalone_invocation 392 entry (ptr, char (*), char (*), ptr, 393 entry, fixed bin (35)); 394 dcl transaction_manager_$user_shutdown 395 entry (ptr, ptr, fixed bin (35)); 396 397 /* External */ 398 399 dcl dm_error_$dm_shutdown_not_sched 400 ext fixed bin (35); 401 dcl dm_error_$system_not_initialized 402 fixed bin (35) ext static; 403 dcl error_table_$active_function 404 ext fixed bin (35); 405 dcl error_table_$badopt ext fixed bin (35); 406 dcl error_table_$noarg ext fixed bin (35); 407 408 /* END OF DECLARATIONS */ 409 410 myname = COMMAND_NAME; 411 myversion = COMMAND_VERSION; 412 this_is_a_standalone_invocation = "1"b; 413 call cu_$arg_list_ptr (arg_list_ptr); 414 call ssu_$standalone_invocation (sci_ptr, myname, myversion, 415 arg_list_ptr, ABORT_ENTRY, code); 416 417 on dm_not_available_ 418 call ssu_$abort_line (sci_ptr, dm_error_$system_not_initialized) 419 ; 420 421 go to JOIN; 422 423 shutdown_request: 424 entry (p_sci_ptr, p_info_ptr); 425 426 myname = REQUEST_NAME; 427 myversion = REQUEST_VERSION; 428 this_is_a_standalone_invocation = "0"b; 429 sci_ptr = p_sci_ptr; 430 info_ptr = p_info_ptr; 431 go to JOIN; 432 433 JOIN: /* Process arguments. */ 434 call ssu_$return_arg (sci_ptr, number_of_args, is_active_function, 435 return_arg_ptr, return_arg_len); 436 437 if is_active_function 438 then call ssu_$abort_line (sci_ptr, error_table_$active_function, 439 myname); 440 441 arg_info_ptr = addr (my_arg_info); 442 unspec (arg_info) = ""b; 443 arg_info.spec.version = SHUTDOWN_SPEC_VERSION_1; 444 arg_info.spec.reason = ""; /* so if x = "" works */ 445 arg_info.dm_system_directory = ""; /* '' */ 446 447 accept_control_argument = YES; 448 control_argument_idx = -1; 449 450 ARG_PROCESSING_LOOP: 451 do arg_idx = 1 to number_of_args; 452 call ssu_$arg_ptr (sci_ptr, arg_idx, arg_ptr, arg_len); 453 if accept_control_argument = YES 454 then call PROCESS_CONTROL_ARGUMENT (arg, arg_info_ptr, 455 control_argument_idx, accept_control_argument); 456 else if index (arg, "-") ^= 1 457 then call PROCESS_ARGUMENT (arg, arg_info_ptr, 458 control_argument_idx, accept_control_argument); 459 else if (CONTROL_ARGUMENT_INDEX (arg) = -1) 460 then call PROCESS_ARGUMENT (arg, arg_info_ptr, 461 control_argument_idx, accept_control_argument); 462 else call ssu_$abort_line (sci_ptr, error_table_$noarg, 463 "^a must be followed by a^[n^] ^a.", 464 CONTROL_ARGUMENT (control_argument_idx), 465 ( 466 index ("aeiouh", 467 substr (ARGUMENT_TYPE (control_argument_idx), 1, 1)) 468 > 0), ARGUMENT_TYPE (control_argument_idx)); 469 end ARG_PROCESSING_LOOP; 470 471 if control_argument_idx >= 0 & accept_control_argument = NO 472 then call ssu_$abort_line (sci_ptr, error_table_$noarg, 473 "^a must be followed by a^[n^] ^a.", 474 CONTROL_ARGUMENT (control_argument_idx), 475 ( 476 index ("aeiouh", 477 substr (ARGUMENT_TYPE (control_argument_idx), 1, 1)) > 0), 478 ARGUMENT_TYPE (control_argument_idx)); 479 480 481 if arg_info.dm_system_directory = "" 482 then call dm_misc_util_$get_system_dir (arg_info.dm_system_directory) 483 ; 484 else do; 485 dummy_tm_shutdown_info_ptr = null (); 486 call transaction_manager_$user_shutdown ( 487 get_system_free_area_ (), dummy_tm_shutdown_info_ptr, code) 488 ; 489 if code ^= 0 490 then call ssu_$abort_line (sci_ptr, code, 491 "^/Could not shutdown use of a Data Management system." 492 ); 493 call dm_misc_util_$set_system_dir (arg_info.dm_system_directory) 494 ; 495 end; 496 ; 497 498 unspec (my_shutdown_info) = ""b; 499 my_shutdown_info.version = SHUTDOWN_INFO_VERSION_1; 500 501 call dm_admin_util_$schedule_shutdown (addr (arg_info.spec), 502 addr (my_shutdown_info)); 503 504 if my_shutdown_info.output_flags.no_time_specified 505 then call ssu_$abort_line (sci_ptr, dm_error_$dm_shutdown_not_sched, 506 "No time was specified, and there is no Multics shutdown scheduled." 507 ); 508 else if my_shutdown_info.output_flags.times_have_changed 509 then do; 510 call date_time_ (my_shutdown_info.times.begin_shutdown_time, 511 begin_shutdown_time_string); 512 call date_time_ (my_shutdown_info.times.user_bump_time, 513 user_bump_time_string); 514 call ssu_$print_message (sci_ptr, 0, 515 "DM system shutdown scheduled to begin at ^a, to bump users at ^a.", 516 begin_shutdown_time_string, user_bump_time_string); 517 end; 518 else call ssu_$print_message (sci_ptr, 519 dm_error_$dm_shutdown_not_sched, 520 "^/The current Multics shutdown time is earlier than the specified time." 521 ); 522 523 MAIN_RETURN: 524 call CLEANUP (); 525 return; 526 527 528 ABORT_ENTRY: 529 procedure (); 530 go to MAIN_RETURN; 531 end ABORT_ENTRY; 532 533 CLEANUP: 534 procedure (); 535 if this_is_a_standalone_invocation 536 then call ssu_$destroy_invocation (sci_ptr); 537 else ; 538 end CLEANUP; 539 540 PROCESS_ARGUMENT: 541 proc (pa_p_arg, pa_p_arg_info_ptr, pa_p_control_argument_idx, 542 pa_p_accept_control_argument); 543 544 dcl pa_p_arg char (*) parm; 545 dcl pa_p_arg_info_ptr ptr parm; 546 dcl pa_p_control_argument_idx 547 fixed bin parm; 548 dcl pa_p_accept_control_argument 549 bit (1) aligned parm; 550 551 dcl pa_code fixed bin (35); 552 dcl pa_computed_time fixed bin (71); 553 dcl pa_current_time fixed bin (71); 554 555 pa_code = 0; 556 557 goto ARGUMENT (pa_p_control_argument_idx); 558 559 ARGUMENT (1): /* -dm_system_directory */ 560 ARGUMENT (2): /* -dmsd */ 561 call absolute_pathname_ ((pa_p_arg), 562 pa_p_arg_info_ptr -> arg_info.dm_system_directory, pa_code); 563 if pa_code ^= 0 564 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 565 566 pa_p_control_argument_idx = -1; 567 pa_p_accept_control_argument = "1"b; 568 return; 569 570 ARGUMENT (3): /* -reason */ 571 ARGUMENT (4): /* -reason */ 572 pa_p_arg_info_ptr -> arg_info.spec.reason = 573 substr (pa_p_arg, 1, min (length (rtrim (pa_p_arg)), 64)); 574 575 pa_p_control_argument_idx = -1; 576 pa_p_accept_control_argument = "1"b; 577 return; 578 579 ARGUMENT (5): /* -user_warning_time */ 580 ARGUMENT (6): /* -uwtm */ 581 call convert_date_to_binary_ (pa_p_arg, 582 pa_p_arg_info_ptr -> arg_info.spec.times.user_warning_time, 583 pa_code); 584 if pa_code ^= 0 585 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 586 587 pa_p_control_argument_idx = -1; 588 pa_p_accept_control_argument = "1"b; 589 return; 590 591 ARGUMENT (7): /* -begin_shutdown_time */ 592 ARGUMENT (8): /* -bstm */ 593 call convert_date_to_binary_ (pa_p_arg, 594 pa_p_arg_info_ptr -> arg_info.spec.times.begin_shutdown_time, 595 pa_code); 596 if pa_code ^= 0 597 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 598 599 pa_p_control_argument_idx = -1; 600 pa_p_accept_control_argument = "1"b; 601 return; 602 603 ARGUMENT (9): /* -begin_shutdown_delay */ 604 ARGUMENT (10): /* -bsd */ 605 pa_current_time = clock_ (); 606 call convert_date_to_binary_$relative (pa_p_arg, pa_computed_time, 607 pa_current_time, pa_code); 608 if pa_code ^= 0 609 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 610 pa_p_arg_info_ptr -> arg_info.spec.delays.begin_shutdown_delay = 611 pa_computed_time - pa_current_time; 612 613 pa_p_control_argument_idx = -1; 614 pa_p_accept_control_argument = "1"b; 615 return; 616 617 ARGUMENT (11): /* -user_shutdown_time */ 618 ARGUMENT (12): /* -ustm */ 619 call convert_date_to_binary_ (pa_p_arg, 620 pa_p_arg_info_ptr -> arg_info.spec.times.user_shutdown_time, 621 pa_code); 622 if pa_code ^= 0 623 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 624 625 pa_p_control_argument_idx = -1; 626 pa_p_accept_control_argument = "1"b; 627 return; 628 629 ARGUMENT (13): /* -user_shutdown_delay */ 630 ARGUMENT (14): /* -usd */ 631 pa_current_time = clock_ (); 632 call convert_date_to_binary_$relative (pa_p_arg, pa_computed_time, 633 pa_current_time, pa_code); 634 if pa_code ^= 0 635 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 636 pa_p_arg_info_ptr -> arg_info.spec.delays.user_shutdown_delay = 637 pa_computed_time - pa_current_time; 638 639 pa_p_control_argument_idx = -1; 640 pa_p_accept_control_argument = "1"b; 641 return; 642 643 ARGUMENT (15): /* -user_bump_time */ 644 ARGUMENT (16): /* -ubtm */ 645 call convert_date_to_binary_ (pa_p_arg, 646 pa_p_arg_info_ptr -> arg_info.spec.times.user_bump_time, 647 pa_code); 648 if pa_code ^= 0 649 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 650 651 pa_p_control_argument_idx = -1; 652 pa_p_accept_control_argument = "1"b; 653 return; 654 655 ARGUMENT (17): /* -user_bump_delay */ 656 ARGUMENT (18): /* -ubd */ 657 pa_current_time = clock_ (); 658 call convert_date_to_binary_$relative (pa_p_arg, pa_computed_time, 659 pa_current_time, pa_code); 660 if pa_code ^= 0 661 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 662 pa_p_arg_info_ptr -> arg_info.spec.delays.user_bump_delay = 663 pa_computed_time - pa_current_time; 664 665 pa_p_control_argument_idx = -1; 666 pa_p_accept_control_argument = "1"b; 667 return; 668 669 ARGUMENT (19): /* -daemon_logout_time */ 670 ARGUMENT (20): /* -dltm */ 671 call convert_date_to_binary_ (pa_p_arg, 672 pa_p_arg_info_ptr -> arg_info.spec.times.daemon_logout_time, 673 pa_code); 674 if pa_code ^= 0 675 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 676 677 pa_p_control_argument_idx = -1; 678 pa_p_accept_control_argument = "1"b; 679 return; 680 681 ARGUMENT (21): /* -daemon_logout_delay */ 682 ARGUMENT (22): /* -dld */ 683 pa_current_time = clock_ (); 684 call convert_date_to_binary_$relative (pa_p_arg, pa_computed_time, 685 pa_current_time, pa_code); 686 if pa_code ^= 0 687 then call ssu_$abort_line (sci_ptr, pa_code, pa_p_arg); 688 pa_p_arg_info_ptr -> arg_info.spec.delays.daemon_logout_delay = 689 pa_computed_time - pa_current_time; 690 691 pa_p_control_argument_idx = -1; 692 pa_p_accept_control_argument = "1"b; 693 return; 694 695 696 end PROCESS_ARGUMENT; 697 698 PROCESS_CONTROL_ARGUMENT: 699 proc (pca_p_arg, pca_p_arg_info_ptr, pca_p_control_argument_idx, 700 pca_p_accept_control_argument); 701 702 703 dcl pca_p_arg char (*) parm; 704 dcl pca_p_arg_info_ptr ptr parm; 705 dcl pca_p_control_argument_idx 706 fixed bin parm; 707 dcl pca_p_accept_control_argument 708 bit (1) aligned parm; 709 710 pca_p_control_argument_idx = CONTROL_ARGUMENT_INDEX (pca_p_arg); 711 712 go to CONTROL_ARGUMENT (pca_p_control_argument_idx); 713 714 CONTROL_ARGUMENT (-1): /* not a control argument */ 715 call ssu_$abort_line (sci_ptr, error_table_$badopt, pca_p_arg); 716 717 CONTROL_ARGUMENT (1): /* -dm_system_directory */ 718 CONTROL_ARGUMENT (2): /* -dmsd */ 719 pca_p_accept_control_argument = "0"b; 720 return; 721 CONTROL_ARGUMENT (3): /* -reason */ 722 CONTROL_ARGUMENT (4): /* -reason */ 723 pca_p_accept_control_argument = "0"b; 724 return; 725 CONTROL_ARGUMENT (5): /* -user_warning_time */ 726 CONTROL_ARGUMENT (6): /* -uwtm */ 727 pca_p_accept_control_argument = "0"b; 728 return; 729 CONTROL_ARGUMENT (7): /* -begin_shutdown_time */ 730 CONTROL_ARGUMENT (8): /* -bstm */ 731 pca_p_accept_control_argument = "0"b; 732 return; 733 CONTROL_ARGUMENT (9): /* -begin_shutdown_delay */ 734 CONTROL_ARGUMENT (10): /* -bsd */ 735 pca_p_accept_control_argument = "0"b; 736 return; 737 CONTROL_ARGUMENT (11): /* -user_shutdown_time */ 738 CONTROL_ARGUMENT (12): /* -ustm */ 739 pca_p_accept_control_argument = "0"b; 740 return; 741 CONTROL_ARGUMENT (13): /* -user_shutdown_delay */ 742 CONTROL_ARGUMENT (14): /* -usd */ 743 pca_p_accept_control_argument = "0"b; 744 return; 745 CONTROL_ARGUMENT (15): /* -user_bump_time */ 746 CONTROL_ARGUMENT (16): /* -ubtm */ 747 pca_p_accept_control_argument = "0"b; 748 return; 749 CONTROL_ARGUMENT (17): /* -user_bump_delay */ 750 CONTROL_ARGUMENT (18): /* -ubd */ 751 pca_p_accept_control_argument = "0"b; 752 return; 753 CONTROL_ARGUMENT (19): /* -daemon_logout_time */ 754 CONTROL_ARGUMENT (20): /* -dltm */ 755 pca_p_accept_control_argument = "0"b; 756 return; 757 CONTROL_ARGUMENT (21): /* -daemon_logout_delay */ 758 CONTROL_ARGUMENT (22): /* -dld */ 759 pca_p_accept_control_argument = "0"b; 760 return; 761 762 end PROCESS_CONTROL_ARGUMENT; 763 764 765 CONTROL_ARGUMENT_INDEX: 766 proc (cai_p_arg) returns (fixed bin); 767 768 dcl cai_p_arg char (*); 769 dcl cai_control_argument_idx 770 fixed bin; 771 772 do cai_control_argument_idx = 1 to hbound (CONTROL_ARGUMENT, 1) 773 while (CONTROL_ARGUMENT (cai_control_argument_idx) ^= cai_p_arg) 774 ; 775 end; 776 if cai_control_argument_idx > hbound (CONTROL_ARGUMENT, 1) 777 then return (-1); 778 else return (cai_control_argument_idx); 779 780 end CONTROL_ARGUMENT_INDEX; 781 1 1 /* ***** BEGIN INCLUDE FILE dm_shutdown_spec.incl.pl1 ***** */ 1 2 1 3 /* DESCRIPTION: 1 4* 1 5* Contains the shutdown_spec structure and the shutdown_info 1 6* structure. The shutdown_spec structure a reason for a DM 1 7* shutdown, a set of times and a set of delays. Only times and 1 8* delays which explicitly specified are set, the others are equal to 1 9* 0. 1 10* 1 11* The shutdown_spec is processed with the result being a 1 12* shutdown_info structure. It contains a reason and a set of times. 1 13* The times are either those times specified in the shutdown_spec or 1 14* times calculated from those times using delays. The delays are 1 15* those specified in the shutdown_spec, or, if not specified, 1 16* default delays. Default delays are kept in dm_system_data. 1 17**/ 1 18 1 19 /* HISTORY: 1 20*Written by Matthew Pierret, 09/06/84. 1 21*Modified: 1 22**/ 1 23 1 24 /* format: style2,ind3 */ 1 25 dcl 1 shutdown_spec aligned based (shutdown_spec_ptr), 1 26 2 version char (8) aligned, 1 27 2 reason char (64), 1 28 2 times, 1 29 3 user_warning_time 1 30 fixed bin (71), 1 31 3 begin_shutdown_time 1 32 fixed bin (71), 1 33 3 user_shutdown_time 1 34 fixed bin (71), 1 35 3 user_bump_time fixed bin (71), 1 36 3 daemon_logout_time 1 37 fixed bin (71), 1 38 2 delays, 1 39 3 begin_shutdown_delay 1 40 fixed bin (71), 1 41 3 user_shutdown_delay 1 42 fixed bin (71), 1 43 3 user_bump_delay fixed bin (71), 1 44 3 daemon_logout_delay 1 45 fixed bin (71); 1 46 1 47 dcl shutdown_spec_ptr ptr; 1 48 dcl SHUTDOWN_SPEC_VERSION_1 1 49 init ("ShutSp 1") char (8) aligned internal static options (constant); 1 50 1 51 dcl 1 shutdown_info aligned based (shutdown_info_ptr), 1 52 2 version char (8) aligned, 1 53 2 reason char (64), 1 54 2 times like shutdown_spec.times, 1 55 2 output_flags aligned, 1 56 3 no_time_specified 1 57 bit (1) unal, 1 58 3 times_have_changed 1 59 bit (1) unal, 1 60 3 mbz bit (34) unal; 1 61 1 62 dcl shutdown_info_ptr ptr init (null ()); 1 63 dcl SHUTDOWN_INFO_VERSION_1 1 64 init ("ShutIn 1") char (8) aligned internal static options (constant); 1 65 1 66 /* ******* END INCLUDE FILE dm_shutdown_spec.incl.pl1 ***** */ 782 783 784 end dm_system_shutdown; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/04/85 0824.6 dm_system_shutdown.pl1 >spec>on>7192.pbf-04/04/85>dm_system_shutdown.pl1 782 1 01/07/85 0859.8 dm_shutdown_spec.incl.pl1 >ldd>include>dm_shutdown_spec.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. ARGUMENT_TYPE 000650 constant varying char(64) initial array dcl 331 set ref 462 462* 471 471* COMMAND_NAME 001466 constant char(32) initial unaligned dcl 324 ref 410 COMMAND_VERSION 001456 constant char(32) initial unaligned dcl 324 ref 411 CONTROL_ARGUMENT 000062 constant varying char(64) initial array dcl 343 set ref 462* 471* 772 772 776 NO constant bit(1) initial dcl 319 ref 471 REQUEST_NAME 001446 constant char(32) initial unaligned dcl 324 ref 426 REQUEST_VERSION 001436 constant char(32) initial unaligned dcl 324 ref 427 SHUTDOWN_INFO_VERSION_1 000056 constant char(8) initial dcl 1-63 ref 499 SHUTDOWN_SPEC_VERSION_1 000060 constant char(8) initial dcl 1-48 ref 443 YES constant bit(1) initial dcl 319 ref 447 453 absolute_pathname_ 000010 constant entry external dcl 365 ref 559 accept_control_argument 000104 automatic bit(1) dcl 277 set ref 447* 453 453* 456* 459* 471 addr builtin function dcl 314 ref 441 501 501 501 501 arg based char unaligned dcl 306 set ref 453* 456 456* 459* 459* arg_idx 000105 automatic fixed bin(17,0) dcl 279 set ref 450* 452* arg_info based structure level 1 dcl 307 set ref 442* arg_info_ptr 000100 automatic pointer dcl 275 set ref 441* 442 443 444 445 453* 456* 459* 481 481 493 501 501 arg_len 000106 automatic fixed bin(21,0) dcl 280 set ref 452* 453 453 456 456 456 459 459 459 459 arg_list_ptr 000102 automatic pointer dcl 276 set ref 413* 414* arg_ptr 000110 automatic pointer dcl 281 set ref 452* 453 456 456 459 459 begin_shutdown_delay 34 based fixed bin(71,0) level 4 dcl 307 set ref 610* begin_shutdown_time 24 000256 automatic fixed bin(71,0) level 3 in structure "my_shutdown_info" dcl 291 in procedure "dm_system_shutdown" set ref 510* begin_shutdown_time 24 based fixed bin(71,0) level 4 in structure "arg_info" dcl 307 in procedure "dm_system_shutdown" set ref 591* begin_shutdown_time_string 000321 automatic char(16) unaligned dcl 298 set ref 510* 514* cai_control_argument_idx 000404 automatic fixed bin(17,0) dcl 769 set ref 772* 772* 776 778 cai_p_arg parameter char unaligned dcl 768 ref 765 772 clock_ 000016 constant entry external dcl 373 ref 603 629 655 681 code 000313 automatic fixed bin(35,0) initial dcl 293 set ref 293* 414* 486* 489 489* control_argument_idx 000112 automatic fixed bin(17,0) dcl 282 set ref 448* 453* 456* 459* 462 462 462 471 471 471 471 convert_date_to_binary_ 000012 constant entry external dcl 367 ref 579 591 617 643 669 convert_date_to_binary_$relative 000014 constant entry external dcl 370 ref 606 632 658 684 cu_$arg_list_ptr 000020 constant entry external dcl 374 ref 413 daemon_logout_delay 42 based fixed bin(71,0) level 4 dcl 307 set ref 688* daemon_logout_time 32 based fixed bin(71,0) level 4 dcl 307 set ref 669* date_time_ 000022 constant entry external dcl 375 ref 510 512 delays 34 based structure level 3 dcl 307 dm_admin_util_$schedule_shutdown 000024 constant entry external dcl 376 ref 501 dm_error_$dm_shutdown_not_sched 000052 external static fixed bin(35,0) dcl 399 set ref 504* 518* dm_error_$system_not_initialized 000054 external static fixed bin(35,0) dcl 401 set ref 417* dm_misc_util_$get_system_dir 000026 constant entry external dcl 378 ref 481 dm_misc_util_$set_system_dir 000030 constant entry external dcl 380 ref 493 dm_not_available_ 000334 stack reference condition dcl 361 ref 417 dm_system_directory 44 based char(168) level 2 packed unaligned dcl 307 set ref 445* 481 481* 493* 559* dummy_tm_shutdown_info_ptr 000332 automatic pointer dcl 301 set ref 485* 486* error_table_$active_function 000056 external static fixed bin(35,0) dcl 403 set ref 437* error_table_$badopt 000060 external static fixed bin(35,0) dcl 405 set ref 714* error_table_$noarg 000062 external static fixed bin(35,0) dcl 406 set ref 462* 471* get_system_free_area_ 000032 constant entry external dcl 382 ref 486 486 hbound builtin function dcl 314 ref 772 776 index builtin function dcl 314 ref 456 462 471 info_ptr 000314 automatic pointer dcl 294 set ref 430* is_active_function 000113 automatic bit(1) dcl 283 set ref 433* 437 length builtin function dcl 314 ref 570 min builtin function dcl 314 ref 570 my_arg_info 000140 automatic structure level 1 dcl 290 set ref 441 my_shutdown_info 000256 automatic structure level 1 dcl 291 set ref 498* 501 501 myname 000120 automatic char(32) unaligned dcl 288 set ref 410* 414* 426* 437* myversion 000130 automatic char(32) unaligned dcl 289 set ref 411* 414* 427* no_time_specified 34 000256 automatic bit(1) level 3 packed unaligned dcl 291 set ref 504 null builtin function dcl 314 ref 485 1-62 number_of_args 000114 automatic fixed bin(17,0) dcl 284 set ref 433* 450 output_flags 34 000256 automatic structure level 2 dcl 291 p_info_ptr parameter pointer dcl 270 ref 423 430 p_sci_ptr parameter pointer dcl 271 ref 423 429 pa_code 000362 automatic fixed bin(35,0) dcl 551 set ref 555* 559* 563 563* 579* 584 584* 591* 596 596* 606* 608 608* 617* 622 622* 632* 634 634* 643* 648 648* 658* 660 660* 669* 674 674* 684* 686 686* pa_computed_time 000364 automatic fixed bin(71,0) dcl 552 set ref 606* 610 632* 636 658* 662 684* 688 pa_current_time 000366 automatic fixed bin(71,0) dcl 553 set ref 603* 606* 610 629* 632* 636 655* 658* 662 681* 684* 688 pa_p_accept_control_argument parameter bit(1) dcl 548 set ref 540 567* 576* 588* 600* 614* 626* 640* 652* 666* 678* 692* pa_p_arg parameter char unaligned dcl 544 set ref 540 559 563* 570 570 579* 584* 591* 596* 606* 608* 617* 622* 632* 634* 643* 648* 658* 660* 669* 674* 684* 686* pa_p_arg_info_ptr parameter pointer dcl 545 ref 540 559 570 579 591 610 617 636 643 662 669 688 pa_p_control_argument_idx parameter fixed bin(17,0) dcl 546 set ref 540 557 566* 575* 587* 599* 613* 625* 639* 651* 665* 677* 691* pca_p_accept_control_argument parameter bit(1) dcl 707 set ref 698 717* 721* 725* 729* 733* 737* 741* 745* 749* 753* 757* pca_p_arg parameter char unaligned dcl 703 set ref 698 710* 714* pca_p_arg_info_ptr parameter pointer dcl 704 ref 698 pca_p_control_argument_idx parameter fixed bin(17,0) dcl 705 set ref 698 710* 712 reason 2 based char(64) level 3 dcl 307 set ref 444* 570* return_arg_len 000115 automatic fixed bin(21,0) dcl 285 set ref 433* return_arg_ptr 000116 automatic pointer dcl 286 set ref 433* rtrim builtin function dcl 314 ref 570 sci_ptr 000316 automatic pointer dcl 295 set ref 414* 417* 429* 433* 437* 452* 462* 471* 489* 504* 514* 518* 535* 563* 584* 596* 608* 622* 634* 648* 660* 674* 686* 714* shutdown_info based structure level 1 dcl 1-51 shutdown_info_ptr 000342 automatic pointer initial dcl 1-62 set ref 1-62* shutdown_spec based structure level 1 dcl 1-25 spec based structure level 2 dcl 307 set ref 501 501 ssu_$abort_line 000034 constant entry external dcl 383 ref 417 437 462 471 489 504 563 584 596 608 622 634 648 660 674 686 714 ssu_$arg_ptr 000036 constant entry external dcl 384 ref 452 ssu_$destroy_invocation 000040 constant entry external dcl 386 ref 535 ssu_$print_message 000042 constant entry external dcl 388 ref 514 518 ssu_$return_arg 000044 constant entry external dcl 389 ref 433 ssu_$standalone_invocation 000046 constant entry external dcl 391 ref 414 substr builtin function dcl 314 ref 462 471 570 this_is_a_standalone_invocation 000320 automatic bit(1) dcl 296 set ref 412* 428* 535 times 22 based structure level 3 in structure "arg_info" dcl 307 in procedure "dm_system_shutdown" times 22 000256 automatic structure level 2 in structure "my_shutdown_info" dcl 291 in procedure "dm_system_shutdown" times 22 based structure level 2 in structure "shutdown_spec" dcl 1-25 in procedure "dm_system_shutdown" times 22 000140 automatic structure level 3 in structure "my_arg_info" dcl 290 in procedure "dm_system_shutdown" times_have_changed 34(01) 000256 automatic bit(1) level 3 packed unaligned dcl 291 set ref 508 transaction_manager_$user_shutdown 000050 constant entry external dcl 394 ref 486 unspec builtin function dcl 314 set ref 442* 498* user_bump_delay 40 based fixed bin(71,0) level 4 dcl 307 set ref 662* user_bump_time 30 000256 automatic fixed bin(71,0) level 3 in structure "my_shutdown_info" dcl 291 in procedure "dm_system_shutdown" set ref 512* user_bump_time 30 based fixed bin(71,0) level 4 in structure "arg_info" dcl 307 in procedure "dm_system_shutdown" set ref 643* user_bump_time_string 000325 automatic char(16) unaligned dcl 300 set ref 512* 514* user_shutdown_delay 36 based fixed bin(71,0) level 4 dcl 307 set ref 636* user_shutdown_time 26 based fixed bin(71,0) level 4 dcl 307 set ref 617* user_warning_time 22 based fixed bin(71,0) level 4 dcl 307 set ref 579* version 000256 automatic char(8) level 2 in structure "my_shutdown_info" dcl 291 in procedure "dm_system_shutdown" set ref 499* version based char(8) level 3 in structure "arg_info" dcl 307 in procedure "dm_system_shutdown" set ref 443* NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. shutdown_spec_ptr automatic pointer dcl 1-47 NAMES DECLARED BY EXPLICIT CONTEXT. ABORT_ENTRY 002747 constant entry internal dcl 528 ref 414 414 ARGUMENT 000000 constant label array(22) dcl 559 ref 557 ARG_PROCESSING_LOOP 002111 constant label dcl 450 CLEANUP 002757 constant entry internal dcl 533 ref 523 CONTROL_ARGUMENT 000026 constant label array(-1:22) dcl 714 ref 712 CONTROL_ARGUMENT_INDEX 004166 constant entry internal dcl 765 ref 459 710 JOIN 002024 constant label dcl 433 ref 421 431 MAIN_RETURN 002744 constant label dcl 523 ref 530 PROCESS_ARGUMENT 002772 constant entry internal dcl 540 ref 456 459 PROCESS_CONTROL_ARGUMENT 004063 constant entry internal dcl 698 ref 453 dm_system_shutdown 001655 constant entry external dcl 264 shutdown_request 001777 constant entry external dcl 423 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4574 4660 4234 4604 Length 5140 4234 64 244 337 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME dm_system_shutdown 393 external procedure is an external procedure. on unit on line 417 74 on unit ABORT_ENTRY 64 internal procedure is assigned to an entry variable. CLEANUP internal procedure shares stack frame of external procedure dm_system_shutdown. PROCESS_ARGUMENT internal procedure shares stack frame of external procedure dm_system_shutdown. PROCESS_CONTROL_ARGUMENT internal procedure shares stack frame of external procedure dm_system_shutdown. CONTROL_ARGUMENT_INDEX internal procedure shares stack frame of external procedure dm_system_shutdown. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME dm_system_shutdown 000100 arg_info_ptr dm_system_shutdown 000102 arg_list_ptr dm_system_shutdown 000104 accept_control_argument dm_system_shutdown 000105 arg_idx dm_system_shutdown 000106 arg_len dm_system_shutdown 000110 arg_ptr dm_system_shutdown 000112 control_argument_idx dm_system_shutdown 000113 is_active_function dm_system_shutdown 000114 number_of_args dm_system_shutdown 000115 return_arg_len dm_system_shutdown 000116 return_arg_ptr dm_system_shutdown 000120 myname dm_system_shutdown 000130 myversion dm_system_shutdown 000140 my_arg_info dm_system_shutdown 000256 my_shutdown_info dm_system_shutdown 000313 code dm_system_shutdown 000314 info_ptr dm_system_shutdown 000316 sci_ptr dm_system_shutdown 000320 this_is_a_standalone_invocation dm_system_shutdown 000321 begin_shutdown_time_string dm_system_shutdown 000325 user_bump_time_string dm_system_shutdown 000332 dummy_tm_shutdown_info_ptr dm_system_shutdown 000342 shutdown_info_ptr dm_system_shutdown 000362 pa_code PROCESS_ARGUMENT 000364 pa_computed_time PROCESS_ARGUMENT 000366 pa_current_time PROCESS_ARGUMENT 000404 cai_control_argument_idx CONTROL_ARGUMENT_INDEX THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a alloc_cs call_ext_out_desc call_ext_out return tra_ext enable shorten_stack ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ clock_ convert_date_to_binary_ convert_date_to_binary_$relative cu_$arg_list_ptr date_time_ dm_admin_util_$schedule_shutdown dm_misc_util_$get_system_dir dm_misc_util_$set_system_dir get_system_free_area_ ssu_$abort_line ssu_$arg_ptr ssu_$destroy_invocation ssu_$print_message ssu_$return_arg ssu_$standalone_invocation transaction_manager_$user_shutdown THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$dm_shutdown_not_sched dm_error_$system_not_initialized error_table_$active_function error_table_$badopt error_table_$noarg LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 293 001647 1 62 001650 264 001654 410 001663 411 001666 412 001671 413 001673 414 001702 417 001740 421 001772 423 001773 426 002005 427 002010 428 002013 429 002014 430 002020 431 002023 433 002024 437 002043 441 002067 442 002071 443 002074 444 002077 445 002102 447 002105 448 002107 450 002111 452 002121 453 002136 456 002172 459 002236 462 002310 469 002365 471 002367 481 002451 485 002470 486 002472 489 002514 493 002542 498 002554 499 002557 501 002561 504 002576 508 002626 510 002631 512 002646 514 002663 517 002717 518 002720 523 002744 525 002745 528 002746 530 002754 533 002757 535 002760 538 002771 540 002772 555 003003 557 003004 559 003007 563 003041 566 003067 567 003072 568 003074 570 003075 575 003117 576 003121 577 003123 579 003124 584 003150 587 003175 588 003200 589 003202 591 003203 596 003227 599 003254 600 003257 601 003261 603 003262 606 003271 608 003317 610 003344 613 003352 614 003354 615 003356 617 003357 622 003403 625 003430 626 003433 627 003435 629 003436 632 003445 634 003473 636 003520 639 003526 640 003530 641 003532 643 003533 648 003557 651 003604 652 003607 653 003611 655 003612 658 003621 660 003647 662 003674 665 003702 666 003704 667 003706 669 003707 674 003733 677 003760 678 003763 679 003765 681 003766 684 003775 686 004023 688 004050 691 004056 692 004060 693 004062 698 004063 710 004074 712 004112 714 004115 717 004137 720 004141 721 004142 724 004143 725 004144 728 004145 729 004146 732 004147 733 004150 736 004151 737 004152 740 004153 741 004154 744 004155 745 004156 748 004157 749 004160 752 004161 753 004162 756 004163 757 004164 760 004165 765 004166 772 004177 775 004217 776 004221 778 004230 ----------------------------------------------------------- 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