COMPILATION LISTING OF SEGMENT im_general_insert Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 01/03/85 1519.2 mst Thu Options: optimize list 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* This module is used primarily by im_put_key to insert a key into an 9* index at a specified location in the index. (Location is meant in terms 10* of between to particular leaf or branch keys, although it is specified in 11* terms of control_interval_id and slot index, a standard element_id.) 12* 13* im_general_insert first tries to do a simple insertion, then it does 14* a rotate left, then a rotate right, and finally it does a split. The 15* split may recursively invoke im_general_insert on the parent of the nodes 16* which result from the split. The rotations, right and left, also use 17* im_general_insert to place a new value of the parent key into the parent 18* node. 19**/ 20 21 /* HISTORY: 22*Written by Lindsey Spratt, 04/01/82. 23*Modified: 24*07/22/82 by Lindsey Spratt: Changed to use im_rotate_insert instead of 25* im_rotate_previous_insert and im_rotate_next_insert. 26*11/02/82 by Lindsey Spratt: Changed to use the index_opening_info structure. 27* Changed to use new calling sequences for im_split, 28* im_rotate_insert. Removed the cursor_ptr and the index_header_ptr 29* from the calling sequence of this module, adding the 30* index_opening_info_ptr. 31*10/28/84 by Lindsey L. Spratt: Removed spurious reference to the 32* dm_im_opening_info include file. Changed to use ERROR_RETURN. 33* Changed to use ACTION_CANT_RESTART instead of "s" in calls to 34* sub_err-. 35**/ 36 /* format: style2,ind3 */ 37 38 /* format: style2,ind3 */ 39 im_general_insert: 40 proc (p_index_opening_info_ptr, p_leaf_ci_header_ptr, p_insert_new_key, p_key_string, p_key_id_string, p_code); 41 42 /* START OF DECLARATIONS */ 43 /* Parameter */ 44 45 dcl p_index_opening_info_ptr 46 ptr parameter; 47 dcl p_leaf_ci_header_ptr ptr; 48 dcl p_insert_new_key bit (1) aligned; 49 dcl p_key_string bit (*); 50 dcl p_key_id_string bit (36) aligned; 51 dcl p_code fixed bin (35); 52 53 /* Automatic */ 54 55 dcl local_header_buffer bit (max (LEAF_CI_HEADER_LENGTH_IN_BITS, BRANCH_CI_HEADER_LENGTH_IN_BITS)) aligned; 56 57 dcl new_previous_ci fixed bin (24) unsigned unaligned; 58 59 dcl additional_storage_required 60 fixed bin (35); 61 62 /* Based */ 63 /* Builtin */ 64 65 dcl null builtin; 66 67 /* Controlled */ 68 /* Constant */ 69 70 dcl myname init ("im_general_insert") char (32) varying internal static options (constant); 71 dcl ( 72 ROTATE_PREVIOUS init ("1"b), 73 ROTATE_NEXT init ("0"b), 74 REPLACE_PARENT_KEY init ("0"b), 75 INSERT_PARENT_KEY init ("1"b) 76 ) bit (1) aligned internal static options (constant); 77 78 /* Entry */ 79 80 dcl sub_err_ entry () options (variable); 81 82 dcl im_simple_insert entry (ptr, ptr, bit (1) aligned, bit (*), bit (36) aligned, fixed bin (35), 83 fixed bin (35)); 84 dcl im_rotate_insert entry (ptr, ptr, bit (1) aligned, bit (1) aligned, bit (1) aligned, bit (*), 85 bit (36) aligned, fixed bin (35), fixed bin (35)); 86 87 dcl im_split entry (ptr, ptr, fixed bin (24) unsigned unaligned, ptr, 88 fixed bin (24) unsigned unaligned, fixed bin (35)); 89 90 /* External */ 91 92 dcl dm_error_$long_element fixed bin (35) ext; 93 dcl dm_error_$programming_error 94 fixed bin (35) ext; 95 96 /* END OF DECLARATIONS */ 97 98 99 call im_simple_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, p_insert_new_key, p_key_string, 100 p_key_id_string, additional_storage_required, p_code); 101 if p_code ^= 0 102 then if p_code ^= dm_error_$long_element 103 then call ERROR_RETURN (p_code); 104 else if additional_storage_required <= 0 105 then call sub_err_ (dm_error_$programming_error, myname, ACTION_CANT_RESTART, null, 0, 106 "^/Attempt to insert a key failed because of insufficient space, according to 107 the im_simple_insert module, but the addition storage required, as specified by 108 this module, is ^d.", additional_storage_required); 109 else 110 SIMPLE_INSERT_INSUFFICIENT_SPACE: 111 do; 112 call im_rotate_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, ROTATE_PREVIOUS, p_insert_new_key, 113 REPLACE_PARENT_KEY, p_key_string, p_key_id_string, additional_storage_required, p_code); 114 if p_code ^= 0 115 then if p_code ^= dm_error_$long_element 116 then call ERROR_RETURN (p_code); 117 else if additional_storage_required <= 0 118 then call sub_err_ (dm_error_$programming_error, myname, ACTION_CANT_RESTART, null, 0, 119 "^/Attempt to insert a key (after rotating keys from the target node into the 120 left-sibling) failed because of insufficient space, according to 121 the im_rotate_insert module, but the additional storage required, as specified 122 by this module, is ^d.", additional_storage_required); 123 else 124 ROTATE_LEFT_INSUFFICIENT_SPACE: 125 do; 126 call im_rotate_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, ROTATE_NEXT, 127 p_insert_new_key, REPLACE_PARENT_KEY, p_key_string, p_key_id_string, 128 additional_storage_required, p_code); 129 130 if p_code ^= 0 131 then if p_code ^= dm_error_$long_element 132 then call ERROR_RETURN (p_code); 133 else if additional_storage_required <= 0 134 then call sub_err_ (dm_error_$programming_error, myname, ACTION_CANT_RESTART, null, 0, 135 "^/Attempt to insert a key (after rotating keys from the target node into the 136 right-sibling) failed because of insufficient space, according to 137 the im_rotate_insert module, but the additional storage required, as specified 138 by this module, is ^d.", additional_storage_required); 139 else 140 ROTATE_RIGHT_INSUFFICIENT_SPACE: 141 do; 142 call im_split (p_index_opening_info_ptr, p_leaf_ci_header_ptr, 143 addr (p_key_id_string) -> element_id.control_interval_id, 144 addr (local_header_buffer), new_previous_ci, p_code); 145 if p_code ^= 0 146 then call ERROR_RETURN (p_code); 147 call im_rotate_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, 148 ROTATE_PREVIOUS, p_insert_new_key, INSERT_PARENT_KEY, p_key_string, 149 p_key_id_string, additional_storage_required, p_code); 150 if p_code ^= 0 151 then call ERROR_RETURN (p_code); 152 153 end ROTATE_RIGHT_INSUFFICIENT_SPACE; 154 end ROTATE_LEFT_INSUFFICIENT_SPACE; 155 end SIMPLE_INSERT_INSUFFICIENT_SPACE; 156 157 MAIN_RETURN: 158 return; 159 160 161 ERROR_RETURN: 162 proc (er_p_code); 163 dcl er_p_code fixed bin (35) parameter; 164 p_code = er_p_code; 165 goto MAIN_RETURN; 166 end ERROR_RETURN; 167 1 1 /* BEGIN INCLUDE FILE - dm_im_ci_header.incl.pl1 */ 1 2 1 3 /* DESCRIPTION: 1 4* 1 5* Each node (control interval) in the index has a header which 1 6* describes the contents of that node. Although there are two different 1 7* kinds of headers, leaf and branch, they have a great deal in common, the 1 8* common_ci_header. The common_ci_header states which slots are used by 1 9* the keys (leaf or branch) in the key_range substructure. There is an 1 10* "upward pointer" to the node's parent branch key (parent_id_string). 1 11* There are pointers to the previous and next nodes (previous_id and 1 12* next_id) on the same level to facilitate rotation of keys, and sequential 1 13* searching. There is also a count of how much space is in use by the keys. 1 14* 1 15**/ 1 16 1 17 /* HISTORY: 1 18* 1 19*Written by Lindsey Spratt, 03/29/82. 1 20*Modified: 1 21*10/25/84 by Lindsey L. Spratt: Added a description and fixed the history 1 22* section format. 1 23**/ 1 24 1 25 /* format: style2,ind3 */ 1 26 dcl 1 common_ci_header based (common_ci_header_ptr), 1 27 2 flags unaligned, 1 28 3 is_leaf bit (1) unaligned, /* ON for leaf_ci, OFF for branch_ci. */ 1 29 3 pad bit (17) unaligned, /* Must be zero. */ 1 30 2 key_tail_space_used_since_last_prefix_compaction 1 31 fixed bin (18) unsigned unal, 1 32 2 key_range unaligned, 1 33 3 first fixed bin (18) unsigned, 1 34 3 last fixed bin (18) unsigned, 1 35 2 parent_id_string bit (36) aligned, 1 36 2 previous_id fixed bin (24) unsigned unaligned, 1 37 2 next_id fixed bin (24) unsigned unaligned, 1 38 2 pad bit (24) unaligned; 1 39 1 40 1 41 dcl common_ci_header_ptr ptr; 1 42 1 43 dcl 1 leaf_ci_header based (leaf_ci_header_ptr), 1 44 2 common like common_ci_header; 1 45 1 46 dcl leaf_ci_header_ptr ptr; 1 47 1 48 dcl 1 branch_ci_header based (branch_ci_header_ptr), 1 49 2 common like common_ci_header, 1 50 2 low_branch_id fixed bin (24) unsigned unaligned, 1 51 2 pad bit (12) unaligned; 1 52 1 53 dcl branch_ci_header_ptr ptr; 1 54 1 55 1 56 dcl ( 1 57 DEFAULT_INITIAL_KEY_SLOT 1 58 init (2), 1 59 DEFAULT_INDEX_CONTROL_INTERVAL_HEADER_SLOT 1 60 init (1), 1 61 LEAF_CI_HEADER_LENGTH_IN_BITS 1 62 init (180), 1 63 BRANCH_CI_HEADER_LENGTH_IN_BITS 1 64 init (216) 1 65 ) internal static options (constant) fixed bin; 1 66 1 67 /* END INCLUDE FILE - dm_im_ci_header.incl.pl1 */ 168 169 2 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 2 2 /* format: style3 */ 2 3 2 4 /* These constants are to be used for the flags argument of sub_err_ */ 2 5 /* They are just "string (condition_info_header.action_flags)" */ 2 6 2 7 declare ( 2 8 ACTION_CAN_RESTART init (""b), 2 9 ACTION_CANT_RESTART init ("1"b), 2 10 ACTION_DEFAULT_RESTART 2 11 init ("01"b), 2 12 ACTION_QUIET_RESTART 2 13 init ("001"b), 2 14 ACTION_SUPPORT_SIGNAL 2 15 init ("0001"b) 2 16 ) bit (36) aligned internal static options (constant); 2 17 2 18 /* End include file */ 170 171 3 1 /* BEGIN INCLUDE FILE dm_element_id.incl.pl1 */ 3 2 3 3 /* DESCRIPTION: 3 4* 3 5* Contains the declaration of an element identifier. Element 3 6* identifiers consist of two parts, the id (number) of the control interval 3 7* in which the element resides, and the index into the slot table of 3 8* the element in the control interval. The declaration of the element_id 3 9* structure reflects this division of the element identifier. The structure 3 10* is based on the automatic bit string element_id_string because programs 3 11* generally pass bit strings (element_id_string) to each other, then 3 12* interpret the bit string by overlaying the element_id structure ony if 3 13* it is necessary to access the parts of the id. Basing element_id on 3 14* addr(element_id_string) instead of on a pointer removes the necessity 3 15* for always setting that pointer explicitly and guarantees that changes 3 16* made to the string or structure do not get inconsistent. 3 17* 3 18* Changes made to element_id must also be made to datum_id, declared in 3 19* dm_cm_datum.incl.pl1. 3 20**/ 3 21 3 22 /* HISTORY: 3 23*Written by Matthew Pierret, 04/01/82. 3 24*Modified: 3 25*09/24/84 by Matthew Pierret: Added DESCRIPTION section. 3 26**/ 3 27 3 28 /* format: style2,ind3,ll79 */ 3 29 3 30 dcl element_id_string bit (36) aligned; 3 31 3 32 dcl 1 element_id aligned based (addr (element_id_string)), 3 33 2 control_interval_id 3 34 fixed bin (24) unal unsigned, 3 35 2 index fixed bin (12) unal unsigned; 3 36 3 37 3 38 /* END INCLUDE FILE dm_element_id.incl.pl1 */ 172 173 end im_general_insert; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 01/03/85 1146.3 im_general_insert.pl1 >spec>temp>famis1>im_general_insert.pl1 168 1 01/03/85 1003.4 dm_im_ci_header.incl.pl1 >spec>temp>famis1>dm_im_ci_header.incl.pl1 170 2 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.incl.pl1 172 3 01/03/85 1003.2 dm_element_id.incl.pl1 >spec>temp>famis1>dm_element_id.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 000000 constant bit(36) initial dcl 2-7 set ref 104* 117* 133* BRANCH_CI_HEADER_LENGTH_IN_BITS constant fixed bin(17,0) initial dcl 1-56 ref 55 INSERT_PARENT_KEY 000000 constant bit(1) initial dcl 71 set ref 147* LEAF_CI_HEADER_LENGTH_IN_BITS constant fixed bin(17,0) initial dcl 1-56 ref 55 REPLACE_PARENT_KEY 000017 constant bit(1) initial dcl 71 set ref 112* 126* ROTATE_NEXT 000017 constant bit(1) initial dcl 71 set ref 126* ROTATE_PREVIOUS 000000 constant bit(1) initial dcl 71 set ref 112* 147* additional_storage_required 000101 automatic fixed bin(35,0) dcl 59 set ref 99* 104 104* 112* 117 117* 126* 133 133* 147* common_ci_header based structure level 1 unaligned dcl 1-26 control_interval_id based fixed bin(24,0) level 2 packed unsigned unaligned dcl 3-32 set ref 142* dm_error_$long_element 000020 external static fixed bin(35,0) dcl 92 ref 101 114 130 dm_error_$programming_error 000022 external static fixed bin(35,0) dcl 93 set ref 104* 117* 133* element_id based structure level 1 dcl 3-32 er_p_code parameter fixed bin(35,0) dcl 163 ref 161 164 im_rotate_insert 000014 constant entry external dcl 84 ref 112 126 147 im_simple_insert 000012 constant entry external dcl 82 ref 99 im_split 000016 constant entry external dcl 87 ref 142 local_header_buffer 000100 automatic bit dcl 55 set ref 142 142 myname 000001 constant varying char(32) initial dcl 70 set ref 104* 117* 133* new_previous_ci 000100 automatic fixed bin(24,0) unsigned unaligned dcl 57 set ref 142* null builtin function dcl 65 ref 104 104 117 117 133 133 p_code parameter fixed bin(35,0) dcl 51 set ref 39 99* 101 101 101* 112* 114 114 114* 126* 130 130 130* 142* 145 145* 147* 150 150* 164* p_index_opening_info_ptr parameter pointer dcl 45 set ref 39 99* 112* 126* 142* 147* p_insert_new_key parameter bit(1) dcl 48 set ref 39 99* 112* 126* 147* p_key_id_string parameter bit(36) dcl 50 set ref 39 99* 112* 126* 142 147* p_key_string parameter bit unaligned dcl 49 set ref 39 99* 112* 126* 147* p_leaf_ci_header_ptr parameter pointer dcl 47 set ref 39 99* 112* 126* 142* 147* sub_err_ 000010 constant entry external dcl 80 ref 104 117 133 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 2-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 2-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 2-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 2-7 DEFAULT_INDEX_CONTROL_INTERVAL_HEADER_SLOT internal static fixed bin(17,0) initial dcl 1-56 DEFAULT_INITIAL_KEY_SLOT internal static fixed bin(17,0) initial dcl 1-56 branch_ci_header based structure level 1 unaligned dcl 1-48 branch_ci_header_ptr automatic pointer dcl 1-53 common_ci_header_ptr automatic pointer dcl 1-41 element_id_string automatic bit(36) dcl 3-30 leaf_ci_header based structure level 1 unaligned dcl 1-43 leaf_ci_header_ptr automatic pointer dcl 1-46 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 001056 constant entry internal dcl 161 ref 101 114 130 145 150 MAIN_RETURN 001055 constant label dcl 157 ref 165 ROTATE_LEFT_INSUFFICIENT_SPACE 000610 constant label dcl 123 ROTATE_RIGHT_INSUFFICIENT_SPACE 000742 constant label dcl 139 SIMPLE_INSERT_INSUFFICIENT_SPACE 000456 constant label dcl 109 im_general_insert 000305 constant entry external dcl 39 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 142 142 142 max builtin function ref 55 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1170 1214 1064 1200 Length 1452 1064 24 221 104 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME im_general_insert 278 external procedure is an external procedure. ERROR_RETURN internal procedure shares stack frame of external procedure im_general_insert. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME im_general_insert 000100 local_header_buffer im_general_insert 000100 new_previous_ci im_general_insert 000101 additional_storage_required im_general_insert THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return alloc_auto_adj ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. im_rotate_insert im_simple_insert im_split sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$long_element dm_error_$programming_error CONSTANTS 000000 aa 400000000000 000001 aa 000000000021 000002 aa 151 155 137 147 im_g 000003 aa 145 156 145 162 ener 000004 aa 141 154 137 151 al_i 000005 aa 156 163 145 162 nser 000006 aa 164 040 040 040 t 000007 aa 040 040 040 040 000010 aa 040 040 040 040 000011 aa 040 040 040 040 000012 aa 524000000366 000013 aa 524000000364 000014 aa 524000000260 000015 aa 404000000005 000016 aa 530000000040 000017 aa 000000000000 000020 aa 404000000043 000021 aa 514000000044 000022 aa 516077777777 000023 aa 514000000001 000024 aa 464000000000 000026 aa 077777000043 000027 aa 000001000000 000030 aa 136 057 101 164 ^/At 000031 aa 164 145 155 160 temp 000032 aa 164 040 164 157 t to 000033 aa 040 151 156 163 ins 000034 aa 145 162 164 040 ert 000035 aa 141 040 153 145 a ke 000036 aa 171 040 146 141 y fa 000037 aa 151 154 145 144 iled 000040 aa 040 142 145 143 bec 000041 aa 141 165 163 145 ause 000042 aa 040 157 146 040 of 000043 aa 151 156 163 165 insu 000044 aa 146 146 151 143 ffic 000045 aa 151 145 156 164 ient 000046 aa 040 163 160 141 spa 000047 aa 143 145 054 040 ce, 000050 aa 141 143 143 157 acco 000051 aa 162 144 151 156 rdin 000052 aa 147 040 164 157 g to 000053 aa 012 164 150 145 the 000054 aa 040 151 155 137 im_ 000055 aa 163 151 155 160 simp 000056 aa 154 145 137 151 le_i 000057 aa 156 163 145 162 nser 000060 aa 164 040 155 157 t mo 000061 aa 144 165 154 145 dule 000062 aa 054 040 142 165 , bu 000063 aa 164 040 164 150 t th 000064 aa 145 040 141 144 e ad 000065 aa 144 151 164 151 diti 000066 aa 157 156 040 163 on s 000067 aa 164 157 162 141 tora 000070 aa 147 145 040 162 ge r 000071 aa 145 161 165 151 equi 000072 aa 162 145 144 054 red, 000073 aa 040 141 163 040 as 000074 aa 163 160 145 143 spec 000075 aa 151 146 151 145 ifie 000076 aa 144 040 142 171 d by 000077 aa 012 164 150 151 thi 000100 aa 163 040 155 157 s mo 000101 aa 144 165 154 145 dule 000102 aa 054 040 151 163 , is 000103 aa 040 136 144 056 ^d. 000104 aa 136 057 101 164 ^/At 000105 aa 164 145 155 160 temp 000106 aa 164 040 164 157 t to 000107 aa 040 151 156 163 ins 000110 aa 145 162 164 040 ert 000111 aa 141 040 153 145 a ke 000112 aa 171 040 050 141 y (a 000113 aa 146 164 145 162 fter 000114 aa 040 162 157 164 rot 000115 aa 141 164 151 156 atin 000116 aa 147 040 153 145 g ke 000117 aa 171 163 040 146 ys f 000120 aa 162 157 155 040 rom 000121 aa 164 150 145 040 the 000122 aa 164 141 162 147 targ 000123 aa 145 164 040 156 et n 000124 aa 157 144 145 040 ode 000125 aa 151 156 164 157 into 000126 aa 040 164 150 145 the 000127 aa 012 154 145 146 lef 000130 aa 164 055 163 151 t-si 000131 aa 142 154 151 156 blin 000132 aa 147 051 040 146 g) f 000133 aa 141 151 154 145 aile 000134 aa 144 040 142 145 d be 000135 aa 143 141 165 163 caus 000136 aa 145 040 157 146 e of 000137 aa 040 151 156 163 ins 000140 aa 165 146 146 151 uffi 000141 aa 143 151 145 156 cien 000142 aa 164 040 163 160 t sp 000143 aa 141 143 145 054 ace, 000144 aa 040 141 143 143 acc 000145 aa 157 162 144 151 ordi 000146 aa 156 147 040 164 ng t 000147 aa 157 012 164 150 o th 000150 aa 145 040 151 155 e im 000151 aa 137 162 157 164 _rot 000152 aa 141 164 145 137 ate_ 000153 aa 151 156 163 145 inse 000154 aa 162 164 040 155 rt m 000155 aa 157 144 165 154 odul 000156 aa 145 054 040 142 e, b 000157 aa 165 164 040 164 ut t 000160 aa 150 145 040 141 he a 000161 aa 144 144 151 164 ddit 000162 aa 151 157 156 141 iona 000163 aa 154 040 163 164 l st 000164 aa 157 162 141 147 orag 000165 aa 145 040 162 145 e re 000166 aa 161 165 151 162 quir 000167 aa 145 144 054 040 ed, 000170 aa 141 163 040 163 as s 000171 aa 160 145 143 151 peci 000172 aa 146 151 145 144 fied 000173 aa 040 012 142 171 by 000174 aa 040 164 150 151 thi 000175 aa 163 040 155 157 s mo 000176 aa 144 165 154 145 dule 000177 aa 054 040 151 163 , is 000200 aa 040 136 144 056 ^d. 000201 aa 136 057 101 164 ^/At 000202 aa 164 145 155 160 temp 000203 aa 164 040 164 157 t to 000204 aa 040 151 156 163 ins 000205 aa 145 162 164 040 ert 000206 aa 141 040 153 145 a ke 000207 aa 171 040 050 141 y (a 000210 aa 146 164 145 162 fter 000211 aa 040 162 157 164 rot 000212 aa 141 164 151 156 atin 000213 aa 147 040 153 145 g ke 000214 aa 171 163 040 146 ys f 000215 aa 162 157 155 040 rom 000216 aa 164 150 145 040 the 000217 aa 164 141 162 147 targ 000220 aa 145 164 040 156 et n 000221 aa 157 144 145 040 ode 000222 aa 151 156 164 157 into 000223 aa 040 164 150 145 the 000224 aa 012 162 151 147 rig 000225 aa 150 164 055 163 ht-s 000226 aa 151 142 154 151 ibli 000227 aa 156 147 051 040 ng) 000230 aa 146 141 151 154 fail 000231 aa 145 144 040 142 ed b 000232 aa 145 143 141 165 ecau 000233 aa 163 145 040 157 se o 000234 aa 146 040 151 156 f in 000235 aa 163 165 146 146 suff 000236 aa 151 143 151 145 icie 000237 aa 156 164 040 163 nt s 000240 aa 160 141 143 145 pace 000241 aa 054 040 141 143 , ac 000242 aa 143 157 162 144 cord 000243 aa 151 156 147 040 ing 000244 aa 164 157 012 164 to t 000245 aa 150 145 040 151 he i 000246 aa 155 137 162 157 m_ro 000247 aa 164 141 164 145 tate 000250 aa 137 151 156 163 _ins 000251 aa 145 162 164 040 ert 000252 aa 155 157 144 165 modu 000253 aa 154 145 054 040 le, 000254 aa 142 165 164 040 but 000255 aa 164 150 145 040 the 000256 aa 141 144 144 151 addi 000257 aa 164 151 157 156 tion 000260 aa 141 154 040 163 al s 000261 aa 164 157 162 141 tora 000262 aa 147 145 040 162 ge r 000263 aa 145 161 165 151 equi 000264 aa 162 145 144 054 red, 000265 aa 040 141 163 040 as 000266 aa 163 160 145 143 spec 000267 aa 151 146 151 145 ifie 000270 aa 144 040 040 012 d 000271 aa 142 171 040 164 by t 000272 aa 150 151 163 040 his 000273 aa 155 157 144 165 modu 000274 aa 154 145 054 040 le, 000275 aa 151 163 040 136 is ^ 000276 aa 144 056 000 000 d. BEGIN PROCEDURE im_general_insert ENTRY TO im_general_insert STATEMENT 1 ON LINE 39 im_general_insert: proc (p_index_opening_info_ptr, p_leaf_ci_header_ptr, p_insert_new_key, p_key_string, p_key_id_string, p_code); 000277 at 000006000024 000300 tt 000024000023 000301 tt 000022000021 000302 ta 000020000000 000303 ta 000277000000 000304 da 000100300000 000305 aa 000440 6270 00 eax7 288 000306 aa 7 00034 3521 20 epp2 pr7|28,* 000307 aa 2 01046 2721 00 tsp2 pr2|550 ext_entry_desc 000310 aa 000014000000 000311 aa 000000000000 000312 aa 6 00042 3735 20 epp7 pr6|34,* 000313 aa 7 00006 2361 20 ldq pr7|6,* 000314 aa 000002 6040 04 tmi 2,ic 000316 000315 aa 777777 3760 07 anq 262143,dl 000316 aa 0 00250 3761 00 anq pr0|168 = 000077777777 000317 aa 6 00114 7561 00 stq pr6|76 STATEMENT 1 ON LINE 55 000320 aa 000264 2360 07 ldq 180,dl 000321 aa 000330 1160 07 cmpq 216,dl 000322 aa 000002 6050 04 tpl 2,ic 000324 000323 aa 000330 2360 07 ldq 216,dl 000324 aa 6 00102 7561 00 stq pr6|66 000325 aa 000043 0760 07 adq 35,dl 000326 aa 000044 5060 07 div 36,dl 000327 aa 6 00103 7561 00 stq pr6|67 000330 aa 0 00661 7001 00 tsx0 pr0|433 alloc_auto_adj 000331 aa 6 00104 2521 00 spri2 pr6|68 STATEMENT 1 ON LINE 99 call im_simple_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, p_insert_new_key, p_key_string, p_key_id_string, additional_storage_required, p_code); 000332 aa 6 00032 3715 20 epp5 pr6|26,* 000333 aa 5 00002 3521 20 epp2 pr5|2,* p_index_opening_info_ptr 000334 aa 6 00120 2521 00 spri2 pr6|80 000335 aa 5 00004 3521 20 epp2 pr5|4,* p_leaf_ci_header_ptr 000336 aa 6 00122 2521 00 spri2 pr6|82 000337 aa 5 00006 3521 20 epp2 pr5|6,* p_insert_new_key 000340 aa 6 00124 2521 00 spri2 pr6|84 000341 aa 5 00010 3521 20 epp2 pr5|8,* p_key_string 000342 aa 6 00126 2521 00 spri2 pr6|86 000343 aa 5 00012 3521 20 epp2 pr5|10,* p_key_id_string 000344 aa 6 00130 2521 00 spri2 pr6|88 000345 aa 6 00101 3521 00 epp2 pr6|65 additional_storage_required 000346 aa 6 00132 2521 00 spri2 pr6|90 000347 aa 5 00014 3521 20 epp2 pr5|12,* p_code 000350 aa 6 00134 2521 00 spri2 pr6|92 000351 aa 777453 3520 04 epp2 -213,ic 000024 = 464000000000 000352 aa 6 00136 2521 00 spri2 pr6|94 000353 aa 6 00140 2521 00 spri2 pr6|96 000354 aa 777447 3520 04 epp2 -217,ic 000023 = 514000000001 000355 aa 6 00142 2521 00 spri2 pr6|98 000356 aa 7 00006 3521 20 epp2 pr7|6,* 000357 aa 6 00144 2521 00 spri2 pr6|100 000360 aa 777441 3520 04 epp2 -223,ic 000021 = 514000000044 000361 aa 6 00146 2521 00 spri2 pr6|102 000362 aa 777436 3520 04 epp2 -226,ic 000020 = 404000000043 000363 aa 6 00150 2521 00 spri2 pr6|104 000364 aa 6 00152 2521 00 spri2 pr6|106 000365 aa 6 00116 6211 00 eax1 pr6|78 000366 aa 034000 4310 07 fld 14336,dl 000367 la 4 00012 3521 20 epp2 pr4|10,* im_simple_insert 000370 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 101 if p_code ^= 0 then if p_code ^= dm_error_$long_element then call ERROR_RETURN (p_code); 000371 aa 6 00032 3735 20 epp7 pr6|26,* 000372 aa 7 00014 2361 20 ldq pr7|12,* p_code 000373 aa 000462 6000 04 tze 306,ic 001055 000374 aa 6 00044 3701 20 epp4 pr6|36,* 000375 la 4 00020 1161 20 cmpq pr4|16,* dm_error_$long_element 000376 aa 000010 6000 04 tze 8,ic 000406 000377 aa 7 00014 3521 20 epp2 pr7|12,* p_code 000400 aa 6 00120 2521 00 spri2 pr6|80 000401 aa 6 00116 3521 00 epp2 pr6|78 000402 aa 004000 4310 07 fld 2048,dl 000403 aa 2 00000 7571 00 staq pr2|0 000404 aa 000452 6700 04 tsp4 298,ic 001056 000405 aa 000450 7100 04 tra 296,ic 001055 STATEMENT 1 ON LINE 104 else if additional_storage_required <= 0 then call sub_err_ (dm_error_$programming_error, myname, ACTION_CANT_RESTART, null, 0, "^/Attempt to insert a key failed because of insufficient space, according to the im_simple_insert module, but the addition storage required, as specified by this module, is ^d.", additional_storage_required); 000406 aa 6 00101 2361 00 ldq pr6|65 additional_storage_required 000407 aa 000047 6054 04 tpnz 39,ic 000456 000410 aa 777416 3714 24 epp5 -242,ic* 000411 aa 6 00154 6515 00 spri5 pr6|108 000412 aa 6 00115 4501 00 stz pr6|77 000413 aa 000 100 100 404 mlr (ic),(pr),fill(000) 000414 aa 777415 00 0260 desc9a -243,176 000030 = 136057101164 000415 aa 6 00156 00 0260 desc9a pr6|110,176 000416 la 4 00022 3521 20 epp2 pr4|18,* dm_error_$programming_error 000417 aa 6 00120 2521 00 spri2 pr6|80 000420 aa 777362 3520 04 epp2 -270,ic 000002 = 151155137147 000421 aa 6 00122 2521 00 spri2 pr6|82 000422 aa 777356 3520 04 epp2 -274,ic 000000 = 400000000000 000423 aa 6 00124 2521 00 spri2 pr6|84 000424 aa 6 00154 3521 00 epp2 pr6|108 000425 aa 6 00126 2521 00 spri2 pr6|86 000426 aa 6 00115 3521 00 epp2 pr6|77 000427 aa 6 00130 2521 00 spri2 pr6|88 000430 aa 6 00156 3521 00 epp2 pr6|110 000431 aa 6 00132 2521 00 spri2 pr6|90 000432 aa 6 00101 3521 00 epp2 pr6|65 additional_storage_required 000433 aa 6 00134 2521 00 spri2 pr6|92 000434 aa 777364 3520 04 epp2 -268,ic 000020 = 404000000043 000435 aa 6 00136 2521 00 spri2 pr6|94 000436 aa 6 00152 2521 00 spri2 pr6|106 000437 aa 777357 3520 04 epp2 -273,ic 000016 = 530000000040 000440 aa 6 00140 2521 00 spri2 pr6|96 000441 aa 777360 3520 04 epp2 -272,ic 000021 = 514000000044 000442 aa 6 00142 2521 00 spri2 pr6|98 000443 aa 777361 3520 04 epp2 -271,ic 000024 = 464000000000 000444 aa 6 00144 2521 00 spri2 pr6|100 000445 aa 777350 3520 04 epp2 -280,ic 000015 = 404000000005 000446 aa 6 00146 2521 00 spri2 pr6|102 000447 aa 777345 3520 04 epp2 -283,ic 000014 = 524000000260 000450 aa 6 00150 2521 00 spri2 pr6|104 000451 aa 6 00116 6211 00 eax1 pr6|78 000452 aa 034000 4310 07 fld 14336,dl 000453 la 4 00010 3521 20 epp2 pr4|8,* sub_err_ 000454 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc 000455 aa 000400 7100 04 tra 256,ic 001055 STATEMENT 1 ON LINE 109 else SIMPLE_INSERT_INSUFFICIENT_SPACE: do; STATEMENT 1 ON LINE 112 call im_rotate_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, ROTATE_PREVIOUS, p_insert_new_key, REPLACE_PARENT_KEY, p_key_string, p_key_id_string, additional_storage_required, p_code); 000456 aa 7 00002 3521 20 epp2 pr7|2,* p_index_opening_info_ptr 000457 aa 6 00160 2521 00 spri2 pr6|112 000460 aa 7 00004 3521 20 epp2 pr7|4,* p_leaf_ci_header_ptr 000461 aa 6 00162 2521 00 spri2 pr6|114 000462 aa 777316 3520 04 epp2 -306,ic 000000 = 400000000000 000463 aa 6 00164 2521 00 spri2 pr6|116 000464 aa 7 00006 3521 20 epp2 pr7|6,* p_insert_new_key 000465 aa 6 00166 2521 00 spri2 pr6|118 000466 aa 777331 3520 04 epp2 -295,ic 000017 = 000000000000 000467 aa 6 00170 2521 00 spri2 pr6|120 000470 aa 7 00010 3521 20 epp2 pr7|8,* p_key_string 000471 aa 6 00172 2521 00 spri2 pr6|122 000472 aa 7 00012 3521 20 epp2 pr7|10,* p_key_id_string 000473 aa 6 00174 2521 00 spri2 pr6|124 000474 aa 6 00101 3521 00 epp2 pr6|65 additional_storage_required 000475 aa 6 00176 2521 00 spri2 pr6|126 000476 aa 7 00014 3521 20 epp2 pr7|12,* p_code 000477 aa 6 00200 2521 00 spri2 pr6|128 000500 aa 777324 3520 04 epp2 -300,ic 000024 = 464000000000 000501 aa 6 00202 2521 00 spri2 pr6|130 000502 aa 6 00204 2521 00 spri2 pr6|132 000503 aa 777320 3520 04 epp2 -304,ic 000023 = 514000000001 000504 aa 6 00206 2521 00 spri2 pr6|134 000505 aa 6 00210 2521 00 spri2 pr6|136 000506 aa 6 00212 2521 00 spri2 pr6|138 000507 aa 6 00042 3715 20 epp5 pr6|34,* 000510 aa 5 00006 3521 20 epp2 pr5|6,* 000511 aa 6 00214 2521 00 spri2 pr6|140 000512 aa 777307 3520 04 epp2 -313,ic 000021 = 514000000044 000513 aa 6 00216 2521 00 spri2 pr6|142 000514 aa 777304 3520 04 epp2 -316,ic 000020 = 404000000043 000515 aa 6 00220 2521 00 spri2 pr6|144 000516 aa 6 00222 2521 00 spri2 pr6|146 000517 aa 6 00156 6211 00 eax1 pr6|110 000520 aa 044000 4310 07 fld 18432,dl 000521 la 4 00014 3521 20 epp2 pr4|12,* im_rotate_insert 000522 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 114 if p_code ^= 0 then if p_code ^= dm_error_$long_element then call ERROR_RETURN (p_code); 000523 aa 6 00032 3735 20 epp7 pr6|26,* 000524 aa 7 00014 2361 20 ldq pr7|12,* p_code 000525 aa 000330 6000 04 tze 216,ic 001055 000526 aa 6 00044 3701 20 epp4 pr6|36,* 000527 la 4 00020 1161 20 cmpq pr4|16,* dm_error_$long_element 000530 aa 000010 6000 04 tze 8,ic 000540 000531 aa 7 00014 3521 20 epp2 pr7|12,* p_code 000532 aa 6 00120 2521 00 spri2 pr6|80 000533 aa 6 00116 3521 00 epp2 pr6|78 000534 aa 004000 4310 07 fld 2048,dl 000535 aa 2 00000 7571 00 staq pr2|0 000536 aa 000320 6700 04 tsp4 208,ic 001056 000537 aa 000316 7100 04 tra 206,ic 001055 STATEMENT 1 ON LINE 117 else if additional_storage_required <= 0 then call sub_err_ (dm_error_$programming_error, myname, ACTION_CANT_RESTART, null, 0, "^/Attempt to insert a key (after rotating keys from the target node into the left-sibling) failed because of insufficient space, according to the im_rotate_insert module, but the additional storage required, as specified by this module, is ^d.", additional_storage_required); 000540 aa 6 00101 2361 00 ldq pr6|65 additional_storage_required 000541 aa 000047 6054 04 tpnz 39,ic 000610 000542 aa 777264 3714 24 epp5 -332,ic* 000543 aa 6 00154 6515 00 spri5 pr6|108 000544 aa 6 00115 4501 00 stz pr6|77 000545 aa 000 100 100 404 mlr (ic),(pr),fill(000) 000546 aa 777337 00 0364 desc9a -289,244 000104 = 136057101164 000547 aa 6 00232 00 0364 desc9a pr6|154,244 000550 la 4 00022 3521 20 epp2 pr4|18,* dm_error_$programming_error 000551 aa 6 00120 2521 00 spri2 pr6|80 000552 aa 777230 3520 04 epp2 -360,ic 000002 = 151155137147 000553 aa 6 00122 2521 00 spri2 pr6|82 000554 aa 777224 3520 04 epp2 -364,ic 000000 = 400000000000 000555 aa 6 00124 2521 00 spri2 pr6|84 000556 aa 6 00154 3521 00 epp2 pr6|108 000557 aa 6 00126 2521 00 spri2 pr6|86 000560 aa 6 00115 3521 00 epp2 pr6|77 000561 aa 6 00130 2521 00 spri2 pr6|88 000562 aa 6 00232 3521 00 epp2 pr6|154 000563 aa 6 00132 2521 00 spri2 pr6|90 000564 aa 6 00101 3521 00 epp2 pr6|65 additional_storage_required 000565 aa 6 00134 2521 00 spri2 pr6|92 000566 aa 777232 3520 04 epp2 -358,ic 000020 = 404000000043 000567 aa 6 00136 2521 00 spri2 pr6|94 000570 aa 6 00152 2521 00 spri2 pr6|106 000571 aa 777225 3520 04 epp2 -363,ic 000016 = 530000000040 000572 aa 6 00140 2521 00 spri2 pr6|96 000573 aa 777226 3520 04 epp2 -362,ic 000021 = 514000000044 000574 aa 6 00142 2521 00 spri2 pr6|98 000575 aa 777227 3520 04 epp2 -361,ic 000024 = 464000000000 000576 aa 6 00144 2521 00 spri2 pr6|100 000577 aa 777216 3520 04 epp2 -370,ic 000015 = 404000000005 000600 aa 6 00146 2521 00 spri2 pr6|102 000601 aa 777212 3520 04 epp2 -374,ic 000013 = 524000000364 000602 aa 6 00150 2521 00 spri2 pr6|104 000603 aa 6 00116 6211 00 eax1 pr6|78 000604 aa 034000 4310 07 fld 14336,dl 000605 la 4 00010 3521 20 epp2 pr4|8,* sub_err_ 000606 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc 000607 aa 000246 7100 04 tra 166,ic 001055 STATEMENT 1 ON LINE 123 else ROTATE_LEFT_INSUFFICIENT_SPACE: do; STATEMENT 1 ON LINE 126 call im_rotate_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, ROTATE_NEXT, p_insert_new_key, REPLACE_PARENT_KEY, p_key_string, p_key_id_string, additional_storage_required, p_code); 000610 aa 7 00002 3521 20 epp2 pr7|2,* p_index_opening_info_ptr 000611 aa 6 00160 2521 00 spri2 pr6|112 000612 aa 7 00004 3521 20 epp2 pr7|4,* p_leaf_ci_header_ptr 000613 aa 6 00162 2521 00 spri2 pr6|114 000614 aa 777203 3520 04 epp2 -381,ic 000017 = 000000000000 000615 aa 6 00164 2521 00 spri2 pr6|116 000616 aa 7 00006 3521 20 epp2 pr7|6,* p_insert_new_key 000617 aa 6 00166 2521 00 spri2 pr6|118 000620 aa 777177 3520 04 epp2 -385,ic 000017 = 000000000000 000621 aa 6 00170 2521 00 spri2 pr6|120 000622 aa 7 00010 3521 20 epp2 pr7|8,* p_key_string 000623 aa 6 00172 2521 00 spri2 pr6|122 000624 aa 7 00012 3521 20 epp2 pr7|10,* p_key_id_string 000625 aa 6 00174 2521 00 spri2 pr6|124 000626 aa 6 00101 3521 00 epp2 pr6|65 additional_storage_required 000627 aa 6 00176 2521 00 spri2 pr6|126 000630 aa 7 00014 3521 20 epp2 pr7|12,* p_code 000631 aa 6 00200 2521 00 spri2 pr6|128 000632 aa 777172 3520 04 epp2 -390,ic 000024 = 464000000000 000633 aa 6 00202 2521 00 spri2 pr6|130 000634 aa 6 00204 2521 00 spri2 pr6|132 000635 aa 777166 3520 04 epp2 -394,ic 000023 = 514000000001 000636 aa 6 00206 2521 00 spri2 pr6|134 000637 aa 6 00210 2521 00 spri2 pr6|136 000640 aa 6 00212 2521 00 spri2 pr6|138 000641 aa 6 00042 3715 20 epp5 pr6|34,* 000642 aa 5 00006 3521 20 epp2 pr5|6,* 000643 aa 6 00214 2521 00 spri2 pr6|140 000644 aa 777155 3520 04 epp2 -403,ic 000021 = 514000000044 000645 aa 6 00216 2521 00 spri2 pr6|142 000646 aa 777152 3520 04 epp2 -406,ic 000020 = 404000000043 000647 aa 6 00220 2521 00 spri2 pr6|144 000650 aa 6 00222 2521 00 spri2 pr6|146 000651 aa 6 00156 6211 00 eax1 pr6|110 000652 aa 044000 4310 07 fld 18432,dl 000653 la 4 00014 3521 20 epp2 pr4|12,* im_rotate_insert 000654 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 130 if p_code ^= 0 then if p_code ^= dm_error_$long_element then call ERROR_RETURN (p_code); 000655 aa 6 00032 3735 20 epp7 pr6|26,* 000656 aa 7 00014 2361 20 ldq pr7|12,* p_code 000657 aa 000176 6000 04 tze 126,ic 001055 000660 aa 6 00044 3701 20 epp4 pr6|36,* 000661 la 4 00020 1161 20 cmpq pr4|16,* dm_error_$long_element 000662 aa 000010 6000 04 tze 8,ic 000672 000663 aa 7 00014 3521 20 epp2 pr7|12,* p_code 000664 aa 6 00120 2521 00 spri2 pr6|80 000665 aa 6 00116 3521 00 epp2 pr6|78 000666 aa 004000 4310 07 fld 2048,dl 000667 aa 2 00000 7571 00 staq pr2|0 000670 aa 000166 6700 04 tsp4 118,ic 001056 000671 aa 000164 7100 04 tra 116,ic 001055 STATEMENT 1 ON LINE 133 else if additional_storage_required <= 0 then call sub_err_ (dm_error_$programming_error, myname, ACTION_CANT_RESTART, null, 0, "^/Attempt to insert a key (after rotating keys from the target node into the right-sibling) failed because of insufficient space, according to the im_rotate_insert module, but the additional storage required, as specified by this module, is ^d.", additional_storage_required); 000672 aa 6 00101 2361 00 ldq pr6|65 additional_storage_required 000673 aa 000047 6054 04 tpnz 39,ic 000742 000674 aa 777132 3714 24 epp5 -422,ic* 000675 aa 6 00154 6515 00 spri5 pr6|108 000676 aa 6 00115 4501 00 stz pr6|77 000677 aa 000 100 100 404 mlr (ic),(pr),fill(000) 000700 aa 777302 00 0370 desc9a -318,248 000201 = 136057101164 000701 aa 6 00330 00 0370 desc9a pr6|216,248 000702 la 4 00022 3521 20 epp2 pr4|18,* dm_error_$programming_error 000703 aa 6 00120 2521 00 spri2 pr6|80 000704 aa 777076 3520 04 epp2 -450,ic 000002 = 151155137147 000705 aa 6 00122 2521 00 spri2 pr6|82 000706 aa 777072 3520 04 epp2 -454,ic 000000 = 400000000000 000707 aa 6 00124 2521 00 spri2 pr6|84 000710 aa 6 00154 3521 00 epp2 pr6|108 000711 aa 6 00126 2521 00 spri2 pr6|86 000712 aa 6 00115 3521 00 epp2 pr6|77 000713 aa 6 00130 2521 00 spri2 pr6|88 000714 aa 6 00330 3521 00 epp2 pr6|216 000715 aa 6 00132 2521 00 spri2 pr6|90 000716 aa 6 00101 3521 00 epp2 pr6|65 additional_storage_required 000717 aa 6 00134 2521 00 spri2 pr6|92 000720 aa 777100 3520 04 epp2 -448,ic 000020 = 404000000043 000721 aa 6 00136 2521 00 spri2 pr6|94 000722 aa 6 00152 2521 00 spri2 pr6|106 000723 aa 777073 3520 04 epp2 -453,ic 000016 = 530000000040 000724 aa 6 00140 2521 00 spri2 pr6|96 000725 aa 777074 3520 04 epp2 -452,ic 000021 = 514000000044 000726 aa 6 00142 2521 00 spri2 pr6|98 000727 aa 777075 3520 04 epp2 -451,ic 000024 = 464000000000 000730 aa 6 00144 2521 00 spri2 pr6|100 000731 aa 777064 3520 04 epp2 -460,ic 000015 = 404000000005 000732 aa 6 00146 2521 00 spri2 pr6|102 000733 aa 777057 3520 04 epp2 -465,ic 000012 = 524000000366 000734 aa 6 00150 2521 00 spri2 pr6|104 000735 aa 6 00116 6211 00 eax1 pr6|78 000736 aa 034000 4310 07 fld 14336,dl 000737 la 4 00010 3521 20 epp2 pr4|8,* sub_err_ 000740 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc 000741 aa 000114 7100 04 tra 76,ic 001055 STATEMENT 1 ON LINE 139 else ROTATE_RIGHT_INSUFFICIENT_SPACE: do; STATEMENT 1 ON LINE 142 call im_split (p_index_opening_info_ptr, p_leaf_ci_header_ptr, addr (p_key_id_string) -> element_id.control_interval_id, addr (local_header_buffer), new_previous_ci, p_code); 000742 aa 6 00104 3715 20 epp5 pr6|68,* local_header_buffer 000743 aa 6 00154 6515 00 spri5 pr6|108 000744 aa 7 00002 3521 20 epp2 pr7|2,* p_index_opening_info_ptr 000745 aa 6 00120 2521 00 spri2 pr6|80 000746 aa 7 00004 3521 20 epp2 pr7|4,* p_leaf_ci_header_ptr 000747 aa 6 00122 2521 00 spri2 pr6|82 000750 aa 7 00012 3521 20 epp2 pr7|10,* element_id.control_interval_id 000751 aa 6 00124 2521 00 spri2 pr6|84 000752 aa 6 00154 3521 00 epp2 pr6|108 000753 aa 6 00126 2521 00 spri2 pr6|86 000754 aa 6 00100 3521 00 epp2 pr6|64 new_previous_ci 000755 aa 6 00130 2521 00 spri2 pr6|88 000756 aa 7 00014 3521 20 epp2 pr7|12,* p_code 000757 aa 6 00132 2521 00 spri2 pr6|90 000760 aa 6 00116 6211 00 eax1 pr6|78 000761 aa 030000 4310 07 fld 12288,dl 000762 la 4 00016 3521 20 epp2 pr4|14,* im_split 000763 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 145 if p_code ^= 0 then call ERROR_RETURN (p_code); 000764 aa 6 00032 3735 20 epp7 pr6|26,* 000765 aa 7 00014 2361 20 ldq pr7|12,* p_code 000766 aa 000007 6000 04 tze 7,ic 000775 000767 aa 7 00014 3521 20 epp2 pr7|12,* p_code 000770 aa 6 00120 2521 00 spri2 pr6|80 000771 aa 6 00116 3521 00 epp2 pr6|78 000772 aa 004000 4310 07 fld 2048,dl 000773 aa 2 00000 7571 00 staq pr2|0 000774 aa 000062 6700 04 tsp4 50,ic 001056 STATEMENT 1 ON LINE 147 call im_rotate_insert (p_index_opening_info_ptr, p_leaf_ci_header_ptr, ROTATE_PREVIOUS, p_insert_new_key, INSERT_PARENT_KEY, p_key_string, p_key_id_string, additional_storage_required, p_code); 000775 aa 6 00032 3735 20 epp7 pr6|26,* 000776 aa 7 00002 3521 20 epp2 pr7|2,* p_index_opening_info_ptr 000777 aa 6 00160 2521 00 spri2 pr6|112 001000 aa 7 00004 3521 20 epp2 pr7|4,* p_leaf_ci_header_ptr 001001 aa 6 00162 2521 00 spri2 pr6|114 001002 aa 776776 3520 04 epp2 -514,ic 000000 = 400000000000 001003 aa 6 00164 2521 00 spri2 pr6|116 001004 aa 7 00006 3521 20 epp2 pr7|6,* p_insert_new_key 001005 aa 6 00166 2521 00 spri2 pr6|118 001006 aa 776772 3520 04 epp2 -518,ic 000000 = 400000000000 001007 aa 6 00170 2521 00 spri2 pr6|120 001010 aa 7 00010 3521 20 epp2 pr7|8,* p_key_string 001011 aa 6 00172 2521 00 spri2 pr6|122 001012 aa 7 00012 3521 20 epp2 pr7|10,* p_key_id_string 001013 aa 6 00174 2521 00 spri2 pr6|124 001014 aa 6 00101 3521 00 epp2 pr6|65 additional_storage_required 001015 aa 6 00176 2521 00 spri2 pr6|126 001016 aa 7 00014 3521 20 epp2 pr7|12,* p_code 001017 aa 6 00200 2521 00 spri2 pr6|128 001020 aa 777004 3520 04 epp2 -508,ic 000024 = 464000000000 001021 aa 6 00202 2521 00 spri2 pr6|130 001022 aa 6 00204 2521 00 spri2 pr6|132 001023 aa 777000 3520 04 epp2 -512,ic 000023 = 514000000001 001024 aa 6 00206 2521 00 spri2 pr6|134 001025 aa 6 00210 2521 00 spri2 pr6|136 001026 aa 6 00212 2521 00 spri2 pr6|138 001027 aa 6 00042 3715 20 epp5 pr6|34,* 001030 aa 5 00006 3521 20 epp2 pr5|6,* 001031 aa 6 00214 2521 00 spri2 pr6|140 001032 aa 776767 3520 04 epp2 -521,ic 000021 = 514000000044 001033 aa 6 00216 2521 00 spri2 pr6|142 001034 aa 776764 3520 04 epp2 -524,ic 000020 = 404000000043 001035 aa 6 00220 2521 00 spri2 pr6|144 001036 aa 6 00222 2521 00 spri2 pr6|146 001037 aa 6 00156 6211 00 eax1 pr6|110 001040 aa 044000 4310 07 fld 18432,dl 001041 aa 6 00044 3701 20 epp4 pr6|36,* 001042 la 4 00014 3521 20 epp2 pr4|12,* im_rotate_insert 001043 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 150 if p_code ^= 0 then call ERROR_RETURN (p_code); 001044 aa 6 00032 3735 20 epp7 pr6|26,* 001045 aa 7 00014 2361 20 ldq pr7|12,* p_code 001046 aa 000007 6000 04 tze 7,ic 001055 001047 aa 7 00014 3521 20 epp2 pr7|12,* p_code 001050 aa 6 00120 2521 00 spri2 pr6|80 001051 aa 6 00116 3521 00 epp2 pr6|78 001052 aa 004000 4310 07 fld 2048,dl 001053 aa 2 00000 7571 00 staq pr2|0 001054 aa 000002 6700 04 tsp4 2,ic 001056 STATEMENT 1 ON LINE 153 end ROTATE_RIGHT_INSUFFICIENT_SPACE; STATEMENT 1 ON LINE 154 end ROTATE_LEFT_INSUFFICIENT_SPACE; STATEMENT 1 ON LINE 155 end SIMPLE_INSERT_INSUFFICIENT_SPACE; STATEMENT 1 ON LINE 157 MAIN_RETURN: return; 001055 aa 0 00631 7101 00 tra pr0|409 return STATEMENT 1 ON LINE 173 end im_general_insert; BEGIN PROCEDURE ERROR_RETURN ENTRY TO ERROR_RETURN STATEMENT 1 ON LINE 161 ERROR_RETURN: proc (er_p_code); 001056 aa 6 00106 6501 00 spri4 pr6|70 001057 aa 6 00110 2521 00 spri2 pr6|72 STATEMENT 1 ON LINE 164 p_code = er_p_code; 001060 aa 2 00002 2361 20 ldq pr2|2,* er_p_code 001061 aa 6 00032 3735 20 epp7 pr6|26,* 001062 aa 7 00014 7561 20 stq pr7|12,* p_code STATEMENT 1 ON LINE 165 goto MAIN_RETURN; 001063 aa 777772 7100 04 tra -6,ic 001055 STATEMENT 1 ON LINE 166 end ERROR_RETURN; END PROCEDURE ERROR_RETURN END PROCEDURE im_general_insert ----------------------------------------------------------- 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