COMPILATION LISTING OF SEGMENT cm_put_basic_element Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-05-05_1827.56_Fri_mdt Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 8 /* DESCRIPTION: 9* 10* This module allocates space for an element according to the rules 11* of the Basic Element Storage Method, then puts the element at the allocated 12* spot. 13* 14* This parameters of this module are: 15* 16* p_cm_info_ptr - which points to the opening info for the collection and 17* is set be the caller, cm_put; 18* p_basic_control_interval_ptr - which points to a copy of the header of 19* control interval into which the element will be put, 20* if possible, or to an empty buffer the size of bci_header. 21* On output, points to a copy of the header of the control 22* interval in which the element was successfully put; 23* p_element_length - the length of the element in bits; 24* p_element_ptr - points to the element to be put; 25* p_element_id - on input, the p_element_id->element_id.control_interval_id 26* is the first control interval to be tried in attempting 27* to put the element; on output is the element_id of the 28* newly-put element; 29* p_maximum_space_available - on output, is the amount of free space 30* available in the control interval in which the element 31* was put, after the element was put; 32* p_code - is a status code. 33* 34* Currently this module does not support Threaded BESM. 35**/ 36 37 /* HISTORY: 38*Written by Matthew C Pierret. 39*Modified: 40*04/09/82 by Lindsey Spratt: Changed to use the dm_element_id include file. 41* Now uses the "local" element_id_string/element_id consistently. 42*04/13/82 by Matthew Pierret: Fixed to set p_element_id before returning. 43*04/14/82 by Matthew Pierret: Changed to attempt to allocate element in the 44* last used control interval of the collection if not enough room 45* in the given control interval, and to assume the last used control 46* interval if a control interval id of 0 is requested, i.e. 47* element_id.control_interval_id is 0. 48* Also changed declaration of control_interval_id from aligned 49* to unaligned, so that calls to cm$allocate_control_interval would 50* be made by reference. 51* Also changed to use cm_get_datum_slots instead of the now 52* obsolete cm_get_slot_table; 53* Changed to reset bci_header.free_slot_is_present, 54* necessitating searching for a free slot even after the first has 55* been found. 56* Removed use of automatic control_interval_id variable, using 57* element_id.control_interval_id directly instead. 58*04/15/82 by Matthew Pierret: Fixed bug which "forgot" to set collmgr_header_ptr 59* and initialize p_code to 0. 60*04/16/82 by Matthew Pierret: Added following logic: If a new control interval 61* must be allocated, call cm_allocate_element$header recursively, so 62* all of the necessary checks are made. This was the source of a bug 63* which allocated a new control interval but did not get a new 64* basic_control_interval header (bci_header). 65*04/17/82 by Matthew Pierret: Converted the code which deals with actually 66* allocating an element into a separate module called 67* cm_allocate_basic_in_ci. Retained only code which is used in 68* deciding what control interval to attempt to allocate an element in. 69*05/19/82 by Matthew Pierret: Changed use of collmgr_header.collection() to 70* collection_header, and removed collmgr_header_ptr from calling 71* sequence of cm_allocate_basic_in_ci. 72*08/03/82 by Matthew Pierret: Changed calling sequence to take last_control_interval. 73* Removed version check of collection_header since it is never 74* actually used in this module. 75*11/03/82 by Matthew Pierret: Multi-datum support. Opening info. Max space 76* available. 77*02/02/83 by Matthew Pierret: Upgraded to CM_INFO_VERSION_2. 78* Added version check for bci_header. Fixed bug in compaction. 79* This bug occurred when the start_of_used_space was adjacent to the 80* last slot. bci_header.number_of_datums was being incremented 81* before the call to cm_compact, causing the leftmost datum to be 82* overwritten by the new last slot. cm_determine_free_space expects 83* bci_header.number_of_datums to be incremented, so it is incremented 84* before calling cm_determine_free_space and decremented before 85* calling cm_compact. cm_find_free_slot was changed to not update 86* bci_header.number_of_datums, instead returning the new argument 87* number_of_slots_after_allocation. 88*08/04/83 by Matthew Pierret: Changed to use a new cm_determine_free_space 89* entry, $does_new_datum_fit. This entry returns flags indicating 90* whether the datum will fit in the ci and the pool. It also 91* takes into consideration the fact that the datum is new and may 92* need a new datum slot. Previously, cm_allocate_basic_element 93* had to juggle bci_header.number_of_datums around to get correct 94* results. Now, that field value is set only once near the end of 95* this module. 96* Changed cm_find_free_slot to return a flag indicating the value 97* bci_header.free_slot_is_present after allocation. 98*01/04/85 by Matthew Pierret: In response to audit failure: moved position of 99* format and main procedure statements to standard location; fixed 100* DESCRIPTION to refer to cm_put instead of cm_allocate_element; 101* moved declaration of error_table_$unimplemented_version to main 102* procedure; declared all builtins; fixed unnecessary calls-by-value 103* of CHECK_VERSION; removed the extra "the" in a sub_err_ call; 104* renamed module to cm_put_basic_element from 105* cm_allocate_basic_element in accordance with the new 106* collection_manager_ entries naming scheme. 107* Also changed to follow completely the ERROR_RETURN and 108* subroutine variable prefixing mechanisms. 109**/ 110 111 /* format: style2,ind3,ll79,^indnoniterdo,^indprocbody */ 112 113 cm_put_basic_element: 114 proc (p_cm_info_ptr, p_basic_control_interval_header_ptr, p_element_length, 115 p_element_ptr, p_element_id, p_maximum_space_available, p_code); 116 117 118 /* START OF DECLARATIONS */ 119 /* Parameter */ 120 121 dcl p_cm_info_ptr ptr parameter; 122 dcl p_basic_control_interval_header_ptr 123 ptr parameter; 124 dcl p_element_length fixed bin (35) parameter; 125 dcl p_element_ptr ptr parameter; 126 dcl p_element_id bit (36) aligned parameter; 127 dcl p_maximum_space_available 128 fixed bin (35) parameter; 129 dcl p_code fixed bin (35) parameter; 130 131 /* Automatic */ 132 133 dcl 1 my_datum_slot aligned like datum_slot; 134 dcl code fixed bin (35); 135 dcl continuation bit (36) aligned init ("0"b); 136 dcl control_interval_id fixed bin (24) uns init (0); 137 dcl (element_length_in_bits, element_length_in_bytes, total_free_bytes) 138 fixed bin (35) init (0); 139 dcl (number_of_slots_before_allocation, 140 number_of_slots_after_allocation, slot_index_to_use) 141 fixed bin (17) init (0); 142 dcl (is_continued, fits_in_ci, fits_in_pool, 143 has_free_slot_after_allocation) 144 bit (1) aligned init ("0"b); 145 146 /* Based */ 147 /* Builtin */ 148 149 dcl (ceil, divide, addr, null, unspec) 150 builtin; 151 152 /* Controlled */ 153 /* Constant */ 154 155 dcl myname init ("cm_put_basic_element") 156 char (32) varying int static 157 options (constant); 158 dcl BITS_PER_BYTE init (9) fixed bin internal static 159 options (constant); 160 dcl IS_NOT_A_CONTINUATION init ("0"b) bit (1) aligned internal 161 static options (constant); 162 163 /* Entry */ 164 165 dcl sub_err_ entry options (variable); 166 167 /* External */ 168 169 dcl dm_error_$programming_error 170 ext fixed bin (35); 171 dcl error_table_$unimplemented_version 172 ext fixed bin (35); 173 174 /* END OF DECLARATIONS */ 175 176 p_code, code = 0; 177 178 cm_info_ptr = p_cm_info_ptr; 179 call CHECK_VERSION (cm_info.version, CM_INFO_VERSION_2, "cm_info"); 180 bci_header_ptr = p_basic_control_interval_header_ptr; 181 datum_slot_ptr = addr (my_datum_slot); 182 element_id_string = p_element_id; 183 element_length_in_bits = p_element_length; 184 185 /**** Allocate the tail of the element if it is larger than a single datum. */ 186 187 if element_length_in_bits 188 > MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS - BITS_PER_BYTE 189 then 190 do; 191 call cm_put_overlength_tail (cm_info_ptr, p_element_ptr, 192 element_length_in_bits, continuation, code); 193 if code ^= 0 194 then call ERROR_RETURN (code); 195 196 is_continued = "1"b; 197 end; 198 199 element_length_in_bytes = 200 ceil (divide (element_length_in_bits, BITS_PER_BYTE, 35, 18)); 201 202 /**** Find a control interval in which to allocate the datum/element. */ 203 204 call cm_find_ci_to_alloc_datum (cm_info_ptr, element_length_in_bytes, 205 (element_id.control_interval_id), is_continued, "0"b, bci_header_ptr, 206 control_interval_id, code); 207 if code ^= 0 208 then call ERROR_RETURN (code); 209 else call CHECK_BCI_VERSION (bci_header.layout_type); 210 211 /**** Find a slot in the slot table available for use. */ 212 213 call cm_find_free_slot (cm_info.file_oid, control_interval_id, 214 bci_header_ptr, slot_index_to_use, number_of_slots_after_allocation, 215 has_free_slot_after_allocation, code); 216 if code ^= 0 217 then call ERROR_RETURN (code); 218 219 element_id.control_interval_id = control_interval_id; 220 element_id.index = slot_index_to_use; 221 222 /**** Verify that the datum actually fits. */ 223 224 call cm_determine_free_space$does_new_datum_fit (bci_header_ptr, 225 element_length_in_bytes, (slot_index_to_use), is_continued, 226 IS_NOT_A_CONTINUATION, fits_in_ci, fits_in_pool, total_free_bytes); 227 228 if ^fits_in_ci 229 then call sub_err_ (dm_error_$programming_error, myname, 230 ACTION_CANT_RESTART, null, 0, 231 "^/Control interval ^d was selected in which to allocate a datum, but^/^10xthere is not enough free space in which to fit the datum.^/^10xThe datum is ^d bytes long;there are ^d free." 232 , control_interval_id, element_length_in_bytes, total_free_bytes); 233 234 unspec (datum_slot) = ""b; 235 datum_slot.flags.is_continued = is_continued; 236 237 if fits_in_pool 238 then bci_header.number_of_datums = number_of_slots_after_allocation; 239 else 240 do; 241 call cm_compact (cm_info.file_oid, number_of_slots_after_allocation, 242 element_id_string, bci_header_ptr, code); /* cm_compact updates bci_header.number_of_datums */ 243 if code ^= 0 244 then call ERROR_RETURN (code); 245 end; 246 247 bci_header.flags.free_slot_is_present = has_free_slot_after_allocation; 248 249 /**** Put the datum in the free pool. */ 250 251 if is_continued 252 then call cm_put_datum_in_pool$continued (cm_info.file_oid, 253 element_id_string, p_element_ptr, element_length_in_bits, 254 datum_slot_ptr, bci_header_ptr, p_element_length, continuation, 255 code); 256 else call cm_put_datum_in_pool (cm_info.file_oid, element_id_string, 257 p_element_ptr, element_length_in_bits, datum_slot_ptr, 258 bci_header_ptr, code); 259 if code ^= 0 260 then call ERROR_RETURN (code); 261 262 263 p_element_id = element_id_string; 264 265 call FINISH (); 266 MAIN_RETURN: 267 return; 268 269 CHECK_VERSION: 270 proc (cv_p_given_version, cv_p_correct_version, cv_p_structure_name); 271 272 dcl cv_p_structure_name char (*); 273 dcl cv_p_given_version char (8) aligned; 274 dcl cv_p_correct_version char (8) aligned; 275 276 if cv_p_given_version ^= cv_p_correct_version 277 then call sub_err_ (error_table_$unimplemented_version, myname, 278 ACTION_CANT_RESTART, null, 0, 279 "^/Expected version ""^8a"" of ^a structure; received ""^8a"".", 280 cv_p_correct_version, cv_p_structure_name, cv_p_given_version); 281 else return; 282 283 end CHECK_VERSION; 284 285 CHECK_BCI_VERSION: 286 proc (cbv_p_given_version); 287 dcl cbv_p_given_version char (4) aligned; 288 289 if cbv_p_given_version ^= BASIC_CI_LAYOUT_1 290 then call sub_err_ (error_table_$unimplemented_version, myname, 291 ACTION_CANT_RESTART, null, 0, 292 "^/Expected version ""^4a"" of bci_header structure; received ""^4a""." 293 , BASIC_CI_LAYOUT_1, cbv_p_given_version); 294 else return; 295 296 end CHECK_BCI_VERSION; 297 298 ERROR_RETURN: 299 proc (er_p_code); 300 301 dcl er_p_code fixed bin (35); 302 303 p_code = er_p_code; 304 call FINISH (); 305 goto MAIN_RETURN; 306 307 end ERROR_RETURN; 308 309 FINISH: 310 proc (); 311 312 if p_code = 0 313 then p_maximum_space_available = total_free_bytes * BITS_PER_BYTE; 314 315 end FINISH; 316 1 1 /* BEGIN INCLUDE FILE dm_element_id.incl.pl1 */ 1 2 1 3 /* DESCRIPTION: 1 4* 1 5* Contains the declaration of an element identifier. Element 1 6* identifiers consist of two parts, the id (number) of the control interval 1 7* in which the element resides, and the index into the slot table of 1 8* the element in the control interval. The declaration of the element_id 1 9* structure reflects this division of the element identifier. The structure 1 10* is based on the automatic bit string element_id_string because programs 1 11* generally pass bit strings (element_id_string) to each other, then 1 12* interpret the bit string by overlaying the element_id structure ony if 1 13* it is necessary to access the parts of the id. Basing element_id on 1 14* addr(element_id_string) instead of on a pointer removes the necessity 1 15* for always setting that pointer explicitly and guarantees that changes 1 16* made to the string or structure do not get inconsistent. 1 17* 1 18* Changes made to element_id must also be made to datum_id, declared in 1 19* dm_cm_datum.incl.pl1. 1 20**/ 1 21 1 22 /* HISTORY: 1 23*Written by Matthew Pierret, 04/01/82. 1 24*Modified: 1 25*09/24/84 by Matthew Pierret: Added DESCRIPTION section. 1 26**/ 1 27 1 28 /* format: style2,ind3,ll79 */ 1 29 1 30 dcl element_id_string bit (36) aligned; 1 31 1 32 dcl 1 element_id aligned based (addr (element_id_string)), 1 33 2 control_interval_id 1 34 fixed bin (24) unal unsigned, 1 35 2 index fixed bin (12) unal unsigned; 1 36 1 37 1 38 /* END INCLUDE FILE dm_element_id.incl.pl1 */ 317 318 2 1 /* BEGIN INCLUDE FILE - dm_cm_info.incl.pl1 */ 2 2 2 3 /* DESCRIPTION: 2 4* The cm_info structure is used to hold per-process opening information 2 5* about a collection. It is generally allocated in the process' DM free 2 6* area, as returned by the function get_dm_free_area_. The opening_manager_ 2 7* is used to provide access the cm_info structure, keeping it in a hash 2 8* table keyed on file opening id and collection id combined. 2 9* Currently cm_info is never freed until the process terminates. Each 2 10* time a new transaction is started, detected when the current transaction 2 11* id of a process differs from cm_info.current_transaction_id, the information 2 12* in cm_info is refreshed. Storage record information is only refreshed on 2 13* demand, as most modules do not need the information in the storage record. 2 14* Instead, cm_info.storage_record_ptr is set to null (), but 2 15* cm_info.storage_record_buffer_ptr remains set to the previous value of 2 16* cm_info.storage_record_ptr. When a refreshed copy of the storage record is 2 17* requested, it is placed at the location pointed to by 2 18* cm_info.storage_record_buffer_ptr, saving the expense of re-allocation. 2 19**/ 2 20 2 21 /* HISTORY: 2 22*Written by Matthew Pierret, 10/27/82. 2 23*Modified: 2 24*01/25/83 by Matthew Pierret: Changed to version 2. Added 2 25* storage_record_buffer_ptr. This points to the storage_record. 2 26* When cm_info is refreshed, storage_record_ptr is set to null, 2 27* but storage_record_buffer_ptr continues to point at where the 2 28* storage_record was. When the storge_record is again requested, 2 29* it is put back in the same place rather than allocating a new 2 30* storage_record. 2 31*09/24/84 by Matthew Pierret: Re-wrote DESCRIPTION section. Removed the 2 32* init clause from the version component. 2 33**/ 2 34 2 35 /* format: style2,ind3,ll79 */ 2 36 2 37 dcl 1 cm_info aligned based (cm_info_ptr), 2 38 2 version char (8), 2 39 2 current_txn_id bit (36) aligned init ("0"b), 2 40 2 file_oid bit (36) aligned init ("0"b), 2 41 2 collection_id bit (36) aligned init ("0"b), 2 42 2 header_ptr ptr init (null), 2 43 2 storage_record_ptr ptr init (null), 2 44 2 storage_record_buffer_ptr 2 45 ptr init (null); 2 46 2 47 dcl cm_info_ptr ptr init (null); 2 48 dcl CM_INFO_VERSION_2 init ("cm_info2") char (8) aligned 2 49 internal static options (constant); 2 50 2 51 /* END INCLUDE FILE - dm_cm_info.incl.pl1 */ 319 320 3 1 /* BEGIN INCLUDE FILE dm_cm_basic_ci.incl.pl1 */ 3 2 3 3 /* DESCRIPTION: 3 4* 3 5* The collection_manager_ manages the structure of the addressable 3 6* portion of a control interval. The addressable portion is that portion of 3 7* a control interval which the file_manager_ will allow the 3 8* collection_manager_ to address. In this description control interval will 3 9* be used to mean the addressable portion of a control interval. 3 10* 3 11* A control interval is divided into four parts: the header, the datum 3 12* position table (also known as the slot table or slots), un-used space and 3 13* used space. The beginning of the header is at offset 0, and the end of the 3 14* used space is at the end of the control interval (curently offset 4072). 3 15* Pictoriarly, a control interval is structured as follows: 3 16* 3 17* ---------------------------------------------------------------------- 3 18* | || | | | | | || || | / / | |/| | | 3 19* | Header || | slot | || un-used space || |/ / /| |/| | | 3 20* | || | table | || || | / / | |/| | | 3 21* | || | | | | | || || |/ / /| |/| | | 3 22* ---------------------------------------------------------------------- 3 23* ^ ^ ^ ^ ^ ^ ^ 3 24* | | | | | | | 3 25* | |...........|.......|...| 3 26* start of used space| | | | 3 27* | | each| 3 28* scattered free space| is a used 3 29* datum 3 30* 3 31* The basic_control_interval structure describes the header 3 32* (basic_control_interval.header, bci_header) and the slots 3 33* (basic_control_interval.datum_position_table, datum_slot for one only). 3 34* Each datum_slot contains the offset (in bytes) and the length (in bits) of 3 35* a datum in the used space. If the offset is equal to FREE_SLOT (declared 3 36* in dm_cm_basic_ci_const.incl.pl1), the slot is un-used. The slot also 3 37* contains flags describing the type of datum (see dm_cm_datum.incl.pl1). 3 38**/ 3 39 3 40 /* HISTORY: 3 41*Written by Matthew Pierret, 02/07/82. 3 42*Modified: 3 43*03/25/82 by Matthew Pierret: Fixed alignment differences basic_control_interval 3 44* and its sub-structures. 3 45*06/14/82 by Matthew Pierret: Removed common header and buffers. Changed 3 46* basic_ci_header to bci_header. Added previous_control_interval. 3 47*07/12/82 by Matthew Pierret: Changed collection_id to be bit (36) aligned. 3 48*10/29/82 by Matthew Pierret: Added flags to datum slots. 3 49*11/10/82 by Matthew Pierret: Removed continued_datum_is_present flag, as it 3 50* is not used. 3 51*03/28/84 by Matthew Pierret: Added the constants BCI_HEADER_LENGTH_IN_BYTES 3 52* and DATUM_POSITION_TABLE_OFFSET_IN_BYTES. 3 53**/ 3 54 3 55 /* format: style2 */ 3 56 dcl 1 basic_control_interval 3 57 aligned based (basic_control_interval_ptr), 3 58 2 header like bci_header, 3 59 2 datum_position_table 3 60 (0 refer (basic_control_interval.number_of_datums)) like datum_slot; 3 61 3 62 3 63 dcl 1 bci_header aligned based (bci_header_ptr), 3 64 2 layout_type char (4) aligned, 3 65 2 collection_id bit (36) aligned, 3 66 2 next_control_interval 3 67 fixed bin (24) uns unal, 3 68 2 previous_control_interval 3 69 fixed bin (24) uns unal, 3 70 2 flags unal, 3 71 3 continuation_datum_is_present 3 72 bit (1) unal, 3 73 3 free_slot_is_present 3 74 bit (1) unal, 3 75 3 must_be_zero bit (4) unal, /* reserved */ 3 76 2 scattered_free_space 3 77 fixed bin (17) unal, 3 78 2 start_of_used_space 3 79 fixed bin (17) unal, 3 80 2 number_of_datums fixed bin (17) unal; 3 81 3 82 dcl 1 datum_slot aligned based (datum_slot_ptr), 3 83 2 flags unal, 3 84 3 special_format_datum 3 85 bit (1) unal, /* reserved */ 3 86 3 is_continued bit (1) unal, 3 87 3 is_continuation bit (1) unal, 3 88 3 mbz bit (1) unal, /* reserved */ 3 89 2 offset_in_bytes fixed bin (15) uns unal, 3 90 2 length_in_bits fixed bin (17) uns unal; 3 91 3 92 dcl basic_control_interval_ptr 3 93 ptr; 3 94 dcl bci_header_ptr ptr; 3 95 dcl datum_slot_ptr ptr; 3 96 3 97 dcl BASIC_CI_LAYOUT_1 char (4) aligned init ("bci1") internal static options (constant); 3 98 3 99 /* END INCLUDE FILE dm_cm_basic_ci.incl.pl1 */ 321 322 4 1 /* BEGIN INCLUDE FILE dm_cm_datum_constants.incl.pl1 */ 4 2 4 3 /* DESCRIPTION: 4 4* Contains constants describing the extents of datums and datum 4 5* headers. The datum headers are described in dm_cm_datum.incl.pl1. 4 6* MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BYTES is the byte length of the largest 4 7* datum that can be stored in a control interval, allowing for the largest 4 8* possibledatum header. MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS is the same 4 9* in bits instead of bytes. MINIMUM_MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS 4 10* is the smallest length in bits which requires 4 11* MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BYTES bytes to store. 4 12**/ 4 13 4 14 /* 4 15*HISTORY: 4 16*Written by Matthew Pierret, 02/07/82. 4 17*Modified: 4 18*10/29/82 by Matthew Pierret: Removed DATUM_HEADER*. 4 19*11/02/82 by Matthew Pierret: Added maximum datum contents lengths. 4 20*12/01/82 by Lindsey Spratt: Corrected values for datum header lengths. 4 21*09/18/84 by Matthew Pierret: Corrected values for maximum lengths. Added 4 22* MINIMUM_MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS. Added 4 23* DESCRIPTION section. 4 24**/ 4 25 4 26 /* format: style2,ind3,ll79 */ 4 27 dcl CD_DATUM_HEADER_LENGTH_IN_BYTES 4 28 fixed bin init (8) internal static 4 29 options (constant); 4 30 4 31 dcl CD_DATUM_HEADER_LENGTH_IN_BITS 4 32 fixed bin init (72) internal static 4 33 options (constant); 4 34 4 35 dcl CDCN_DATUM_HEADER_LENGTH_IN_BYTES 4 36 init (4) fixed bin int static 4 37 options (constant); 4 38 4 39 dcl CDCN_DATUM_HEADER_LENGTH_IN_BITS 4 40 init (36) fixed bin int static 4 41 options (constant); 4 42 4 43 dcl MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS 4 44 init (36360) fixed bin (35) internal 4 45 static options (constant); 4 46 4 47 dcl MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BYTES 4 48 init (4040) fixed bin (35) internal 4 49 static options (constant); 4 50 4 51 dcl MINIMUM_MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS 4 52 init (36352) fixed bin (35) internal 4 53 static options (constant); 4 54 4 55 /* END INCLUDE FILE dm_cm_datum.incl.pl1 */ 323 324 5 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 5 2 /* format: style3 */ 5 3 5 4 /* These constants are to be used for the flags argument of sub_err_ */ 5 5 /* They are just "string (condition_info_header.action_flags)" */ 5 6 5 7 declare ( 5 8 ACTION_CAN_RESTART init (""b), 5 9 ACTION_CANT_RESTART init ("1"b), 5 10 ACTION_DEFAULT_RESTART 5 11 init ("01"b), 5 12 ACTION_QUIET_RESTART 5 13 init ("001"b), 5 14 ACTION_SUPPORT_SIGNAL 5 15 init ("0001"b) 5 16 ) bit (36) aligned internal static options (constant); 5 17 5 18 /* End include file */ 325 326 6 1 /* BEGIN INCLUDE FILE dm_cm_entry_dcls.incl.pl1 */ 6 2 6 3 /* DESCRIPTION: 6 4* 6 5* Contains entry declarations of internally available collection_manager_ 6 6* entries. Entries which are only available via the collection_manager_ 6 7* transfer vector are not included here, but are declared instead in 6 8* dm_collmgr_entry_dcls.incl.pl1. 6 9**/ 6 10 6 11 /* HISTORY: 6 12*Written by Mathew Pierret, 04/01/82. 6 13*Modified: 6 14*09/21/82 by Lindsey Spratt: Added the cm_compact$replacement entry. 6 15*10/29/82 by Matthew Pierret: Added cm_find_free_slot, cm_determine_free_space, 6 16* cm_find_ci_to_alloc_datum, cm_recursive_put. 6 17* Added cm_get_element$info*, $header*. The former is used when 6 18* the caller has a cm_info structure already; the latter is used to 6 19* get collection headers. 6 20* Added cm_opening_info$get. Removed cm_add_ci_(part thread). 6 21* Added cm_allocate_element$info. 6 22*11/09/82 by Matthew Pierret: Added argument to cm_allocate_ordered_element 6 23* calling sequence for returning free space. 6 24* Added cm_free_cn_datum("" $header). 6 25*01/07/83 by Matthew Pierret: Added: 6 26* cm_allocate_element$buffered("" _info); 6 27* cm_put_element$buffered("" _info); 6 28* cm_put_datum_in_place$buffered("" _continued); 6 29* cm_put_datum_in_pool$buffered("" _continued); 6 30* cm_compact$buffered. 6 31*01/26/83 by Matthew Pierret: Replaced cm_get_header_and_slot with 6 32* cm_get_bci_header$slot and added cm_get_bci_header$slot_exclusive. 6 33* Added cm_opening_info$get_storage_record. 6 34* Added a bit(36)aligned argument to cm_recursive_put to hold the 6 35* id of the previous datum. 6 36*02/02/83 by Matthew Pierret: Added fixed bin (17) argument to cm_find_free_slot 6 37* which is for the number of slots after allocation. 6 38*02/07/83 by Matthew Pierret: Added cm_get_id$(id info info_return_slot 6 39* header header_return_slot). 6 40* Added cm_get_element_portion$(exclusive info info_exclusive). 6 41* Added cm_get_element$bypass_info. 6 42*03/25/83 by Matthew Pierret: Added cm_free_element$info and 6 43* cm_free_opening_info. 6 44*04/29/83 by Matthew Pierret: Added cm_put_element$unprotected_info 6 45*08/04/83 by Matthew Pierret: Added the entries $does_new_datum_fit and 6 46* $does_replacement_fit to cm_determine_free_space. These entries 6 47* return flags indicating if a datum fits in the ci and the pool. 6 48* Added a bit(1)aligned parameter to cm_find_free_slot in which is 6 49* returned the new value of bci_header.free_slot_is_present. 6 50*02/07/84 by Matthew Pierret: Added cm_get_id$ptr. Removed all cm_get_id 6 51* modules except cm_get_id$id. Removed all cm_get_element$info* 6 52* entries. Changed cm_get_element_$bypass_info to have the same 6 53* calling sequence as other cm_get_element entries. 6 54*06/12/84 by Matthew Pierret: Changed cm_put_element to cm_modify 6 55* and cm_allocate_element to cm_put. 6 56* Switched the element_length/element_ptr parameter pair to be 6 57* element_ptr/element_length in cm_modify and cm_put. 6 58*07/24/84 by Matthew Pierret: Added cm_free_ci$raw_return_prev_next. 6 59*09/24/84 by Matthew Pierret: Added trace_thread_modifications_(on off) 6 60* entries to cm_free_ci and cm_replace_buffered_ci, 6 61* cm_allocate_ci$info_header, cm_opening_info$opening_table_ptr. 6 62* Removed cm_find_free_space. Commented out un-used entries. 6 63* Re-named allocate entries to put entries, except for allocate_ci. 6 64* Re-named free element and free datum entries to use delete instead 6 65* of free, and cm_recursive_put to cm_recursive_modify. 6 66* Removed cm_get_element$bypass_info. 6 67*02/27/85 by Matthew C. Pierret: Re-added cm_compact$buffered_replacement now 6 68* that cm_modify$buffered uses it. 6 69*03/07/85 by R. Michael Tague: Added cm_postcommit_increment. 6 70**/ 6 71 6 72 /* format: style2,ind3 */ 6 73 6 74 6 75 dcl cm_allocate_ci entry (bit (36) aligned, bit (36) aligned, fixed bin (24) unsigned, fixed bin (35)); 6 76 dcl cm_allocate_ci$info entry (ptr, fixed bin (24) unsigned, fixed bin (35)); 6 77 dcl cm_allocate_ci$info_header 6 78 entry (ptr, fixed bin (24) unsigned, ptr, fixed bin (35)); 6 79 6 80 6 81 dcl cm_compact entry (bit (36) aligned, fixed bin (17), bit (36) aligned, ptr, fixed bin (35)); 6 82 dcl cm_compact$buffered entry (ptr, fixed bin (17), bit (36) aligned, fixed bin (35)); 6 83 dcl cm_compact$replacement entry (bit (36) aligned, fixed bin (17), bit (36) aligned, ptr, fixed bin (35)); 6 84 dcl cm_compact$buffered_replacement 6 85 entry (ptr, fixed bin (17), bit (36) aligned, fixed bin (35)); 6 86 6 87 dcl cm_delete_cn_datum entry (ptr, bit (1) aligned, bit (36) aligned, fixed bin (35)); 6 88 6 89 dcl cm_delete_cn_datum$header 6 90 entry (ptr, ptr, ptr, bit (1) aligned, bit (36) aligned, fixed bin (35)); 6 91 6 92 dcl cm_delete entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, bit (1) aligned, 6 93 fixed bin (35)); 6 94 dcl cm_delete$info entry (ptr, bit (36) aligned, bit (1) aligned, fixed bin (35)); 6 95 6 96 dcl cm_determine_free_space$all 6 97 entry (ptr, fixed bin (35), fixed bin (35), fixed bin (35)); 6 98 dcl cm_determine_free_space$effective 6 99 entry (ptr, fixed bin (35), bit (1) aligned, bit (1) aligned, fixed bin (35), 6 100 fixed bin (35)); 6 101 dcl cm_determine_free_space$does_new_datum_fit 6 102 entry (ptr, fixed bin (35), fixed bin (35), bit (1) aligned, bit (1) aligned, 6 103 bit (1) aligned, bit (1) aligned, fixed bin (35)); 6 104 6 105 /**** Not yet used ********************************************************* 6 106* dcl cm_determine_free_space$does_replacement_fit 6 107* entry (ptr, fixed bin (35), fixed bin (35), fixed bin (35), bit (1) aligned, 6 108* bit (1) aligned, bit (1) aligned, bit (1) aligned, fixed bin (35)); 6 109*************************************************************************** */ 6 110 6 111 dcl cm_find_ci_to_alloc_datum 6 112 entry (ptr, fixed bin (35), fixed bin (24) uns, bit (1) aligned, bit (1) aligned, ptr, 6 113 fixed bin (24) uns, fixed bin (35)); 6 114 6 115 dcl cm_find_free_slot entry (bit (36) aligned, fixed bin (24) uns, ptr, fixed bin (17), fixed bin (17), 6 116 bit (1) aligned, fixed bin (35)); 6 117 6 118 dcl cm_free_ci$info entry (ptr, fixed bin (24) uns, bit (1) aligned, fixed bin (35)); 6 119 dcl cm_free_ci$raw_return_prev_next 6 120 entry (ptr, fixed bin (24) uns, bit (1) aligned, fixed bin (24) uns, 6 121 fixed bin (24) uns, fixed bin (35)); 6 122 dcl cm_free_ci$trace_thread_modifications_on 6 123 entry (); 6 124 dcl cm_free_ci$trace_thread_modifications_off 6 125 entry (); 6 126 6 127 6 128 dcl cm_free_opening_info entry (bit (36) aligned, bit (36) aligned, fixed bin (35)); 6 129 6 130 dcl cm_get_bci_header entry (bit (36) aligned, uns fixed bin (24), ptr, fixed bin (35)); 6 131 dcl cm_get_bci_header$exclusive 6 132 entry (bit (36) aligned, uns fixed bin (24), ptr, fixed bin (35)); 6 133 dcl cm_get_bci_header$slot entry (bit (36) aligned, ptr, ptr, bit (36) aligned, fixed bin (35)); 6 134 6 135 /**** Not yet used ******************************************************** 6 136* dcl cm_get_bci_header$slot_exclusive 6 137* entry (bit (36) aligned, ptr, ptr, bit (36) aligned, fixed bin (35)); 6 138*************************************************************************** */ 6 139 6 140 dcl cm_get_element entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin (17), ptr, 6 141 fixed bin (35), ptr, bit (1) aligned, ptr, fixed bin (35), fixed bin (35)); 6 142 dcl cm_get_element$exclusive 6 143 entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin, ptr, 6 144 fixed bin (35), ptr, bit (1) aligned, ptr, fixed bin (35), fixed bin (35)); 6 145 6 146 dcl cm_get_element_portion entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin (17), ptr, 6 147 fixed bin (35), ptr, fixed bin (35), fixed bin (35), bit (1) aligned, ptr, 6 148 fixed bin (35), fixed bin (35)); 6 149 6 150 /**** Not yet used ******************************************************** 6 151* dcl cm_get_element_portion$exclusive 6 152* entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin (17), ptr, 6 153* fixed bin (35), ptr, fixed bin (35), fixed bin (35), bit (1) aligned, ptr, 6 154* fixed bin (35), fixed bin (35)); 6 155*************************************************************************** */ 6 156 6 157 dcl cm_get_id$id entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin, 6 158 bit (1) aligned, bit (36) aligned, fixed bin (35)); 6 159 dcl cm_get_id$ptr entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, fixed bin, 6 160 bit (1) aligned, ptr, ptr, bit (36) aligned, fixed bin (35)); 6 161 6 162 dcl cm_modify entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 163 fixed bin (35), fixed bin (35)); 6 164 dcl cm_modify$buffered entry (ptr, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 165 fixed bin (35), fixed bin (35)); 6 166 6 167 /******* Not yet used ***************************************************** 6 168* dcl cm_modify$buffered_info 6 169* entry (ptr, ptr, ptr, fixed bin (35), bit (36) aligned, fixed bin (35), 6 170* fixed bin (35)); 6 171*****************************************************************************/ 6 172 6 173 dcl cm_modify$info entry (ptr, ptr, fixed bin (35), bit (36) aligned, fixed bin (35), fixed bin (35)); 6 174 dcl cm_modify$unprotected_info 6 175 entry (ptr, ptr, fixed bin (35), bit (36) aligned, fixed bin (35), fixed bin (35)); 6 176 6 177 6 178 /******* Not yet used ***************************************************** 6 179* dcl cm_modify_portion entry (bit (36) aligned, bit (36) aligned, fixed bin (35), fixed bin (35), 6 180* fixed bin (35), ptr, bit (36) aligned, fixed bin (35), fixed bin (35)); 6 181*****************************************************************************/ 6 182 6 183 6 184 dcl cm_opening_info$get entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35)); 6 185 dcl cm_opening_info$get_storage_record 6 186 entry (ptr, fixed bin (35)); 6 187 dcl cm_opening_info$full_get 6 188 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35)); 6 189 dcl cm_opening_info$opening_table_ptr 6 190 entry () returns (ptr); 6 191 6 192 dcl cm_postcommit_increment 6 193 entry (bit (36) aligned, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35)); 6 194 6 195 dcl cm_put entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 196 fixed bin (35), fixed bin (35)); 6 197 dcl cm_put$buffered entry (ptr, bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), bit (36) aligned, 6 198 fixed bin (35), fixed bin (35)); 6 199 6 200 /******* Not yet used ***************************************************** 6 201* dcl cm_put$buffered_info 6 202* entry (ptr, ptr, ptr, fixed bin (35), bit (36) aligned, fixed bin (35), 6 203* fixed bin (35)); 6 204*****************************************************************************/ 6 205 6 206 dcl cm_put$info entry (ptr, ptr, fixed bin (35), bit (36) aligned, fixed bin (35), fixed bin (35)); 6 207 6 208 dcl cm_put_basic_element entry (ptr, ptr, fixed bin (35), ptr, bit (36) aligned, fixed bin (35), 6 209 fixed bin (35)); 6 210 6 211 dcl cm_put_cn_datum entry (ptr, ptr, fixed bin (35), bit (36) aligned, bit (36) aligned, fixed bin (35)); 6 212 6 213 dcl cm_put_datum_in_place entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), ptr, ptr, 6 214 fixed bin (35)); 6 215 dcl cm_put_datum_in_place$buffered 6 216 entry (ptr, ptr, fixed bin (35), ptr, fixed bin (35)); 6 217 dcl cm_put_datum_in_place$buffered_continued 6 218 entry (ptr, ptr, fixed bin (35), ptr, fixed bin (35), bit (36) aligned, 6 219 fixed bin (35)); 6 220 dcl cm_put_datum_in_place$continued 6 221 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), ptr, ptr, 6 222 fixed bin (35), bit (36) aligned, fixed bin (35)); 6 223 6 224 dcl cm_put_datum_in_pool entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), ptr, ptr, 6 225 fixed bin (35)); 6 226 dcl cm_put_datum_in_pool$buffered 6 227 entry (ptr, ptr, fixed bin (35), ptr, fixed bin (35)); 6 228 dcl cm_put_datum_in_pool$buffered_continued 6 229 entry (ptr, ptr, fixed bin (35), ptr, fixed bin (35), bit (36) aligned, 6 230 fixed bin (35)); 6 231 dcl cm_put_datum_in_pool$continued 6 232 entry (bit (36) aligned, bit (36) aligned, ptr, fixed bin (35), ptr, ptr, 6 233 fixed bin (35), bit (36) aligned, fixed bin (35)); 6 234 6 235 dcl cm_put_ordered_element entry (ptr, ptr, fixed bin (35), ptr, bit (36) aligned, fixed bin (35), 6 236 fixed bin (35)); 6 237 dcl cm_put_ordered_element$buffered 6 238 entry (ptr, ptr, fixed bin (35), ptr, bit (36) aligned, fixed bin (35), 6 239 fixed bin (35)); 6 240 6 241 dcl cm_put_overlength_tail entry (ptr, ptr, fixed bin (35), bit (36) aligned, fixed bin (35)); 6 242 6 243 dcl cm_recursive_modify entry (ptr, bit (36) aligned, ptr, fixed bin (35), fixed bin (35), bit (36) aligned, 6 244 fixed bin (35)); 6 245 6 246 6 247 dcl cm_replace_buffered_ci$trace_thread_modifications_on 6 248 entry (); 6 249 dcl cm_replace_buffered_ci$trace_thread_modifications_off 6 250 entry (); 6 251 6 252 /* END INCLUDE FILE dm_cm_entry_dcls.incl.pl1 */ 327 328 329 end cm_put_basic_element; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/05/00 1827.5 cm_put_basic_element.pl1 >udd>sm>ds>w>ml>cm_put_basic_element.pl1 317 1 01/07/85 0958.5 dm_element_id.incl.pl1 >ldd>incl>dm_element_id.incl.pl1 319 2 01/07/85 0958.4 dm_cm_info.incl.pl1 >ldd>incl>dm_cm_info.incl.pl1 321 3 01/07/85 0958.0 dm_cm_basic_ci.incl.pl1 >ldd>incl>dm_cm_basic_ci.incl.pl1 323 4 01/07/85 0958.2 dm_cm_datum_constants.incl.pl1 >ldd>incl>dm_cm_datum_constants.incl.pl1 325 5 04/16/82 1058.1 sub_err_flags.incl.pl1 >ldd>incl>sub_err_flags.incl.pl1 327 6 04/05/85 1024.3 dm_cm_entry_dcls.incl.pl1 >ldd>incl>dm_cm_entry_dcls.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. ACTION_CANT_RESTART 000025 constant bit(36) initial dcl 5-7 set ref 228* 276* 289* BASIC_CI_LAYOUT_1 000000 constant char(4) initial dcl 3-97 set ref 289 289* BITS_PER_BYTE 001102 constant fixed bin(17,0) initial dcl 158 ref 187 199 312 CM_INFO_VERSION_2 000002 constant char(8) initial dcl 2-48 set ref 179* IS_NOT_A_CONTINUATION 000030 constant bit(1) initial dcl 160 set ref 224* MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS constant fixed bin(35,0) initial dcl 4-43 ref 187 addr builtin function dcl 149 ref 181 204 219 220 bci_header based structure level 1 dcl 3-63 bci_header_ptr 000122 automatic pointer dcl 3-94 set ref 180* 204* 209 213* 224* 237 241* 247 251* 256* cbv_p_given_version parameter char(4) dcl 287 set ref 285 289 289* ceil builtin function dcl 149 ref 199 cm_compact 000016 constant entry external dcl 6-81 ref 241 cm_determine_free_space$does_new_datum_fit 000020 constant entry external dcl 6-101 ref 224 cm_find_ci_to_alloc_datum 000022 constant entry external dcl 6-111 ref 204 cm_find_free_slot 000024 constant entry external dcl 6-115 ref 213 cm_info based structure level 1 dcl 2-37 cm_info_ptr 000120 automatic pointer initial dcl 2-47 set ref 178* 179 191* 204* 213 241 251 256 2-47* cm_put_datum_in_pool 000026 constant entry external dcl 6-224 ref 256 cm_put_datum_in_pool$continued 000030 constant entry external dcl 6-231 ref 251 cm_put_overlength_tail 000032 constant entry external dcl 6-241 ref 191 code 000101 automatic fixed bin(35,0) dcl 134 set ref 176* 191* 193 193* 204* 207 207* 213* 216 216* 241* 243 243* 251* 256* 259 259* continuation 000102 automatic bit(36) initial dcl 135 set ref 135* 191* 251* control_interval_id based fixed bin(24,0) level 2 in structure "element_id" packed packed unsigned unaligned dcl 1-32 in procedure "cm_put_basic_element" set ref 204 219* control_interval_id 000103 automatic fixed bin(24,0) initial unsigned dcl 136 in procedure "cm_put_basic_element" set ref 136* 204* 213* 219 228* cv_p_correct_version parameter char(8) dcl 274 set ref 269 276 276* cv_p_given_version parameter char(8) dcl 273 set ref 269 276 276* cv_p_structure_name parameter char packed unaligned dcl 272 set ref 269 276* datum_slot based structure level 1 dcl 3-82 set ref 234* datum_slot_ptr 000124 automatic pointer dcl 3-95 set ref 181* 234 235 251* 256* divide builtin function dcl 149 ref 199 dm_error_$programming_error 000012 external static fixed bin(35,0) dcl 169 set ref 228* element_id based structure level 1 dcl 1-32 element_id_string 000116 automatic bit(36) dcl 1-30 set ref 182* 204 219 220 241* 251* 256* 263 element_length_in_bits 000104 automatic fixed bin(35,0) initial dcl 137 set ref 137* 183* 187 191* 199 251* 256* element_length_in_bytes 000105 automatic fixed bin(35,0) initial dcl 137 set ref 137* 199* 204* 224* 228* er_p_code parameter fixed bin(35,0) dcl 301 ref 298 303 error_table_$unimplemented_version 000014 external static fixed bin(35,0) dcl 171 set ref 276* 289* file_oid 3 based bit(36) initial level 2 dcl 2-37 set ref 213* 241* 251* 256* fits_in_ci 000113 automatic bit(1) initial dcl 142 set ref 142* 224* 228 fits_in_pool 000114 automatic bit(1) initial dcl 142 set ref 142* 224* 237 flags based structure level 2 in structure "datum_slot" packed packed unaligned dcl 3-82 in procedure "cm_put_basic_element" flags 3(12) based structure level 2 in structure "bci_header" packed packed unaligned dcl 3-63 in procedure "cm_put_basic_element" free_slot_is_present 3(13) based bit(1) level 3 packed packed unaligned dcl 3-63 set ref 247* has_free_slot_after_allocation 000115 automatic bit(1) initial dcl 142 set ref 142* 213* 247 index 0(24) based fixed bin(12,0) level 2 packed packed unsigned unaligned dcl 1-32 set ref 220* is_continued 0(01) based bit(1) level 3 in structure "datum_slot" packed packed unaligned dcl 3-82 in procedure "cm_put_basic_element" set ref 235* is_continued 000112 automatic bit(1) initial dcl 142 in procedure "cm_put_basic_element" set ref 142* 196* 204* 224* 235 251 layout_type based char(4) level 2 dcl 3-63 set ref 209* my_datum_slot 000100 automatic structure level 1 dcl 133 set ref 181 myname 000004 constant varying char(32) initial dcl 155 set ref 228* 276* 289* null builtin function dcl 149 ref 228 228 2-47 276 276 289 289 number_of_datums 4(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-63 set ref 237* number_of_slots_after_allocation 000110 automatic fixed bin(17,0) initial dcl 139 set ref 139* 213* 237 241* number_of_slots_before_allocation 000107 automatic fixed bin(17,0) initial dcl 139 set ref 139* p_basic_control_interval_header_ptr parameter pointer dcl 122 ref 113 180 p_cm_info_ptr parameter pointer dcl 121 ref 113 178 p_code parameter fixed bin(35,0) dcl 129 set ref 113 176* 303* 312 p_element_id parameter bit(36) dcl 126 set ref 113 182 263* p_element_length parameter fixed bin(35,0) dcl 124 set ref 113 183 251* p_element_ptr parameter pointer dcl 125 set ref 113 191* 251* 256* p_maximum_space_available parameter fixed bin(35,0) dcl 127 set ref 113 312* slot_index_to_use 000111 automatic fixed bin(17,0) initial dcl 139 set ref 139* 213* 220 224 sub_err_ 000010 constant entry external dcl 165 ref 228 276 289 total_free_bytes 000106 automatic fixed bin(35,0) initial dcl 137 set ref 137* 224* 228* 312 unspec builtin function dcl 149 set ref 234* version based char(8) level 2 dcl 2-37 set ref 179* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 5-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 5-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 5-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 5-7 CDCN_DATUM_HEADER_LENGTH_IN_BITS internal static fixed bin(17,0) initial dcl 4-39 CDCN_DATUM_HEADER_LENGTH_IN_BYTES internal static fixed bin(17,0) initial dcl 4-35 CD_DATUM_HEADER_LENGTH_IN_BITS internal static fixed bin(17,0) initial dcl 4-31 CD_DATUM_HEADER_LENGTH_IN_BYTES internal static fixed bin(17,0) initial dcl 4-27 MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BYTES internal static fixed bin(35,0) initial dcl 4-47 MINIMUM_MAXIMUM_DATUM_CONTENTS_LENGTH_IN_BITS internal static fixed bin(35,0) initial dcl 4-51 basic_control_interval based structure level 1 dcl 3-56 basic_control_interval_ptr automatic pointer dcl 3-92 cm_allocate_ci 000000 constant entry external dcl 6-75 cm_allocate_ci$info 000000 constant entry external dcl 6-76 cm_allocate_ci$info_header 000000 constant entry external dcl 6-77 cm_compact$buffered 000000 constant entry external dcl 6-82 cm_compact$buffered_replacement 000000 constant entry external dcl 6-84 cm_compact$replacement 000000 constant entry external dcl 6-83 cm_delete 000000 constant entry external dcl 6-92 cm_delete$info 000000 constant entry external dcl 6-94 cm_delete_cn_datum 000000 constant entry external dcl 6-87 cm_delete_cn_datum$header 000000 constant entry external dcl 6-89 cm_determine_free_space$all 000000 constant entry external dcl 6-96 cm_determine_free_space$effective 000000 constant entry external dcl 6-98 cm_free_ci$info 000000 constant entry external dcl 6-118 cm_free_ci$raw_return_prev_next 000000 constant entry external dcl 6-119 cm_free_ci$trace_thread_modifications_off 000000 constant entry external dcl 6-124 cm_free_ci$trace_thread_modifications_on 000000 constant entry external dcl 6-122 cm_free_opening_info 000000 constant entry external dcl 6-128 cm_get_bci_header 000000 constant entry external dcl 6-130 cm_get_bci_header$exclusive 000000 constant entry external dcl 6-131 cm_get_bci_header$slot 000000 constant entry external dcl 6-133 cm_get_element 000000 constant entry external dcl 6-140 cm_get_element$exclusive 000000 constant entry external dcl 6-142 cm_get_element_portion 000000 constant entry external dcl 6-146 cm_get_id$id 000000 constant entry external dcl 6-157 cm_get_id$ptr 000000 constant entry external dcl 6-159 cm_modify 000000 constant entry external dcl 6-162 cm_modify$buffered 000000 constant entry external dcl 6-164 cm_modify$info 000000 constant entry external dcl 6-173 cm_modify$unprotected_info 000000 constant entry external dcl 6-174 cm_opening_info$full_get 000000 constant entry external dcl 6-187 cm_opening_info$get 000000 constant entry external dcl 6-184 cm_opening_info$get_storage_record 000000 constant entry external dcl 6-185 cm_opening_info$opening_table_ptr 000000 constant entry external dcl 6-189 cm_postcommit_increment 000000 constant entry external dcl 6-192 cm_put 000000 constant entry external dcl 6-195 cm_put$buffered 000000 constant entry external dcl 6-197 cm_put$info 000000 constant entry external dcl 6-206 cm_put_basic_element 000000 constant entry external dcl 6-208 cm_put_cn_datum 000000 constant entry external dcl 6-211 cm_put_datum_in_place 000000 constant entry external dcl 6-213 cm_put_datum_in_place$buffered 000000 constant entry external dcl 6-215 cm_put_datum_in_place$buffered_continued 000000 constant entry external dcl 6-217 cm_put_datum_in_place$continued 000000 constant entry external dcl 6-220 cm_put_datum_in_pool$buffered 000000 constant entry external dcl 6-226 cm_put_datum_in_pool$buffered_continued 000000 constant entry external dcl 6-228 cm_put_ordered_element 000000 constant entry external dcl 6-235 cm_put_ordered_element$buffered 000000 constant entry external dcl 6-237 cm_recursive_modify 000000 constant entry external dcl 6-243 cm_replace_buffered_ci$trace_thread_modifications_off 000000 constant entry external dcl 6-249 cm_replace_buffered_ci$trace_thread_modifications_on 000000 constant entry external dcl 6-247 NAMES DECLARED BY EXPLICIT CONTEXT. CHECK_BCI_VERSION 000774 constant entry internal dcl 285 ref 209 CHECK_VERSION 000670 constant entry internal dcl 269 ref 179 ERROR_RETURN 001057 constant entry internal dcl 298 ref 193 207 216 243 259 FINISH 001066 constant entry internal dcl 309 ref 265 304 MAIN_RETURN 000667 constant label dcl 266 ref 305 cm_put_basic_element 000164 constant entry external dcl 113 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1266 1322 1103 1276 Length 1624 1103 34 265 163 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME cm_put_basic_element 346 external procedure is an external procedure. CHECK_VERSION internal procedure shares stack frame of external procedure cm_put_basic_element. CHECK_BCI_VERSION internal procedure shares stack frame of external procedure cm_put_basic_element. ERROR_RETURN internal procedure shares stack frame of external procedure cm_put_basic_element. FINISH internal procedure shares stack frame of external procedure cm_put_basic_element. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME cm_put_basic_element 000100 my_datum_slot cm_put_basic_element 000101 code cm_put_basic_element 000102 continuation cm_put_basic_element 000103 control_interval_id cm_put_basic_element 000104 element_length_in_bits cm_put_basic_element 000105 element_length_in_bytes cm_put_basic_element 000106 total_free_bytes cm_put_basic_element 000107 number_of_slots_before_allocation cm_put_basic_element 000110 number_of_slots_after_allocation cm_put_basic_element 000111 slot_index_to_use cm_put_basic_element 000112 is_continued cm_put_basic_element 000113 fits_in_ci cm_put_basic_element 000114 fits_in_pool cm_put_basic_element 000115 has_free_slot_after_allocation cm_put_basic_element 000116 element_id_string cm_put_basic_element 000120 cm_info_ptr cm_put_basic_element 000122 bci_header_ptr cm_put_basic_element 000124 datum_slot_ptr cm_put_basic_element THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry ceil_fx1 divide_fx1 THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cm_compact cm_determine_free_space$does_new_datum_fit cm_find_ci_to_alloc_datum cm_find_free_slot cm_put_datum_in_pool cm_put_datum_in_pool$continued cm_put_overlength_tail sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$programming_error error_table_$unimplemented_version LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 113 000156 135 000171 136 000172 137 000173 139 000176 142 000201 2 47 000205 176 000207 178 000212 179 000215 180 000236 181 000242 182 000244 183 000246 187 000250 191 000262 193 000301 196 000305 199 000307 204 000316 207 000350 209 000355 213 000363 216 000407 219 000413 220 000416 224 000420 228 000446 234 000526 235 000527 237 000534 241 000543 243 000563 247 000567 251 000575 256 000632 259 000657 263 000663 265 000666 266 000667 269 000670 276 000701 281 000772 283 000773 285 000774 289 000776 294 001055 296 001056 298 001057 303 001061 304 001064 305 001065 309 001066 312 001067 315 001075 ----------------------------------------------------------- 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