COMPILATION LISTING OF SEGMENT mrds_dsl_get_attribute_list Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/01/88 1331.3 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 mrds_dsl_get_attribute_list: get_attribute_list: procedure (db_index, relation_name, area_ptr, 10 structure_version, mrds_attribute_list_ptr, error_code); 11 12 /* DESCRIPTION: 13* 14* Given a database opening index, and a pointer to a freeing area, 15* and the name of a relation for which information is desired, 16* this routine will return a structure containing the names 17* of all the attributes in the model that the opening has in it's view. 18* It indicates whether this was a submodel 19* opening, and returns submodel alias names as well in that case. 20* The name of the attributes domain is returned, along with 21* descriptors for both the database and user views of the data type 22* (these will be the same unless a domain -decode_dcl was used in the CMDB source) 23* It also indicates whether the attribute can be used as indexed. 24**/ 25 26 /* PARAMETERS: 27* 28* db_index - - (input) fixed bin(35), the database opening index as returned from dsl_$open, 29* this may be an opening through either a model or submodel of any version. 30* 31* relation_name - - (input) char(*), the name of the relation for which attriubtes 32* detailed information is to be returned. If this is a submodel opening, 33* then the submodel name of the relation should be used. 34* 35* area_ptr - - (input) ptr, pointer to a freeing area in which the returned 36* structure is to be allocated. Allow about 40 words per expected attribute for the area size. 37* 38* structure_version - - (input) fixed bin, the desired version of the structure 39* that is to be returned. 40* 41* mrds_attribute_list_ptr - - (output) ptr, points to the allocated structure 42* as defined in the include file mrds_attribute_list.incl.pl1 43* 44* error_code - - (output) fixed bin(35), the error status encoding, 0 unless an error occured. 45**/ 46 47 /* HISTORY: 48* 49* Originally written by Jim Gray - - March 1981 50* 51* 81-06-01 Jim Gray : modified to use new resultant structure. 52* 53* 81-12-15 R. Lackey : Modified to search rm_rel_array for full name. TR11887 54* 55* 83-02-18 B. G. Moberg : Added check to detect long relation names 56* 57* 83-04-07 Davids: Explicitly declared the builtin function length. 58**/ 59 60 /* initialize */ 61 62 error_code = 0; 63 mrds_attribute_list_ptr = null (); 64 clean_up_condition = "0"b; 65 66 on cleanup begin; 67 clean_up_condition = "1"b; 68 call clean_up (); 69 end; 70 71 /* check for a valid opening index */ 72 73 call mu_database_index$get_resultant_model_pointer (db_index, dbcb_ptr); 74 if dbcb_ptr = null () then 75 error_code = mrds_error_$invalid_db_index; 76 else do; 77 78 /* good opening index, check for a good area */ 79 80 if area_ptr = null () then 81 error_code = error_table_$badcall; 82 else do; 83 unspec (my_area_info) = "0"b; 84 my_area_info.version = 1; 85 my_area_info.areap = area_ptr; 86 87 call area_info_ (addr (my_area_info), error_code); 88 if error_code ^= 0 then ; /* couldn't get area info */ 89 else if my_area_info.no_freeing then 90 error_code = mrds_error_$not_freeing_area; 91 else do; 92 93 /* check for a known structure version */ 94 95 if structure_version ^= mrds_attribute_list_structure_version then 96 error_code = error_table_$unimplemented_version; 97 else do; 98 99 /* check for a supported database version */ 100 101 rdbi_ptr = dbcb.rdbi_ptr; 102 if rm_db_info.db_version ^= 4 then 103 error_code = mrds_error_$version_not_supported; 104 else do; 105 106 /* check on the user class for secured databases */ 107 108 call mrds_dm_authorization$get_user_class 109 (rtrim (rm_db_info.db_path), addr (local_area), 110 mrds_authorization_structure_version, mrds_authorization_ptr, error_code); 111 112 /* check for a known relation name */ 113 114 if error_code = 0 then 115 call check_relation (); 116 117 if error_code = 0 then do; 118 119 /* set up for too small an area given */ 120 121 on area begin; 122 error_code = error_table_$area_too_small; 123 goto skip_allocate; 124 end; 125 126 /* fill in the info in a structure in the users area */ 127 128 mrds_attribute_list_num_attrs_init = rm_rel_info.num_attr; 129 allocate mrds_attribute_list set (mrds_attribute_list_ptr) in (users_area); 130 revert area; 131 132 unspec (mrds_attribute_list) = "0"b; 133 mrds_attribute_list.version = mrds_attribute_list_structure_version; 134 mrds_attribute_list.num_attrs_in_view = mrds_attribute_list_num_attrs_init; 135 mrds_attribute_list.submodel_view = dbcb.dsm_sw; 136 137 if rm_db_info.mdbm_secured then 138 mrds_attribute_list.access_info_version = 5; 139 else mrds_attribute_list.access_info_version = 4; 140 141 /* fill in the details for each attribute in the view */ 142 143 do i = 1 to mrds_attribute_list_num_attrs_init; 144 145 call get_attribute_data (); 146 147 end; 148 149 end; 150 end; 151 end; 152 end; 153 end; 154 end; 155 156 skip_allocate: 157 158 return; 159 160 check_relation: procedure (); 161 162 /* routine to check for a good relation name, and get the 163* acl's set on it for use as the attribute acl */ 164 165 rmra_ptr = rm_db_info.ra_ptr; 166 i = 1; 167 168 /* see if the given name is in this view of the database */ 169 170 171 /* BEGIN CHANGE 81-12-15 RDL ********************************************** */ 172 173 if length (rtrim (relation_name)) > 30 174 then do; 175 error_code = mrds_error_$rel_name_too_long; 176 return; 177 end; 178 rel_name_32 = rtrim (relation_name); 179 i = index (string (rm_rel_array.name), "!" || rel_name_32); 180 181 /* BEGIN CHANGE 81-12-15 RDL ********************************************** */ 182 183 184 if i = 0 then 185 error_code = mrds_error_$unknown_relation_name; 186 else do; 187 188 i = ((i - 1) / 33) + 1; /* convert from char to array index */ 189 190 /* good relation name, get it's multics acls */ 191 192 rmri_ptr = rm_rel_array.rel_data (i).ri_ptr; 193 194 call mu_get_relation_acl (rtrim (rm_db_info.db_path), 195 rtrim (rm_rel_info.model_name), 196 mrds_authorization.administrator, 197 read_acl, write_acl, error_code); 198 199 if error_code = 0 then do; 200 201 multics_access_string = ""; 202 203 if read_acl then 204 multics_access_string = multics_access_string || "r"; 205 206 if write_acl then 207 multics_access_string = multics_access_string || "w"; 208 209 if multics_access_string = "" then 210 multics_access_string = "n"; 211 end; 212 213 end; 214 215 end; 216 217 get_attribute_data: procedure (); 218 219 /* routine to get the data for an individual attribute in the users view */ 220 221 rai_ptr = rm_rel_info.attr_ptrs (i); 222 mrds_attribute_list.attribute (i).submodel_name = rm_attr_info.name; 223 rdi_ptr = rm_attr_info.domain_ptr; 224 mrds_attribute_list.attribute (i).user_data_type = 225 rm_domain_info.user_desc; 226 mrds_attribute_list.attribute (i).indexed = 227 ((rm_attr_info.index_attr) | 228 ((rm_attr_info.key_attr) & (rm_attr_info.key_order = 1))); 229 230 /* only DBA's can know model names in a secured db */ 231 232 if rm_db_info.mdbm_secured & ^mrds_authorization.administrator then do; 233 mrds_attribute_list.attribute (i).domain_name = " "; 234 mrds_attribute_list.attribute (i).model_name = " "; 235 end; 236 else do; 237 mrds_attribute_list.attribute (i).model_name = rm_attr_info.model_name; 238 mrds_attribute_list.attribute (i).domain_name = rm_domain_info.name; 239 end; 240 241 /* find out what the multics acls are on this attribute */ 242 243 mrds_attribute_list.attribute (i).system_acl = multics_access_string; 244 245 if mrds_attribute_list.access_info_version = 4 then 246 mrds_attribute_list.attribute (i).mrds_access, 247 mrds_attribute_list.attribute (i).effective_access = 248 mrds_attribute_list.attribute (i).system_acl; 249 250 /* fill in the access for submodel security */ 251 252 else do; /* version 5 submodel security */ 253 254 mrds_access_string = ""; 255 256 if rm_attr_info.read_perm then 257 mrds_access_string = mrds_access_string || "r"; 258 if rm_attr_info.modify_perm then 259 mrds_access_string = mrds_access_string || "m"; 260 if mrds_access_string = "" then 261 mrds_access_string = "n"; 262 263 mrds_attribute_list.attribute (i).mrds_access = mrds_access_string; 264 265 /* fill in the effective access for attribute level security */ 266 267 if write_acl then 268 mrds_attribute_list.attribute (i).effective_access = mrds_access_string; 269 else if read_acl & 270 index (mrds_access_string, "r") ^= 0 then 271 mrds_attribute_list.attribute (i).effective_access = "r"; 272 else mrds_attribute_list.attribute (i).effective_access = "n"; 273 end; 274 end; 275 276 clean_up: procedure (); 277 278 /* routine to get rid of allocated space, if an error 279* occurs, or cleanup is signaled */ 280 281 if clean_up_condition then do; 282 283 if mrds_attribute_list_ptr ^= null () then do; 284 285 free mrds_attribute_list_ptr -> mrds_attribute_list in (users_area); 286 287 mrds_attribute_list_ptr = null (); 288 289 end; 290 291 end; 292 293 end; 294 295 declare area condition; /* happens when space too small */ 296 declare area_info_ entry (ptr, fixed bin (35)); /* gets details on the area */ 297 declare area_ptr ptr; /* points to a freeing area */ 298 declare clean_up_condition bit (1); /* set on if cleanup signaled */ 299 declare cleanup condition; /* occurs upon quit/release */ 300 declare db_index fixed bin (35); /* database opening index */ 301 declare error_code fixed bin (35); /* error status encoding */ 302 declare error_table_$area_too_small fixed bin (35) ext; /* area too small error */ 303 declare error_table_$badcall fixed bin (35) ext;/* null area ptr */ 304 declare error_table_$unimplemented_version fixed bin (35) ext; /* unknown structure version */ 305 declare i fixed bin; /* loop index */ 306 declare local_area area (1024); /* space for return args */ 307 declare mu_get_relation_acl entry (char (*), char (*), 308 bit (1), bit (1), bit (1), fixed bin (35)); /* gets Multics acl's */ 309 declare mu_database_index$get_resultant_model_pointer entry (fixed bin (35), ptr); /* gets pointer to resultant model */ 310 declare mrds_access_string char (4) varying; /* mrds access encoding */ 311 declare mrds_dm_authorization$get_user_class entry (char (*), ptr, fixed bin, ptr, fixed bin (35)); /* gets user class */ 312 declare mrds_error_$invalid_db_index fixed bin (35) ext; /* bad opening index */ 313 declare mrds_error_$not_freeing_area fixed bin (35) ext; /* area without freeing attribute */ 314 declare mrds_error_$rel_name_too_long fixed bin (35) ext; /* name too long */ 315 declare mrds_error_$unknown_relation_name fixed bin (35) ext; /* name not in opening view */ 316 declare mrds_error_$version_not_supported fixed bin (35) ext; /* not version 4 or later */ 317 declare multics_access_string char (4) varying; /* multics access encoding */ 318 declare read_acl bit (1); /* on => "r" Multics acl on relation data */ 319 declare relation_name char (*); /* name of relation for which info is desired */ 320 dcl rel_name_32 char (32); /* Used to search rm_rel_array */ 321 declare structure_version fixed bin; /* desired version of structure */ 322 declare sys_info$max_seg_size fixed bin (35) ext;/* largest segment */ 323 declare users_area area (sys_info$max_seg_size) based (area_ptr); /* overlay for input area */ 324 declare write_acl bit (1); /* on => "w" Multics acl on relation data */ 325 declare (addr, empty, fixed, index, null, 326 rel, rtrim, string, length, unspec) builtin; 327 declare 1 my_area_info like area_info; /* local storage for area details */ 328 1 1 /* BEGIN INCLUDE FILE mrds_attribute_list.incl.pl1 - - 81-01-14 Jim Gray */ 1 2 1 3 /* HISTORY: 1 4* 1 5* 81-01-14 Jim Gray : originally created for the dsl_$get_attribute_list interface. 1 6* 1 7**/ 1 8 1 9 /* DESCRIPTION: 1 10* 1 11* For a giving database opening via a model or submodel view, 1 12* this structure contains attribute information for a particular relation. 1 13* The number of attributes in this model/submodel view of the relation, 1 14* and the names in both the model and submodel are given 1 15* (these will be the same if opened with a model view) 1 16* The name of the domain for each attribute, and the descriptor 1 17* of the users view of the data type is given, as well as whether the attribute 1 18* can be used as an indexed attribute. 1 19* 1 20* Access information is also returned for various versions of MRDS security, as follows: 1 21* 1 22* system_acl entries refers strictly to "rew" type multics acl's. 1 23* for version 3 access info, attr system_acls are the same as the relation acls, 1 24* unless the attribute is inverted, in which case it is the acl 1 25* of the attribute as it appears under the invert_dir in the database. 1 26* 1 27* mrds_access entries are version dependent, version 3 databases 1 28* with mrds_list/set_delete_acl commands used a mrds specific access 1 29* set of modes of retreive-store-modify-delete. 1 30* version 4 databases released in MR8 had no mrds specific 1 31* access, but used system acl's of "rew". 1 32* version 4 databases for MR9 mrds using submodel security have 1 33* mrds specific access mode of append/delete_tuple for relations, 1 34* and read/modify_attr for attributes. 1 35* 1 36* effective_access entries use the same units as mrds_access. 1 37* it is the logical result of applying both mrds and system access, 1 38* and coming up with a user effective mode of access to the relation/attribute. 1 39* for version 3 databases, the effective access includes 1 40* in the relation effective access, the effect that access of inverted attributes 1 41* in the invert_dir may have. 1 42* 1 43**/ 1 44 1 45 1 46 declare 1 mrds_attribute_list aligned based (mrds_attribute_list_ptr), 1 47 2 version fixed bin, /* version number of this structure */ 1 48 2 access_info_version fixed bin, /* version of mrds access modes 1 49* 3 => version 3 db with r-s-m-d access, 1 50* 4 => version 4 MR8 db with r-e-w access, 1 51* 5 => version 4 MR9 db with relation a-d, and attr r-m modes 1 52* (submodel security) */ 1 53 2 num_attrs_in_view fixed bin, /* number of attributes in this view of the relation */ 1 54 2 submodel_view bit (1) unal, /* ON => the opening was via a submodel */ 1 55 2 mbz1 bit (35) unal, 1 56 2 attribute (mrds_attribute_list_num_attrs_init refer (mrds_attribute_list.num_attrs_in_view)), 1 57 3 model_name char (32), /* name of attribute in model */ 1 58 3 submodel_name char (64), /* alias name of attribute in submodel, else model name */ 1 59 3 domain_name char (32), /* name of the domain for this attribute */ 1 60 3 user_data_type bit (36), /* standard multics data descriptor for storage format 1 61* users view if -decode_dcl, else same as db descriptor */ 1 62 3 system_acl char (8) varying, /* the system access from r-e-w modes */ 1 63 3 mrds_access char (8) varying, /* version 3 => from r-s-m-d, 4 => from r-e-w, 5 => from r-m */ 1 64 3 effective_access char (8) varying, /* effect of system + mrds access, in mrds access units */ 1 65 3 indexed bit (1) unal, /* ON => this is a secondary index attribute, or a key head */ 1 66 3 mbz2 bit (35) unal ; 1 67 1 68 1 69 declare mrds_attribute_list_num_attrs_init fixed bin ; 1 70 1 71 declare mrds_attribute_list_ptr ptr ; 1 72 1 73 declare mrds_attribute_list_structure_version fixed bin init (1) int static options (constant) ; 1 74 1 75 /* END INCLUDE FILE mrds_attribute_list.incl.pl1 */ 329 330 2 1 /* BEGIN mdbm_rm_attr_info.incl.pl1 -- jaw, 11/16/78 */ 2 2 2 3 /* WARNING 2 4* If the rm_attr_info structure is changed then the mrds_data_ 2 5* item saved_res_version MUST be incremented to invalidate all 2 6* existing saved resultants 2 7**/ 2 8 2 9 /* 2 10* 2 11* Modified by Jim Gray - - 80-11-05, to add mdbm_secured bit, so 2 12* that rm_rel_info does not have to be checked 2 13* 2 14* 81-05-28 Jim Gray : removed structure elements referring to 2 15* foreign keys. 2 16* 2 17* 82-08-19 D. Woodka : removed rm_attr_info.bit_offset for the DMS 2 18* conversion. 2 19* 2 20* 82-09-15 Davids: added the number_of_dups field. 2 21* 2 22* 82-09-20 Mike Kubicar : changed the index_id field to be bit (36) 2 23* aligned. This is to conform with the new definition in the database 2 24* model. Also removed the now useless field varying. 2 25* 2 26* 82-11-05 Davids: added the field model_defn_order and clarified the 2 27* comment for the field defn_order. 2 28* 2 29* 83-05-23 Mike Kubicar : changed number_of_dups to fixed bin (35) since 2 30* that's what relation manager returns. 2 31* 2 32**/ 2 33 2 34 2 35 /* 2 36* this structure is allocated in the static area of 2 37* mdbm_rm_db_info.incl.pl1 once for each attribute per relation in 2 38* a readied file. it in turn points to 2 39* mdbm_rm_domain_info.incl.pl1 for the attributes domain. the 2 40* rm_attr_info is pointed to by mdbm_rm_rel_info.incl.pl1. all 2 41* structures are in the rm_db_info area. the attribute data 2 42* position within a tuple as stored in the data file are kept in 2 43* this resultant model of the attribute. 2 44* */ 2 45 2 46 dcl 1 rm_attr_info aligned based (rai_ptr), /* resultant attr. info */ 2 47 2 name char (32), /* from submodel */ 2 48 2 model_name char (32), /* from model */ 2 49 2 key_attr bit (1) unal, /* if key attribute */ 2 50 2 index_attr bit (1) unal, /* if secondary index */ 2 51 2 read_perm bit (1) unal, /* user has retr. permission */ 2 52 2 modify_perm bit (1) unal, /* user has modify permission */ 2 53 2 mdbm_secured bit (1) unal, /* on => database secured */ 2 54 2 reserved bit (30) unal, /* for future use */ 2 55 2 index_id bit (36) aligned, /* index id if index_attr */ 2 56 2 defn_order fixed bin, /* relative order in which attr is defined in the view */ 2 57 2 key_order fixed bin, /* relative order defined in prim. key */ 2 58 2 bit_length fixed bin (35), /* length if fixed, max. len. if var. */ 2 59 2 domain_ptr ptr, /* to domain info */ 2 60 2 number_of_dups fixed bin (35), /* if the attribute is indexed this will 2 61* be the number of duplicate values, exact 2 62* for a page_file database, an estimate for a vfile type */ 2 63 2 model_defn_order fixed bin; /* relative order in which attr is defined in the model */ 2 64 2 65 dcl rai_ptr ptr int automatic init (null ()); 2 66 2 67 /* END mdbm_rm_attr_info.incl.pl1 */ 2 68 2 69 331 332 3 1 /* BEGIN mdbm_rm_domain_info.incl.pl1 -- jaw, 9/26/78 */ 3 2 3 3 /* WARNING 3 4* If the rm_domain_info structure is changed then the mrds_data_ 3 5* item saved_res_version MUST be incremented to invalidate all 3 6* existing saved resultants 3 7**/ 3 8 3 9 /* DESCRIPTION: 3 10* 3 11* This structure is allocated in the mdbm_rm_db_info.incl.pl1 3 12* static area, once per attribute used in a relation in a readied 3 13* file. it is pointed to by the mdbm_rm_attr_info.incl.pl1, and may 3 14* point to mdbm_rm_ck_and_group.incl.pl1 if a "-check" option 3 15* boolean expression was declared for this domain. it contains the 3 16* descriptor for this domain data type, and other resultant model 3 17* information. 3 18* 3 19* 3 20* HISTORY: 3 21* 3 22* 81-05-06 Rickie E. Brinegar: Modified ck_proc, encode_proc, 3 23* decode_proc to be entry variables instead of entry pointers. This 3 24* allows these programs to be written in languages other than pl1. 3 25* 3 26* 81-05-28 Jim Gray : removed unused procedure points, and unused 3 27* check stack structure elements. Also made the descriptors bit 3 28* (36) in this structure, rather than pointers to the descriptors 3 29* elsewhere. Also removed un-needed redundant assign_ parameters, 3 30* that are actually available in the descriptors. 3 31* 3 32* 3 33**/ 3 34 3 35 dcl 1 rm_domain_info aligned based (rdi_ptr), /* domain information */ 3 36 2 name char (32), /* domain name */ 3 37 2 db_desc bit (36), /* to desc. for db. */ 3 38 2 user_desc bit (36), /* desc for user visible data */ 3 39 2 user_bit_len fixed bin, /* storage length of users data */ 3 40 2 ck_proc_entry entry variable, /* to check proc. entry */ 3 41 2 encd_proc_entry entry variable, /* to encode proc entry */ 3 42 2 decd_proc_entry entry variable, /* to decode proc entry */ 3 43 2 ck_proc bit (1) unal, /* Is there a check proc */ 3 44 2 encd_proc bit (1) unal, /* Is there an encode proc */ 3 45 2 decd_proc bit (1) unal, /* Is there a decode proc */ 3 46 2 pad bit (33) unal, 3 47 2 next_domain_ptr ptr ; /* to next domain, in list of all domains */ 3 48 /* to check stack and groups */ 3 49 3 50 3 51 dcl rdi_ptr ptr int automatic init (null ()); 3 52 3 53 /* END mdbm_rm_domain_info.incl.pl1 */ 3 54 3 55 333 334 4 1 /* BEGIN INCLUDE FILE mrds_authorization.incl.pl1 - - 81-01-20 Jim Gray */ 4 2 4 3 /* HISTORY: 4 4* 4 5* 81-01-20 Jim Gray : original created for the mmi_$get_authorization interface 4 6* 4 7**/ 4 8 4 9 /* DESCRIPTION: 4 10* 4 11* this structure returns the callers user_class 4 12* either database administrator or normal user. 4 13* Note that these separate classes were used to allow 4 14* future expansion to the user classes, rather than 4 15* make them logical "not"'s of one another. 4 16* NOTE: a DBA is always also a normal user, thus if the caller 4 17* is a DBA, his normal_user bit will be on also. 4 18* 4 19**/ 4 20 4 21 4 22 declare 1 mrds_authorization aligned based (mrds_authorization_ptr), 4 23 2 version fixed bin, /* version number of this structure */ 4 24 2 administrator bit (1) unal, /* caller is a DBA */ 4 25 2 normal_user bit (1) unal, /* caller has no special priviledges */ 4 26 2 mbz bit (34) unal ; 4 27 4 28 4 29 declare mrds_authorization_ptr ptr ; /* pointer for referring to the structure */ 4 30 4 31 declare mrds_authorization_structure_version fixed bin init (1) int static options (constant) ; 4 32 4 33 /* END INCLUDE FILE mrds_authorization.incl.pl1 */ 335 336 5 1 /* BEGIN mrds_dbcb.incl.pl1 -- jaw, 11/7/78 */ 5 2 5 3 5 4 5 5 /****^ HISTORY COMMENTS: 5 6* 1) change(85-11-17,Dupuis), approve(85-12-16,MCR7314), 5 7* audit(86-02-04,Brunelle), install(86-02-05,MR12.0-1013): 5 8* This entry is being made to cover the change made on 85-07-01 by Thanh 5 9* Nguyen. The scopes_changed flag was added to make checking for this 5 10* more efficient (mrds error list #137). 5 11* 2) change(86-06-10,Blair), approve(86-08-07,MCR7491), 5 12* audit(86-08-07,Gilcrease), install(86-08-15,MR12.0-1127): 5 13* Add a bit called dont_check_txn_id to indicate whether or not we should 5 14* care if multiple txns use the same selection_expression. (mrds #156) 5 15* 3) change(87-11-23,Hergert), approve(88-06-28,MCR7903), 5 16* audit(88-06-28,Dupuis), install(88-08-01,MR12.2-1073): 5 17* Added parser_work_area_ptr and mrds_se_info_ptr for new parser. 5 18* END HISTORY COMMENTS */ 5 19 5 20 5 21 /* WARNING 5 22* If the dbcb structure is changed then the mrds_data_ 5 23* item saved_res_version MUST be incremented to invalidate all 5 24* existing saved resultants 5 25**/ 5 26 5 27 /* HISTORY : 5 28* 5 29* modified by Jim Gray - - 80-10-24, to add new_select_expr bit for 5 30* tid_list management 5 31* 5 32* 81-1-9 Jim Gray : added like reference for ease in making the 5 33* phony resultant in mu_database_index, without having the area dcl 5 34* included. 5 35* 5 36* 81-06-17 Roger Lackey : added last_store_rel_name for use by 5 37* mrds_dsl_store 5 38* 5 39* 81-06-26 Roger Lackey : Added no_optimize and print_search_order 5 40* switches 5 41* 5 42* 81-07-06 Jim Gray : added identifier for the current selection 5 43* expression, so that relation statistics can be updated relative 5 44* to number of selection expressions seem. Also removed init for 5 45* last_store_rel_name, as this iw now properly done in 5 46* mrds_dsl_init_res. 5 47* 5 48* 81-07-17 Roger Lackey : added pred_ptr and unused_ptrs. 5 49* 5 50* 82-08-19 Mike Kubicar : added store_vector field. This is needed 5 51* for the conversion to the relation manager. 5 52* 5 53* 82-08-23 Davids: added the relmgr_entries and access_costs 5 54* substructures so that the entries and costs can change 5 55* depending on the type of database that is opened. 5 56* 5 57* 82-09-09 Mike Kubicar : added modify_vector field. This is needed 5 58* since modify uses a different vector type (general) than does store. 5 59* 5 60* 82-09-20 Davids: changed names of (store modify)_vector to 5 61* (store modify)_vector_ptr. Also (delete modify)_tuple_by_id to 5 62* (delete modify)_tuples_by_id. added the element cursor_storage_ptr 5 63* which should be inited to null and will be set by mu_cursor_manager_$get 5 64* during the first call. 5 65* 5 66* 82-09-21 Davids: renamed cursor_storage_ptr to cursor_ptrs_storage_ptr 5 67* since it deals with the pointers to the cursors and not the cursors 5 68* themelves and added the element cursor_storage_area_ptr which points 5 69* to the area where the cursors are kept. 5 70* 5 71* 82-09-22 Davids: renamed the transact_ctl_seg to transactions_needed. 5 72* the transact_ctl_seg always had a value of 0 and really didn't mean 5 73* anything. 5 74* 5 75* 82-09-22 Mike Kubicar : added create_relation, create_index and 5 76* destroy_relation_by_opening to relmgr_entries. They are needed 5 77* by mrds_dsl_define_temp_rel. 5 78* 5 79* 82-09-24 Donna Woodka : added put_tuple to relmgr_entries. It 5 80* is needed by mu_store. 5 81* 5 82* 82-11-12 Davids: changed the declaration of the access_costs from fixed 5 83* bin to float bin since the values are not integers. 5 84* 5 85* 83-02-02 Davids: added the dbc_uid element. This will allow mrds to make 5 86* sure that the dbc_ptr still points to the correct segment. Element was 5 87* added to the end of the structure to allow modules that don't use 5 88* the element to continue to reference the dbcb structure without recompiling. 5 89* 5 90* 83-02-25 Davids: added the concurrency_on and rollback_on elements. These 5 91* are needed so that temp rels can be created with the same file attributes 5 92* as the permanent relations. 5 93* 5 94* 83-05-02 Mike Kubicar : Deleted get_next_search_specification_ptr and 5 95* added the resultant_in_pdir bit. 5 96* 5 97* 83-05-18 Davids: reduced the number of reserved bits to 14 (from 15) and 5 98* added the res_already_made element. 5 99* 5 100* 83-05-24 Mike Kubicar : Updated the relation manager calling sequences. 5 101* 5 102* 83-08-03 Mike Kubicar : Added the element_id_list_segment_ptr and removed 5 103* one of the unused pointers. 5 104* 5 105* 83-09-20 Ron Harvey: Added relmgr_entries.get_population. 5 106* 5 107* 84-08-27 John Hergert: Created compiled_se_info_ptr from unused_ptrs(2) 5 108* leaving unused_ptrs(1). 5 109* 5 110* 85-01-15 Thanh Nguyen: Added the work_area_ptr and removed the last 5 111* unused_ptrs (1). 5 112* 5 113* 85-04-12 Thanh Nguyen: Added user_started_transaction and 5 114* non_shared_to_shared flags. Also added se_transaction_id and some more 5 115* spare ptrs, entries and reserved storages for future enhancement, since 5 116* we changed the saved_res_version from rslt0001 to rslt0002. 5 117* 5 118* 85-07-01 Thanh Nguyen: Added scopes_changed flag. This flag is set by 5 119* common routine of mrds_dsl_set_scope, reset by mrds_dsl_optimize and 5 120* mrds_dsl_gen_srch_prog when building of a new search_vars. 5 121**/ 5 122 5 123 5 124 /* this structure is based on the {unique_name}.mrds.dbcb segment 5 125* that constitutes the non-secure portion of the resultant model that is 5 126* created during the opening of a database. it contains variables that 5 127* are used during the runtime access of the database, and an area 5 128* for evaluation of requests. it points to four other 5 129* segments in the resultant model, {unique_name}.mrds.rdbi, the secure 5 130* portion of the resultant(see mdbm_rm_db_info.incl.pl1), 5 131* {unique_name}.mrds.select, an area for selection expression evaluation, 5 132* {unique_name}.mrds.curdat, and {unique_name}.mrds.stadat, two segments 5 133* used in the elimination of duplicate tuples during a retrieve. 5 134* the dbcb area holds the structure in mdbm_scope_info.incl.pl1 5 135* that is used when the database is using the file scope mechanism 5 136* for concurrency control over file readying. the segment overlayed via 5 137* mrds_dbc.incl.pl1 structure is pointed to and also handles concurrency control, 5 138* across database openings. the pointer to this dbcb structure is kept in a table 5 139* which associates database indexes(returned from a call to dsl_$open), with particular 5 140* opening instances of resultant models. (see mu_database_index routine) */ 5 141 5 142 dcl 1 dbcb aligned based (dbcb_ptr), /* DBCB -- non-secure portion */ 5 143 2 data like dbcb_data, 5 144 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (dbcb.static_area)))); 5 145 5 146 dcl dbcb_ptr ptr; 5 147 5 148 declare 1 dbcb_data based, /* info part of dbcb, separated out so that 5 149* like references can avoid getting the area declaration */ 5 150 2 rdbi_ptr ptr, /* pointer to write protected mdbm_util_ info. */ 5 151 2 range_ptr ptr, /* ptr to range structure, or null */ 5 152 2 select_ptr ptr, /* ptr to select list, or null */ 5 153 2 sv_ptr ptr, /* pointer to search variables */ 5 154 2 so_ptr ptr, /* pointer to search operators */ 5 155 2 ti_ptr ptr, /* pointer to tuple info */ 5 156 2 lit_ptr ptr, /* pointer to the literal area, or null */ 5 157 2 current_ptr ptr, /* ptr to select list resulting from -current clause */ 5 158 2 ss_ptr ptr, /* ptr to select sets block if not simple s.e. */ 5 159 2 retr_info_ptr ptr, /* ptr to retrieve info area */ 5 160 2 trel_info_ptr ptr, /* ptr to retrieve info area */ 5 161 2 sti_ptr ptr, /* pointer to store info */ 5 162 2 dbc_ptr ptr, /* pointer to the data base control segment */ 5 163 2 sfi_ptr ptr, /* points to head of scalar function list */ 5 164 2 scope_ptr ptr, /* points to array of scope tuples */ 5 165 2 select_area_ptr ptr, /* ptr to area for current selection expression allocations */ 5 166 2 current_data_ptr ptr, /* ptr to one of 2 segments used by mrds_dsl_retrieve 5 167* for eliminating duplicate tuples. */ 5 168 2 static_data_ptr ptr, /* ptr to one of 2 segments used by mrds_dsl_retrieve 5 169* for eliminating duplicate tuples. */ 5 170 2 store_area_ptr ptr, /* temp storage area for dsl_$store */ 5 171 2 retrieve_area_ptr ptr, /* temp storage for dsl_$retrieve */ 5 172 2 modify_area_ptr ptr, /* temp storage area for dsl_$modify */ 5 173 2 delete_area_ptr ptr, /* temp storage area for dsl_$delete */ 5 174 2 def_temp_rel_area_ptr ptr, /* temp storage area for dsl_$define_temp_rel */ 5 175 2 pred_ptr ptr, /* Pointer to pred_array */ 5 176 2 store_vector_ptr ptr, /* Vector structure used during store operations */ 5 177 2 modify_vector_ptr ptr, /* Used during modifies */ 5 178 2 element_id_list_segment_ptr ptr, /* Points to the segment used to hold element_id_list structures */ 5 179 2 compiled_se_info_ptr ptr, /* points to the segment containing all info on compiled sexs */ 5 180 2 work_area_ptr ptr, /* Work area for encode/decode value allocations in mu_retrieve */ 5 181 2 se_info_ptr ptr, /* Points to se_info struct. Primarily for error reports */ 5 182 2 parser_work_area_ptr ptr, /* work area for parser */ 5 183 2 reserved_ptrs (4) ptr, /* Reserved for future use */ 5 184 2 another_flag bit (1) unal, /* on if predicate was -another */ 5 185 2 current_flag bit (1) unal, /* on if predicate was -current clause */ 5 186 2 dbc_incr bit (1) unal, /* on if dbc open mode has been incremented for this user */ 5 187 2 delete_flag bit (1) unal, /* On if search was called from mrds_dsl_sec_delete */ 5 188 2 dup_retain bit (1) unaligned, /* On if dup tuples allowed for retrieval */ 5 189 2 prev_select bit (1) unal, /* on if prev. select block processed in this s.e. */ 5 190 2 possible_op bit (1) unal, /* on of arith op. allowed */ 5 191 2 sel_clause bit (1) unal, /* on if currently in select clause */ 5 192 2 dsm_sw bit (1) unal, /* on if data base was opened via data submodel */ 5 193 2 val_rtrv bit (1) unal, /* if s.e. valid for retrieve */ 5 194 2 val_mod bit (1) unal, /* for modify */ 5 195 2 val_del bit (1) unal, /* for delete */ 5 196 2 val_dtr bit (1) unal, /* for define temp rel */ 5 197 2 transactions_needed bit (1) unal, /* On => transaction must be started or in progress does 5 198* not imply that the database is of type page_file */ 5 199 2 open_mode bit (3) unal, /* 0=>unknown, 1=>r, 2=>u, 3=>er, 4=>eu, >4=>bad */ 5 200 2 new_select_expr bit (1) unal, /* on => starting a new tid list management period */ 5 201 2 no_optimize bit (1) unal, /* On => no optimize */ 5 202 2 print_search_order bit (1) unal, /* On => print the search order */ 5 203 2 resultant_in_pdir bit (1) unal, /* On => Temp segments are in the process dir */ 5 204 2 res_already_made bit (1) unal, /* On => resultant has been made based on a saved copy */ 5 205 2 user_started_transaction bit (1) unal, /* On => user already started his own transaction. */ 5 206 2 non_shared_to_shared bit (1) unal, /* On => user changed the scope from non shared to shared 5 207* inside a sequence of -another selection expression. */ 5 208 2 scopes_changed bit (1) unal, /* On => scopes had been changed by set_scopes or delete_scopes */ 5 209 2 dont_check_txn_id bit (1) unal, /* On => cpmd needs same selection exp across multiple txns */ 5 210 2 reserved bit (10) unal, /* reserved for future use */ 5 211 2 nseq_sch fixed bin (35), /* no. tuples located via sequential search */ 5 212 2 nind_sch fixed bin (35), /* no. tuples located via index search */ 5 213 2 nhash_sch fixed bin (35), /* no. tuples located via hash search */ 5 214 2 nlk_sch fixed bin (35), /* no tuples located via link search */ 5 215 2 cur_lit_offset fixed bin (35), /* current bit offset in literal string */ 5 216 2 dbi fixed bin (35), /* database index for this opening */ 5 217 2 last_s_e_id_num fixed bin (35), /* identifying number for last selection expression seen */ 5 218 2 se_transaction_id bit (36) aligned, /* transaction id from beginning of select expression */ 5 219 2 last_store_rel_name char (32), /* Name of relation last used for store */ 5 220 2 cursor_ptrs_storage_ptr ptr, /* pointer to space where cursor ptrs are stored */ 5 221 2 cursor_storage_area_ptr ptr, /* pointer to area where the cursors are kept */ 5 222 2 reserved_words (10) fixed bin (35), /* Reserved for future use */ 5 223 2 relmgr_entries, /* relation manager entries */ 5 224 3 open entry (char (*), char (*), bit (36) aligned, fixed bin (35)), 5 225 3 close entry (bit (36) aligned, fixed bin (35)), 5 226 3 create_cursor entry (bit (36) aligned, ptr, ptr, fixed bin (35)), 5 227 3 destroy_cursor entry (ptr, ptr, fixed bin (35)), 5 228 3 set_scope entry (bit (36) aligned, bit (2) aligned, bit (2) aligned, fixed bin (35)), 5 229 3 delete_tuples_by_id entry (ptr, ptr, fixed bin (35), fixed bin (35)), 5 230 3 modify_tuples_by_id entry (ptr, ptr, ptr, fixed bin (35), fixed bin (35)), 5 231 3 get_tuple_by_id entry (ptr, bit (36) aligned, ptr, ptr, ptr, fixed bin (35)), 5 232 3 get_tuples_by_spec entry (ptr, ptr, ptr, ptr, ptr, fixed bin (35)), 5 233 3 get_tuple_id entry (ptr, ptr, ptr, ptr, fixed bin (35)), 5 234 3 put_tuple entry (ptr, ptr, bit (36) aligned, fixed bin (35)), 5 235 3 get_count entry (ptr, ptr, fixed bin (35), fixed bin (35)), 5 236 3 get_duplicate_key_count entry (ptr, bit (36) aligned, fixed bin (17), fixed bin (35), fixed bin (35)), 5 237 3 get_population entry (ptr, fixed bin (35), fixed bin (35)), 5 238 3 create_relation entry (char (*), char (*), ptr, ptr, bit (36) aligned, bit (36) aligned, fixed bin (35)), 5 239 3 create_index entry (bit (36) aligned, ptr, bit (36) aligned, fixed bin (17), bit (36) aligned, fixed bin (35)), 5 240 3 destroy_relation_by_path entry (char (*), char (*), fixed bin (35)), 5 241 3 reserved_entries (5) entry (), 5 242 2 access_costs, /* access costs for permute */ 5 243 3 total_primary_key_cost float bin, 5 244 3 access_cost float bin, 5 245 3 access_overhead float bin, 5 246 3 us_access_cost float bin, 5 247 3 os_access_cost float bin, 5 248 2 dbc_uid bit (36) aligned, /* uid of the segment containing the dbc structure */ 5 249 2 concurrency_on bit (1) unal, /* "1"b implies dmfile concurrency is being used */ 5 250 2 rollback_on bit (1) unal; /* "1"b iomplies before journaling is to be done */ 5 251 5 252 /* END mrds_dbcb.incl.pl1 */ 5 253 5 254 337 338 6 1 /* BEGIN mdbm_rm_rel_info.incl.pl1 -- jaw, 11/16/78 */ 6 2 6 3 /* WARNING 6 4* If the rm_rel_info structure is changed then the mrds_data_ 6 5* item saved_res_version MUST be incremented to invalidate all 6 6* existing saved resultants 6 7**/ 6 8 6 9 /* HISTORY: 6 10* 6 11* Modified by Jim Gray - - May 1980, to include model number of 6 12* attributes, and varying attributes, so that partial view 6 13* submodels will have the info needed to properly set up the 6 14* varying length array headers in the tuple structure. 6 15* 6 16* Modified by Jim Gray - - 80-11-06, to rename r_perm = 6 17* status_perm, s_perm = append_tuple_perm, d_perm = 6 18* delete_tuple_perm, and make m_perm = unused_perm. 6 19* 6 20* 81-01-23 Jim Gray : added bit to indicate whether the last model 6 21* view attribute was varying character or bit, since a partial view 6 22* submodel will not have this information in the resultant, and it 6 23* is needed for determining the new tuple length in mus_mod_ubtup, 6 24* since with exact length storage of varying length attributes, 6 25* each tuple can be a different length, which is can only be 6 26* determined by examining the tuple itself. 6 27* 6 28* 81-01-29 Jim Gray : added curent tuple count, to provide for 6 29* interface to allow temp rel population to be known, and to 6 30* provide a more efficient means of finding an approx. current perm 6 31* relation population. 6 32* 6 33* 81-05-28 Jim Gray : removed structure elements referring to 6 34* blocked files, foreign keys, and ids procedures. Also set number 6 35* of files per rel to a constant of 1. 6 36* 6 37* 81-05-28 Jim Gray : combined data from rm_file_info into this 6 38* structure so that only one structure per relation is needed. 6 39* 6 40* 81-07-02 Jim Gray : added total_key and dup_key vfile statistics 6 41* counts. Also added number of operations count since last 6 42* statistics update, and a time since the statistics were last 6 43* updated. 6 44* 6 45* 81-07-06 Jim Gray : added a per selection expression update 6 46* identifier so that small relations could be updated on a per S.E. 6 47* basis 6 48* 6 49* 82-04-21 R. Lackey : Added number_selected (ri_niocbs_init refer (rm_rel_info.niocbs)) fixed bin (35) 6 50* to end of structure TR 12205 (Suggestion). 6 51* 6 52* 82-08-19 D. Woodka : Removed rm_rel_info.max_data_len field for 6 53* the DMS conversion. 6 54* 6 55* 82-08-30 Davids: added the opening_id element and removed the iocb 6 56* array and the niocb element for DMS conversion. Also removed the 6 57* number_selected array (and ri_niocbs_init) since subsets are not 6 58* going to be used. 6 59* 6 60* 82-09-20 Mike Kubicar : changed rm_rel_info.rel_id to bit (36) aligned 6 61* so that it can be used with relation manager. Also added 6 62* rm_rel_info.primary_key_index_id for relation manager. 6 63* 6 64* 82-09-22 Mike Kubicar : Removed the, now useless, fields var_attr_ptrs, 6 65* nvar_atts, model_nvar_atts. 6 66* 6 67* 82-09-24 Davids: Removed current_key_count and current_dup_key_count 6 68* since the duplicate key count for each secondary index is now being 6 69* kept in the attr_info structure and key_count was only needed to 6 70* help in calculating the average selectivity of each index which 6 71* can now be gotten directly from each index's dup key count. Also 6 72* removed the file_id element since it is no longer needed for 6 73* anything. 6 74* 6 75* 82-09-27 Mike Kubicar : removed file_id_len for the same reason file_id 6 76* was removed. 6 77* 6 78* 82-11-05 Mike Kubicar : added a pointer to an id_list structure to be 6 79* used when retrieving tuples from this relation. 6 80* 6 81* 83-04-06 Davids: Added the scope_flags_ptr which points to the scope_flags structure 6 82* for the relation. Note that this structure is part of the resultant NOT 6 83* part of the db.control structure. The scopes are duplicated in the resultant 6 84* to reduce contention for the db.control structure. Note also that the pointer 6 85* will always point to a scope_flags structure even if no scopes have been 6 86* set on the relation, the structure is allocated when the db is opened. 6 87**/ 6 88 6 89 6 90 /* DESCRIPTION: 6 91* 6 92* This structure is allocated in the area part of the structure in 6 93* mdbm_rm_db_info.incl.pl1 as part of the resultant model created 6 94* at open time for a database. There will be one of these 6 95* rm_rel_info structures for each relation appearing in the 6 96* database view (there may be less than the total in the database 6 97* for a submodel openings). There will also be one for each 6 98* temporary relation currently defined for that opening. 6 99* 6 100* The structure in mdbm_rm_rel_array.incl.pl1 contains pointers to 6 101* all rm_rel_info structures allocated. It is used for searching 6 102* for the appropriate structure. This array is pointed to by 6 103* rm_db_info. There are two arrays, one for perm rels, one for temp 6 104* rels. 6 105* 6 106* The rm_rel_info structure points to the 6 107* mdbm_rm_attr_info.incl.pl1 structures, one for each attribute 6 108* appearing in this view of the relation. Each of these in turn 6 109* point to a mdbm_rm_domain_info.incl.pl1 structure for the domain 6 110* info for each attr. 6 111* 6 112* Most of the other information here deals with specifics of the 6 113* relation's logical definition, such as key and secondary index 6 114* attribute inidicators, security permissions, and tuple physical 6 115* construction details. 6 116* 6 117**/ 6 118 6 119 dcl 1 rm_rel_info aligned based (rmri_ptr), /* relation information */ 6 120 2 name char (32), /* from submodel */ 6 121 2 model_name char (30), /* from model */ 6 122 2 rel_id bit (36) aligned, /* unique id. */ 6 123 2 retrieve bit (1) unal, /* operations allowed by this view */ 6 124 2 modify bit (1) unal, 6 125 2 delete bit (1) unal, 6 126 2 store bit (1) unal, 6 127 2 total_key bit (1) unal, /* on if view includes full primary key */ 6 128 2 indexed bit (1) unal, /* on if exists sec. index */ 6 129 2 mdbm_secured bit (1) unal, /* on if mdbm must check security */ 6 130 2 status_perm bit (1) unal, /* if user has status. perm. */ 6 131 2 append_tuple_perm bit (1) unal, /* if user has store perm. */ 6 132 2 delete_tuple_perm bit (1) unal, /* if user has del. perm. */ 6 133 2 unused_perm bit (1) unal, /* for future use. */ 6 134 2 last_model_attr_char_var bit (1) unal, /* on => last model varying attr is char */ 6 135 2 reserved bit (24) unal, /* for future use */ 6 136 2 num_attr fixed bin, /* total no. of attr. in rel. */ 6 137 2 model_num_attr fixed bin, /* total attrs in model relation */ 6 138 2 nkey_attr fixed bin, /* no. of key attr. */ 6 139 2 model_nkey_attr fixed bin, /* total number of keys in model */ 6 140 2 primary_key_index_id bit (36) aligned, /* Index id of relation's primary key */ 6 141 2 nsec_inds fixed bin, /* no. sec. indexes */ 6 142 2 max_key_len fixed bin (35), /* max length (chars) of primary key */ 6 143 2 current_tuple_population fixed bin (35), /* last known total tuple count for this relation */ 6 144 2 last_statistics_update_count fixed bin, /* number of operations's, since this rels stats were updated */ 6 145 2 last_statistics_update_time fixed bin (71),/* last time this rels stats were updated */ 6 146 2 last_statistics_update_s_e_ref_num fixed bin (35), /* last select expr ID that updated this rels stats */ 6 147 2 ready_mode fixed bin, /* 1 => r, 2 => mr, 3 => u, 4 => l, 5 => sr, 6 => su */ 6 148 2 file_type fixed bin, /* 1 => unblocked, 2 => blocked, 3 => temporary */ 6 149 2 tuple_id_len fixed bin, /* no. bits in local tuple id */ 6 150 2 opening_id bit (36) aligned, /* relation manager opening is */ 6 151 2 key_attr_ptrs (nkey_attr_init refer (rm_rel_info.nkey_attr)) ptr, /* ptrs to key attr. */ 6 152 2 attr_ptrs (natts_init refer (rm_rel_info.num_attr)) ptr, /* ptrs to all attr. */ 6 153 2 id_list_ptr ptr, /* Id list for retrieves from the relation */ 6 154 2 scope_flags_ptr ptr; /* pointer to the scope_flags structure for the rel */ 6 155 6 156 dcl rmri_ptr ptr; 6 157 dcl (nkey_attr_init, 6 158 natts_init, 6 159 nvar_atts_init) fixed bin; 6 160 6 161 /* END mdbm_rm_rel_info.incl.pl1 */ 6 162 6 163 339 340 7 1 /* BEGIN mdbm_rm_rel_array.incl.pl1 -- jaw, 8/9/78 */ 7 2 7 3 /* WARNING 7 4* If the rm_rel_array structure is changed then the mrds_data_ 7 5* item saved_res_version MUST be incremented to invalidate all 7 6* existing saved resultants 7 7**/ 7 8 7 9 /* HISTORY: 7 10* 7 11* 81-05-28 Jim Gray : added model_name and file_id as part of 7 12* combining funtions of file_array and rel_array into one 7 13* structure. This will only allow 1 relation per file model now. 7 14* Also changed structure to allow more efficient searching 7 15* via and index builtin, rather than a programmed loop. 7 16* Search is now I = index(string(rm_rel_array.name), "!" || in_name) 7 17* with I = ((I - 1) / 33) + 1 to convert from a char to array index. 7 18* 7 19**/ 7 20 7 21 7 22 /* this structure is allocated in the static are of the structure 7 23* in mdbm_rm_db_info.incl.pl1, the secure portion of the database 7 24* resultant model upon opening the database. two copies are 7 25* allocated, one for temporary relations, initially empty, and one 7 26* for relations known to the opener, which has a length sufficient 7 27* for all relations known to the user, but whose names, etc. will 7 28* not be filled in until the file containing that particular 7 29* relation is readied. the rm_db_info structure contains a pointer 7 30* to the rel_arrays, and the array entries, when "readied", point 7 31* to the mdbm_rm_rel_info.incl.pl1 structures containing model 7 32* information about the relation, it's attributes, etc. */ 7 33 7 34 dcl 1 rm_rel_array aligned based (rmra_ptr), /* array of open relations */ 7 35 2 num_rels fixed bin, /* no. rels in db. */ 7 36 2 name (1:rm_num_rels_init refer (rm_rel_array.num_rels)) unal, 7 37 3 mark char (1) unal, /* separator character = "!" */ 7 38 3 submodel char (32) unal, /* name of relation is submodel view, model opening => model name */ 7 39 2 rel_data (rm_num_rels_init refer (rm_rel_array.num_rels)), 7 40 3 model_name char (30), /* name of relation in model */ 7 41 3 ri_ptr ptr unal ; /* pointer to rm_rel_info */ 7 42 7 43 dcl rmra_ptr ptr; 7 44 dcl rm_num_rels_init fixed bin; 7 45 7 46 /* END mdbm_rm_rel_array.incl.pl1 */ 7 47 7 48 341 342 8 1 /* BEGIN mdbm_rm_db_info.incl.pl1 -- jaw, 11/7/78 */ 8 2 8 3 8 4 8 5 /****^ HISTORY COMMENTS: 8 6* 1) change(86-08-13,Hergert),, approve(88-06-28,MCR7903), 8 7* audit(88-06-28,Dupuis), install(88-08-01,MR12.2-1073): 8 8* Removed change of 84-11-02. i.e. replaced even_word_pad. 8 9* END HISTORY COMMENTS */ 8 10 8 11 8 12 /* WARNING 8 13* If the rm_db_info structure is changed then the mrds_data_ 8 14* item saved_res_version MUST be incremented to invalidate all 8 15* existing saved resultants 8 16**/ 8 17 8 18 /* DESCRIPTION: This structure is based on a segment 8 19* {unique_name}.mrds.rdbi that represents the secure portion of the 8 20* resultant model that is created partially at database open time, 8 21* (the rm_file_array, and rm_rel_array) and partially at ready_file 8 22* time, (the rm_file_info, rm_rel_info, rm_attr_info, 8 23* rm_domain_info, rm_plink_info and rm_clink_info). it's purpose is 8 24* to provide an efficient means of accessing database model 8 25* information, as seen from the possibly submodel view of the user, 8 26* and his current state of "files readied". it is the secure part 8 27* because it contains the model information which needs to be 8 28* protected from general knowledge, and this segment will 8 29* eventually be capable of being in a lower ring. the structure 8 30* itself points to four arrays that are allocated in it's area, 8 31* that in turn point to the other structures mentions above, also 8 32* allocated in the rm_db_info.static_area. the arrays are the 8 33* rm_file_array, and rm_rel_array. their are a pair for temporary 8 34* relations, initially empty, and a pair for normal model 8 35* files/relations. the normal rm_file_array is initialized to a 8 36* list of all known file names, the rm_rel_array only gets relation 8 37* names as files are readied. the rm_file_array points to 8 38* rm_file_infos for each file (see mdbm_rm_file_info.incl.pl1) and 8 39* the rm_rel_array points to rm_rel_info for each relation 8 40* "readied". (see mdbm_rm_rel_info.incl.pl1). (the arrays are in 8 41* mdbm_rm_file_array.incl.pl1 and mdbm_rm_rel_array.incl.pl1). the 8 42* file infos point to contained rel infos, the rel infos point to 8 43* contained attr infos, and those in turn to domain infos. (see 8 44* mdbm_rm_attr_info.incl.pl1 and mdbm_rm_domain_info.incl.pl1) 8 45* foreign keys are represented by the structures 8 46* mdbm_rm_plink_info.incl.pl1, and mdbm_rm_clink_info.incl.pl1. the 8 47* pathnames of the model and submodel, if any, are also maintained 8 48* in rm_db_info. the pointer to this rm_db_info segment is obtained 8 49* from the dbcb segment tructure(see mrds_dbcb.incl.pl1) see the 8 50* individual include files for further organization information, 8 51* and particular data structures. 8 52* 8 53* HISTORY: 8 54* 8 55* 80-02-01 Jim Gray : Modified to put area on even word boundary, 8 56* so that define_area_ could be used to make it an extensible area 8 57* 8 58* 81-1-9 Jim Gray : added like reference to make the phony 8 59* resultant in mu_database_index easier to keep, since no reference 8 60* to the area is needed. 8 61* 8 62* 81-1-12 Jim Gray : added version of submodel used in opening to 8 63* resultant. 8 64* 8 65* 81-05-13 Rickie E. Brinegar: added the administrator bit to the 8 66* structure. 8 67* 8 68* 81-05-28 Jim Gray : removed pointers to file_arrays, since they 8 69* are now combined into the rel_array. Removed the control file 8 70* info which was unused. Added pointer to head of domain list, 8 71* which is to be used to insure only one copy of each domain info. 8 72* 8 73* 83-05-19 Davids: Added the saved_res_version element. 8 74* 8 75* 84-11-02 Thanh Nguyen: Replaced the even_word_pad by the 8 76* ref_name_proc_ptr to point to list of reference name of the 8 77* check, encode, or decode proc. 8 78* 8 79* CAUTION: The structure entries from db_version to sm_path should 8 80* not be moved or have their declarations changed because they are 8 81* used in the handling of old version database openings. 8 82* 8 83* 8 84**/ 8 85 8 86 dcl 1 rm_db_info aligned based (rdbi_ptr), /* data base info, located at base of res. dm. seg. */ 8 87 2 data like rm_db_info_data, 8 88 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (rm_db_info.static_area)))); 8 89 8 90 dcl rdbi_ptr ptr; 8 91 8 92 declare 1 rm_db_info_data based, /* separate declaration of info, so others can use 8 93* like reference to it without getting the area as well */ 8 94 2 db_version fixed bin, /* version no. of db */ 8 95 2 sm_version fixed bin unal, /* version of submodel used unal, 0 if model opening */ 8 96 2 val_level fixed bin unal, /* validation level for this db. */ 8 97 2 db_path char (168), /* abs. path of db. */ 8 98 2 sm_path char (168), /* path of submodel or model */ 8 99 2 mdbm_secured bit (1) unal, /* ON => database is secured */ 8 100 2 administrator bit (1) unal, /* ON => user is an administrator */ 8 101 2 pad bit (34) unal, /* for future use */ 8 102 2 saved_res_version char (8), /* version of the saved resultant in the 8 103* dbcb and rdbi segments in the db dir */ 8 104 2 domain_list_ptr ptr, /* pointer to head of list of domain_info's */ 8 105 2 ra_ptr ptr, /* pointer to rel. array */ 8 106 2 tra_ptr ptr, /* to rel array for temp rels */ 8 107 2 even_word_pad fixed bin (71) aligned; /* padding to put area on even word boundary */ 8 108 8 109 /* END mdbm_rm_db_info.incl.pl1 */ 8 110 8 111 343 344 9 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 9 2 9 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 9 4 9 5 dcl area_infop ptr; 9 6 9 7 dcl 1 area_info aligned based (area_infop), 9 8 2 version fixed bin, /* version number for this structure is 1 */ 9 9 2 control aligned like area_control, /* control bits for the area */ 9 10 2 owner char (32) unal, /* creator of the area */ 9 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 9 12 2 size fixed bin (18), /* size of the area in words */ 9 13 2 version_of_area fixed bin, /* version of area (returned only) */ 9 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 9 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 9 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 9 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 9 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 9 19 9 20 dcl 1 area_control aligned based, 9 21 2 extend bit (1) unal, /* says area is extensible */ 9 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 9 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 9 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 9 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 9 26 2 system bit (1) unal, /* says area is managed by system */ 9 27 2 pad bit (30) unal; 9 28 9 29 /* END INCLUDE FILE area_info.incl.pl1 */ 345 346 347 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/01/88 1314.0 mrds_dsl_get_attribute_list.pl1 >special_ldd>install>MR12.2-1073>mrds_dsl_get_attribute_list.pl1 329 1 10/14/83 1608.8 mrds_attribute_list.incl.pl1 >ldd>include>mrds_attribute_list.incl.pl1 331 2 10/14/83 1609.1 mdbm_rm_attr_info.incl.pl1 >ldd>include>mdbm_rm_attr_info.incl.pl1 333 3 10/14/83 1609.1 mdbm_rm_domain_info.incl.pl1 >ldd>include>mdbm_rm_domain_info.incl.pl1 335 4 10/14/83 1608.8 mrds_authorization.incl.pl1 >ldd>include>mrds_authorization.incl.pl1 337 5 08/01/88 1300.0 mrds_dbcb.incl.pl1 >special_ldd>install>MR12.2-1073>mrds_dbcb.incl.pl1 339 6 10/14/83 1609.1 mdbm_rm_rel_info.incl.pl1 >ldd>include>mdbm_rm_rel_info.incl.pl1 341 7 10/14/83 1609.1 mdbm_rm_rel_array.incl.pl1 >ldd>include>mdbm_rm_rel_array.incl.pl1 343 8 08/01/88 1310.7 mdbm_rm_db_info.incl.pl1 >special_ldd>install>MR12.2-1073>mdbm_rm_db_info.incl.pl1 345 9 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.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. access_info_version 1 based fixed bin(17,0) level 2 dcl 1-46 set ref 137* 139* 245 addr builtin function dcl 325 ref 87 87 108 108 administrator 1 based bit(1) level 2 packed packed unaligned dcl 4-22 set ref 194* 232 area 000100 stack reference condition dcl 295 ref 121 130 area_control based structure level 1 dcl 9-20 area_info based structure level 1 dcl 9-7 area_info_ 000010 constant entry external dcl 296 ref 87 area_ptr parameter pointer dcl 297 ref 9 9 80 85 129 285 areap 16 002136 automatic pointer level 2 dcl 327 set ref 85* attr_ptrs based pointer array level 2 dcl 6-119 ref 221 attribute 4 based structure array level 2 dcl 1-46 clean_up_condition 000106 automatic bit(1) packed unaligned dcl 298 set ref 64* 67* 281 cleanup 000110 stack reference condition dcl 299 ref 66 control 1 002136 automatic structure level 2 dcl 327 data based structure level 2 in structure "rm_db_info" dcl 8-86 in procedure "get_attribute_list" data based structure level 2 in structure "dbcb" dcl 5-142 in procedure "get_attribute_list" db_index parameter fixed bin(35,0) dcl 300 set ref 9 9 73* db_path 2 based char(168) level 3 dcl 8-86 ref 108 108 194 194 db_version based fixed bin(17,0) level 3 dcl 8-86 ref 102 dbcb based structure level 1 dcl 5-142 dbcb_data based structure level 1 unaligned dcl 5-148 dbcb_ptr 002172 automatic pointer dcl 5-146 set ref 73* 74 101 135 domain_name 34 based char(32) array level 3 dcl 1-46 set ref 233* 238* domain_ptr 26 based pointer level 2 dcl 2-46 ref 223 dsm_sw 106(08) based bit(1) level 3 packed packed unaligned dcl 5-142 ref 135 effective_access 53 based varying char(8) array level 3 dcl 1-46 set ref 245* 267* 269* 272* empty builtin function dcl 325 ref 306 error_code parameter fixed bin(35,0) dcl 301 set ref 9 9 62* 74* 80* 87* 88 89* 95* 102* 108* 114 117 122* 175* 184* 194* 199 error_table_$area_too_small 000012 external static fixed bin(35,0) dcl 302 ref 122 error_table_$badcall 000014 external static fixed bin(35,0) dcl 303 ref 80 error_table_$unimplemented_version 000016 external static fixed bin(35,0) dcl 304 ref 95 i 000116 automatic fixed bin(17,0) dcl 305 set ref 143* 166* 179* 184 188* 188 192 221 222 224 226 233 234 237 238 243 245 245 245 263 267 269 272 index builtin function dcl 325 ref 179 269 index_attr 20(01) based bit(1) level 2 packed packed unaligned dcl 2-46 ref 226 indexed 56 based bit(1) array level 3 packed packed unaligned dcl 1-46 set ref 226* key_attr 20 based bit(1) level 2 packed packed unaligned dcl 2-46 ref 226 key_order 23 based fixed bin(17,0) level 2 dcl 2-46 ref 226 length builtin function dcl 325 ref 173 local_area 000120 automatic area(1024) dcl 306 set ref 108 108 306* mdbm_secured 126 based bit(1) level 3 packed packed unaligned dcl 8-86 ref 137 232 model_name 10 based char(32) level 2 in structure "rm_attr_info" dcl 2-46 in procedure "get_attribute_list" ref 237 model_name 4 based char(32) array level 3 in structure "mrds_attribute_list" dcl 1-46 in procedure "get_attribute_list" set ref 234* 237* model_name 10 based char(30) level 2 in structure "rm_rel_info" dcl 6-119 in procedure "get_attribute_list" ref 194 194 modify_perm 20(03) based bit(1) level 2 packed packed unaligned dcl 2-46 ref 258 mrds_access 50 based varying char(8) array level 3 dcl 1-46 set ref 245* 263* mrds_access_string 002120 automatic varying char(4) dcl 310 set ref 254* 256* 256 258* 258 260 260* 263 267 269 mrds_attribute_list based structure level 1 dcl 1-46 set ref 129 132* 285 mrds_attribute_list_num_attrs_init 002162 automatic fixed bin(17,0) dcl 1-69 set ref 128* 129 129 134 143 mrds_attribute_list_ptr parameter pointer dcl 1-71 set ref 9 9 63* 129* 132 133 134 135 137 139 222 224 226 233 234 237 238 243 245 245 245 245 263 267 269 272 283 285 287* mrds_attribute_list_structure_version constant fixed bin(17,0) initial dcl 1-73 ref 95 133 mrds_authorization based structure level 1 dcl 4-22 mrds_authorization_ptr 002170 automatic pointer dcl 4-29 set ref 108* 194 232 mrds_authorization_structure_version 000004 constant fixed bin(17,0) initial dcl 4-31 set ref 108* mrds_dm_authorization$get_user_class 000024 constant entry external dcl 311 ref 108 mrds_error_$invalid_db_index 000026 external static fixed bin(35,0) dcl 312 ref 74 mrds_error_$not_freeing_area 000030 external static fixed bin(35,0) dcl 313 ref 89 mrds_error_$rel_name_too_long 000032 external static fixed bin(35,0) dcl 314 ref 175 mrds_error_$unknown_relation_name 000034 external static fixed bin(35,0) dcl 315 ref 184 mrds_error_$version_not_supported 000036 external static fixed bin(35,0) dcl 316 ref 102 mu_database_index$get_resultant_model_pointer 000022 constant entry external dcl 309 ref 73 mu_get_relation_acl 000020 constant entry external dcl 307 ref 194 multics_access_string 002122 automatic varying char(4) dcl 317 set ref 201* 203* 203 206* 206 209 209* 243 my_area_info 002136 automatic structure level 1 unaligned dcl 327 set ref 83* 87 87 name 1 based structure array level 2 in structure "rm_rel_array" packed packed unaligned dcl 7-34 in procedure "get_attribute_list" ref 179 name based char(32) level 2 in structure "rm_attr_info" dcl 2-46 in procedure "get_attribute_list" ref 222 name based char(32) level 2 in structure "rm_domain_info" dcl 3-35 in procedure "get_attribute_list" ref 238 nkey_attr 24 based fixed bin(17,0) level 2 dcl 6-119 ref 221 no_freeing 1(04) 002136 automatic bit(1) level 3 packed packed unaligned dcl 327 set ref 89 null builtin function dcl 325 ref 63 74 80 2-65 3-51 283 287 num_attr 22 based fixed bin(17,0) level 2 dcl 6-119 ref 128 num_attrs_in_view 2 based fixed bin(17,0) level 2 dcl 1-46 set ref 129* 132 134* 285 num_rels based fixed bin(17,0) level 2 dcl 7-34 ref 179 192 ra_ptr 134 based pointer level 3 dcl 8-86 ref 165 rai_ptr 002164 automatic pointer initial dcl 2-65 set ref 2-65* 221* 222 223 226 226 226 237 256 258 rdbi_ptr 002200 automatic pointer dcl 8-90 in procedure "get_attribute_list" set ref 101* 102 108 108 137 165 194 194 232 rdbi_ptr based pointer level 3 in structure "dbcb" dcl 5-142 in procedure "get_attribute_list" ref 101 rdi_ptr 002166 automatic pointer initial dcl 3-51 set ref 3-51* 223* 224 238 read_acl 002124 automatic bit(1) packed unaligned dcl 318 set ref 194* 203 269 read_perm 20(02) based bit(1) level 2 packed packed unaligned dcl 2-46 ref 256 rel_data based structure array level 2 dcl 7-34 rel_name_32 002125 automatic char(32) packed unaligned dcl 320 set ref 178* 179 relation_name parameter char packed unaligned dcl 319 ref 9 9 173 178 ri_ptr based pointer array level 3 packed packed unaligned dcl 7-34 ref 192 rm_attr_info based structure level 1 dcl 2-46 rm_db_info based structure level 1 dcl 8-86 rm_db_info_data based structure level 1 unaligned dcl 8-92 rm_domain_info based structure level 1 dcl 3-35 rm_rel_array based structure level 1 dcl 7-34 rm_rel_info based structure level 1 dcl 6-119 rmra_ptr 002176 automatic pointer dcl 7-43 set ref 165* 179 192 rmri_ptr 002174 automatic pointer dcl 6-156 set ref 128 192* 194 194 221 rtrim builtin function dcl 325 ref 108 108 173 178 194 194 194 194 string builtin function dcl 325 ref 179 structure_version parameter fixed bin(17,0) dcl 321 ref 9 9 95 submodel_name 14 based char(64) array level 3 dcl 1-46 set ref 222* submodel_view 3 based bit(1) level 2 packed packed unaligned dcl 1-46 set ref 135* system_acl 45 based varying char(8) array level 3 dcl 1-46 set ref 243* 245 unspec builtin function dcl 325 set ref 83* 132* user_data_type 44 based bit(36) array level 3 dcl 1-46 set ref 224* user_desc 11 based bit(36) level 2 dcl 3-35 ref 224 users_area based area dcl 323 ref 129 285 version 002136 automatic fixed bin(17,0) level 2 in structure "my_area_info" dcl 327 in procedure "get_attribute_list" set ref 84* version based fixed bin(17,0) level 2 in structure "mrds_attribute_list" dcl 1-46 in procedure "get_attribute_list" set ref 133* write_acl 002135 automatic bit(1) packed unaligned dcl 324 set ref 194* 206 267 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. area_info_version_1 internal static fixed bin(17,0) initial dcl 9-3 area_infop automatic pointer dcl 9-5 fixed builtin function dcl 325 natts_init automatic fixed bin(17,0) dcl 6-157 nkey_attr_init automatic fixed bin(17,0) dcl 6-157 nvar_atts_init automatic fixed bin(17,0) dcl 6-157 rel builtin function dcl 325 rm_num_rels_init automatic fixed bin(17,0) dcl 7-44 sys_info$max_seg_size external static fixed bin(35,0) dcl 322 NAMES DECLARED BY EXPLICIT CONTEXT. check_relation 000423 constant entry internal dcl 160 ref 114 clean_up 001153 constant entry internal dcl 276 ref 68 get_attribute_data 000674 constant entry internal dcl 217 ref 145 get_attribute_list 000033 constant entry external dcl 9 mrds_dsl_get_attribute_list 000052 constant entry external dcl 9 skip_allocate 000422 constant label dcl 156 ref 123 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1440 1500 1205 1450 Length 2112 1205 40 376 233 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME get_attribute_list 1250 external procedure is an external procedure. on unit on line 66 70 on unit on unit on line 121 64 on unit check_relation internal procedure shares stack frame of external procedure get_attribute_list. get_attribute_data internal procedure shares stack frame of external procedure get_attribute_list. clean_up internal procedure shares stack frame of on unit on line 66. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME get_attribute_list 000106 clean_up_condition get_attribute_list 000116 i get_attribute_list 000120 local_area get_attribute_list 002120 mrds_access_string get_attribute_list 002122 multics_access_string get_attribute_list 002124 read_acl get_attribute_list 002125 rel_name_32 get_attribute_list 002135 write_acl get_attribute_list 002136 my_area_info get_attribute_list 002162 mrds_attribute_list_num_attrs_init get_attribute_list 002164 rai_ptr get_attribute_list 002166 rdi_ptr get_attribute_list 002170 mrds_authorization_ptr get_attribute_list 002172 dbcb_ptr get_attribute_list 002174 rmri_ptr get_attribute_list 002176 rmra_ptr get_attribute_list 002200 rdbi_ptr get_attribute_list THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op shorten_stack ext_entry_desc int_entry trunc_fx2 set_chars_eis index_chars_eis divide_fx1 op_alloc_ op_freen_ op_empty_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. area_info_ mrds_dm_authorization$get_user_class mu_database_index$get_resultant_model_pointer mu_get_relation_acl THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$area_too_small error_table_$badcall error_table_$unimplemented_version mrds_error_$invalid_db_index mrds_error_$not_freeing_area mrds_error_$rel_name_too_long mrds_error_$unknown_relation_name mrds_error_$version_not_supported LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 306 000015 2 65 000020 3 51 000022 9 000025 62 000066 63 000070 64 000072 66 000073 67 000107 68 000112 69 000113 73 000114 74 000126 80 000137 83 000150 84 000153 85 000155 87 000160 88 000173 89 000177 95 000206 101 000215 102 000220 108 000227 114 000301 117 000306 121 000311 122 000325 123 000331 128 000334 129 000337 130 000353 132 000354 133 000364 134 000366 135 000370 137 000376 139 000405 143 000407 145 000417 147 000420 156 000422 160 000423 165 000424 166 000427 173 000431 175 000450 176 000453 178 000454 179 000457 184 000501 188 000506 192 000522 194 000534 199 000631 201 000635 203 000636 206 000650 209 000662 215 000673 217 000674 221 000675 222 000707 223 000720 224 000722 226 000724 232 000744 233 000755 234 000761 235 000765 237 000766 238 000773 243 001000 245 001006 252 001042 254 001043 256 001044 258 001057 260 001071 263 001102 267 001112 269 001124 272 001146 274 001152 276 001153 281 001154 283 001157 285 001164 287 001173 293 001177 ----------------------------------------------------------- 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