COMPILATION LISTING OF SEGMENT mrds_dsl_thread_fn_list Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/01/88 1325.0 mst Mon 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 mrds_dsl_thread_fn_list: proc (dbcb_ptr, fn_entry, code); 19 20 /* NOTES: 21* 22* Procedure to fill in a scalfn_info block for a builtin or declared scalar 23* function, given a pointer to the entry in the text portion of the object 24* segment. 25**/ 26 27 /* HISTORY: 28* 29* 76-06-01 J. A. Weeldreyer: Initially written. 30* 31* 80-11-17 Rickie E. Brinegar: Modified to accept an initiated entry in the 32* form of fn_entry instead of a pointer to the initiated segment. 33**/ 34 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 35 36 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 */ 37 38 3 1 /* BEGIN INCLUDE FILE ... entry_sequence_info.incl.pl1 */ 3 2 3 3 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(86-04-16,GWMay), approve(86-04-16,MCR7373), 3 7* audit(86-04-29,LJAdams), install(86-05-01,MR12.0-1051): 3 8* reformatted. 3 9* END HISTORY COMMENTS */ 3 10 3 11 3 12 /* coded 5/75 by M. Weaver */ 3 13 /* changed 5/79 by G. Dixon to include entry_desc_info */ 3 14 3 15 dcl 1 parm_desc_ptrs aligned based, 3 16 2 n_args fixed bin(18) unsigned unaligned, 3 17 2 descriptor_relp (num_descs refer(parm_desc_ptrs.n_args)) 3 18 bit(18) unaligned; 3 19 3 20 dcl num_descs fixed bin(18); 3 21 3 22 dcl 1 entry_sequence aligned based, 3 23 2 word1, 3 24 3 descr_relp_offset bit(18) unaligned, /* offset of parm_desc_ptrs structure */ 3 25 3 reserved bit(18) unaligned, 3 26 2 word2, 3 27 3 def_relp bit(18) unaligned, /* offset of entry's definition */ 3 28 3 flags unaligned like entry_desc_info.flags, 3 29 2 code_sequence bit(36) aligned; 3 30 4 1 /* START OF: entry_desc_info.incl.pl1 * * * * * * * * * * * * * * * * */ 4 2 4 3 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(84-11-29,Ranzenbach), approve(86-03-12,MCR7144), 4 7* audit(86-03-12,GWMay), install(86-05-01,MR12.0-1051): 4 8* for version 2. This version allows the caller to specify a pointer to 4 9* the beginning of the offset and its bit count. This allows the 4 10* processing of archive components. 4 11* 4 12* NOTICE: 4 13* All applications which use this structure should be converted to 4 14* use version 2. Version 1 can be retained by setting the version to 4 15* a value of 1. The constant entry_desc_info_version_1 has been 4 16* removed from the file. 4 17* END HISTORY COMMENTS */ 4 18 4 19 4 20 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 4 21 /* */ 4 22 /* Name: entry_desc_info.incl.pl1 */ 4 23 /* */ 4 24 /* This include file is used by get_entry_arg_desc_$info, $text_only_info and their */ 4 25 /* callers. It declares the flag bits obtained from the entry sequence of a procedure */ 4 26 /* entry point. */ 4 27 /* */ 4 28 /* Status */ 4 29 /* */ 4 30 /* 0) Created in May, 1979 by G. C. Dixon */ 4 31 /* */ 4 32 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 4 33 4 34 dcl 1 entry_desc_info aligned based(entry_desc_info_ptr), 4 35 2 version fixed bin, /* version number of this structure (= 2) */ 4 36 2 flags, 4 37 4 38 (3 basic_indicator, /* on if this is a BASIC program. */ 4 39 3 revision_1, /* on if program entry has stuff added after 5/75 */ 4 40 3 has_descriptors, /* on if entry point had valid parm. descriptors */ 4 41 3 variable, /* on if entry point takes undefined no. of args */ 4 42 3 function) /* on if entry point is a function */ 4 43 bit(1) unaligned, 4 44 3 pad bit(13) unaligned, 4 45 /* version 2 fields follow */ 4 46 2 object_ptr ptr, /* -> beginning of object segment... (INPUT) */ 4 47 2 bit_count fixed bin (24); /* bit count of object... (INPUT) */ 4 48 4 49 dcl entry_desc_info_version_2 fixed bin int static options(constant) init(2), 4 50 entry_desc_info_ptr ptr; 4 51 4 52 /* END OF: entry_desc_info.incl.pl1 * * * * * * * * * * * * * * * * */ 3 31 3 32 3 33 /* END INCLUDE FILE ... entry_sequence_info.incl.pl1 */ 39 40 5 1 /* BEGIN INCLUDE FILE ... object_info.incl.pl1 5 2*coded February 8, 1972 by Michael J. Spier */ 5 3 /* modified May 26, 1972 by M. Weaver */ 5 4 /* modified 15 April, 1975 by M. Weaver */ 5 5 5 6 declare 1 object_info aligned based, /* structure containing object info based, returned by object_info_ */ 5 7 2 version_number fixed bin, /* version number of current structure format (=2) */ 5 8 2 textp pointer, /* pointer to beginning of text section */ 5 9 2 defp pointer, /* pointer to beginning of definition section */ 5 10 2 linkp pointer, /* pointer to beginning of linkage section */ 5 11 2 statp pointer, /* pointer to beginning of static section */ 5 12 2 symbp pointer, /* pointer to beginning of symbol section */ 5 13 2 bmapp pointer, /* pointer to beginning of break map (may be null) */ 5 14 2 tlng fixed bin, /* length in words of text section */ 5 15 2 dlng fixed bin, /* length in words of definition section */ 5 16 2 llng fixed bin, /* length in words of linkage section */ 5 17 2 ilng fixed bin, /* length in words of static section */ 5 18 2 slng fixed bin, /* length in words of symbol section */ 5 19 2 blng fixed bin, /* length in words of break map */ 5 20 2 format, /* word containing bit flags about object type */ 5 21 3 old_format bit(1) unaligned, /* on if segment isn't in new format, i.e. has old style object map */ 5 22 3 bound bit(1) unaligned, /* on if segment is bound */ 5 23 3 relocatable bit(1) unaligned, /* on if seg has relocation info in its first symbol block */ 5 24 3 procedure bit(1) unaligned, /* on if segment is an executable object program */ 5 25 3 standard bit(1) unaligned, /* on if seg is in standard format (more than just standard map) */ 5 26 3 gate bit(1) unaligned, /* on if segment is a gate */ 5 27 3 separate_static bit(1) unaligned, /* on if static not in linkage */ 5 28 3 links_in_text bit(1) unaligned, /* on if there are threaded links in text */ 5 29 3 perprocess_static bit (1) unaligned, /* on if static is not to be per run unit */ 5 30 3 pad bit(27) unaligned, 5 31 2 entry_bound fixed bin, /* entry bound if segment is a gate */ 5 32 2 textlinkp pointer, /* ptr to first link in text */ 5 33 5 34 /* LIMIT OF BRIEF STRUCTURE */ 5 35 5 36 2 compiler char(8) aligned, /* name of processor which generated segment */ 5 37 2 compile_time fixed bin(71), /* clock reading of date/time object was generated */ 5 38 2 userid char(32) aligned, /* standard Multics id of creator of object segment */ 5 39 2 cvers aligned, /* generator version name in printable char string form */ 5 40 3 offset bit(18) unaligned, /* offset of name in words relative to base of symbol section */ 5 41 3 length bit(18) unaligned, /* length of name in characters */ 5 42 2 comment aligned, /* printable comment concerning generator or generation of segment */ 5 43 3 offset bit(18) unaligned, /* offset of comment in words relative to base of symbol section */ 5 44 3 length bit(18) unaligned, /* length of comment in characters */ 5 45 2 source_map fixed bin, /* offset, relative to base of symbol section, of source map structure */ 5 46 5 47 /* LIMIT OF DISPLAY STRUCTURE */ 5 48 5 49 2 rel_text pointer, /* pointer to text section relocation info */ 5 50 2 rel_def pointer, /* pointer to definition section relocation info */ 5 51 2 rel_link pointer, /* pointer to linkage section relocation info */ 5 52 2 rel_static pointer, /* pointer to static section relocation info */ 5 53 2 rel_symbol pointer, /* pointer to symbol section relocation info */ 5 54 2 text_boundary fixed bin, /* specifies mod of text section base boundary */ 5 55 2 static_boundary fixed bin, /* specifies mod of internal static base boundary */ 5 56 /* currently not used by system */ 5 57 2 default_truncate fixed bin, /* offset rel to symbp for binder to automatically trunc. symb sect. */ 5 58 2 optional_truncate fixed bin; /* offset rel to symbp for binder to optionally trunc. symb sect. */ 5 59 5 60 declare object_info_version_2 fixed bin int static init(2); 5 61 5 62 /* END INCLUDE FILE ... object_info.incl.pl1 */ 41 42 6 1 /* BEGIN INCLUDE FILE mrds_scalfn_info.incl.pl1 -- jaw 5/3/77 */ 6 2 6 3 dcl 1 scalfn_info aligned based (sfi_ptr), /* info for a scalar function */ 6 4 2 fwd_ptr ptr, /* pointer to next function in list */ 6 5 2 name char (32), /* primary name of function */ 6 6 2 info_ent_ptr ptr, /* pointer to info entry for variable function, or null */ 6 7 2 entry_ptr ptr, /* pointer to entry to be called */ 6 8 2 rslt_desc bit (36), /* result descriptor for non_var. funct., or "0"b */ 6 9 2 nargs fixed bin, /* no. of input args for non-var. funct. or 0 */ 6 10 2 arg_desc (nsfi_args_init refer (scalfn_info.nargs)) bit (36); /* descriptors for each input arg */ 6 11 6 12 dcl sfi_ptr ptr; 6 13 dcl nsfi_args_init fixed bin; 6 14 6 15 /* END INCLUDE FILE mrds_scalfn_info.incl.pl1 */ 6 16 43 44 7 1 /* BEGIN INCLUDE FILE mdbm_seg_area.incl.pl1 - - Jim Gray 2/19/79 */ 7 2 7 3 /* these structures provide a standard for 7 4* 1) using an entire segment as an area, managed by the area manager 7 5* 2) a constant header, that has an offset to the major common structure in the area 7 6* the pointer to that structure is obtained via pointer(model_seg_ptr, model_seg.offset) 7 7* the model_area_ptr is obtained via pointer(model_seg_ptr, size(model_seg)) */ 7 8 7 9 declare 1 model_seg aligned based (model_seg_ptr), /* segment header, not to be changed */ 7 10 2 struct_offset bit (18), /* offset to major structure allocated in area */ 7 11 2 padding (3) fixed bin ; /* to set up four word boundary */ 7 12 7 13 declare model_seg_ptr ptr int automatic init (null ()); 7 14 7 15 7 16 declare model_area area (sys_info$max_seg_size - size (model_seg)) based (model_area_ptr) ; /* segment area */ 7 17 7 18 declare model_area_ptr ptr int automatic init (null ()); 7 19 7 20 dcl size builtin; 7 21 7 22 /* END INCLUDE FILE mdbm_seg_area.incl.pl1 */ 7 23 45 46 47 dcl (b_ptr, /* pointer to base of object */ 48 d_ptr, /* ptr to definition block */ 49 e_ptr, /* pointer to entry sequence */ 50 pd_ptr, /* pointer to parameter descriptor offsets */ 51 s_ptr) ptr; /* pointer to seg. definition block */ 52 53 dcl fn_entry entry variable; /* Input: initiated function entry */ 54 55 dcl i fixed bin; /* internal index */ 56 57 dcl (code, /* Output: status code */ 58 icode) fixed bin (35); /* internal status code */ 59 60 dcl name char (32) var; /* function name */ 61 dcl 1 obj_info aligned like object_info; /* place for object information */ 62 dcl bc fixed bin (24); /* bit count of object seg */ 63 dcl stype fixed bin (2); /* type code of object seg */ 64 dcl 1 acc aligned based, /* template for acc string */ 65 2 len fixed bin (8) unal, 66 2 string char (0 refer (acc.len)) unal; 67 dcl bit36 bit (36) based; /* template for descriptor */ 68 69 dcl mrds_error_$cant_ref_fun fixed bin (35) ext static; 70 dcl sys_info$max_seg_size fixed bin (35) ext static; 71 72 dcl (addr, 73 addrel, 74 codeptr, 75 fixed, 76 null, 77 ptr, 78 rel) builtin; 79 80 dcl hcs_$status_mins entry (ptr, fixed bin (2), fixed bin (24), fixed bin (35)); 81 dcl object_info_$brief entry (ptr, fixed bin (24), ptr, fixed bin (35)); 82 dcl get_definition_ entry (ptr, char (*), char (*), ptr, fixed bin (35)); 83 84 sfi_ptr = null; /* initiallize */ 85 86 87 b_ptr = ptr (codeptr (fn_entry), 0); /* point to base of object */ 88 call hcs_$status_mins (b_ptr, stype, bc, icode); /* get bit count of object */ 89 if icode ^= 0 then call error (mrds_error_$cant_ref_fun); 90 call object_info_$brief (b_ptr, bc, addr (obj_info), icode); /* get info on obj seg */ 91 if icode ^= 0 then call error (mrds_error_$cant_ref_fun); 92 e_ptr = addrel (codeptr (fn_entry), -2); /* point to entry sequence */ 93 if e_ptr -> entry_sequence.flags.has_descriptors then do; /* if have args */ 94 pd_ptr = addrel (obj_info.textp, e_ptr -> entry_sequence.descr_relp_offset); /* point to parameter descriptors */ 95 nsfi_args_init = fixed (pd_ptr -> parm_desc_ptrs.n_args) - 1; /* no. input args */ 96 end; 97 else nsfi_args_init = 0; 98 allocate scalfn_info in (dbcb.static_area); /* allocate. an info block */ 99 scalfn_info.fwd_ptr = dbcb.sfi_ptr; /* fill in the block */ 100 scalfn_info.entry_ptr = codeptr (fn_entry); 101 d_ptr = addrel (obj_info.defp, e_ptr -> entry_sequence.def_relp); /* point to def. block */ 102 name = addrel (obj_info.defp, d_ptr -> definition.symbol) -> acc.string; /* function name */ 103 scalfn_info.name = name; 104 105 if e_ptr -> entry_sequence.flags.has_descriptors then do; /* if fixed input */ 106 scalfn_info.info_ent_ptr = null; /* no info entry in this case */ 107 scalfn_info.rslt_desc = addrel (obj_info.textp, pd_ptr -> parm_desc_ptrs.descriptor_relp 108 (nsfi_args_init + 1)) -> bit36; /* last arg is result */ 109 do i = 1 to scalfn_info.nargs; /* fill in input descriptors */ 110 scalfn_info.arg_desc (i) = addrel (obj_info.textp, pd_ptr -> parm_desc_ptrs.descriptor_relp (i)) -> bit36; 111 end; 112 end; /* if fixed args */ 113 114 else do; /* no descriptors, variable args */ 115 scalfn_info.rslt_desc = "0"b; 116 scalfn_info.nargs = 0; 117 s_ptr = addrel (obj_info.defp, d_ptr -> definition.segname); /* point to def. block for seg. */ 118 call get_definition_ (obj_info.defp, addrel (obj_info.defp, s_ptr -> definition.symbol) -> acc.string, 119 name || "_info", d_ptr, icode); /* definition of corr. info entry */ 120 if icode ^= 0 then call error (mrds_error_$cant_ref_fun); 121 scalfn_info.info_ent_ptr = addrel (obj_info.textp, d_ptr -> definition.value); 122 end; /* if variable args */ 123 124 dbcb.sfi_ptr = sfi_ptr; /* put block at head of list */ 125 code = 0; 126 exit: return; 127 128 error: proc (cd); 129 130 /* error procedure */ 131 132 dcl cd fixed bin (35); 133 134 code = cd; 135 go to exit; 136 137 end error; 138 139 end mrds_dsl_thread_fn_list; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/01/88 1315.0 mrds_dsl_thread_fn_list.pl1 >special_ldd>install>MR12.2-1073>mrds_dsl_thread_fn_list.pl1 35 1 08/01/88 1300.0 mrds_dbcb.incl.pl1 >special_ldd>install>MR12.2-1073>mrds_dbcb.incl.pl1 37 2 11/24/86 1226.9 definition.incl.pl1 >ldd>include>definition.incl.pl1 39 3 05/01/86 0849.8 entry_sequence_info.incl.pl1 >ldd>include>entry_sequence_info.incl.pl1 3-31 4 05/01/86 0849.8 entry_desc_info.incl.pl1 >ldd>include>entry_desc_info.incl.pl1 41 5 08/05/77 1022.5 object_info.incl.pl1 >ldd>include>object_info.incl.pl1 43 6 10/14/83 1608.5 mrds_scalfn_info.incl.pl1 >ldd>include>mrds_scalfn_info.incl.pl1 45 7 10/14/83 1608.6 mdbm_seg_area.incl.pl1 >ldd>include>mdbm_seg_area.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. acc based structure level 1 dcl 64 addr builtin function dcl 72 ref 90 90 addrel builtin function dcl 72 ref 92 94 101 102 107 110 117 118 121 arg_desc 20 based bit(36) array level 2 dcl 6-3 set ref 110* b_ptr 000110 automatic pointer dcl 47 set ref 87* 88* 90* bc 000224 automatic fixed bin(24,0) dcl 62 set ref 88* 90* bit36 based bit(36) packed unaligned dcl 67 ref 107 110 cd parameter fixed bin(35,0) dcl 132 ref 128 134 code parameter fixed bin(35,0) dcl 57 set ref 18 125* 134* codeptr builtin function dcl 72 ref 87 92 100 d_ptr 000112 automatic pointer dcl 47 set ref 101* 102 117 118* 121 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 ref 18 98 99 124 def_relp 1 based bit(18) level 3 packed packed unaligned dcl 3-22 ref 101 definition based structure level 1 dcl 2-12 defp 4 000136 automatic pointer level 2 dcl 61 set ref 101 102 117 118* 118 descr_relp_offset based bit(18) level 3 packed packed unaligned dcl 3-22 ref 94 descriptor_relp 0(18) based bit(18) array level 2 packed packed unaligned dcl 3-15 ref 107 110 e_ptr 000114 automatic pointer dcl 47 set ref 92* 93 94 101 105 entry_desc_info based structure level 1 dcl 4-34 entry_ptr 14 based pointer level 2 dcl 6-3 set ref 100* entry_sequence based structure level 1 dcl 3-22 fixed builtin function dcl 72 ref 95 flags 1(18) based structure level 3 in structure "entry_sequence" packed packed unaligned dcl 3-22 in procedure "mrds_dsl_thread_fn_list" flags 1 based structure level 2 in structure "entry_desc_info" dcl 4-34 in procedure "mrds_dsl_thread_fn_list" fn_entry parameter entry variable dcl 53 ref 18 87 92 100 fwd_ptr based pointer level 2 dcl 6-3 set ref 99* get_definition_ 000016 constant entry external dcl 82 ref 118 has_descriptors 1(20) based bit(1) level 4 packed packed unaligned dcl 3-22 ref 93 105 hcs_$status_mins 000012 constant entry external dcl 80 ref 88 i 000122 automatic fixed bin(17,0) dcl 55 set ref 109* 110 110* icode 000123 automatic fixed bin(35,0) dcl 57 set ref 88* 89 90* 91 118* 120 info_ent_ptr 12 based pointer level 2 dcl 6-3 set ref 106* 121* len based fixed bin(8,0) level 2 packed packed unaligned dcl 64 ref 102 118 118 model_area_ptr 000106 automatic pointer initial dcl 7-18 set ref 7-18* model_seg_ptr 000104 automatic pointer initial dcl 7-13 set ref 7-13* mrds_error_$cant_ref_fun 000010 external static fixed bin(35,0) dcl 69 set ref 89* 91* 120* n_args based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-15 ref 95 name 2 based char(32) level 2 in structure "scalfn_info" dcl 6-3 in procedure "mrds_dsl_thread_fn_list" set ref 103* name 000124 automatic varying char(32) dcl 60 in procedure "mrds_dsl_thread_fn_list" set ref 102* 103 118 nargs 17 based fixed bin(17,0) level 2 dcl 6-3 set ref 98* 109 116* nsfi_args_init 000102 automatic fixed bin(17,0) dcl 6-13 set ref 95* 97* 98 98 107 null builtin function dcl 72 ref 84 106 7-13 7-18 obj_info 000136 automatic structure level 1 dcl 61 set ref 90 90 object_info based structure level 1 dcl 5-6 object_info_$brief 000014 constant entry external dcl 81 ref 90 parm_desc_ptrs based structure level 1 dcl 3-15 pd_ptr 000116 automatic pointer dcl 47 set ref 94* 95 107 110 ptr builtin function dcl 72 ref 87 rslt_desc 16 based bit(36) level 2 dcl 6-3 set ref 107* 115* s_ptr 000120 automatic pointer dcl 47 set ref 117* 118 scalfn_info based structure level 1 dcl 6-3 set ref 98 segname 2(18) based bit(18) level 2 packed packed unaligned dcl 2-12 ref 117 sfi_ptr 32 based pointer level 3 in structure "dbcb" dcl 1-142 in procedure "mrds_dsl_thread_fn_list" set ref 99 124* sfi_ptr 000100 automatic pointer dcl 6-12 in procedure "mrds_dsl_thread_fn_list" set ref 84* 98* 99 100 103 106 107 109 110 115 116 121 124 static_area 306 based area level 2 dcl 1-142 ref 98 string 0(09) based char level 2 packed packed unaligned dcl 64 set ref 102 118* stype 000225 automatic fixed bin(2,0) dcl 63 set ref 88* symbol 2 based bit(18) level 2 packed packed unaligned dcl 2-12 ref 102 118 textp 2 000136 automatic pointer level 2 dcl 61 set ref 94 107 110 121 value 1 based bit(18) level 2 packed packed unaligned dcl 2-12 ref 121 word1 based structure level 2 dcl 3-22 word2 1 based structure level 2 dcl 3-22 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. entry_desc_info_ptr automatic pointer dcl 4-49 entry_desc_info_version_2 internal static fixed bin(17,0) initial dcl 4-49 model_area based area dcl 7-16 model_seg based structure level 1 dcl 7-9 num_descs automatic fixed bin(18,0) dcl 3-20 object_info_version_2 internal static fixed bin(17,0) initial dcl 5-60 rel builtin function dcl 72 size builtin function dcl 7-20 sys_info$max_seg_size external static fixed bin(35,0) dcl 70 NAMES DECLARED BY EXPLICIT CONTEXT. error 000405 constant entry internal dcl 128 ref 89 91 120 exit 000404 constant label dcl 126 ref 135 mrds_dsl_thread_fn_list 000016 constant entry external dcl 18 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 504 524 413 514 Length 1046 413 20 306 71 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mrds_dsl_thread_fn_list 202 external procedure is an external procedure. error internal procedure shares stack frame of external procedure mrds_dsl_thread_fn_list. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mrds_dsl_thread_fn_list 000100 sfi_ptr mrds_dsl_thread_fn_list 000102 nsfi_args_init mrds_dsl_thread_fn_list 000104 model_seg_ptr mrds_dsl_thread_fn_list 000106 model_area_ptr mrds_dsl_thread_fn_list 000110 b_ptr mrds_dsl_thread_fn_list 000112 d_ptr mrds_dsl_thread_fn_list 000114 e_ptr mrds_dsl_thread_fn_list 000116 pd_ptr mrds_dsl_thread_fn_list 000120 s_ptr mrds_dsl_thread_fn_list 000122 i mrds_dsl_thread_fn_list 000123 icode mrds_dsl_thread_fn_list 000124 name mrds_dsl_thread_fn_list 000136 obj_info mrds_dsl_thread_fn_list 000224 bc mrds_dsl_thread_fn_list 000225 stype mrds_dsl_thread_fn_list THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc call_ext_out return_mac shorten_stack ext_entry op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_definition_ hcs_$status_mins object_info_$brief THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. mrds_error_$cant_ref_fun LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 18 000012 7 13 000023 7 18 000025 84 000026 87 000027 88 000034 89 000051 90 000062 91 000101 92 000112 93 000120 94 000124 95 000131 96 000135 97 000136 98 000137 99 000152 100 000157 101 000162 102 000170 103 000205 105 000211 106 000214 107 000216 109 000233 110 000243 111 000261 112 000263 115 000264 116 000265 117 000266 118 000273 120 000355 121 000367 124 000376 125 000403 126 000404 128 000405 134 000407 135 000412 ----------------------------------------------------------- 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