COMPILATION LISTING OF SEGMENT mrds_dsl_get_builtins Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/01/88 1326.4 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 mrds_dsl_get_builtins: procedure (dbcb_ptr, error_code); 10 11 /* 12* BEGIN_DESCRIPTION 13* This routine builds a threaded list of known mrds builtin 14* scalar functions from the object mrds_builtin_ and puts the 15* head of that list in a pointer at dbcb.sfi_ptr. 16* END_DESCRIPTION 17**/ 18 19 /* PARAMETERS: 20* 21* dbcb_ptr - - (input) pointer, pointer to the dbcb structure (mrds_dbcb.incl.pl1) 22* for the database opening involved. 23* 24* error_code - - (output) fixed bin (35), status error code 25* 26**/ 27 28 /* HISTORY: 29* 30* 81-06-23 Jim Gray : moved code from mrds_dsl_open into separate 31* routine, to be called only when a builtin function is first 32* referenced, for performance purposes. 33* 34* 81-09-15 Davids: changed declaration of caller_name to char (21) 35* from char (15) since caller name is 21 characters and the code 36* will not compile when -prefix stringsize is used. 37* 38* 81-09-21 Davids: modified code to determine if external entry is 39* a function to first check the length of the name and if its less 40* than 6 characters assume its a function name since since all 41* _info entries are at least 6 characters. This prevents a 42* stringrange error from occuring when a subtr is done on the name 43* to determine if the last 5 characters are _info 44* 45* 83-02-28 Davids: explicitly declared variables that were declared by 46* context of implication and removed declarations to variables that 47* were never referenced. 48**/ 49 50 51 call cu_$decode_entry_value (mrds_builtin_, mb_ptr, ptr_sink); /* get pointer to mrds_builtin_ object */ 52 if mb_ptr = null () then do; 53 error_code = mrds_error_$bad_builtin_obj; 54 call sub_err_ (error_code, caller_name, continue, info_ptr, return_value, "^/^a", 55 "No mrds_builtin_ object segment was found."); 56 end; 57 else do; /* if found segment */ 58 59 /* get the object info for the segment */ 60 61 mb_ptr = ptr (mb_ptr, 0); /* point to base of seg */ 62 63 call hcs_$status_mins (mb_ptr, mb_type, mb_bc, error_code); /* get bit count */ 64 if error_code ^= 0 then 65 call sub_err_ (error_code, caller_name, continue, info_ptr, return_value, "^/^a", 66 "Unable to get bit count of mrds_builtin_ object segment."); 67 else do; 68 69 call object_info_$brief (mb_ptr, mb_bc, addr (obj_info), error_code); /* get object data */ 70 if error_code ^= 0 then 71 call sub_err_ (error_code, caller_name, continue, info_ptr, return_value, "^/^a", 72 "Unable to get the object data for mrds_builtin_ object segment."); 73 else do; 74 75 /* find the mrds_builtin_ definition in the object segment */ 76 77 found = "0"b; 78 end_of_def = "0"b; 79 do d_ptr = addrel (obj_info.defp, obj_info.defp -> bit18) /* search for class 3 defn */ 80 repeat addrel (obj_info.defp, d_ptr -> definition.value) 81 while (^found & ^end_of_def); 82 83 if addrel (obj_info.defp, d_ptr -> definition.symbol) -> acc.string = MB then do; 84 found = "1"b; 85 saved_d_ptr = d_ptr; 86 end; 87 else if addrel (obj_info.defp, d_ptr -> definition.forward) -> bit18 ^= "0"b then ; 88 else end_of_def = "1"b; 89 90 end; 91 92 if ^found then do; 93 error_code = mrds_error_$bad_builtin_obj; 94 call sub_err_ (error_code, caller_name, continue, info_ptr, return_value, "^/^a", 95 "Unable to find a definition for mrds_builtin_ in the object segment."); 96 end; 97 else do; 98 99 /* look through all entry points in this block */ 100 101 d_ptr = saved_d_ptr; 102 103 do d_ptr = addrel (obj_info.defp, d_ptr -> definition.segname) 104 repeat addrel (obj_info.defp, d_ptr -> definition.forward) 105 while (d_ptr -> definition.class ^= SEG 106 & error_code = 0 & d_ptr -> definition.forward ^= "0"b); 107 108 /* is this an external entry point */ 109 110 if d_ptr -> definition.class ^= TEXT 111 | d_ptr -> definition.flags.ignore 112 | ^d_ptr -> definition.flags.entry then ; 113 else do; /* if external entry point */ 114 115 /* is this external entry a function */ 116 117 acc_ptr = addrel (obj_info.defp, d_ptr -> definition.symbol); /* entry ptr */ 118 119 /* BEGIN CHANGE 81-09-21 */ 120 121 flag = "0"b; 122 if acc.len < 6 123 then flag = "1"b; 124 else 125 if substr (acc.string, acc.len - 4, 5) ^= "_info" & acc.string ^= MB 126 then flag = "1"b; 127 128 if flag 129 then do; /* if not info or mrds_builtin_ entry */ 130 131 /* END CHANGE 81-09-21 */ 132 133 /* entry = function, thread it onto the list */ 134 135 call mrds_dsl_thread_fn_list (dbcb_ptr, 136 addrel (obj_info.textp, d_ptr -> definition.value), error_code); 137 if error_code = 0 then ; 138 else call sub_err_ (error_code, caller_name, continue, 139 info_ptr, return_value, "^/^a", 140 "Unable to add a function info to the list of builtins."); 141 end; /* if true function entry */ 142 end; /* if text entry */ 143 end; /* entry point loop */ 144 145 /* make sure at least one function was defined */ 146 147 if dbcb.sfi_ptr ^= null | error_code ^= 0 then ; 148 else do; /* if did not find any builtins */ 149 error_code = mrds_error_$bad_builtin_obj; 150 call sub_err_ (error_code, caller_name, continue, info_ptr, return_value, "^/^a", 151 "No builtin function definitions were found in the object mrds_builtin_."); 152 end; 153 end; 154 end; 155 end; 156 end; /* if builtin segment found */ 157 158 dcl 1 acc aligned based (acc_ptr), /* template for acc string */ 159 2 len fixed bin (8) unal, 160 2 string char (0 refer (acc.len)) unal; 161 162 dcl SEG init ("011"b) bit (3) int static options (constant); 163 dcl TEXT init ("000"b) bit (3) int static options (constant); 164 165 declare mb_ptr ptr; 166 declare d_ptr ptr; 167 declare ptr_sink ptr; 168 declare acc_ptr ptr; 169 declare found bit (1); /* on => class 3 definition for mrds_builtin_ found */ 170 declare end_of_def bit (1); /* on => end of definition section */ 171 declare saved_d_ptr ptr; /* temporary storage for pointer to found definition */ 172 declare MB char (13) init ("mrds_builtin_"); /* name of object definition */ 173 declare sub_err_ entry options (variable); /* error reporting routine */ 174 declare caller_name char (21) init ("mrds_dsl_get_builtins"); 175 /* CHANGE 81-09-15 name of calling routine */ 176 dcl flag bit (1) unal; /* CHANGE 81-09-21 a decision flag */ 177 declare continue char (1) init ("c"); /* don't stop after printing */ 178 declare info_ptr ptr init (null ());/* unused */ 179 declare return_value fixed bin (35) init (0); /* unused */ 180 declare error_code fixed bin (35); /* error status encoding */ 181 dcl object_info_$brief entry (ptr, fixed bin (24), ptr, fixed bin (35)); 182 dcl hcs_$status_mins entry (ptr, fixed bin (2), fixed bin (24), fixed bin (35)); 183 dcl cu_$decode_entry_value entry (entry, ptr, ptr); 184 declare mrds_builtin_ entry (); 185 dcl mrds_dsl_thread_fn_list entry (ptr, ptr, fixed bin (35)); 186 declare mrds_error_$bad_builtin_obj fixed bin (35) ext; 187 declare sys_info$max_seg_size fixed bin (35) ext; 188 declare (fixed, addr, addrel, rel, null, ptr, substr) builtin; 189 190 dcl bit18 bit (18) based; /* template */ 191 dcl mb_bc fixed bin (24); /* bit count of builtin seg */ 192 dcl mb_type fixed bin (2); /* seg type code for mrds_builtin_ */ 193 dcl 1 obj_info aligned like object_info; 194 1 1 /* BEGIN mrds_dbcb.incl.pl1 -- jaw, 11/7/78 */ 1 2 1 3 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(85-11-17,Dupuis), approve(85-12-16,MCR7314), 1 7* audit(86-02-04,Brunelle), install(86-02-05,MR12.0-1013): 1 8* This entry is being made to cover the change made on 85-07-01 by Thanh 1 9* Nguyen. The scopes_changed flag was added to make checking for this 1 10* more efficient (mrds error list #137). 1 11* 2) change(86-06-10,Blair), approve(86-08-07,MCR7491), 1 12* audit(86-08-07,Gilcrease), install(86-08-15,MR12.0-1127): 1 13* Add a bit called dont_check_txn_id to indicate whether or not we should 1 14* care if multiple txns use the same selection_expression. (mrds #156) 1 15* 3) change(87-11-23,Hergert), approve(88-06-28,MCR7903), 1 16* audit(88-06-28,Dupuis), install(88-08-01,MR12.2-1073): 1 17* Added parser_work_area_ptr and mrds_se_info_ptr for new parser. 1 18* END HISTORY COMMENTS */ 1 19 1 20 1 21 /* WARNING 1 22* If the dbcb structure is changed then the mrds_data_ 1 23* item saved_res_version MUST be incremented to invalidate all 1 24* existing saved resultants 1 25**/ 1 26 1 27 /* HISTORY : 1 28* 1 29* modified by Jim Gray - - 80-10-24, to add new_select_expr bit for 1 30* tid_list management 1 31* 1 32* 81-1-9 Jim Gray : added like reference for ease in making the 1 33* phony resultant in mu_database_index, without having the area dcl 1 34* included. 1 35* 1 36* 81-06-17 Roger Lackey : added last_store_rel_name for use by 1 37* mrds_dsl_store 1 38* 1 39* 81-06-26 Roger Lackey : Added no_optimize and print_search_order 1 40* switches 1 41* 1 42* 81-07-06 Jim Gray : added identifier for the current selection 1 43* expression, so that relation statistics can be updated relative 1 44* to number of selection expressions seem. Also removed init for 1 45* last_store_rel_name, as this iw now properly done in 1 46* mrds_dsl_init_res. 1 47* 1 48* 81-07-17 Roger Lackey : added pred_ptr and unused_ptrs. 1 49* 1 50* 82-08-19 Mike Kubicar : added store_vector field. This is needed 1 51* for the conversion to the relation manager. 1 52* 1 53* 82-08-23 Davids: added the relmgr_entries and access_costs 1 54* substructures so that the entries and costs can change 1 55* depending on the type of database that is opened. 1 56* 1 57* 82-09-09 Mike Kubicar : added modify_vector field. This is needed 1 58* since modify uses a different vector type (general) than does store. 1 59* 1 60* 82-09-20 Davids: changed names of (store modify)_vector to 1 61* (store modify)_vector_ptr. Also (delete modify)_tuple_by_id to 1 62* (delete modify)_tuples_by_id. added the element cursor_storage_ptr 1 63* which should be inited to null and will be set by mu_cursor_manager_$get 1 64* during the first call. 1 65* 1 66* 82-09-21 Davids: renamed cursor_storage_ptr to cursor_ptrs_storage_ptr 1 67* since it deals with the pointers to the cursors and not the cursors 1 68* themelves and added the element cursor_storage_area_ptr which points 1 69* to the area where the cursors are kept. 1 70* 1 71* 82-09-22 Davids: renamed the transact_ctl_seg to transactions_needed. 1 72* the transact_ctl_seg always had a value of 0 and really didn't mean 1 73* anything. 1 74* 1 75* 82-09-22 Mike Kubicar : added create_relation, create_index and 1 76* destroy_relation_by_opening to relmgr_entries. They are needed 1 77* by mrds_dsl_define_temp_rel. 1 78* 1 79* 82-09-24 Donna Woodka : added put_tuple to relmgr_entries. It 1 80* is needed by mu_store. 1 81* 1 82* 82-11-12 Davids: changed the declaration of the access_costs from fixed 1 83* bin to float bin since the values are not integers. 1 84* 1 85* 83-02-02 Davids: added the dbc_uid element. This will allow mrds to make 1 86* sure that the dbc_ptr still points to the correct segment. Element was 1 87* added to the end of the structure to allow modules that don't use 1 88* the element to continue to reference the dbcb structure without recompiling. 1 89* 1 90* 83-02-25 Davids: added the concurrency_on and rollback_on elements. These 1 91* are needed so that temp rels can be created with the same file attributes 1 92* as the permanent relations. 1 93* 1 94* 83-05-02 Mike Kubicar : Deleted get_next_search_specification_ptr and 1 95* added the resultant_in_pdir bit. 1 96* 1 97* 83-05-18 Davids: reduced the number of reserved bits to 14 (from 15) and 1 98* added the res_already_made element. 1 99* 1 100* 83-05-24 Mike Kubicar : Updated the relation manager calling sequences. 1 101* 1 102* 83-08-03 Mike Kubicar : Added the element_id_list_segment_ptr and removed 1 103* one of the unused pointers. 1 104* 1 105* 83-09-20 Ron Harvey: Added relmgr_entries.get_population. 1 106* 1 107* 84-08-27 John Hergert: Created compiled_se_info_ptr from unused_ptrs(2) 1 108* leaving unused_ptrs(1). 1 109* 1 110* 85-01-15 Thanh Nguyen: Added the work_area_ptr and removed the last 1 111* unused_ptrs (1). 1 112* 1 113* 85-04-12 Thanh Nguyen: Added user_started_transaction and 1 114* non_shared_to_shared flags. Also added se_transaction_id and some more 1 115* spare ptrs, entries and reserved storages for future enhancement, since 1 116* we changed the saved_res_version from rslt0001 to rslt0002. 1 117* 1 118* 85-07-01 Thanh Nguyen: Added scopes_changed flag. This flag is set by 1 119* common routine of mrds_dsl_set_scope, reset by mrds_dsl_optimize and 1 120* mrds_dsl_gen_srch_prog when building of a new search_vars. 1 121**/ 1 122 1 123 1 124 /* this structure is based on the {unique_name}.mrds.dbcb segment 1 125* that constitutes the non-secure portion of the resultant model that is 1 126* created during the opening of a database. it contains variables that 1 127* are used during the runtime access of the database, and an area 1 128* for evaluation of requests. it points to four other 1 129* segments in the resultant model, {unique_name}.mrds.rdbi, the secure 1 130* portion of the resultant(see mdbm_rm_db_info.incl.pl1), 1 131* {unique_name}.mrds.select, an area for selection expression evaluation, 1 132* {unique_name}.mrds.curdat, and {unique_name}.mrds.stadat, two segments 1 133* used in the elimination of duplicate tuples during a retrieve. 1 134* the dbcb area holds the structure in mdbm_scope_info.incl.pl1 1 135* that is used when the database is using the file scope mechanism 1 136* for concurrency control over file readying. the segment overlayed via 1 137* mrds_dbc.incl.pl1 structure is pointed to and also handles concurrency control, 1 138* across database openings. the pointer to this dbcb structure is kept in a table 1 139* which associates database indexes(returned from a call to dsl_$open), with particular 1 140* opening instances of resultant models. (see mu_database_index routine) */ 1 141 1 142 dcl 1 dbcb aligned based (dbcb_ptr), /* DBCB -- non-secure portion */ 1 143 2 data like dbcb_data, 1 144 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (dbcb.static_area)))); 1 145 1 146 dcl dbcb_ptr ptr; 1 147 1 148 declare 1 dbcb_data based, /* info part of dbcb, separated out so that 1 149* like references can avoid getting the area declaration */ 1 150 2 rdbi_ptr ptr, /* pointer to write protected mdbm_util_ info. */ 1 151 2 range_ptr ptr, /* ptr to range structure, or null */ 1 152 2 select_ptr ptr, /* ptr to select list, or null */ 1 153 2 sv_ptr ptr, /* pointer to search variables */ 1 154 2 so_ptr ptr, /* pointer to search operators */ 1 155 2 ti_ptr ptr, /* pointer to tuple info */ 1 156 2 lit_ptr ptr, /* pointer to the literal area, or null */ 1 157 2 current_ptr ptr, /* ptr to select list resulting from -current clause */ 1 158 2 ss_ptr ptr, /* ptr to select sets block if not simple s.e. */ 1 159 2 retr_info_ptr ptr, /* ptr to retrieve info area */ 1 160 2 trel_info_ptr ptr, /* ptr to retrieve info area */ 1 161 2 sti_ptr ptr, /* pointer to store info */ 1 162 2 dbc_ptr ptr, /* pointer to the data base control segment */ 1 163 2 sfi_ptr ptr, /* points to head of scalar function list */ 1 164 2 scope_ptr ptr, /* points to array of scope tuples */ 1 165 2 select_area_ptr ptr, /* ptr to area for current selection expression allocations */ 1 166 2 current_data_ptr ptr, /* ptr to one of 2 segments used by mrds_dsl_retrieve 1 167* for eliminating duplicate tuples. */ 1 168 2 static_data_ptr ptr, /* ptr to one of 2 segments used by mrds_dsl_retrieve 1 169* for eliminating duplicate tuples. */ 1 170 2 store_area_ptr ptr, /* temp storage area for dsl_$store */ 1 171 2 retrieve_area_ptr ptr, /* temp storage for dsl_$retrieve */ 1 172 2 modify_area_ptr ptr, /* temp storage area for dsl_$modify */ 1 173 2 delete_area_ptr ptr, /* temp storage area for dsl_$delete */ 1 174 2 def_temp_rel_area_ptr ptr, /* temp storage area for dsl_$define_temp_rel */ 1 175 2 pred_ptr ptr, /* Pointer to pred_array */ 1 176 2 store_vector_ptr ptr, /* Vector structure used during store operations */ 1 177 2 modify_vector_ptr ptr, /* Used during modifies */ 1 178 2 element_id_list_segment_ptr ptr, /* Points to the segment used to hold element_id_list structures */ 1 179 2 compiled_se_info_ptr ptr, /* points to the segment containing all info on compiled sexs */ 1 180 2 work_area_ptr ptr, /* Work area for encode/decode value allocations in mu_retrieve */ 1 181 2 se_info_ptr ptr, /* Points to se_info struct. Primarily for error reports */ 1 182 2 parser_work_area_ptr ptr, /* work area for parser */ 1 183 2 reserved_ptrs (4) ptr, /* Reserved for future use */ 1 184 2 another_flag bit (1) unal, /* on if predicate was -another */ 1 185 2 current_flag bit (1) unal, /* on if predicate was -current clause */ 1 186 2 dbc_incr bit (1) unal, /* on if dbc open mode has been incremented for this user */ 1 187 2 delete_flag bit (1) unal, /* On if search was called from mrds_dsl_sec_delete */ 1 188 2 dup_retain bit (1) unaligned, /* On if dup tuples allowed for retrieval */ 1 189 2 prev_select bit (1) unal, /* on if prev. select block processed in this s.e. */ 1 190 2 possible_op bit (1) unal, /* on of arith op. allowed */ 1 191 2 sel_clause bit (1) unal, /* on if currently in select clause */ 1 192 2 dsm_sw bit (1) unal, /* on if data base was opened via data submodel */ 1 193 2 val_rtrv bit (1) unal, /* if s.e. valid for retrieve */ 1 194 2 val_mod bit (1) unal, /* for modify */ 1 195 2 val_del bit (1) unal, /* for delete */ 1 196 2 val_dtr bit (1) unal, /* for define temp rel */ 1 197 2 transactions_needed bit (1) unal, /* On => transaction must be started or in progress does 1 198* not imply that the database is of type page_file */ 1 199 2 open_mode bit (3) unal, /* 0=>unknown, 1=>r, 2=>u, 3=>er, 4=>eu, >4=>bad */ 1 200 2 new_select_expr bit (1) unal, /* on => starting a new tid list management period */ 1 201 2 no_optimize bit (1) unal, /* On => no optimize */ 1 202 2 print_search_order bit (1) unal, /* On => print the search order */ 1 203 2 resultant_in_pdir bit (1) unal, /* On => Temp segments are in the process dir */ 1 204 2 res_already_made bit (1) unal, /* On => resultant has been made based on a saved copy */ 1 205 2 user_started_transaction bit (1) unal, /* On => user already started his own transaction. */ 1 206 2 non_shared_to_shared bit (1) unal, /* On => user changed the scope from non shared to shared 1 207* inside a sequence of -another selection expression. */ 1 208 2 scopes_changed bit (1) unal, /* On => scopes had been changed by set_scopes or delete_scopes */ 1 209 2 dont_check_txn_id bit (1) unal, /* On => cpmd needs same selection exp across multiple txns */ 1 210 2 reserved bit (10) unal, /* reserved for future use */ 1 211 2 nseq_sch fixed bin (35), /* no. tuples located via sequential search */ 1 212 2 nind_sch fixed bin (35), /* no. tuples located via index search */ 1 213 2 nhash_sch fixed bin (35), /* no. tuples located via hash search */ 1 214 2 nlk_sch fixed bin (35), /* no tuples located via link search */ 1 215 2 cur_lit_offset fixed bin (35), /* current bit offset in literal string */ 1 216 2 dbi fixed bin (35), /* database index for this opening */ 1 217 2 last_s_e_id_num fixed bin (35), /* identifying number for last selection expression seen */ 1 218 2 se_transaction_id bit (36) aligned, /* transaction id from beginning of select expression */ 1 219 2 last_store_rel_name char (32), /* Name of relation last used for store */ 1 220 2 cursor_ptrs_storage_ptr ptr, /* pointer to space where cursor ptrs are stored */ 1 221 2 cursor_storage_area_ptr ptr, /* pointer to area where the cursors are kept */ 1 222 2 reserved_words (10) fixed bin (35), /* Reserved for future use */ 1 223 2 relmgr_entries, /* relation manager entries */ 1 224 3 open entry (char (*), char (*), bit (36) aligned, fixed bin (35)), 1 225 3 close entry (bit (36) aligned, fixed bin (35)), 1 226 3 create_cursor entry (bit (36) aligned, ptr, ptr, fixed bin (35)), 1 227 3 destroy_cursor entry (ptr, ptr, fixed bin (35)), 1 228 3 set_scope entry (bit (36) aligned, bit (2) aligned, bit (2) aligned, fixed bin (35)), 1 229 3 delete_tuples_by_id entry (ptr, ptr, fixed bin (35), fixed bin (35)), 1 230 3 modify_tuples_by_id entry (ptr, ptr, ptr, fixed bin (35), fixed bin (35)), 1 231 3 get_tuple_by_id entry (ptr, bit (36) aligned, ptr, ptr, ptr, fixed bin (35)), 1 232 3 get_tuples_by_spec entry (ptr, ptr, ptr, ptr, ptr, fixed bin (35)), 1 233 3 get_tuple_id entry (ptr, ptr, ptr, ptr, fixed bin (35)), 1 234 3 put_tuple entry (ptr, ptr, bit (36) aligned, fixed bin (35)), 1 235 3 get_count entry (ptr, ptr, fixed bin (35), fixed bin (35)), 1 236 3 get_duplicate_key_count entry (ptr, bit (36) aligned, fixed bin (17), fixed bin (35), fixed bin (35)), 1 237 3 get_population entry (ptr, fixed bin (35), fixed bin (35)), 1 238 3 create_relation entry (char (*), char (*), ptr, ptr, bit (36) aligned, bit (36) aligned, fixed bin (35)), 1 239 3 create_index entry (bit (36) aligned, ptr, bit (36) aligned, fixed bin (17), bit (36) aligned, fixed bin (35)), 1 240 3 destroy_relation_by_path entry (char (*), char (*), fixed bin (35)), 1 241 3 reserved_entries (5) entry (), 1 242 2 access_costs, /* access costs for permute */ 1 243 3 total_primary_key_cost float bin, 1 244 3 access_cost float bin, 1 245 3 access_overhead float bin, 1 246 3 us_access_cost float bin, 1 247 3 os_access_cost float bin, 1 248 2 dbc_uid bit (36) aligned, /* uid of the segment containing the dbc structure */ 1 249 2 concurrency_on bit (1) unal, /* "1"b implies dmfile concurrency is being used */ 1 250 2 rollback_on bit (1) unal; /* "1"b iomplies before journaling is to be done */ 1 251 1 252 /* END mrds_dbcb.incl.pl1 */ 1 253 1 254 195 196 2 1 /* BEGIN INCLUDE FILE definition.incl.pl1 */ 2 2 2 3 2 4 2 5 /****^ HISTORY COMMENTS: 2 6* 1) change(86-05-02,Elhard), approve(86-05-02,MCR7391), 2 7* audit(86-07-18,DGHowe), install(86-11-20,MR12.0-1222): 2 8* Modified to add indirect bit to definition flags. 2 9* END HISTORY COMMENTS */ 2 10 2 11 2 12 dcl 1 definition aligned based, 2 13 2 forward unal bit(18), /* offset of next def */ 2 14 2 backward unal bit(18), /* offset of previous def */ 2 15 2 value unal bit(18), 2 16 2 flags unal, 2 17 3 new bit(1), 2 18 3 ignore bit(1), 2 19 3 entry bit(1), 2 20 3 retain bit(1), 2 21 3 argcount bit(1), 2 22 3 descriptors bit(1), 2 23 3 indirect bit(1), 2 24 3 unused bit(8), 2 25 2 class unal bit(3), 2 26 2 symbol unal bit(18), /* offset of ACC for symbol */ 2 27 2 segname unal bit(18); /* offset of segname def */ 2 28 2 29 /* END INCLUDE FILE definition.incl.pl1 */ 197 198 3 1 /* BEGIN INCLUDE FILE ... object_info.incl.pl1 3 2*coded February 8, 1972 by Michael J. Spier */ 3 3 /* modified May 26, 1972 by M. Weaver */ 3 4 /* modified 15 April, 1975 by M. Weaver */ 3 5 3 6 declare 1 object_info aligned based, /* structure containing object info based, returned by object_info_ */ 3 7 2 version_number fixed bin, /* version number of current structure format (=2) */ 3 8 2 textp pointer, /* pointer to beginning of text section */ 3 9 2 defp pointer, /* pointer to beginning of definition section */ 3 10 2 linkp pointer, /* pointer to beginning of linkage section */ 3 11 2 statp pointer, /* pointer to beginning of static section */ 3 12 2 symbp pointer, /* pointer to beginning of symbol section */ 3 13 2 bmapp pointer, /* pointer to beginning of break map (may be null) */ 3 14 2 tlng fixed bin, /* length in words of text section */ 3 15 2 dlng fixed bin, /* length in words of definition section */ 3 16 2 llng fixed bin, /* length in words of linkage section */ 3 17 2 ilng fixed bin, /* length in words of static section */ 3 18 2 slng fixed bin, /* length in words of symbol section */ 3 19 2 blng fixed bin, /* length in words of break map */ 3 20 2 format, /* word containing bit flags about object type */ 3 21 3 old_format bit(1) unaligned, /* on if segment isn't in new format, i.e. has old style object map */ 3 22 3 bound bit(1) unaligned, /* on if segment is bound */ 3 23 3 relocatable bit(1) unaligned, /* on if seg has relocation info in its first symbol block */ 3 24 3 procedure bit(1) unaligned, /* on if segment is an executable object program */ 3 25 3 standard bit(1) unaligned, /* on if seg is in standard format (more than just standard map) */ 3 26 3 gate bit(1) unaligned, /* on if segment is a gate */ 3 27 3 separate_static bit(1) unaligned, /* on if static not in linkage */ 3 28 3 links_in_text bit(1) unaligned, /* on if there are threaded links in text */ 3 29 3 perprocess_static bit (1) unaligned, /* on if static is not to be per run unit */ 3 30 3 pad bit(27) unaligned, 3 31 2 entry_bound fixed bin, /* entry bound if segment is a gate */ 3 32 2 textlinkp pointer, /* ptr to first link in text */ 3 33 3 34 /* LIMIT OF BRIEF STRUCTURE */ 3 35 3 36 2 compiler char(8) aligned, /* name of processor which generated segment */ 3 37 2 compile_time fixed bin(71), /* clock reading of date/time object was generated */ 3 38 2 userid char(32) aligned, /* standard Multics id of creator of object segment */ 3 39 2 cvers aligned, /* generator version name in printable char string form */ 3 40 3 offset bit(18) unaligned, /* offset of name in words relative to base of symbol section */ 3 41 3 length bit(18) unaligned, /* length of name in characters */ 3 42 2 comment aligned, /* printable comment concerning generator or generation of segment */ 3 43 3 offset bit(18) unaligned, /* offset of comment in words relative to base of symbol section */ 3 44 3 length bit(18) unaligned, /* length of comment in characters */ 3 45 2 source_map fixed bin, /* offset, relative to base of symbol section, of source map structure */ 3 46 3 47 /* LIMIT OF DISPLAY STRUCTURE */ 3 48 3 49 2 rel_text pointer, /* pointer to text section relocation info */ 3 50 2 rel_def pointer, /* pointer to definition section relocation info */ 3 51 2 rel_link pointer, /* pointer to linkage section relocation info */ 3 52 2 rel_static pointer, /* pointer to static section relocation info */ 3 53 2 rel_symbol pointer, /* pointer to symbol section relocation info */ 3 54 2 text_boundary fixed bin, /* specifies mod of text section base boundary */ 3 55 2 static_boundary fixed bin, /* specifies mod of internal static base boundary */ 3 56 /* currently not used by system */ 3 57 2 default_truncate fixed bin, /* offset rel to symbp for binder to automatically trunc. symb sect. */ 3 58 2 optional_truncate fixed bin; /* offset rel to symbp for binder to optionally trunc. symb sect. */ 3 59 3 60 declare object_info_version_2 fixed bin int static init(2); 3 61 3 62 /* END INCLUDE FILE ... object_info.incl.pl1 */ 199 200 201 end; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/01/88 1315.0 mrds_dsl_get_builtins.pl1 >special_ldd>install>MR12.2-1073>mrds_dsl_get_builtins.pl1 195 1 08/01/88 1300.0 mrds_dbcb.incl.pl1 >special_ldd>install>MR12.2-1073>mrds_dbcb.incl.pl1 197 2 11/24/86 1226.9 definition.incl.pl1 >ldd>include>definition.incl.pl1 199 3 08/05/77 1022.5 object_info.incl.pl1 >ldd>include>object_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. MB 000114 automatic char(13) initial packed unaligned dcl 172 set ref 83 124 172* SEG constant bit(3) initial packed unaligned dcl 162 ref 103 TEXT constant bit(3) initial packed unaligned dcl 163 ref 110 acc based structure level 1 dcl 158 acc_ptr 000106 automatic pointer dcl 168 set ref 117* 122 124 124 124 addr builtin function dcl 188 ref 69 69 addrel builtin function dcl 188 ref 79 83 87 90 103 117 135 135 143 bit18 based bit(18) packed unaligned dcl 190 ref 79 87 caller_name 000120 automatic char(21) initial packed unaligned dcl 174 set ref 54* 64* 70* 94* 138* 150* 174* class 1(33) based bit(3) level 2 packed packed unaligned dcl 2-12 ref 103 110 continue 000127 automatic char(1) initial packed unaligned dcl 177 set ref 54* 64* 70* 94* 138* 150* 177* cu_$decode_entry_value 000016 constant entry external dcl 183 ref 51 d_ptr 000102 automatic pointer dcl 166 set ref 79* 83 85 87* 90* 101* 103* 103 103 103* 110 110 110 117 135 135* 143 data based structure level 2 dcl 1-142 dbcb based structure level 1 dcl 1-142 dbcb_data based structure level 1 unaligned dcl 1-148 dbcb_ptr parameter pointer dcl 1-146 set ref 9 135* 147 definition based structure level 1 dcl 2-12 defp 4 000136 automatic pointer level 2 dcl 193 set ref 79 79 83 87 90 103 117 143 end_of_def 000111 automatic bit(1) packed unaligned dcl 170 set ref 78* 79 88* entry 1(20) based bit(1) level 3 packed packed unaligned dcl 2-12 ref 110 error_code parameter fixed bin(35,0) dcl 180 set ref 9 53* 54* 63* 64 64* 69* 70 70* 93* 94* 103 135* 137 138* 147 149* 150* flag 000126 automatic bit(1) packed unaligned dcl 176 set ref 121* 122* 124* 128 flags 1(18) based structure level 2 packed packed unaligned dcl 2-12 forward based bit(18) level 2 packed packed unaligned dcl 2-12 ref 87 103 143 found 000110 automatic bit(1) packed unaligned dcl 169 set ref 77* 79 84* 92 hcs_$status_mins 000014 constant entry external dcl 182 ref 63 ignore 1(19) based bit(1) level 3 packed packed unaligned dcl 2-12 ref 110 info_ptr 000130 automatic pointer initial dcl 178 set ref 54* 64* 70* 94* 138* 150* 178* len based fixed bin(8,0) level 2 packed packed unaligned dcl 158 ref 83 122 124 124 124 mb_bc 000133 automatic fixed bin(24,0) dcl 191 set ref 63* 69* mb_ptr 000100 automatic pointer dcl 165 set ref 51* 52 61* 61 63* 69* mb_type 000134 automatic fixed bin(2,0) dcl 192 set ref 63* mrds_builtin_ 000020 constant entry external dcl 184 ref 51 51 mrds_dsl_thread_fn_list 000022 constant entry external dcl 185 ref 135 mrds_error_$bad_builtin_obj 000024 external static fixed bin(35,0) dcl 186 ref 53 93 149 null builtin function dcl 188 ref 52 147 178 obj_info 000136 automatic structure level 1 dcl 193 set ref 69 69 object_info based structure level 1 dcl 3-6 object_info_$brief 000012 constant entry external dcl 181 ref 69 ptr builtin function dcl 188 ref 61 ptr_sink 000104 automatic pointer dcl 167 set ref 51* return_value 000132 automatic fixed bin(35,0) initial dcl 179 set ref 54* 64* 70* 94* 138* 150* 179* saved_d_ptr 000112 automatic pointer dcl 171 set ref 85* 101 segname 2(18) based bit(18) level 2 packed packed unaligned dcl 2-12 ref 103 sfi_ptr 32 based pointer level 3 dcl 1-142 ref 147 string 0(09) based char level 2 packed packed unaligned dcl 158 ref 83 124 124 sub_err_ 000010 constant entry external dcl 173 ref 54 64 70 94 138 150 substr builtin function dcl 188 ref 124 symbol 2 based bit(18) level 2 packed packed unaligned dcl 2-12 ref 83 117 textp 2 000136 automatic pointer level 2 dcl 193 set ref 135 135 value 1 based bit(18) level 2 packed packed unaligned dcl 2-12 ref 90 135 135 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. fixed builtin function dcl 188 object_info_version_2 internal static fixed bin(17,0) initial dcl 3-60 rel builtin function dcl 188 sys_info$max_seg_size external static fixed bin(35,0) dcl 187 NAME DECLARED BY EXPLICIT CONTEXT. mrds_dsl_get_builtins 000170 constant entry external dcl 9 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1222 1250 1100 1232 Length 1512 1100 26 226 121 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mrds_dsl_get_builtins 236 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mrds_dsl_get_builtins 000100 mb_ptr mrds_dsl_get_builtins 000102 d_ptr mrds_dsl_get_builtins 000104 ptr_sink mrds_dsl_get_builtins 000106 acc_ptr mrds_dsl_get_builtins 000110 found mrds_dsl_get_builtins 000111 end_of_def mrds_dsl_get_builtins 000112 saved_d_ptr mrds_dsl_get_builtins 000114 MB mrds_dsl_get_builtins 000120 caller_name mrds_dsl_get_builtins 000126 flag mrds_dsl_get_builtins 000127 continue mrds_dsl_get_builtins 000130 info_ptr mrds_dsl_get_builtins 000132 return_value mrds_dsl_get_builtins 000133 mb_bc mrds_dsl_get_builtins 000134 mb_type mrds_dsl_get_builtins 000136 obj_info mrds_dsl_get_builtins THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$decode_entry_value hcs_$status_mins mrds_builtin_ mrds_dsl_thread_fn_list object_info_$brief sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. mrds_error_$bad_builtin_obj LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 9 000164 172 000175 174 000201 177 000207 178 000211 179 000213 51 000214 52 000232 53 000236 54 000242 56 000306 61 000307 63 000311 64 000327 69 000400 70 000417 77 000470 78 000471 79 000472 83 000510 84 000523 85 000525 86 000526 87 000527 88 000540 90 000542 92 000550 93 000552 94 000556 96 000622 101 000623 103 000625 110 000650 117 000661 121 000666 122 000667 124 000677 128 000712 135 000714 137 000734 138 000740 143 001005 147 001013 149 001025 150 001030 201 001074 ----------------------------------------------------------- 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