COMPILATION LISTING OF SEGMENT sc_abort_line_util_ Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1019.5 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 10 /* */ 11 /* sc_abort_line_util_.pl1 -- */ 12 /* Procedure to implement (hopefully) temporary sc feature of mapping */ 13 /* abort_line into "abort_request". The reasons for this mapping are not */ 14 /* fully understood. */ 15 /* */ 16 /* This procedure also contains the ssu_-replacable procedure for */ 17 /* ssu_$invoke_request. This replacement procedure sets up the label for */ 18 /* the abort_request function, and also performs masking of IPC event calls */ 19 /* on a per-request basis. This masking must properly be done on a */ 20 /* per-request basis. Masking is done based upon the value of */ 21 /* sc_request_flags.dont_mask_calls which is defined for each request in the */ 22 /* sc_request_table_. */ 23 /* */ 24 /* The sequence in which procedures are called in order to invoke a */ 25 /* request is as follows: */ 26 /* */ 27 /* ssu_$listen */ 28 /* |__sc_execute_command_line_ */ 29 /* |__check for special commands; if special */ 30 /* |__INVOKE_SPECIAL_PROCEDURE */ 31 /* if not special */ 32 /* |__SSU's execute_command_line */ 33 /* |__sc_abort_line_util_$invoke_request */ 34 /* |__SSU's locate_request */ 35 /* |__if event calls should be masked for this request */ 36 /* | |__ipc_$mask_ev_calls */ 37 /* | */ 38 /* |__SSU's invoke_request */ 39 /* | |__sc_execute_command_line_$locate_request */ 40 /* | | |__SSU's locate request */ 41 /* | | |__check_restrictions */ 42 /* | | */ 43 /* | |__REQUEST PROCEDURE */ 44 /* | */ 45 /* |__if event calls were masked */ 46 /* |__ipc_$unmask_ev_calls */ 47 /* */ 48 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 49 50 /* format: style2 */ 51 52 sc_abort_line_util_: 53 procedure; 54 55 /**** Modification history: 56* Created 1985-02-01, BIM */ 57 /**** Modified 1985-02-18, E. Swenson: to allow a "real" abort_line. */ 58 59 /****^ HISTORY COMMENTS: 60* 1) change(87-02-22,GDixon), approve(87-05-25,MCR7680), 61* audit(87-05-06,Parisek), install(87-08-05,MR12.1-1055): 62* Moved per-request masking of IPC event calls from sc_execute_command_line_ 63* into our $invoke_request procedure. 64* 2) change(87-07-02,GDixon), approve(87-07-02,MCR7680), 65* audit(87-05-06,Parisek), install(87-08-05,MR12.1-1055): 66* A) Changed to determine whether to mask event calls, based upon 67* per-request setting in sc_request_table_. 68* B) Changed to unmask event calls based upon prior successful masking, 69* rather than just a prior attempt to mask. 70* END HISTORY COMMENTS */ 71 72 declare P_sci_ptr pointer parameter; 73 declare P_request_name char(*) parameter; 74 declare P_arg_list_ptr ptr parameter; 75 declare P_code fixed bin(35) parameter; 76 77 declare cu_$arg_list_ptr entry returns (pointer); 78 declare cu_$generate_call entry (entry, ptr); 79 declare ipc_$mask_ev_calls entry (fixed bin (35)); 80 declare ipc_$unmask_ev_calls entry (fixed bin (35)); 81 declare ssu_$get_info_ptr entry (ptr) returns (ptr); 82 declare ssu_$print_message entry () options (variable); 83 84 declare 1 auto_request_data aligned like request_data automatic; 85 declare code fixed bin(35); 86 declare dont_mask bit(1); 87 declare (masked_ev_calls_code, unmasked_ev_calls_code) 88 fixed bin (35); 89 declare saved_abort_label label; 90 declare sci_ptr pointer; 91 92 declare addr builtin; 93 declare cleanup condition; 94 95 declare FALSE init("0"b) bit(1) int static options(constant); 96 97 /* * * * * * * * * * * * * * * * * * * * * * * * * */ 98 99 100 abort_line: 101 entry (P_sci_ptr); /* and many other args. */ 102 103 call cu_$generate_call (ssu_$print_message, cu_$arg_list_ptr ()); 104 /* print the message */ 105 sci_ptr = P_sci_ptr; 106 sc_subsystem_info_ptr = ssu_$get_info_ptr (sci_ptr); 107 go to sc_subsystem_info.abort_request_label; /* Nonlocal unwind */ 108 109 /* * * * * * * * * * * * * * * * * * * * * * * * * */ 110 111 112 invoke_request: 113 entry (P_sci_ptr, P_request_name, P_arg_list_ptr, P_code); 114 115 sci_ptr = P_sci_ptr; 116 sc_subsystem_info_ptr = ssu_$get_info_ptr (sci_ptr); 117 saved_abort_label = sc_subsystem_info.abort_request_label; 118 masked_ev_calls_code, unmasked_ev_calls_code = -1; 119 on cleanup 120 begin; 121 sc_subsystem_info.abort_request_label = saved_abort_label; 122 if masked_ev_calls_code = 0 & unmasked_ev_calls_code ^= 0 123 then call ipc_$unmask_ev_calls (unmasked_ev_calls_code); 124 end; 125 sc_subsystem_info.abort_request_label = ABORT_REQUEST; 126 127 dont_mask = FALSE; 128 request_data_ptr = addr(auto_request_data); 129 sc_rf_ptr = addr (request_data.user_flags); 130 call sc_subsystem_info.real_locate_request (sci_ptr, P_request_name, 131 addr(request_data), code); 132 if code = 0 then /* nonzero code reported later by ssu_ */ 133 dont_mask = sc_request_flags.dont_mask_calls; 134 135 if ^dont_mask 136 then call ipc_$mask_ev_calls (masked_ev_calls_code); 137 138 call cu_$generate_call (sc_subsystem_info.real_invoke_request, cu_$arg_list_ptr ()); 139 140 ABORT_REQUEST: 141 sc_subsystem_info.abort_request_label = saved_abort_label; 142 if masked_ev_calls_code = 0 & unmasked_ev_calls_code ^= 0 143 then call ipc_$unmask_ev_calls (unmasked_ev_calls_code); 144 return; 145 146 /* * * * * * * * * * * * * * * * * * * * * * * * * */ 147 148 /* * * * * * * * * * * * * * * * * * * * * * * * * */ 149 150 151 real_abort_line: 152 entry (P_sci_ptr); /* and some other arguments */ 153 154 /**** This entry is used to get the normal MR11 ssu_$abort_line functionality. 155* It is used by sc_requests_$sign_on in order to abort the entire command 156* line rather than just aborting the current request. */ 157 158 sci_ptr = P_sci_ptr; 159 sc_subsystem_info_ptr = ssu_$get_info_ptr (sci_ptr); 160 call cu_$generate_call (sc_subsystem_info.real_abort_line, cu_$arg_list_ptr ()); 161 return; 162 163 /* * * * * * * * * * * * * * * * * * * * * * * * * */ 164 165 166 /* BEGIN: sc_subsystem_info_.incl.pl1 * * * * * */ 1 2 1 3 /* format:style3,idind30 */ 1 4 1 5 /* Created 1984-10-24 BIM */ 1 6 /* Modified 1985-01-07, BIM: access control flags that track admin and X */ 1 7 /* Modified 1985-02-18, E. Swenson to save away abort_line procedure. */ 1 8 1 9 1 10 /****^ HISTORY COMMENTS: 1 11* 1) change(87-02-17,GDixon), approve(87-07-03,MCR7680), 1 12* audit(87-07-13,Parisek), install(87-08-04,MR12.1-1056): 1 13* Correct formatting problems. Add sc_subsystem_info.flags.dont_mask_calls 1 14* switch. 1 15* 2) change(87-07-03,GDixon), approve(87-07-03,MCR7680), 1 16* audit(87-07-13,Parisek), install(87-08-04,MR12.1-1056): 1 17* Removed dont_mask_calls flag. It is no longer needed to correctly perform 1 18* masking on a per-request basis. 1 19* END HISTORY COMMENTS */ 1 20 1 21 1 22 declare sc_subsystem_info_ptr pointer; 1 23 declare 1 sc_subsystem_info aligned based (sc_subsystem_info_ptr), 1 24 2 restriction_flags bit (36) aligned, /* copied from mc atep or fabricated */ 1 25 2 flags aligned, 1 26 3 no_real_tty bit (1) unaligned, /* for sc_admin_command_ */ 1 27 3 print_ready bit (1) unal, /* on for all except the system console, */ 1 28 /* instructs sc_process_command_line_ to deal */ 1 29 /* with the prompt */ 1 30 3 the_system_console bit (1) unal, /* syserr messages are printed here (but console */ 1 31 /* recover doesn't try to fix this) copied here */ 1 32 /* from the mc_ate to save other looking in there*/ 1 33 3 printer_offed bit (1) unal, /* suppress logging */ 1 34 3 pad bit (32) unaligned, 1 35 2 source_name char (32) unaligned, 1 36 2 area_ptr pointer, 1 37 2 mc_atep pointer, /* needed to play with attachments */ 1 38 2 real_iocb pointer, /* for sc_signal_io_handler_ */ 1 39 2 hangup_entry entry (pointer) variable, 1 40 /* called on io_no_permission. */ 1 41 2 real_execute_line entry (ptr, ptr, fixed bin (21), fixed bin (35)), 1 42 2 real_locate_request entry (ptr, char (*), ptr, fixed bin (35)), 1 43 2 access_control_name char (32) unaligned, 1 44 2 real_invoke_request entry, /* since MR11 ssu_ lacks the ability to abort a */ 1 45 /* single request, we have an invoke_request that*/ 1 46 /* handles a condition to unwind the request */ 1 47 2 abort_request_label label, /* go here (nonlocally) to unwind a single request */ 1 48 2 real_abort_line entry options (variable); 1 49 1 50 declare sc_ss_area area based (sc_subsystem_info.area_ptr); 1 51 1 52 /* The following defines the user flags for the request table. */ 1 53 1 54 declare sc_rf_ptr pointer; 1 55 declare 1 sc_request_flags unaligned based (sc_rf_ptr), 1 56 2 dont_parse_arguments bit, /* reply, intercom */ 1 57 2 obsolete bit, /* warn opr to not use it */ 1 58 2 dont_mask_calls bit, /* this runs without masking ev calls */ 1 59 2 requires_as bit, /* not before AS */ 1 60 2 requires_no_as bit, /* only before AS */ 1 61 2 complete_disks_first bit, /* try to mount disks */ 1 62 2 no_login_needed bit, /* sign_on */ 1 63 2 pad bit (5), 1 64 2 restriction_type fixed bin (6) unsigned; 1 65 /* index into restriction flag string */ 1 66 1 67 1 68 /* END OF: sc_subsystem_info_.incl.pl1 * * * * * */ 166 167 /* BEGIN INCLUDE FILE ... _ssu_request_data.incl.pl1 */ 2 2 /* Created: 13 May 1980 by W. Olin Sibert */ 2 3 /* Modified: 28 February 1982 by G. Palter to add dont_summarize and dont_list */ 2 4 /* Modified: 2 August 1982 by Jay Pattin to add unknown flag */ 2 5 2 6 /* format: style4,delnl,insnl,ifthenstmt,ifthen */ 2 7 2 8 2 9 /* Description of a subsystem request returned by ssu_$locate_request */ 2 10 2 11 dcl 1 request_data aligned based (request_data_ptr), 2 12 2 full_name character (32) unaligned, /* its primary name */ 2 13 2 entry entry (pointer, pointer) variable, /* entry to call to implement the request */ 2 14 2 call_info, /* describes current invocation of the request ... */ 2 15 3 arg_list_ptr pointer, /* ... -> argument list */ 2 16 3 arg_count fixed binary, 2 17 3 af_sw bit (1) aligned, /* ... ON => invoked as an active request */ 2 18 3 rv_ptr pointer, /* ... -> active request's return string */ 2 19 3 rv_lth fixed binary (21), /* ... maxlength of the return string */ 2 20 2 flags aligned like request_flags, /* attributes of the request (from the request table) */ 2 21 2 name_list_ptr pointer unaligned, /* -> list of all valid names for the request */ 2 22 2 info_string, /* brief description of the request (if any) */ 2 23 3 ptr pointer unaligned, 2 24 3 lth fixed binary (18), 2 25 2 pad (4) bit (36); 2 26 2 27 dcl request_data_ptr pointer; 2 28 2 29 2 30 /* Request attributes from the request table */ 2 31 2 32 dcl 1 request_flags aligned based, 2 33 2 system_flags unaligned, 2 34 3 allow_command bit (1) unaligned, /* ON => request may be called as a command */ 2 35 3 allow_af bit (1) unaligned, /* ON => request may be called as an active function */ 2 36 3 unimplemented bit (1) unaligned, /* ON => request is not yet implemented */ 2 37 3 multics_request bit (1) unaligned, /* ON => this request is really just a Multics command */ 2 38 3 dont_summarize bit (1) unaligned, /* ON => summarize_requests doesn't list this request */ 2 39 3 dont_list bit (1) unaligned, /* ON => list_requests doesn't match this one without -all */ 2 40 3 unknown bit (1) unaligned, /* ON => return unknown_request, don't list or summarize ever */ 2 41 3 pad bit (11) unaligned, 2 42 2 user_flags bit (18) unaligned; /* no longer used */ 2 43 2 44 2 45 /* List of all names for a given request */ 2 46 2 47 dcl 1 request_name_list aligned based (request_name_list_ptr), 2 48 2 n_names fixed binary, /* structure describing name list */ 2 49 2 name (request_name_list_n_names refer (request_name_list.n_names)) character (32) unaligned; 2 50 2 51 dcl request_name_list_ptr pointer; 2 52 dcl request_name_list_n_names fixed binary; 2 53 2 54 2 55 /* Brief description of a request */ 2 56 2 57 dcl request_info_string character (request_info_string_lth) based (request_info_string_ptr); 2 58 dcl request_info_string_lth fixed binary (21); 2 59 dcl request_info_string_ptr pointer; 2 60 2 61 /* END INCLUDE FILE ... _ssu_request_data.incl.pl1 */ 167 168 end sc_abort_line_util_; 169 170 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0808.7 sc_abort_line_util_.pl1 >spec>install>1112>sc_abort_line_util_.pl1 166 1 08/06/87 0913.5 sc_subsystem_info_.incl.pl1 >ldd>include>sc_subsystem_info_.incl.pl1 167 2 09/28/82 1437.6 _ssu_request_data.incl.pl1 >ldd>include>_ssu_request_data.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. FALSE constant bit(1) initial packed unaligned dcl 95 ref 127 P_arg_list_ptr parameter pointer dcl 74 ref 112 P_code parameter fixed bin(35,0) dcl 75 ref 112 P_request_name parameter char packed unaligned dcl 73 set ref 112 130* P_sci_ptr parameter pointer dcl 72 ref 100 105 112 115 151 158 abort_request_label 50 based label variable level 2 dcl 1-23 set ref 107 117 121* 125* 140* addr builtin function dcl 92 ref 128 129 130 130 auto_request_data 000100 automatic structure level 1 dcl 84 set ref 128 cleanup 000146 stack reference condition dcl 93 ref 119 code 000133 automatic fixed bin(35,0) dcl 85 set ref 130* 132 cu_$arg_list_ptr 000010 constant entry external dcl 77 ref 103 103 138 138 160 160 cu_$generate_call 000012 constant entry external dcl 78 ref 103 138 160 dont_mask 000134 automatic bit(1) packed unaligned dcl 86 set ref 127* 132* 135 dont_mask_calls 0(02) based bit(1) level 2 packed packed unaligned dcl 1-55 ref 132 flags 23 based structure level 2 dcl 2-11 ipc_$mask_ev_calls 000014 constant entry external dcl 79 ref 135 ipc_$unmask_ev_calls 000016 constant entry external dcl 80 ref 122 142 masked_ev_calls_code 000135 automatic fixed bin(35,0) dcl 87 set ref 118* 122 135* 142 real_abort_line 54 based entry variable level 2 dcl 1-23 set ref 160* real_invoke_request 44 based entry variable level 2 dcl 1-23 set ref 138* real_locate_request 30 based entry variable level 2 dcl 1-23 ref 130 request_data based structure level 1 dcl 2-11 set ref 130 130 request_data_ptr 000160 automatic pointer dcl 2-27 set ref 128* 129 130 130 request_flags based structure level 1 dcl 2-32 saved_abort_label 000140 automatic label variable dcl 89 set ref 117* 121 140 sc_request_flags based structure level 1 packed packed unaligned dcl 1-55 sc_rf_ptr 000156 automatic pointer dcl 1-54 set ref 129* 132 sc_subsystem_info based structure level 1 dcl 1-23 sc_subsystem_info_ptr 000154 automatic pointer dcl 1-22 set ref 106* 107 116* 117 121 125 130 138 140 159* 160 sci_ptr 000144 automatic pointer dcl 90 set ref 105* 106* 115* 116* 130* 158* 159* ssu_$get_info_ptr 000020 constant entry external dcl 81 ref 106 116 159 ssu_$print_message 000022 constant entry external dcl 82 ref 103 103 unmasked_ev_calls_code 000136 automatic fixed bin(35,0) dcl 87 set ref 118* 122 122* 142 142* user_flags 23(18) based bit(18) level 3 packed packed unaligned dcl 2-11 set ref 129 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. request_info_string based char packed unaligned dcl 2-57 request_info_string_lth automatic fixed bin(21,0) dcl 2-58 request_info_string_ptr automatic pointer dcl 2-59 request_name_list based structure level 1 dcl 2-47 request_name_list_n_names automatic fixed bin(17,0) dcl 2-52 request_name_list_ptr automatic pointer dcl 2-51 sc_ss_area based area(1024) dcl 1-50 NAMES DECLARED BY EXPLICIT CONTEXT. ABORT_REQUEST 000276 constant label dcl 140 ref 125 abort_line 000020 constant entry external dcl 100 invoke_request 000075 constant entry external dcl 112 real_abort_line 000321 constant entry external dcl 151 sc_abort_line_util_ 000007 constant entry external dcl 52 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 530 554 370 540 Length 1000 370 24 207 137 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sc_abort_line_util_ 152 external procedure is an external procedure. on unit on line 119 68 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME sc_abort_line_util_ 000100 auto_request_data sc_abort_line_util_ 000133 code sc_abort_line_util_ 000134 dont_mask sc_abort_line_util_ 000135 masked_ev_calls_code sc_abort_line_util_ 000136 unmasked_ev_calls_code sc_abort_line_util_ 000140 saved_abort_label sc_abort_line_util_ 000144 sci_ptr sc_abort_line_util_ 000154 sc_subsystem_info_ptr sc_abort_line_util_ 000156 sc_rf_ptr sc_abort_line_util_ 000160 request_data_ptr sc_abort_line_util_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ent_var_desc call_ext_out return_mac tra_ext_2 enable_op ext_entry ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$arg_list_ptr cu_$generate_call ipc_$mask_ev_calls ipc_$unmask_ev_calls ssu_$get_info_ptr ssu_$print_message NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 52 000006 100 000014 103 000025 105 000050 106 000054 107 000065 112 000070 115 000110 116 000114 117 000125 118 000132 119 000135 121 000151 122 000157 124 000171 125 000172 127 000176 128 000177 129 000201 130 000205 132 000235 135 000244 138 000255 140 000276 142 000303 144 000316 151 000317 158 000326 159 000332 160 000343 161 000364 ----------------------------------------------------------- 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