COMPILATION LISTING OF SEGMENT dump_syscon_mseg Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx, AZ, Sys-M Compiled on: 09/03/87 1210.6 mst Thu 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 13 /****^ HISTORY COMMENTS: 14* 1) change(87-09-02,Parisek), approve(87-09-03,MECR0004), 15* audit(87-09-02,GDixon), install(87-09-03,MR12.1-1098): 16* Expand the quit_bits display to include all possible 504 bits. (phx20974) 17* END HISTORY COMMENTS */ 18 19 20 dump_syscon_mseg: 21 dump_msg: proc; 22 23 /* automatic */ 24 25 dcl argl fixed bin, /* Length of current argument */ 26 argno fixed bin, /* Number of current argument */ 27 code fixed bin, /* For errors */ 28 i fixed bin, /* A temporary index */ 29 j fixed bin, /* Another */ 30 k fixed bin, /* Another */ 31 n_blocks fixed bin, 32 highest_quit_bits fixed bin(24), /* quit_bits to display */ 33 (temp_stream, temp_source) char (32); 34 35 36 declare 37 argp pointer, /* Pointer to current argument */ 38 messp pointer, /* Pointer to current block */ 39 msegp pointer; /* Pointer to the message segment */ 40 41 declare 42 barg char (argl) based (argp), /* For getting arguments */ 43 date_string char (25), 44 dirname char (168), 45 entname char (32), 46 flagn_arr (4) char (16) varying int static init ("continue, ", "introduction, ", "farewell, ", "sentinel, "), 47 list char (64) varying; /* For printing bit names &c */ 48 49 declare 50 addr builtin, 51 length builtin, 52 null builtin, 53 rel builtin, 54 string builtin, 55 substr builtin, 56 unspec builtin; 57 58 declare 59 com_err_ entry options (variable), 60 cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin), 61 date_time_$hundredths entry (fixed bin (71), char (*)), 62 expand_path_ entry (ptr, fixed bin, ptr, ptr, fixed bin), 63 find_bit_$last_on entry (bit (*) aligned) returns (fixed bin (24)), 64 hcs_$initiate entry (char (*), char (*), char (*), fixed bin (1), fixed bin (2), ptr, fixed bin), 65 ioa_ entry options (variable); 66 67 /* include files */ 68 1 1 /* ====== BEGIN INCLUDE SEGMENT syscon_mseg.incl.pl1 ====================================== */ 1 2 1 3 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(87-09-02,Parisek), approve(87-09-03,MECR0004), 1 7* audit(87-09-02,GDixon), install(87-09-03,MR12.1-1098): 1 8* Increase quit_bits from 72 bits to 504 bits so more than 72 sources 1 9* may enable quit without error. (phx20974) 1 10* END HISTORY COMMENTS */ 1 11 1 12 1 13 /* Message Coordinator message segment declaration. Each daemon process 1 14* enqueues its messages in a segment like this one. 1 15* 1 16* The segment consists of a header followed by many message blocks, 1 17* each capable of holding a message of 132 characters plus 1 18* information on when the message was sent, who it's from, etc. 1 19* These blocks are "allocated" only as needed and placed on a free 1 20* storage list when freed. Blocks in use are chained together in a 1 21* first-in-first-out queue. */ 1 22 1 23 dcl buff_len fixed bin init (132) internal static; 1 24 1 25 dcl 1 syscon_mseg aligned based, /* This header is of length 24 dec 30 oct words */ 1 26 2 mlock bit (36) aligned, 1 27 2 current_process_id bit (36), 1 28 2 ipc_el, /* mrdim_ blocks on this list for normal reads */ 1 29 3 n fixed bin, 1 30 3 pad fixed bin, 1 31 3 channel fixed bin (71), 1 32 2 proto_el, /* mrdim_ blocks on this list for attach and detach */ 1 33 3 n fixed bin, 1 34 3 pad fixed bin, 1 35 3 channel fixed bin (71), 1 36 2 flags unaligned, 1 37 3 test_mode bit (1), /* ON if running in test environment */ 1 38 3 receiver_woken bit (1), /* ON if wakeup sent but not received yet */ 1 39 3 unused bit (34), 1 40 2 first_message fixed bin, /* index of head of message chain */ 1 41 2 last_message fixed bin, /* index of tail of message chain */ 1 42 2 first_proto fixed bin, /* index of head of protocol chain */ 1 43 2 last_proto fixed bin, /* index of tail of protocol chain */ 1 44 2 first_free_buffer fixed bin, /* head of free chain */ 1 45 2 last_assigned_buffer fixed bin, /* high water mark of buffers ever used */ 1 46 2 no_of_streams fixed bin, 1 47 2 quit_bits bit (504), /* used in mc.message to mark a source waiting to be quit */ 1 48 2 locked_by_pid bit (36), /* process id of locker */ 1 49 2 mescount fixed bin, /* Count of unprinted messages */ 1 50 2 output_wait bit (1), /* TRUE if in output wait - mc_wakeups resets */ 1 51 2 pad fixed bin, 1 52 2 message (1) like message_block aligned; /* the array of messages */ 1 53 1 54 dcl 1 message_block aligned based (messp), /* 56 dec 70 oct words */ 1 55 2 time_sent fixed bin (71), 1 56 2 from_source char (32), 1 57 2 from_stream char (32), 1 58 2 source_index fixed bin, /* index in MRT */ 1 59 2 stream_index fixed bin, /* .. */ 1 60 2 next_message fixed bin, /* foward pointer of message chain */ 1 61 2 flags unal, 1 62 3 continue bit (1), /* ON if message continued in next block */ 1 63 3 introduction bit (1), /* ON if message is an introduction */ 1 64 3 farewell bit (1), /* ON if message is farewell */ 1 65 3 sentinel bit (1), /* ON if special formatting wanted */ 1 66 3 trace bit (1), /* used only by dump_msg */ 1 67 3 unused bit (31) unal, 1 68 2 length fixed bin, /* number of characters in body */ 1 69 2 message_body char (132); /* text of message */ 1 70 1 71 dcl 1 debug_info based aligned, 1 72 2 flag fixed bin (71), 1 73 2 time fixed bin (71), 1 74 2 last_pid bit (36), 1 75 2 first_msg fixed bin, 1 76 2 last_msg fixed bin, 1 77 2 first_pro fixed bin, 1 78 2 last_pro fixed bin, 1 79 2 free_chain fixed bin; 1 80 1 81 /* ------ END INCLUDE SEGMENT syscon_mseg.incl.pl1 -------------------------------------- */ 69 70 71 /* program */ 72 73 74 /* This program dumps a "message" segment of the message routing facility */ 75 76 /* First get the pathname of the seg from the command line */ 77 argno = 1; 78 call cu_$arg_ptr (argno, argp, argl, code); 79 if code ^= 0 then do; 80 call com_err_ (code, "dump_msg", "Pathname of message segment"); 81 return; 82 end; 83 84 call expand_path_ (argp, argl, addr (dirname), addr (entname), code); 85 if code ^= 0 then do; 86 call com_err_ (code, "dump_msg", "^a", barg); 87 return; 88 end; 89 90 call hcs_$initiate (dirname, entname, "", 0, 1, msegp, code); 91 if msegp = null then do; 92 call com_err_ (code, "dump_msg", "^a>^a", dirname, entname); 93 return; 94 end; 95 96 call ioa_ ("lock:^2-^12.3b^/locked_by_pid:^-^12.3b", 97 msegp -> syscon_mseg.mlock, msegp -> syscon_mseg.locked_by_pid); 98 99 call ioa_ ("process_id:^-^12.3b", msegp -> syscon_mseg.current_process_id); 100 101 call ioa_ ("regular channel:^-^72.3b", unspec (msegp -> syscon_mseg.ipc_el.channel)); 102 103 call ioa_ ("protocol channel:^-^72.3b", unspec (msegp -> syscon_mseg.proto_el.channel)); 104 105 /* Prepare list of flags that are on & print it */ 106 list = ""; 107 highest_quit_bits = find_bit_$last_on (msegp->syscon_mseg.quit_bits); 108 if msegp -> syscon_mseg.flags.test_mode then 109 list = "test_mode, "; 110 if msegp -> syscon_mseg.flags.receiver_woken then 111 list = list || "receiver_woken, "; 112 if list ^= "" 113 then call ioa_ ("flags:^2-^a", substr (list, 1, length (list) - 2)); 114 115 call ioa_ ("first_free_buffer:^-^d", msegp -> syscon_mseg.first_free_buffer); 116 call ioa_ ("last_assigned_buffer:^-^d", msegp -> syscon_mseg.last_assigned_buffer); 117 call ioa_ ("no_of_streams:^-^d", msegp -> syscon_mseg.no_of_streams); 118 119 call ioa_ ("quit bits:^-^.3b", substr (msegp -> syscon_mseg.quit_bits, 1, highest_quit_bits)); 120 call ioa_ ("mescount:^2-^d", msegp -> syscon_mseg.mescount); 121 call ioa_ ("output_wait:^-^[ON^;OFF^]", msegp -> syscon_mseg.output_wait); 122 123 n_blocks = msegp -> syscon_mseg.last_assigned_buffer; 124 125 begin; /* allocate space to hold trace flags */ 126 127 dcl already_printed bit (n_blocks) unaligned; 128 129 already_printed = "0"b; 130 131 call print_chain ("protocol", msegp -> syscon_mseg.first_proto); 132 call print_chain ("regular", msegp -> syscon_mseg.first_message); 133 call print_chain ("free", msegp -> syscon_mseg.first_free_buffer); 134 135 if (^already_printed) ^= ""b then do; 136 call ioa_ ("Not in any chain:"); 137 do k = 1 to n_blocks; 138 if substr (already_printed, k, 1) = "0"b 139 then call print_block (k); 140 end; 141 end; 142 143 return; 144 145 146 print_chain: proc (chain_name, chain_head); 147 148 declare 149 chain_name char (*), 150 chain_head fixed bin, 151 chainlen fixed bin, 152 this_message fixed bin; 153 154 chainlen = 0; 155 this_message = chain_head; 156 157 do while (this_message ^= 0); /* find out how long chain is */ 158 if ^substr (already_printed, this_message, 1) 159 then do; 160 substr (already_printed, this_message, 1) = "1"b; 161 chainlen = chainlen + 1; 162 this_message = msegp -> syscon_mseg.message (this_message).next_message; 163 end; 164 else this_message = 0; /* quit because we've looped back */ 165 end; 166 call ioa_ ("There are ^d blocks in the ^a chain", chainlen, chain_name); 167 168 if chainlen = 0 then return; /* No chain to print */ 169 170 call ioa_ ("OFFSET # NEXT SOURCE STREAM INDICES TIME FLAGS"); 171 172 pb: this_message = chain_head; 173 do i = 1 to chainlen; 174 messp = addr (msegp -> syscon_mseg.message (this_message)); 175 176 if messp -> debug_info.flag = -1 then do; /* debugging info block */ 177 call ioa_ ("^6.3b ^3d DEBUG INFO:", rel (messp), this_message); 178 call date_time_$hundredths (messp -> debug_info.time, date_string); 179 call ioa_ ("^-time:^-^a", date_string); 180 call ioa_ ("^-last_pid:^-^12.3b", messp -> debug_info.last_pid); 181 call ioa_ ("^-first_msg:^-^d", messp -> debug_info.first_msg); 182 call ioa_ ("^-last_msg:^-^d", messp -> debug_info.last_msg); 183 call ioa_ ("^-first_pro:^-^d", messp -> debug_info.first_pro); 184 call ioa_ ("^-last_pro:^-^d", messp -> debug_info.last_pro); 185 call ioa_ ("^-free_chain:^-^d", messp -> debug_info.free_chain); 186 go to next_block; 187 end; 188 189 list = ""; 190 do j = 1 to 4; 191 if substr (string (message_block.flags), j, 1) then 192 list = list || flagn_arr (j); 193 end; 194 195 if list ^= "" 196 then list = substr (list, 1, length (list) -2); 197 198 call date_time_$hundredths (message_block.time_sent, date_string); 199 if unspec (message_block.from_source) = ""b 200 then temp_source = "(unset)"; 201 else temp_source = message_block.from_source; 202 203 if unspec (message_block.from_stream) = ""b 204 then temp_stream = "(unset)"; 205 else temp_stream = message_block.from_stream; 206 207 call ioa_ ("^6.3b ^3d ^3d ^10a ^10a ^3d ^3d ^a ^a", 208 rel (messp), 209 this_message, 210 message_block.next_message, 211 temp_source, 212 temp_stream, 213 message_block.source_index, 214 message_block.stream_index, 215 date_string, list); 216 call ioa_ ("^3d ^a", message_block.length, 217 substr (message_block.message_body, 1, message_block.length)); 218 this_message = message_block.next_message; 219 220 next_block: 221 end; 222 return; 223 224 print_block: entry (chain_head); 225 chainlen = 1; 226 goto pb; 227 228 end print_chain; 229 230 end; 231 end dump_syscon_mseg; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/03/87 1208.2 dump_syscon_mseg.pl1 >spec>install>MR12.1-1098>dump_syscon_mseg.pl1 69 1 09/03/87 1208.8 syscon_mseg.incl.pl1 >spec>install>MR12.1-1098>syscon_mseg.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. addr builtin function dcl 49 ref 84 84 84 84 174 already_printed 000100 automatic bit unaligned dcl 127 set ref 129* 135 138 158 160* argl 000100 automatic fixed bin(17,0) dcl 25 set ref 78* 84* 86 86 argno 000101 automatic fixed bin(17,0) dcl 25 set ref 77* 78* argp 000130 automatic pointer dcl 36 set ref 78* 84* 86 barg based char unaligned dcl 41 set ref 86* chain_head parameter fixed bin(17,0) dcl 148 ref 146 155 172 224 chain_name parameter char unaligned dcl 148 set ref 146 166* chainlen 000114 automatic fixed bin(17,0) dcl 148 set ref 154* 161* 161 166* 168 173 225* channel 10 based fixed bin(71,0) level 3 in structure "syscon_mseg" dcl 1-25 in procedure "dump_msg" ref 103 103 channel 4 based fixed bin(71,0) level 3 in structure "syscon_mseg" dcl 1-25 in procedure "dump_msg" ref 101 101 code 000102 automatic fixed bin(17,0) dcl 25 set ref 78* 79 80* 84* 85 86* 90* 92* com_err_ 000010 constant entry external dcl 58 ref 80 86 92 cu_$arg_ptr 000012 constant entry external dcl 58 ref 78 current_process_id 1 based bit(36) level 2 dcl 1-25 set ref 99* date_string 000136 automatic char(25) unaligned dcl 41 set ref 178* 179* 198* 207* date_time_$hundredths 000014 constant entry external dcl 58 ref 178 198 debug_info based structure level 1 dcl 1-71 dirname 000145 automatic char(168) unaligned dcl 41 set ref 84 84 90* 92* entname 000217 automatic char(32) unaligned dcl 41 set ref 84 84 90* 92* expand_path_ 000016 constant entry external dcl 58 ref 84 find_bit_$last_on 000020 constant entry external dcl 58 ref 107 first_free_buffer 17 based fixed bin(17,0) level 2 dcl 1-25 set ref 115* 133* first_message 13 based fixed bin(17,0) level 2 dcl 1-25 set ref 132* first_msg 5 based fixed bin(17,0) level 2 dcl 1-71 set ref 181* first_pro 7 based fixed bin(17,0) level 2 dcl 1-71 set ref 183* first_proto 15 based fixed bin(17,0) level 2 dcl 1-25 set ref 131* flag based fixed bin(71,0) level 2 dcl 1-71 ref 176 flagn_arr 000000 constant varying char(16) initial array dcl 41 ref 191 flags 25 based structure level 2 in structure "message_block" packed unaligned dcl 1-54 in procedure "dump_msg" ref 191 flags 12 based structure level 2 in structure "syscon_mseg" packed unaligned dcl 1-25 in procedure "dump_msg" free_chain 11 based fixed bin(17,0) level 2 dcl 1-71 set ref 185* from_source 2 based char(32) level 2 dcl 1-54 ref 199 201 from_stream 12 based char(32) level 2 dcl 1-54 ref 203 205 hcs_$initiate 000022 constant entry external dcl 58 ref 90 highest_quit_bits 000107 automatic fixed bin(24,0) dcl 25 set ref 107* 119 119 i 000103 automatic fixed bin(17,0) dcl 25 set ref 173* ioa_ 000024 constant entry external dcl 58 ref 96 99 101 103 112 115 116 117 119 120 121 136 166 170 177 179 180 181 182 183 184 185 207 216 ipc_el 2 based structure level 2 dcl 1-25 j 000104 automatic fixed bin(17,0) dcl 25 set ref 190* 191 191* k 000105 automatic fixed bin(17,0) dcl 25 set ref 137* 138 138* last_assigned_buffer 20 based fixed bin(17,0) level 2 dcl 1-25 set ref 116* 123 last_msg 6 based fixed bin(17,0) level 2 dcl 1-71 set ref 182* last_pid 4 based bit(36) level 2 dcl 1-71 set ref 180* last_pro 10 based fixed bin(17,0) level 2 dcl 1-71 set ref 184* length 26 based fixed bin(17,0) level 2 in structure "message_block" dcl 1-54 in procedure "dump_msg" set ref 216* 216 216 length builtin function dcl 49 in procedure "dump_msg" ref 112 112 195 list 000227 automatic varying char(64) dcl 41 set ref 106* 108* 110* 110 112 112 112 112 112 189* 191* 191 195 195* 195 195 207* locked_by_pid 40 based bit(36) level 2 dcl 1-25 set ref 96* mescount 41 based fixed bin(17,0) level 2 dcl 1-25 set ref 120* message 44 based structure array level 2 dcl 1-25 set ref 174 message_block based structure level 1 dcl 1-54 message_body 27 based char(132) level 2 dcl 1-54 ref 216 216 messp 000132 automatic pointer dcl 36 set ref 174* 176 177 177 178 180 181 182 183 184 185 191 198 199 201 203 205 207 207 207 207 207 216 216 216 216 216 218 mlock based bit(36) level 2 dcl 1-25 set ref 96* msegp 000134 automatic pointer dcl 36 set ref 90* 91 96 96 99 101 101 103 103 107 108 110 115 116 117 119 119 120 121 123 131 132 133 162 174 n_blocks 000106 automatic fixed bin(17,0) dcl 25 set ref 123* 127 137 next_message 70 based fixed bin(17,0) array level 3 in structure "syscon_mseg" dcl 1-25 in procedure "dump_msg" set ref 162 next_message 24 based fixed bin(17,0) level 2 in structure "message_block" dcl 1-54 in procedure "dump_msg" set ref 207* 218 no_of_streams 21 based fixed bin(17,0) level 2 dcl 1-25 set ref 117* null builtin function dcl 49 ref 91 output_wait 42 based bit(1) level 2 dcl 1-25 set ref 121* proto_el 6 based structure level 2 dcl 1-25 quit_bits 22 based bit(504) level 2 dcl 1-25 set ref 107* 119 119 receiver_woken 12(01) based bit(1) level 3 packed unaligned dcl 1-25 ref 110 rel builtin function dcl 49 ref 177 177 207 207 source_index 22 based fixed bin(17,0) level 2 dcl 1-54 set ref 207* stream_index 23 based fixed bin(17,0) level 2 dcl 1-54 set ref 207* string builtin function dcl 49 ref 191 substr builtin function dcl 49 set ref 112 112 119 119 138 158 160* 191 195 216 216 syscon_mseg based structure level 1 dcl 1-25 temp_source 000120 automatic char(32) unaligned dcl 25 set ref 199* 201* 207* temp_stream 000110 automatic char(32) unaligned dcl 25 set ref 203* 205* 207* test_mode 12 based bit(1) level 3 packed unaligned dcl 1-25 ref 108 this_message 000115 automatic fixed bin(17,0) dcl 148 set ref 155* 157 158 160 162* 162 164* 172* 174 177* 207* 218* time 2 based fixed bin(71,0) level 2 dcl 1-71 set ref 178* time_sent based fixed bin(71,0) level 2 dcl 1-54 set ref 198* unspec builtin function dcl 49 ref 101 101 103 103 199 203 NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. buff_len internal static fixed bin(17,0) initial dcl 1-23 NAMES DECLARED BY EXPLICIT CONTEXT. dump_msg 000344 constant entry external dcl 20 dump_syscon_mseg 000353 constant entry external dcl 20 next_block 002273 constant label dcl 220 ref 186 pb 001525 constant label dcl 172 ref 226 print_block 002277 constant entry internal dcl 224 ref 138 print_chain 001417 constant entry internal dcl 146 ref 131 132 133 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2424 2452 2307 2434 Length 2670 2307 26 202 115 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME dump_msg 248 external procedure is an external procedure. begin block on line 125 190 begin block uses auto adjustable storage. print_chain internal procedure shares stack frame of begin block on line 125. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 125 000100 already_printed begin block on line 125 000114 chainlen print_chain 000115 this_message print_chain dump_msg 000100 argl dump_msg 000101 argno dump_msg 000102 code dump_msg 000103 i dump_msg 000104 j dump_msg 000105 k dump_msg 000106 n_blocks dump_msg 000107 highest_quit_bits dump_msg 000110 temp_stream dump_msg 000120 temp_source dump_msg 000130 argp dump_msg 000132 messp dump_msg 000134 msegp dump_msg 000136 date_string dump_msg 000145 dirname dump_msg 000217 entname dump_msg 000227 list dump_msg THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp alloc_bit_temp enter_begin_block call_ext_out_desc call_ext_out begin_return_mac return_mac alloc_auto_adj shorten_stack ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ cu_$arg_ptr date_time_$hundredths expand_path_ find_bit_$last_on hcs_$initiate ioa_ NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 20 000343 77 000360 78 000362 79 000376 80 000400 81 000426 84 000427 85 000452 86 000454 87 000510 90 000511 91 000555 92 000561 93 000616 96 000617 99 000643 101 000664 103 000713 106 000737 107 000740 108 000756 110 000767 112 001004 115 001044 116 001071 117 001112 119 001136 120 001171 121 001216 123 001237 125 001242 127 001245 129 001255 131 001263 132 001302 133 001322 135 001342 136 001350 137 001364 138 001376 140 001411 143 001414 230 001416 146 001417 154 001433 155 001434 157 001436 158 001440 160 001445 161 001450 162 001451 163 001455 164 001456 165 001457 166 001460 168 001506 170 001511 172 001525 173 001527 174 001540 176 001545 177 001552 178 001603 179 001622 180 001644 181 001671 182 001716 183 001743 184 001770 185 002015 186 002037 189 002040 190 002041 191 002050 193 002072 195 002074 198 002107 199 002124 201 002136 203 002141 205 002151 207 002154 216 002232 218 002266 220 002273 222 002276 224 002277 225 002303 226 002305 231 002306 ----------------------------------------------------------- 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