COMPILATION LISTING OF SEGMENT have_mail Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 10/27/83 1134.9 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 /* format: off */ 8 9 /* Returns "true" if there are messages in the specified mailbox */ 10 11 /* Created: September 1982 by G. Palter */ 12 /* Modified: July 1983 by G. Palter for new mail system interface */ 13 14 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen */ 15 16 17 have_mail: 18 procedure () options (variable); 19 20 21 dcl command_name character (32); 22 23 dcl code fixed binary (35); 24 25 dcl argument character (argument_lth) unaligned based (argument_ptr); 26 dcl argument_ptr pointer; 27 dcl argument_lth fixed binary (21); 28 dcl (n_arguments, argument_idx) fixed binary; 29 dcl active_function bit (1) aligned; 30 31 dcl return_value character (return_value_max_lth) varying based (return_value_ptr); 32 dcl return_value_max_lth fixed binary (21); 33 dcl return_value_ptr pointer; 34 35 dcl sci_ptr pointer; 36 37 dcl 1 local_pcao aligned like parse_ca_options; 38 39 dcl have_mailbox bit (1) aligned; /* ON => have a pathname argument already */ 40 dcl mailbox_dirname character (168); 41 dcl mailbox_ename character (32); 42 dcl mailbox_address_ptr pointer; 43 44 dcl (interactive_messages, mail) bit (1) aligned; /* ON => this type of mail is being sought */ 45 dcl default_mailbox bit (1) aligned; /* ON => default mailbox is being checked */ 46 47 dcl include_by_type bit (1) aligned; 48 dcl n_messages fixed binary; /* # of mesasges in it */ 49 dcl (n_ordinary_messages, n_interactive_messages) fixed binary; 50 51 dcl HAVE_MAIL_OR_MESSAGES_VERSION character (32) static options (constant) initial ("3.0a"); 52 53 dcl mlsys_data_$user_default_mailbox_address pointer external; 54 55 /* format: off */ 56 dcl (error_table_$inconsistent, error_table_$too_many_args) 57 fixed binary (35) external; 58 /* format: on */ 59 60 dcl active_fnc_err_ entry () options (variable); 61 dcl com_err_ entry () options (variable); 62 dcl cu_$af_return_arg entry (fixed binary, pointer, fixed binary (21)) returns (fixed binary (35)); 63 dcl cu_$arg_list_ptr entry () returns (pointer); 64 dcl ioa_ entry () options (variable); 65 dcl mail_system_$compare_addresses entry (pointer, pointer, fixed binary (35)) returns (bit (1) aligned); 66 dcl mail_system_$create_mailbox_address 67 entry (character (*), character (*), character (*) varying, character (*) varying, pointer, fixed binary (35)); 68 dcl mail_system_$free_address entry (pointer, fixed binary (35)); 69 dcl mail_system_$get_address_pathname entry (pointer, character (*), character (*), character (*), fixed binary (35)); 70 dcl mail_system_$get_message_counts 71 entry (character (*), character (*), bit (1) aligned, fixed binary, fixed binary, fixed binary, 72 fixed binary (35)); 73 dcl mlsys_utils_$parse_mailbox_control_args 74 entry (pointer, fixed binary, pointer, character (*), character (*), fixed binary (35)); 75 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 76 dcl ssu_$abort_line entry () options (variable); 77 dcl ssu_$arg_ptr entry (pointer, fixed binary, pointer, fixed binary (21)); 78 dcl ssu_$destroy_invocation entry (pointer); 79 dcl ssu_$return_arg entry (pointer, fixed binary, bit (1) aligned, pointer, fixed binary (21)); 80 dcl ssu_$standalone_invocation entry (pointer, character (*), character (*), pointer, entry, fixed binary (35)); 81 82 dcl cleanup condition; 83 84 dcl (addr, index, null, string) builtin; 85 86 /* Defaults to check for mail and interactive messages */ 87 88 /* have_mail: entry () options (variable); */ 89 90 command_name = "have_mail"; 91 mail, interactive_messages = "1"b; 92 go to COMMON; 93 94 95 /* Defaults to check for interactive messages only */ 96 97 have_messages: 98 entry () options (variable); 99 100 command_name = "have_messages"; 101 mail = "0"b; 102 interactive_messages = "1"b; 103 go to COMMON; 104 105 106 /* Argument scanning */ 107 108 COMMON: 109 sci_ptr, mailbox_address_ptr = null (); /* for cleanup handler */ 110 111 on condition (cleanup) 112 begin; 113 if sci_ptr ^= null () then call ssu_$destroy_invocation (sci_ptr); 114 if mailbox_address_ptr ^= null () then call mail_system_$free_address (mailbox_address_ptr, (0)); 115 end; 116 117 call ssu_$standalone_invocation (sci_ptr, command_name, HAVE_MAIL_OR_MESSAGES_VERSION, cu_$arg_list_ptr (), 118 abort_have_mail_or_messages_command, code); 119 if code ^= 0 then do; /* please forgive the following but ... */ 120 if cu_$af_return_arg ((0), (null ()), (0)) = 0 then 121 call active_fnc_err_ (code, command_name, "Can not establish standalone subsystem invocation."); 122 else call com_err_ (code, command_name, "Can not establish standalone subsystem invocation."); 123 return; 124 end; 125 126 call ssu_$return_arg (sci_ptr, n_arguments, active_function, return_value_ptr, return_value_max_lth); 127 128 have_mailbox = "0"b; 129 default_mailbox = "0"b; 130 131 local_pcao.version = PARSE_CA_OPTIONS_VERSION_1; 132 local_pcao.logbox_creation_mode, /* logbox/savebox must already exist */ 133 local_pcao.savebox_creation_mode = DONT_CREATE_MAILBOX; 134 string (local_pcao.flags) = ""b; 135 local_pcao.abort_on_errors = "1"b; /* any errors are immediately fatal */ 136 local_pcao.validate_addresses = "1"b; /* insure that any mailbox specified actually exists */ 137 138 do argument_idx = 1 to n_arguments; 139 140 call ssu_$arg_ptr (sci_ptr, argument_idx, argument_ptr, argument_lth); 141 142 if index (argument, "-") = 1 then /* a control argument */ 143 if (argument = "-interactive_messages") | (argument = "-im") then interactive_messages = "1"b; 144 else if (argument = "-no_interactive_messages") | (argument = "-nim") then 145 interactive_messages = "0"b; 146 147 else if (argument = "-mail") | (argument = "-ml") then mail = "1"b; 148 else if (argument = "-no_mail") | (argument = "-nml") then mail = "0"b; 149 150 else go to TRY_ARGUMENT_AS_MAILBOX_PATHNAME; 151 /* unknown control argument: maybe a mailbox specifier? */ 152 153 else do; /* not a control argument: must be a mailbox specifier */ 154 TRY_ARGUMENT_AS_MAILBOX_PATHNAME: 155 call mlsys_utils_$parse_mailbox_control_args (sci_ptr, argument_idx, addr (local_pcao), 156 mailbox_dirname, mailbox_ename, code); 157 /* ... above entrypoint aborts us if anything's wrong */ 158 argument_idx = argument_idx - 1; /* ... do loop will increment it again */ 159 if have_mailbox then /* ... this one's OK and we already have one (sigh) */ 160 call ssu_$abort_line (sci_ptr, error_table_$too_many_args, "Only one mailbox may be specified."); 161 have_mailbox = "1"b; /* ... now we've got the mailbox to be examined */ 162 end; 163 end; 164 165 if ^mail & ^interactive_messages then 166 call ssu_$abort_line (sci_ptr, error_table_$inconsistent, """-no_mail"" and ""-no_interactive_messages"""); 167 168 169 /* Use the user's default mailbox as a default if necessary; otherwise, check if the supplied mailbox is the user's 170* default mailbox so that the appropriate form of message ("You have mail" vs. "There is mail") will be printed */ 171 172 if ^have_mailbox then do; 173 call mail_system_$get_address_pathname (mlsys_data_$user_default_mailbox_address, mailbox_dirname, 174 mailbox_ename, ((32)" "), code); 175 if code ^= 0 then call ssu_$abort_line (sci_ptr, code, "Getting the pathname of your mailbox."); 176 default_mailbox = "1"b; /* know this for certain */ 177 end; 178 179 else do; 180 call mail_system_$create_mailbox_address (mailbox_dirname, mailbox_ename, "", "", mailbox_address_ptr, 181 code); 182 if code ^= 0 then 183 call ssu_$abort_line (sci_ptr, code, "Getting an address for ^a.", 184 pathname_ (mailbox_dirname, mailbox_ename)); 185 default_mailbox = 186 mail_system_$compare_addresses (mailbox_address_ptr, mlsys_data_$user_default_mailbox_address, (0)); 187 call mail_system_$free_address (mailbox_address_ptr, (0)); 188 end; 189 190 191 /* Actual processing */ 192 193 include_by_type = ^mail | ^interactive_messages; 194 195 call mail_system_$get_message_counts (mailbox_dirname, mailbox_ename, include_by_type, n_messages, 196 n_ordinary_messages, n_interactive_messages, code); 197 if code ^= 0 then 198 call ssu_$abort_line (sci_ptr, code, "Determining the number of messages in ^a.", 199 pathname_ (mailbox_dirname, mailbox_ename)); 200 201 if n_messages = 0 then do; /* mailbox is empty */ 202 if active_function then 203 return_value = "false"; 204 else call ioa_ ("No ^[messages^;mail^].", (^mail & interactive_messages)); 205 end; 206 207 else if (mail & interactive_messages) then do; /* don't care what type */ 208 if active_function then return_value = "true"; 209 else if default_mailbox then call ioa_ ("You have mail."); 210 else call ioa_ ("There is mail."); 211 end; 212 213 else do; /* checking by type */ 214 if mail then do; /* ... only want ordinary mail */ 215 if n_ordinary_messages = 0 then 216 if active_function then 217 return_value = "false"; 218 else call ioa_ ("No mail."); 219 else if active_function then return_value = "true"; 220 else if default_mailbox then call ioa_ ("You have mail."); 221 else call ioa_ ("There is mail."); 222 end; 223 224 else do; /* ... only want interactive messages */ 225 if n_interactive_messages = 0 then 226 if active_function then 227 return_value = "false"; 228 else call ioa_ ("No messages."); 229 else if active_function then return_value = "true"; 230 else if default_mailbox then call ioa_ ("You have messages."); 231 else call ioa_ ("There are messages."); 232 end; 233 end; 234 235 RETURN_FROM_HAVE_MAIL_OR_MESSAGES_COMMAND: 236 if sci_ptr ^= null () then call ssu_$destroy_invocation (sci_ptr); 237 if mailbox_address_ptr ^= null () then call mail_system_$free_address (mailbox_address_ptr, (0)); 238 239 return; 240 241 242 243 /* Invoked by ssu_$abort_line and ssu_$abort_subsystem to terminate execution of have_mail/have_messages */ 244 245 abort_have_mail_or_messages_command: 246 procedure (); 247 248 go to RETURN_FROM_HAVE_MAIL_OR_MESSAGES_COMMAND; 249 250 end abort_have_mail_or_messages_command; 251 1 1 /* BEGIN INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 1 2 /* Created: June 1983 by G. Palter */ 1 3 1 4 /* Options for the mlsys_utils_$parse_address_control_arguments, mlsys_utils_$parse_address_list_control_arguments, and 1 5* mlsys_utils_$parse_mailbox_control_arguments entrypoints */ 1 6 1 7 dcl 1 parse_ca_options aligned based (parse_ca_options_ptr), 1 8 2 version character (8) unaligned, 1 9 2 logbox_creation_mode fixed binary, /* specifies the action to be taken if the address/mailbox is 1 10* the user's logbox, address/mailbox validation is requested, 1 11* and the logbox does not exist */ 1 12 2 savebox_creation_mode fixed binary, /* ... same as above but for any savebox */ 1 13 2 flags, 1 14 3 abort_on_errors bit (1) unaligned, /* ON => use ssu_$abort_line to report errors (ie: abort on 1 15* the first error); OFF => use ssu_$print_message */ 1 16 3 validate_addresses bit (1) unaligned, /* ON => validate the existence of the address/mailbox; 1 17* OFF => only validate the command/request line syntax */ 1 18 3 ignore_log_save bit (1) unaligned, /* ON => do not recognize -log/-save control arguments */ 1 19 3 mbz bit (33) unaligned; /* must be set to ""b by the caller */ 1 20 1 21 dcl PARSE_CA_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlspca01"); 1 22 1 23 dcl parse_ca_options_ptr pointer; 1 24 1 25 1 26 /* Defined logbox/savebox creation modes */ 1 27 1 28 dcl (DONT_CREATE_MAILBOX initial (0), /* do not create the mailbox and issue an error message */ 1 29 QUERY_TO_CREATE_MAILBOX initial (1), /* ask the user for permission to create the mailbox */ 1 30 CREATE_AND_ANNOUNCE_MAILBOX initial (2), /* create the mailbox and inform the user of this action */ 1 31 SILENTLY_CREATE_MAILBOX initial (3)) /* create the mailbox but don't inform the user */ 1 32 fixed binary static options (constant); 1 33 1 34 /* END INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 252 253 254 end have_mail; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/27/83 1101.2 have_mail.pl1 >spec>on>10/27/83-mail>have_mail.pl1 252 1 10/27/83 1048.5 mlsys_parse_ca_options.incl.pl1 >spec>on>10/27/83-mail>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. DONT_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 1-28 ref 132 HAVE_MAIL_OR_MESSAGES_VERSION 000002 constant char(32) initial unaligned dcl 51 set ref 117* PARSE_CA_OPTIONS_VERSION_1 000000 constant char(8) initial unaligned dcl 1-21 ref 131 abort_on_errors 4 000126 automatic bit(1) level 3 packed unaligned dcl 37 set ref 135* active_fnc_err_ 000016 constant entry external dcl 60 ref 120 active_function 000117 automatic bit(1) dcl 29 set ref 126* 202 208 215 219 225 229 addr builtin function dcl 84 ref 154 154 argument based char unaligned dcl 25 ref 142 142 142 144 144 147 147 148 148 argument_idx 000116 automatic fixed bin(17,0) dcl 28 set ref 138* 140* 154* 158* 158* argument_lth 000114 automatic fixed bin(21,0) dcl 27 set ref 140* 142 142 142 144 144 147 147 148 148 argument_ptr 000112 automatic pointer dcl 26 set ref 140* 142 142 142 144 144 147 147 148 148 cleanup 000230 stack reference condition dcl 82 ref 111 code 000110 automatic fixed bin(35,0) dcl 23 set ref 117* 119 120* 122* 154* 173* 175 175* 180* 182 182* 195* 197 197* com_err_ 000020 constant entry external dcl 61 ref 122 command_name 000100 automatic char(32) unaligned dcl 21 set ref 90* 100* 117* 120* 122* cu_$af_return_arg 000022 constant entry external dcl 62 ref 120 cu_$arg_list_ptr 000024 constant entry external dcl 63 ref 117 117 default_mailbox 000222 automatic bit(1) dcl 45 set ref 129* 176* 185* 209 220 230 error_table_$inconsistent 000012 external static fixed bin(35,0) dcl 56 set ref 165* error_table_$too_many_args 000014 external static fixed bin(35,0) dcl 56 set ref 159* flags 4 000126 automatic structure level 2 dcl 37 set ref 134* have_mailbox 000133 automatic bit(1) dcl 39 set ref 128* 159 161* 172 include_by_type 000223 automatic bit(1) dcl 47 set ref 193* 195* index builtin function dcl 84 ref 142 interactive_messages 000220 automatic bit(1) dcl 44 set ref 91* 102* 142* 144* 165 193 204 207 ioa_ 000026 constant entry external dcl 64 ref 204 209 210 218 220 221 228 230 231 local_pcao 000126 automatic structure level 1 dcl 37 set ref 154 154 logbox_creation_mode 2 000126 automatic fixed bin(17,0) level 2 dcl 37 set ref 132* mail 000221 automatic bit(1) dcl 44 set ref 91* 101* 147* 148* 165 193 204 207 214 mail_system_$compare_addresses 000030 constant entry external dcl 65 ref 185 mail_system_$create_mailbox_address 000032 constant entry external dcl 66 ref 180 mail_system_$free_address 000034 constant entry external dcl 68 ref 114 187 237 mail_system_$get_address_pathname 000036 constant entry external dcl 69 ref 173 mail_system_$get_message_counts 000040 constant entry external dcl 70 ref 195 mailbox_address_ptr 000216 automatic pointer dcl 42 set ref 108* 114 114* 180* 185* 187* 237 237* mailbox_dirname 000134 automatic char(168) unaligned dcl 40 set ref 154* 173* 180* 182* 182* 195* 197* 197* mailbox_ename 000206 automatic char(32) unaligned dcl 41 set ref 154* 173* 180* 182* 182* 195* 197* 197* mlsys_data_$user_default_mailbox_address 000010 external static pointer dcl 53 set ref 173* 185* mlsys_utils_$parse_mailbox_control_args 000042 constant entry external dcl 73 ref 154 n_arguments 000115 automatic fixed bin(17,0) dcl 28 set ref 126* 138 n_interactive_messages 000226 automatic fixed bin(17,0) dcl 49 set ref 195* 225 n_messages 000224 automatic fixed bin(17,0) dcl 48 set ref 195* 201 n_ordinary_messages 000225 automatic fixed bin(17,0) dcl 49 set ref 195* 215 null builtin function dcl 84 ref 108 113 114 120 235 237 parse_ca_options based structure level 1 dcl 1-7 pathname_ 000044 constant entry external dcl 75 ref 182 182 197 197 return_value based varying char dcl 31 set ref 202* 208* 215* 219* 225* 229* return_value_max_lth 000120 automatic fixed bin(21,0) dcl 32 set ref 126* 202 208 215 219 225 229 return_value_ptr 000122 automatic pointer dcl 33 set ref 126* 202 208 215 219 225 229 savebox_creation_mode 3 000126 automatic fixed bin(17,0) level 2 dcl 37 set ref 132* sci_ptr 000124 automatic pointer dcl 35 set ref 108* 113 113* 117* 126* 140* 154* 159* 165* 175* 182* 197* 235 235* ssu_$abort_line 000046 constant entry external dcl 76 ref 159 165 175 182 197 ssu_$arg_ptr 000050 constant entry external dcl 77 ref 140 ssu_$destroy_invocation 000052 constant entry external dcl 78 ref 113 235 ssu_$return_arg 000054 constant entry external dcl 79 ref 126 ssu_$standalone_invocation 000056 constant entry external dcl 80 ref 117 string builtin function dcl 84 set ref 134* validate_addresses 4(01) 000126 automatic bit(1) level 3 packed unaligned dcl 37 set ref 136* version 000126 automatic char(8) level 2 packed unaligned dcl 37 set ref 131* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CREATE_AND_ANNOUNCE_MAILBOX internal static fixed bin(17,0) initial dcl 1-28 QUERY_TO_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 1-28 SILENTLY_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 1-28 parse_ca_options_ptr automatic pointer dcl 1-23 NAMES DECLARED BY EXPLICIT CONTEXT. COMMON 000265 constant label dcl 108 ref 92 103 RETURN_FROM_HAVE_MAIL_OR_MESSAGES_COMMAND 001712 constant label dcl 235 ref 248 TRY_ARGUMENT_AS_MAILBOX_PATHNAME 000650 constant label dcl 154 ref 148 abort_have_mail_or_messages_command 001745 constant entry internal dcl 245 ref 117 117 have_mail 000234 constant entry external dcl 17 have_messages 000251 constant entry external dcl 97 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2300 2360 1755 2310 Length 2620 1755 60 223 323 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME have_mail 250 external procedure is an external procedure. on unit on line 111 76 on unit abort_have_mail_or_messages_command 64 internal procedure is assigned to an entry variable. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME have_mail 000100 command_name have_mail 000110 code have_mail 000112 argument_ptr have_mail 000114 argument_lth have_mail 000115 n_arguments have_mail 000116 argument_idx have_mail 000117 active_function have_mail 000120 return_value_max_lth have_mail 000122 return_value_ptr have_mail 000124 sci_ptr have_mail 000126 local_pcao have_mail 000133 have_mailbox have_mail 000134 mailbox_dirname have_mail 000206 mailbox_ename have_mail 000216 mailbox_address_ptr have_mail 000220 interactive_messages have_mail 000221 mail have_mail 000222 default_mailbox have_mail 000223 include_by_type have_mail 000224 n_messages have_mail 000225 n_ordinary_messages have_mail 000226 n_interactive_messages have_mail THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return tra_ext enable ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. active_fnc_err_ com_err_ cu_$af_return_arg cu_$arg_list_ptr ioa_ mail_system_$compare_addresses mail_system_$create_mailbox_address mail_system_$free_address mail_system_$get_address_pathname mail_system_$get_message_counts mlsys_utils_$parse_mailbox_control_args pathname_ ssu_$abort_line ssu_$arg_ptr ssu_$destroy_invocation ssu_$return_arg ssu_$standalone_invocation THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$inconsistent error_table_$too_many_args mlsys_data_$user_default_mailbox_address LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 17 000233 90 000241 91 000244 92 000247 97 000250 100 000256 101 000261 102 000262 103 000264 108 000265 111 000270 113 000304 114 000317 115 000336 117 000337 119 000404 120 000406 122 000456 123 000502 126 000503 128 000522 129 000523 131 000524 132 000526 134 000531 135 000532 136 000534 138 000536 140 000545 142 000562 144 000611 147 000623 148 000636 154 000650 158 000706 159 000710 161 000736 163 000740 165 000742 172 000772 173 000774 175 001030 176 001056 177 001060 180 001061 182 001117 185 001171 187 001207 193 001221 195 001230 197 001267 201 001341 202 001343 204 001360 205 001407 207 001410 208 001414 209 001431 210 001452 211 001467 214 001470 215 001472 218 001511 219 001525 220 001542 221 001563 222 001600 225 001601 228 001620 229 001636 230 001653 231 001673 235 001712 237 001725 239 001743 245 001744 248 001752 ----------------------------------------------------------- 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