COMPILATION LISTING OF SEGMENT send_admin_command Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 10/28/86 1518.4 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: style2 */ 11 send_admin_command: 12 sac: 13 procedure options (variable); 14 15 /* SEND_ADMIN_COMMAND - send command to initializer */ 16 /* Modified May 1982, E. N. Kittlitz. tidied up. */ 17 /* Modified December 1982, E. N. Kittlitz. version 2 communications. encrypt admin password. */ 18 /* Modified 1984-10-08 BIM for as_request mechanism */ 19 /* Modified 1984-12-20 BIM to turn off "send-start" when waiting for completion */ 20 21 dcl com_err_ entry () options (variable); 22 dcl com_err_$suppress_name entry () options (variable); 23 dcl command_query_$yes_no entry () options (variable); 24 dcl cu_$arg_list_ptr entry returns (ptr); 25 dcl requote_string_ entry (character (*)) returns (character (*)); 26 dcl ssu_$abort_line entry () options (variable); 27 dcl ssu_$standalone_invocation 28 entry (ptr, char (*), char (*), ptr, entry, fixed bin (35)); 29 dcl ssu_$destroy_invocation 30 entry (ptr); 31 dcl ssu_$arg_ptr entry (ptr, fixed bin, ptr, fixed bin (21)); 32 dcl ssu_$arg_count entry (ptr, fixed bin); 33 34 dcl mail_system_$free_address 35 entry (pointer, fixed bin (35)); 36 37 dcl mlsys_utils_$format_address_field 38 entry (char (*) varying, pointer, fixed bin, pointer, fixed bin (21), 39 fixed bin (21), fixed bin (35)); 40 dcl mlsys_utils_$parse_address_control_args 41 entry (ptr, fixed bin, ptr, ptr, fixed bin (35)); 42 dcl ioa_ entry () options (variable); 43 dcl ioa_$nnl entry () options (variable); 44 dcl ipc_$create_ev_chn entry (fixed bin (71), fixed bin (35)); 45 dcl ipc_$delete_ev_chn entry (fixed bin (71), fixed bin (35)); 46 dcl ipc_$block entry (ptr, ptr, fixed bin (35)); 47 48 dcl request_id_ entry (fixed binary (71)) returns (character (19)); 49 dcl send_as_request_$block entry (pointer, fixed binary, bit (72) aligned, bit (72) aligned, 50 fixed binary (35)); 51 dcl send_as_request_$no_block 52 entry (pointer, fixed binary, bit (72) aligned, fixed binary (35)); 53 54 55 dcl al fixed bin (21); 56 dcl ap pointer; 57 dcl code fixed bin (35); 58 dcl non_control_arg bit (1) aligned; 59 dcl first_non_control_arg fixed bin; 60 dcl address_ptr pointer; 61 dcl address_string char (500); 62 dcl argx fixed bin; 63 dcl arg_count fixed bin; 64 dcl message_id bit (72) aligned; 65 dcl message_id_clock fixed bin (71); 66 dcl query_flag bit (1) aligned; 67 dcl request_id char (19); 68 dcl reply_bits bit (72) aligned; 69 dcl sci_ptr pointer; 70 dcl stringx fixed bin (21); 71 dcl argument char (al) based (ap) unal; 72 dcl wait_flag fixed bin; 73 dcl send_it bit (1) aligned; 74 dcl 1 flags aligned, 75 2 notify_message bit, 76 2 notify_mail bit, 77 2 query bit, 78 2 explicit_address bit, 79 2 brief bit, 80 2 brief_query bit; 81 82 dcl MAX_LENGTH fixed bin init (20000) int static options (constant); 83 /* will fit in a message segment */ 84 85 dcl ( 86 NONE init (0), 87 START init (1), 88 FINISH init (2) 89 ) fixed bin int static options (constant); 90 91 dcl (unspec, null, substr) builtin; 92 dcl ME char (32) init ("send_admin_command") int static options (constant); 93 94 dcl error_table_$bigarg fixed bin (35) ext static; 95 dcl error_table_$noarg fixed bin (35) ext static; 96 dcl error_table_$badopt fixed bin (35) ext static; 97 1 1 /* BEGIN INCLUDE FILE ... as_requests.incl.pl1 */ 1 2 /* DESCRIPTION: 1 3* This include file is the repository of as_request_ structures which are 1 4* not so complicated or arcane as to require their own include file. 1 5* It requires as_request_header.incl.pl1 1 6**/ 1 7 1 8 /* HISTORY: 1 9* Written by someone, at sometime. 1 10* Modified: 1 11* 09/10/84 by R. Michael Tague: Add the structure asr_bump_user_info 1 12* and asr_reply_bump_user. 1 13* 01/23/85 by E. Swenson: Add the asr_note_pnt_change_info structure. 1 14**/ 1 15 1 16 /* format: style4 */ 1 17 1 18 /*** return status from an as_request_ call. ***/ 1 19 1 20 dcl asr_replyp ptr; 1 21 dcl 1 asr_reply aligned based (asr_replyp), /* IPC status return for a.s. request */ 1 22 2 code fixed bin (35), /* standard error code */ 1 23 2 data bit (36); /* other data */ 1 24 1 25 /*** request to monitor process destructions, and the destruction notification ***/ 1 26 1 27 dcl asr_buzzard_info_version_1 char (8) init ("buzzard1") int static options (constant); 1 28 dcl asr_buzzard_infop ptr; 1 29 dcl 1 asr_buzzard_info aligned based (asr_buzzard_infop), /* for watching dying processes */ 1 30 2 header aligned like as_request_header, 1 31 2 version char (8), 1 32 2 info_channel fixed bin (71), /* IPC channel to send processid wakeup messges */ 1 33 2 my_reference_id bit (36); /* becomes top 36 bits of death notice */ 1 34 1 35 dcl 1 asr_buzzard_notification aligned based (asr_replyp), /* message on process destruction */ 1 36 2 your_reference_id bit (36), /* from asr_buzzard_info.my_reference_id */ 1 37 2 process_id bit (36); /* process id of dead process */ 1 38 1 39 /* *********************************************************************** 1 40* * asr_bump_user_info - Message segment info structure for the * 1 41* * ASR_BUMP_USER requests. * 1 42* * process-id - process_id of process to be bumped. * 1 43* * message - message to be splat across user terminal when * 1 44* * the bump is begun, i.e., the grace time starts. * 1 45* * No message is sent if message = "". * 1 46* * grace_time_in_seconds * 1 47* * - Amount of time given to the user before the * 1 48* * user's process is actually terminated. * 1 49* * reply_reference_id * 1 50* * - Reference id that will be returned in the * 1 51* * as_reply_bump_user structure. A reply channel * 1 52* * must be specified in reply_channel in the * 1 53* * header of this structure. The reply message * 1 54* * will have the sturcture of asr_reply_bump_user. * 1 55* *********************************************************************** */ 1 56 1 57 dcl asr_bump_user_info_version_1 char (8) init ("asrbump1") int static options (constant); 1 58 1 59 dcl asr_bump_user_info_ptr ptr; 1 60 dcl 1 asr_bump_user_info aligned based (asr_bump_user_info_ptr), 1 61 2 header aligned like as_request_header, 1 62 2 version char (8), 1 63 2 process_id bit (36), 1 64 2 message char (100) unaligned, 1 65 2 grace_time_in_seconds fixed bin, 1 66 2 reply_reference_id bit (36); 1 67 1 68 /* *********************************************************************** 1 69* * asr_reply_bump_user - Structure sent with the IPC reply upon * 1 70* * initiating the bump. Note: the actual * 1 71* * bump does not take place until after the * 1 72* * given of default grace time. * 1 73* * code - Standard system status code. * 1 74* * reference_id * 1 75* * - Reference id supplied in asr_bump_user_info when * 1 76* * bump user request was made. * 1 77* *********************************************************************** */ 1 78 1 79 dcl 1 asr_reply_bump_user aligned based (asr_replyp), 1 80 2 code fixed bin (35), 1 81 2 reference_id bit (36); 1 82 1 83 1 84 dcl asr_admin_command_info_ptr pointer; 1 85 dcl 1 asr_admin_command_info aligned based (asr_admin_command_info_ptr), 1 86 2 header aligned like as_request_header, 1 87 2 version char (8), 1 88 2 flags aligned, 1 89 3 send_start_wakeup bit (1) unaligned, /* over reply channel */ 1 90 3 send_completion_wakeup bit (1) unaligned, /* over reply channel */ 1 91 3 send_completion_message bit (1) unaligned, 1 92 3 send_completion_mail bit (1) unaligned, 1 93 3 dialog bit (1) unaligned, /* NOT YET IMPLEMENTED */ 1 94 3 pad bit (31) unaligned, 1 95 2 dialog_info aligned, /* NOT YET IMPLEMENTED */ 1 96 3 event_channel fixed bin (71), /* NOTIFY ME ON READ/RIGHT */ 1 97 3 output_message_segment_pathname char (200) unaligned, /* Writes go here */ 1 98 3 input_message_segment_pathname char (200) unaligned, /* Reads come here */ 1 99 2 mail_destination char (200) unaligned, 1 100 2 command_length fixed bin (21), 1 101 2 command char (asr_ac_length refer (asr_admin_command_info.command_length)) unaligned; 1 102 1 103 /* See admin_dialog_info.incl.pl1 for related structures */ 1 104 1 105 dcl asr_ac_length fixed bin (21); 1 106 dcl ASR_AC_VERSION_1 char (8) init ("asrac001") int static options (constant); 1 107 1 108 dcl 1 asr_reply_admin_command aligned based (asr_replyp), 1 109 2 code fixed bin (35), 1 110 2 flags aligned, 1 111 3 command_refused bit (1) unaligned, 1 112 3 command_started bit (1) unaligned, 1 113 3 command_completed bit (1) unaligned, /* with or without errors */ 1 114 3 command_aborted bit (1) unaligned, 1 115 3 command_had_errors bit (1) unaligned, /* at least one error */ 1 116 3 pad bit (31) unaligned; 1 117 1 118 /**** The following structure is used by the Ring-1 PNT software to 1 119* notify the answering service of a PNT change which might affect 1 120* logged in processes. */ 1 121 1 122 dcl asr_note_pnt_change_info_ptr ptr; 1 123 1 124 dcl 1 asr_note_pnt_change_info structure aligned based (asr_note_pnt_change_info_ptr), 1 125 2 header aligned like as_request_header, 1 126 2 version char (8), 1 127 2 person_id char (32); 1 128 1 129 dcl ASR_NPC_INFO_VERSION_1 char (8) initial ("asrnpc01") internal static options (constant); 1 130 1 131 /* END INCLUDE FILE ... as_requests.incl.pl1 */ 98 2 1 /* BEGIN INCLUDE FILE ... as_request_header.incl.pl1 */ 2 2 2 3 /* DESCRIPTION: 2 4* Answering Service request information. 2 5**/ 2 6 2 7 2 8 /****^ HISTORY COMMENTS: 2 9* 1) change(00-01-01,JRandom), approve(), audit(), install(): 2 10* Written by someone, at sometime. 2 11* 2) change(84-09-10,Tague), approve(), audit(), install(): 2 12* R. Michael Tague: Added ASR_BUMP_USER request. 2 13* 3) change(84-10-04,Margulies), approve(), audit(), install(): 2 14* BIM: ASR_ADMIN_COMMAND. 2 15* 4) change(85-01-23,Swenson), approve(), audit(), install(): 2 16* E. Swenson for ASR_NOTE_PNT_CHANGE. 2 17* 5) change(85-02-18,Margulies), approve(), audit(), install(): 2 18* BIM: ASR_DAEMON_COMMAND, ASR_COM_CHANNEL_INFO 2 19* 6) change(85-12-12,Lippard), approve(85-12-30,MCR7326), 2 20* audit(86-10-27,GDixon), install(86-10-28,MR12.0-1200): 2 21* Jim Lippard: Added ASR_ABS_COMMAND request. 2 22* END HISTORY COMMENTS */ 2 23 2 24 2 25 /* format: style4 */ 2 26 2 27 dcl as_request_version_1 fixed bin internal static initial (1) options (constant); 2 28 2 29 dcl ( 2 30 ASR_FIRST_TYPE initial (1), 2 31 ASR_DIAL_SERVER initial (1), 2 32 ASR_DIAL_OUT initial (2), 2 33 ASR_FPE_CAUSES_LOGOUT initial (3), 2 34 ASR_FPE_CAUSES_NEW_PROC initial (4), 2 35 ASR_PROC_TERM_NOTIFY initial (5), 2 36 ASR_BUMP_USER initial (6), 2 37 ASR_ADMIN_COMMAND initial (7), 2 38 ASR_NOTE_PNT_CHANGE initial (8), 2 39 ASR_DAEMON_COMMAND initial (9), 2 40 ASR_COM_CHANNEL_INFO initial (10), 2 41 ASR_ABS_COMMAND initial (11), 2 42 ASR_LAST_TYPE initial (11) 2 43 ) fixed bin internal static options (constant); 2 44 2 45 dcl ASR_DEFER_IN_ADMIN_MODE (1:11) bit (1) int static options (constant) 2 46 init ((6) (1) "0"b, "1"b, (4) (1) "0"b); 2 47 2 48 dcl ASR_REQUEST_NAMES (1:11) int static options (constant) 2 49 char (40) init ( 2 50 "Dial request", 2 51 "Dial out request", 2 52 "Logout on fatal process error", 2 53 "New process on fatal process error", 2 54 "Monitor process terminations", 2 55 "Bump user", 2 56 "Execute admin command", 2 57 "Note PNT change", 2 58 "Daemon command", 2 59 "Communications channel info", 2 60 "Absentee command"); 2 61 2 62 dcl 1 as_request_header based aligned, 2 63 2 version fixed bin, /* version number */ 2 64 2 type fixed bin, /* what to do */ 2 65 2 reply_channel fixed bin (71); /* who to tell */ 2 66 2 67 2 68 /* END INCLUDE FILE ... as_request_header.incl.pl1 */ 99 3 1 /* BEGIN INCLUDE FILE ... event_wait_channel.incl.pl1 */ 3 2 3 3 /* ipc_$block wait list with one channel 3 4* 3 5* Written 9-May-79 by M. N. Davidoff. 3 6**/ 3 7 3 8 declare 1 event_wait_channel aligned, 3 9 2 n_channels fixed bin initial (1), /* number of channels */ 3 10 2 pad bit (36), 3 11 2 channel_id (1) fixed bin (71); /* event channel to wait on */ 3 12 3 13 /* END INCLUDE FILE ... event_wait_channel.incl.pl1 */ 100 4 1 /* BEGIN INCLUDE FILE event_wait_info.incl.pl1 */ 4 2 4 3 /* T. Casey, May 1978 */ 4 4 4 5 dcl event_wait_info_ptr ptr; 4 6 4 7 dcl 1 event_wait_info aligned based (event_wait_info_ptr), /* argument structure filled in on return from ipc_$block */ 4 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 4 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 4 10 2 sender bit (36), /* process id of sender */ 4 11 2 origin, 4 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 4 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 4 14 2 channel_index fixed bin; /* index of this channel in the event wait list */ 4 15 4 16 /* END INCLUDE FILE event_wait_info.incl.pl1 */ 101 102 declare 1 EWI aligned like event_wait_info; 5 1 /* BEGIN INCLUDE FILE ... mlsys_data.incl.pl1 */ 5 2 /* Created: 20 Decembber 1978 by G. Palter */ 5 3 /* Modified: 1 July 1983 by G. Palter to merge with mlsys_internal_data_ */ 5 4 5 5 /* Constants defined by the Multics mail system for external use */ 5 6 5 7 dcl mlsys_data_$system_directory character (168) external; /* directory containing per-system data (mail table/queues) */ 5 8 5 9 5 10 /* Static data defined by the Multics mail system for external use */ 5 11 5 12 dcl mlsys_data_$user_default_mailbox_address pointer external; 5 13 /* -> the address of the user's default mailbox */ 5 14 dcl mlsys_data_$user_mail_table_address pointer external; /* -> the address of the user's entry in the mail table */ 5 15 dcl mlsys_data_$user_logbox_address pointer external; /* -> the address of the user's logbox */ 5 16 5 17 /* END INCLUDE FILE ... mlsys_data.incl.pl1 */ 103 6 1 /* BEGIN INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 6 2 /* Created: June 1983 by G. Palter */ 6 3 /* Modified: March 1984 by G. Palter to remove ignore_log_save option */ 6 4 6 5 /* Options for the mlsys_utils_$parse_address_control_arguments, mlsys_utils_$parse_address_list_control_arguments, and 6 6* mlsys_utils_$parse_mailbox_control_arguments entrypoints */ 6 7 6 8 dcl 1 parse_ca_options aligned based (parse_ca_options_ptr), 6 9 2 version character (8) unaligned, 6 10 2 logbox_creation_mode fixed binary, /* specifies the action to be taken if the address/mailbox is 6 11* the user's logbox, address/mailbox validation is requested, 6 12* and the logbox does not exist */ 6 13 2 savebox_creation_mode fixed binary, /* ... same as above but for any savebox */ 6 14 2 flags, 6 15 3 abort_on_errors bit (1) unaligned, /* ON => use ssu_$abort_line to report errors (ie: abort on 6 16* the first error); OFF => use ssu_$print_message */ 6 17 3 validate_addresses bit (1) unaligned, /* ON => validate the existence of the address/mailbox; 6 18* OFF => only validate the command/request line syntax */ 6 19 3 mbz bit (34) unaligned; /* must be set to ""b by the caller */ 6 20 6 21 dcl PARSE_CA_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlspca01"); 6 22 6 23 dcl parse_ca_options_ptr pointer; 6 24 6 25 6 26 /* Defined logbox/savebox creation modes */ 6 27 6 28 dcl (DONT_CREATE_MAILBOX initial (0), /* do not create the mailbox and issue an error message */ 6 29 QUERY_TO_CREATE_MAILBOX initial (1), /* ask the user for permission to create the mailbox */ 6 30 CREATE_AND_ANNOUNCE_MAILBOX initial (2), /* create the mailbox and inform the user of this action */ 6 31 SILENTLY_CREATE_MAILBOX initial (3)) /* create the mailbox but don't inform the user */ 6 32 fixed binary static options (constant); 6 33 6 34 /* END INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 104 105 dcl 1 PCAO aligned like parse_ca_options; 106 107 declare cleanup condition; 108 109 110 sci_ptr = null (); 111 asr_admin_command_info_ptr = null (); 112 event_wait_channel.channel_id (1) = 0; 113 on cleanup call clean_up; 114 115 call ssu_$standalone_invocation (sci_ptr, ME, "1.0", cu_$arg_list_ptr (), SSU_ABORT, code); 116 if code ^= 0 117 then do; 118 call com_err_ (code, ME, "Failed to create ssu_ invocation."); 119 return; 120 end; 121 122 call ssu_$arg_count (sci_ptr, arg_count); 123 if arg_count = 0 124 then do; 125 call com_err_$suppress_name (0, ME, "Usage: send_admin_command UNQUOTED_COMMAND_LINE"); 126 go to ABORT; 127 end; 128 129 address_string = ""; 130 call mlsys_utils_$format_address_field ("", mlsys_data_$user_mail_table_address, -1, addr (address_string), 131 length (address_string), (0), code); 132 if code ^= 0 133 then address_string = ""; 134 135 non_control_arg = "0"b; 136 first_non_control_arg = 0; 137 flags = "0"b; /* aggregate */ 138 wait_flag = FINISH; /* default */ 139 do argx = 1 to arg_count while (^non_control_arg); 140 call ssu_$arg_ptr (sci_ptr, argx, ap, al); 141 if index (argument, "-") ^= 1 /* non-control */ 142 then do; 143 first_non_control_arg = argx; 144 non_control_arg = "1"b; 145 end; 146 else if argument = "-cp" | argument = "-cpw" | argument = "-chpass" 147 then call ssu_$abort_line (sci_ptr, 0, 148 "The admin mode password is stored in the PNT. Use set_special_password operator_admin_mode"); 149 else if argument = "-no_wait" | argument = "-nwt" 150 then wait_flag = NONE; 151 else if argument = "-wait" | argument = "-wt" 152 then do; 153 if argx = arg_count 154 then wait_flag = FINISH; 155 else do; 156 argx = argx + 1; 157 call ssu_$arg_ptr (sci_ptr, argx, ap, al); 158 if index (argument, "-") = 1 159 then do; 160 argx = argx - 1; 161 wait_flag = FINISH; 162 end; 163 else if argument = "start" 164 then wait_flag = START; 165 else if argument = "finish" 166 then wait_flag = FINISH; 167 else call ssu_$abort_line (sci_ptr, error_table_$badopt, 168 "The wait code must be ""start"" or ""finish"", not ""^a""", argument); 169 end; 170 end; 171 else if argument = "-notify_message" | argument = "-ntmsg" 172 then flags.notify_message = "1"b; 173 else if argument = "-no_notify_message" | argument = "-nntmsg" 174 then flags.notify_message = "0"b; 175 else if argument = "-notify_mail" | argument = "-ntmail" 176 then flags.notify_mail = "1"b; 177 else if argument = "-no_notify_mail" | argument = "-nntmail" 178 then flags.notify_mail = "0"b; 179 else if argument = "-address" 180 then do; 181 if argx = arg_count 182 then call ssu_$abort_line (sci_ptr, error_table_$noarg, 183 "-address must be followed by a mail system address."); 184 185 flags.explicit_address = "1"b; 186 argx = argx + 1; 187 unspec (PCAO) = ""b; 188 PCAO.version = PARSE_CA_OPTIONS_VERSION_1; 189 PCAO.logbox_creation_mode = QUERY_TO_CREATE_MAILBOX; 190 PCAO.savebox_creation_mode = QUERY_TO_CREATE_MAILBOX; 191 PCAO.flags.abort_on_errors = "1"b; 192 PCAO.flags.validate_addresses = "1"b; 193 194 call mlsys_utils_$parse_address_control_args (sci_ptr, argx, addr (PCAO), address_ptr, code); 195 argx = argx - 1; /* back up */ 196 address_string = ""; 197 call mlsys_utils_$format_address_field ("", address_ptr, -1, addr (address_string), 198 length (address_string), (0), code); 199 if code ^= 0 200 then call ssu_$abort_line (sci_ptr, code, 201 "Invalid address returned by mlsys_utils_$parse_address_control_args"); 202 end; 203 else if argument = "-string" 204 then do; 205 first_non_control_arg = argx + 1; 206 non_control_arg = "1"b; 207 end; 208 else if argument = "-query" | argument = "-qy" 209 then flags.query = "1"b; 210 else if argument = "-no_query" | argument = "-nqy" 211 then flags.query = "0"b; 212 else if argument = "-brief" | argument = "-bf" 213 then flags.brief = "1"b; 214 else if argument = "-long" | argument = "-lg" 215 then flags.brief = "0"b; 216 else if argument = "-brief_query" | argument = "-bfqy" 217 then do; 218 flags.brief_query = "1"b; 219 flags.query = "1"b; 220 end; 221 else if argument = "-long_query" | argument = "-lgqy" 222 then do; 223 flags.brief_query = "0"b; 224 flags.query = "1"b; 225 end; 226 227 else call ssu_$abort_line (sci_ptr, error_table_$badopt, "Unrecognized control argument ^a", argument); 228 end; 229 230 if first_non_control_arg > arg_count 231 then call ssu_$abort_line (sci_ptr, error_table_$noarg, "No command line given."); 232 233 asr_ac_length = 0; 234 do argx = first_non_control_arg to arg_count; 235 call ssu_$arg_ptr (sci_ptr, argx, (null ()), al); 236 asr_ac_length = asr_ac_length + al + 1; /* space on the end */ 237 end; 238 asr_ac_length = asr_ac_length - 1; 239 if asr_ac_length <= 0 240 then call ssu_$abort_line (sci_ptr, 0, "Null command line, not sent."); 241 if asr_ac_length > MAX_LENGTH 242 then call ssu_$abort_line (sci_ptr, error_table_$bigarg, "Command line exceeds ^d characters in length.", 243 MAX_LENGTH); 244 245 asr_admin_command_info_ptr = null (); 246 allocate asr_admin_command_info; 247 asr_admin_command_info.header.version = as_request_version_1; 248 asr_admin_command_info.header.type = ASR_ADMIN_COMMAND; 249 250 stringx = 1; 251 do argx = first_non_control_arg to arg_count; 252 call ssu_$arg_ptr (sci_ptr, argx, ap, al); 253 substr (asr_admin_command_info.command, stringx, al + 1) = argument || " "; 254 stringx = stringx + al + 1; 255 end; 256 257 if flags.query 258 then do; 259 if flags.brief_query 260 then call command_query_$yes_no (send_it, 0, ME, 261 "If you answer ""yes"", the command line will be sent to the Initializer.", 262 "^a -- Send it? ", requote_string_ (asr_admin_command_info.command)); 263 else call command_query_$yes_no (send_it, 0, ME, 264 "If you answer ""yes"", the command line will be sent to the Initializer.", 265 "Do you want to send the command line:^/ ^a^/to the Initializer^[ and wait for it to ^[start^;finish^]^;^s^]^[ and be notified ^[by message^;by mail^[ to address ^a^]^]^]? " 266 , requote_string_ (asr_admin_command_info.command), wait_flag ^= NONE, wait_flag, 267 flags.notify_message | flags.notify_mail, flags.notify_message, flags.explicit_address, 268 address_string); 269 if ^send_it 270 then do; 271 free asr_admin_command_info; 272 call ioa_ ("send_admin_command: Command not sent."); 273 return; 274 end; 275 end; 276 277 if wait_flag ^= NONE 278 then call ipc_$create_ev_chn (asr_admin_command_info.header.reply_channel, code); 279 else asr_admin_command_info.header.reply_channel = 0; 280 event_wait_channel.channel_id (1) = asr_admin_command_info.header.reply_channel; 281 /* save for destruction */ 282 asr_admin_command_info.version = ASR_AC_VERSION_1; 283 asr_admin_command_info.command = ""; 284 asr_admin_command_info.mail_destination = address_string; 285 asr_admin_command_info.flags.send_start_wakeup = (wait_flag > NONE); 286 asr_admin_command_info.flags.send_completion_wakeup = (wait_flag = FINISH); 287 asr_admin_command_info.flags.send_completion_message = flags.notify_message; 288 asr_admin_command_info.flags.send_completion_mail = flags.notify_mail; 289 stringx = 1; 290 do argx = first_non_control_arg to arg_count; 291 call ssu_$arg_ptr (sci_ptr, argx, ap, al); 292 substr (asr_admin_command_info.command, stringx, al + 1) = argument || " "; 293 stringx = stringx + al + 1; 294 end; 295 296 if wait_flag > NONE 297 then do; 298 call send_as_request_$block (asr_admin_command_info_ptr, currentsize (asr_admin_command_info), 299 message_id, reply_bits, code); 300 end; 301 else call send_as_request_$no_block (asr_admin_command_info_ptr, currentsize (asr_admin_command_info), 302 message_id, code); 303 if wait_flag ^= FINISH 304 then do; 305 unspec (message_id_clock) = message_id; 306 request_id = request_id_ (message_id_clock); 307 if ^flags.brief 308 then call ioa_ ("send_admin_command: ID ^a^[, execution started^].", request_id, wait_flag = START); 309 end; 310 if code ^= 0 311 then call ssu_$abort_line (sci_ptr, code, "Error sending AS Request message."); 312 313 if wait_flag ^= NONE 314 then do; 315 asr_replyp = addr (reply_bits); 316 if asr_reply_admin_command.code ^= 0 317 then call ssu_$abort_line (sci_ptr, asr_reply_admin_command.code); 318 end; 319 if wait_flag = FINISH /* We expect one more wakeup */ 320 then do; 321 if ^flags.brief 322 then call ioa_$nnl ("send_admin_command: Execution started ... "); 323 call ipc_$block (addr (event_wait_channel), addr (EWI), code); 324 if code ^= 0 325 then call ssu_$abort_line (sci_ptr, code, "Failed to block to wait for completion."); 326 if ^flags.brief 327 then call ioa_ ("completed."); 328 asr_replyp = addr (EWI.message); 329 if asr_reply_admin_command.code ^= 0 | asr_reply_admin_command.flags.command_aborted 330 | asr_reply_admin_command.command_had_errors 331 then call ssu_$abort_line (sci_ptr, asr_reply_admin_command.code, 332 "^[ Command line aborted by error.^]^[ Command completed with errors.^]", 333 asr_reply_admin_command.flags.command_aborted, asr_reply_admin_command.command_had_errors); 334 335 end; 336 call clean_up; 337 338 return; 339 340 SSU_ABORT: 341 procedure; 342 343 goto ABORT; 344 end SSU_ABORT; 345 ABORT: 346 call clean_up; 347 return; 348 349 clean_up: 350 procedure; 351 352 call ssu_$destroy_invocation (sci_ptr); 353 if asr_admin_command_info_ptr ^= null 354 then free asr_admin_command_info; 355 if event_wait_channel.channel_id (1) ^= 0 356 then call ipc_$delete_ev_chn (event_wait_channel.channel_id (1), (0)); 357 return; 358 end clean_up; 359 end send_admin_command; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/28/86 1024.7 send_admin_command.pl1 >special_ldd>install>MR12.0-1200>send_admin_command.pl1 98 1 02/12/85 1429.5 as_requests.incl.pl1 >ldd>include>as_requests.incl.pl1 99 2 10/28/86 0942.5 as_request_header.incl.pl1 >special_ldd>install>MR12.0-1200>as_request_header.incl.pl1 100 3 06/29/79 1728.0 event_wait_channel.incl.pl1 >ldd>include>event_wait_channel.incl.pl1 101 4 06/29/79 1727.8 event_wait_info.incl.pl1 >ldd>include>event_wait_info.incl.pl1 103 5 10/27/83 2104.2 mlsys_data.incl.pl1 >ldd>include>mlsys_data.incl.pl1 104 6 06/18/84 1324.1 mlsys_parse_ca_options.incl.pl1 >ldd>include>mlsys_parse_ca_options.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. ASR_AC_VERSION_1 000002 constant char(8) initial unaligned dcl 1-106 ref 282 ASR_ADMIN_COMMAND constant fixed bin(17,0) initial dcl 2-29 ref 248 EWI 000354 automatic structure level 1 dcl 102 set ref 323 323 FINISH constant fixed bin(17,0) initial dcl 85 ref 138 153 161 165 286 303 319 MAX_LENGTH 000014 constant fixed bin(17,0) initial dcl 82 set ref 241 241* ME 000004 constant char(32) initial unaligned dcl 92 set ref 115* 118* 125* 259* 263* NONE constant fixed bin(17,0) initial dcl 85 ref 149 263 277 285 296 313 PARSE_CA_OPTIONS_VERSION_1 000000 constant char(8) initial unaligned dcl 6-21 ref 188 PCAO 000363 automatic structure level 1 dcl 105 set ref 187* 194 194 QUERY_TO_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 6-28 ref 189 190 START constant fixed bin(17,0) initial dcl 85 ref 163 307 abort_on_errors 4 000363 automatic bit(1) level 3 packed unaligned dcl 105 set ref 191* address_ptr 000110 automatic pointer dcl 60 set ref 194* 197* address_string 000112 automatic char(500) unaligned dcl 61 set ref 129* 130 130 130 130 132* 196* 197 197 197 197 263* 284 al 000100 automatic fixed bin(21,0) dcl 55 set ref 140* 141 146 146 146 149 149 151 151 157* 158 163 165 167 167 171 171 173 173 175 175 177 177 179 203 208 208 210 210 212 212 214 214 216 216 221 221 227 227 235* 236 252* 253 253 254 291* 292 292 293 ap 000102 automatic pointer dcl 56 set ref 140* 141 146 146 146 149 149 151 151 157* 158 163 165 167 171 171 173 173 175 175 177 177 179 203 208 208 210 210 212 212 214 214 216 216 221 221 227 252* 253 291* 292 arg_count 000310 automatic fixed bin(17,0) dcl 63 set ref 122* 123 139 153 181 230 234 251 290 argument based char unaligned dcl 71 set ref 141 146 146 146 149 149 151 151 158 163 165 167* 171 171 173 173 175 175 177 177 179 203 208 208 210 210 212 212 214 214 216 216 221 221 227* 253 292 argx 000307 automatic fixed bin(17,0) dcl 62 set ref 139* 140* 143 153 156* 156 157* 160* 160 181 186* 186 194* 195* 195 205* 234* 235* 251* 252* 290* 291* as_request_header based structure level 1 dcl 2-62 as_request_version_1 constant fixed bin(17,0) initial dcl 2-27 ref 247 asr_ac_length 000346 automatic fixed bin(21,0) dcl 1-105 set ref 233* 236* 236 238* 238 239 241 246 246 asr_admin_command_info based structure level 1 dcl 1-85 set ref 246 271 298 298 301 301 353 asr_admin_command_info_ptr 000344 automatic pointer dcl 1-84 set ref 111* 245* 246* 247 248 253 259 263 271 277 279 280 282 283 284 285 286 287 288 292 298* 298 298 301* 301 301 353 353 asr_reply_admin_command based structure level 1 dcl 1-108 asr_replyp 000342 automatic pointer dcl 1-20 set ref 315* 316 316 328* 329 329 329 329 329 329 brief 4 000333 automatic bit(1) level 2 dcl 74 set ref 212* 214* 307 321 326 brief_query 5 000333 automatic bit(1) level 2 dcl 74 set ref 218* 223* 259 channel_id 2 000350 automatic fixed bin(71,0) array level 2 dcl 3-8 set ref 112* 280* 355 355* cleanup 000370 stack reference condition dcl 107 ref 113 code 000104 automatic fixed bin(35,0) dcl 57 in procedure "sac" set ref 115* 116 118* 130* 132 194* 197* 199 199* 277* 298* 301* 310 310* 323* 324 324* code based fixed bin(35,0) level 2 in structure "asr_reply_admin_command" dcl 1-108 in procedure "sac" set ref 316 316* 329 329* com_err_ 000010 constant entry external dcl 21 ref 118 com_err_$suppress_name 000012 constant entry external dcl 22 ref 125 command 241 based char level 2 packed unaligned dcl 1-85 set ref 253* 259* 263* 283* 292* command_aborted 1(03) based bit(1) level 3 packed unaligned dcl 1-108 set ref 329 329* command_had_errors 1(04) based bit(1) level 3 packed unaligned dcl 1-108 set ref 329 329* command_length 240 based fixed bin(21,0) level 2 dcl 1-85 set ref 246* 253 259 259 263 263 271 283 292 298 298 301 301 353 command_query_$yes_no 000014 constant entry external dcl 23 ref 259 263 cu_$arg_list_ptr 000016 constant entry external dcl 24 ref 115 115 error_table_$badopt 000064 external static fixed bin(35,0) dcl 96 set ref 167* 227* error_table_$bigarg 000060 external static fixed bin(35,0) dcl 94 set ref 241* error_table_$noarg 000062 external static fixed bin(35,0) dcl 95 set ref 181* 230* event_wait_channel 000350 automatic structure level 1 dcl 3-8 set ref 323 323 event_wait_info based structure level 1 dcl 4-7 explicit_address 3 000333 automatic bit(1) level 2 dcl 74 set ref 185* 263* first_non_control_arg 000106 automatic fixed bin(17,0) dcl 59 set ref 136* 143* 205* 230 234 251 290 flags 6 based structure level 2 in structure "asr_admin_command_info" dcl 1-85 in procedure "sac" flags 1 based structure level 2 in structure "asr_reply_admin_command" dcl 1-108 in procedure "sac" flags 000333 automatic structure level 1 dcl 74 in procedure "sac" set ref 137* flags 4 000363 automatic structure level 2 in structure "PCAO" dcl 105 in procedure "sac" header based structure level 2 dcl 1-85 ioa_ 000040 constant entry external dcl 42 ref 272 307 326 ioa_$nnl 000042 constant entry external dcl 43 ref 321 ipc_$block 000050 constant entry external dcl 46 ref 323 ipc_$create_ev_chn 000044 constant entry external dcl 44 ref 277 ipc_$delete_ev_chn 000046 constant entry external dcl 45 ref 355 logbox_creation_mode 2 000363 automatic fixed bin(17,0) level 2 dcl 105 set ref 189* mail_destination 156 based char(200) level 2 packed unaligned dcl 1-85 set ref 284* message 2 000354 automatic fixed bin(71,0) level 2 dcl 102 set ref 328 message_id 000312 automatic bit(72) dcl 64 set ref 298* 301* 305 message_id_clock 000314 automatic fixed bin(71,0) dcl 65 set ref 305* 306* mlsys_data_$user_mail_table_address 000066 external static pointer dcl 5-14 set ref 130* mlsys_utils_$format_address_field 000034 constant entry external dcl 37 ref 130 197 mlsys_utils_$parse_address_control_args 000036 constant entry external dcl 40 ref 194 n_channels 000350 automatic fixed bin(17,0) initial level 2 dcl 3-8 set ref 3-8* non_control_arg 000105 automatic bit(1) dcl 58 set ref 135* 139 144* 206* notify_mail 1 000333 automatic bit(1) level 2 dcl 74 set ref 175* 177* 263 288 notify_message 000333 automatic bit(1) level 2 dcl 74 set ref 171* 173* 263 263* 287 null builtin function dcl 91 ref 110 111 235 245 353 parse_ca_options based structure level 1 dcl 6-8 query 2 000333 automatic bit(1) level 2 dcl 74 set ref 208* 210* 219* 224* 257 reply_bits 000324 automatic bit(72) dcl 68 set ref 298* 315 reply_channel 2 based fixed bin(71,0) level 3 dcl 1-85 set ref 277* 279* 280 request_id 000316 automatic char(19) unaligned dcl 67 set ref 306* 307* request_id_ 000052 constant entry external dcl 48 ref 306 requote_string_ 000020 constant entry external dcl 25 ref 259 263 savebox_creation_mode 3 000363 automatic fixed bin(17,0) level 2 dcl 105 set ref 190* sci_ptr 000326 automatic pointer dcl 69 set ref 110* 115* 122* 140* 146* 157* 167* 181* 194* 199* 227* 230* 235* 239* 241* 252* 291* 310* 316* 324* 329* 352* send_as_request_$block 000054 constant entry external dcl 49 ref 298 send_as_request_$no_block 000056 constant entry external dcl 51 ref 301 send_completion_mail 6(03) based bit(1) level 3 packed unaligned dcl 1-85 set ref 288* send_completion_message 6(02) based bit(1) level 3 packed unaligned dcl 1-85 set ref 287* send_completion_wakeup 6(01) based bit(1) level 3 packed unaligned dcl 1-85 set ref 286* send_it 000332 automatic bit(1) dcl 73 set ref 259* 263* 269 send_start_wakeup 6 based bit(1) level 3 packed unaligned dcl 1-85 set ref 285* ssu_$abort_line 000022 constant entry external dcl 26 ref 146 167 181 199 227 230 239 241 310 316 324 329 ssu_$arg_count 000032 constant entry external dcl 32 ref 122 ssu_$arg_ptr 000030 constant entry external dcl 31 ref 140 157 235 252 291 ssu_$destroy_invocation 000026 constant entry external dcl 29 ref 352 ssu_$standalone_invocation 000024 constant entry external dcl 27 ref 115 stringx 000330 automatic fixed bin(21,0) dcl 70 set ref 250* 253 254* 254 289* 292 293* 293 substr builtin function dcl 91 set ref 253* 292* type 1 based fixed bin(17,0) level 3 dcl 1-85 set ref 248* unspec builtin function dcl 91 set ref 187* 305* validate_addresses 4(01) 000363 automatic bit(1) level 3 packed unaligned dcl 105 set ref 192* version 000363 automatic char(8) level 2 in structure "PCAO" packed unaligned dcl 105 in procedure "sac" set ref 188* version based fixed bin(17,0) level 3 in structure "asr_admin_command_info" dcl 1-85 in procedure "sac" set ref 247* version 4 based char(8) level 2 in structure "asr_admin_command_info" dcl 1-85 in procedure "sac" set ref 282* wait_flag 000331 automatic fixed bin(17,0) dcl 72 set ref 138* 149* 153* 161* 163* 165* 263 263* 277 285 286 296 303 307 313 319 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ASR_ABS_COMMAND internal static fixed bin(17,0) initial dcl 2-29 ASR_BUMP_USER internal static fixed bin(17,0) initial dcl 2-29 ASR_COM_CHANNEL_INFO internal static fixed bin(17,0) initial dcl 2-29 ASR_DAEMON_COMMAND internal static fixed bin(17,0) initial dcl 2-29 ASR_DEFER_IN_ADMIN_MODE internal static bit(1) initial array unaligned dcl 2-45 ASR_DIAL_OUT internal static fixed bin(17,0) initial dcl 2-29 ASR_DIAL_SERVER internal static fixed bin(17,0) initial dcl 2-29 ASR_FIRST_TYPE internal static fixed bin(17,0) initial dcl 2-29 ASR_FPE_CAUSES_LOGOUT internal static fixed bin(17,0) initial dcl 2-29 ASR_FPE_CAUSES_NEW_PROC internal static fixed bin(17,0) initial dcl 2-29 ASR_LAST_TYPE internal static fixed bin(17,0) initial dcl 2-29 ASR_NOTE_PNT_CHANGE internal static fixed bin(17,0) initial dcl 2-29 ASR_NPC_INFO_VERSION_1 internal static char(8) initial unaligned dcl 1-129 ASR_PROC_TERM_NOTIFY internal static fixed bin(17,0) initial dcl 2-29 ASR_REQUEST_NAMES internal static char(40) initial array unaligned dcl 2-48 CREATE_AND_ANNOUNCE_MAILBOX internal static fixed bin(17,0) initial dcl 6-28 DONT_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 6-28 SILENTLY_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 6-28 asr_bump_user_info based structure level 1 dcl 1-60 asr_bump_user_info_ptr automatic pointer dcl 1-59 asr_bump_user_info_version_1 internal static char(8) initial unaligned dcl 1-57 asr_buzzard_info based structure level 1 dcl 1-29 asr_buzzard_info_version_1 internal static char(8) initial unaligned dcl 1-27 asr_buzzard_infop automatic pointer dcl 1-28 asr_buzzard_notification based structure level 1 dcl 1-35 asr_note_pnt_change_info based structure level 1 dcl 1-124 asr_note_pnt_change_info_ptr automatic pointer dcl 1-122 asr_reply based structure level 1 dcl 1-21 asr_reply_bump_user based structure level 1 dcl 1-79 event_wait_info_ptr automatic pointer dcl 4-5 mail_system_$free_address 000000 constant entry external dcl 34 mlsys_data_$system_directory external static char(168) unaligned dcl 5-7 mlsys_data_$user_default_mailbox_address external static pointer dcl 5-12 mlsys_data_$user_logbox_address external static pointer dcl 5-15 parse_ca_options_ptr automatic pointer dcl 6-23 query_flag automatic bit(1) dcl 66 NAMES DECLARED BY EXPLICIT CONTEXT. ABORT 003244 constant label dcl 345 ref 126 343 SSU_ABORT 003252 constant entry internal dcl 340 ref 115 115 clean_up 003263 constant entry internal dcl 349 ref 113 336 345 sac 000576 constant entry external dcl 11 send_admin_command 000606 constant entry external dcl 11 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 130 130 194 194 197 197 315 323 323 323 323 328 currentsize builtin function ref 298 298 301 301 index builtin function ref 141 158 length builtin function ref 130 130 197 197 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3670 3760 3332 3700 Length 4346 3332 70 351 335 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sac 436 external procedure is an external procedure. on unit on line 113 64 on unit SSU_ABORT 64 internal procedure is assigned to an entry variable. clean_up 76 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME sac 000100 al sac 000102 ap sac 000104 code sac 000105 non_control_arg sac 000106 first_non_control_arg sac 000110 address_ptr sac 000112 address_string sac 000307 argx sac 000310 arg_count sac 000312 message_id sac 000314 message_id_clock sac 000316 request_id sac 000324 reply_bits sac 000326 sci_ptr sac 000330 stringx sac 000331 wait_flag sac 000332 send_it sac 000333 flags sac 000342 asr_replyp sac 000344 asr_admin_command_info_ptr sac 000346 asr_ac_length sac 000350 event_wait_channel sac 000354 EWI sac 000363 PCAO sac THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_e_as r_ne_as alloc_char_temp call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 enable_op shorten_stack ext_entry int_entry alloc_storage op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ com_err_$suppress_name command_query_$yes_no cu_$arg_list_ptr ioa_ ioa_$nnl ipc_$block ipc_$create_ev_chn ipc_$delete_ev_chn mlsys_utils_$format_address_field mlsys_utils_$parse_address_control_args request_id_ requote_string_ send_as_request_$block send_as_request_$no_block ssu_$abort_line ssu_$arg_count ssu_$arg_ptr ssu_$destroy_invocation ssu_$standalone_invocation THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$bigarg error_table_$noarg mlsys_data_$user_mail_table_address LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 3 8 000571 11 000575 110 000614 111 000616 112 000617 113 000621 115 000643 116 000713 118 000715 119 000741 122 000742 123 000753 125 000755 126 001002 129 001003 130 001006 132 001055 135 001062 136 001063 137 001064 138 001072 139 001074 140 001105 141 001122 143 001136 144 001140 145 001142 146 001143 149 001205 151 001220 153 001230 156 001236 157 001237 158 001254 160 001270 161 001272 162 001274 163 001275 165 001304 167 001313 170 001346 171 001347 173 001362 175 001374 177 001407 179 001421 181 001425 185 001454 186 001456 187 001457 188 001462 189 001465 190 001467 191 001470 192 001472 194 001474 195 001515 196 001517 197 001522 199 001571 202 001617 203 001620 205 001624 206 001627 207 001631 208 001632 210 001645 212 001657 214 001672 216 001704 218 001714 219 001716 220 001717 221 001720 223 001730 224 001731 225 001733 227 001734 228 001767 230 001771 233 002023 234 002024 235 002033 236 002052 237 002056 238 002060 239 002062 241 002111 245 002144 246 002146 247 002157 248 002161 250 002163 251 002165 252 002175 253 002212 254 002243 255 002250 257 002252 259 002254 263 002347 269 002470 271 002474 272 002503 273 002517 277 002520 279 002535 280 002540 282 002543 283 002546 284 002552 285 002555 286 002562 287 002570 288 002575 289 002602 290 002604 291 002613 292 002630 293 002661 294 002666 296 002670 298 002672 300 002717 301 002720 303 002743 305 002746 306 002750 307 002761 310 003013 313 003041 315 003043 316 003045 319 003064 321 003067 323 003105 324 003124 326 003152 328 003171 329 003173 336 003237 338 003243 345 003244 347 003250 340 003251 343 003257 349 003262 352 003270 353 003277 355 003313 357 003330 ----------------------------------------------------------- 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