COMPILATION LISTING OF SEGMENT link Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 02/06/84 1010.8 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 link: lk: proc; 7 8 /* The link command: link target1 path1 ... targetN {pathN} */ 9 /* Written 12/05/80 S. Herbst */ 10 /* Added -chase, -check, -copy_names, -name, reject -foo and blank names 06/30/82 S. Herbst */ 11 /* Fixed to print usage message if no pathnames specified 04/04/83 S. Herbst */ 12 /* Fixed not to try to -copy_names if link cannot be created 12/12/83 S. Herbst */ 13 14 /* Constants */ 15 16 dcl WHITE_SPACE char (5) int static options (constant) init (" 17 "); /* SP HT VT NL FF */ 18 dcl ALL_ENTRIES fixed bin (2) int static options (constant) init (3); 19 dcl (CHASE init (1), NO_CHASE init (0)) fixed (1) int static options (constant); 20 dcl LINK_TYPE fixed (2) int static options (constant) init (0); 21 22 /* Based */ 23 24 dcl arg char (arg_len) based (arg_ptr); 25 26 /* Automatic */ 27 28 dcl (dn, first_arg, target_dn) char (168); 29 dcl (en, target_en) char (32); 30 31 dcl (chase_sw, check_sw, copy_names_sw, errsw, got_path_sw, name_sw, second_arg_sw, star_sw) bit (1); 32 33 dcl arg_ptr ptr; 34 35 dcl (arg_count, arg_len, i) fixed; 36 dcl type fixed bin (2); 37 dcl code fixed bin (35); 38 39 dcl error_table_$action_not_performed fixed (35) ext; 40 dcl error_table_$badopt fixed (35) ext; 41 dcl error_table_$namedup fixed (35) ext; 42 dcl error_table_$no_s_permission fixed (35) ext; 43 dcl error_table_$noentry fixed (35) ext; 44 dcl error_table_$segnamedup fixed (35) ext; 45 46 dcl check_star_name_$entry entry (char (*), fixed (35)); 47 dcl (com_err_, com_err_$suppress_name) entry options (variable); 48 dcl copy_names_ entry (char (*), char (*), char (*), char (*), char (*), bit (1), fixed (35)); 49 dcl cu_$arg_count entry (fixed, fixed (35)); 50 dcl cu_$arg_ptr entry (fixed, ptr, fixed, fixed (35)); 51 dcl expand_pathname_ entry (char (*), char (*), char (*), fixed (35)); 52 dcl get_equal_name_ entry (char (*), char (*), char (*), fixed (35)); 53 dcl get_system_free_area_ entry returns (ptr); 54 dcl get_wdir_ entry returns (char (168)); 55 dcl hcs_$append_link entry (char (*), char (*), char (*), fixed (35)); 56 dcl hcs_$get_link_target entry (char (*), char (*), char (*), char (*), fixed (35)); 57 dcl hcs_$star_ entry (char (*), char (*), fixed (2), ptr, fixed, ptr, ptr, fixed (35)); 58 dcl hcs_$status_minf entry (char (*), char (*), fixed (1), fixed (2), fixed (24), fixed (35)); 59 dcl nd_handler_ entry (char (*), char (*), char (*), fixed (35)); 60 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 61 62 dcl (fixed, null, search, verify) builtin; 63 64 dcl cleanup condition; 65 66 call cu_$arg_count (arg_count, code); 67 if code ^= 0 then do; 68 call com_err_ (code, "link"); 69 return; 70 end; 71 72 chase_sw, check_sw, copy_names_sw, got_path_sw = "0"b; 73 74 do i = 1 to arg_count; 75 call cu_$arg_ptr (i, arg_ptr, arg_len, code); 76 77 if verify (arg, WHITE_SPACE) = 0 then do; /* blank arg */ 78 call com_err_ (0, "link", "Invalid name ""^a""", arg); 79 return; 80 end; 81 82 if substr (arg, 1, 1) = "-" then 83 if arg = "-chase" then chase_sw = "1"b; 84 else if arg = "-no_chase" then chase_sw = "0"b; 85 else if arg = "-check" | arg = "-ck" then check_sw = "1"b; 86 else if arg = "-no_check" | arg = "-nck" then check_sw = "0"b; 87 else if arg = "-copy_names" | arg = "-cpnm" then copy_names_sw = "1"b; 88 else if arg = "-no_copy_names" | arg = "-ncpnm" then copy_names_sw = "1"b; 89 else if arg = "-name" | arg = "-nm" then i = i + 1; 90 else do; 91 call com_err_ (error_table_$badopt, "link", "^a", arg); 92 return; 93 end; 94 95 else got_path_sw = "1"b; 96 end; 97 98 if ^got_path_sw then do; 99 call com_err_$suppress_name (0, "link", 100 "Usage: link target_path1 link_path1 ... target_pathN {link_pathN} {-control_args}"); 101 return; 102 end; 103 104 second_arg_sw = "0"b; /* ON if already got first arg of pair */ 105 name_sw = "0"b; /* ON if -name just encountered */ 106 107 do i = 1 to arg_count; 108 109 call cu_$arg_ptr (i, arg_ptr, arg_len, code); 110 111 if substr (arg, 1, 1) = "-" then 112 if arg = "-name" | arg = "-nm" then do; 113 i = i + 1; 114 if i > arg_count then do; 115 call com_err_ (0, "link", "No value specified for -name"); 116 return; 117 end; 118 name_sw = "1"b; 119 call cu_$arg_ptr (i, arg_ptr, arg_len, code); 120 if second_arg_sw then go to SECOND_ARG; 121 else do; 122 call com_err_ (0, "link", "-name not allowed before target path."); 123 return; 124 end; 125 end; 126 else; 127 128 else if ^second_arg_sw then do; 129 FIRST_ARG: 130 second_arg_sw = "1"b; /* for next time through */ 131 first_arg = arg; 132 133 call expand_pathname_ (arg, target_dn, target_en, code); 134 if code ^= 0 then do; 135 PATH_ERR: call com_err_ (code, "link", "^a", arg); 136 return; 137 end; 138 139 call check_star_name_$entry (target_en, code); 140 if code ^= 0 then 141 if code = 1 | code = 2 then star_sw = "1"b; 142 else do; 143 call com_err_ (code, "link", "^a", target_en); 144 return; 145 end; 146 else star_sw = "0"b; 147 end; 148 149 else do; 150 151 name_sw = "0"b; 152 SECOND_ARG: 153 second_arg_sw = "0"b; /* for next time through */ 154 155 if name_sw then do; 156 name_sw = "0"b; 157 dn = get_wdir_ (); 158 en = arg; 159 end; 160 else do; 161 call expand_pathname_ (arg, dn, en, code); 162 if code ^= 0 then go to PATH_ERR; 163 164 call check_star_name_$entry (en, code); 165 if code ^= 0 then do; 166 if code = 1 | code = 2 then call com_err_ (0, "link", 167 "Stars not allowed in link pathname. ^a", arg); 168 else call com_err_ (code, "link", "^a", en); 169 return; 170 end; 171 end; 172 173 if star_sw then call link_stars (dn, en, target_dn, target_en); 174 175 else call link_one (dn, en, target_dn, target_en); 176 end; 177 end; 178 179 if second_arg_sw then do; /* second arg in pair missing */ 180 if search (first_arg, "<>") = 0 then do; /* first is in wdir */ 181 call com_err_ (0, "link", "Link points to itself; not created. ^a", 182 pathname_ (target_dn, target_en)); 183 return; 184 end; 185 186 dn = get_wdir_ (); 187 en = "==="; 188 189 if star_sw then call link_stars (dn, en, target_dn, target_en); 190 191 else call link_one (dn, en, target_dn, target_en); 192 end; 193 194 RETURN: return; 195 196 link_one: proc (P_dn, P_en, P_target_dn, P_target_en); 197 198 dcl (P_dn, P_en, P_target_dn, P_target_en) char (*); 199 dcl (target_dn, target_path, ultimate_dn) char (168); 200 dcl (en, target_en, ultimate_en) char (32); 201 202 target_dn = P_target_dn; 203 target_en = P_target_en; 204 target_path = pathname_ (target_dn, target_en); 205 206 call get_equal_name_ (target_en, P_en, en, code); 207 if code ^= 0 then do; 208 call com_err_ (code, "link", "^a for ^a", en, target_en); 209 return; 210 end; 211 212 if check_sw then do; 213 call hcs_$status_minf (target_dn, target_en, CHASE, type, 0, code); 214 if code ^= 0 & code ^= error_table_$no_s_permission then do; 215 if code = error_table_$noentry then do; 216 call hcs_$status_minf (target_dn, target_en, NO_CHASE, 0, 0, code); 217 if code ^= error_table_$noentry then do; 218 call com_err_ (0, "link", "No ultimate target for intended target ^a", 219 pathname_ (target_dn, target_en)); 220 go to RETURN; 221 end; 222 end; 223 call com_err_ (code, "link", "Link target ^a", pathname_ (target_dn, target_en)); 224 go to RETURN; 225 end; 226 end; 227 228 if chase_sw then do; 229 call hcs_$get_link_target (target_dn, target_en, ultimate_dn, ultimate_en, code); 230 if ultimate_dn ^= "" then do; 231 target_dn = ultimate_dn; 232 target_en = ultimate_en; 233 target_path = pathname_ (target_dn, target_en); 234 end; 235 end; 236 237 LINK: call hcs_$append_link (P_dn, en, target_path, code); 238 if code ^= 0 then 239 if code = error_table_$namedup then do; /* ask whether to replace existing link */ 240 call nd_handler_ ("link", P_dn, en, code); 241 if code = 0 then go to LINK; 242 else if code = error_table_$action_not_performed then return; 243 else go to RETURN; /* an error occurred */ 244 end; 245 else call com_err_ (code, "link", "^a^[>^]^a", dn, dn ^= ">", en); 246 247 else if copy_names_sw then do; 248 call copy_names_ (target_dn, target_en, P_dn, en, "link -copy_names", errsw, code); 249 if code ^= 0 & code ^= error_table_$namedup & code ^= error_table_$segnamedup then 250 if errsw then call com_err_ (code, "link", "^a", pathname_ (P_dn, en)); 251 else call com_err_ (code, "link", "^a", pathname_ (target_dn, target_en)); 252 end; 253 254 end link_one; 255 256 link_stars: proc (P_dn, P_en, P_target_dn, P_target_en); 257 258 dcl (P_dn, P_en, P_target_dn, P_target_en) char (*); 259 dcl 1 entries (entry_count) based (entries_ptr), 260 2 pad bit (18) unaligned, 261 2 nindex bit (18) unaligned; 262 dcl names (999) char (32) aligned based (names_ptr); 263 dcl target_en char (32); 264 dcl area area based (area_ptr); 265 dcl (area_ptr, entries_ptr, names_ptr) ptr; 266 dcl (entry_count, j) fixed bin; 267 268 area_ptr = get_system_free_area_ (); 269 entries_ptr, names_ptr = null; 270 271 on cleanup call star_cleanup; 272 273 call hcs_$star_ (P_target_dn, P_target_en, ALL_ENTRIES, area_ptr, entry_count, entries_ptr, names_ptr, code); 274 if code ^= 0 then do; 275 call com_err_ (code, "link", "^a", pathname_ (P_target_dn, P_target_en)); 276 return; 277 end; 278 279 do j = 1 to entry_count; 280 281 target_en = names_ptr -> names (fixed (entries_ptr -> entries (j).nindex)); 282 283 call link_one (P_dn, P_en, P_target_dn, target_en); 284 end; 285 286 call star_cleanup; 287 288 return; 289 290 star_cleanup: proc; 291 292 if entries_ptr ^= null then free entries in (area); 293 if names_ptr ^= null then free names in (area); 294 295 end star_cleanup; 296 297 end link_stars; 298 299 end link; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/06/84 1008.2 link.pl1 >spec>on>6613>link.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. ALL_ENTRIES 000014 constant fixed bin(2,0) initial dcl 18 set ref 273* CHASE 000034 constant fixed bin(1,0) initial dcl 19 set ref 213* NO_CHASE 000040 constant fixed bin(1,0) initial dcl 19 set ref 216* P_dn parameter char unaligned dcl 258 in procedure "link_stars" set ref 256 283* P_dn parameter char unaligned dcl 198 in procedure "link_one" set ref 196 237* 240* 248* 249* 249* P_en parameter char unaligned dcl 258 in procedure "link_stars" set ref 256 283* P_en parameter char unaligned dcl 198 in procedure "link_one" set ref 196 206* P_target_dn parameter char unaligned dcl 198 in procedure "link_one" ref 196 202 P_target_dn parameter char unaligned dcl 258 in procedure "link_stars" set ref 256 273* 275* 275* 283* P_target_en parameter char unaligned dcl 258 in procedure "link_stars" set ref 256 273* 275* 275* P_target_en parameter char unaligned dcl 198 in procedure "link_one" ref 196 203 WHITE_SPACE 000000 constant char(5) initial unaligned dcl 16 ref 77 area based area(1024) dcl 264 ref 292 293 area_ptr 000110 automatic pointer dcl 265 set ref 268* 273* 292 293 arg based char unaligned dcl 24 set ref 77 78* 82 82 84 85 85 86 86 87 87 88 88 89 89 91* 111 111 111 131 133* 135* 158 161* 166* arg_count 000330 automatic fixed bin(17,0) dcl 35 set ref 66* 74 107 114 arg_len 000331 automatic fixed bin(17,0) dcl 35 set ref 75* 77 78 78 82 82 84 85 85 86 86 87 87 88 88 89 89 91 91 109* 111 111 111 119* 131 133 133 135 135 158 161 161 166 166 arg_ptr 000326 automatic pointer dcl 33 set ref 75* 77 78 82 82 84 85 85 86 86 87 87 88 88 89 89 91 109* 111 111 111 119* 131 133 135 158 161 166 chase_sw 000316 automatic bit(1) unaligned dcl 31 set ref 72* 82* 84* 228 check_star_name_$entry 000024 constant entry external dcl 46 ref 139 164 check_sw 000317 automatic bit(1) unaligned dcl 31 set ref 72* 85* 86* 212 cleanup 000000 stack reference condition dcl 64 ref 271 code 000334 automatic fixed bin(35,0) dcl 37 set ref 66* 67 68* 75* 109* 119* 133* 134 135* 139* 140 140 140 143* 161* 162 164* 165 166 166 168* 206* 207 208* 213* 214 214 215 216* 217 223* 229* 237* 238 238 240* 241 242 245* 248* 249 249 249 249* 251* 273* 274 275* com_err_ 000026 constant entry external dcl 47 ref 68 78 91 115 122 135 143 166 168 181 208 218 223 245 249 251 275 com_err_$suppress_name 000030 constant entry external dcl 47 ref 99 copy_names_ 000032 constant entry external dcl 48 ref 248 copy_names_sw 000320 automatic bit(1) unaligned dcl 31 set ref 72* 87* 88* 247 cu_$arg_count 000034 constant entry external dcl 49 ref 66 cu_$arg_ptr 000036 constant entry external dcl 50 ref 75 109 119 dn 000100 automatic char(168) unaligned dcl 28 set ref 157* 161* 173* 175* 186* 189* 191* 245* 245 en 000276 automatic char(32) unaligned dcl 200 in procedure "link_one" set ref 206* 208* 237* 240* 245* 248* 249* 249* en 000276 automatic char(32) unaligned dcl 29 in procedure "lk" set ref 158* 161* 164* 168* 173* 175* 187* 189* 191* entries based structure array level 1 packed unaligned dcl 259 ref 292 entries_ptr 000112 automatic pointer dcl 265 set ref 269* 273* 281 292 292 entry_count 000116 automatic fixed bin(17,0) dcl 266 set ref 273* 279 292 error_table_$action_not_performed 000010 external static fixed bin(35,0) dcl 39 ref 242 error_table_$badopt 000012 external static fixed bin(35,0) dcl 40 set ref 91* error_table_$namedup 000014 external static fixed bin(35,0) dcl 41 ref 238 249 error_table_$no_s_permission 000016 external static fixed bin(35,0) dcl 42 ref 214 error_table_$noentry 000020 external static fixed bin(35,0) dcl 43 ref 215 217 error_table_$segnamedup 000022 external static fixed bin(35,0) dcl 44 ref 249 errsw 000321 automatic bit(1) unaligned dcl 31 set ref 248* 249 expand_pathname_ 000040 constant entry external dcl 51 ref 133 161 first_arg 000152 automatic char(168) unaligned dcl 28 set ref 131* 180 fixed builtin function dcl 62 ref 281 get_equal_name_ 000042 constant entry external dcl 52 ref 206 get_system_free_area_ 000044 constant entry external dcl 53 ref 268 get_wdir_ 000046 constant entry external dcl 54 ref 157 186 got_path_sw 000322 automatic bit(1) unaligned dcl 31 set ref 72* 95* 98 hcs_$append_link 000050 constant entry external dcl 55 ref 237 hcs_$get_link_target 000052 constant entry external dcl 56 ref 229 hcs_$star_ 000054 constant entry external dcl 57 ref 273 hcs_$status_minf 000056 constant entry external dcl 58 ref 213 216 i 000332 automatic fixed bin(17,0) dcl 35 set ref 74* 75* 89* 89* 107* 109* 113* 113 114 119* j 000117 automatic fixed bin(17,0) dcl 266 set ref 279* 281* name_sw 000323 automatic bit(1) unaligned dcl 31 set ref 105* 118* 151* 155 156* names based char(32) array dcl 262 ref 281 293 names_ptr 000114 automatic pointer dcl 265 set ref 269* 273* 281 293 293 nd_handler_ 000060 constant entry external dcl 59 ref 240 nindex 0(18) based bit(18) array level 2 packed unaligned dcl 259 ref 281 null builtin function dcl 62 ref 269 292 293 pathname_ 000062 constant entry external dcl 60 ref 181 181 204 218 218 223 223 233 249 249 251 251 275 275 search builtin function dcl 62 ref 180 second_arg_sw 000324 automatic bit(1) unaligned dcl 31 set ref 104* 120 128 129* 152* 179 star_sw 000325 automatic bit(1) unaligned dcl 31 set ref 140* 146* 173 189 target_dn 000224 automatic char(168) unaligned dcl 28 in procedure "lk" set ref 133* 173* 175* 181* 181* 189* 191* target_dn 000100 automatic char(168) unaligned dcl 199 in procedure "link_one" set ref 202* 204* 213* 216* 218* 218* 223* 223* 229* 231* 233* 248* 251* 251* target_en 000100 automatic char(32) unaligned dcl 263 in procedure "link_stars" set ref 281* 283* target_en 000306 automatic char(32) unaligned dcl 200 in procedure "link_one" set ref 203* 204* 206* 208* 213* 216* 218* 218* 223* 223* 229* 232* 233* 248* 251* 251* target_en 000306 automatic char(32) unaligned dcl 29 in procedure "lk" set ref 133* 139* 143* 173* 175* 181* 181* 189* 191* target_path 000152 automatic char(168) unaligned dcl 199 set ref 204* 233* 237* type 000333 automatic fixed bin(2,0) dcl 36 set ref 213* ultimate_dn 000224 automatic char(168) unaligned dcl 199 set ref 229* 230 231 ultimate_en 000316 automatic char(32) unaligned dcl 200 set ref 229* 232 verify builtin function dcl 62 ref 77 NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. LINK_TYPE internal static fixed bin(2,0) initial dcl 20 NAMES DECLARED BY EXPLICIT CONTEXT. FIRST_ARG 000760 constant label dcl 129 LINK 002264 constant label dcl 237 ref 241 PATH_ERR 001020 constant label dcl 135 ref 162 RETURN 001552 constant label dcl 194 set ref 220 224 242 SECOND_ARG 001141 constant label dcl 152 ref 120 link 000237 constant entry external dcl 6 link_one 001554 constant entry internal dcl 196 ref 175 191 283 link_stars 002651 constant entry internal dcl 256 ref 173 189 lk 000230 constant entry external dcl 6 star_cleanup 003154 constant entry internal dcl 290 ref 271 286 NAME DECLARED BY CONTEXT OR IMPLICATION. substr builtin function ref 82 111 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4110 4174 3602 4120 Length 4420 3602 64 207 306 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME lk 324 external procedure is an external procedure. link_one 342 internal procedure is called by several nonquick procedures. link_stars 176 internal procedure enables or reverts conditions. on unit on line 271 64 on unit star_cleanup 64 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME link_one 000100 target_dn link_one 000152 target_path link_one 000224 ultimate_dn link_one 000276 en link_one 000306 target_en link_one 000316 ultimate_en link_one link_stars 000100 target_en link_stars 000110 area_ptr link_stars 000112 entries_ptr link_stars 000114 names_ptr link_stars 000116 entry_count link_stars 000117 j link_stars lk 000100 dn lk 000152 first_arg lk 000224 target_dn lk 000276 en lk 000306 target_en lk 000316 chase_sw lk 000317 check_sw lk 000320 copy_names_sw lk 000321 errsw lk 000322 got_path_sw lk 000323 name_sw lk 000324 second_arg_sw lk 000325 star_sw lk 000326 arg_ptr lk 000330 arg_count lk 000331 arg_len lk 000332 i lk 000333 type lk 000334 code lk THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return tra_ext mpfx2 enable ext_entry int_entry int_entry_desc free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. check_star_name_$entry com_err_ com_err_$suppress_name copy_names_ cu_$arg_count cu_$arg_ptr expand_pathname_ get_equal_name_ get_system_free_area_ get_wdir_ hcs_$append_link hcs_$get_link_target hcs_$star_ hcs_$status_minf nd_handler_ pathname_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$badopt error_table_$namedup error_table_$no_s_permission error_table_$noentry error_table_$segnamedup LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 6 000227 66 000244 67 000254 68 000256 69 000275 72 000276 74 000302 75 000311 77 000326 78 000342 79 000400 82 000401 84 000414 85 000422 86 000435 87 000447 88 000462 89 000475 91 000507 92 000543 93 000544 95 000545 96 000547 98 000551 99 000553 101 000602 104 000603 105 000604 107 000605 109 000615 111 000632 113 000650 114 000651 115 000654 116 000703 118 000704 119 000706 120 000723 122 000725 123 000754 126 000755 128 000756 129 000760 131 000762 133 000766 134 001016 135 001020 136 001054 139 001055 140 001072 143 001103 144 001134 145 001135 146 001136 147 001137 151 001140 152 001141 155 001142 156 001144 157 001145 158 001154 159 001161 161 001162 162 001212 164 001214 165 001231 166 001233 168 001276 169 001327 173 001330 175 001355 177 001377 179 001401 180 001403 181 001415 183 001470 186 001471 187 001500 189 001503 191 001530 194 001552 196 001553 202 001606 203 001614 204 001620 206 001637 207 001666 208 001671 209 001730 212 001731 213 001733 214 001771 215 001777 216 002001 217 002037 218 002044 220 002116 223 002121 224 002176 228 002201 229 002203 230 002232 231 002236 232 002241 233 002244 237 002264 238 002314 240 002322 241 002352 242 002355 245 002364 247 002434 248 002436 249 002506 251 002576 254 002647 256 002650 268 002703 269 002711 271 002714 273 002736 274 003004 275 003007 276 003064 279 003065 281 003075 283 003115 284 003144 286 003146 288 003152 290 003153 292 003161 293 003170 295 003177 ----------------------------------------------------------- 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