COMPILATION LISTING OF SEGMENT mrds_rst_relation_handler Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/18/85 1103.3 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* ****************************************************** 10* * * 11* * * 12* * Copyright (c) 1972 by Massachusetts Institute of * 13* * Technology and Honeywell Information Systems, Inc. * 14* * * 15* * * 16* ****************************************************** */ 17 18 19 20 /* HISTORY: 21* 22* originally written by jim gray - - october 1978 23* 24**/ 25 26 27 mrds_rst_relation_handler: procedure (rsc_ptr, list_ptr); 28 29 /* DESCRIPTION: 30* 31* this routine builds/alters the mrds database model relation information 32* and the global entity lists maintained by RMDB/CMDB, 33* based upon the relation data and directive that is active when 34* called by the RMDB/CMDB parser. 35* the directive may be undefine, define, redefine, or cmdb and the data 36* is either a relation name to be deleted or a linked list of 37* structures holding the relation information and it's attribute list 38* 39**/ 40 41 /* PARAMETERS: 42* 43* rsc_ptr - - (input) pointer to the common control segment 44* 45* list_ptr - - (input) pointer to the single relation name(undefine only) or 46* to the relation structure headed list of attribute structures 47* 48* database model - - (output) updated model with altered relation information 49* 50* global lists - - (output) the list of database entities, updated 51* according to directive and data 52* 53* error_output - - (output) via mrds_rst_error calls, of error messages 54* 55**/ 56 57 /* REMAINING ERRORS: 58* 59* undefine: 60* 61* the relation name may be the (this may be ignored) 62* the relation may not be defined in the database 63* 64* 65* define, cmdb: 66* 67* the relation name may be the (this may be ignored) 68* one of the attribute names may be the (this may be ignored) 69* the relation may already be defined in the database 70* one of the given attributes may not be defined as part of the given relation 71* the max_tuples will not be their final value until the file type is known for this relation 72* 73* redefine: 74* 75* same as define, except relation name may not be defined in the database 76* 77* note: "(this may be ignored)" means a previous error will prevent 78* a database model with erroneous information from being built 79* 80**/ 81 82 /* set semantic structure pointers */ 83 84 stmt_ptr = rsc_ptr -> rsc.stmt_ptr; 85 directive_ptr = rsc_ptr -> rsc.directive_ptr; 86 87 if directive.type = UNDEFINE then do; /* input structure depends on directive */ 88 delete_name_ptr = list_ptr; 89 relation_name = delete_name.overlay; 90 end; 91 else do; 92 relation_ptr = list_ptr; 93 relation_name = relation.name; 94 end; 95 96 /* call trace if metering is on */ 97 98 if ^rsc.trace_sw then ; 99 else call mrds_rst_meter (rsc_ptr, "mrds_rst_relation_handler", IN, relation_name); 100 101 /* check on which directive called us */ 102 103 if directive.type = UNDEFINE | directive.type = REDEFINE then do; 104 if stmt (directive.type).relation.number > 0 then ; /* not first time */ 105 else do; /* first time only, issue error */ 106 call ioa_$rs ("^a ^a", message, message_length, 107 "The relation handler will not implement ""undefine"" or ""redefine""", 108 "directives until a later release."); 109 call mrds_rst_error (rsc_ptr, 2 /* severity */, mrds_error_$rst_undone_option, (message)); 110 end; 111 end; 112 else do; 113 114 /* define or cmdb directive was caller, process newly defined relation */ 115 116 call define_relation (); 117 118 end; 119 120 /* call the trace routine if metering is turned on */ 121 122 if ^rsc.trace_sw then ; 123 else call mrds_rst_meter (rsc_ptr, "mrds_rst_relation_handler", OUT, relation_name); 124 125 define_relation: procedure (); 126 127 /* using a previously unknown relation name, 128* add this relation definition to the global lists for later use 129* in building the new definition into the database model via the file handler */ 130 131 132 133 134 /* make sure the relation is not already in the database or previously defined */ 135 136 call mrds_rst_list_element$add (relation.name, MAIN_LIST, rsc_ptr, 137 rsc.h_grel_ptr, gl_ptr, error_code); 138 139 if error_code = 0 then 140 error_mode = OFF; 141 else do; 142 call ioa_$rs ("^a^a^a ^d ^a", message, message_length, 143 "The relation """, relation.name, """ given on line", relation.line_num, 144 "is already defined in the database, the duplicate will be ignored!!"); 145 call mrds_rst_error (rsc_ptr, 2 /* severity */, mrds_error_$dup_rel, (message)); 146 call mrds_rst_rsc_alloc (rsc_ptr, GL, gl_ptr); /* make dummy global element not in list */ 147 error_mode = ON; 148 end; 149 150 151 152 /* relation was not found in list so it was added, 153* link list element to list head and fill in the blanks */ 154 155 gl.type = MAIN_LIST; 156 gl.name = relation.name; 157 gl.item_info_ptr = null (); /* no relation_info yet */ 158 gl.parse_info_ptr = relation_ptr; 159 gl.other_info_ptr = null (); /* gile global element not known yet */ 160 gl.item_sub_list_ptr = null (); /* no attributes yet */ 161 gl.file_info_ptr = null (); /* no file defined to hold relation yet */ 162 gl.file_model_ptr = null (); 163 gl.affected = ON; 164 gl.undefine = OFF; 165 gl.redefine = OFF; 166 if directive.type = DEFINE then do; 167 gl.define = ON; 168 gl.cmdb = OFF; 169 end; 170 else do; /* CMDB directive */ 171 gl.define = OFF; 172 gl.cmdb = ON; 173 end; 174 gl.superior_assigned = OFF; /* no file for this relation yet */ 175 gl.inferior_assigned = OFF; /* no attributes for this relation yet */ 176 gl.complete = OFF; /* no rel_info yet */ 177 gl.consistant = ON; /* assume good till find error */ 178 gl.reserved = OFF; 179 180 181 182 /* process the list of attributes for this relation */ 183 184 attribute_ptr = relation.a_ptr; 185 do while (attribute_ptr ^= null ()); 186 187 call define_relation_attribute (); 188 189 attribute_ptr = attribute.next; 190 end; 191 192 if gl.inferior_assigned then ; 193 else gl.consistant = OFF; /* no good attribute's in relation */ 194 195 196 end; 197 198 define_relation_attribute: procedure (); 199 200 201 /* make sure that the given attribute is defined in the database */ 202 203 call mrds_rst_tree_search (attribute.name, rsc.h_gattr_ptr, node_ptr, parent_ptr, success); 204 205 if ^success then do; /* not found */ 206 call ioa_$rs ("^a^a^a ^d ^a^a^a", message, message_length, 207 "The attribute """, attribute.name, """ on line", 208 attribute.line_num, "given for relation """, 209 relation.name, """ has not been defined in the database."); 210 call mrds_rst_error (rsc_ptr, 2 /* severity */, mrds_error_$undef_attr, (message)); 211 end; 212 else if error_mode then ; /* previous error => relation not found, so don't add sublists */ 213 else do; 214 attr_gl_ptr = node_ptr -> node.data; /* get attribute global element pointer */ 215 if attr_gl_ptr -> gl.item_info_ptr = null () then ; /* check for assigned domain for this attribute */ 216 else if attr_gl_ptr -> gl.item_info_ptr -> sl.new_other_info_ptr = null () then ; 217 else do; /* get attr's domain global element pointer */ 218 dom_gl_ptr = attr_gl_ptr -> gl.item_info_ptr -> sl.new_other_info_ptr; 219 dom_gl_ptr -> gl.superior_assigned = ON; /* now domain referenced by relation */ 220 end; 221 222 223 224 225 226 227 /* ATTRIBUTE SUBLIST INSERT */ 228 /* attribute found, add this relation to it's "used in relation" sublist */ 229 230 call mrds_rst_list_element$add (relation.name, SUB_LIST, rsc_ptr, 231 attr_gl_ptr -> gl.item_sub_list_ptr, sl_ptr, error_code); 232 233 if error_code ^= 0 then do; /* sub/main list disagreement */ 234 call ioa_$rs ("^a^a^a^a^a", message, message_length, 235 "LOGIC ERROR in mrds_rst_relation_handler, the relation """, relation.name, 236 """ was found the sublist of attribute """, attribute.name, 237 """ but wasn't found in the global relation list."); 238 call mrds_rst_error (rsc_ptr, 4 /* severity */, error_code, (message)); 239 end; 240 else do; 241 242 /* fill in the sub list element info */ 243 244 sl.type = SUB_LIST; 245 sl.name = relation.name; 246 sl.item_info_ptr = null (); /* no relation_info yet */ 247 sl.parse_info_ptr = relation_ptr; 248 sl.old_other_info_ptr = null (); /* no attr info yet */ 249 sl.new_other_info_ptr = attr_gl_ptr; 250 sl.global_list_ptr = gl_ptr; 251 sl.reserved = OFF; 252 253 attr_gl_ptr -> gl.superior_assigned = ON; /* relation present for this attribute */ 254 end; 255 256 257 258 259 260 261 /* RELATION SUBLIST INSERT */ 262 /* add this attribute to the relation's attribute sublist */ 263 264 call mrds_rst_list_element$add (attribute.name, SUB_LIST, rsc_ptr, 265 gl.item_sub_list_ptr, sl_ptr, error_code); 266 267 if error_code ^= 0 then do; 268 call ioa_$rs ("^a^a^a^a", message, message_length, 269 "LOGIC ERROR in mrds_rst_relation_handler, a duplicate attribute """, 270 attribute.name, 271 """ was found in relation """, relation.name, """."); 272 call mrds_rst_error (rsc_ptr, 4 /* severity */, error_code, (message)); 273 end; 274 else do; 275 276 /* fill in the sublist element */ 277 278 sl.type = SUB_LIST; 279 sl.name = attribute.name; 280 sl.item_info_ptr = attr_gl_ptr -> gl.item_info_ptr; /* attribute info pointer */ 281 sl.parse_info_ptr = attribute_ptr; /* attr parse structure */ 282 sl.old_other_info_ptr = attr_gl_ptr -> gl.other_info_ptr; /* domain info ptr */ 283 sl.new_other_info_ptr = attr_gl_ptr -> gl.other_info_ptr; /* domain info ptr */ 284 sl.global_list_ptr = attr_gl_ptr; 285 sl.reserved = OFF; 286 287 gl.inferior_assigned = ON; /* attribute(s) present */ 288 289 end; 290 291 end; 292 293 end; 294 295 dcl error_mode bit (1); /* ON => error occurred, special handling in progress */ 296 dcl relation_name char (32); /* relation name for this call */ 297 dcl sys_info$max_seg_size fixed bin (35) external; /* system constant */ 298 dcl (fixed, rel, addr, null) builtin; /* functions known to pl1 */ 299 dcl ON bit (1) internal static options (constant) init ("1"b); /* true state */ 300 dcl OFF bit (1) internal static options (constant) init ("0"b); /* false */ 301 dcl error_code fixed binary (35); /* mrds_error_ table index */ 302 dcl message char (256) varying;/* specifics of error message */ 303 dcl message_length fixed bin (21); /* length of specifics message */ 304 dcl mrds_error_$rst_undone_option fixed bin (35) external; /* option not coded yet */ 305 dcl mrds_error_$undef_attr fixed bin (35) external; /* item not in database */ 306 dcl mrds_error_$dup_rel fixed bin (35) external; /* duplicate attr definition */ 307 dcl mrds_rst_rsc_alloc entry (ptr, fixed bin, ptr); /* working area manager */ 308 dcl mrds_rst_tree_search entry (char (32) aligned, ptr, ptr, ptr, bit (1)); /* list searcher */ 309 dcl mrds_rst_error entry (ptr, fixed bin, fixed bin (35), char (*)); /* general error handler */ 310 dcl ioa_$rs entry options (variable); /* string manipulator */ 311 dcl mrds_rst_list_element$add entry (char (32) aligned, fixed binary, ptr, ptr, ptr, fixed bin (35)); 312 dcl list_ptr ptr; /* pointer to parse info list */ 313 dcl IN bit (1) internal static options (constant) init ("1"b); /* input meter flag */ 314 dcl OUT bit (1) internal static options (constant) init ("0"b); /* output meter flag */ 315 dcl mrds_rst_meter entry (ptr, char (*), bit (1), char (*)); /* metering/tracing routine */ 316 dcl attr_gl_ptr ptr; /* temp storage for attribute global element pointer */ 317 dcl dom_gl_ptr ptr; /* pointer to attribute's domain global list element */ 318 1 1 /* BEGIN INCLUDE FILE mrds_rst_rsc.incl.pl1 RDL 7/7/78 */ 1 2 1 3 /* Modified 8/21/78 by RDL */ 1 4 1 5 /* Modified 9/11/78 by RDL to add directive and stmt pointers */ 1 6 1 7 /* Modified 11/4/78 by RDL to add debug,trace,meter switches 1 8* 1 9* Modified 3/29/79 by RDL to change s_seg_info_ptr to source_seg_ptr 1 10* 1 11* Modified by Jim Gray - - Jan. 1980, to add flags to disallow blocked files, forieng keys, and restructuring. 1 12* 1 13* Modified by Jim Gray - - Feb. 1980, to add command level flag for cmdb subroutine interface. 1 14* 1 15* Modified by Jim Gray - - 80-11-06, to add bit for cmdb -secure option. 1 16* 1 17* 81-05-18 Jim Gray : added bit for max_attributes error message, so that 1 18* it would only be issued on first occurence. 1 19* 1 20* 82-08-19 Davids: added the db_type field. 1 21* 1 22* 83-02-18 Mike Kubicar : Removed the db_type field and added the 1 23* db_relation_mode_flags substructure to define the modes applicable 1 24* to the database's relations. Also removed assorted unsed fields 1 25* (names that included the word unused). 1 26* 1 27**/ 1 28 1 29 dcl 1 rsc based (rsc_ptr), /* Restructuring control info */ 1 30 2 rsc_dir char (200), /* pathname of directory containing rsc segment */ 1 31 2 dbp char (168), /* Database absolute path */ 1 32 2 temp_dir char (168), /* Path name of temp restrucuring directory */ 1 33 2 temp_dir_sw bit (1) unal, /* On => temp dir has been created */ 1 34 2 db_quiesced_sw bit (1) unal, /* On => database has been quiesced */ 1 35 2 o_db_open_sw bit (1) unal, /* On => old database has been opened */ 1 36 2 n_db_open_sw bit (1) unal, /* On => temp database is open */ 1 37 2 listing_seg_sw bit (1) unal, /* On => listing segment has been created */ 1 38 2 skip_scanner_conversion bit (1) unal, /* Skip conversion in scanner */ 1 39 2 cmdb_option bit (1) unal, /* ON => this is a cmdb source, not restructuring */ 1 40 2 trace_sw bit (1) unal, /* On -> trace mode in affect */ 1 41 2 debug_sw bit (1) unal, /* On = debug mode (NOT IMPLEMENTED) */ 1 42 2 meter_sw bit (1) unal, /* On = procedures call metering procedure */ 1 43 2 delete_db_sw bit (1) unal, /* On = delete data base in cleanup */ 1 44 2 model_consistent_sw bit (1) unal, /* On => Model is consistent */ 1 45 2 physical_started_sw bit (1) unal, /* On => Physical restructuring started */ 1 46 2 physical_complete_sw bit (1) unal, /* On => Physical restructuring completed */ 1 47 2 model_overflow bit (1) unal, /* ON => model segment area condition occurred */ 1 48 2 max_files bit (1) unal, /* ON => maximum number of files reached */ 1 49 2 allow_foreign_keys bit (1) unal, /* on => allow foreign key statment */ 1 50 2 foreign_key_seen bit (1) unal, /* on => foreign key definition in source */ 1 51 2 allow_blocked_files bit (1) unal, /* on => allow file statement with blocked option */ 1 52 2 blocked_file_seen bit (1) unal, /* on => blocked file definition in source */ 1 53 2 allow_restructuring bit (1) unal, /* on => allow RMDB entry point */ 1 54 2 command_level bit (1) unal, /* on => called from command unal, not subroutine level */ 1 55 2 secure bit (1) unal, /* on => -secure option given for cmdb */ 1 56 2 max_attrs bit (1) unal, /* on => max attrs/rel or max indexes/rel exceeded */ 1 57 2 db_relation_mode_flags, 1 58 3 dm_file_type bit (1) unal, /* on => relations are dm files */ 1 59 3 protection_on bit (1) unal, /* on => relations need transactions */ 1 60 3 concurrency_on bit (1) unal, /* on => concurrency control enabled */ 1 61 3 rollback_on bit (1) unal, /* on => before journalling is enabled */ 1 62 2 severity_high fixed bin, /* Highest severity level error encountered */ 1 63 2 phase fixed bin, /* 000 = init 1 64* 100 = global list init 1 65* 200 = parse 1 66* 300 = physical init 1 67* 400 = physical */ 1 68 2 h_o_seg_info_ls_ptr ptr, /* Pointer to head of old db seg_info list */ 1 69 2 h_n_seg_info_ls_ptr ptr, /* Pointer to head of new db seg_info list */ 1 70 2 h_gfile_ptr ptr, /* Pointer to head of global file list */ 1 71 2 h_gdom_ptr ptr, /* Pointer to head of global domain list */ 1 72 2 h_gattr_ptr ptr, /* Pointer to head of global attribute list */ 1 73 2 h_grel_ptr ptr, /* Pointer to head of global relation list */ 1 74 2 h_glink_ptr ptr, /* Pointer to head of global link list */ 1 75 2 o_dm_ptr ptr, /* Pointer to old data model seg (dm_model ) */ 1 76 2 n_dm_ptr ptr, /* Pointer to temp data model seg */ 1 77 2 o_fn_hdr_ptr ptr, /* Pointer to head of original file list (fn structure) */ 1 78 2 source_seg_ptr ptr, /* Pointer to source_seg */ 1 79 2 listing_iocb_ptr ptr, /* Pointer to listing segment iocb */ 1 80 2 directive_ptr ptr, /* Pointer to directive type str in mrds_rst_semactics.incl.pl1 */ 1 81 2 stmt_ptr ptr, /* Pointer to statement str in mrds_rst_sematics.incl.pl1 */ 1 82 2 trace_metering_iocb_ptr ptr, /* Pointer to seg used by trace and metering */ 1 83 2 tree_node_area_ptr ptr, /* pointer to working storage for tree nodes */ 1 84 2 tree_data, 1 85 3 seg_info_area_ptr ptr, /* seg info working storage area */ 1 86 3 gl_area_ptr ptr, /* global list data work storage area */ 1 87 3 sl_area_ptr ptr, /* sublist data work storage area */ 1 88 2 parse_info_area_ptr ptr, /* parse interface work area storage */ 1 89 2 static_info_area_ptr ptr, /* directive, stmt and other static work storage area */ 1 90 2 variable_length_area_ptr ptr, /* varibale allocates work storage area */ 1 91 2 other_area_ptr ptr, /* unspecified work area storage */ 1 92 2 wa area (sys_info$max_seg_size - fixed (rel (addr (rsc.wa))) + 1); /* Work area */ 1 93 1 94 dcl rsc_ptr ptr; /* Pointer to base of rsc segment */ 1 95 1 96 1 97 1 98 /* END INCLUDE FILE mrds_rst_rsc.incl.pl1 */ 1 99 319 320 2 1 /* BEGIN INCLUDE FILE mrds_rst_struct_types.incl.pl1 - - Jim Gray 2/20/79 */ 2 2 2 3 /* these constants are used to identify structures to be allocated 2 4* to the general purpose allocation routines */ 2 5 2 6 /* HISTORY: 2 7* 82-06-28 Roger Lackey : Removed struct types 52, 53, 54, 55, 56, 57, 58 2 8* Type 25 is no longer used and is handled with special code so bounds of 2 9* array could continue to work */ 2 10 2 11 /* PARSE INFO STRUCTURES */ 2 12 2 13 declare DOMAIN fixed bin internal static options (constant) init (1) ; 2 14 declare ATTRIBUTE_DOMAIN fixed bin internal static options (constant) init (2) ; 2 15 declare RELATION fixed bin internal static options (constant) init (3) ; 2 16 declare ATTRIBUTE fixed bin internal static options (constant) init (4) ; 2 17 declare FILE fixed bin internal static options (constant) init (5) ; 2 18 declare ITEM fixed bin internal static options (constant) init (6) ; 2 19 declare LINK fixed bin internal static options (constant) init (7) ; 2 20 declare FOREIGN_KEY fixed bin internal static options (constant) init (8) ; 2 21 declare CHILDREN fixed bin internal static options (constant) init (9) ; 2 22 declare INDEX fixed bin internal static options (constant) init (10) ; 2 23 declare DELETE_NAME fixed bin internal static options (constant) init (11) ; 2 24 declare DOM_LIST fixed bin internal static options (constant) init (12) ; /* in link handler */ 2 25 2 26 /* SEMANTIC STRUCTURES */ 2 27 2 28 declare DIRECTIVE fixed bin internal static options (constant) init (13) ; 2 29 declare STMT fixed bin internal static options (constant) init (14) ; 2 30 2 31 2 32 /* PARSING STRUCTURES */ 2 33 2 34 declare LEX_STACK fixed bin internal static options (constant) init (15) ; 2 35 declare P_STRUCT fixed bin internal static options (constant) init (16) ; 2 36 declare CUR_LEX_TOP fixed bin internal static options (constant) init (17) ; 2 37 declare FIXUP_TOKEN fixed bin internal static options (constant) init (50) ; /* scanner */ 2 38 declare STRING_SOURCE fixed bin internal static options (constant) init (51) ; /* semantics */ 2 39 declare TOKEN fixed bin internal static options (constant) init (18) ; 2 40 declare OUTPUT_TEXT fixed bin internal static options (constant) init (19) ; 2 41 2 42 2 43 /* DB_MODEL STRUCTURES */ 2 44 2 45 declare DB_MODEL fixed bin internal static options (constant) init (0) ; 2 46 declare FILE_INFO fixed bin internal static options (constant) init (1) ; 2 47 declare DOMAIN_INFO fixed bin internal static options (constant) init (2) ; 2 48 declare PATH_ENTRY fixed bin internal static options (constant) init (3) ; 2 49 declare STACK_ITEM fixed bin internal static options (constant) init (4) ; 2 50 declare CONSTANT fixed bin internal static options (constant) init (30) ; 2 51 declare VERSION_STATUS fixed bin internal static options (constant) init (5) ; 2 52 declare CHANGER fixed bin internal static options (constant) init (6) ; 2 53 2 54 2 55 /* FILE_MODEL STRUCTURES */ 2 56 2 57 declare FILE_MODEL fixed bin internal static options (constant) init (7) ; 2 58 declare REL_INFO fixed bin internal static options (constant) init (8) ; 2 59 declare ATTR_INFO fixed bin internal static options (constant) init (9) ; 2 60 declare PARENT_LINK_INFO fixed bin internal static options (constant) init (10) ; 2 61 declare CHILD_LINK_INFO fixed bin internal static options (constant) init (11) ; 2 62 declare ATTR_LIST fixed bin internal static options (constant) init (12) ; 2 63 declare ATD fixed bin internal static options (constant) init (31) ; 2 64 declare COMP_NO_ARRAY fixed bin internal static options (constant) init (32) ; 2 65 declare SORT_KEY fixed bin internal static options (constant) init (13) ; 2 66 declare DUP_PREV fixed bin internal static options (constant) init (14) ; 2 67 declare SELECT_CHAIN fixed bin internal static options (constant) init (15) ; 2 68 2 69 2 70 /* GLOBAL LIST STRUCTURES */ 2 71 2 72 declare GL fixed bin internal static options (constant) init (20) ; 2 73 declare SL fixed bin internal static options (constant) init (21) ; 2 74 declare SEGINFO fixed bin internal static options (constant) init (22) ; 2 75 declare LIST_OVRLY fixed bin internal static options (constant) init (26) ; 2 76 declare SAVED_CHILD_COUNT fixed bin internal static options (constant) init (24) ; /* in global list build */ 2 77 declare NODE fixed bin internal static options (constant) init (23) ; 2 78 2 79 2 80 /* DISPLAY STRUCTURES */ 2 81 2 82 declare DISPLAY_INFO fixed bin internal static options (constant) init (25) ; 2 83 2 84 /* Remove because nolonger used 82-06-28 2 85* NAME_LIST fixed bin internal static options (constant) init (52) ; 2 86* PAI_ARRAY fixed bin internal static options (constant) init (53) ; 2 87* PAR_LK_ATTR_INFO fixed bin internal static options (constant) init (54) ; 2 88* CAI_ARRAY fixed bin internal static options (constant) init (55) ; 2 89* CHILD_LK_ATTR_INFO fixed bin internal static options (constant) init (56) ; 2 90* NAME_TABLE fixed bin internal static options (constant) init (57) ; 2 91* ATTR_TABLE fixed bin internal static options (constant) init (58) ; 2 92**/ 2 93 2 94 /* END INCULDE FILE mrds_rst_struct_types */ 2 95 321 322 3 1 /* BEGIN INCLUDE FILE mrds_rst_semantics.incl.pl1 jeg 8/31/78 */ 3 2 3 3 /* structure to remember what directives have been seen and are active */ 3 4 3 5 declare 1 directive based (directive_ptr), 3 6 2 type fixed binary, /* stmt structure index for given directive */ 3 7 2 undefine, 3 8 3 active bit (1) unal, 3 9 3 seen bit (1) unal, 3 10 3 pad bit (34) unal, 3 11 2 define, 3 12 3 active bit (1) unal, 3 13 3 seen bit (1) unal, 3 14 3 pad bit (34) unal, 3 15 2 redefine, 3 16 3 active bit (1) unal, 3 17 3 seen bit (1) unal, 3 18 3 pad bit (34) unal, 3 19 2 cmdb, 3 20 3 active bit (1) unal, 3 21 3 seen bit (1) unal, 3 22 3 pad bit (34) unal ; 3 23 3 24 declare directive_ptr ptr internal static ; 3 25 3 26 /* encoding for directive types */ 3 27 3 28 declare UNDEFINE fixed bin internal static options (constant) init (1) ; 3 29 declare DEFINE fixed bin internal static options (constant) init (2) ; 3 30 declare REDEFINE fixed bin internal static options (constant) init (3) ; 3 31 declare CMDB fixed binary internal static options (constant) init (4) ; 3 32 3 33 3 34 /* structure to remember what statements have been seen, are active, 3 35* and how many items are in the statement, and how big the list for the last item was */ 3 36 3 37 declare 1 stmt (4) based (stmt_ptr), 3 38 2 domain, 3 39 3 active bit (1) unal, 3 40 3 pad bit (35) unal, 3 41 3 number fixed binary, 3 42 2 attribute, 3 43 3 active bit (1) unal, 3 44 3 pad bit (35) unal, 3 45 3 number fixed binary, 3 46 2 relation, 3 47 3 active bit (1) unal, 3 48 3 pad bit (35) unal, 3 49 3 number fixed binary, 3 50 2 file, 3 51 3 active bit (1) unal, 3 52 3 pad bit (35) unal, 3 53 3 number fixed binary, 3 54 2 foreign_key, 3 55 3 active bit (1) unal, 3 56 3 pad bit (35) unal, 3 57 3 number fixed binary, 3 58 2 index, 3 59 3 active bit (1) unal, 3 60 3 pad bit (35) unal, 3 61 3 number fixed binary ; 3 62 3 63 /* NOTE: 3 64* active ON => this stmt/directive is currently being processed 3 65* seen ON => this stmt/directive was or is being processed 3 66**/ 3 67 3 68 declare stmt_ptr ptr internal static ; 3 69 3 70 /* END INCLUDE FILE mrds_rst_semantics.incl.pl1 */ 3 71 323 324 4 1 /* BEGIN INCLUDE FILE mrds_rst_parse_info.incl.pl1 -- oris, 6/30/78 */ 4 2 /* modified 9/6/78 -- jeg, for lrk parser - cmdb interface */ 4 3 /* modified 12/20/78 - - jeg, to add line number info for handlers */ 4 4 /* modified 3/15/79 - - jeg, to add scanner, semantic, and link handler variables to be allocated in rsc */ 4 5 /* Modified by Jim Gray - - 23-June-80, to separate max_string_size, 4 6* and max_line_size mrds_data_ items. */ 4 7 4 8 4 9 4 10 4 11 declare 1 domain aligned based (domain_ptr), 4 12 2 name char (32), /* name of this domain */ 4 13 2 descriptor bit (36), /* Multics pl1 descriptor for domain type */ 4 14 2 varying_avg_length fixed bin (24), /* average length of varying strings */ 4 15 2 options bit (1) unal, /* ON => some option is present */ 4 16 2 pad bit (35) unal, 4 17 2 check, 4 18 3 flag bit (1) unal, /* ON => check option present */ 4 19 3 pad bit (35) unal, 4 20 3 stack_ptr ptr, /* pointer to postfix stack 4 21* holding boolean expression */ 4 22 3 stack_size fixed binary, /* number of stack elements */ 4 23 2 check_proc, 4 24 3 flag bit (1) unal, /* ON => check_proc option is present */ 4 25 3 pad bit (35) unal, 4 26 3 path char (168), /* check procedure pathname */ 4 27 3 entry char (32), /* check procedure entryname */ 4 28 2 encode_proc, 4 29 3 flag bit (1) unal, /* ON => encode_proc option is present */ 4 30 3 pad bit (35) unal, 4 31 3 path char (168), /* encode procedure pathname */ 4 32 3 entry char (32), /* encode procedure entryname */ 4 33 2 decode_proc, 4 34 3 flag bit (1) unal, /* ON => decode_proc option is present */ 4 35 3 pad bit (35) unal, 4 36 3 path char (168), /* decode procedure pathname */ 4 37 3 entry char (32), /* decode procedure entryname */ 4 38 2 decode_dcl, 4 39 3 flag bit (1) unal, /* ON => decode declaration is present */ 4 40 3 pad bit (35) unal, 4 41 3 descriptor bit (36), /* decode declaration pl1 descriptor */ 4 42 2 line_num fixed bin (24) ; /* line of domain name in source */ 4 43 4 44 4 45 declare domain_ptr ptr ; 4 46 4 47 4 48 4 49 4 50 4 51 dcl 1 relation aligned based (relation_ptr), 4 52 2 a_ptr ptr, /* ptr to attribute list for this relation */ 4 53 2 name char (32), /* relation name */ 4 54 2 max_tup fixed bin, /* maximum tuples for this relation if a blocked file */ 4 55 2 num_items fixed bin, /* number of attributes in this relation */ 4 56 2 unused bit (36) unal, /* future flags */ 4 57 2 line_num fixed bin (24) ; /* line of relation name in source */ 4 58 4 59 4 60 dcl relation_ptr ptr; 4 61 4 62 4 63 dcl 1 attribute aligned based (attribute_ptr), 4 64 2 next ptr, /* ptr to next in list */ 4 65 2 name char (32), /* name of attribute */ 4 66 2 pr_key bit (1) unal, /* ON => part of primary key */ 4 67 2 pad bit (35) unal, 4 68 2 defn_order fixed bin, /* position within the relation */ 4 69 2 key_order fixed bin, /* position within the primary key, if a key */ 4 70 2 line_num fixed bin (24) ; /* line of attribute name in source */ 4 71 4 72 4 73 dcl attribute_ptr ptr; 4 74 4 75 4 76 4 77 dcl 1 attribute_domain aligned based (attdom_ptr), 4 78 2 attr char (32), /* attribute name */ 4 79 2 dom char (32), /* domain name */ 4 80 2 default bit (1) unal, /* on => defined as default attr, not by source */ 4 81 2 unused bit (35) unal, /* future flags */ 4 82 2 line_num fixed bin (24) ; /* line of attribute name in source */ 4 83 4 84 dcl attdom_ptr ptr; /* ptr to attribute_domain structure */ 4 85 4 86 4 87 4 88 4 89 dcl 1 file aligned based (file_ptr), 4 90 2 i_ptr ptr, /* ptr to item containing relation name */ 4 91 2 name char (30), /* file name */ 4 92 2 type fixed bin, /* blocked or unblocked */ 4 93 /* type = 1 => unblocked, 4 94* type = 2 => blocked */ 4 95 2 ppb fixed bin, /* pages per block, if blocked */ 4 96 2 hbh fixed bin, /* hash bucket headers per block */ 4 97 2 block fixed bin, /* blocks per hash bucket headers */ 4 98 2 num_items fixed bin, /* nbr. items -- relations -- in file */ 4 99 2 default bit (1) unal, /* on => defined as default file, not by source */ 4 100 2 unused bit (35) unal, /* future flags */ 4 101 2 line_num fixed bin (24) ; /* line of file name in source */ 4 102 4 103 4 104 dcl file_ptr ptr; /* ptr to file structure */ 4 105 4 106 4 107 dcl 1 rel_index aligned based (index_ptr), 4 108 2 i_ptr ptr, /* ptr. to item containing index attr. name */ 4 109 2 rel_name char (32), /* name of relation being indexed */ 4 110 2 num_items fixed bin, /* nbr. items -- attributes -- indexed for a relation */ 4 111 2 unused bit (36) unal, /* future flags */ 4 112 2 line_num fixed bin (24) ; /* line of relation name in source */ 4 113 4 114 4 115 dcl index_ptr ptr; /* ptr to index structure */ 4 116 4 117 4 118 dcl 1 link aligned based (link_ptr), 4 119 2 parent_ptr ptr, /* ptr to foreign_key structure cont. parent rel. name */ 4 120 2 children_ptr ptr, /* ptr. to list of children names for this link */ 4 121 2 clust_fl bit (1) unal, /* ON => link is clustered in one file */ 4 122 2 pad bit (35) unal, 4 123 2 name char (32), /* name of this link */ 4 124 2 num_children fixed bin, /* number of children for this link's parent */ 4 125 2 line_num fixed bin (24) ; /* line of link name occurence in source */ 4 126 4 127 4 128 dcl link_ptr ptr; /* ptr to link structure */ 4 129 4 130 4 131 dcl 1 children aligned based (children_ptr), 4 132 2 next ptr, /* ptr to next in list */ 4 133 2 child_ptr ptr; /* ptr. to foreign_key struct. containing child rel. name */ 4 134 4 135 4 136 dcl children_ptr ptr; /* ptr to children structure */ 4 137 4 138 4 139 dcl 1 foreign_key aligned based (forkey_ptr), 4 140 2 i_ptr ptr, /* ptr to item list containing foreign key attributes */ 4 141 2 rel_name char (32), /* name of parent/child relation */ 4 142 2 num_items fixed bin, /* nbr of attributes defining this foreign key */ 4 143 2 unused bit (36) unal, /* future flags */ 4 144 2 line_num fixed bin (24) ; /* line of relation occurence in source */ 4 145 4 146 4 147 dcl forkey_ptr ptr; /* ptr to foreign_key structure */ 4 148 4 149 4 150 dcl 1 item aligned based (item_ptr), 4 151 2 next ptr, /* ptr to next item in the list */ 4 152 2 name char (32), /* name of item -- relation name or attribute name */ 4 153 2 unused bit (36) unal, /* future flags */ 4 154 2 line_num fixed bin (24) ; /* line of item occurence in source */ 4 155 4 156 4 157 dcl item_ptr ptr; /* ptr to item structure */ 4 158 4 159 4 160 declare 1 delete_name aligned based (delete_name_ptr), /* overlay for undefine parse information */ 4 161 2 overlay char (32), /* name portion */ 4 162 2 unused bit (36) unal, /* future flags */ 4 163 2 line_num fixed bin (24) ; /* line number of name occurence in source */ 4 164 4 165 declare delete_name_ptr ptr ; 4 166 4 167 /* scanner variables */ 4 168 4 169 declare token char (mrds_data_$max_string_size) varying 4 170 based (accum_token_ptr) ; /* temp store for accumulating the token */ 4 171 declare accum_token_ptr ptr internal static ; /* pointer to allocated accumulator store */ 4 172 declare mrds_data_$max_string_size fixed bin (35) external ; /* max token size in chars */ 4 173 declare mrds_data_$max_line_size fixed bin (35) ext ; /* max output listing line size */ 4 174 declare token_length fixed binary (24) ; /* current length of token */ 4 175 declare output_text char (mrds_data_$max_line_size) varying 4 176 based (output_text_ptr) ; /* body of text for this line in output listing */ 4 177 declare output_text_ptr ptr internal static ; /* pointer to allocated output line storage */ 4 178 declare fixup_token char (token_length) based ; /* saved fixed up version of token */ 4 179 4 180 /* semantic variables */ 4 181 4 182 declare source_size fixed bin (35) ; /* length of source char string for any_to_any */ 4 183 declare string_source_ptr ptr ; /* pointer to source for any_to_any conversion */ 4 184 declare string_source char (source_size) based (string_source_ptr) ; /* storage for expanded string constant */ 4 185 4 186 /* link handler variable */ 4 187 4 188 declare dom_list_ptr ptr ; /* pointer to domain list element */ 4 189 declare 1 dom_list based (dom_list_ptr), /* element of parent attr domain ptr list */ 4 190 2 next ptr, /* pointer to next in order on list */ 4 191 2 attr_name char (32) aligned, /* parent attr's name */ 4 192 2 dom_info_ptr ptr ; /* parent attr's domain ptr */ 4 193 4 194 /* END INCLUDE FILE mrds_rst_parse_info.incl.pl1 */ 4 195 325 326 5 1 /* BEGIN INCLUDE FILE mrds_rst_tree.incl.pl1 jeg 7/19/78 */ 5 2 5 3 /* common declarations for threaded binary tree routines 5 4* 5 5* The tree maintains an inorder list of it's keys. 5 6* this means that for a given node, any key in it's left subtree 5 7* is "less" than the given node's key and that any key in it's 5 8* right subtree is "greater" than the given node's key. 5 9* 5 10* Threads are maintained to allow fast and easy traversal of the tree. 5 11* threads occupy the position of null pointers of an straight binary tree, 5 12* thus they only occur in leaf nodes. 5 13* left threads point to that nodes inorder predecessor. 5 14* right threads point to that nodes inorder successor. 5 15* 5 16* note: root_ptr must be passed by reference 5 17* ( not by value ) so it can be changed . 5 18* Also, each parameter must be a different 5 19* variable. The same variable used for two 5 20* or more arguments when any of the tree 5 21* routines are called will produce errors */ 5 22 5 23 5 24 declare key char (32) aligned ; /* data key directing search */ 5 25 5 26 declare root_ptr ptr ; /* pointer to head of desired list */ 5 27 declare node_ptr ptr ; /* pointer to key node, when success */ 5 28 declare parent_ptr ptr ; /* pointer to direct parent of current node */ 5 29 declare data_ptr ptr ; /* pointer from tree node to data structure headed by node */ 5 30 declare successor_ptr ptr ; /* pointer to inorder successor of current node in tree */ 5 31 declare successor_parent_ptr ptr ; /* pointer to immediate tree parent of inorder successor node */ 5 32 declare predecessor_ptr ptr ; /* pointer to inorder predecessor of current node */ 5 33 declare predecessor_parent_ptr ptr ; /* pointer to direct parent of predecessor */ 5 34 declare area_ptr ptr ; /* pointer to based area for node allocation/freeing */ 5 35 5 36 declare work_area area based (area_ptr) ; /* area of storage for tree */ 5 37 5 38 declare success bit (1) ; /* on if operation successful */ 5 39 declare thread bit (1) aligned ; /* current thread indicator, on = thread, off = pointer */ 5 40 5 41 declare 1 node based (node_ptr) aligned, /* tree element */ 5 42 2 data ptr, /* data field link */ 5 43 2 key char (32), /* data key */ 5 44 2 right, /* right branch link */ 5 45 3 thread bit (1), /* indicates whether link is thread or pointer */ 5 46 3 link ptr, /* pointer to right descendent or thread to successor */ 5 47 2 left, /* left branch link */ 5 48 3 thread bit (1), /* indicates whether link is thread or pointer */ 5 49 3 link ptr, /* pointer to left descendent or thread to predecessor */ 5 50 2 pad bit (34) ; /* reserved for future flags */ 5 51 5 52 /* END INCLUDE FILE mrds_rst_tree.incl.pl1 */ 5 53 5 54 5 55 5 56 327 328 6 1 /* BEGIN INCLUDE FILE mrds_rst_global_lists.incl.pl1 jeg 7/17/78 */ 6 2 6 3 /* note: mrds_rst_list_element$add and delete entries 6 4* makes use of the following structure type correspondence 6 5* 6 6* structure_type = 1 refers to gl (global list element) 6 7* 6 8* structure_type = 2 refers to sl (global sublist element) 6 9* 6 10* structure_type = 3 refers to seg_info(segment information element) 6 11* 6 12**/ 6 13 6 14 6 15 dcl 1 gl aligned based (gl_ptr), /* Template for global list entry */ 6 16 2 type fixed bin, /* structure_type, usefull when overlay used */ 6 17 2 name char (32), /* Item name */ 6 18 2 item_info_ptr ptr, /* Pointer to info structure for this item */ 6 19 2 parse_info_ptr ptr, /* Pointer to info obtained by parsing source */ 6 20 2 other_info_ptr ptr, /* Pointer to additional info str if needed */ 6 21 2 item_sub_list_ptr ptr, /* Pointer to sub list of items if neccessary for this his item */ 6 22 2 file_info_ptr ptr, /* Pointer to file info for this entry */ 6 23 2 file_model_ptr ptr, /* Pointer to file model for this entry */ 6 24 2 affected bit (1) unal, /* ON => affected by some directive */ 6 25 2 cmdb bit (1) unal, /* ON => affected by cmdb directive */ 6 26 2 undefine bit (1) unal, /* ON => affected by undefine directive */ 6 27 2 define bit (1) unal, /* ON => affected by define directive */ 6 28 2 redefine bit (1) unal, /* ON => affected by redefine directive */ 6 29 2 superior_assigned bit (1) unal, /* ON => has parent */ 6 30 2 inferior_assigned bit (1) unal, /* ON => child present */ 6 31 2 complete bit (1) unal, /* ON => all things present */ 6 32 2 consistant bit (1) unal, /* ON => correct model */ 6 33 2 reserved bit (26) unal, /* for future use */ 6 34 2 child_defined bit (1) unal ; /* ON => global element entered by child */ 6 35 6 36 dcl gl_ptr ptr; /* Pointer to gl structure */ 6 37 6 38 6 39 6 40 dcl 1 sl aligned based (sl_ptr), /* Template of sub list entry for global list */ 6 41 2 type fixed bin, /* structure_type, usefull when overlay used */ 6 42 2 name char (32), /* Name of item */ 6 43 2 item_info_ptr ptr, /* Pointer to info structure for this entry */ 6 44 2 parse_info_ptr ptr, /* Pointer to info obtained by parsing source */ 6 45 2 old_other_info_ptr ptr, /* Pointer to old version of other info */ 6 46 2 new_other_info_ptr ptr, /* Pointer to new version of other info */ 6 47 2 global_list_ptr ptr, /* pointer to corresponding global list element */ 6 48 2 reserved bit (36) unal; /* Reserved for future use */ 6 49 6 50 dcl sl_ptr ptr; /* Pointer to sub list structure */ 6 51 6 52 6 53 dcl 1 seg_info based (seg_info_ptr), /* Info about segment initiated */ 6 54 2 name char (32), /* Segment name */ 6 55 2 dir char (168), /* Absolute path of containing directory */ 6 56 2 seg_ptr ptr, /* Pointer to base of segment */ 6 57 2 bcnt fixed bin (24); /* Bit count of segment */ 6 58 6 59 dcl seg_info_ptr ptr; /* Pointer to seg_info str */ 6 60 6 61 6 62 6 63 dcl MAIN_LIST fixed bin internal static options (constant) init (1); 6 64 dcl SUB_LIST fixed bin internal static options (constant) init (2); 6 65 dcl SEG_INFO fixed bin internal static options (constant) init (3); 6 66 6 67 declare 1 list_ovrly aligned based (list_ovrly_ptr), /* overlay for top part of gl and sl list elements */ 6 68 2 type fixed bin, /* structure_type, 1 => gl, 2 => sl */ 6 69 2 name char (32), /* Name of item */ 6 70 2 item_info_ptr ptr, /* pointer to info structure for this entry */ 6 71 2 parse_info_ptr ptr, /* pointer to info obtained by parsing source */ 6 72 2 other_info_ptr ptr ; /* pointer to additional info structure if needed */ 6 73 6 74 declare list_ovrly_ptr ptr ; /* pointer to overlay structure */ 6 75 6 76 6 77 declare saved_child_count fixed bin based (saved_child_count_ptr) ; /* parent link structure child count */ 6 78 declare saved_child_count_ptr ptr ; /* pointer to remembered number of children */ 6 79 6 80 6 81 /* USES AND MEANING OF LIST ELEMENT ENTRIES 6 82* 6 83* DOMAIN GLOBAL LIST -------------------------- 6 84* 6 85* gl.type - - MAIN_LIST 6 86* gl.name - - 32 char domain name 6 87* gl.item_info_ptr - - pointer to domain_info for this domain 6 88* gl.parse_info_ptr - - pointer to parse info structure 6 89* gl.other_info_ptr - - dbm_ptr, pointer to mdbm_db_model 6 90* gl.item_sub_list_ptr - - pointer to sublist of attributes using this domain 6 91* gl.file_info_ptr - - null () 6 92* gl.file_model_ptr - - null () 6 93* gl.superior_assigned - - ON => domain referenced by some relation 6 94* gl.inferior_assigned - - ON => referencing attribute present 6 95* gl.complete - - ON => domain_info present 6 96* gl.consistant - - always ON 6 97* 6 98* DOMAIN GLOBAL LIST "REFERENCING ATTRIBUTES" SUBLIST ---------------- 6 99* 6 100* sl.type - - SUB_LIST 6 101* sl.name - - 32 char attribute name 6 102* sl.item_info_ptr - - pointer to this attribute's attribute_info 6 103* sl.parse_info_ptr - - pointer to parse info structure 6 104* sl.old_other_info_ptr - - null () 6 105* sl.new_other_info_ptr - - pointer to this domain's global list element 6 106* sl.global_list_ptr - - pointer to attribute's global list element 6 107* 6 108* ATTRIBUTE GLOBAL LIST ----------------- 6 109* 6 110* gl.type - - MAIN_LIST 6 111* gl.name - - 32 char attribute name 6 112* gl.item_info_ptr - - pointer to corresponding domain sublist element for this attribute 6 113* gl.parse_info_ptr - - pointer to parse info structure 6 114* gl.other_info_ptr - - domain_info of domain for this attribute 6 115* gl.item_sub_list_ptr - - pointer to sublist of relations that use this attribute 6 116* gl.file_info_ptr - - null (), use pointer(fm_ptr,file_model.fi_ptr) 6 117* gl.file_model_ptr - - null (), use pointer(ai_ptr,0), ai_ptr from corres. rel's attr sublist 6 118* gl.superior_assigned - - ON => relation contains this attribute 6 119* gl.inferior_assigned - - ON => attribute references known domain 6 120* gl.complete - - ON => attr_info present for this attribute 6 121* gl.consistant - - OFF => no domain for this attribute 6 122* 6 123* ATTRIBUTE GLOBAL LIST "USED IN RELATION" SUBLIST ------------------ 6 124* 6 125* sl.type - - SUB_LIST 6 126* sl.name - - 32 char relation name 6 127* sl.item_info_ptr - - pointer to this relation's rel_info 6 128* sl.parse_info_ptr - - pointer to parse info structure 6 129* sl.old_other_info_ptr - - pointer to attribute's attr_info in this relation 6 130* sl.new_other_info_ptr - - pointer to this attribute's global list element 6 131* sl.global_list_ptr - - pointer to relation's global list element 6 132* 6 133* RELATION GLOBAL LIST ------------------- 6 134* 6 135* gl.type - - MAIN_LIST 6 136* gl.name - - 32 char relation name 6 137* gl.item_info_ptr - - pointer to rel_info for this relation 6 138* gl.parse_info_ptr - - pointer to parse info structure 6 139* gl.other_info_ptr - - pointer to global list element of file containing this relation 6 140* gl.item_sub_list_ptr - - pointer to sublist of attributes in this relation 6 141* gl.file_info_ptr - - pointer to file_info of this relation's file 6 142* gl.file_model_ptr - - pointer to file_model of this relation's file 6 143* gl.superior_assigned - - ON => file present to hold this relation 6 144* gl.inferior_assigned - - ON => attribute's present in this relation 6 145* gl.complete - - ON => rel_info assigned to this relation 6 146* gl.consistant - - OFF => no attributes for this relation 6 147* 6 148* RELATION GLOBAL LIST "CONTAINED ATTRIBUTE" SUBLIST ---------------- 6 149* 6 150* sl.type - - SUB_LIST 6 151* sl.name - - 32 char attribute name 6 152* sl.item_info_ptr - - pointer to this attribute's attribute_info 6 153* sl.parse_info_ptr - - pointer to parse info structure 6 154* sl.old_other_info_ptr - - pointer to domain_info for this attribute in old model 6 155* sl.new_other_info_ptr - - pointer to domain_info for this attribute in new model 6 156* sl.global_list_ptr - - pointer to attribute's global list element 6 157* 6 158* FILE GLOBAL LIST ----------------------- 6 159* 6 160* gl.type - - MAIN_LIST 6 161* gl.name - - 30 char file name plus 2 trailing blanks 6 162* gl.item_info_ptr - - pointer to file_info for this file 6 163* gl.parse_info_ptr - - pointer to parse info structure 6 164* gl.other_info_ptr - - null () 6 165* gl.item_sub_list_ptr - - pointer to sublist of relations contained in this file 6 166* gl.file_info_ptr - - pointer to file_info for this file 6 167* gl.file_model_ptr - - pointer to file_model for this file 6 168* gl.superior_assigned - - ON => file_model present for this file 6 169* gl.inferior_assigned - - ON => relation present for this file 6 170* gl.complete - - OFF => not formatted yet 6 171* gl.consistant - - ON => no relations present 6 172* 6 173* FILE GLOBAL LIST "CONTAINED RELATION" SUBLIST ---------------- 6 174* 6 175* sl.type - - SUB_LIST 6 176* sl.name - - 32 char relation name 6 177* sl.item_info_ptr - - relation's rel_info pointer 6 178* sl.parse_info_ptr - - pointer to parse info structure 6 179* sl.old_other_info_ptr - - null () 6 180* sl.new_other_info_ptr - - pointer to file global list element 6 181* sl.global_list_ptr - - pointer to relation's global list element 6 182* 6 183* FOREIGN KEY GLOBAL LIST -------------------- 6 184* 6 185* gl.type - - MAIN_LIST 6 186* gl.name - - 32 char link(foreign key) name, parent_link_info.name 6 187* gl.item_info_ptr - - pointer to parent_link_info for this foreign key 6 188* gl.parse_info_ptr - - pointer to parse info structure 6 189* gl.other_info_ptr - - pointer to parent relation global list element 6 190* gl.item_sub_list_ptr - - pointer to sublist of child relations for this parent 6 191* gl.file_info_ptr - - pointer to file_info for parent relation's file 6 192* gl.file_model_ptr - - pointer to file_model for parent relation's file 6 193* gl.superior_assigned - - ON => parent present 6 194* gl.inferior_assigned - - ON => child present 6 195* gl.complete - - ON => pli_info and cli_info present 6 196* gl.consistant - - ON => rels/attrs found and corres domains match 6 197* gl.child_defined - - ON => not defined by parent, but by one of it's children 6 198* 6 199* FOREIGN KEY GLOBAL LIST CHILDREN SUBLIST 6 200* 6 201* sl.type - - SUB_LIST 6 202* sl.name - - 32 char name of relation representing this child 6 203* sl.item_info_ptr - - pointer to child_link_info for this child 6 204* sl.parse_info_ptr - - pointer to parse info structure 6 205* sl.old_other_info_ptr - - pointer to file_model holding this child relation 6 206* sl.new_other_info_ptr - - pointer to rel_info for this child 6 207* sl.global_list_ptr - - pointer to child relation global list element 6 208* 6 209* NOTE: all pointers are to the new model unless otherwise indicated 6 210* 6 211**/ 6 212 6 213 /* END INCLUDE FILE mrds_rst_global_lists.incl.pl1 */ 6 214 329 330 331 332 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/18/85 0909.2 mrds_rst_relation_handler.pl1 >special_ldd>online>mrds.pbf-04/18/85>mrds_rst_relation_handler.pl1 319 1 10/14/83 1609.1 mrds_rst_rsc.incl.pl1 >ldd>include>mrds_rst_rsc.incl.pl1 321 2 10/14/83 1609.0 mrds_rst_struct_types.incl.pl1 >ldd>include>mrds_rst_struct_types.incl.pl1 323 3 10/14/83 1608.4 mrds_rst_semantics.incl.pl1 >ldd>include>mrds_rst_semantics.incl.pl1 325 4 10/14/83 1608.6 mrds_rst_parse_info.incl.pl1 >ldd>include>mrds_rst_parse_info.incl.pl1 327 5 10/14/83 1608.6 mrds_rst_tree.incl.pl1 >ldd>include>mrds_rst_tree.incl.pl1 329 6 10/14/83 1608.4 mrds_rst_global_lists.incl.pl1 >ldd>include>mrds_rst_global_lists.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. DEFINE constant fixed bin(17,0) initial dcl 3-29 ref 166 GL 000000 constant fixed bin(17,0) initial dcl 2-72 set ref 146* IN 000001 constant bit(1) initial unaligned dcl 313 set ref 99* MAIN_LIST 000037 constant fixed bin(17,0) initial dcl 6-63 set ref 136* 155 OFF constant bit(1) initial unaligned dcl 300 ref 139 164 165 168 171 174 175 176 178 193 251 285 ON 000001 constant bit(1) initial unaligned dcl 299 ref 147 163 167 172 177 219 253 287 OUT 000033 constant bit(1) initial unaligned dcl 314 set ref 123* REDEFINE constant fixed bin(17,0) initial dcl 3-30 ref 103 SUB_LIST 000040 constant fixed bin(17,0) initial dcl 6-64 set ref 230* 244 264* 278 UNDEFINE constant fixed bin(17,0) initial dcl 3-28 ref 87 103 a_ptr based pointer level 2 dcl 4-51 ref 184 affected 26 based bit(1) level 2 packed unaligned dcl 6-15 set ref 163* attr_gl_ptr 000214 automatic pointer dcl 316 set ref 214* 215 216 218 230 249 253 280 282 283 284 attribute based structure level 1 dcl 4-63 attribute_ptr 000222 automatic pointer dcl 4-73 set ref 184* 185 189* 189 203 206 206 234 264 268 279 281 cmdb 26(01) based bit(1) level 2 packed unaligned dcl 6-15 set ref 168* 172* complete 26(07) based bit(1) level 2 packed unaligned dcl 6-15 set ref 176* consistant 26(08) based bit(1) level 2 packed unaligned dcl 6-15 set ref 177* 193* data based pointer level 2 dcl 5-41 ref 214 define 26(03) based bit(1) level 2 packed unaligned dcl 6-15 set ref 167* 171* delete_name based structure level 1 dcl 4-160 delete_name_ptr 000224 automatic pointer dcl 4-165 set ref 88* 89 directive based structure level 1 unaligned dcl 3-5 directive_ptr 242 based pointer level 2 in structure "rsc" dcl 1-29 in procedure "mrds_rst_relation_handler" ref 85 directive_ptr 000010 internal static pointer dcl 3-24 in procedure "mrds_rst_relation_handler" set ref 85* 87 103 103 104 166 dom_gl_ptr 000216 automatic pointer dcl 317 set ref 218* 219 error_code 000111 automatic fixed bin(35,0) dcl 301 set ref 136* 139 230* 233 238* 264* 267 272* error_mode 000100 automatic bit(1) unaligned dcl 295 set ref 139* 147* 212 file_info_ptr 22 based pointer level 2 dcl 6-15 set ref 161* file_model_ptr 24 based pointer level 2 dcl 6-15 set ref 162* gl based structure level 1 dcl 6-15 gl_ptr 000234 automatic pointer dcl 6-36 set ref 136* 146* 155 156 157 158 159 160 161 162 163 164 165 167 168 171 172 174 175 176 177 178 192 193 250 264 287 global_list_ptr 22 based pointer level 2 dcl 6-40 set ref 250* 284* h_gattr_ptr 222 based pointer level 2 dcl 1-29 set ref 203* h_grel_ptr 224 based pointer level 2 dcl 1-29 set ref 136* inferior_assigned 26(06) based bit(1) level 2 packed unaligned dcl 6-15 set ref 175* 192 287* ioa_$rs 000030 constant entry external dcl 310 ref 106 142 206 234 268 item_info_ptr 12 based pointer level 2 in structure "gl" dcl 6-15 in procedure "mrds_rst_relation_handler" set ref 157* 215 216 218 280 item_info_ptr 12 based pointer level 2 in structure "sl" dcl 6-40 in procedure "mrds_rst_relation_handler" set ref 246* 280* item_sub_list_ptr 20 based pointer level 2 dcl 6-15 set ref 160* 230* 264* line_num 15 based fixed bin(24,0) level 2 in structure "relation" dcl 4-51 in procedure "mrds_rst_relation_handler" set ref 142* line_num 15 based fixed bin(24,0) level 2 in structure "attribute" dcl 4-63 in procedure "mrds_rst_relation_handler" set ref 206* list_ptr parameter pointer dcl 312 ref 27 88 92 message 000112 automatic varying char(256) dcl 302 set ref 106* 109 142* 145 206* 210 234* 238 268* 272 message_length 000213 automatic fixed bin(21,0) dcl 303 set ref 106* 142* 206* 234* 268* mrds_error_$dup_rel 000020 external static fixed bin(35,0) dcl 306 set ref 145* mrds_error_$rst_undone_option 000014 external static fixed bin(35,0) dcl 304 set ref 109* mrds_error_$undef_attr 000016 external static fixed bin(35,0) dcl 305 set ref 210* mrds_rst_error 000026 constant entry external dcl 309 ref 109 145 210 238 272 mrds_rst_list_element$add 000032 constant entry external dcl 311 ref 136 230 264 mrds_rst_meter 000034 constant entry external dcl 315 ref 99 123 mrds_rst_rsc_alloc 000022 constant entry external dcl 307 ref 146 mrds_rst_tree_search 000024 constant entry external dcl 308 ref 203 name 1 based char(32) level 2 in structure "gl" dcl 6-15 in procedure "mrds_rst_relation_handler" set ref 156* name 1 based char(32) level 2 in structure "sl" dcl 6-40 in procedure "mrds_rst_relation_handler" set ref 245* 279* name 2 based char(32) level 2 in structure "attribute" dcl 4-63 in procedure "mrds_rst_relation_handler" set ref 203* 206* 234* 264* 268* 279 name 2 based char(32) level 2 in structure "relation" dcl 4-51 in procedure "mrds_rst_relation_handler" set ref 93 136* 142* 156 206* 230* 234* 245 268* new_other_info_ptr 20 based pointer level 2 dcl 6-40 set ref 216 218 249* 283* next based pointer level 2 dcl 4-63 ref 189 node based structure level 1 dcl 5-41 node_ptr 000226 automatic pointer dcl 5-27 set ref 203* 214 null builtin function dcl 298 ref 157 159 160 161 162 185 215 216 246 248 number 5 based fixed bin(17,0) array level 3 dcl 3-37 ref 104 old_other_info_ptr 16 based pointer level 2 dcl 6-40 set ref 248* 282* other_info_ptr 16 based pointer level 2 dcl 6-15 set ref 159* 282 283 overlay based char(32) level 2 dcl 4-160 ref 89 parent_ptr 000230 automatic pointer dcl 5-28 set ref 203* parse_info_ptr 14 based pointer level 2 in structure "sl" dcl 6-40 in procedure "mrds_rst_relation_handler" set ref 247* 281* parse_info_ptr 14 based pointer level 2 in structure "gl" dcl 6-15 in procedure "mrds_rst_relation_handler" set ref 158* redefine 26(04) based bit(1) level 2 packed unaligned dcl 6-15 set ref 165* relation 4 based structure array level 2 in structure "stmt" unaligned dcl 3-37 in procedure "mrds_rst_relation_handler" relation based structure level 1 dcl 4-51 in procedure "mrds_rst_relation_handler" relation_name 000101 automatic char(32) unaligned dcl 296 set ref 89* 93* 99* 123* relation_ptr 000220 automatic pointer dcl 4-60 set ref 92* 93 136 142 142 156 158 184 206 230 234 245 247 268 reserved 24 based bit(36) level 2 in structure "sl" packed unaligned dcl 6-40 in procedure "mrds_rst_relation_handler" set ref 251* 285* reserved 26(09) based bit(26) level 2 in structure "gl" packed unaligned dcl 6-15 in procedure "mrds_rst_relation_handler" set ref 178* rsc based structure level 1 unaligned dcl 1-29 rsc_ptr parameter pointer dcl 1-94 set ref 27 84 85 98 99* 109* 122 123* 136* 136 145* 146* 203 210* 230* 238* 264* 272* sl based structure level 1 dcl 6-40 sl_ptr 000236 automatic pointer dcl 6-50 set ref 230* 244 245 246 247 248 249 250 251 264* 278 279 280 281 282 283 284 285 stmt based structure array level 1 unaligned dcl 3-37 stmt_ptr 244 based pointer level 2 in structure "rsc" dcl 1-29 in procedure "mrds_rst_relation_handler" ref 84 stmt_ptr 000012 internal static pointer dcl 3-68 in procedure "mrds_rst_relation_handler" set ref 84* 104 success 000232 automatic bit(1) unaligned dcl 5-38 set ref 203* 205 superior_assigned 26(05) based bit(1) level 2 packed unaligned dcl 6-15 set ref 174* 219* 253* trace_sw 206(07) based bit(1) level 2 packed unaligned dcl 1-29 ref 98 122 type based fixed bin(17,0) level 2 in structure "directive" dcl 3-5 in procedure "mrds_rst_relation_handler" ref 87 103 103 104 166 type based fixed bin(17,0) level 2 in structure "sl" dcl 6-40 in procedure "mrds_rst_relation_handler" set ref 244* 278* type based fixed bin(17,0) level 2 in structure "gl" dcl 6-15 in procedure "mrds_rst_relation_handler" set ref 155* undefine 26(02) based bit(1) level 2 packed unaligned dcl 6-15 set ref 164* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ATD internal static fixed bin(17,0) initial dcl 2-63 ATTRIBUTE internal static fixed bin(17,0) initial dcl 2-16 ATTRIBUTE_DOMAIN internal static fixed bin(17,0) initial dcl 2-14 ATTR_INFO internal static fixed bin(17,0) initial dcl 2-59 ATTR_LIST internal static fixed bin(17,0) initial dcl 2-62 CHANGER internal static fixed bin(17,0) initial dcl 2-52 CHILDREN internal static fixed bin(17,0) initial dcl 2-21 CHILD_LINK_INFO internal static fixed bin(17,0) initial dcl 2-61 CMDB internal static fixed bin(17,0) initial dcl 3-31 COMP_NO_ARRAY internal static fixed bin(17,0) initial dcl 2-64 CONSTANT internal static fixed bin(17,0) initial dcl 2-50 CUR_LEX_TOP internal static fixed bin(17,0) initial dcl 2-36 DB_MODEL internal static fixed bin(17,0) initial dcl 2-45 DELETE_NAME internal static fixed bin(17,0) initial dcl 2-23 DIRECTIVE internal static fixed bin(17,0) initial dcl 2-28 DISPLAY_INFO internal static fixed bin(17,0) initial dcl 2-82 DOMAIN internal static fixed bin(17,0) initial dcl 2-13 DOMAIN_INFO internal static fixed bin(17,0) initial dcl 2-47 DOM_LIST internal static fixed bin(17,0) initial dcl 2-24 DUP_PREV internal static fixed bin(17,0) initial dcl 2-66 FILE internal static fixed bin(17,0) initial dcl 2-17 FILE_INFO internal static fixed bin(17,0) initial dcl 2-46 FILE_MODEL internal static fixed bin(17,0) initial dcl 2-57 FIXUP_TOKEN internal static fixed bin(17,0) initial dcl 2-37 FOREIGN_KEY internal static fixed bin(17,0) initial dcl 2-20 INDEX internal static fixed bin(17,0) initial dcl 2-22 ITEM internal static fixed bin(17,0) initial dcl 2-18 LEX_STACK internal static fixed bin(17,0) initial dcl 2-34 LINK internal static fixed bin(17,0) initial dcl 2-19 LIST_OVRLY internal static fixed bin(17,0) initial dcl 2-75 NODE internal static fixed bin(17,0) initial dcl 2-77 OUTPUT_TEXT internal static fixed bin(17,0) initial dcl 2-40 PARENT_LINK_INFO internal static fixed bin(17,0) initial dcl 2-60 PATH_ENTRY internal static fixed bin(17,0) initial dcl 2-48 P_STRUCT internal static fixed bin(17,0) initial dcl 2-35 RELATION internal static fixed bin(17,0) initial dcl 2-15 REL_INFO internal static fixed bin(17,0) initial dcl 2-58 SAVED_CHILD_COUNT internal static fixed bin(17,0) initial dcl 2-76 SEGINFO internal static fixed bin(17,0) initial dcl 2-74 SEG_INFO internal static fixed bin(17,0) initial dcl 6-65 SELECT_CHAIN internal static fixed bin(17,0) initial dcl 2-67 SL internal static fixed bin(17,0) initial dcl 2-73 SORT_KEY internal static fixed bin(17,0) initial dcl 2-65 STACK_ITEM internal static fixed bin(17,0) initial dcl 2-49 STMT internal static fixed bin(17,0) initial dcl 2-29 STRING_SOURCE internal static fixed bin(17,0) initial dcl 2-38 TOKEN internal static fixed bin(17,0) initial dcl 2-39 VERSION_STATUS internal static fixed bin(17,0) initial dcl 2-51 accum_token_ptr internal static pointer dcl 4-171 addr builtin function dcl 298 area_ptr automatic pointer dcl 5-34 attdom_ptr automatic pointer dcl 4-84 attribute_domain based structure level 1 dcl 4-77 children based structure level 1 dcl 4-131 children_ptr automatic pointer dcl 4-136 data_ptr automatic pointer dcl 5-29 dom_list based structure level 1 unaligned dcl 4-189 dom_list_ptr automatic pointer dcl 4-188 domain based structure level 1 dcl 4-11 domain_ptr automatic pointer dcl 4-45 file based structure level 1 dcl 4-89 file_ptr automatic pointer dcl 4-104 fixed builtin function dcl 298 fixup_token based char unaligned dcl 4-178 foreign_key based structure level 1 dcl 4-139 forkey_ptr automatic pointer dcl 4-147 index_ptr automatic pointer dcl 4-115 item based structure level 1 dcl 4-150 item_ptr automatic pointer dcl 4-157 key automatic char(32) dcl 5-24 link based structure level 1 dcl 4-118 link_ptr automatic pointer dcl 4-128 list_ovrly based structure level 1 dcl 6-67 list_ovrly_ptr automatic pointer dcl 6-74 mrds_data_$max_line_size external static fixed bin(35,0) dcl 4-173 mrds_data_$max_string_size external static fixed bin(35,0) dcl 4-172 output_text based varying char dcl 4-175 output_text_ptr internal static pointer dcl 4-177 predecessor_parent_ptr automatic pointer dcl 5-33 predecessor_ptr automatic pointer dcl 5-32 rel builtin function dcl 298 rel_index based structure level 1 dcl 4-107 root_ptr automatic pointer dcl 5-26 saved_child_count based fixed bin(17,0) dcl 6-77 saved_child_count_ptr automatic pointer dcl 6-78 seg_info based structure level 1 unaligned dcl 6-53 seg_info_ptr automatic pointer dcl 6-59 source_size automatic fixed bin(35,0) dcl 4-182 string_source based char unaligned dcl 4-184 string_source_ptr automatic pointer dcl 4-183 successor_parent_ptr automatic pointer dcl 5-31 successor_ptr automatic pointer dcl 5-30 sys_info$max_seg_size external static fixed bin(35,0) dcl 297 thread automatic bit(1) dcl 5-39 token based varying char dcl 4-169 token_length automatic fixed bin(24,0) dcl 4-174 work_area based area(1024) dcl 5-36 NAMES DECLARED BY EXPLICIT CONTEXT. define_relation 000544 constant entry internal dcl 125 ref 116 define_relation_attribute 001053 constant entry internal dcl 198 ref 187 mrds_rst_relation_handler 000277 constant entry external dcl 27 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2052 2110 1715 2062 Length 2440 1715 36 313 135 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mrds_rst_relation_handler 424 external procedure is an external procedure. define_relation internal procedure shares stack frame of external procedure mrds_rst_relation_handler. define_relation_attribute internal procedure shares stack frame of external procedure mrds_rst_relation_handler. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 directive_ptr mrds_rst_relation_handler 000012 stmt_ptr mrds_rst_relation_handler STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mrds_rst_relation_handler 000100 error_mode mrds_rst_relation_handler 000101 relation_name mrds_rst_relation_handler 000111 error_code mrds_rst_relation_handler 000112 message mrds_rst_relation_handler 000213 message_length mrds_rst_relation_handler 000214 attr_gl_ptr mrds_rst_relation_handler 000216 dom_gl_ptr mrds_rst_relation_handler 000220 relation_ptr mrds_rst_relation_handler 000222 attribute_ptr mrds_rst_relation_handler 000224 delete_name_ptr mrds_rst_relation_handler 000226 node_ptr mrds_rst_relation_handler 000230 parent_ptr mrds_rst_relation_handler 000232 success mrds_rst_relation_handler 000234 gl_ptr mrds_rst_relation_handler 000236 sl_ptr mrds_rst_relation_handler THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. ioa_$rs mrds_rst_error mrds_rst_list_element$add mrds_rst_meter mrds_rst_rsc_alloc mrds_rst_tree_search THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. mrds_error_$dup_rel mrds_error_$rst_undone_option mrds_error_$undef_attr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 27 000273 84 000304 85 000311 87 000313 88 000316 89 000321 90 000324 92 000325 93 000330 98 000333 99 000337 103 000366 104 000374 106 000401 109 000441 110 000501 111 000502 116 000503 122 000504 123 000513 332 000543 125 000544 136 000545 139 000572 142 000576 145 000667 146 000727 147 000744 155 000746 156 000750 157 000755 158 000757 159 000761 160 000763 161 000765 162 000767 163 000771 164 000774 165 000776 166 001000 167 001004 168 001006 169 001010 171 001011 172 001013 174 001015 175 001017 176 001021 177 001023 178 001025 184 001027 185 001031 187 001036 189 001037 190 001042 192 001043 193 001050 196 001052 198 001053 203 001054 205 001077 206 001102 210 001207 211 001247 212 001251 214 001254 215 001257 216 001264 218 001272 219 001274 230 001276 233 001321 234 001323 238 001406 239 001446 244 001450 245 001452 246 001457 247 001461 248 001463 249 001465 250 001470 251 001473 253 001475 264 001477 267 001523 268 001525 272 001605 273 001645 278 001647 279 001651 280 001656 281 001661 282 001663 283 001667 284 001673 285 001676 287 001700 293 001703 ----------------------------------------------------------- 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