COMPILATION LISTING OF SEGMENT db_fnp_memory_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/15/82 1617.8 mst Mon 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 11 db_fnp_memory_: proc; 12 13 /* Parameters */ 14 15 dcl arg_corep ptr; /* Address of fnp memory in a segment */ 16 dcl arg_fnp fixed bin; /* The fnp number */ 17 dcl arg_fnp_addr fixed bin; /* The fnp address to access */ 18 dcl arg_fnp_len fixed bin; /* Length of data, in fnp words */ 19 dcl arg_data_ptr ptr; /* Addr where data is to be stored */ 20 dcl arg_code fixed bin (35); 21 dcl arg_caller char (*); /* Name of caller, for command_query_ */ 22 dcl arg_mode fixed bin; /* Options for store call - 23* 0 = just patch, 24* 1 = list changes and patch, 25* 2 = list changes, ask if ok, then patch */ 26 27 /* Automatic */ 28 29 dcl corep ptr; 30 dcl fnp fixed bin; 31 dcl fnp_name char (1); 32 dcl code fixed bin (35); 33 dcl state fixed bin; 34 dcl mode fixed bin; 35 dcl i fixed bin; 36 dcl data_ptr ptr; 37 dcl fnp_addr fixed bin; 38 dcl check_buf (32) bit (18) unal; /* Holds original copy */ 39 dcl answer char (3) var; /* Reply from command_query_ */ 40 dcl fnp_len fixed bin; /* Length of memory being moved */ 41 dcl fnp_mem (fnp_len) bit (18) unal based; /* A piece of fnp memory */ 42 dcl dir char (168); 43 dcl ename char (32); 44 dcl replace_acl bit (1); 45 dcl save_modes bit (36); 46 47 dcl 1 segment_acl (1) aligned, 48 2 access_name char (32), 49 2 modes bit (36), 50 2 zero_pad bit (36), 51 2 status_code fixed bin (35); 52 53 dcl 1 delete_acl (1) aligned, 54 2 access_name char (32), 55 2 status_code fixed bin (35); 56 57 dcl dump_seg (0:32767) bit (18) unal based (corep); /* Declaration of a dump */ 58 59 dcl 1 fnp_info aligned, /* Data structure for dump/patch fnp */ 60 2 fnp_addr fixed bin, 61 2 fnp_len fixed bin, 62 2 data_ptr ptr, 63 2 prev_data_ptr ptr; 64 65 /* Constants */ 66 67 dcl 1 query_info aligned int static options (constant), /* For command_query_ */ 68 2 version fixed bin init (2), 69 2 yes_or_no bit (1) unal init ("1"b), 70 2 supp_name bit (1) unal init ("0"b), 71 2 pad bit (34) unal init ("0"b), 72 2 code1 fixed bin (35) init (0), 73 2 code2 fixed bin (35) init (0); 74 75 /* Internal static */ 76 77 dcl call_type fixed bin int static init (0); /* Says which kind of ring0 call to use */ 78 dcl init_sw bit (1) int static init ("0"b); 79 dcl crmem fixed bin int static; 80 81 /* External stuff */ 82 83 dcl phcs_$tty_order entry (fixed bin, char (*), ptr, fixed bin, fixed bin (35)); 84 dcl hphcs_$tty_order entry (fixed bin, char (*), ptr, fixed bin, fixed bin (35)); 85 dcl phcs_$tty_control entry (char (*), char (*), ptr, fixed bin (35)); 86 dcl hphcs_$tty_control entry (char (*), char (*), ptr, fixed bin (35)); 87 dcl ioa_ entry options (variable); 88 dcl sub_err_ entry options (variable); 89 dcl command_query_ entry options (variable); 90 dcl hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), fixed bin (35)); 91 dcl hcs_$list_acl entry (char (*), char (*), ptr, ptr, ptr, fixed bin, fixed bin (35)); 92 dcl hcs_$add_acl_entries entry (char (*), char (*), ptr, fixed bin, fixed bin (35)); 93 dcl hcs_$delete_acl_entries entry (char (*), char (*), ptr, fixed bin, fixed bin (35)); 94 dcl get_group_id_$tag_star entry returns (char (32)); 95 dcl db_fnp_sym_util_$get_value entry (char (*)) returns (fixed bin); 96 dcl get_fnp_name_ entry (fixed bin) returns (char (32)); 97 98 dcl error_table_$bad_arg ext fixed bin (35); 99 dcl error_table_$unimplemented_version ext fixed bin (35); 100 dcl error_table_$moderr ext fixed bin (35); 101 dcl error_table_$dev_offset_out_of_bounds ext fixed bin (35); 102 103 dcl linkage_error condition; 104 dcl no_write_permission condition; 105 106 dcl (addr, min, null, substr) builtin; 107 108 /* Entry to fetch fnp memory */ 109 110 fetch: entry (arg_corep, arg_fnp, arg_fnp_addr, arg_fnp_len, arg_data_ptr, arg_code); 111 112 corep = arg_corep; /* Get ptr to memory image (if in segment) */ 113 fnp_addr = arg_fnp_addr; 114 fnp_len = arg_fnp_len; 115 116 if corep = null then do; /* Dumping a real fnp */ 117 fnp = arg_fnp; 118 fnp_name = get_fnp_name_ (fnp); 119 fnp_info.fnp_addr = fnp_addr; 120 fnp_info.fnp_len = arg_fnp_len; 121 fnp_info.data_ptr = arg_data_ptr; 122 fnp_info.prev_data_ptr = null; 123 do while (fnp_len > 0); 124 fnp_info.fnp_len = min (fnp_len, 64); 125 retry_dump_call: 126 if call_type = 0 then do; /* Haven't established which call yet */ 127 on linkage_error go to call_1_failed; 128 call phcs_$tty_order (fnp, "dump_fnp", addr (fnp_info), state, code); 129 revert linkage_error; /* It worked */ 130 call_type = 1; 131 go to check_fetch_code; 132 call_1_failed: on linkage_error go to call_2_failed; 133 call phcs_$tty_control (fnp_name, "dump_fnp", addr (fnp_info), code); 134 revert linkage_error; 135 call_type = 2; 136 go to check_fetch_code; 137 call_2_failed: revert linkage_error; 138 call sub_err_ (0, "db_fnp_memory_", "h", null (), (0), 139 "No access to phcs_ gate; unable to read FNP memory."); 140 go to retry_dump_call; 141 end; 142 else if call_type = 1 then call phcs_$tty_order (fnp, "dump_fnp", addr (fnp_info), state, code); 143 else call phcs_$tty_control (fnp_name, "dump_fnp", addr (fnp_info), code); 144 check_fetch_code: 145 if code ^= 0 then go to fetch_return; 146 fnp_info.fnp_addr = fnp_info.fnp_addr + fnp_info.fnp_len; /* Check next address */ 147 fnp_info.data_ptr = addr (fnp_info.data_ptr -> fnp_mem (fnp_info.fnp_len + 1)); 148 fnp_len = fnp_len - fnp_info.fnp_len; 149 end; 150 end; 151 else do; /* Dumping from a segment */ 152 call check_bounds; 153 if code ^= 0 then go to fetch_return; 154 arg_data_ptr -> fnp_mem = addr (dump_seg (arg_fnp_addr)) -> fnp_mem; 155 code = 0; 156 end; 157 158 fetch_return: 159 arg_code = code; 160 return; 161 162 /* Entry to store into FNP memory */ 163 164 store: entry (arg_corep, arg_fnp, arg_fnp_addr, arg_fnp_len, arg_data_ptr, arg_caller, arg_mode, arg_code); 165 166 167 corep = arg_corep; 168 fnp = arg_fnp; 169 fnp_addr = arg_fnp_addr; 170 fnp_len = arg_fnp_len; 171 mode = arg_mode; 172 data_ptr = arg_data_ptr; 173 174 if fnp_len < 1 | fnp_len > 32 then do; 175 code = error_table_$bad_arg; 176 go to store_return; 177 end; 178 179 call fetch (corep, fnp, fnp_addr, fnp_len, addr (check_buf), code); /* Get old values */ 180 if code ^= 0 then go to store_return; 181 182 if mode ^= 0 then do; /* If reporting needed */ 183 do i = 1 to fnp_len; 184 call ioa_ ("^6w ^.3b to ^.3b", fnp_addr + i - 1, 185 check_buf (i), data_ptr -> fnp_mem (i)); 186 end; 187 if mode = 2 then do; /* Must ask for verification */ 188 call command_query_ (addr (query_info), answer, arg_caller, "Correct?"); 189 if answer ^= "yes" then do; 190 code = 0; 191 go to store_return; 192 end; 193 end; 194 end; 195 196 if corep ^= null then do; /* Patching a segment */ 197 on no_write_permission go to force_access; 198 addr (dump_seg (fnp_addr)) -> fnp_mem = data_ptr -> fnp_mem; 199 revert no_write_permission; 200 code = 0; 201 go to store_return; 202 203 force_access: revert no_write_permission; 204 call hcs_$fs_get_path_name (corep, dir, (0), ename, code); /* Get seg name, needed for acl primitives */ 205 if code ^= 0 then go to store_return; 206 segment_acl.access_name (1) = get_group_id_$tag_star (); /* Get my current acl entry */ 207 segment_acl.zero_pad (1) = "0"b; 208 call hcs_$list_acl (dir, ename, null (), (null ()), addr (segment_acl), (1), code); 209 if code ^= 0 then go to store_return; 210 if segment_acl.status_code (1) = 0 then do; /* I did have an entry */ 211 save_modes = segment_acl.modes (1); /* Save them */ 212 replace_acl = "1"b; /* Remember to put them back */ 213 end; 214 else replace_acl = "0"b; /* No acl to replace */ 215 segment_acl.modes (1) = "101"b; /* Give rw access to me */ 216 segment_acl.zero_pad (1) = "0"b; 217 call hcs_$add_acl_entries (dir, ename, addr (segment_acl), 1, code); 218 if code ^= 0 then go to store_return; 219 on no_write_permission begin; /* Ready to begin, but be careful */ 220 code = error_table_$moderr; 221 go to cleanup_acl; 222 end; 223 224 addr (dump_seg (fnp_addr)) -> fnp_mem = data_ptr -> fnp_mem; /* Try again */ 225 code = 0; /* It worked */ 226 cleanup_acl: revert no_write_permission; 227 if replace_acl then do; /* Put back old access */ 228 segment_acl.modes (1) = save_modes; 229 segment_acl.zero_pad (1) = "0"b; 230 call hcs_$add_acl_entries (dir, ename, addr (segment_acl), 1, (0)); 231 end; 232 else do; 233 delete_acl.access_name (1) = segment_acl.access_name (1); 234 call hcs_$delete_acl_entries (dir, ename, addr (delete_acl), 1, (0)); 235 end; 236 end; 237 238 else do; /* Patching a real FNP */ 239 fnp_name = get_fnp_name_ (fnp); 240 fnp_info.fnp_addr = fnp_addr; 241 fnp_info.fnp_len = fnp_len; 242 fnp_info.data_ptr = data_ptr; 243 fnp_info.prev_data_ptr = addr (check_buf); 244 if call_type = 1 then call hphcs_$tty_order (fnp, "patch_fnp", addr (fnp_info), state, code); 245 else if call_type = 2 then call hphcs_$tty_control (fnp_name, "patch_fnp", addr (fnp_info), code); 246 else code = error_table_$unimplemented_version; /* Can't happen */ 247 end; 248 249 store_return: arg_code = code; 250 return; 251 252 253 /* Internal procedure to check that an address and length is valid. This is only used for accesses to segments */ 254 255 check_bounds: proc; 256 257 dcl n fixed bin (18); 258 259 if ^init_sw then do; 260 crmem = db_fnp_sym_util_$get_value (".crmem"); 261 init_sw = "1"b; 262 end; 263 264 if fnp_addr < 0 | fnp_len <= 0 then do; 265 code = error_table_$bad_arg; 266 return; 267 end; 268 269 n = bin (dump_seg (crmem), 18); 270 if n < 32767 | mod (n+1, 32768) ^= 0 271 then n = 262143; /* Assume 256k for clobbered seg */ 272 273 if fnp_addr > n | (fnp_addr + fnp_len - 1) > n then do; 274 code = error_table_$dev_offset_out_of_bounds; 275 return; 276 end; 277 278 code = 0; 279 return; 280 281 end check_bounds; 282 283 end db_fnp_memory_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/15/82 1449.4 db_fnp_memory_.pl1 >dumps>old>recomp>db_fnp_memory_.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. access_name 000236 automatic char(32) array level 2 in structure "delete_acl" dcl 53 in procedure "db_fnp_memory_" set ref 233* access_name 000223 automatic char(32) array level 2 in structure "segment_acl" dcl 47 in procedure "db_fnp_memory_" set ref 206* 233 addr builtin function dcl 106 ref 128 128 133 133 142 142 143 143 147 154 179 179 188 188 198 208 208 217 217 224 230 230 234 234 243 244 244 245 245 answer 000134 automatic varying char(3) dcl 39 set ref 188* 189 arg_caller parameter char unaligned dcl 21 set ref 164 188* arg_code parameter fixed bin(35,0) dcl 20 set ref 110 158* 164 249* arg_corep parameter pointer dcl 15 ref 110 112 164 167 arg_data_ptr parameter pointer dcl 19 ref 110 121 154 164 172 arg_fnp parameter fixed bin(17,0) dcl 16 ref 110 117 164 168 arg_fnp_addr parameter fixed bin(17,0) dcl 17 ref 110 113 154 164 169 arg_fnp_len parameter fixed bin(17,0) dcl 18 ref 110 114 120 164 170 arg_mode parameter fixed bin(17,0) dcl 22 ref 164 171 call_type 000010 internal static fixed bin(17,0) initial dcl 77 set ref 125 130* 135* 142 244 245 check_buf 000113 automatic bit(18) array unaligned dcl 38 set ref 179 179 184* 243 code 000104 automatic fixed bin(35,0) dcl 32 set ref 128* 133* 142* 143* 144 153 155* 158 175* 179* 180 190* 200* 204* 205 208* 209 217* 218 220* 225* 244* 245* 246* 249 265* 274* 278* command_query_ 000030 constant entry external dcl 89 ref 188 corep 000100 automatic pointer dcl 29 set ref 112* 116 154 167* 179* 196 198 204* 224 269 crmem 000012 internal static fixed bin(17,0) dcl 79 set ref 260* 269 data_ptr 2 000250 automatic pointer level 2 in structure "fnp_info" dcl 59 in procedure "db_fnp_memory_" set ref 121* 147* 147 242* data_ptr 000110 automatic pointer dcl 36 in procedure "db_fnp_memory_" set ref 172* 184 198 224 242 db_fnp_sym_util_$get_value 000044 constant entry external dcl 95 ref 260 delete_acl 000236 automatic structure array level 1 dcl 53 set ref 234 234 dir 000137 automatic char(168) unaligned dcl 42 set ref 204* 208* 217* 230* 234* dump_seg based bit(18) array unaligned dcl 57 set ref 154 198 224 269 ename 000211 automatic char(32) unaligned dcl 43 set ref 204* 208* 217* 230* 234* error_table_$bad_arg 000050 external static fixed bin(35,0) dcl 98 ref 175 265 error_table_$dev_offset_out_of_bounds 000056 external static fixed bin(35,0) dcl 101 ref 274 error_table_$moderr 000054 external static fixed bin(35,0) dcl 100 ref 220 error_table_$unimplemented_version 000052 external static fixed bin(35,0) dcl 99 ref 246 fnp 000102 automatic fixed bin(17,0) dcl 30 set ref 117* 118* 128* 142* 168* 179* 239* 244* fnp_addr 000112 automatic fixed bin(17,0) dcl 37 in procedure "db_fnp_memory_" set ref 113* 119 169* 179* 184 198 224 240 264 273 273 fnp_addr 000250 automatic fixed bin(17,0) level 2 in structure "fnp_info" dcl 59 in procedure "db_fnp_memory_" set ref 119* 146* 146 240* fnp_info 000250 automatic structure level 1 dcl 59 set ref 128 128 133 133 142 142 143 143 244 244 245 245 fnp_len 000136 automatic fixed bin(17,0) dcl 40 in procedure "db_fnp_memory_" set ref 114* 123 124 148* 148 154 154 154 170* 174 174 179* 183 198 198 198 224 224 224 241 264 273 fnp_len 1 000250 automatic fixed bin(17,0) level 2 in structure "fnp_info" dcl 59 in procedure "db_fnp_memory_" set ref 120* 124* 146 147 148 241* fnp_mem based bit(18) array unaligned dcl 41 set ref 147 154* 154 184* 198* 198 224* 224 fnp_name 000103 automatic char(1) unaligned dcl 31 set ref 118* 133* 143* 239* 245* get_fnp_name_ 000046 constant entry external dcl 96 ref 118 239 get_group_id_$tag_star 000042 constant entry external dcl 94 ref 206 hcs_$add_acl_entries 000036 constant entry external dcl 92 ref 217 230 hcs_$delete_acl_entries 000040 constant entry external dcl 93 ref 234 hcs_$fs_get_path_name 000032 constant entry external dcl 90 ref 204 hcs_$list_acl 000034 constant entry external dcl 91 ref 208 hphcs_$tty_control 000022 constant entry external dcl 86 ref 245 hphcs_$tty_order 000016 constant entry external dcl 84 ref 244 i 000107 automatic fixed bin(17,0) dcl 35 set ref 183* 184 184 184* init_sw 000011 internal static bit(1) initial unaligned dcl 78 set ref 259 261* ioa_ 000024 constant entry external dcl 87 ref 184 linkage_error 000256 stack reference condition dcl 103 ref 127 129 132 134 137 min builtin function dcl 106 ref 124 mode 000106 automatic fixed bin(17,0) dcl 34 set ref 171* 182 187 modes 10 000223 automatic bit(36) array level 2 dcl 47 set ref 211 215* 228* n 000304 automatic fixed bin(18,0) dcl 257 set ref 269* 270 270 270* 273 273 no_write_permission 000264 stack reference condition dcl 104 ref 197 199 203 219 226 null builtin function dcl 106 ref 116 122 138 138 196 208 208 208 phcs_$tty_control 000020 constant entry external dcl 85 ref 133 143 phcs_$tty_order 000014 constant entry external dcl 83 ref 128 142 prev_data_ptr 4 000250 automatic pointer level 2 dcl 59 set ref 122* 243* query_info 000000 constant structure level 1 dcl 67 set ref 188 188 replace_acl 000221 automatic bit(1) unaligned dcl 44 set ref 212* 214* 227 save_modes 000222 automatic bit(36) unaligned dcl 45 set ref 211* 228 segment_acl 000223 automatic structure array level 1 dcl 47 set ref 208 208 217 217 230 230 state 000105 automatic fixed bin(17,0) dcl 33 set ref 128* 142* 244* status_code 12 000223 automatic fixed bin(35,0) array level 2 dcl 47 set ref 210 sub_err_ 000026 constant entry external dcl 88 ref 138 zero_pad 11 000223 automatic bit(36) array level 2 dcl 47 set ref 207* 216* 229* NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. substr builtin function dcl 106 NAMES DECLARED BY EXPLICIT CONTEXT. call_1_failed 000263 constant label dcl 132 ref 127 call_2_failed 000340 constant label dcl 137 ref 132 check_bounds 001574 constant entry internal dcl 255 ref 152 check_fetch_code 000503 constant label dcl 144 ref 131 136 cleanup_acl 001336 constant label dcl 226 ref 221 db_fnp_memory_ 000103 constant entry external dcl 11 fetch 000117 constant entry external dcl 110 ref 179 fetch_return 000555 constant label dcl 158 ref 144 153 force_access 001071 constant label dcl 203 ref 197 retry_dump_call 000200 constant label dcl 125 ref 140 store 000567 constant entry external dcl 164 store_return 001571 constant label dcl 249 ref 176 180 191 201 205 209 218 NAMES DECLARED BY CONTEXT OR IMPLICATION. bin builtin function ref 269 mod builtin function ref 270 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2172 2252 1666 2202 Length 2470 1666 60 202 303 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME db_fnp_memory_ 314 external procedure is an external procedure. on unit on line 127 64 on unit on unit on line 132 64 on unit on unit on line 197 64 on unit on unit on line 219 64 on unit check_bounds internal procedure shares stack frame of external procedure db_fnp_memory_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 call_type db_fnp_memory_ 000011 init_sw db_fnp_memory_ 000012 crmem db_fnp_memory_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME db_fnp_memory_ 000100 corep db_fnp_memory_ 000102 fnp db_fnp_memory_ 000103 fnp_name db_fnp_memory_ 000104 code db_fnp_memory_ 000105 state db_fnp_memory_ 000106 mode db_fnp_memory_ 000107 i db_fnp_memory_ 000110 data_ptr db_fnp_memory_ 000112 fnp_addr db_fnp_memory_ 000113 check_buf db_fnp_memory_ 000134 answer db_fnp_memory_ 000136 fnp_len db_fnp_memory_ 000137 dir db_fnp_memory_ 000211 ename db_fnp_memory_ 000221 replace_acl db_fnp_memory_ 000222 save_modes db_fnp_memory_ 000223 segment_acl db_fnp_memory_ 000236 delete_acl db_fnp_memory_ 000250 fnp_info db_fnp_memory_ 000304 n check_bounds THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_temp call_ext_in call_ext_out_desc call_ext_out return tra_ext mod_fx1 enable shorten_stack ext_entry ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. command_query_ db_fnp_sym_util_$get_value get_fnp_name_ get_group_id_$tag_star hcs_$add_acl_entries hcs_$delete_acl_entries hcs_$fs_get_path_name hcs_$list_acl hphcs_$tty_control hphcs_$tty_order ioa_ phcs_$tty_control phcs_$tty_order sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$dev_offset_out_of_bounds error_table_$moderr error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000102 110 000110 112 000127 113 000133 114 000135 116 000137 117 000143 118 000145 119 000160 120 000162 121 000165 122 000170 123 000172 124 000174 125 000200 127 000203 128 000222 129 000256 130 000257 131 000262 132 000263 133 000302 134 000333 135 000334 136 000337 137 000340 138 000341 140 000414 142 000415 143 000453 144 000503 146 000505 147 000507 148 000514 149 000516 150 000517 152 000520 153 000521 154 000523 155 000552 156 000554 158 000555 160 000557 164 000560 167 000605 168 000611 169 000613 170 000615 171 000617 172 000621 174 000624 175 000631 176 000634 179 000635 180 000657 182 000661 183 000663 184 000672 186 000744 187 000746 188 000751 189 001004 190 001011 191 001012 196 001013 197 001017 198 001036 199 001065 200 001067 201 001070 203 001071 204 001072 205 001124 206 001126 207 001140 208 001141 209 001207 210 001211 211 001213 212 001215 213 001217 214 001220 215 001221 216 001223 217 001224 218 001261 219 001263 220 001277 221 001302 224 001305 225 001334 226 001336 227 001337 228 001341 229 001343 230 001344 231 001402 233 001403 234 001406 236 001444 239 001445 240 001460 241 001462 242 001464 243 001466 244 001470 245 001532 246 001567 249 001571 250 001573 255 001574 259 001575 260 001600 261 001616 264 001621 265 001625 266 001627 269 001630 270 001641 273 001651 274 001660 275 001662 278 001663 279 001664 ----------------------------------------------------------- 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