COMPILATION LISTING OF SEGMENT terminate_process_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/04/87 1332.8 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 /* TERMINATE_PROCESS_ - This procedure terminates the process in which it is called. 13* The arguments determine the exact nature of the termination. 14* 15* declare terminate_process_ entry (char (*), ptr); 16* call terminate_process_ (action, info_ptr); 17* 18* 1. action indicates the type of termination and must be on of those 19* . listed below. (Input) 20* 21* 2. info_ptr points to additional information about the termination and 22* . its structure is dependent upon the action. (Input) 23* 24* Possible actions: 25* 26* 1. logout the process is simply to be logged out. 27* 28* dcl 1 info aligned based(info_ptr), 29* 2 version fixed bin, /* must be 0 30* 2 hold bit(1) unaligned, /* 1 if the console is to be held 31* 2 brief bit(1) unaligned, /* 1 if no logout message is to be printed 32* 2 pad bit(34) unaligned; /* must be 0 33* 34* 2. new_proc a new process is to be created for the user after this one is terminated. 35* 36* dcl 1 info aligned based(info_ptr), 37* 2 version fixed bin, /* must be 1 38* 2 authorization_option bit (1) unaligned, /* 1 if new_authorization is to be used. 39* 2 pad bit (35) unaligned, /* must be 0 40* 2 new_authorization bit (72) aligned; /* authorization of new process 41* 42* 3. fatal_error the process is doomed due to an unrecoverable error. 43* 44* dcl 1 info aligned based(info_ptr), 45* 2 version fixed bin, /* must be 0 46* 2 status_code fixed bin(35); /* status code describing error 47* 48* 4. init_error this process encountered an error during initialization. 49* 50* dcl 1 info aligned based(info_ptr), 51* 2 version fixed bin, /* must be 0 52* 2 status_code fixed bin(35); /* status code describing error 53* 54* 5. disconnect this process is to be disconnected. 55* 56* dcl 1 info aligned based(info_ptr), 57* 2 version fixed bin, /* must be 0 58* 2 pad bit(36) aligned; 59* 60* Originally coded by R. J. Feiertag on April 29, 1972 61* Modified 750406 by PG to remove logout & new_proc code, and handle 62* version 1 new_proc structures 63* */ 64 65 66 /****^ HISTORY COMMENTS: 67* 1) change(87-04-08,Parisek), approve(87-07-14,MCR7644), 68* audit(87-07-24,GDixon), install(87-08-04,MR12.1-1055): 69* Send AS the "disconn" user signal based on the invocation of the 70* "disconnect" command. 71* END HISTORY COMMENTS */ 72 73 74 terminate_process_: 75 procedure (action, info_ptr); 76 77 /* parameters */ 78 79 dcl (action char (*), /* indicates general nature of termination */ 80 info_ptr ptr) parameter; /* points to additional information about termination */ 81 82 /* automatic */ 83 84 dcl 1 auto_ev_info aligned like event_wait_info; /* Automatic event info structure */ 85 dcl 1 auto_ev_chn aligned like event_wait_channel; /* Automatic event channel structure */ 86 dcl event_message fixed bin (71), /* message to answering service */ 87 em_ptr ptr, /* points to message */ 88 code fixed bin (35), /* status code */ 89 logout_channel fixed bin (71), /* channel on which to signal logout */ 90 logout_pid bit (36) aligned; /* process to which to signal logout */ 91 dcl old_mask bit (36) aligned; 92 dcl sig_mask bit (36) aligned; 93 dcl sig_names (2) char (32) int static options (constant) init ("sus_", "trm_"); 94 95 96 /* based */ 97 98 dcl logout_message char (8) aligned based (em_ptr); /* character string version of message */ 99 100 dcl 1 new_proc_auth aligned based (em_ptr), /* structure to overlay message */ 101 2 message char (2) unaligned, /* "np" */ 102 2 authorization bit (54) unaligned; /* an authorization */ 103 104 dcl based_version fixed bin based (info_ptr); /* version number of all structures */ 105 106 dcl 1 based_logout aligned based (info_ptr), 107 2 version fixed bin, 108 2 hold bit (1) unaligned, 109 2 brief bit (1) unaligned, 110 2 pad bit (34) unaligned; 111 112 dcl 1 based_new_proc aligned based (info_ptr), 113 2 version fixed bin, /* must be 1 */ 114 2 authorization_option bit (1) unaligned, /* 1 if new_authorization is to be used */ 115 2 pad bit (35) unaligned, /* must be zero */ 116 2 new_authorization bit (72) aligned; /* authorization of new process */ 117 118 dcl 1 based_disc aligned based (info_ptr), 119 2 version fixed bin, /* must be 0 */ 120 2 pad bit (36) unaligned; 121 122 dcl 1 based_fatal_error aligned based (info_ptr), 123 2 version fixed bin, 124 2 fatal_code fixed bin (35); /* status code */ 125 126 dcl 1 based_init_error aligned based (info_ptr), /* informations about initialization errors */ 127 2 version fixed bin, 128 2 init_code fixed bin (35); /* status code */ 129 130 dcl 1 fatal_term aligned based (em_ptr), /* message to answering service */ 131 2 name char (4), /* "term" */ 132 2 status_code fixed bin (35); /* status code to answering service */ 133 134 /* external static */ 135 136 dcl error_table_$improper_termination ext fixed bin (35), 137 error_table_$unimplemented_version ext fixed bin (35); 138 139 /* conditions */ 140 141 dcl (cleanup, quit) condition; 142 143 /* builtins */ 144 145 dcl (addr, null, substr) builtin; 146 147 /* entries */ 148 149 dcl 150 continue_to_signal_ entry (fixed bin(35)), 151 create_ips_mask_ entry (ptr, fixed bin, bit (36) aligned), 152 get_process_id_ entry returns (bit (36) aligned), 153 hcs_$block entry, 154 hcs_$reset_ips_mask entry (bit (36) aligned, bit (36) aligned), 155 hcs_$get_ips_mask entry (bit (36) aligned), 156 hcs_$set_ips_mask entry (bit (36) aligned, bit (36) aligned), 157 hcs_$stop_process entry (bit (36) aligned), 158 hcs_$wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)), 159 ipc_$block entry (ptr, ptr, fixed bin(35)), 160 ipc_$create_ev_chn entry (fixed bin(71), fixed bin(35)), 161 ipc_$delete_ev_chn entry (fixed bin(71), fixed bin(35)), 162 sub_err_ entry options (variable), 163 user_info_$logout_data entry options (variable); 164 165 1 1 /* BEGIN INCLUDE FILE event_wait_info.incl.pl1 */ 1 2 1 3 /* T. Casey, May 1978 */ 1 4 1 5 dcl event_wait_info_ptr ptr; 1 6 1 7 dcl 1 event_wait_info aligned based (event_wait_info_ptr), /* argument structure filled in on return from ipc_$block */ 1 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 1 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 1 10 2 sender bit (36), /* process id of sender */ 1 11 2 origin, 1 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 1 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 1 14 2 channel_index fixed bin; /* index of this channel in the event wait list */ 1 15 1 16 /* END INCLUDE FILE event_wait_info.incl.pl1 */ 166 167 2 1 /* BEGIN INCLUDE FILE ... event_wait_channel.incl.pl1 */ 2 2 2 3 /* ipc_$block wait list with one channel 2 4* 2 5* Written 9-May-79 by M. N. Davidoff. 2 6**/ 2 7 2 8 declare 1 event_wait_channel aligned, 2 9 2 n_channels fixed bin initial (1), /* number of channels */ 2 10 2 pad bit (36), 2 11 2 channel_id (1) fixed bin (71); /* event channel to wait on */ 2 12 2 13 /* END INCLUDE FILE ... event_wait_channel.incl.pl1 */ 168 169 3 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 3 2 /* format: style3 */ 3 3 3 4 /* These constants are to be used for the flags argument of sub_err_ */ 3 5 /* They are just "string (condition_info_header.action_flags)" */ 3 6 3 7 declare ( 3 8 ACTION_CAN_RESTART init (""b), 3 9 ACTION_CANT_RESTART init ("1"b), 3 10 ACTION_DEFAULT_RESTART 3 11 init ("01"b), 3 12 ACTION_QUIET_RESTART 3 13 init ("001"b), 3 14 ACTION_SUPPORT_SIGNAL 3 15 init ("0001"b) 3 16 ) bit (36) aligned internal static options (constant); 3 17 3 18 /* End include file */ 170 171 172 /* program */ 173 174 em_ptr = addr (event_message); 175 if action = "logout" then do; /* this is a simple logout */ 176 if (based_logout.version ^= 0) | (based_logout.pad ^= ""b) 177 then go to illegal_termination; /* invalid structure */ 178 179 if based_logout.brief then do; /* don't print logout message */ 180 if based_logout.hold then logout_message = "lhbrief"; /* hold and brief */ 181 else logout_message = "lobrief"; /* breif only */ 182 end; 183 else do; /* print logout message */ 184 if based_logout.hold then logout_message = "login"; /* hold only */ 185 else logout_message = "logout"; /* no hold or brief */ 186 end; 187 end; 188 else if action = "new_proc" then do; /* this is a new_proc */ 189 if (based_new_proc.version ^= 1) | (based_new_proc.pad ^= ""b) 190 then go to illegal_termination; /* naughty, naughty */ 191 192 if based_new_proc.authorization_option 193 then do; /* special handling here */ 194 new_proc_auth.message = "np"; /* set identifying string */ 195 new_proc_auth.authorization = substr (based_new_proc.new_authorization, 1, 54); /* ugh */ 196 end; 197 else logout_message = "new_proc"; /* map new_proc into proper key word */ 198 end; 199 else if action = "fatal_error" then do; /* this is a fatal error */ 200 if based_fatal_error.version ^= 0 201 then go to illegal_termination; 202 203 fatal_term.name = "term"; /* include proper key word */ 204 fatal_term.status_code = based_fatal_error.fatal_code; /* pass on status code */ 205 end; 206 else if action = "init_error" then do; /* this is an initialization error */ 207 if based_init_error.version ^= 0 208 then go to illegal_termination; 209 210 logout_message = "init_err"; /* map into proper key word */ 211 end; 212 else if action = "io_attach" then do; /* cannot do initial ios_$attach */ 213 if based_version ^= 0 214 then go to illegal_termination; 215 216 logout_message = "no_ioatt"; 217 end; 218 else if action = "abs_order" then do; /* Cannot issue absentee outseg order */ 219 if based_version ^= 0 220 then go to illegal_termination; 221 222 logout_message = "abs_ordr"; 223 end; 224 else if action = "no_initproc" then do; /* Cannot find initial procedure */ 225 if based_version ^= 0 226 then go to illegal_termination; 227 228 logout_message = "no_initp"; 229 end; 230 else if action = "term_signal" then do; 231 if based_version ^= 0 232 then goto illegal_termination; 233 234 logout_message = "termsgnl"; 235 end; 236 else if action = "disconnect" then do; 237 if (based_disc.version ^= 0) | (based_disc.pad ^= ""b) 238 then do; 239 call sub_err_ (error_table_$unimplemented_version, "disconnect", ACTION_CANT_RESTART, null (), (0), ""); 240 return; 241 end; 242 logout_message = "disconn"; 243 end; 244 else do; /* illegal action */ 245 illegal_termination: 246 fatal_term.name = "term"; /* use proper key word */ 247 fatal_term.status_code = error_table_$improper_termination; 248 /* return proper status code */ 249 end; 250 251 call user_info_$logout_data (logout_channel, logout_pid); 252 /* get logout information */ 253 254 if action = "disconnect" then do; 255 call create_ips_mask_ (addr (sig_names), (2), sig_mask); 256 /* Create a mask of trm_ & sus_ signals */ 257 sig_mask = ^sig_mask; /* Allow only trm_ & sus_ to wakeup our process */ 258 call hcs_$get_ips_mask (old_mask); 259 event_wait_channel.channel_id (1) = 0; 260 event_wait_channel.pad = ""b; 261 262 on cleanup begin; /* If we typed "release" in response to the QUIT condition */ 263 if event_wait_channel.channel_id (1) ^= 0 then 264 call ipc_$delete_ev_chn (event_wait_channel.channel_id (1), code); 265 call hcs_$reset_ips_mask (old_mask, (""b)); 266 /* Delete our event chn & reset the signal mask */ 267 end; 268 call ipc_$create_ev_chn (event_wait_channel.channel_id (1), code); 269 call hcs_$set_ips_mask (sig_mask, old_mask); 270 /* Create an event chn to send ourselves a wakeup on */ 271 on quit begin; 272 call hcs_$wakeup ((get_process_id_ ()), event_wait_channel.channel_id (1), 0, code); 273 /* Send a wakeup to ourselves */ 274 call continue_to_signal_ (code); /* Look for another "quit" handler and return */ 275 end; 276 277 call hcs_$wakeup (logout_pid, logout_channel, event_message, code); 278 /* send message to answering service */ 279 280 call ipc_$block (addr (event_wait_channel), addr (auto_ev_info), code); 281 /* Have our process go blocked */ 282 /* until a "quit" condition is signalled */ 283 284 /* If we get here then we must have typed "start" */ 285 /* in response to the QUIT condition */ 286 287 revert quit; /* If we get the "quit" condition signalled, then revert it */ 288 call ipc_$delete_ev_chn (event_wait_channel.channel_id (1), code); 289 /* Delete our event chn after "start" on the quit condition */ 290 call hcs_$reset_ips_mask (old_mask, (""b)); /* Reset IPS masks */ 291 return; /* Return to caller */ 292 end; 293 294 else do; 295 call hcs_$wakeup (logout_pid, logout_channel, event_message, code); 296 /* send message to answering service */ 297 298 call hcs_$stop_process ((get_process_id_ ())); 299 /* stop the process */ 300 do while ("1"b); /* wait for destruction */ 301 call hcs_$block; 302 end; 303 end; 304 305 end terminate_process_; 306 307 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1221.3 terminate_process_.pl1 >special_ldd>install>MR12.1-1054>terminate_process_.pl1 166 1 06/29/79 1727.8 event_wait_info.incl.pl1 >ldd>include>event_wait_info.incl.pl1 168 2 06/29/79 1728.0 event_wait_channel.incl.pl1 >ldd>include>event_wait_channel.incl.pl1 170 3 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ACTION_CANT_RESTART 000020 constant bit(36) initial dcl 3-7 set ref 239* action parameter char unaligned dcl 79 ref 74 175 188 199 206 212 218 224 230 236 254 addr builtin function dcl 145 ref 174 255 255 280 280 280 280 authorization 0(18) based bit(54) level 2 packed unaligned dcl 100 set ref 195* authorization_option 1 based bit(1) level 2 packed unaligned dcl 112 ref 192 auto_ev_chn 000110 automatic structure level 1 dcl 85 auto_ev_info 000100 automatic structure level 1 dcl 84 set ref 280 280 based_disc based structure level 1 dcl 118 based_fatal_error based structure level 1 dcl 122 based_init_error based structure level 1 dcl 126 based_logout based structure level 1 dcl 106 based_new_proc based structure level 1 dcl 112 based_version based fixed bin(17,0) dcl 104 ref 213 219 225 231 brief 1(01) based bit(1) level 2 packed unaligned dcl 106 ref 179 channel_id 2 000144 automatic fixed bin(71,0) array level 2 dcl 2-8 set ref 259* 263 263* 268* 272* 288* cleanup 000130 stack reference condition dcl 141 ref 262 code 000120 automatic fixed bin(35,0) dcl 86 set ref 263* 268* 272* 274* 277* 280* 288* 295* continue_to_signal_ 000014 constant entry external dcl 149 ref 274 create_ips_mask_ 000016 constant entry external dcl 149 ref 255 em_ptr 000116 automatic pointer dcl 86 set ref 174* 180 181 184 185 194 195 197 203 204 210 216 222 228 234 242 245 247 error_table_$improper_termination 000010 external static fixed bin(35,0) dcl 136 ref 247 error_table_$unimplemented_version 000012 external static fixed bin(35,0) dcl 136 set ref 239* event_message 000114 automatic fixed bin(71,0) dcl 86 set ref 174 277* 295* event_wait_channel 000144 automatic structure level 1 dcl 2-8 set ref 280 280 event_wait_info based structure level 1 dcl 1-7 fatal_code 1 based fixed bin(35,0) level 2 dcl 122 ref 204 fatal_term based structure level 1 dcl 130 get_process_id_ 000020 constant entry external dcl 149 ref 272 298 hcs_$block 000022 constant entry external dcl 149 ref 301 hcs_$get_ips_mask 000026 constant entry external dcl 149 ref 258 hcs_$reset_ips_mask 000024 constant entry external dcl 149 ref 265 290 hcs_$set_ips_mask 000030 constant entry external dcl 149 ref 269 hcs_$stop_process 000032 constant entry external dcl 149 ref 298 hcs_$wakeup 000034 constant entry external dcl 149 ref 272 277 295 hold 1 based bit(1) level 2 packed unaligned dcl 106 ref 180 184 info_ptr parameter pointer dcl 79 ref 74 176 176 179 180 184 189 189 192 195 200 204 207 213 219 225 231 237 237 ipc_$block 000036 constant entry external dcl 149 ref 280 ipc_$create_ev_chn 000040 constant entry external dcl 149 ref 268 ipc_$delete_ev_chn 000042 constant entry external dcl 149 ref 263 288 logout_channel 000122 automatic fixed bin(71,0) dcl 86 set ref 251* 277* 295* logout_message based char(8) dcl 98 set ref 180* 181* 184* 185* 197* 210* 216* 222* 228* 234* 242* logout_pid 000124 automatic bit(36) dcl 86 set ref 251* 277* 295* message based char(2) level 2 packed unaligned dcl 100 set ref 194* n_channels 000144 automatic fixed bin(17,0) initial level 2 in structure "event_wait_channel" dcl 2-8 in procedure "terminate_process_" set ref 2-8* n_channels 000110 automatic fixed bin(17,0) initial level 2 in structure "auto_ev_chn" dcl 85 in procedure "terminate_process_" set ref 85* name based char(4) level 2 dcl 130 set ref 203* 245* new_authorization 2 based bit(72) level 2 dcl 112 ref 195 new_proc_auth based structure level 1 dcl 100 null builtin function dcl 145 ref 239 239 old_mask 000125 automatic bit(36) dcl 91 set ref 258* 265* 269* 290* pad 1 based bit(36) level 2 in structure "based_disc" packed unaligned dcl 118 in procedure "terminate_process_" ref 237 pad 1(02) based bit(34) level 2 in structure "based_logout" packed unaligned dcl 106 in procedure "terminate_process_" ref 176 pad 1 000144 automatic bit(36) level 2 in structure "event_wait_channel" dcl 2-8 in procedure "terminate_process_" set ref 260* pad 1(01) based bit(35) level 2 in structure "based_new_proc" packed unaligned dcl 112 in procedure "terminate_process_" ref 189 quit 000136 stack reference condition dcl 141 ref 271 287 sig_mask 000126 automatic bit(36) dcl 92 set ref 255* 257* 257 269* sig_names 000000 constant char(32) initial array unaligned dcl 93 set ref 255 255 status_code 1 based fixed bin(35,0) level 2 dcl 130 set ref 204* 247* sub_err_ 000044 constant entry external dcl 149 ref 239 substr builtin function dcl 145 ref 195 user_info_$logout_data 000046 constant entry external dcl 149 ref 251 version based fixed bin(17,0) level 2 in structure "based_new_proc" dcl 112 in procedure "terminate_process_" ref 189 version based fixed bin(17,0) level 2 in structure "based_disc" dcl 118 in procedure "terminate_process_" ref 237 version based fixed bin(17,0) level 2 in structure "based_logout" dcl 106 in procedure "terminate_process_" ref 176 version based fixed bin(17,0) level 2 in structure "based_fatal_error" dcl 122 in procedure "terminate_process_" ref 200 version based fixed bin(17,0) level 2 in structure "based_init_error" dcl 126 in procedure "terminate_process_" ref 207 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 3-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 3-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 3-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 3-7 event_wait_info_ptr automatic pointer dcl 1-5 NAMES DECLARED BY EXPLICIT CONTEXT. illegal_termination 000440 constant label dcl 245 ref 176 189 200 207 213 219 225 231 terminate_process_ 000117 constant entry external dcl 74 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1244 1314 1013 1254 Length 1572 1013 50 242 230 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME terminate_process_ 140 external procedure is an external procedure. on unit on line 262 71 on unit on unit on line 271 82 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME terminate_process_ 000100 auto_ev_info terminate_process_ 000110 auto_ev_chn terminate_process_ 000114 event_message terminate_process_ 000116 em_ptr terminate_process_ 000120 code terminate_process_ 000122 logout_channel terminate_process_ 000124 logout_pid terminate_process_ 000125 old_mask terminate_process_ 000126 sig_mask terminate_process_ 000144 event_wait_channel terminate_process_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac enable_op ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. continue_to_signal_ create_ips_mask_ get_process_id_ hcs_$block hcs_$get_ips_mask hcs_$reset_ips_mask hcs_$set_ips_mask hcs_$stop_process hcs_$wakeup ipc_$block ipc_$create_ev_chn ipc_$delete_ev_chn sub_err_ user_info_$logout_data THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$improper_termination error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 74 000113 85 000132 2 8 000134 174 000135 175 000137 176 000146 179 000155 180 000160 181 000170 182 000174 184 000175 185 000205 187 000211 188 000212 189 000216 192 000226 194 000231 195 000234 196 000242 197 000243 198 000247 199 000250 200 000254 203 000257 204 000261 205 000264 206 000265 207 000271 210 000274 211 000300 212 000301 213 000305 216 000310 217 000313 218 000314 219 000320 222 000323 223 000326 224 000327 225 000333 228 000336 229 000341 230 000342 231 000346 234 000351 235 000354 236 000355 237 000361 239 000367 240 000432 242 000433 243 000437 245 000440 247 000442 251 000445 254 000461 255 000470 257 000507 258 000512 259 000521 260 000523 262 000524 263 000540 265 000553 267 000567 268 000570 269 000601 271 000612 272 000626 274 000654 275 000664 277 000665 280 000702 287 000721 288 000722 290 000733 291 000746 295 000747 298 000764 301 001002 302 001007 305 001010 ----------------------------------------------------------- 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