COMPILATION LISTING OF SEGMENT date_deleter Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-04-17_1926.03_Mon_mdt Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 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 date_deleter: proc; 14 15 /* Command to delete everything in a given directory greater than N days old. 16* Usage: 17* 18* date_deleter dir_path n_days {starnames} {-control_args} 19* 20* optionally providing starnames for match. */ 21 /* Written 04/23/79 S. Herbst */ 22 /* Fixed to work on MSF's with no_s 05/12/80 S. Herbst */ 23 /* Added -dtem, etc. and fix to diagnose badstar ahead of time 06/10/81 S. Herbst */ 24 /* Fixed bugs that deleted all MSF's and took fault for incacc 11/03/82 S. Herbst */ 25 /* Changed to allow dtm cutoff; added selection ctl args -sm, etc. 12/15/83 S. Herbst */ 26 /* Added -query_all, -query_each, -long, -absp 12/19/83 S. Herbst */ 27 /* Fixed bug causing directories to be deleted regardless of date-time 04/20/84 S. Herbst */ 28 /* Understand "new" hardcore error code from hcs_$star_, Keith Loepere, 01/06/85. */ 29 30 31 /****^ HISTORY COMMENTS: 32* 1) change(87-12-01,Gilcrease), approve(87-12-15,MCR7815), 33* audit(88-01-20,RBarstad), install(88-01-26,MR12.2-1018): 34* Accept dates with leading hyphens. 35* END HISTORY COMMENTS */ 36 37 1 1 declare /* Structure returned by hcs_$status_long */ 1 2 1 3 1 branch_status aligned, /* automatic: hcs_$status uses a pointer */ 1 4 1 5 2 type bit(2) unaligned, /* type of entry: link, segment, dir */ 1 6 2 number_names bit(16) unaligned, /* unused by directory_status_ */ 1 7 2 names_rel_pointer bit(18) unaligned, /* unused by directory_status_ */ 1 8 2 date_time_modified bit(36) unaligned, /* date time modified */ 1 9 2 date_time_used bit(36) unaligned, /* date time entry used */ 1 10 2 mode bit(5) unaligned, /* effective access of caller */ 1 11 2 raw_mode bit(5) unaligned, 1 12 2 pad1 bit(8) unaligned, 1 13 2 records bit(18) unaligned, /* number of records in use */ 1 14 2 date_time_dumped bit(36) unaligned, /* date time last dumped */ 1 15 2 date_time_entry_modified bit(36) unaligned, /* date time entry modified */ 1 16 2 lvid bit(36) unaligned, /* logical volume id */ 1 17 2 current_length bit(12) unaligned, /* number of blocks currently allocated */ 1 18 2 bit_count bit(24) unaligned, /* bit count of entry */ 1 19 2 pad3 bit(8) unaligned, 1 20 2 copy_switch bit(1) unaligned, /* the copy switch */ 1 21 2 tpd bit(1) unaligned, /* transparent to paging device */ 1 22 2 mdir bit(1) unaligned, /* master directory switch */ 1 23 2 damaged_switch bit (1) unaligned, /* true if contents damaged */ 1 24 2 synchronized_switch bit (1) unaligned, /* true if a DM synchronized file */ 1 25 2 pad4 bit(5) unaligned, 1 26 2 ring_brackets (0:2) bit(6) unaligned, /* branch ring brackets */ 1 27 2 unique_id bit(36) unaligned, /* entry unique id */ 1 28 1 29 1 30 /* The types of each class of branch */ 1 31 segment_type bit(2) aligned internal static initial ("01"b), 1 32 directory_type bit(2) aligned internal static initial ("10"b), 1 33 msf_type bit(2) aligned internal static initial ("10"b), /* will eventually be different */ 1 34 link_type bit(2) aligned internal static initial ("00"b); 1 35 1 36 38 39 40 dcl ME char (32) int static options (constant) init ("date_deleter"); 41 dcl (NO_STARS init (0), STAR_STAR init (2)) fixed bin int static options (constant); 42 43 dcl 1 bs aligned like branch_status based; 44 45 dcl 1 entries (branch_count) aligned based (entries_ptr), /* for hcs_$star lists */ 46 2 pad (4) fixed bin; 47 dcl names (99/* arbitrary */) char (32) aligned based (names_ptr); 48 49 dcl 1 starnames (arg_count) based (starnames_ptr), 50 2 starname char (32), 51 2 star_code fixed bin; 52 53 dcl 1 select aligned, 54 2 (directory, msf, segment) bit (1) aligned; 55 56 dcl 1 option_switches aligned, 57 2 (absp_sw, long_sw, query_all_sw, query_each_sw) bit (1) aligned; 58 59 dcl 1 query_array (query_bound) based (query_ptr), 60 2 query_dn char (168), 61 2 query_en char (32), 62 2 query_type_name char (32); 63 dcl query_ptr ptr; 64 dcl (query_bound, query_count) fixed bin; 65 66 dcl arg char (arg_len) based (arg_ptr); 67 dcl (dn, msf_dn) char (168); 68 dcl (name, what) char (32); 69 70 dcl dtm72 bit (72); 71 dcl (got_cutoff_sw, got_dirname_sw, same_dir_sw, same_type_sw, yes_sw) bit (1); 72 dcl delete_switches bit (6); 73 dcl delete_force_sw bit (1) unaligned defined (delete_switches) position (1); 74 dcl delete_question_sw bit (1) unaligned defined (delete_switches) position (2); 75 dcl delete_directory_sw bit (1) unaligned defined (delete_switches) position (3); 76 dcl delete_segment_sw bit (1) unaligned defined (delete_switches) position (4); 77 dcl delete_link_sw bit (1) unaligned defined (delete_switches) position (5); 78 dcl delete_chase_sw bit (1) unaligned defined (delete_switches) position (6); 79 80 dcl area area based (area_ptr); 81 82 dcl (area_ptr, arg_ptr, bs_ptr, component_info_ptr, starnames_ptr) ptr; 83 dcl (entries_ptr, names_ptr) ptr; 84 dcl (msf_entries_ptr, msf_names_ptr) ptr; 85 86 dcl DIR_TYPE init (2) fixed bin (2) int static options (constant); 87 dcl (DTCM_TYPE init (0), DTEM_TYPE init (1), DTD_TYPE init (2), DTU_TYPE init (3)) fixed int static options (constant); 88 dcl MSEC_PER_DAY fixed bin (71) int static options (constant) init (86400000000); 89 dcl (cutoff_dtm, msdays) fixed bin (71); 90 dcl bit_count fixed bin (24); 91 dcl type fixed bin (2); 92 dcl (arg_count, arg_len, branch_count, date_type, days) fixed bin; 93 dcl (i, j, msf_component_count, starname_count, starname_index) fixed bin; 94 95 dcl code fixed bin (35); 96 dcl error_table_$action_not_performed fixed bin (35) ext; 97 dcl error_table_$badopt fixed bin (35) ext; 98 dcl error_table_$badstar fixed bin (35) ext; 99 dcl error_table_$incorrect_access fixed bin (35) ext; 100 dcl error_table_$moderr fixed bin (35) ext; 101 dcl error_table_$no_s_permission fixed bin (35) ext; 102 dcl error_table_$nomatch fixed bin (35) ext; 103 104 dcl absolute_pathname_ entry (char (*), char (*), fixed bin (35)); 105 dcl check_star_name_$entry entry (char (*), fixed bin (35)); 106 dcl (com_err_, com_err_$suppress_name) entry options (variable); 107 dcl command_query_$yes_no entry options (variable); 108 dcl convert_date_to_binary_ entry (char (*), fixed bin (71), fixed bin (35)); 109 dcl cu_$arg_count entry (fixed bin, fixed bin (35)); 110 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)); 111 dcl cv_dec_check_ entry (char (*), fixed bin (35)) returns (fixed bin); 112 dcl delete_$path entry (char (*), char (*), bit (6), char (*), fixed bin (35)); 113 dcl get_system_free_area_ entry returns (ptr); 114 dcl get_wdir_ entry returns (char (168)); 115 dcl hcs_$get_dates entry (char (*), char (*), (5) bit (36), fixed bin (35)); 116 dcl hcs_$get_safety_sw entry (char (*), char (*), bit (1), fixed bin (35)); 117 dcl hcs_$star_list_ entry (char (*), char (*), fixed bin (2), ptr, fixed bin, fixed bin, 118 ptr, ptr, fixed bin (35)); 119 dcl hcs_$status_long entry (char (*), char (*), fixed bin (1), ptr, ptr, fixed bin (35)); 120 dcl hcs_$status_minf entry (char (*), char (*), fixed bin (1), fixed bin (2), fixed bin (24), fixed bin (35)); 121 dcl (ioa_, ioa_$rsnnl) entry options (variable); 122 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 123 124 dcl (addr, bit, clock, fixed, index, max, null, substr, unspec) builtin; 125 126 dcl cleanup condition; 127 128 call cu_$arg_count (arg_count, code); 129 if code ^= 0 then do; 130 call com_err_ (code, ME); 131 return; 132 end; 133 134 entries_ptr, msf_entries_ptr, msf_names_ptr, names_ptr, query_ptr, starnames_ptr = null; 135 136 if arg_count = 0 then do; 137 USAGE: call com_err_$suppress_name (0, ME, "Usage: date_deleter dir_path cutoff {starnames} {-control_args}"); 138 go to RETURN; 139 end; 140 141 area_ptr = get_system_free_area_ (); 142 on cleanup call clean_up; 143 allocate starnames in (area) set (starnames_ptr); 144 starname_count = 0; 145 146 unspec (select) = "0"b; 147 unspec (option_switches) = "0"b; 148 date_type = DTCM_TYPE; /* default is date_time_contents_modified */ 149 got_cutoff_sw, got_dirname_sw = "0"b; 150 151 do i = 1 to arg_count; 152 153 call cu_$arg_ptr (i, arg_ptr, arg_len, code); 154 155 if index (arg, "-") = 1 then 156 if arg = "-working_directory" | arg = "-working_dir" | arg = "-wd" then do; 157 got_dirname_sw = "1"b; 158 dn = get_wdir_ (); 159 end; 160 161 else if arg = "-date_time_contents_modified" | arg = "-dtcm" then date_type = DTCM_TYPE; 162 else if arg = "-date_time_dumped" | arg = "-dtd" then date_type = DTD_TYPE; 163 else if arg = "-date_time_entry_modified" | arg = "-dtem" then date_type = DTEM_TYPE; 164 else if arg = "-date_time_used" | arg = "-dtu" then date_type = DTU_TYPE; 165 166 else if arg = "-all" | arg = "-a" then select.directory, select.msf, select.segment = "1"b; 167 else if arg = "-directory" | arg = "-dr" then select.directory = "1"b; 168 else if arg = "-file" | arg = "-f" then select.msf, select.segment = "1"b; 169 else if arg = "-multisegment_file" | arg = "-msf" then select.msf = "1"b; 170 else if arg = "-segment" | arg = "-sm" then select.segment = "1"b; 171 172 else if arg = "-absolute_pathname" | arg = "-absp" then absp_sw = "1"b; 173 else if arg = "-brief" | arg = "-bf" then long_sw = "0"b; 174 else if arg = "-entryname" | arg = "-etnm" then absp_sw = "0"b; 175 else if arg = "-long" | arg = "-lg" then long_sw = "1"b; 176 else if arg = "-query_all" | arg = "-qya" then query_all_sw = "1"b; 177 else if arg = "-query_each" | arg = "-qye" then query_each_sw = "1"b; 178 else do; 179 call convert_date_to_binary_ (arg, cutoff_dtm, code); 180 if code = 0 then do; 181 got_cutoff_sw = "1"b; 182 end; 183 else do; 184 call com_err_ (error_table_$badopt, ME, "^a", arg); 185 go to RETURN; 186 end; 187 end; 188 189 else if ^got_dirname_sw then do; 190 191 got_dirname_sw = "1"b; 192 193 call absolute_pathname_ (arg, dn, code); 194 if code ^= 0 then do; 195 call com_err_ (code, ME, "^a", arg); 196 go to RETURN; 197 end; 198 end; 199 200 else if ^got_cutoff_sw then do; 201 202 got_cutoff_sw = "1"b; 203 204 days = cv_dec_check_ (arg, code); 205 if code = 0 then do; 206 msdays = days * MSEC_PER_DAY; 207 cutoff_dtm = clock () - msdays; 208 end; 209 else do; 210 call convert_date_to_binary_ (arg, cutoff_dtm, code); 211 if code ^= 0 then do; 212 call com_err_ (code, ME, "^a", arg); 213 go to RETURN; 214 end; 215 end; 216 end; 217 218 else do; /* starname */ 219 call check_star_name_$entry (arg, code); 220 if code = error_table_$badstar then do; 221 call com_err_ (code, ME, "^a", arg); 222 go to RETURN; 223 end; 224 starname_count = starname_count + 1; 225 starname (starname_count) = arg; 226 star_code (starname_count) = code; 227 end; 228 end; 229 230 if unspec (select) = "0"b then select.msf, select.segment = "1"b; 231 232 if ^got_dirname_sw | ^got_cutoff_sw then go to USAGE; 233 234 if query_all_sw then do; 235 query_bound = 20; /* will be grown if necessary */ 236 allocate query_array in (area) set (query_ptr); 237 query_count = 0; 238 end; 239 240 delete_directory_sw, delete_force_sw, delete_segment_sw = "1"b; /* switches for delete_$path */ 241 delete_chase_sw, delete_link_sw, delete_question_sw = "0"b; 242 243 if starname_count = 0 then call delete_starname ("**", STAR_STAR); /* no starnames specified */ 244 245 else do starname_index = 1 to starname_count; 246 247 call delete_starname (starname (starname_index), star_code (starname_index)); 248 end; 249 250 if query_all_sw & query_count > 0 then do; 251 252 if select.directory then 253 if (select.msf | select.segment) then what = "Entries"; 254 else what = "Directories"; 255 else if select.msf then 256 if select.segment then what = "Files"; 257 else what = "multisegment files"; 258 else what = "Segments"; 259 260 same_dir_sw = "1"b; 261 do i = 2 to query_count; 262 if query_dn (i) ^= query_dn (1) then same_dir_sw = "0"b; 263 end; 264 same_type_sw = "1"b; 265 do i = 2 to query_count; 266 if query_type_name (i) ^= query_type_name (1) then same_type_sw = "0"b; 267 end; 268 if ^same_type_sw then what = "Entries"; 269 call ioa_ ("^a to be deleted^[ in ^a^]:", what, same_dir_sw, query_dn (1)); 270 do i = 1 to query_count; 271 call ioa_ ("^3x^[^s^;(^a) ^]^[^a^s^;^s^a^]", 272 same_type_sw, query_type_name (i), 273 same_dir_sw, query_en (i), pathname_ (query_dn (i), query_en (i))); 274 end; 275 276 call command_query_$yes_no (yes_sw, 0, ME, "", "Delete?"); 277 278 if yes_sw then do i = 1 to query_count; 279 call delete_$path (query_dn (i), query_en (i), delete_switches, ME, code); 280 if code ^= 0 & code ^= error_table_$action_not_performed then 281 call com_err_ (code, ME, "^a", pathname_ (query_dn (i), query_en (i))); 282 else if long_sw then 283 if absp_sw then call ioa_ ("Deleted ^a", pathname_ (query_dn (i), query_en (i))); 284 else call ioa_ ("Deleted ^a", query_en (i)); 285 end; 286 end; 287 288 RETURN: call clean_up; 289 290 return; 291 292 clean_up: proc; 293 294 if entries_ptr ^= null then free entries_ptr -> entries in (area); 295 if msf_entries_ptr ^= null then free msf_entries_ptr -> entries in (area); 296 if msf_names_ptr ^= null then free msf_names_ptr -> names in (area); 297 if names_ptr ^= null then free names_ptr -> names in (area); 298 if query_ptr ^= null then free query_array in (area); 299 if starnames_ptr ^= null then free starnames_ptr -> starnames in (area); 300 301 end clean_up; 302 303 delete_starname: proc (P_name, P_star_code); 304 305 dcl P_name char (*); 306 dcl P_star_code fixed bin; 307 308 if P_star_code = NO_STARS then do; 309 310 name = P_name; 311 call get_dates (dn, name, code); 312 if code ^= 0 then do; 313 if code ^= error_table_$action_not_performed then 314 call com_err_ (code, ME, "^a^[>^]^a", dn, dn ^= ">", name); 315 end; 316 317 else call delete_if; 318 end; 319 else do; /* starname */ 320 321 call hcs_$star_list_ (dn, P_name, 2 /* branches */, area_ptr, branch_count, 0, 322 entries_ptr, names_ptr, code); 323 324 if code ^= 0 then do; 325 if code ^= error_table_$nomatch then 326 call com_err_ (code, ME, "^a^[>^]^a", dn, dn ^= ">", P_name); 327 end; 328 else do i = 1 to branch_count; 329 330 bs_ptr = addr (entries_ptr -> entries (i)); 331 name = names_ptr -> names (fixed (bs_ptr -> bs.names_rel_pointer, 17)); 332 333 if date_type = DTEM_TYPE | date_type = DTD_TYPE | bs_ptr -> bs.type = directory_type then do; 334 call get_dates (dn, name, code); 335 if code ^= 0 then go to SKIP_MATCH; 336 end; 337 else do; 338 branch_status.type = bs_ptr -> bs.type; 339 branch_status.date_time_modified = bs_ptr -> bs.date_time_modified; 340 branch_status.date_time_used = bs_ptr -> bs.date_time_used; 341 end; 342 branch_status.number_names = bs_ptr -> bs.number_names; 343 branch_status.names_rel_pointer = bs_ptr -> bs.names_rel_pointer; 344 345 call delete_if; 346 SKIP_MATCH: end; 347 348 if entries_ptr ^= null then do; 349 free entries_ptr -> entries in (area); 350 entries_ptr = null; 351 end; 352 if names_ptr ^= null then do; 353 free names_ptr -> names in (area); 354 names_ptr = null; 355 end; 356 end; 357 358 delete_if: proc; 359 360 /* Applies the test to dn>name and deletes if too old */ 361 /* For MSF's, it deletes if all components are too old. */ 362 363 dcl type_name char (32); 364 dcl date36 bit (36) aligned; 365 dcl (safety_sw, saved_delete_force_sw, saved_force_sw_sw, yes_sw) bit (1); 366 367 if branch_status.type = link_type then return; /* never delete links */ 368 else if branch_status.type = segment_type then do; 369 if ^select.segment then return; 370 type_name = "segment"; 371 end; 372 else if branch_status.type = directory_type then 373 if branch_status.bit_count ^= "0"b then do; 374 if ^select.msf then return; 375 type_name = "multisegment file"; 376 end; 377 else do; 378 if ^select.directory then return; 379 type_name = "directory"; 380 end; 381 382 if date_type = DTCM_TYPE then date36 = branch_status.date_time_modified; 383 else if date_type = DTEM_TYPE then date36 = branch_status.date_time_entry_modified; 384 else if date_type = DTD_TYPE then date36 = branch_status.date_time_dumped; 385 else if date_type = DTU_TYPE then date36 = branch_status.date_time_used; 386 387 dtm72 = "0"b; 388 substr (dtm72, 21, 36) = date36; 389 390 if branch_status.type ^= directory_type then do; 391 392 if fixed (dtm72, 71) < cutoff_dtm then do; 393 394 DELETE: if query_all_sw then do; 395 query_count = query_count + 1; 396 if query_count > query_bound then call grow_query_array; 397 query_dn (query_count) = dn; 398 query_en (query_count) = name; 399 query_type_name (query_count) = type_name; 400 401 return; 402 end; 403 404 saved_force_sw_sw = "0"b; 405 if query_each_sw then do; 406 call hcs_$get_safety_sw (dn, name, safety_sw, 0); 407 if P_star_code ^= NO_STARS then 408 call hcs_$status_long (dn, name, 0, addr (branch_status), null, 0); 409 410 call command_query_$yes_no (yes_sw, 0, ME, "", 411 "Delete ^a ^[^a^s^;^s^a^] ?^[ (safety switch is on)^]^[ (copy switch is on)^]", 412 type_name, absp_sw, pathname_ (dn, name), name, safety_sw, branch_status.copy_switch); 413 414 if ^yes_sw then return; 415 416 if safety_sw | branch_status.copy_switch then do; 417 saved_delete_force_sw = delete_force_sw; 418 saved_force_sw_sw = "1"b; 419 delete_force_sw = "1"b; 420 end; 421 end; 422 423 call delete_$path (dn, name, delete_switches, ME, code); 424 425 if saved_force_sw_sw then delete_force_sw = saved_delete_force_sw; 426 427 if code ^= 0 then do; 428 call com_err_ (code, ME, "^a^[>^]^a", dn, dn ^= ">", name); 429 if code = error_table_$incorrect_access then go to RETURN; 430 end; 431 else if long_sw & ^query_each_sw then 432 call ioa_ ("Deleted ^a ^[^a^s^;^s^a^]", type_name, absp_sw, pathname_ (dn, name), name); 433 end; 434 end; 435 436 else do; /* directory; might be an MSF */ 437 438 call hcs_$status_minf (dn, name, 0, type, bit_count, code); 439 if code = error_table_$incorrect_access then go to RETURN; 440 else if code = 0 & type = DIR_TYPE & bit_count ^= 0 then do; /* an MSF */ 441 442 if days = 0 then go to DELETE; 443 444 msf_entries_ptr, msf_names_ptr = null; 445 446 call ioa_$rsnnl ("^a^[>^]^a", msf_dn, 168, dn, dn ^= ">", name); 447 448 call hcs_$star_list_ (msf_dn, "**", 3 /* All */, area_ptr, msf_component_count, 0, 449 msf_entries_ptr, msf_names_ptr, code); 450 451 if code ^= 0 then 452 if code ^= error_table_$nomatch & code ^= error_table_$moderr & 453 code ^= error_table_$no_s_permission then do; 454 call com_err_ (code, ME, "^a>**", msf_dn); 455 return; 456 end; 457 else go to SKIP_MSF; /* don't delete if error or no components */ 458 459 do j = 1 to msf_component_count; 460 461 component_info_ptr = addr (msf_entries_ptr -> entries (j)); 462 463 if date_type = DTEM_TYPE | date_type = DTD_TYPE then do; 464 call get_dates (msf_dn, 465 (msf_names_ptr -> names (fixed (component_info_ptr -> bs.names_rel_pointer, 17))), 466 code); 467 if code ^= 0 | branch_status.type ^= segment_type then go to SKIP_MSF; 468 if date_type = DTEM_TYPE then date36 = branch_status.date_time_entry_modified; 469 else date36 = branch_status.date_time_dumped; 470 end; 471 else if date_type = DTCM_TYPE then date36 = component_info_ptr -> bs.date_time_modified; 472 else date36 = component_info_ptr -> bs.date_time_used; 473 474 dtm72 = "0"b; 475 substr (dtm72, 21, 36) = date36; 476 if fixed (dtm72, 71) >= cutoff_dtm then go to SKIP_MSF; 477 end; 478 479 call msf_cleanup; 480 go to DELETE; 481 SKIP_MSF: 482 call msf_cleanup; 483 end; 484 485 else /* a directory */ 486 if fixed (dtm72, 71) < cutoff_dtm then go to DELETE; 487 end; 488 489 msf_cleanup: proc; 490 491 if msf_entries_ptr ^= null then do; 492 free msf_entries_ptr -> entries in (area); 493 msf_entries_ptr = null; 494 end; 495 if msf_names_ptr ^= null then do; 496 free msf_names_ptr -> names in (area); 497 msf_names_ptr = null; 498 end; 499 500 end msf_cleanup; 501 502 end delete_if; 503 504 end delete_starname; 505 506 get_dates: proc (P_dn, P_en, P_code); 507 508 /* Fills in branch_status and, if -dtd, factors date-time-volume-dumped into branch_status.date_time_dumped */ 509 510 dcl (P_dn, P_en) char (*); 511 dcl P_code fixed bin (35); 512 dcl dates_array (5) bit (36); 513 514 call hcs_$status_long (P_dn, P_en, 0, addr (branch_status), null, P_code); 515 if P_code ^= 0 then return; 516 517 if date_type = DTD_TYPE then do; 518 call hcs_$get_dates (P_dn, P_en, dates_array, P_code); 519 if P_code ^= 0 then return; 520 521 branch_status.date_time_dumped = 522 bit (max (fixed (branch_status.date_time_dumped, 36), fixed (dates_array (5), 36)), 36); 523 524 if branch_status.date_time_dumped = "0"b then P_code = error_table_$action_not_performed; 525 /* don't delete if -dtd and entry never dumped */ 526 end; 527 528 end get_dates; 529 530 grow_query_array: proc; 531 532 /* Doubles the size of query_array */ 533 534 dcl old_query_ptr ptr; 535 dcl (new_query_bound, old_query_bound) fixed bin; 536 537 old_query_ptr = query_ptr; 538 old_query_bound = query_bound; 539 query_bound, new_query_bound = query_bound * 2; 540 541 allocate query_array in (area) set (query_ptr); 542 543 query_bound = old_query_bound; 544 unspec (query_ptr -> query_array) = unspec (old_query_ptr -> query_array); 545 546 free old_query_ptr -> query_array in (area); 547 548 query_bound = new_query_bound; 549 550 end grow_query_array; 551 552 end date_deleter; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/17/00 1926.0 date_deleter.pl1 >udd>sm>ds>w>ml>date_deleter.pl1 38 1 11/22/82 1055.6 branch_status.incl.pl1 >ldd>incl>branch_status.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. DIR_TYPE constant fixed bin(2,0) initial dcl 86 ref 440 DTCM_TYPE constant fixed bin(17,0) initial dcl 87 ref 148 161 382 471 DTD_TYPE constant fixed bin(17,0) initial dcl 87 ref 162 333 384 463 517 DTEM_TYPE constant fixed bin(17,0) initial dcl 87 ref 163 333 383 463 468 DTU_TYPE constant fixed bin(17,0) initial dcl 87 ref 164 385 ME 000002 constant char(32) initial packed unaligned dcl 40 set ref 130* 137* 184* 195* 212* 221* 276* 279* 280* 313* 325* 410* 423* 428* 454* MSEC_PER_DAY 000000 constant fixed bin(71,0) initial dcl 88 ref 206 NO_STARS constant fixed bin(17,0) initial dcl 41 ref 308 407 P_code parameter fixed bin(35,0) dcl 511 set ref 506 514* 515 518* 519 524* P_dn parameter char packed unaligned dcl 510 set ref 506 514* 518* P_en parameter char packed unaligned dcl 510 set ref 506 514* 518* P_name parameter char packed unaligned dcl 305 set ref 303 310 321* 325* P_star_code parameter fixed bin(17,0) dcl 306 ref 303 308 407 STAR_STAR constant fixed bin(17,0) initial dcl 41 set ref 243* absolute_pathname_ 000026 constant entry external dcl 104 ref 193 absp_sw 000115 automatic bit(1) level 2 dcl 56 set ref 172* 174* 282 410* 431* addr builtin function dcl 124 ref 330 407 407 461 514 514 area based area(1024) dcl 80 ref 143 236 294 295 296 297 298 299 349 353 492 496 541 546 area_ptr 000302 automatic pointer dcl 82 set ref 141* 143 236 294 295 296 297 298 299 321* 349 353 448* 492 496 541 546 arg based char packed unaligned dcl 66 set ref 155 155 155 155 161 161 162 162 163 163 164 164 166 166 167 167 168 168 169 169 170 170 172 172 173 173 174 174 175 175 176 176 177 177 179* 184* 193* 195* 204* 210* 212* 219* 221* 225 arg_count 000332 automatic fixed bin(17,0) dcl 92 set ref 128* 136 143 151 299 arg_len 000333 automatic fixed bin(17,0) dcl 92 set ref 153* 155 155 155 155 161 161 162 162 163 163 164 164 166 166 167 167 168 168 169 169 170 170 172 172 173 173 174 174 175 175 176 176 177 177 179 179 184 184 193 193 195 195 204 204 210 210 212 212 219 219 221 221 225 arg_ptr 000304 automatic pointer dcl 82 set ref 153* 155 155 155 155 161 161 162 162 163 163 164 164 166 166 167 167 168 168 169 169 170 170 172 172 173 173 174 174 175 175 176 176 177 177 179 184 193 195 204 210 212 219 221 225 bit builtin function dcl 124 ref 521 bit_count 000330 automatic fixed bin(24,0) dcl 90 in procedure "date_deleter" set ref 438* 440 bit_count 7(12) 000100 automatic bit(24) level 2 in structure "branch_status" packed packed unaligned dcl 1-1 in procedure "date_deleter" set ref 372 branch_count 000334 automatic fixed bin(17,0) dcl 92 set ref 294 295 321* 328 349 492 branch_status 000100 automatic structure level 1 dcl 1-1 set ref 407 407 514 514 bs based structure level 1 dcl 43 bs_ptr 000306 automatic pointer dcl 82 set ref 330* 331 333 338 339 340 342 343 check_star_name_$entry 000030 constant entry external dcl 105 ref 219 cleanup 000346 stack reference condition dcl 126 ref 142 clock builtin function dcl 124 ref 207 code 000344 automatic fixed bin(35,0) dcl 95 set ref 128* 129 130* 153* 179* 180 193* 194 195* 204* 205 210* 211 212* 219* 220 221* 226 279* 280 280 280* 311* 312 313 313* 321* 324 325 325* 334* 335 423* 427 428* 429 438* 439 440 448* 451 451 451 451 454* 464* 467 com_err_ 000032 constant entry external dcl 106 ref 130 184 195 212 221 280 313 325 428 454 com_err_$suppress_name 000034 constant entry external dcl 106 ref 137 command_query_$yes_no 000036 constant entry external dcl 107 ref 276 410 component_info_ptr 000310 automatic pointer dcl 82 set ref 461* 464 471 472 convert_date_to_binary_ 000040 constant entry external dcl 108 ref 179 210 copy_switch 10(08) 000100 automatic bit(1) level 2 packed packed unaligned dcl 1-1 set ref 410* 416 cu_$arg_count 000042 constant entry external dcl 109 ref 128 cu_$arg_ptr 000044 constant entry external dcl 110 ref 153 cutoff_dtm 000324 automatic fixed bin(71,0) dcl 89 set ref 179* 207* 210* 392 476 485 cv_dec_check_ 000046 constant entry external dcl 111 ref 204 date36 000410 automatic bit(36) dcl 364 set ref 382* 383* 384* 385* 388 468* 469* 471* 472* 475 date_time_dumped 4 000100 automatic bit(36) level 2 packed packed unaligned dcl 1-1 set ref 384 469 521* 521 524 date_time_entry_modified 5 000100 automatic bit(36) level 2 packed packed unaligned dcl 1-1 set ref 383 468 date_time_modified 1 based bit(36) level 2 in structure "bs" packed packed unaligned dcl 43 in procedure "date_deleter" ref 339 471 date_time_modified 1 000100 automatic bit(36) level 2 in structure "branch_status" packed packed unaligned dcl 1-1 in procedure "date_deleter" set ref 339* 382 date_time_used 2 000100 automatic bit(36) level 2 in structure "branch_status" packed packed unaligned dcl 1-1 in procedure "date_deleter" set ref 340* 385 date_time_used 2 based bit(36) level 2 in structure "bs" packed packed unaligned dcl 43 in procedure "date_deleter" ref 340 472 date_type 000335 automatic fixed bin(17,0) dcl 92 set ref 148* 161* 162* 163* 164* 333 333 382 383 384 385 463 463 468 471 517 dates_array 000432 automatic bit(36) array packed unaligned dcl 512 set ref 518* 521 days 000336 automatic fixed bin(17,0) dcl 92 set ref 204* 206 442 delete_$path 000050 constant entry external dcl 112 ref 279 423 delete_chase_sw defined bit(1) packed unaligned dcl 78 set ref 241* delete_directory_sw defined bit(1) packed unaligned dcl 75 set ref 240* delete_force_sw defined bit(1) packed unaligned dcl 73 set ref 240* 417 419* 425* delete_link_sw defined bit(1) packed unaligned dcl 77 set ref 241* delete_question_sw defined bit(1) packed unaligned dcl 74 set ref 241* delete_segment_sw defined bit(1) packed unaligned dcl 76 set ref 240* delete_switches 000301 automatic bit(6) packed unaligned dcl 72 set ref 240* 240 240* 240 240* 240 241* 241 241* 241 241* 241 279* 417 417 419* 419 423* 425* 425 directory 000112 automatic bit(1) level 2 dcl 53 set ref 166* 167* 252 378 directory_type constant bit(2) initial dcl 1-1 ref 333 372 390 dn 000126 automatic char(168) packed unaligned dcl 67 set ref 158* 193* 311* 313* 313 321* 325* 325 334* 397 406* 407* 410* 410* 423* 428* 428 431* 431* 438* 446* 446 dtm72 000272 automatic bit(72) packed unaligned dcl 70 set ref 387* 388* 392 474* 475* 476 485 entries based structure array level 1 dcl 45 set ref 294 295 330 349 461 492 entries_ptr 000314 automatic pointer dcl 83 set ref 134* 294 294 321* 330 348 349 350* error_table_$action_not_performed 000010 external static fixed bin(35,0) dcl 96 ref 280 313 524 error_table_$badopt 000012 external static fixed bin(35,0) dcl 97 set ref 184* error_table_$badstar 000014 external static fixed bin(35,0) dcl 98 ref 220 error_table_$incorrect_access 000016 external static fixed bin(35,0) dcl 99 ref 429 439 error_table_$moderr 000020 external static fixed bin(35,0) dcl 100 ref 451 error_table_$no_s_permission 000022 external static fixed bin(35,0) dcl 101 ref 451 error_table_$nomatch 000024 external static fixed bin(35,0) dcl 102 ref 325 451 fixed builtin function dcl 124 ref 331 392 464 476 485 521 521 get_system_free_area_ 000052 constant entry external dcl 113 ref 141 get_wdir_ 000054 constant entry external dcl 114 ref 158 got_cutoff_sw 000274 automatic bit(1) packed unaligned dcl 71 set ref 149* 181* 200 202* 232 got_dirname_sw 000275 automatic bit(1) packed unaligned dcl 71 set ref 149* 157* 189 191* 232 hcs_$get_dates 000056 constant entry external dcl 115 ref 518 hcs_$get_safety_sw 000060 constant entry external dcl 116 ref 406 hcs_$star_list_ 000062 constant entry external dcl 117 ref 321 448 hcs_$status_long 000064 constant entry external dcl 119 ref 407 514 hcs_$status_minf 000066 constant entry external dcl 120 ref 438 i 000337 automatic fixed bin(17,0) dcl 93 set ref 151* 153* 261* 262* 265* 266* 270* 271 271 271 271 271 271* 278* 279 279 280 280 280 280 282 282 282 282 284* 328* 330* index builtin function dcl 124 ref 155 ioa_ 000070 constant entry external dcl 121 ref 269 271 282 284 431 ioa_$rsnnl 000072 constant entry external dcl 121 ref 446 j 000340 automatic fixed bin(17,0) dcl 93 set ref 459* 461* link_type constant bit(2) initial dcl 1-1 ref 367 long_sw 1 000115 automatic bit(1) level 2 dcl 56 set ref 173* 175* 282 431 max builtin function dcl 124 ref 521 msdays 000326 automatic fixed bin(71,0) dcl 89 set ref 206* 207 msf 1 000112 automatic bit(1) level 2 dcl 53 set ref 166* 168* 169* 230* 252 255 374 msf_component_count 000341 automatic fixed bin(17,0) dcl 93 set ref 448* 459 msf_dn 000200 automatic char(168) packed unaligned dcl 67 set ref 446* 448* 454* 464* msf_entries_ptr 000320 automatic pointer dcl 84 set ref 134* 295 295 444* 448* 461 491 492 493* msf_names_ptr 000322 automatic pointer dcl 84 set ref 134* 296 296 444* 448* 464 495 496 497* name 000252 automatic char(32) packed unaligned dcl 68 set ref 310* 311* 313* 331* 334* 398 406* 407* 410* 410* 410* 423* 428* 431* 431* 431* 438* 446* names based char(32) array dcl 47 ref 296 297 331 353 464 496 names_ptr 000316 automatic pointer dcl 83 set ref 134* 297 297 321* 331 352 353 354* names_rel_pointer 0(18) based bit(18) level 2 in structure "bs" packed packed unaligned dcl 43 in procedure "date_deleter" ref 331 343 464 names_rel_pointer 0(18) 000100 automatic bit(18) level 2 in structure "branch_status" packed packed unaligned dcl 1-1 in procedure "date_deleter" set ref 343* new_query_bound 000450 automatic fixed bin(17,0) dcl 535 set ref 539* 548 null builtin function dcl 124 ref 134 294 295 296 297 298 299 348 350 352 354 407 407 444 491 493 495 497 514 514 number_names 0(02) based bit(16) level 2 in structure "bs" packed packed unaligned dcl 43 in procedure "date_deleter" ref 342 number_names 0(02) 000100 automatic bit(16) level 2 in structure "branch_status" packed packed unaligned dcl 1-1 in procedure "date_deleter" set ref 342* old_query_bound 000451 automatic fixed bin(17,0) dcl 535 set ref 538* 543 old_query_ptr 000446 automatic pointer dcl 534 set ref 537* 544 546 option_switches 000115 automatic structure level 1 dcl 56 set ref 147* pathname_ 000074 constant entry external dcl 122 ref 271 271 280 280 282 282 410 410 431 431 query_all_sw 2 000115 automatic bit(1) level 2 dcl 56 set ref 176* 234 250 394 query_array based structure array level 1 packed packed unaligned dcl 59 set ref 236 298 541 544* 544 546 query_bound 000124 automatic fixed bin(17,0) dcl 64 set ref 235* 236 298 396 538 539 539* 541 543* 544 544 546 548* query_count 000125 automatic fixed bin(17,0) dcl 64 set ref 237* 250 261 265 270 278 395* 395 396 397 398 399 query_dn based char(168) array level 2 packed packed unaligned dcl 59 set ref 262 262 269* 271* 271* 279* 280* 280* 282* 282* 397* query_each_sw 3 000115 automatic bit(1) level 2 dcl 56 set ref 177* 405 431 query_en 52 based char(32) array level 2 packed packed unaligned dcl 59 set ref 271* 271* 271* 279* 280* 280* 282* 282* 284* 398* query_ptr 000122 automatic pointer dcl 63 set ref 134* 236* 262 262 266 266 269 271 271 271 271 271 271 279 279 280 280 280 280 282 282 282 282 284 298 298 397 398 399 537 541* 544 query_type_name 62 based char(32) array level 2 packed packed unaligned dcl 59 set ref 266 266 271* 399* safety_sw 000411 automatic bit(1) packed unaligned dcl 365 set ref 406* 410* 416 same_dir_sw 000276 automatic bit(1) packed unaligned dcl 71 set ref 260* 262* 269* 271* same_type_sw 000277 automatic bit(1) packed unaligned dcl 71 set ref 264* 266* 268 271* saved_delete_force_sw 000412 automatic bit(1) packed unaligned dcl 365 set ref 417* 425 saved_force_sw_sw 000413 automatic bit(1) packed unaligned dcl 365 set ref 404* 418* 425 segment 2 000112 automatic bit(1) level 2 dcl 53 set ref 166* 168* 170* 230* 252 255 369 segment_type constant bit(2) initial dcl 1-1 ref 368 467 select 000112 automatic structure level 1 dcl 53 set ref 146* 230 star_code 10 based fixed bin(17,0) array level 2 dcl 49 set ref 226* 247* starname based char(32) array level 2 packed packed unaligned dcl 49 set ref 225* 247* starname_count 000342 automatic fixed bin(17,0) dcl 93 set ref 144* 224* 224 225 226 243 245 starname_index 000343 automatic fixed bin(17,0) dcl 93 set ref 245* 247 247* starnames based structure array level 1 unaligned dcl 49 set ref 143 299 starnames_ptr 000312 automatic pointer dcl 82 set ref 134* 143* 225 226 247 247 299 299 substr builtin function dcl 124 set ref 388* 475* type based bit(2) level 2 in structure "bs" packed packed unaligned dcl 43 in procedure "date_deleter" ref 333 338 type 000331 automatic fixed bin(2,0) dcl 91 in procedure "date_deleter" set ref 438* 440 type 000100 automatic bit(2) level 2 in structure "branch_status" packed packed unaligned dcl 1-1 in procedure "date_deleter" set ref 338* 367 368 372 390 467 type_name 000400 automatic char(32) packed unaligned dcl 363 set ref 370* 375* 379* 399 410* 431* unspec builtin function dcl 124 set ref 146* 147* 230 544* 544 what 000262 automatic char(32) packed unaligned dcl 68 set ref 252* 254* 255* 257* 258* 268* 269* yes_sw 000414 automatic bit(1) packed unaligned dcl 365 in procedure "delete_if" set ref 410* 414 yes_sw 000300 automatic bit(1) packed unaligned dcl 71 in procedure "date_deleter" set ref 276* 278 NAME DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. msf_type internal static bit(2) initial dcl 1-1 NAMES DECLARED BY EXPLICIT CONTEXT. DELETE 003065 constant label dcl 394 ref 442 480 485 RETURN 002324 constant label dcl 288 ref 138 185 196 213 222 429 439 SKIP_MATCH 002735 constant label dcl 346 ref 335 SKIP_MSF 004074 constant label dcl 481 ref 451 467 476 USAGE 000402 constant label dcl 137 ref 232 clean_up 002332 constant entry internal dcl 292 ref 142 288 date_deleter 000334 constant entry external dcl 13 delete_if 002762 constant entry internal dcl 358 ref 317 345 delete_starname 002422 constant entry internal dcl 303 ref 243 247 get_dates 004126 constant entry internal dcl 506 ref 311 334 464 grow_query_array 004272 constant entry internal dcl 530 ref 396 msf_cleanup 004102 constant entry internal dcl 489 ref 479 481 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4744 5042 4410 4754 Length 5312 4410 76 233 334 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME date_deleter 681 external procedure is an external procedure. on unit on line 142 64 on unit clean_up 64 internal procedure is called by several nonquick procedures. delete_starname internal procedure shares stack frame of external procedure date_deleter. delete_if internal procedure shares stack frame of external procedure date_deleter. msf_cleanup internal procedure shares stack frame of external procedure date_deleter. get_dates internal procedure shares stack frame of external procedure date_deleter. grow_query_array internal procedure shares stack frame of external procedure date_deleter. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME date_deleter 000100 branch_status date_deleter 000112 select date_deleter 000115 option_switches date_deleter 000122 query_ptr date_deleter 000124 query_bound date_deleter 000125 query_count date_deleter 000126 dn date_deleter 000200 msf_dn date_deleter 000252 name date_deleter 000262 what date_deleter 000272 dtm72 date_deleter 000274 got_cutoff_sw date_deleter 000275 got_dirname_sw date_deleter 000276 same_dir_sw date_deleter 000277 same_type_sw date_deleter 000300 yes_sw date_deleter 000301 delete_switches date_deleter 000302 area_ptr date_deleter 000304 arg_ptr date_deleter 000306 bs_ptr date_deleter 000310 component_info_ptr date_deleter 000312 starnames_ptr date_deleter 000314 entries_ptr date_deleter 000316 names_ptr date_deleter 000320 msf_entries_ptr date_deleter 000322 msf_names_ptr date_deleter 000324 cutoff_dtm date_deleter 000326 msdays date_deleter 000330 bit_count date_deleter 000331 type date_deleter 000332 arg_count date_deleter 000333 arg_len date_deleter 000334 branch_count date_deleter 000335 date_type date_deleter 000336 days date_deleter 000337 i date_deleter 000340 j date_deleter 000341 msf_component_count date_deleter 000342 starname_count date_deleter 000343 starname_index date_deleter 000344 code date_deleter 000400 type_name delete_if 000410 date36 delete_if 000411 safety_sw delete_if 000412 saved_delete_force_sw delete_if 000413 saved_force_sw_sw delete_if 000414 yes_sw delete_if 000432 dates_array get_dates 000446 old_query_ptr grow_query_array 000450 new_query_bound grow_query_array 000451 old_query_bound grow_query_array THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as call_ext_out_desc call_ext_out call_int_this call_int_other return_mac mpfx2 enable_op ext_entry int_entry op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. absolute_pathname_ check_star_name_$entry com_err_ com_err_$suppress_name command_query_$yes_no convert_date_to_binary_ cu_$arg_count cu_$arg_ptr cv_dec_check_ delete_$path get_system_free_area_ get_wdir_ hcs_$get_dates hcs_$get_safety_sw hcs_$star_list_ hcs_$status_long hcs_$status_minf ioa_ ioa_$rsnnl pathname_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$badopt error_table_$badstar error_table_$incorrect_access error_table_$moderr error_table_$no_s_permission error_table_$nomatch LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000333 128 000341 129 000351 130 000353 131 000370 134 000371 136 000400 137 000402 138 000427 141 000430 142 000437 143 000461 144 000467 146 000470 147 000473 148 000476 149 000500 151 000502 153 000511 155 000526 157 000556 158 000560 159 000567 161 000570 162 000603 163 000616 164 000631 166 000644 167 000661 168 000674 169 000710 170 000723 172 000736 173 000751 174 000763 175 000775 176 001010 177 001023 179 001036 180 001062 181 001064 182 001066 184 001067 185 001121 187 001122 189 001123 191 001125 193 001127 194 001153 195 001155 196 001207 198 001210 200 001211 202 001213 204 001215 205 001241 206 001243 207 001247 208 001252 210 001253 211 001277 212 001301 213 001333 216 001334 219 001335 220 001355 221 001361 222 001412 224 001413 225 001414 226 001425 228 001431 230 001433 232 001442 234 001446 235 001450 236 001452 237 001460 240 001461 241 001467 243 001475 245 001505 247 001513 248 001536 250 001540 252 001544 254 001556 255 001562 257 001572 258 001576 260 001601 261 001603 262 001611 263 001624 264 001626 265 001630 266 001637 267 001652 268 001654 269 001662 270 001714 271 001723 274 002020 276 002022 278 002056 279 002071 280 002131 282 002215 284 002274 285 002322 288 002324 290 002330 292 002331 294 002337 295 002350 296 002361 297 002370 298 002377 299 002410 301 002421 303 002422 308 002433 310 002436 311 002443 312 002446 313 002450 315 002520 317 002521 318 002522 321 002523 324 002575 325 002577 327 002652 328 002653 330 002663 331 002667 333 002677 334 002711 335 002714 336 002716 338 002717 339 002722 340 002724 342 002726 343 002732 345 002734 346 002735 348 002737 349 002743 350 002747 352 002751 353 002755 354 002757 504 002761 358 002762 367 002763 368 002770 369 002772 370 002775 371 003000 372 003001 374 003006 375 003011 376 003014 378 003015 379 003020 382 003023 383 003030 384 003035 385 003042 387 003046 388 003050 390 003056 392 003062 394 003065 395 003067 396 003070 397 003074 398 003103 399 003110 401 003115 404 003116 405 003117 406 003121 407 003147 410 003214 414 003317 416 003323 417 003331 418 003334 419 003336 423 003340 425 003370 427 003376 428 003400 429 003446 430 003452 431 003453 434 003532 438 003533 439 003571 440 003575 442 003604 444 003606 446 003611 448 003660 451 003733 454 003744 455 003772 459 003773 461 004003 463 004007 464 004014 467 004027 468 004035 469 004043 470 004045 471 004046 472 004053 474 004055 475 004057 476 004065 477 004070 479 004072 480 004073 481 004074 483 004075 485 004076 502 004101 489 004102 491 004103 492 004107 493 004113 495 004115 496 004121 497 004123 500 004125 506 004126 514 004144 515 004207 517 004213 518 004216 519 004244 521 004250 524 004265 528 004271 530 004272 537 004273 538 004275 539 004277 541 004302 543 004310 544 004312 546 004321 548 004323 550 004325 ----------------------------------------------------------- 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