COMPILATION LISTING OF SEGMENT rmdb_salvage_db Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Multics Op. - System M Compiled on: 12/09/86 1236.5 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1986 * 4* * * 5* *********************************************************** */ 6 7 /* format: ^inddcls,^indattr,indnoniterend,^indnoniterdo,indend,tree,^case,insnl,comcol61,dclind5,declareind5,delnl */ 8 9 /*DESCRIPTION 10* This routine attempts to clean up after certain rmdb requests. It is only 11* called by the undo operation (when the database in marked inconsistent) 12* after the operation is undone. The purpose is to delete all the files 13* (relation.m or relation MSF/DMF) that have unique names. These strangely 14* named files are created by operations that cause the relation to be copied. 15**/ 16 17 /****^ HISTORY COMMENTS: 18* 1) change(86-01-27,Spitzer), approve(86-01-27,MCR7311), 19* audit(86-09-02,Blair), install(86-10-16,MR12.0-1187): 20* written 21* 2) change(86-11-03,Blair), approve(86-11-03,PBF7311), audit(86-12-01,Dupuis), 22* install(86-12-09,MR12.0-1237): 23* Take out the code that lets you roll the files forward when a new relation 24* has been created from the old during a delete or rename. We don't have 25* enough information to update the model properly even if the relations are 26* good, so we always have to roll back. 27* END HISTORY COMMENTS */ 28 29 rmdb_salvage_db: 30 proc (Idb_path); 31 32 db_path = Idb_path; 33 system_areap, status_area_ptr = get_system_free_area_ (); 34 35 star_names_ptr, star_entry_ptr = null; 36 dbm_ptr = null; 37 38 status_ptr = addr (sb); 39 status_branch.names_relp = "0"b; 40 41 on cleanup call cleaner; 42 43 call initiate_file_ (db_path, "db_model", RW_ACCESS, dbm_ptr, (0), code); 44 if code ^= 0 45 then return; 46 47 last_fi_ptr = null; 48 done = "0"b; 49 do fi_ptr = ptr (dbm_ptr, db_model.file_ptr) repeat ptr (dbm_ptr, file_info.fwd_ptr) 50 while ((rel (fi_ptr) ^= NULL_OFFSET) & (^done)); 51 if substr (file_info.file_name, 1, 1) = "!" 52 then done = "1"b; 53 else last_fi_ptr = fi_ptr; 54 end; /* do fi_ptr */ 55 56 if last_fi_ptr = null 57 then db_model.file_ptr = NULL_OFFSET; 58 else last_fi_ptr -> file_info.fwd_ptr = NULL_OFFSET; 59 60 call hcs_$star_ (db_path, "!*.m", star_ALL_ENTRIES, system_areap, star_entry_count, star_entry_ptr, 61 star_names_ptr, code); 62 if code ^= 0 63 then return; 64 65 do loop = 1 to star_entry_count; 66 call process_file (loop); 67 end; /* do loop */ 68 69 free star_names in (system_area); 70 star_names_ptr = null; 71 72 free star_entries in (system_area); 73 star_entry_ptr = null; 74 75 return; 76 77 process_file: 78 proc (star_idx); 79 80 dcl model_name char (32); 81 dcl relation_name char (32); 82 dcl star_idx fixed bin parameter; 83 84 model_name = star_names (star_entries (star_idx).nindex); 85 relation_name = before (model_name, "."); 86 87 /* Delete the uniquely named files. */ 88 call delete_file (relation_name); 89 call delete_file (model_name); 90 91 return; 92 93 delete_file: 94 proc (file_name); 95 96 dcl delete_$path entry (char (*), char (*), bit (36) aligned, char (*), fixed bin (35)); 97 dcl error_table_$unsupported_operation fixed bin (35) ext static; 98 dcl file_name char (*) parameter; 99 dcl fs_util_$delentry_file entry (char (*), char (*), fixed bin (35)); 100 101 call fs_util_$delentry_file (db_path, file_name, code); 102 if code = error_table_$unsupported_operation 103 then call delete_$path (db_path, file_name, "101111"b, myname, code); 104 105 return; 106 end delete_file; 107 108 end process_file; 109 110 cleaner: 111 proc; 112 113 dcl p ptr; 114 115 if star_names_ptr ^= null 116 then free star_names in (system_area); 117 if star_entry_ptr ^= null 118 then free star_entries in (system_area); 119 if status_branch.names_relp ^= "0"b 120 then free status_entry_names in (system_area); 121 122 do p = dbm_ptr; 123 if p ^= null 124 then call terminate_file_ (dbm_ptr, (0), TERM_FILE_TERM, (0)); 125 end; 126 127 return; 128 end cleaner; 129 1 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 1 2* 1 3* Values for the "access mode" argument so often used in hardcore 1 4* James R. Davis 26 Jan 81 MCR 4844 1 5* Added constants for SM access 4/28/82 Jay Pattin 1 6* Added text strings 03/19/85 Chris Jones 1 7**/ 1 8 1 9 1 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 1 11 dcl ( 1 12 N_ACCESS init ("000"b), 1 13 R_ACCESS init ("100"b), 1 14 E_ACCESS init ("010"b), 1 15 W_ACCESS init ("001"b), 1 16 RE_ACCESS init ("110"b), 1 17 REW_ACCESS init ("111"b), 1 18 RW_ACCESS init ("101"b), 1 19 S_ACCESS init ("100"b), 1 20 M_ACCESS init ("010"b), 1 21 A_ACCESS init ("001"b), 1 22 SA_ACCESS init ("101"b), 1 23 SM_ACCESS init ("110"b), 1 24 SMA_ACCESS init ("111"b) 1 25 ) bit (3) internal static options (constant); 1 26 1 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 1 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 1 29 1 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 1 31 static options (constant); 1 32 1 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 1 34 static options (constant); 1 35 1 36 dcl ( 1 37 N_ACCESS_BIN init (00000b), 1 38 R_ACCESS_BIN init (01000b), 1 39 E_ACCESS_BIN init (00100b), 1 40 W_ACCESS_BIN init (00010b), 1 41 RW_ACCESS_BIN init (01010b), 1 42 RE_ACCESS_BIN init (01100b), 1 43 REW_ACCESS_BIN init (01110b), 1 44 S_ACCESS_BIN init (01000b), 1 45 M_ACCESS_BIN init (00010b), 1 46 A_ACCESS_BIN init (00001b), 1 47 SA_ACCESS_BIN init (01001b), 1 48 SM_ACCESS_BIN init (01010b), 1 49 SMA_ACCESS_BIN init (01011b) 1 50 ) fixed bin (5) internal static options (constant); 1 51 1 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 130 131 2 1 /* BEGIN INCLUDE FILE mdbm_db_model.incl.pl1 -- jaw, 10/2/78 */ 2 2 2 3 2 4 /****^ HISTORY COMMENTS: 2 5* 1) change(79-02-01,Gray), approve(), audit(), install(): 2 6* modified to save space occupied by model 2 7* 2) change(80-11-03,Gray), approve(), audit(), install(): 2 8* to add mdbm_secured bit in db_model 2 9* 3) change(82-04-09,Davids), approve(), audit(), install(): 2 10* collapsed the following into an unused_offset array: 2 11* chng_before_path_ptr chng_err_path_ptr chng_after_path_ptr 2 12* copy_before_path_ptr copy_err_path_ptr copy_after_path_ptr 2 13* dsply_before_path_pt dsply_err_path_pt dsply_after_path_ptr 2 14* accs_before_path_ptr accs_err_path_ptr accs_after_path_ptr 2 15* unused_1 2 16* Also changed the name of unused_2 to restructuring_history_offset 2 17* and changed the comment on the changer structure to indicate 2 18* that it will contain on database creation information. 2 19* 4) change(82-04-14,Davids), approve(), audit(), install(): 2 20* used one of the unused_offsets to point to a message which indicates 2 21* why the db is inconsistent. The offset will be null when the db is created 2 22* and set the first time the message is used. this is so it will be 2 23* consistent with existing data bases. Also added the message structure. 2 24* 5) change(82-04-28,Davids), approve(), audit(), install(): 2 25* added the undo_request element to the message structure 2 26* 6) change(82-05-04,Davids), approve(), audit(), install(): 2 27* changed unused_offset (12) to last_restructruring_history_offset and 2 28* changed restructuring_history_offset to first_restructuring_history_offset 2 29* 7) change(82-08-19,Davids), approve(), audit(), install(): 2 30* changed the meaning of db_type from 1 => relational and 2 => CODASYL to 2 31* 1 => vfile database and 2 => page_file database. Up to this point all 2 32* database types were equal to 1. 2 33* 8) change(83-02-14,Davids), approve(), audit(), install(): 2 34* changed db_type from a fixed bin unal to a substructure of 18 bit (1) unal 2 35* flags. This will allow information about transactions and dm_file 2 36* concurrency to be independent of the db_type, i.e. vfile or dm_file. The 2 37* change is compatable with all datamodels created by the released version 2 38* of mrds. 2 39* 9) change(83-02-15,Davids), approve(), audit(), install(): 2 40* added the rollback_on flag to the db_type_flags since it appears that you 2 41* can have a dmfile database that requires transactions but does not have any 2 42* journalizing. Also switched the order of the transactions_needed and 2 43* concurrency_on flags - this makes the change compatable with existing 2 44* dmfile databases except when displaying the model since concurrency_on and 2 45* rollback_on will be off in the model even though the dmfile relations had 2 46* them on during creation. 2 47* 10) change(83-02-22,Kubicar), approve(), audit(), install(): 2 48* Removed ctl_file_path_ptr. 2 49* 11) change(85-11-08,Spitzer), approve(85-12-03,MCR7311), 2 50* audit(86-09-02,Blair), install(86-10-16,MR12.0-1187): 2 51* used 1 unused offset for unreferenced attribute linked lists in db_model, 2 52* 1 unused bit flag in domain_info to indicate an unreferenced domain, 1 bit 2 53* in the flag word for rmdb copying. 2 54* END HISTORY COMMENTS */ 2 55 2 56 2 57 /* this include file contains the structures that go into the make up 2 58* of the "db_model" segment in the model for the database. 2 59* in addition there file_model.m segments, 1 for each database file(see mdbm_file_model.incl.pl1) 2 60* 2 61* the db_model structure goes at the base of the segment, and contains items unique to 2 62* the whole databse. in addition, it has an area of size to fill the 2 63* rest of a segment, that holds the lists of files and domains in the database. 2 64* these lists are singly forward linked lists. all "pointers" in the database model 2 65* are maintained as offsets(bit (18)) from the base of the particular model segment 2 66* since actual pointers are process dependent on segment number. 2 67* the remaining structures are first a path_entry one to save pathnames in, 2 68* and the stack_item and constent structures, used to save a boolean 2 69* expression in polish form, with the stack represented by a linked list. 2 70* the final structure is one for identifying the status of version information */ 2 71 2 72 dcl 1 db_model aligned based (dbm_ptr),/* base of db_model segment, allocated once per database */ 2 73 2 version unal fixed bin, /* data base version, currently 4 */ 2 74 2 db_type_flags unal, 2 75 3 copy_good bit (1) unal, /* "1"b => copy of the db_model is the valid copy */ 2 76 3 unused (13) bit (1) unal, 2 77 3 rollback_on bit (1) unal, /* "1"b => before journaling is to be done */ 2 78 3 concurrency_on bit (1) unal, /* "1"b => dm_file concurrency is being used */ 2 79 3 transactions_needed bit (1) unal, /* "1"b => transactions are needed to reference data */ 2 80 3 vfile_type bit (1) unal, /* "1"b => vfile type relations, "0"b => dm_file type relations */ 2 81 2 uniq_sw_name char (32), /* per database unique attach switch name for files */ 2 82 2 consistant bit (1) unal, /* ON => correctly created/restructured database, ok to open */ 2 83 2 mdbm_secured bit (1) unal, /* on => database has been secured */ 2 84 2 reserved bit (34) unal, /* reserved for flags */ 2 85 2 blk_file_id_len unal fixed bin, /* no. bits required for blocked file id. */ 2 86 2 unblk_file_id_len unal fixed bin, /* number of file id bits, unblocked file */ 2 87 2 num_blk_files unal fixed bin, /* number of blocked files defined in db */ 2 88 2 num_unblk_files unal fixed bin, /* number of unblocked files defined in db */ 2 89 2 num_rels unal fixed bin, /* number of relations defined in db. */ 2 90 2 num_domains unal fixed bin, /* number of domains defined */ 2 91 2 num_dyn_links unal fixed bin, /* no. dynamic links defined */ 2 92 2 max_max_tuples unal fixed bin (35), /* maximum max_tuples across all files */ 2 93 2 pad_1 unal fixed bin (35), /* for future use */ 2 94 2 pad_2 unal fixed bin (35), /* for future use */ 2 95 2 version_ptr bit (18), /* offset to version structure */ 2 96 2 file_ptr unal bit (18), /* offset to first in threaded list of file_infos */ 2 97 2 domain_ptr unal bit (18), /* offset to first in list of domain_infos */ 2 98 2 unreferenced_attribute_ptr unal bit (18), /* offset to first in list of unreferenced attr_infos */ 2 99 2 unused_offsets (11) unal bit (18), /* extra offsets if needed */ 2 100 2 last_restructuring_history_offset unal bit (18), /* offset to last restructuring history entry */ 2 101 2 inconsistent_message_offset unal bit (18), /* offset to message indicating why db is inconsistent */ 2 102 2 first_restructuring_history_offset unal bit (18), /* offset to first restructuring history entry */ 2 103 2 changer_ptr unal bit (18), /* offset to information about db creation */ 2 104 2 dbm_area area (sys_info$max_seg_size - fixed (rel (addr (db_model.dbm_area))) - 1); 2 105 2 106 dcl dbm_ptr ptr; 2 107 2 108 /* the files in the database each have a file_info containing 2 109* their name, the file_model for each file is found by initiating the 2 110* segment "file_name.m" (i.e. the file's name with suffix ".m") 2 111* the file_info list is a singly linked list in definition order */ 2 112 2 113 dcl 1 file_info aligned based (fi_ptr), /* list of file names and numbers */ 2 114 2 file_name char (30), /* name of file */ 2 115 2 file_id bit (36), /* id number of file */ 2 116 2 fwd_ptr unal bit (18), /* thread to next in list */ 2 117 2 unused unal bit (18); /* for future expansion */ 2 118 2 119 dcl fi_ptr ptr; 2 120 2 121 /* each domain used in the database will have a domain info saved in the db_model 2 122* segment. it describes the domain of the given name, and it's options. 2 123* the domain_info's form a singly linked list in definition order */ 2 124 2 125 dcl 1 domain_info aligned based (di_ptr), /* one for each domain defined */ 2 126 2 name char (32), /* name of domain */ 2 127 2 db_desc_is_ptr bit (1) unal, /* on if descriptor is pointer to real desc. */ 2 128 2 user_desc_is_ptr bit (1) unal, /* on if user desc is ptr */ 2 129 2 no_conversion bit (1) unal, /* if no conversion allowed */ 2 130 2 procedures_present bit (1) unal, /* on => ids type procedures present */ 2 131 2 unreferenced bit (1) unal, /* on => this domain is not used in any attribute */ 2 132 2 reserved bit (31) unal, 2 133 2 db_desc bit (36), /* desc. for item in db, or ptr to it */ 2 134 2 user_desc bit (36), /* desc. for user-visible attr, or ptr */ 2 135 2 ave_len fixed bin (35), /* average length of varying string */ 2 136 2 nck_items unal fixed bin, /* no. items in check stack */ 2 137 2 fwd_thread unal bit (18), /* offset to next in list */ 2 138 2 check_path_ptr unal bit (18), /* integ. check proc. */ 2 139 2 ck_stack_ptr unal bit (18), /* to check stack */ 2 140 2 encd_path_ptr unal bit (18), /* encode procedure */ 2 141 2 decd_path_ptr unal bit (18), /* decode procedure */ 2 142 2 str_before_path_ptr unal bit (18), /* proc paths and entries */ 2 143 2 str_err_path_ptr unal bit (18), 2 144 2 str_after_path_ptr unal bit (18), 2 145 2 get_before_path_ptr unal bit (18), 2 146 2 get_err_path_ptr unal bit (18), 2 147 2 get_after_path_ptr unal bit (18), 2 148 2 mod_before_path_ptr unal bit (18), 2 149 2 mod_err_path_ptr unal bit (18), 2 150 2 mod_after_path_ptr unal bit (18), 2 151 2 unused_1 unal bit (18), /* for future expansion */ 2 152 2 unused_2 unal bit (18), 2 153 2 changer_ptr unal bit (18); /* pointer to change_id and chane_time structure */ 2 154 2 155 dcl di_ptr ptr; 2 156 2 157 /* information necessary for attributes that are not used in any relation */ 2 158 2 159 dcl 1 unreferenced_attribute aligned based (ua_ptr), 2 160 2 name char (32), /* name of attribute */ 2 161 2 domain_ptr bit (18) unal, /* to domain_info */ 2 162 2 fwd_thread bit (18) unal, /* to next in list */ 2 163 2 unused (2) bit (18) unal; 2 164 2 165 dcl ua_ptr ptr; 2 166 2 167 2 168 /* space saving pathname$entryname structure, to be allocated 2 169* only when a path$entry has to be saved, else only a bit(18) 2 170* offset takes up space in the main model structure */ 2 171 2 172 declare 1 path_entry based (path_entry_ptr), 2 173 2 path char (168), /* pathname portion of desired path$entry */ 2 174 2 entry char (32), /* entryname portion of desired path$entry */ 2 175 2 reserved unal bit (36); /* for future use */ 2 176 2 177 declare path_entry_ptr ptr; 2 178 2 179 2 180 2 181 2 182 2 183 /* declarations for model of postfix stack holding the check option boolean expression 2 184* the following encoding values indicate the corresponding type of stack element 2 185* 2 186* 1 = 2 187* 2 ^= 2 188* 3 > 2 189* 4 < 2 190* 5 >= 2 191* 6 <= 2 192* 2 193* 10 and 2 194* 20 or 2 195* 30 not 2 196* 2 197* 40 - (minus) 2 198* 2 199* 50 domain variable(same name as domain) 2 200* 2 201* 60 constant(number, bit string, or character string) 2 202* 2 203**/ 2 204 2 205 2 206 declare 1 stack_item based (stack_item_ptr), /* element of stack model list */ 2 207 2 next bit (18), /* link to next in list */ 2 208 2 type fixed binary, /* code for this element type */ 2 209 2 value_ptr bit (18); /* pointer to variable holding value, 2 210* if this is a constant element type */ 2 211 2 212 declare stack_item_ptr ptr; /* pointer to a stack element */ 2 213 2 214 2 215 2 216 declare 1 constant based (constant_ptr), /* variable size space for constant's value storage */ 2 217 2 length fixed bin (35), /* length allocated to hold value */ 2 218 2 value bit (alloc_length refer (constant.length)) aligned; /* value for this constant */ 2 219 2 220 declare constant_ptr ptr; /* pointer to constant's value space */ 2 221 2 222 declare alloc_length fixed binary (35) internal static; /* amount of space to allocate for constant's value */ 2 223 2 224 /* version structure, giving status of source for CMDB/RMDB, 2 225* status of model, and status of resultant */ 2 226 2 227 /* version number is in form MM.N.Y 2 228* where MM is the major version number, N is the minor version alteration, 2 229* and Y is the lastest modification to that alteration, 2 230* where M and N represent numbers 0-9, and Y is a letter */ 2 231 2 232 declare 1 version_status unal based (version_status_ptr), 2 233 2 cmdb_rmdb, 2 234 3 major fixed bin, 2 235 3 minor fixed bin, 2 236 3 modification char (4), 2 237 2 model, 2 238 3 major fixed bin, 2 239 3 minor fixed bin, 2 240 3 modification char (4), 2 241 2 resultant, 2 242 3 major fixed bin, 2 243 3 minor fixed bin, 2 244 3 modification char (4); 2 245 2 246 declare version_status_ptr ptr; 2 247 2 248 2 249 /* maintains information only about the db creation */ 2 250 2 251 declare 1 changer unal based (changer_ptr), 2 252 2 id char (32), 2 253 2 time fixed bin (71), 2 254 2 next bit (18); /* to next in the singly linked list */ 2 255 2 256 declare changer_ptr ptr; 2 257 2 258 2 259 dcl 01 message_str unal based (message_str_ptr), /* general purpose structure to hold messages */ 2 260 02 len fixed bin, /* length of the message */ 2 261 02 text char (message_str_len refer (message_str.len)), /* actual message */ 2 262 02 name char (32), /* name of thing that set the message */ 2 263 02 undo_request char (100), /* rmdb request that will undo the operation 2 264* that caused the database to become inconsistent */ 2 265 02 mbz bit (36); /* for possible extensions, like an offset to another message */ 2 266 2 267 dcl message_str_ptr ptr; /* pointer to the message_str structure */ 2 268 2 269 dcl message_str_len fixed bin; /* initail length of the text string in message_str */ 2 270 2 271 /* END INCLUDE FILE mdbm_db_model.incl.pl1 */ 2 272 2 273 132 133 3 1 /* BEGIN INCLUDE FILE . . . star_structures.incl.pl1 */ 3 2 3 3 /* This include file contains structures for the hcs_$star_, 3 4* hcs_$star_list_ and hcs_$star_dir_list_ entry points. 3 5* 3 6* Written 23 October 1978 by Monte Davidoff. 3 7* Modified January 1979 by Michael R. Jordan to use unsigned and different pointers for different structures. 3 8* Modified June 1981 by C. Hornig to count link pathnames more efficiently. 3 9**/ 3 10 3 11 /* automatic */ 3 12 3 13 declare star_branch_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching branch count */ 3 14 declare star_entry_count fixed binary; /* hcs_$star_: number of matching entries */ 3 15 declare star_entry_ptr pointer; /* hcs_$star_: pointer to array of entry information */ 3 16 declare star_list_branch_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to array of info */ 3 17 declare star_link_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching link count */ 3 18 declare star_linkx fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: index into star_links */ 3 19 declare star_names_ptr pointer; /* hcs_$star_: pointer to array of entry names */ 3 20 declare star_list_names_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to entry names */ 3 21 declare star_select_sw fixed binary (3); /* hcs_$star_list_, hcs_$star_dir_list_: what info to return */ 3 22 3 23 /* based */ 3 24 3 25 /* hcs_$star_ entry structure */ 3 26 3 27 declare 1 star_entries (star_entry_count) aligned based (star_entry_ptr), 3 28 2 type fixed binary (2) unsigned unaligned, 3 29 /* storage system type */ 3 30 2 nnames fixed binary (16) unsigned unaligned, 3 31 /* number of names of entry that match star_name */ 3 32 2 nindex fixed binary (18) unsigned unaligned; 3 33 /* index of first name in star_names */ 3 34 3 35 /* hcs_$star_ name structure */ 3 36 3 37 declare star_names (sum (star_entries (*).nnames)) char (32) based (star_names_ptr); 3 38 3 39 /* hcs_$star_list_ branch structure */ 3 40 3 41 declare 1 star_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 3 42 2 type fixed binary (2) unsigned unaligned, 3 43 /* storage system type */ 3 44 2 nnames fixed binary (16) unsigned unaligned, 3 45 /* number of names of entry that match star_name */ 3 46 2 nindex fixed binary (18) unsigned unaligned, 3 47 /* index of first name in star_list_names */ 3 48 2 dtcm bit (36) unaligned, /* date-time contents of branch were last modified */ 3 49 2 dtu bit (36) unaligned, /* date-time branch was last used */ 3 50 2 mode bit (5) unaligned, /* user's access mode to the branch */ 3 51 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 3 52 2 master_dir bit (1) unaligned, /* is branch a master directory */ 3 53 2 pad bit (7) unaligned, 3 54 2 records fixed binary (18) unsigned unaligned; 3 55 /* records used by branch */ 3 56 3 57 /* hcs_$star_dir_list_ branch structure */ 3 58 3 59 declare 1 star_dir_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 3 60 2 type fixed binary (2) unsigned unaligned, 3 61 /* storage system type */ 3 62 2 nnames fixed binary (16) unsigned unaligned, 3 63 /* number of names of entry that match star_name */ 3 64 2 nindex fixed binary (18) unsigned unaligned, 3 65 /* index of first name in star_list_names */ 3 66 2 dtem bit (36) unaligned, /* date-time directory entry of branch was last modified */ 3 67 2 pad bit (36) unaligned, 3 68 2 mode bit (5) unaligned, /* user's access mode to the branch */ 3 69 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 3 70 2 master_dir bit (1) unaligned, /* is branch a master directory */ 3 71 2 bit_count fixed binary (24) unaligned; 3 72 /* bit count of the branch */ 3 73 3 74 /* hcs_$star_list_ and hcs_$star_dir_list_ link structure */ 3 75 3 76 declare 1 star_links (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 3 77 2 type fixed binary (2) unsigned unaligned, 3 78 /* storage system type */ 3 79 2 nnames fixed binary (16) unsigned unaligned, 3 80 /* number of names of entry that match star_name */ 3 81 2 nindex fixed binary (18) unsigned unaligned, 3 82 /* index of first name in star_list_names */ 3 83 2 dtem bit (36) unaligned, /* date-time link was last modified */ 3 84 2 dtd bit (36) unaligned, /* date-time the link was last dumped */ 3 85 2 pathname_len fixed binary (18) unsigned unaligned, 3 86 /* length of the pathname of the link */ 3 87 2 pathname_index fixed binary (18) unsigned unaligned; 3 88 /* index of start of pathname in star_list_names */ 3 89 3 90 /* hcs_$star_list_ and hcs_$star_dir_list_ name array */ 3 91 3 92 declare star_list_names char (32) based (star_list_names_ptr) 3 93 dimension (star_links (star_branch_count + star_link_count).nindex 3 94 + star_links (star_branch_count + star_link_count).nnames 3 95 + divide (star_links (star_branch_count + star_link_count).pathname_len + 31, 32, 17, 0) 3 96 * binary ( 3 97 (star_links (star_branch_count + star_link_count).type = star_LINK) 3 98 & (star_select_sw >= star_LINKS_ONLY_WITH_LINK_PATHS), 1)); 3 99 3 100 /* hcs_$star_list_ and hcs_$star_dir_list_ link pathname */ 3 101 3 102 declare star_link_pathname char (star_links (star_linkx).pathname_len) 3 103 based (addr (star_list_names (star_links (star_linkx).pathname_index))); 3 104 3 105 /* internal static */ 3 106 3 107 /* star_select_sw values */ 3 108 3 109 declare star_LINKS_ONLY fixed binary (2) internal static options (constant) initial (1); 3 110 declare star_BRANCHES_ONLY fixed binary (2) internal static options (constant) initial (2); 3 111 declare star_ALL_ENTRIES fixed binary (2) internal static options (constant) initial (3); 3 112 declare star_LINKS_ONLY_WITH_LINK_PATHS 3 113 fixed binary (3) internal static options (constant) initial (5); 3 114 declare star_ALL_ENTRIES_WITH_LINK_PATHS 3 115 fixed binary (3) internal static options (constant) initial (7); 3 116 3 117 /* storage system types */ 3 118 3 119 declare star_LINK fixed binary (2) unsigned internal static options (constant) initial (0); 3 120 declare star_SEGMENT fixed binary (2) unsigned internal static options (constant) initial (1); 3 121 declare star_DIRECTORY fixed binary (2) unsigned internal static options (constant) initial (2); 3 122 3 123 /* END INCLUDE FILE . . . star_structures.incl.pl1 */ 134 135 4 1 /* --------------- BEGIN include file status_structures.incl.pl1 --------------- */ 4 2 4 3 /* Revised from existing include files 09/26/78 by C. D. Tavares */ 4 4 4 5 /* This include file contains branch and link structures returned by 4 6* hcs_$status_ and hcs_$status_long. */ 4 7 4 8 dcl 1 status_branch aligned based (status_ptr), 4 9 2 short aligned, 4 10 3 type fixed bin (2) unaligned unsigned, /* seg, dir, or link */ 4 11 3 nnames fixed bin (16) unaligned unsigned, /* number of names */ 4 12 3 names_relp bit (18) unaligned, /* see entry_names dcl */ 4 13 3 dtcm bit (36) unaligned, /* date/time contents last modified */ 4 14 3 dtu bit (36) unaligned, /* date/time last used */ 4 15 3 mode bit (5) unaligned, /* caller's effective access */ 4 16 3 raw_mode bit (5) unaligned, /* caller's raw "rew" modes */ 4 17 3 pad1 bit (8) unaligned, 4 18 3 records_used fixed bin (18) unaligned unsigned, /* number of NONZERO pages used */ 4 19 4 20 /* Limit of information returned by hcs_$status_ */ 4 21 4 22 2 long aligned, 4 23 3 dtd bit (36) unaligned, /* date/time last dumped */ 4 24 3 dtem bit (36) unaligned, /* date/time branch last modified */ 4 25 3 lvid bit (36) unaligned, /* logical volume ID */ 4 26 3 current_length fixed bin (12) unaligned unsigned, /* number of last page used */ 4 27 3 bit_count fixed bin (24) unaligned unsigned, /* reported length in bits */ 4 28 3 pad2 bit (8) unaligned, 4 29 3 copy_switch bit (1) unaligned, /* copy switch */ 4 30 3 tpd_switch bit (1) unaligned, /* transparent to paging device switch */ 4 31 3 mdir_switch bit (1) unaligned, /* is a master dir */ 4 32 3 damaged_switch bit (1) unaligned, /* salvager warned of possible damage */ 4 33 3 synchronized_switch bit (1) unaligned, /* DM synchronized file */ 4 34 3 pad3 bit (5) unaligned, 4 35 3 ring_brackets (0:2) fixed bin (6) unaligned unsigned, 4 36 3 uid bit (36) unaligned; /* unique ID */ 4 37 4 38 dcl 1 status_link aligned based (status_ptr), 4 39 2 type fixed bin (2) unaligned unsigned, /* as above */ 4 40 2 nnames fixed bin (16) unaligned unsigned, 4 41 2 names_relp bit (18) unaligned, 4 42 2 dtem bit (36) unaligned, 4 43 2 dtd bit (36) unaligned, 4 44 2 pathname_length fixed bin (17) unaligned, /* see pathname */ 4 45 2 pathname_relp bit (18) unaligned; /* see pathname */ 4 46 4 47 dcl status_entry_names (status_branch.nnames) character (32) aligned 4 48 based (pointer (status_area_ptr, status_branch.names_relp)), 4 49 /* array of names returned */ 4 50 status_pathname character (status_link.pathname_length) aligned 4 51 based (pointer (status_area_ptr, status_link.pathname_relp)), 4 52 /* link target path */ 4 53 status_area_ptr pointer, 4 54 status_ptr pointer; 4 55 4 56 dcl (Link initial (0), 4 57 Segment initial (1), 4 58 Directory initial (2)) fixed bin internal static options (constant); 4 59 /* values for type fields declared above */ 4 60 4 61 /* ---------------- END include file status_structures.incl.pl1 ---------------- */ 136 137 5 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 5 2 /* format: style2,^inddcls,idind32 */ 5 3 5 4 declare 1 terminate_file_switches based, 5 5 2 truncate bit (1) unaligned, 5 6 2 set_bc bit (1) unaligned, 5 7 2 terminate bit (1) unaligned, 5 8 2 force_write bit (1) unaligned, 5 9 2 delete bit (1) unaligned; 5 10 5 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 5 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 5 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 5 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 5 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 5 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 5 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 5 18 5 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 138 139 140 dcl addr builtin; 141 dcl before builtin; 142 dcl cleanup condition; 143 dcl code fixed bin (35); 144 dcl db_path char (168); 145 dcl done bit (1) aligned; 146 dcl fixed builtin; 147 dcl get_system_free_area_ entry () returns (ptr); 148 dcl hcs_$star_ entry (char (*), char (*), fixed bin (2), ptr, fixed bin, ptr, ptr, fixed bin (35)); 149 dcl Idb_path char (*) parameter; /* absolute pathname of the database */ 150 dcl initiate_file_ entry (char (*), char (*), bit (*), ptr, fixed bin (24), fixed bin (35)); 151 dcl last_fi_ptr ptr; 152 dcl loop fixed bin; 153 dcl myname char (32) int static options (constant) init ("rmdb_salvage_db"); 154 dcl null builtin; 155 dcl NULL_OFFSET bit (18) unaligned int static options (constant) init ((18)"1"b); 156 dcl pointer builtin; 157 dcl ptr builtin; 158 dcl rel builtin; 159 dcl 1 sb aligned like status_branch; 160 dcl substr builtin; 161 dcl sum builtin; 162 dcl sys_info$max_seg_size fixed bin (35) ext static; 163 dcl system_area area based (system_areap); 164 dcl system_areap ptr; 165 dcl terminate_file_ entry (ptr, fixed bin (24), bit (*), fixed bin (35)); 166 167 end rmdb_salvage_db; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 12/09/86 1236.5 rmdb_salvage_db.pl1 >spec>install>1237>rmdb_salvage_db.pl1 130 1 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 132 2 10/17/86 1404.3 mdbm_db_model.incl.pl1 >ldd>include>mdbm_db_model.incl.pl1 134 3 06/10/82 1045.5 star_structures.incl.pl1 >ldd>include>star_structures.incl.pl1 136 4 11/22/82 0955.7 status_structures.incl.pl1 >ldd>include>status_structures.incl.pl1 138 5 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.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. Idb_path parameter char unaligned dcl 149 ref 29 32 NULL_OFFSET constant bit(18) initial unaligned dcl 155 ref 49 56 58 RW_ACCESS 000012 constant bit(3) initial unaligned dcl 1-11 set ref 43* TERM_FILE_TERM 000010 constant bit(3) initial unaligned dcl 5-14 set ref 123* addr builtin function dcl 140 ref 38 before builtin function dcl 141 ref 85 cleanup 000116 stack reference condition dcl 142 ref 41 code 000124 automatic fixed bin(35,0) dcl 143 set ref 43* 44 60* 62 101* 102 102* db_model based structure level 1 dcl 2-72 db_path 000125 automatic char(168) unaligned dcl 144 set ref 32* 43* 60* 101* 102* dbm_ptr 000100 automatic pointer dcl 2-106 set ref 36* 43* 49 49 54 56 122 123* delete_$path 000020 constant entry external dcl 96 ref 102 done 000177 automatic bit(1) dcl 145 set ref 48* 49 51* error_table_$unsupported_operation 000022 external static fixed bin(35,0) dcl 97 ref 102 fi_ptr 000102 automatic pointer dcl 2-119 set ref 49* 49* 51 53* 54 file_info based structure level 1 dcl 2-113 file_name parameter char unaligned dcl 98 in procedure "delete_file" set ref 93 101* 102* file_name based char(30) level 2 in structure "file_info" dcl 2-113 in procedure "rmdb_salvage_db" ref 51 file_ptr 22 based bit(18) level 2 packed unaligned dcl 2-72 set ref 49 56* fs_util_$delentry_file 000024 constant entry external dcl 99 ref 101 fwd_ptr 11 based bit(18) level 2 packed unaligned dcl 2-113 set ref 54 58* get_system_free_area_ 000010 constant entry external dcl 147 ref 33 hcs_$star_ 000012 constant entry external dcl 148 ref 60 initiate_file_ 000014 constant entry external dcl 150 ref 43 last_fi_ptr 000200 automatic pointer dcl 151 set ref 47* 53* 56 58 loop 000202 automatic fixed bin(17,0) dcl 152 set ref 65* 66* model_name 000234 automatic char(32) unaligned dcl 80 set ref 84* 85 89* myname 000000 constant char(32) initial unaligned dcl 153 set ref 102* names_relp 0(18) based bit(18) level 3 packed unaligned dcl 4-8 set ref 39* 119 119 nindex 0(18) based fixed bin(18,0) array level 2 packed unsigned unaligned dcl 3-27 ref 84 nnames 0(02) based fixed bin(16,0) level 3 in structure "status_branch" packed unsigned unaligned dcl 4-8 in procedure "rmdb_salvage_db" ref 119 nnames 0(02) based fixed bin(16,0) array level 2 in structure "star_entries" packed unsigned unaligned dcl 3-27 in procedure "rmdb_salvage_db" ref 69 115 null builtin function dcl 154 ref 35 36 47 56 70 73 115 117 123 p 000106 automatic pointer dcl 113 set ref 122* 123 pointer builtin function dcl 156 ref 119 ptr builtin function dcl 157 ref 49 54 rel builtin function dcl 158 ref 49 relation_name 000244 automatic char(32) unaligned dcl 81 set ref 85* 88* sb 000203 automatic structure level 1 dcl 159 set ref 38 short based structure level 2 dcl 4-8 star_ALL_ENTRIES 000011 constant fixed bin(2,0) initial dcl 3-111 set ref 60* star_entries based structure array level 1 dcl 3-27 ref 72 117 star_entry_count 000104 automatic fixed bin(17,0) dcl 3-14 set ref 60* 65 69 72 115 117 star_entry_ptr 000106 automatic pointer dcl 3-15 set ref 35* 60* 69 72 73* 84 115 117 117 star_idx parameter fixed bin(17,0) dcl 82 ref 77 84 star_names based char(32) array unaligned dcl 3-37 ref 69 84 115 star_names_ptr 000110 automatic pointer dcl 3-19 set ref 35* 60* 69 70* 84 115 115 status_area_ptr 000112 automatic pointer dcl 4-47 set ref 33* 119 status_branch based structure level 1 dcl 4-8 status_entry_names based char(32) array dcl 4-47 ref 119 status_ptr 000114 automatic pointer dcl 4-47 set ref 38* 39 119 119 119 substr builtin function dcl 160 ref 51 sum builtin function dcl 161 ref 69 115 system_area based area(1024) dcl 163 ref 69 72 115 117 119 system_areap 000216 automatic pointer dcl 164 set ref 33* 60* 69 72 115 117 119 terminate_file_ 000016 constant entry external dcl 165 ref 123 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 1-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-33 Directory internal static fixed bin(17,0) initial dcl 4-56 E_ACCESS internal static bit(3) initial unaligned dcl 1-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 Link internal static fixed bin(17,0) initial dcl 4-56 M_ACCESS internal static bit(3) initial unaligned dcl 1-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 N_ACCESS internal static bit(3) initial unaligned dcl 1-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 REW_ACCESS internal static bit(3) initial unaligned dcl 1-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RE_ACCESS internal static bit(3) initial unaligned dcl 1-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 R_ACCESS internal static bit(3) initial unaligned dcl 1-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 1-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 1-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 SM_ACCESS internal static bit(3) initial unaligned dcl 1-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 S_ACCESS internal static bit(3) initial unaligned dcl 1-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 Segment internal static fixed bin(17,0) initial dcl 4-56 TERM_FILE_BC internal static bit(2) initial unaligned dcl 5-12 TERM_FILE_DELETE internal static bit(5) initial unaligned dcl 5-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial unaligned dcl 5-16 TERM_FILE_TRUNC internal static bit(1) initial unaligned dcl 5-11 TERM_FILE_TRUNC_BC internal static bit(2) initial unaligned dcl 5-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial unaligned dcl 5-15 W_ACCESS internal static bit(3) initial unaligned dcl 1-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 1-36 alloc_length internal static fixed bin(35,0) dcl 2-222 changer based structure level 1 packed unaligned dcl 2-251 changer_ptr automatic pointer dcl 2-256 constant based structure level 1 unaligned dcl 2-216 constant_ptr automatic pointer dcl 2-220 di_ptr automatic pointer dcl 2-155 domain_info based structure level 1 dcl 2-125 fixed builtin function dcl 146 message_str based structure level 1 packed unaligned dcl 2-259 message_str_len automatic fixed bin(17,0) dcl 2-269 message_str_ptr automatic pointer dcl 2-267 path_entry based structure level 1 packed unaligned dcl 2-172 path_entry_ptr automatic pointer dcl 2-177 stack_item based structure level 1 unaligned dcl 2-206 stack_item_ptr automatic pointer dcl 2-212 star_ALL_ENTRIES_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 3-114 star_BRANCHES_ONLY internal static fixed bin(2,0) initial dcl 3-110 star_DIRECTORY internal static fixed bin(2,0) initial unsigned dcl 3-121 star_LINK internal static fixed bin(2,0) initial unsigned dcl 3-119 star_LINKS_ONLY internal static fixed bin(2,0) initial dcl 3-109 star_LINKS_ONLY_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 3-112 star_SEGMENT internal static fixed bin(2,0) initial unsigned dcl 3-120 star_branch_count automatic fixed bin(17,0) dcl 3-13 star_dir_list_branch based structure array level 1 dcl 3-59 star_link_count automatic fixed bin(17,0) dcl 3-17 star_link_pathname based char unaligned dcl 3-102 star_links based structure array level 1 dcl 3-76 star_linkx automatic fixed bin(17,0) dcl 3-18 star_list_branch based structure array level 1 dcl 3-41 star_list_branch_ptr automatic pointer dcl 3-16 star_list_names based char(32) array unaligned dcl 3-92 star_list_names_ptr automatic pointer dcl 3-20 star_select_sw automatic fixed bin(3,0) dcl 3-21 status_link based structure level 1 dcl 4-38 status_pathname based char dcl 4-47 sys_info$max_seg_size external static fixed bin(35,0) dcl 162 terminate_file_switches based structure level 1 packed unaligned dcl 5-4 ua_ptr automatic pointer dcl 2-165 unreferenced_attribute based structure level 1 dcl 2-159 version_status based structure level 1 packed unaligned dcl 2-232 version_status_ptr automatic pointer dcl 2-246 NAMES DECLARED BY EXPLICIT CONTEXT. cleaner 000507 constant entry internal dcl 110 ref 41 delete_file 000412 constant entry internal dcl 93 ref 88 89 process_file 000357 constant entry internal dcl 77 ref 66 rmdb_salvage_db 000043 constant entry external dcl 29 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1004 1032 654 1014 Length 1316 654 26 247 127 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rmdb_salvage_db 286 external procedure is an external procedure. on unit on line 41 94 on unit process_file internal procedure shares stack frame of external procedure rmdb_salvage_db. delete_file internal procedure shares stack frame of external procedure rmdb_salvage_db. cleaner internal procedure shares stack frame of on unit on line 41. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME on unit on line 41 000106 p cleaner rmdb_salvage_db 000100 dbm_ptr rmdb_salvage_db 000102 fi_ptr rmdb_salvage_db 000104 star_entry_count rmdb_salvage_db 000106 star_entry_ptr rmdb_salvage_db 000110 star_names_ptr rmdb_salvage_db 000112 status_area_ptr rmdb_salvage_db 000114 status_ptr rmdb_salvage_db 000124 code rmdb_salvage_db 000125 db_path rmdb_salvage_db 000177 done rmdb_salvage_db 000200 last_fi_ptr rmdb_salvage_db 000202 loop rmdb_salvage_db 000203 sb rmdb_salvage_db 000216 system_areap rmdb_salvage_db 000234 model_name process_file 000244 relation_name process_file THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac mpfx2 enable_op ext_entry_desc int_entry op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. delete_$path fs_util_$delentry_file get_system_free_area_ hcs_$star_ initiate_file_ terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$unsupported_operation LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 29 000040 32 000056 33 000063 35 000074 36 000077 38 000101 39 000103 41 000105 43 000123 44 000163 47 000165 48 000167 49 000170 51 000203 53 000212 54 000214 56 000223 58 000233 60 000236 62 000303 65 000305 66 000315 67 000317 69 000321 70 000350 72 000352 73 000354 75 000356 77 000357 84 000361 85 000373 88 000403 89 000406 91 000411 93 000412 101 000423 102 000446 105 000506 110 000507 115 000510 117 000545 119 000554 122 000573 123 000576 127 000632 ----------------------------------------------------------- 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