COMPILATION LISTING OF SEGMENT volume_cross_check Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 10/10/89 1421.2 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1989 * 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(89-08-31,GWMay), approve(89-10-03,MCR8135), 15* audit(89-10-04,Beattie), install(89-10-10,MR12.3-1089): 16* Updated to process version 3 for backup_volume_log.incl.pl1 structures. 17* END HISTORY COMMENTS */ 18 19 20 /* format: style1,ind2,^inddcls,ifthenstmt,dclind2,declareind2,ifthendo,ifthen*/ 21 22 volume_cross_check: proc; 23 24 /* This commands cross checks the characteristics of a volume dumper output medium in the volume pool, 25* the pvolog, and the various vologs for consistency, and rebuilds the pvolog if required */ 26 27 /* Written: In antiquity by D. Vinograd 28* Modified: 4/12/83 by GA Texada to not delete the pvolog's for volumes that are reserved. 29* Modified: 7/11/83 by GA Texada to force the comment in the volume pool to match the pvolog. 30* Modified: 2/29/84 by GA Texada to check the header patterns in the volog and the version (phx16935). 31**/ 32 33 dcl (volname, ename) char (32); 34 dcl (argp, vpp) ptr; 35 dcl (new_pool_path, sys_dir) char (168); 36 dcl (narg, total_volname_count, volname_count) fixed bin; 37 dcl comment char (64); 38 dcl volume_pool_time fixed bin (71); 39 dcl (found, long, brief) bit (1); 40 dcl (volog_dir, pvolog_dir, contents_dir) char (168); 41 dcl arg char (argl) based (argp); 42 dcl (argl, bvx, olx, ac) fixed bin; 43 dcl (code, ignore) fixed bin (35); 44 dcl (volume_pool_state, volume_pool_type) fixed bin; 45 46 dcl lock_wait_time fixed bin static init (60) options (constant); 47 dcl free fixed bin static init (1) options (constant); 48 dcl reserved fixed bin static init (3) options (constant); 49 dcl allocated fixed bin static init (2) options (constant); 50 dcl myname char (32) static int init ("volume_cross_check") options (constant); 51 dcl ascii_states (3) char (4) int static init ("incr", "cons", "comp") options (constant); 52 53 dcl cleanup condition; 54 55 dcl com_err_ entry options (variable); 56 dcl cu_$arg_count entry (fixed bin); 57 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)); 58 dcl delete_$path entry (char (*), char (*), bit (6), char (*), fixed bin (35)); 59 dcl error_rnt entry variable options (variable); 60 dcl get_wdir_ entry returns (char (168)); 61 dcl hcs_$initiate entry (char (*), char (*), char (*), fixed bin, fixed bin, ptr, fixed bin (35)); 62 dcl hcs_$terminate_noname entry (ptr, fixed bin (35)); 63 dcl ioa_ entry options (variable); 64 dcl manage_volume_pool_$allocate entry (ptr, entry options (variable), char (*), char (*), char (*), fixed bin (35)); 65 dcl manage_volume_pool_$free entry (ptr, entry options (variable), char (*), fixed bin (35)); 66 dcl manage_volume_pool_$set_pool_path entry (entry options (variable), char (*), ptr, fixed bin (35)); 67 dcl manage_volume_pool_$status entry (ptr, entry options (variable), char (*), char (*), fixed bin (71), fixed bin, fixed bin (35)); 68 dcl rebuild_pvolog_ entry (char (*), char (*), entry options (variable), ptr, fixed bin (35)); 69 dcl set_lock_$lock entry (bit (36) aligned, fixed bin, fixed bin (35)); 70 dcl set_lock_$unlock entry (bit (36) aligned, fixed bin (35)); 71 dcl suffixed_name_$make entry (char (*), char (*), char (*), fixed bin (35)); 72 73 dcl error_table_$badopt ext fixed bin (35); 74 dcl error_table_$invalid_lock_reset ext fixed bin (35); 75 dcl error_table_$noentry ext fixed bin (35); 76 dcl error_table_$unimplemented_version fixed bin (35) ext static; 77 78 dcl (rtrim, substr, abs, null, addr) builtin; 79 80 bvlp, pvlp = null; 81 sys_dir = ">daemon_dir_dir>volume_backup"; 82 error_rnt = com_err_; 83 long, brief, found = "0"b; 84 volume_pool_time = 0; 85 volume_pool_state = 0; 86 code = 0; 87 call cu_$arg_ptr (1, argp, argl, code); 88 if code ^= 0 then do; 89 argerr: call com_err_ (0, myname, "USAGE: ^a volume [-wd|-working_dir] ", myname); 90 return; 91 end; 92 if substr (arg, 1, 1) = "-" then goto argerr; 93 volname = arg; 94 call cu_$arg_count (narg); 95 ac = 2; 96 do while (ac <= narg); 97 call cu_$arg_ptr (ac, argp, argl, code); 98 if code ^= 0 then do; 99 call com_err_ (code, myname, "Unable to access arg after ^a", arg); 100 goto finish; 101 end; 102 if arg = "-working_dir" | arg = "-wd" then sys_dir = get_wdir_ (); 103 else if arg = "-long" | arg = "-lg" then long = "1"b; 104 else if arg = "-bf" | arg = "-brief" then brief = "1"b; 105 else do; 106 call com_err_ (error_table_$badopt, myname, "^a", arg); 107 goto finish; 108 end; 109 ac = ac + 1; 110 end; 111 volog_dir = sys_dir; 112 pvolog_dir = rtrim (sys_dir) || ">pvolog"; 113 contents_dir = rtrim (sys_dir) || ">contents"; 114 new_pool_path = rtrim (sys_dir) || ">Volume_Dumper"; 115 call manage_volume_pool_$set_pool_path (error_rnt, new_pool_path, vpp, code); 116 if code ^= 0 then goto finish; 117 call manage_volume_pool_$status (vpp, error_rnt, volname, comment, volume_pool_time, volume_pool_state, code); 118 if code ^= 0 then goto finish; 119 on cleanup call finish_; 120 if long then call ioa_ ("Processing ^a", volname); 121 if comment = "incr" then volume_pool_type = incr; 122 else if comment = "cons" then volume_pool_type = cons; 123 else if comment = "comp" then volume_pool_type = comp; 124 else if comment = "" | comment = "free" then goto finish; 125 else do; 126 call com_err_ (0, myname, "Unknown volume pool type ^a for volume ^a. 127 Use manual methods to investigate/free.", comment, volname); 128 goto finish; 129 end; 130 call find_pvolog_and_lock (volname); 131 if ^found then do; 132 if volume_pool_state = free then goto finish; 133 else if volume_pool_state = allocated then do; 134 call com_err_ (code, myname, "Volume ^a not in free pool but pvolog not found", volname); 135 call rebuild_pvolog (volname); 136 end; 137 else if volume_pool_state = reserved then goto finish; 138 else do; 139 unknown_state: 140 call com_err_ (0, myname, "Unknown volume state for ^a. It will be rebuilt", volname); 141 goto freeit; 142 end; 143 end; 144 else do; 145 if volume_pool_state = free then do; 146 call com_err_ (0, myname, "Volume ^a in free state but pvolog exists", volname); 147 call rebuild_pvolog (volname); 148 end; 149 else if volume_pool_state = reserved & pvolog.in_use ^= 0 then do; 150 call com_err_ (0, myname, "Volume ^a reserved but pvolog has non 0 in use count", volname); 151 call rebuild_pvolog (volname); 152 end; 153 else if volume_pool_state = reserved then goto finish; /* could be preattached to current dumper */ 154 else if volume_pool_state = allocated then ; 155 else do; 156 goto unknown_state; 157 end; 158 end; 159 160 if volume_pool_type ^= pvolog.dump_type then do; 161 call com_err_ (0, myname, "Volume pool and pvolog disagree as to dump type for ^a, 162 rebuilding to match pvolog.", volname); 163 freeit: call manage_volume_pool_$free (vpp, error_rnt, volname, ignore); 164 volume_pool_state = free; 165 volume_pool_type = pvolog.dump_type; 166 call rebuild_pvolog (volname); 167 end; 168 total_volname_count = 0; 169 do olx = 1 to pvolog.next; 170 pvlep = addr (pvolog.array (olx)); 171 if pvle.invocation_count ^= 0 then do; 172 call find_volog_and_lock ((pvle.pvname)); 173 if ^found then do; 174 call com_err_ (code, myname, "Unable to find volume log ^a", pvle.pvname); 175 goto next; 176 end; 177 else if code ^= 0 then do; /* must have a header or version problem */ 178 call cleanup_volog (); /* unlock and term */ 179 goto next; /* step past the bad one */ 180 end; 181 182 call count_volname (volname); 183 total_volname_count = total_volname_count + volname_count; 184 if volname_count ^= pvle.invocation_count then do; 185 if ^brief then call com_err_ (0, myname, "Invocation count for ^a differs by ^d from volume log ^a", 186 volname, abs (volname_count - pvle.invocation_count), pvle.pvname); 187 call cleanup_volog; 188 call rebuild_pvolog (volname); 189 goto finish; 190 end; 191 call cleanup_volog; 192 end; 193 next: 194 end; 195 196 if total_volname_count = 0 then do; 197 call com_err_ (0, myname, 198 "Volume ^a not found in any volog specified in pvolog", volname); 199 call rebuild_pvolog (volname); 200 end; 201 finish: /* cleanup - unlock and terminate */ 202 call finish_; 203 return; 204 205 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 206 207 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 208 209 210 finish_: proc; 211 if pvlp ^= null then call set_lock_$unlock (pvolog.lock, ignore); 212 if pvlp ^= null then call hcs_$terminate_noname (pvlp, ignore); 213 if bvlp ^= null then call set_lock_$unlock (backup_volume_log.lock, ignore); 214 if bvlp ^= null then call hcs_$terminate_noname (bvlp, ignore); 215 216 end finish_; 217 218 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 219 220 221 find_pvolog_and_lock: proc (volname); 222 dcl volname char (*); 223 dcl pvolog_name char (32); 224 found = "0"b; 225 pvlp = null; 226 call suffixed_name_$make (volname, "pvolog", pvolog_name, code); 227 if code ^= 0 then do; 228 call com_err_ (code, myname, "Unable to construct pvolog name from ^a", volname); 229 goto finish; 230 end; 231 call hcs_$initiate (pvolog_dir, pvolog_name, "", 0, 0, pvlp, code); 232 if pvlp = null then return; 233 found = "1"b; 234 call set_lock_$lock (pvolog.lock, lock_wait_time, code); 235 if code ^= 0 then do; 236 if code = error_table_$invalid_lock_reset then code = 0; 237 else do; 238 call com_err_ (code, myname, "Unable to lock volume log ^a", pvolog_name); 239 goto finish; 240 end; 241 end; 242 end find_pvolog_and_lock; 243 244 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 245 246 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 247 248 249 find_volog_and_lock: proc (volname); 250 dcl volname char (*); 251 dcl volog_name char (32); 252 found = "0"b; 253 bvlp = null; 254 call suffixed_name_$make (volname, "volog", volog_name, code); 255 if code ^= 0 then do; 256 call com_err_ (code, myname, "Unable to construct volog name from ^a", volname); 257 goto finish; 258 end; 259 call hcs_$initiate (volog_dir, volog_name, "", 0, 0, bvlp, code); 260 if bvlp = null then return; 261 found = "1"b; 262 call set_lock_$lock (backup_volume_log.lock, lock_wait_time, code); 263 if code ^= 0 then do; 264 if code = error_table_$invalid_lock_reset then code = 0; 265 else do; 266 call com_err_ (code, myname, "Unable to lock volume log ^a", volog_name); 267 goto finish; 268 end; 269 end; 270 if (backup_volume_log.header.pattern1 ^= pattern1) | (backup_volume_log.header.pattern2 ^= pattern2) 271 | (backup_volume_log.header.pattern3 ^= pattern3) then do; 272 code = -1; /* junk */ 273 call com_err_ (0, myname, "Volume log ^a^[>^]^a header patterns are not correct.", 274 volog_dir, (volog_dir ^= ">"), volog_name); 275 return; 276 277 end; 278 if (backup_volume_log.version = backup_volume_log_version_1) | 279 (backup_volume_log.version = backup_volume_log_version_2) | 280 (backup_volume_log.version = backup_volume_log_version_3) then ; 281 else do; 282 code = error_table_$unimplemented_version; 283 call com_err_ (code, myname, "^a^[>^]^a.", volog_dir, (volog_dir ^= ">"), volog_name); 284 return; 285 end; 286 287 end find_volog_and_lock; 288 289 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 290 291 292 count_volname: proc (volname); 293 dcl volname char (*); 294 volname_count = 0; 295 do bvx = 1 to backup_volume_log.next; 296 bvlep = addr (backup_volume_log.array (bvx)); 297 if volname = bvle.volname then do; 298 volname_count = volname_count + 1; 299 volume_pool_type = bvle.dump_type; 300 end; 301 end; 302 303 end count_volname; 304 305 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 306 307 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 308 309 310 rebuild_pvolog: proc (volname); 311 dcl volname char (*); 312 call com_err_ (0, myname, "Forcing rebuild of ^a.pvolog", volname); 313 call rebuild_pvolog_ (volog_dir, volname, error_rnt, pvlp, code); 314 if code ^= 0 then do; 315 call com_err_ (code, myname, "Rebuild failed"); 316 goto finish; 317 end; 318 if pvlp ^= null then do; 319 if volume_pool_state ^= allocated then 320 call manage_volume_pool_$allocate (vpp, error_rnt, volname, ascii_states (volume_pool_type), "", code); 321 if code ^= 0 then 322 call error_rnt (code, myname, "Unable to mark ^a allocated in volume pool", volname); 323 end; 324 else do; 325 call delete_contents_segs (volname); 326 if volume_pool_state ^= free then do; 327 call manage_volume_pool_$free (vpp, error_rnt, volname, code); 328 if code ^= 0 then 329 call error_rnt (code, myname, "Unable to mark ^a free in volume pool", volname); 330 end; 331 end; 332 goto finish; 333 end rebuild_pvolog; 334 335 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 336 337 delete_contents_segs: proc (volname); 338 dcl seg_type char (32); 339 dcl volname char (*); 340 do seg_type = "contents", "contents_names"; 341 call suffixed_name_$make (volname, seg_type, ename, code); 342 if code ^= 0 then do; 343 call error_rnt (code, myname, "Unable to create ^a name from ^a", seg_type, volname); 344 return; 345 end; 346 call delete_$path (contents_dir, ename, "100111"b, "", code); 347 if code ^= 0 & code ^= error_table_$noentry then 348 call error_rnt (code, myname, "Unable to delete ^a>^a ", contents_dir, ename); 349 end; 350 end delete_contents_segs; 351 352 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 353 354 cleanup_volog: proc; 355 call set_lock_$unlock (backup_volume_log.lock, ignore); 356 call hcs_$terminate_noname (bvlp, ignore); 357 bvlp = null; 358 359 end cleanup_volog; 360 1 1 /* BEGIN INCLUDE FILE ... backup_volume_log.incl.pl1 ... Feb 1976 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(88-03-03,GWMay), approve(89-10-03,MCR8135), 1 6* audit(89-10-04,Beattie), install(89-10-10,MR12.3-1089): 1 7* Added values for storing the number of incremental and consolidated dump 1 8* sets to retain in the volume log. Incremented version number to 3. 1 9* END HISTORY COMMENTS */ 1 10 1 11 1 12 /* Modified: 3/7/84 by GA Texada to change to version 2 */ 1 13 dcl bvlp ptr; 1 14 dcl bvlep ptr; 1 15 1 16 dcl backup_volume_log_version_1 fixed bin static init (1) options (constant); 1 17 dcl backup_volume_log_version_2 fixed bin init(2) int static options(constant); 1 18 dcl backup_volume_log_version_3 fixed bin init(3) int static options(constant); 1 19 1 20 dcl 1 backup_volume_log based (bvlp) aligned, 1 21 2 header like backup_volume_header aligned, 1 22 2 info like backup_pvol_info aligned, 1 23 2 version fixed bin, /* version number */ 1 24 2 lock bit (36), /* shared data base */ 1 25 2 pvname char (32), /* physical volume name */ 1 26 2 pvid bit (36), /* physical volume id */ 1 27 2 next fixed bin, /* next available dump record */ 1 28 2 reload_groups fixed bin, /* number of reload groups in log */ 1 29 2 purge_control (3), /* control selective purging by dump type */ 1 30 3 group (36) bit (1) unaligned, /* up to 36 reload groups */ 1 31 2 disk_type fixed bin unal, /* type of disk drive */ 1 32 2 half_word_pad bit(18) unal, /* MBZ */ 1 33 2 rpv_pvid bit(36), /* pvid of this volumes RPV */ 1 34 2 Nsaved_incr_sets fixed bin, /* number of incr cycles to retain */ 1 35 2 Nsaved_cons_sets fixed bin, /* number of incr cycles to retain */ 1 36 2 pad (31) bit (36), /* for future expansion (MBZ) */ 1 37 2 array (1:1 refer (backup_volume_log.next)) like bvle aligned; 1 38 1 39 dcl 1 bvle based (bvlep) aligned, 1 40 2 cycle_uid bit (36), /* uid of this dump cycle */ 1 41 2 dump_type fixed bin, /* type of dump */ 1 42 2 volname char (32), /* name of output volume */ 1 43 2 open_time fixed bin (71), /* opening time of dump pass on this physical volume */ 1 44 2 close_time fixed bin (71), /* ending time of dump pass */ 1 45 2 volid bit (36), /* uid of output volume */ 1 46 2 io_module char (32), /* outer module name that wrote this volume */ 1 47 2 flags, /* flags */ 1 48 3 purge_scan_logged bit (1) unaligned, /* if on object looged during purge scan */ 1 49 3 pad1 bit (35) unaligned, 1 50 2 pad (7) bit (36), /* for future expansion */ 1 51 (2 dir_num fixed bin, /* number of dirs dumped on this pass */ 1 52 2 dir_rec fixed bin, /* number of records of dirs */ 1 53 2 seg_num fixed bin, /* number of segs dumped on this pass */ 1 54 2 seg_rec fixed bin) unaligned; /* number of records of segs */ 1 55 1 56 /* END INCLUDE FILE ... backup_volume_log */ 361 362 2 1 /* BEGIN INCLUDE FILE ... pvolog.incl.pl1 9/76 */ 2 2 2 3 dcl pvlp ptr; 2 4 dcl pvlep ptr; 2 5 2 6 dcl pvolog_version_1 fixed bin int static init (1) options (constant); 2 7 2 8 dcl 1 pvolog aligned based (pvlp), 2 9 2 lock bit (36), 2 10 2 version fixed bin, 2 11 2 dump_type fixed bin, 2 12 2 mount_time fixed bin (71), 2 13 2 volid bit (36), 2 14 2 next fixed bin, 2 15 2 in_use fixed bin, 2 16 2 array (1:1 refer (pvolog.next)) like pvle aligned; 2 17 2 18 dcl 1 pvle based (pvlep) aligned, 2 19 2 pvname char (32), 2 20 2 invocation_count fixed bin; 2 21 2 22 /* END INCLUDE FILE ... pvolog.incl.pl1 */ 363 3 1 /* BEGIN INCLUDE FILE ... backup_pvol_info.incl.pl1 */ 3 2 3 3 dcl bpvip ptr; 3 4 3 5 dcl 1 backup_pvol_info based (bpvip) aligned, 3 6 2 label like label aligned, 3 7 2 n_vtoce fixed bin, 3 8 2 n_free_vtoce fixed bin, 3 9 2 n_rec fixed bin, 3 10 2 baseadd fixed bin, 3 11 2 n_free_rec fixed bin; 3 12 3 13 /* END INCLUDE FILE ... backup_pvol_info.incl.pl1 */ 364 365 4 1 /* BEGIN INCLUDE FILE ... fs_vol_label.incl.pl1 .. last modified January 1982 for new volume map format */ 4 2 4 3 /****^ HISTORY COMMENTS: 4 4* 1) change(86-04-10,Fawcett), approve(86-04-10,MCR7383), 4 5* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098): 4 6* Add the subvolume info. 4 7* 2) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 4 8* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 4 9* Added inconsistent_dbm bit used to determine consistency of volume 4 10* dumper bit maps. 4 11* END HISTORY COMMENTS */ 4 12 4 13 /* This is the label at fixed location of each physical volume. Length 1 page */ 4 14 /* Note: fsout_vol clears pad fields before writing the label */ 4 15 4 16 dcl labelp ptr; 4 17 4 18 dcl 1 label based (labelp) aligned, 4 19 4 20 /* First comes data not used by Multics.. for compatibility with GCOS */ 4 21 4 22 2 gcos (5*64) fixed bin, 4 23 4 24 /* Now we have the Multics label */ 4 25 4 26 2 Multics char (32) init ("Multics Storage System Volume"), /* Identifier */ 4 27 2 version fixed bin, /* Version 1 */ 4 28 2 mfg_serial char (32), /* Manufacturer's serial number */ 4 29 2 pv_name char (32), /* Physical volume name. */ 4 30 2 lv_name char (32), /* Name of logical volume for pack */ 4 31 2 pvid bit (36), /* Unique ID of this pack */ 4 32 2 lvid bit (36), /* unique ID of its logical vol */ 4 33 2 root_pvid bit (36), /* unique ID of the pack containing the root. everybody must agree. */ 4 34 2 time_registered fixed bin (71), /* time imported to system */ 4 35 2 n_pv_in_lv fixed bin, /* # phys volumes in logical */ 4 36 2 vol_size fixed bin, /* total size of volume, in records */ 4 37 2 vtoc_size fixed bin, /* number of recs in fixed area + vtoc */ 4 38 2 not_used bit (1) unal, /* used to be multiple_class */ 4 39 2 private bit (1) unal, /* TRUE if was registered as private */ 4 40 2 inconsistent_dbm bit (1) unal, /* TRUE if ESD-less crash */ 4 41 2 flagpad bit (33) unal, 4 42 2 max_access_class bit (72), /* Maximum access class for stuff on volume */ 4 43 2 min_access_class bit (72), /* Minimum access class for stuff on volume */ 4 44 2 password bit (72), /* not yet used */ 4 45 2 number_of_sv fixed bin, /* if = 0 not a subvolume else the number of svs */ 4 46 2 this_sv fixed bin, /* what subvolume number it is */ 4 47 2 sub_vol_name char (1), /* what subvolume name (a b c d) it is */ 4 48 2 pad1 (13) fixed bin, 4 49 2 time_mounted fixed bin (71), /* time mounted */ 4 50 2 time_map_updated fixed bin (71), /* time vmap known good */ 4 51 4 52 /* The next two words overlay time_unmounted on pre-MR10 systems. This 4 53* forces a salvage if an MR10 pack is mounted on an earlier system. 4 54* */ 4 55 2 volmap_version fixed bin, /* version of volume map (currently 1) */ 4 56 2 pad6 fixed bin, 4 57 4 58 2 time_salvaged fixed bin (71), /* time salvaged */ 4 59 2 time_of_boot fixed bin (71), /* time of last bootload */ 4 60 2 time_unmounted fixed bin (71), /* time unmounted cleanly */ 4 61 2 last_pvtx fixed bin, /* pvtx in that PDMAP */ 4 62 2 pad1a (2) fixed bin, 4 63 2 err_hist_size fixed bin, /* size of pack error history */ 4 64 2 time_last_dmp (3) fixed bin (71), /* time last completed dump pass started */ 4 65 2 time_last_reloaded fixed bin (71), /* what it says */ 4 66 2 pad2 (40) fixed bin, 4 67 2 root, 4 68 3 here bit (1), /* TRUE if the root is on this pack */ 4 69 3 root_vtocx fixed bin (35), /* VTOC index of root, if it is here */ 4 70 3 shutdown_state fixed bin, /* Status of hierarchy */ 4 71 3 pad7 bit (1) aligned, 4 72 3 disk_table_vtocx fixed bin, /* VTOC index of disk table on RPV */ 4 73 3 disk_table_uid bit (36) aligned, /* UID of disk table */ 4 74 3 esd_state fixed bin, /* State of esd */ 4 75 2 volmap_record fixed bin, /* Begin record of volume map */ 4 76 2 size_of_volmap fixed bin, /* Number of records in volume map */ 4 77 2 vtoc_map_record fixed bin, /* Begin record of VTOC map */ 4 78 2 size_of_vtoc_map fixed bin, /* Number of records in VTOC map */ 4 79 2 volmap_unit_size fixed bin, /* Number of words per volume map section */ 4 80 2 vtoc_origin_record fixed bin, /* Begin record of VTOC */ 4 81 2 dumper_bit_map_record fixed bin, /* Begin record of dumper bit-map */ 4 82 2 vol_trouble_count fixed bin, /* Count of inconsistencies found since salvage */ 4 83 2 pad3 (52) fixed bin, 4 84 2 nparts fixed bin, /* Number of special partitions on pack */ 4 85 2 parts (47), 4 86 3 part char (4), /* Name of partition */ 4 87 3 frec fixed bin, /* First record */ 4 88 3 nrec fixed bin, /* Number of records */ 4 89 3 pad5 fixed bin, 4 90 2 pad4 (5*64) fixed bin; 4 91 4 92 dcl Multics_ID_String char (32) init ("Multics Storage System Volume") static; 4 93 4 94 /* END INCLUDE FILE fs_vol_label.incl.pl1 */ 366 367 5 1 /* BEGIN INCLUDE FILE ... backup_volume_header ... Feb 1976 */ 5 2 5 3 dcl hdp ptr; /* ptr to header */ 5 4 5 5 dcl 1 backup_volume_header based (hdp) aligned, 5 6 2 pattern1 bit (36), /* unique word 1 */ 5 7 2 rec1_type fixed bin, /* record 1 type */ 5 8 2 rec1_len fixed bin, /* length in chars */ 5 9 2 pattern2 bit (36), /* unique word 2 */ 5 10 2 rec2_type fixed bin, /* record 2 type */ 5 11 2 rec2_len fixed bin, /* length in chars */ 5 12 2 pattern3 bit (36), /* unique word 3 */ 5 13 2 time_dumped bit (36); /* dump time of this record */ 5 14 5 15 dcl vtoce_type fixed bin static init (1) options (constant); /* type code for vtoce */ 5 16 dcl dir_type fixed bin static init (2) options (constant); /* type code for directory */ 5 17 dcl seg_type fixed bin static init (3) options (constant); /* type code for segment */ 5 18 dcl null_type fixed bin static init (4) options (constant); /* type code for null record */ 5 19 dcl volume_log_type fixed bin static init (5) options (constant); /* type code for volume log */ 5 20 dcl prev_output_log_type fixed bin static init (6) options (constant); /* type code for prev output log */ 5 21 dcl contents_type fixed bin static init (7) options (constant); /* type code for contents segment of previous volume */ 5 22 dcl info_type fixed bin static init (8) options (constant); /* type code for info structure */ 5 23 5 24 dcl pattern1 bit (36) int static init ("110111000011001100011101101010100101"b) options (constant); 5 25 dcl pattern2 bit (36) int static init ("101001010101101110001100110000111011"b) options (constant); 5 26 dcl pattern3 bit (36) int static init ("001000111100110011100010010101011010"b) options (constant); 5 27 5 28 /* END INCLUDE FILE ... backup_volume_header */ 368 6 1 /* BEGIN INCLUDE FILE ... backup_static_variables.incl.pl1 ... March 1976 */ 6 2 6 3 6 4 dcl incr fixed bin init (1) internal static options (constant); /* incremental dump mode */ 6 5 dcl cons fixed bin init (2) internal static options (constant); /* consolidated dump mode */ 6 6 dcl comp fixed bin init (3) internal static options (constant); /* complete dump mode */ 6 7 dcl backup_version_1 fixed bin init (1) static internal options (constant); /* backup_version_1 of input/output structures */ 6 8 6 9 6 10 6 11 /* END INCLUDE FILE ... backup_static_variables.incl.pl1 */ 369 370 371 end volume_cross_check; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/10/89 1355.4 volume_cross_check.pl1 >special_ldd>install>MR12.3-1089>volume_cross_check.pl1 361 1 10/10/89 1357.9 backup_volume_log.incl.pl1 >special_ldd>install>MR12.3-1089>backup_volume_log.incl.pl1 363 2 03/26/81 1320.5 pvolog.incl.pl1 >ldd>include>pvolog.incl.pl1 364 3 06/07/77 1233.6 backup_pvol_info.incl.pl1 >ldd>include>backup_pvol_info.incl.pl1 366 4 07/21/88 2036.0 fs_vol_label.incl.pl1 >ldd>include>fs_vol_label.incl.pl1 368 5 09/05/80 1136.5 backup_volume_header.incl.pl1 >ldd>include>backup_volume_header.incl.pl1 369 6 09/05/80 1136.5 backup_static_variables.incl.pl1 >ldd>include>backup_static_variables.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. abs builtin function dcl 78 ref 185 185 ac 000502 automatic fixed bin(17,0) dcl 42 set ref 95* 96 97* 109* 109 addr builtin function dcl 78 ref 170 296 allocated constant fixed bin(17,0) initial dcl 49 ref 133 154 319 arg based char packed unaligned dcl 41 set ref 92 93 99* 102 102 103 103 104 104 106* argl 000477 automatic fixed bin(17,0) dcl 42 set ref 87* 92 93 97* 99 99 102 102 103 103 104 104 106 106 argp 000120 automatic pointer dcl 34 set ref 87* 92 93 97* 99 102 102 103 103 104 104 106 array 11 based structure array level 2 in structure "pvolog" dcl 2-8 in procedure "volume_cross_check" set ref 170 array 2100 based structure array level 2 in structure "backup_volume_log" dcl 1-20 in procedure "volume_cross_check" set ref 296 ascii_states 000003 constant char(4) initial array packed unaligned dcl 51 set ref 319* backup_pvol_info based structure level 1 dcl 3-5 backup_volume_header based structure level 1 dcl 5-5 backup_volume_log based structure level 1 dcl 1-20 backup_volume_log_version_1 constant fixed bin(17,0) initial dcl 1-16 ref 278 backup_volume_log_version_2 constant fixed bin(17,0) initial dcl 1-17 ref 278 backup_volume_log_version_3 constant fixed bin(17,0) initial dcl 1-18 ref 278 brief 000300 automatic bit(1) packed unaligned dcl 39 set ref 83* 104* 185 bvle based structure level 1 dcl 1-39 bvlep 000524 automatic pointer dcl 1-14 set ref 296* 297 299 bvlp 000522 automatic pointer dcl 1-13 set ref 80* 213 213 214 214* 253* 259* 260 262 270 270 270 278 278 278 295 296 355 356* 357* bvx 000500 automatic fixed bin(17,0) dcl 42 set ref 295* 296* cleanup 000510 stack reference condition dcl 53 ref 119 code 000503 automatic fixed bin(35,0) dcl 43 set ref 86* 87* 88 97* 98 99* 115* 116 117* 118 134* 174* 177 226* 227 228* 231* 234* 235 236 236* 238* 254* 255 256* 259* 262* 263 264 264* 266* 272* 282* 283* 313* 314 315* 319* 321 321* 327* 328 328* 341* 342 343* 346* 347 347 347* com_err_ 000010 constant entry external dcl 55 ref 82 89 99 106 126 134 139 146 150 161 174 185 197 228 238 256 266 273 283 312 315 comment 000253 automatic char(64) packed unaligned dcl 37 set ref 117* 121 122 123 124 124 126* comp constant fixed bin(17,0) initial dcl 6-6 ref 123 cons constant fixed bin(17,0) initial dcl 6-5 ref 122 contents_dir 000425 automatic char(168) packed unaligned dcl 40 set ref 113* 346* 347* cu_$arg_count 000012 constant entry external dcl 56 ref 94 cu_$arg_ptr 000014 constant entry external dcl 57 ref 87 97 delete_$path 000016 constant entry external dcl 58 ref 346 dump_type 2 based fixed bin(17,0) level 2 in structure "pvolog" dcl 2-8 in procedure "volume_cross_check" ref 160 165 dump_type 1 based fixed bin(17,0) level 2 in structure "bvle" dcl 1-39 in procedure "volume_cross_check" ref 299 ename 000110 automatic char(32) packed unaligned dcl 33 set ref 341* 346* 347* error_rnt 000516 automatic entry variable dcl 59 set ref 82* 115* 117* 163* 313* 319* 321 327* 328 343 347 error_table_$badopt 000050 external static fixed bin(35,0) dcl 73 set ref 106* error_table_$invalid_lock_reset 000052 external static fixed bin(35,0) dcl 74 ref 236 264 error_table_$noentry 000054 external static fixed bin(35,0) dcl 75 ref 347 error_table_$unimplemented_version 000056 external static fixed bin(35,0) dcl 76 ref 282 found 000276 automatic bit(1) packed unaligned dcl 39 set ref 83* 131 173 224* 233* 252* 261* free constant fixed bin(17,0) initial dcl 47 ref 132 145 164 326 get_wdir_ 000020 constant entry external dcl 60 ref 102 hcs_$initiate 000022 constant entry external dcl 61 ref 231 259 hcs_$terminate_noname 000024 constant entry external dcl 62 ref 212 214 356 header based structure level 2 dcl 1-20 ignore 000504 automatic fixed bin(35,0) dcl 43 set ref 163* 211* 212* 213* 214* 355* 356* in_use 10 based fixed bin(17,0) level 2 dcl 2-8 ref 149 incr constant fixed bin(17,0) initial dcl 6-4 ref 121 invocation_count 10 based fixed bin(17,0) level 2 dcl 2-18 ref 171 184 185 185 ioa_ 000026 constant entry external dcl 63 ref 120 label based structure level 1 dcl 4-18 lock based bit(36) level 2 in structure "pvolog" dcl 2-8 in procedure "volume_cross_check" set ref 211* 234* lock 2016 based bit(36) level 2 in structure "backup_volume_log" dcl 1-20 in procedure "volume_cross_check" set ref 213* 262* 355* lock_wait_time 000016 constant fixed bin(17,0) initial dcl 46 set ref 234* 262* long 000277 automatic bit(1) packed unaligned dcl 39 set ref 83* 103* 120 manage_volume_pool_$allocate 000030 constant entry external dcl 64 ref 319 manage_volume_pool_$free 000032 constant entry external dcl 65 ref 163 327 manage_volume_pool_$set_pool_path 000034 constant entry external dcl 66 ref 115 manage_volume_pool_$status 000036 constant entry external dcl 67 ref 117 myname 000006 constant char(32) initial packed unaligned dcl 50 set ref 89* 89* 99* 106* 126* 134* 139* 146* 150* 161* 174* 185* 197* 228* 238* 256* 266* 273* 283* 312* 315* 321* 328* 343* 347* narg 000250 automatic fixed bin(17,0) dcl 36 set ref 94* 96 new_pool_path 000124 automatic char(168) packed unaligned dcl 35 set ref 114* 115* next 2030 based fixed bin(17,0) level 2 in structure "backup_volume_log" dcl 1-20 in procedure "volume_cross_check" ref 295 next 7 based fixed bin(17,0) level 2 in structure "pvolog" dcl 2-8 in procedure "volume_cross_check" ref 169 null builtin function dcl 78 ref 80 211 212 213 214 225 232 253 260 318 357 olx 000501 automatic fixed bin(17,0) dcl 42 set ref 169* 170* pattern1 000002 constant bit(36) initial packed unaligned dcl 5-24 in procedure "volume_cross_check" ref 270 pattern1 based bit(36) level 3 in structure "backup_volume_log" dcl 1-20 in procedure "volume_cross_check" ref 270 pattern2 000001 constant bit(36) initial packed unaligned dcl 5-25 in procedure "volume_cross_check" ref 270 pattern2 3 based bit(36) level 3 in structure "backup_volume_log" dcl 1-20 in procedure "volume_cross_check" ref 270 pattern3 000000 constant bit(36) initial packed unaligned dcl 5-26 in procedure "volume_cross_check" ref 270 pattern3 6 based bit(36) level 3 in structure "backup_volume_log" dcl 1-20 in procedure "volume_cross_check" ref 270 pvle based structure level 1 dcl 2-18 pvlep 000530 automatic pointer dcl 2-4 set ref 170* 171 172 174 184 185 185 185 pvlp 000526 automatic pointer dcl 2-3 set ref 80* 149 160 165 169 170 211 211 212 212* 225* 231* 232 234 313* 318 pvname based char(32) level 2 dcl 2-18 set ref 172 174* 185* pvolog based structure level 1 dcl 2-8 pvolog_dir 000353 automatic char(168) packed unaligned dcl 40 set ref 112* 231* pvolog_name 000542 automatic char(32) packed unaligned dcl 223 set ref 226* 231* 238* rebuild_pvolog_ 000040 constant entry external dcl 68 ref 313 reserved constant fixed bin(17,0) initial dcl 48 ref 137 149 153 rtrim builtin function dcl 78 ref 112 113 114 seg_type 000614 automatic char(32) packed unaligned dcl 338 set ref 340* 341* 343* set_lock_$lock 000042 constant entry external dcl 69 ref 234 262 set_lock_$unlock 000044 constant entry external dcl 70 ref 211 213 355 substr builtin function dcl 78 ref 92 suffixed_name_$make 000046 constant entry external dcl 71 ref 226 254 341 sys_dir 000176 automatic char(168) packed unaligned dcl 35 set ref 81* 102* 111 112 113 114 total_volname_count 000251 automatic fixed bin(17,0) dcl 36 set ref 168* 183* 183 196 version 2015 based fixed bin(17,0) level 2 dcl 1-20 ref 278 278 278 volname 2 based char(32) level 2 in structure "bvle" dcl 1-39 in procedure "volume_cross_check" ref 297 volname 000100 automatic char(32) packed unaligned dcl 33 in procedure "volume_cross_check" set ref 93* 117* 120* 126* 130* 134* 135* 139* 146* 147* 150* 151* 161* 163* 166* 182* 185* 188* 197* 199* volname parameter char packed unaligned dcl 222 in procedure "find_pvolog_and_lock" set ref 221 226* 228* volname parameter char packed unaligned dcl 339 in procedure "delete_contents_segs" set ref 337 341* 343* volname parameter char packed unaligned dcl 250 in procedure "find_volog_and_lock" set ref 249 254* 256* volname parameter char packed unaligned dcl 293 in procedure "count_volname" ref 292 297 volname parameter char packed unaligned dcl 311 in procedure "rebuild_pvolog" set ref 310 312* 313* 319* 321* 325* 327* 328* volname_count 000252 automatic fixed bin(17,0) dcl 36 set ref 183 184 185 185 294* 298* 298 volog_dir 000301 automatic char(168) packed unaligned dcl 40 set ref 111* 259* 273* 273 283* 283 313* volog_name 000560 automatic char(32) packed unaligned dcl 251 set ref 254* 259* 266* 273* 283* volume_pool_state 000505 automatic fixed bin(17,0) dcl 44 set ref 85* 117* 132 133 137 145 149 153 154 164* 319 326 volume_pool_time 000274 automatic fixed bin(71,0) dcl 38 set ref 84* 117* volume_pool_type 000506 automatic fixed bin(17,0) dcl 44 set ref 121* 122* 123* 160 165* 299* 319 vpp 000122 automatic pointer dcl 34 set ref 115* 117* 163* 319* 327* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Multics_ID_String internal static char(32) initial packed unaligned dcl 4-92 backup_version_1 internal static fixed bin(17,0) initial dcl 6-7 bpvip automatic pointer dcl 3-3 contents_type internal static fixed bin(17,0) initial dcl 5-21 dir_type internal static fixed bin(17,0) initial dcl 5-16 hdp automatic pointer dcl 5-3 info_type internal static fixed bin(17,0) initial dcl 5-22 labelp automatic pointer dcl 4-16 null_type internal static fixed bin(17,0) initial dcl 5-18 prev_output_log_type internal static fixed bin(17,0) initial dcl 5-20 pvolog_version_1 internal static fixed bin(17,0) initial dcl 2-6 seg_type internal static fixed bin(17,0) initial dcl 5-17 volume_log_type internal static fixed bin(17,0) initial dcl 5-19 vtoce_type internal static fixed bin(17,0) initial dcl 5-15 NAMES DECLARED BY EXPLICIT CONTEXT. argerr 000567 constant label dcl 89 ref 92 cleanup_volog 003605 constant entry internal dcl 354 ref 178 187 191 count_volname 003000 constant entry internal dcl 292 ref 182 delete_contents_segs 003400 constant entry internal dcl 337 ref 325 find_pvolog_and_lock 002163 constant entry internal dcl 221 ref 130 find_volog_and_lock 002410 constant entry internal dcl 249 ref 172 finish 002057 constant label dcl 201 ref 100 107 116 118 124 128 132 137 153 189 229 239 257 267 316 332 finish_ 002065 constant entry internal dcl 210 ref 119 201 freeit 001612 constant label dcl 163 ref 141 next 002020 constant label dcl 193 ref 175 179 rebuild_pvolog 003044 constant entry internal dcl 310 ref 135 147 151 166 188 199 unknown_state 001415 constant label dcl 139 ref 156 volume_cross_check 000521 constant entry external dcl 22 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4132 4212 3654 4142 Length 4576 3654 60 350 255 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME volume_cross_check 770 external procedure is an external procedure. on unit on line 119 64 on unit finish_ 70 internal procedure is called by several nonquick procedures. find_pvolog_and_lock internal procedure shares stack frame of external procedure volume_cross_check. find_volog_and_lock internal procedure shares stack frame of external procedure volume_cross_check. count_volname internal procedure shares stack frame of external procedure volume_cross_check. rebuild_pvolog internal procedure shares stack frame of external procedure volume_cross_check. delete_contents_segs internal procedure shares stack frame of external procedure volume_cross_check. cleanup_volog internal procedure shares stack frame of external procedure volume_cross_check. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME volume_cross_check 000100 volname volume_cross_check 000110 ename volume_cross_check 000120 argp volume_cross_check 000122 vpp volume_cross_check 000124 new_pool_path volume_cross_check 000176 sys_dir volume_cross_check 000250 narg volume_cross_check 000251 total_volname_count volume_cross_check 000252 volname_count volume_cross_check 000253 comment volume_cross_check 000274 volume_pool_time volume_cross_check 000276 found volume_cross_check 000277 long volume_cross_check 000300 brief volume_cross_check 000301 volog_dir volume_cross_check 000353 pvolog_dir volume_cross_check 000425 contents_dir volume_cross_check 000477 argl volume_cross_check 000500 bvx volume_cross_check 000501 olx volume_cross_check 000502 ac volume_cross_check 000503 code volume_cross_check 000504 ignore volume_cross_check 000505 volume_pool_state volume_cross_check 000506 volume_pool_type volume_cross_check 000516 error_rnt volume_cross_check 000522 bvlp volume_cross_check 000524 bvlep volume_cross_check 000526 pvlp volume_cross_check 000530 pvlep volume_cross_check 000542 pvolog_name find_pvolog_and_lock 000560 volog_name find_volog_and_lock 000614 seg_type delete_contents_segs THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp call_ent_var_desc call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op shorten_stack ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ cu_$arg_count cu_$arg_ptr delete_$path get_wdir_ hcs_$initiate hcs_$terminate_noname ioa_ manage_volume_pool_$allocate manage_volume_pool_$free manage_volume_pool_$set_pool_path manage_volume_pool_$status rebuild_pvolog_ set_lock_$lock set_lock_$unlock suffixed_name_$make THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$invalid_lock_reset error_table_$noentry error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 22 000520 80 000526 81 000531 82 000534 83 000540 84 000543 85 000545 86 000546 87 000547 88 000565 89 000567 90 000617 92 000620 93 000625 94 000631 95 000640 96 000642 97 000645 98 000662 99 000664 100 000717 102 000720 103 000742 104 000755 106 000770 107 001022 109 001023 110 001024 111 001025 112 001030 113 001056 114 001074 115 001112 116 001140 117 001142 118 001203 119 001205 120 001227 121 001254 122 001263 123 001272 124 001301 126 001311 128 001345 130 001346 131 001351 132 001353 133 001356 134 001360 135 001407 136 001412 137 001413 139 001415 141 001445 143 001446 145 001447 146 001452 147 001502 148 001505 149 001506 150 001513 151 001543 152 001546 153 001547 154 001552 156 001555 160 001556 161 001562 163 001612 164 001637 165 001641 166 001644 168 001647 169 001650 170 001661 171 001664 172 001666 173 001674 174 001676 175 001726 177 001727 178 001731 179 001732 182 001733 183 001736 184 001740 185 001743 187 002012 188 002013 189 002016 191 002017 193 002020 196 002022 197 002024 199 002054 201 002057 203 002063 210 002064 211 002072 212 002107 213 002125 214 002144 216 002162 221 002163 224 002174 225 002175 226 002177 227 002230 228 002232 229 002264 231 002265 232 002327 233 002334 234 002336 235 002351 236 002353 238 002360 239 002406 242 002407 249 002410 252 002421 253 002422 254 002424 255 002455 256 002457 257 002511 259 002512 260 002554 261 002561 262 002563 263 002577 264 002601 266 002606 267 002634 270 002635 272 002647 273 002651 275 002716 278 002717 282 002727 283 002732 284 002776 287 002777 292 003000 294 003011 295 003012 296 003023 297 003027 298 003036 299 003037 301 003041 303 003043 310 003044 312 003055 313 003110 314 003143 315 003145 316 003174 318 003175 319 003201 321 003244 323 003277 325 003300 326 003312 327 003315 328 003344 332 003377 337 003400 340 003411 341 003416 342 003444 343 003446 344 003502 346 003503 347 003536 349 003575 350 003604 354 003605 355 003606 356 003620 357 003631 359 003633 ----------------------------------------------------------- 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