COMPILATION LISTING OF SEGMENT mu_rel_statistics Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-04-18_1124.51_Tue_mdt Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 mu_rel_statistics: proc; 7 8 /* 9* BEGIN_DESCRIPTION 10* This module calls the various relation manager routines to get a 11* relations's statistics. There are two types of routines, those 12* that return statistics and the one that records the statistics in 13* the resultant. The main entry point 14* mu_rel_statistics$mu_rel_statistics should never be called. 15* 16* 17* The entry return_tuple_count returns an exact count of the number 18* of tuples in the relation. 19* 20* 21* The entry record_statistics records the number of duplicates for 22* each indexed attribute in the number_of_dups element in the 23* attribute's rm_attr_info structure. It also records an estimate 24* of the total number of tuples in the relation in the 25* current_tuple_population element of the relation's rm_rel_info 26* structure. The statistics on when the statistics were collected 27* (also in rm_rel_info) are also upgraded. Since things are being 28* recorded in the resultant structures the database must be open. 29* Cursors are obtained via mu_cursor_manager_ so that they may be 30* saved and used later (or reused if they have already been 31* created). 32* 33* Known Bugs: 34* 35* Other Problems: 36* 37* History: 38* 82-09-24 Davids: written 39* 40* 82-10-18 Davids: corrected the parameter list of the record_statistics 41* entry to include the parameter relmgr_get_count - it had been left out 42* 43* 83-05-23 Mike Kubicar : new relation manager calling sequences and 44* relation cursor changes. 45* 46* 83-09-20 Ron Harvey: changed record_statistics entry so that it uses its 47* new relmgr_get_population parameter in preference to relmgr_get_count. 48* 49* END_DESCRIPTION 50**/ 51 52 /* PARAMETERS */ 53 54 dcl cursor_ptrs_storage_ptr ptr; /* (input) pointer to storage where cursor_ptrs to */ 55 /* */ 56 /* mappings are kept */ 57 dcl cursor_storage_area_ptr ptr; /* (input) pointer to where the cursors will be allocated */ 58 dcl dbi fixed bin (35); /* (input) index of an open database */ 59 dcl last_s_e_id_num fixed bin (35); /* (input) identifer for last selection expression seen */ 60 dcl Prmri_ptr ptr; /* (input) pointer to the relation's rm_rel_info structure */ 61 /* needed because rmri_ptr is "P" */ 62 /* dcl'ed in the incl file */ 63 dcl relmgr_create_cursor entry (bit (36) aligned, ptr, ptr, fixed bin (35)); 64 /* (input) entry used to create a cursor */ 65 dcl relmgr_get_count entry (ptr, ptr, fixed bin (35), fixed bin (35)); 66 /* (input) entry used to count tuples in a relation */ 67 dcl relmgr_get_duplicate_key_count entry (ptr, bit (36) aligned, fixed bin (17), fixed bin (35), fixed bin (35)); 68 /* (input) entry used to count duplicates within a key */ 69 dcl relmgr_get_population entry (ptr, fixed bin (35), fixed bin (35)); 70 /* (input) entry used to get estimeated 'population' of a relation */ 71 dcl relmgr_open entry (char (*), char (*), bit (36) aligned, fixed bin (35)); 72 /* (input)entry used to open a relation */ 73 74 dcl code fixed bin (35); /* (output) standard error code */ 75 dcl tuple_count fixed bin (35); /* (output) number of tuples in the relation */ 76 77 /* AUTOMATIC */ 78 79 dcl i fixed bin; /*loop index */ 80 dcl cursor_ptr ptr; /* pointer to a cursor */ 81 82 83 /* CONSTANTS */ 84 85 dcl ALL_THE_ATTRIBUTES fixed bin init (1) internal static options (constant); 86 /* all one fields in an index will be considered */ 87 /* when looking for duplicates */ 88 dcl DEFAULT_TUPLE_VARIABLE fixed bin (35) init (0) internal static options (constant); 89 90 /* BUILTINS */ 91 92 dcl clock builtin; 93 dcl null builtin; 94 95 /* ENTRIES */ 96 97 dcl mu_cursor_manager_$get entry (fixed bin (35), ptr, fixed bin (35), bit (36) aligned, entry, entry, ptr, ptr, 98 ptr, fixed bin (35)); 99 100 /* INCLUDES */ 101 1 1 /* BEGIN mdbm_rm_rel_info.incl.pl1 -- jaw, 11/16/78 */ 1 2 1 3 /* WARNING 1 4* If the rm_rel_info structure is changed then the mrds_data_ 1 5* item saved_res_version MUST be incremented to invalidate all 1 6* existing saved resultants 1 7**/ 1 8 1 9 /* HISTORY: 1 10* 1 11* Modified by Jim Gray - - May 1980, to include model number of 1 12* attributes, and varying attributes, so that partial view 1 13* submodels will have the info needed to properly set up the 1 14* varying length array headers in the tuple structure. 1 15* 1 16* Modified by Jim Gray - - 80-11-06, to rename r_perm = 1 17* status_perm, s_perm = append_tuple_perm, d_perm = 1 18* delete_tuple_perm, and make m_perm = unused_perm. 1 19* 1 20* 81-01-23 Jim Gray : added bit to indicate whether the last model 1 21* view attribute was varying character or bit, since a partial view 1 22* submodel will not have this information in the resultant, and it 1 23* is needed for determining the new tuple length in mus_mod_ubtup, 1 24* since with exact length storage of varying length attributes, 1 25* each tuple can be a different length, which is can only be 1 26* determined by examining the tuple itself. 1 27* 1 28* 81-01-29 Jim Gray : added curent tuple count, to provide for 1 29* interface to allow temp rel population to be known, and to 1 30* provide a more efficient means of finding an approx. current perm 1 31* relation population. 1 32* 1 33* 81-05-28 Jim Gray : removed structure elements referring to 1 34* blocked files, foreign keys, and ids procedures. Also set number 1 35* of files per rel to a constant of 1. 1 36* 1 37* 81-05-28 Jim Gray : combined data from rm_file_info into this 1 38* structure so that only one structure per relation is needed. 1 39* 1 40* 81-07-02 Jim Gray : added total_key and dup_key vfile statistics 1 41* counts. Also added number of operations count since last 1 42* statistics update, and a time since the statistics were last 1 43* updated. 1 44* 1 45* 81-07-06 Jim Gray : added a per selection expression update 1 46* identifier so that small relations could be updated on a per S.E. 1 47* basis 1 48* 1 49* 82-04-21 R. Lackey : Added number_selected (ri_niocbs_init refer (rm_rel_info.niocbs)) fixed bin (35) 1 50* to end of structure TR 12205 (Suggestion). 1 51* 1 52* 82-08-19 D. Woodka : Removed rm_rel_info.max_data_len field for 1 53* the DMS conversion. 1 54* 1 55* 82-08-30 Davids: added the opening_id element and removed the iocb 1 56* array and the niocb element for DMS conversion. Also removed the 1 57* number_selected array (and ri_niocbs_init) since subsets are not 1 58* going to be used. 1 59* 1 60* 82-09-20 Mike Kubicar : changed rm_rel_info.rel_id to bit (36) aligned 1 61* so that it can be used with relation manager. Also added 1 62* rm_rel_info.primary_key_index_id for relation manager. 1 63* 1 64* 82-09-22 Mike Kubicar : Removed the, now useless, fields var_attr_ptrs, 1 65* nvar_atts, model_nvar_atts. 1 66* 1 67* 82-09-24 Davids: Removed current_key_count and current_dup_key_count 1 68* since the duplicate key count for each secondary index is now being 1 69* kept in the attr_info structure and key_count was only needed to 1 70* help in calculating the average selectivity of each index which 1 71* can now be gotten directly from each index's dup key count. Also 1 72* removed the file_id element since it is no longer needed for 1 73* anything. 1 74* 1 75* 82-09-27 Mike Kubicar : removed file_id_len for the same reason file_id 1 76* was removed. 1 77* 1 78* 82-11-05 Mike Kubicar : added a pointer to an id_list structure to be 1 79* used when retrieving tuples from this relation. 1 80* 1 81* 83-04-06 Davids: Added the scope_flags_ptr which points to the scope_flags structure 1 82* for the relation. Note that this structure is part of the resultant NOT 1 83* part of the db.control structure. The scopes are duplicated in the resultant 1 84* to reduce contention for the db.control structure. Note also that the pointer 1 85* will always point to a scope_flags structure even if no scopes have been 1 86* set on the relation, the structure is allocated when the db is opened. 1 87**/ 1 88 1 89 1 90 /* DESCRIPTION: 1 91* 1 92* This structure is allocated in the area part of the structure in 1 93* mdbm_rm_db_info.incl.pl1 as part of the resultant model created 1 94* at open time for a database. There will be one of these 1 95* rm_rel_info structures for each relation appearing in the 1 96* database view (there may be less than the total in the database 1 97* for a submodel openings). There will also be one for each 1 98* temporary relation currently defined for that opening. 1 99* 1 100* The structure in mdbm_rm_rel_array.incl.pl1 contains pointers to 1 101* all rm_rel_info structures allocated. It is used for searching 1 102* for the appropriate structure. This array is pointed to by 1 103* rm_db_info. There are two arrays, one for perm rels, one for temp 1 104* rels. 1 105* 1 106* The rm_rel_info structure points to the 1 107* mdbm_rm_attr_info.incl.pl1 structures, one for each attribute 1 108* appearing in this view of the relation. Each of these in turn 1 109* point to a mdbm_rm_domain_info.incl.pl1 structure for the domain 1 110* info for each attr. 1 111* 1 112* Most of the other information here deals with specifics of the 1 113* relation's logical definition, such as key and secondary index 1 114* attribute inidicators, security permissions, and tuple physical 1 115* construction details. 1 116* 1 117**/ 1 118 1 119 dcl 1 rm_rel_info aligned based (rmri_ptr), /* relation information */ 1 120 2 name char (32), /* from submodel */ 1 121 2 model_name char (30), /* from model */ 1 122 2 rel_id bit (36) aligned, /* unique id. */ 1 123 2 retrieve bit (1) unal, /* operations allowed by this view */ 1 124 2 modify bit (1) unal, 1 125 2 delete bit (1) unal, 1 126 2 store bit (1) unal, 1 127 2 total_key bit (1) unal, /* on if view includes full primary key */ 1 128 2 indexed bit (1) unal, /* on if exists sec. index */ 1 129 2 mdbm_secured bit (1) unal, /* on if mdbm must check security */ 1 130 2 status_perm bit (1) unal, /* if user has status. perm. */ 1 131 2 append_tuple_perm bit (1) unal, /* if user has store perm. */ 1 132 2 delete_tuple_perm bit (1) unal, /* if user has del. perm. */ 1 133 2 unused_perm bit (1) unal, /* for future use. */ 1 134 2 last_model_attr_char_var bit (1) unal, /* on => last model varying attr is char */ 1 135 2 reserved bit (24) unal, /* for future use */ 1 136 2 num_attr fixed bin, /* total no. of attr. in rel. */ 1 137 2 model_num_attr fixed bin, /* total attrs in model relation */ 1 138 2 nkey_attr fixed bin, /* no. of key attr. */ 1 139 2 model_nkey_attr fixed bin, /* total number of keys in model */ 1 140 2 primary_key_index_id bit (36) aligned, /* Index id of relation's primary key */ 1 141 2 nsec_inds fixed bin, /* no. sec. indexes */ 1 142 2 max_key_len fixed bin (35), /* max length (chars) of primary key */ 1 143 2 current_tuple_population fixed bin (35), /* last known total tuple count for this relation */ 1 144 2 last_statistics_update_count fixed bin, /* number of operations's, since this rels stats were updated */ 1 145 2 last_statistics_update_time fixed bin (71),/* last time this rels stats were updated */ 1 146 2 last_statistics_update_s_e_ref_num fixed bin (35), /* last select expr ID that updated this rels stats */ 1 147 2 ready_mode fixed bin, /* 1 => r, 2 => mr, 3 => u, 4 => l, 5 => sr, 6 => su */ 1 148 2 file_type fixed bin, /* 1 => unblocked, 2 => blocked, 3 => temporary */ 1 149 2 tuple_id_len fixed bin, /* no. bits in local tuple id */ 1 150 2 opening_id bit (36) aligned, /* relation manager opening is */ 1 151 2 key_attr_ptrs (nkey_attr_init refer (rm_rel_info.nkey_attr)) ptr, /* ptrs to key attr. */ 1 152 2 attr_ptrs (natts_init refer (rm_rel_info.num_attr)) ptr, /* ptrs to all attr. */ 1 153 2 id_list_ptr ptr, /* Id list for retrieves from the relation */ 1 154 2 scope_flags_ptr ptr; /* pointer to the scope_flags structure for the rel */ 1 155 1 156 dcl rmri_ptr ptr; 1 157 dcl (nkey_attr_init, 1 158 natts_init, 1 159 nvar_atts_init) fixed bin; 1 160 1 161 /* END mdbm_rm_rel_info.incl.pl1 */ 1 162 1 163 102 103 2 1 /* BEGIN mdbm_rm_attr_info.incl.pl1 -- jaw, 11/16/78 */ 2 2 2 3 /* WARNING 2 4* If the rm_attr_info structure is changed then the mrds_data_ 2 5* item saved_res_version MUST be incremented to invalidate all 2 6* existing saved resultants 2 7**/ 2 8 2 9 /* 2 10* 2 11* Modified by Jim Gray - - 80-11-05, to add mdbm_secured bit, so 2 12* that rm_rel_info does not have to be checked 2 13* 2 14* 81-05-28 Jim Gray : removed structure elements referring to 2 15* foreign keys. 2 16* 2 17* 82-08-19 D. Woodka : removed rm_attr_info.bit_offset for the DMS 2 18* conversion. 2 19* 2 20* 82-09-15 Davids: added the number_of_dups field. 2 21* 2 22* 82-09-20 Mike Kubicar : changed the index_id field to be bit (36) 2 23* aligned. This is to conform with the new definition in the database 2 24* model. Also removed the now useless field varying. 2 25* 2 26* 82-11-05 Davids: added the field model_defn_order and clarified the 2 27* comment for the field defn_order. 2 28* 2 29* 83-05-23 Mike Kubicar : changed number_of_dups to fixed bin (35) since 2 30* that's what relation manager returns. 2 31* 2 32**/ 2 33 2 34 2 35 /* 2 36* this structure is allocated in the static area of 2 37* mdbm_rm_db_info.incl.pl1 once for each attribute per relation in 2 38* a readied file. it in turn points to 2 39* mdbm_rm_domain_info.incl.pl1 for the attributes domain. the 2 40* rm_attr_info is pointed to by mdbm_rm_rel_info.incl.pl1. all 2 41* structures are in the rm_db_info area. the attribute data 2 42* position within a tuple as stored in the data file are kept in 2 43* this resultant model of the attribute. 2 44* */ 2 45 2 46 dcl 1 rm_attr_info aligned based (rai_ptr), /* resultant attr. info */ 2 47 2 name char (32), /* from submodel */ 2 48 2 model_name char (32), /* from model */ 2 49 2 key_attr bit (1) unal, /* if key attribute */ 2 50 2 index_attr bit (1) unal, /* if secondary index */ 2 51 2 read_perm bit (1) unal, /* user has retr. permission */ 2 52 2 modify_perm bit (1) unal, /* user has modify permission */ 2 53 2 mdbm_secured bit (1) unal, /* on => database secured */ 2 54 2 reserved bit (30) unal, /* for future use */ 2 55 2 index_id bit (36) aligned, /* index id if index_attr */ 2 56 2 defn_order fixed bin, /* relative order in which attr is defined in the view */ 2 57 2 key_order fixed bin, /* relative order defined in prim. key */ 2 58 2 bit_length fixed bin (35), /* length if fixed, max. len. if var. */ 2 59 2 domain_ptr ptr, /* to domain info */ 2 60 2 number_of_dups fixed bin (35), /* if the attribute is indexed this will 2 61* be the number of duplicate values, exact 2 62* for a page_file database, an estimate for a vfile type */ 2 63 2 model_defn_order fixed bin; /* relative order in which attr is defined in the model */ 2 64 2 65 dcl rai_ptr ptr int automatic init (null ()); 2 66 2 67 /* END mdbm_rm_attr_info.incl.pl1 */ 2 68 2 69 104 105 106 return_tuple_count: entry (dbi, relmgr_create_cursor, relmgr_open, relmgr_get_count, 107 cursor_ptrs_storage_ptr, cursor_storage_area_ptr, Prmri_ptr, tuple_count, code); 108 109 rmri_ptr = Prmri_ptr; 110 call mu_cursor_manager_$get (dbi, rmri_ptr, DEFAULT_TUPLE_VARIABLE, 111 rmri_ptr -> rm_rel_info.rel_id, 112 relmgr_create_cursor, relmgr_open, cursor_ptrs_storage_ptr, 113 cursor_storage_area_ptr, cursor_ptr, code); 114 115 if code = 0 116 then call relmgr_get_count (cursor_ptr, null (), tuple_count, code); 117 118 if code ^= 0 119 then tuple_count = 0; 120 121 goto exit; 122 123 record_statistics: entry (dbi, relmgr_create_cursor, relmgr_open, relmgr_get_duplicate_key_count, relmgr_get_population, relmgr_get_count, 124 cursor_ptrs_storage_ptr, cursor_storage_area_ptr, Prmri_ptr, last_s_e_id_num, code); 125 126 /* This entry will use the relmgr_get_population procedure for an 'estimated' count 127* of the number of tuples in the relation. If the 'estimated' count is ZERO, 128* then the relmgr_get_count procedure will be used for the actual count. */ 129 130 rmri_ptr = Prmri_ptr; 131 call mu_cursor_manager_$get (dbi, rmri_ptr, DEFAULT_TUPLE_VARIABLE, 132 rmri_ptr -> rm_rel_info.rel_id, 133 relmgr_create_cursor, relmgr_open, cursor_ptrs_storage_ptr, 134 cursor_storage_area_ptr, cursor_ptr, code); 135 if code ^= 0 136 then goto exit; 137 138 do i = 1 to rmri_ptr -> rm_rel_info.num_attr; 139 rai_ptr = rmri_ptr -> rm_rel_info.attr_ptrs (i); 140 if rai_ptr -> rm_attr_info.index_attr 141 then do; 142 call relmgr_get_duplicate_key_count (cursor_ptr, 143 rai_ptr -> rm_attr_info.index_id, 144 ALL_THE_ATTRIBUTES, 145 rai_ptr -> rm_attr_info.number_of_dups, code); 146 if code ^= 0 147 then goto exit; 148 end; 149 end; 150 151 call relmgr_get_population (cursor_ptr, rmri_ptr -> rm_rel_info.current_tuple_population, code); 152 if code ^= 0 then goto exit; 153 154 if rmri_ptr -> rm_rel_info.current_tuple_population = 0 155 then do; /* make certain */ 156 call relmgr_get_count (cursor_ptr, null (), rmri_ptr -> rm_rel_info.current_tuple_population, code); 157 if code ^= 0 158 then goto exit; 159 end; 160 161 rmri_ptr -> rm_rel_info.last_statistics_update_count = 1; 162 rmri_ptr -> rm_rel_info.last_statistics_update_time = clock (); 163 rmri_ptr -> rm_rel_info.last_statistics_update_s_e_ref_num = last_s_e_id_num; 164 165 exit: 166 return; 167 168 end mu_rel_statistics; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/18/00 1124.5 mu_rel_statistics.pl1 >udd>sm>ds>w>ml>mu_rel_statistics.pl1 102 1 10/14/83 1709.1 mdbm_rm_rel_info.incl.pl1 >ldd>incl>mdbm_rm_rel_info.incl.pl1 104 2 10/14/83 1709.1 mdbm_rm_attr_info.incl.pl1 >ldd>incl>mdbm_rm_attr_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. ALL_THE_ATTRIBUTES 000002 constant fixed bin(17,0) initial dcl 85 set ref 142* DEFAULT_TUPLE_VARIABLE 000000 constant fixed bin(35,0) initial dcl 88 set ref 110* 131* Prmri_ptr parameter pointer dcl 60 ref 106 109 123 130 attr_ptrs based pointer array level 2 dcl 1-119 ref 139 clock builtin function dcl 92 ref 162 code parameter fixed bin(35,0) dcl 74 set ref 106 110* 115 115* 118 123 131* 135 142* 146 151* 152 156* 157 current_tuple_population 31 based fixed bin(35,0) level 2 dcl 1-119 set ref 151* 154 156* cursor_ptr 000102 automatic pointer dcl 80 set ref 110* 115* 131* 142* 151* 156* cursor_ptrs_storage_ptr parameter pointer dcl 54 set ref 106 110* 123 131* cursor_storage_area_ptr parameter pointer dcl 57 set ref 106 110* 123 131* dbi parameter fixed bin(35,0) dcl 58 set ref 106 110* 123 131* i 000100 automatic fixed bin(17,0) dcl 79 set ref 138* 139* index_attr 20(01) based bit(1) level 2 packed packed unaligned dcl 2-46 ref 140 index_id 21 based bit(36) level 2 dcl 2-46 set ref 142* last_s_e_id_num parameter fixed bin(35,0) dcl 59 ref 123 163 last_statistics_update_count 32 based fixed bin(17,0) level 2 dcl 1-119 set ref 161* last_statistics_update_s_e_ref_num 36 based fixed bin(35,0) level 2 dcl 1-119 set ref 163* last_statistics_update_time 34 based fixed bin(71,0) level 2 dcl 1-119 set ref 162* mu_cursor_manager_$get 000010 constant entry external dcl 97 ref 110 131 nkey_attr 24 based fixed bin(17,0) level 2 dcl 1-119 ref 139 null builtin function dcl 93 ref 115 115 156 156 2-65 num_attr 22 based fixed bin(17,0) level 2 dcl 1-119 ref 138 number_of_dups 30 based fixed bin(35,0) level 2 dcl 2-46 set ref 142* rai_ptr 000106 automatic pointer initial dcl 2-65 set ref 139* 140 142 142 2-65* rel_id 20 based bit(36) level 2 dcl 1-119 set ref 110* 131* relmgr_create_cursor parameter entry variable dcl 63 set ref 106 110* 123 131* relmgr_get_count parameter entry variable dcl 65 ref 106 115 123 156 relmgr_get_duplicate_key_count parameter entry variable dcl 67 ref 123 142 relmgr_get_population parameter entry variable dcl 69 ref 123 151 relmgr_open parameter entry variable dcl 71 set ref 106 110* 123 131* rm_attr_info based structure level 1 dcl 2-46 rm_rel_info based structure level 1 dcl 1-119 rmri_ptr 000104 automatic pointer dcl 1-156 set ref 109* 110* 110 130* 131* 131 138 139 151 154 156 161 162 163 tuple_count parameter fixed bin(35,0) dcl 75 set ref 106 115* 118* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. natts_init automatic fixed bin(17,0) dcl 1-157 nkey_attr_init automatic fixed bin(17,0) dcl 1-157 nvar_atts_init automatic fixed bin(17,0) dcl 1-157 NAMES DECLARED BY EXPLICIT CONTEXT. exit 000352 constant label dcl 165 ref 121 135 146 152 157 mu_rel_statistics 000016 constant entry external dcl 6 record_statistics 000150 constant entry external dcl 123 return_tuple_count 000034 constant entry external dcl 106 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 432 444 353 442 Length 650 353 12 170 57 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mu_rel_statistics 109 external procedure is an external procedure. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mu_rel_statistics 000100 i mu_rel_statistics 000102 cursor_ptr mu_rel_statistics 000104 rmri_ptr mu_rel_statistics 000106 rai_ptr mu_rel_statistics THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ent_var call_ext_out return_mac ext_entry clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. mu_cursor_manager_$get NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 2 65 000011 6 000015 106 000024 109 000055 110 000060 115 000112 118 000133 121 000137 123 000140 130 000171 131 000174 135 000226 138 000230 139 000241 140 000252 142 000255 146 000274 149 000276 151 000300 152 000314 154 000316 156 000321 157 000337 161 000341 162 000344 163 000347 165 000352 ----------------------------------------------------------- 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