COMPILATION LISTING OF SEGMENT im_set_cursor Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 01/03/85 1542.9 mst Thu Options: optimize list 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* 9* This subroutine sets a cursor to a caller-specified position. The 10* defined positions are: 1) to a "current key value"; 2) to the beginning 11* of the index; 3) to the end of the index. 12**/ 13 14 /* HISTORY: 15* 16*Written by Lindsey L. Spratt, 02/25/83. 17*Modified: 18*05/10/84 by Matthew Pierret: Changed to align current_key_string on an 19* even_word boundary. 20**/ 21 22 /* format: style2,ind3 */ 23 24 im_set_cursor: 25 proc; 26 return; 27 28 /* START OF DECLARATIONS */ 29 /* Parameter */ 30 31 dcl p_index_cursor_ptr ptr parameter; 32 dcl p_key_id_string bit (36) aligned parameter; 33 dcl p_key_string_ptr ptr parameter; 34 dcl p_key_string_length fixed bin (24) parameter; 35 dcl p_code fixed bin (35) parameter; 36 37 /* Automatic */ 38 39 dcl (local_current_key_exists, local_at_beginning_of_index, local_at_end_of_index) 40 bit (1) aligned init ("0"b); 41 dcl cks_length fixed bin (35) init (0); 42 dcl cksb_length fixed bin (35) init (0); 43 dcl current_key_string_ptr ptr init (null); 44 dcl index_cursor_area_ptr ptr init (null); 45 46 /* Based */ 47 48 dcl current_key_string_buffer 49 (cksb_length) fixed bin (71) based (current_key_string_ptr); 50 dcl current_key_string bit (cks_length) based (current_key_string_ptr); 51 dcl index_cursor_area area based (index_cursor_area_ptr); 52 53 /* Builtin */ 54 55 dcl (divide, null, string) builtin; 56 57 /* Constant */ 58 59 dcl myname init ("im_set_cursor") char (32) varying internal static options (constant); 60 dcl BITS_PER_DOUBLE_WORD init (72) fixed bin internal static options (constant); 61 62 /* Entry */ 63 64 dcl sub_err_ entry () options (variable); 65 66 /* External */ 67 68 dcl error_table_$unimplemented_version 69 fixed bin (35) ext; 70 71 /* END OF DECLARATIONS */ 72 73 at_current: 74 entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 75 local_current_key_exists = "1"b; 76 goto JOIN; 77 78 no_current: 79 entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 80 goto JOIN; 81 82 at_beginning: 83 entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 84 local_at_beginning_of_index = "1"b; 85 goto JOIN; 86 87 at_end: 88 entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 89 local_at_end_of_index = "1"b; 90 91 JOIN: 92 index_cursor_ptr = p_index_cursor_ptr; 93 call CHECK_VERSION ((index_cursor.version), (INDEX_CURSOR_VERSION_3), "index_cursor"); 94 95 p_code = 0; 96 index_cursor_area_ptr = index_cursor.area_ptr; 97 cks_length = index_cursor.current_key_string_length; 98 99 string (index_cursor.flags) = "0"b; 100 if index_cursor.current_key_string_ptr ^= null & index_cursor.current_key_string_ptr ^= p_key_string_ptr 101 then free index_cursor.current_key_string_ptr -> current_key_string in (index_cursor_area); 102 103 if p_key_string_ptr = null 104 then index_cursor.current_key_string_ptr = null; 105 else if index_cursor.current_key_string_ptr ^= p_key_string_ptr 106 then 107 do; 108 cks_length = p_key_string_length; 109 cksb_length = divide (cks_length, BITS_PER_DOUBLE_WORD, 35, 0) + 1; 110 alloc current_key_string_buffer in (index_cursor_area); 111 current_key_string = p_key_string_ptr -> current_key_string; 112 index_cursor.current_key_string_ptr = current_key_string_ptr; 113 index_cursor.current_key_string_length = cks_length; 114 end; 115 index_cursor.flags.is_at_end_of_index = local_at_end_of_index; 116 index_cursor.flags.is_at_beginning_of_index = local_at_beginning_of_index; 117 index_cursor.flags.current_key_exists = local_current_key_exists; 118 index_cursor.key_id_string = p_key_id_string; 119 index_cursor.flags.is_valid = "1"b; 120 return; 121 122 CHECK_VERSION: 123 proc (p_received_version, p_expected_version, p_structure_name); 124 dcl p_received_version fixed bin (35); 125 dcl p_expected_version fixed bin (35); 126 dcl p_structure_name char (*); 127 if p_received_version ^= p_expected_version 128 then call 129 sub_err_ (error_table_$unimplemented_version, myname, ACTION_CANT_RESTART, null, 0, 130 "^/Expected version ^d of the ^a structure. 131 Received version ^d instead.", p_expected_version, p_structure_name, p_received_version); 132 end CHECK_VERSION; 133 1 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 1 2 /* format: style3 */ 1 3 1 4 /* These constants are to be used for the flags argument of sub_err_ */ 1 5 /* They are just "string (condition_info_header.action_flags)" */ 1 6 1 7 declare ( 1 8 ACTION_CAN_RESTART init (""b), 1 9 ACTION_CANT_RESTART init ("1"b), 1 10 ACTION_DEFAULT_RESTART 1 11 init ("01"b), 1 12 ACTION_QUIET_RESTART 1 13 init ("001"b), 1 14 ACTION_SUPPORT_SIGNAL 1 15 init ("0001"b) 1 16 ) bit (36) aligned internal static options (constant); 1 17 1 18 /* End include file */ 134 135 2 1 /* BEGIN INCLUDE FILE - dm_im_cursor.incl.pl1 */ 2 2 2 3 /* DESCRIPTION: 2 4* 2 5* This structure specifies a DM file, an index collection in that DM 2 6*file, and a position (key) in that index collection. 2 7* 2 8**/ 2 9 2 10 /* HISTORY: 2 11* 2 12*Written by Lindsey Spratt, 03/29/82 2 13*Modified: 2 14*08/09/82 by Matthew Pierret: Changed collection_id from "fixed bin (17)" to 2 15* "bit (35) aligned". 2 16*08/26/82 by Lindsey Spratt: Changed to version 2. Added the is_valid and 2 17* is_at_end_of_index flags. Changed the key_check_value to fixed 2 18* bin (35). Added the IM_HASH_BIAS, which is used to increment the 2 19* value developed by hash_index_, and IM_HASH_NUMBER_OF_BUCKETS, 2 20* which is a unique number used by hash_index_ to develop the 2 21* key_check_value. 2 22*02/23/83 by Lindsey Spratt: Changed to keep the current key value in the 2 23* cursor. Also, implemented the ability to have the cursor 2 24* positioned before or after the index. 2 25*10/23/84 by Lindsey L. Spratt: Added a description section. 2 26**/ 2 27 2 28 /* format: style2,ind3 */ 2 29 dcl 1 index_cursor based (index_cursor_ptr), 2 30 2 type fixed bin (17) unaligned, 2 31 2 version fixed bin (17) unaligned, 2 32 2 file_opening_id bit (36) aligned, 2 33 2 collection_id bit (36) aligned, 2 34 2 key_id_string bit (36) aligned, /* Is the location of the current key, */ 2 35 /* if flags.current_key_exists is on. Is the location */ 2 36 /* of the end of the index if flags.is_at_end_of_index */ 2 37 /* is on, which is only available via an operation */ 2 38 /* requiring the "previous" key. Is the location of */ 2 39 /* the "next" key, otherwise. */ 2 40 2 area_ptr ptr, /* Area in which the cursor and key_string area allocated. */ 2 41 /* Must be a freeing area. */ 2 42 2 current_key_string_ptr 2 43 ptr, /* Points to the value of the current key. */ 2 44 2 current_key_string_length 2 45 fixed bin (24) unal, /* Is the length of the current key in bits. */ 2 46 2 pad bit (12) unal, 2 47 2 flags aligned, 2 48 3 is_at_beginning_of_index 2 49 bit (1) unaligned, /* Only the "next" key is defined. */ 2 50 3 is_at_end_of_index 2 51 bit (1) unaligned, /* Only the "previous" key is defined. */ 2 52 3 current_key_exists 2 53 bit (1) unaligned, /* If on, indicates that the "current" key is identified */ 2 54 /* by the key_id_string. If off, the "current" position */ 2 55 /* is undefined, and the key_id_string identifies the */ 2 56 /* previous or next key, depending on whether */ 2 57 /* flags.is_at_end_of_index is off or on, respectively. */ 2 58 3 is_valid bit (1) unaligned, /* If off, the index_manager_ was interrupted while */ 2 59 /* setting the cursor position and the cursor is not */ 2 60 /* to be trusted for relative position operations. */ 2 61 3 pad bit (32) unal; 2 62 2 63 2 64 dcl index_cursor_ptr ptr; 2 65 2 66 dcl INDEX_CURSOR_VERSION_3 fixed bin (17) init (3) internal static options (constant); 2 67 dcl INDEX_CURSOR_TYPE init (2) fixed bin (17) internal static options (constant); 2 68 2 69 /* END INCLUDE FILE - dm_im_cursor.incl.pl1 */ 136 137 end im_set_cursor; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 01/03/85 1146.9 im_set_cursor.pl1 >spec>temp>famis1>im_set_cursor.pl1 134 1 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.incl.pl1 136 2 01/03/85 1003.5 dm_im_cursor.incl.pl1 >spec>temp>famis1>dm_im_cursor.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 000016 constant bit(36) initial dcl 1-7 set ref 127* BITS_PER_DOUBLE_WORD constant fixed bin(17,0) initial dcl 60 ref 109 INDEX_CURSOR_VERSION_3 constant fixed bin(17,0) initial dcl 2-66 ref 93 area_ptr 4 based pointer level 2 dcl 2-29 ref 96 cks_length 000103 automatic fixed bin(35,0) initial dcl 41 set ref 41* 97* 100 100 108* 109 111 111 113 cksb_length 000104 automatic fixed bin(35,0) initial dcl 42 set ref 42* 109* 110 current_key_exists 12(02) based bit(1) level 3 packed unaligned dcl 2-29 set ref 117* current_key_string based bit unaligned dcl 50 set ref 100 111* 111 current_key_string_buffer based fixed bin(71,0) array dcl 48 ref 110 current_key_string_length 10 based fixed bin(24,0) level 2 packed unaligned dcl 2-29 set ref 97 113* current_key_string_ptr 6 based pointer level 2 in structure "index_cursor" dcl 2-29 in procedure "im_set_cursor" set ref 100 100 100 103* 105 112* current_key_string_ptr 000106 automatic pointer initial dcl 43 in procedure "im_set_cursor" set ref 43* 110* 111 112 divide builtin function dcl 55 ref 109 error_table_$unimplemented_version 000012 external static fixed bin(35,0) dcl 68 set ref 127* flags 12 based structure level 2 dcl 2-29 set ref 99* index_cursor based structure level 1 unaligned dcl 2-29 index_cursor_area based area(1024) dcl 51 ref 100 110 index_cursor_area_ptr 000110 automatic pointer initial dcl 44 set ref 44* 96* 100 110 index_cursor_ptr 000112 automatic pointer dcl 2-64 set ref 91* 93 96 97 99 100 100 100 103 105 112 113 115 116 117 118 119 is_at_beginning_of_index 12 based bit(1) level 3 packed unaligned dcl 2-29 set ref 116* is_at_end_of_index 12(01) based bit(1) level 3 packed unaligned dcl 2-29 set ref 115* is_valid 12(03) based bit(1) level 3 packed unaligned dcl 2-29 set ref 119* key_id_string 3 based bit(36) level 2 dcl 2-29 set ref 118* local_at_beginning_of_index 000101 automatic bit(1) initial dcl 39 set ref 39* 84* 116 local_at_end_of_index 000102 automatic bit(1) initial dcl 39 set ref 39* 89* 115 local_current_key_exists 000100 automatic bit(1) initial dcl 39 set ref 39* 75* 117 myname 000000 constant varying char(32) initial dcl 59 set ref 127* null builtin function dcl 55 ref 43 44 100 103 103 127 127 p_code parameter fixed bin(35,0) dcl 35 set ref 73 78 82 87 95* p_expected_version parameter fixed bin(35,0) dcl 125 set ref 122 127 127* p_index_cursor_ptr parameter pointer dcl 31 ref 73 78 82 87 91 p_key_id_string parameter bit(36) dcl 32 ref 73 78 82 87 118 p_key_string_length parameter fixed bin(24,0) dcl 34 ref 73 78 82 87 108 p_key_string_ptr parameter pointer dcl 33 ref 73 78 82 87 100 103 105 111 p_received_version parameter fixed bin(35,0) dcl 124 set ref 122 127 127* p_structure_name parameter char unaligned dcl 126 set ref 122 127* string builtin function dcl 55 set ref 99* sub_err_ 000010 constant entry external dcl 64 ref 127 version 0(18) based fixed bin(17,0) level 2 packed unaligned dcl 2-29 ref 93 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 1-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 1-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 1-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 1-7 INDEX_CURSOR_TYPE internal static fixed bin(17,0) initial dcl 2-67 NAMES DECLARED BY EXPLICIT CONTEXT. CHECK_VERSION 000317 constant entry internal dcl 122 ref 93 JOIN 000152 constant label dcl 91 ref 76 80 85 at_beginning 000127 constant entry external dcl 82 at_current 000103 constant entry external dcl 73 at_end 000142 constant entry external dcl 87 im_set_cursor 000067 constant entry external dcl 24 no_current 000116 constant entry external dcl 78 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 532 546 432 542 Length 756 432 14 174 100 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME im_set_cursor 150 external procedure is an external procedure. CHECK_VERSION internal procedure shares stack frame of external procedure im_set_cursor. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME im_set_cursor 000100 local_current_key_exists im_set_cursor 000101 local_at_beginning_of_index im_set_cursor 000102 local_at_end_of_index im_set_cursor 000103 cks_length im_set_cursor 000104 cksb_length im_set_cursor 000106 current_key_string_ptr im_set_cursor 000110 index_cursor_area_ptr im_set_cursor 000112 index_cursor_ptr im_set_cursor THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc return ext_entry alloc_based free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$unimplemented_version CONSTANTS 000414 aa 000006000000 000415 aa 000006000000 000416 aa 600000000041 000417 aa 000123000000 000420 aa 600000000041 000421 aa 000124000000 000422 aa 600000000041 000423 aa 000126000000 000424 ta 000017000000 000425 aa 000000000000 000426 ta 000017000000 000427 aa 000000000000 000430 ta 000015000000 000431 aa 000000000000 000000 aa 000000000015 000001 aa 151 155 137 163 im_s 000002 aa 145 164 137 143 et_c 000003 aa 165 162 163 157 urso 000004 aa 162 040 040 040 r 000005 aa 040 040 040 040 000006 aa 040 040 040 040 000007 aa 040 040 040 040 000010 aa 040 040 040 040 000011 aa 524000000107 000012 aa 404000000005 000013 aa 530000000040 000014 aa 526077777777 000015 aa 524000000014 000016 aa 400000000000 000017 aa 404000000043 000020 aa 404000000030 000021 aa 514000000044 000022 aa 464000000000 000024 aa 077777000043 000025 aa 000001000000 000026 aa 151 156 144 145 inde 000027 aa 170 137 143 165 x_cu 000030 aa 162 163 157 162 rsor 000031 aa 136 057 105 170 ^/Ex 000032 aa 160 145 143 164 pect 000033 aa 145 144 040 166 ed v 000034 aa 145 162 163 151 ersi 000035 aa 157 156 040 136 on ^ 000036 aa 144 040 157 146 d of 000037 aa 040 164 150 145 the 000040 aa 040 136 141 040 ^a 000041 aa 163 164 162 165 stru 000042 aa 143 164 165 162 ctur 000043 aa 145 056 012 122 e. R 000044 aa 145 143 145 151 ecei 000045 aa 166 145 144 040 ved 000046 aa 166 145 162 163 vers 000047 aa 151 157 156 040 ion 000050 aa 136 144 040 151 ^d i 000051 aa 156 163 164 145 nste 000052 aa 141 144 056 000 ad. BEGIN PROCEDURE im_set_cursor PROLOGUE SEQUENCE 000053 aa 6 00122 4401 00 sxl0 pr6|82 STATEMENT 1 ON LINE 39 000054 aa 6 00100 4501 00 stz pr6|64 local_current_key_exists 000055 aa 6 00101 4501 00 stz pr6|65 local_at_beginning_of_index 000056 aa 6 00102 4501 00 stz pr6|66 local_at_end_of_index STATEMENT 1 ON LINE 41 000057 aa 6 00103 4501 00 stz pr6|67 cks_length STATEMENT 1 ON LINE 42 000060 aa 6 00104 4501 00 stz pr6|68 cksb_length STATEMENT 1 ON LINE 43 000061 aa 777743 2370 04 ldaq -29,ic 000024 = 077777000043 000001000000 000062 aa 6 00106 7571 00 staq pr6|70 current_key_string_ptr STATEMENT 1 ON LINE 44 000063 aa 6 00110 7571 00 staq pr6|72 index_cursor_area_ptr 000064 aa 6 00122 7201 00 lxl0 pr6|82 000065 aa 000000 7100 10 tra 0,0 MAIN SEQUENCE ENTRY TO im_set_cursor STATEMENT 1 ON LINE 24 im_set_cursor: proc; 000066 da 000044200000 000067 aa 000240 6270 00 eax7 160 000070 aa 7 00034 3521 20 epp2 pr7|28,* 000071 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000072 aa 000000000000 000073 aa 000000000000 000074 aa 777757 7000 04 tsx0 -17,ic 000053 STATEMENT 1 ON LINE 26 return; 000075 aa 0 00631 7101 00 tra pr0|409 return ENTRY TO at_current STATEMENT 1 ON LINE 73 at_current: entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 000076 at 000005000022 000077 tt 000021000022 000100 tt 000020000017 000101 ta 000076000000 000102 da 000052300000 000103 aa 000240 6270 00 eax7 160 000104 aa 7 00034 3521 20 epp2 pr7|28,* 000105 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000106 aa 000012000000 000107 aa 000000000000 000110 aa 777743 7000 04 tsx0 -29,ic 000053 STATEMENT 1 ON LINE 75 local_current_key_exists = "1"b; 000111 aa 400000 2350 03 lda 131072,du 000112 aa 6 00100 7551 00 sta pr6|64 local_current_key_exists STATEMENT 1 ON LINE 76 goto JOIN; 000113 aa 000037 7100 04 tra 31,ic 000152 ENTRY TO no_current STATEMENT 1 ON LINE 78 no_current: entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 000114 ta 000076000000 000115 da 000060300000 000116 aa 000240 6270 00 eax7 160 000117 aa 7 00034 3521 20 epp2 pr7|28,* 000120 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000121 aa 000012000000 000122 aa 000000000000 000123 aa 777730 7000 04 tsx0 -40,ic 000053 STATEMENT 1 ON LINE 80 goto JOIN; 000124 aa 000026 7100 04 tra 22,ic 000152 ENTRY TO at_beginning STATEMENT 1 ON LINE 82 at_beginning: entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 000125 ta 000076000000 000126 da 000067300000 000127 aa 000240 6270 00 eax7 160 000130 aa 7 00034 3521 20 epp2 pr7|28,* 000131 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000132 aa 000012000000 000133 aa 000000000000 000134 aa 777717 7000 04 tsx0 -49,ic 000053 STATEMENT 1 ON LINE 84 local_at_beginning_of_index = "1"b; 000135 aa 400000 2350 03 lda 131072,du 000136 aa 6 00101 7551 00 sta pr6|65 local_at_beginning_of_index STATEMENT 1 ON LINE 85 goto JOIN; 000137 aa 000013 7100 04 tra 11,ic 000152 ENTRY TO at_end STATEMENT 1 ON LINE 87 at_end: entry (p_index_cursor_ptr, p_key_id_string, p_key_string_ptr, p_key_string_length, p_code); 000140 ta 000076000000 000141 da 000074300000 000142 aa 000240 6270 00 eax7 160 000143 aa 7 00034 3521 20 epp2 pr7|28,* 000144 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000145 aa 000012000000 000146 aa 000000000000 000147 aa 777704 7000 04 tsx0 -60,ic 000053 STATEMENT 1 ON LINE 89 local_at_end_of_index = "1"b; 000150 aa 400000 2350 03 lda 131072,du 000151 aa 6 00102 7551 00 sta pr6|66 local_at_end_of_index STATEMENT 1 ON LINE 91 JOIN: index_cursor_ptr = p_index_cursor_ptr; 000152 aa 6 00032 3735 20 epp7 pr6|26,* 000153 aa 7 00002 3715 20 epp5 pr7|2,* p_index_cursor_ptr 000154 aa 5 00000 3715 20 epp5 pr5|0,* p_index_cursor_ptr 000155 aa 6 00112 6515 00 spri5 pr6|74 index_cursor_ptr STATEMENT 1 ON LINE 93 call CHECK_VERSION ((index_cursor.version), (INDEX_CURSOR_VERSION_3), "index_cursor"); 000156 aa 5 00000 2351 00 lda pr5|0 index_cursor.version 000157 aa 000022 7350 00 als 18 000160 aa 000066 7330 00 lrs 54 000161 aa 6 00123 7561 00 stq pr6|83 000162 aa 000003 2360 07 ldq 3,dl 000163 aa 6 00124 7561 00 stq pr6|84 000164 aa 777642 2370 04 ldaq -94,ic 000026 = 151156144145 170137143165 000165 aa 6 00126 7571 00 staq pr6|86 000166 aa 777642 2350 04 lda -94,ic 000030 = 162163157162 000167 aa 6 00130 7551 00 sta pr6|88 000170 aa 000224 3520 04 epp2 148,ic 000414 = 000006000000 000171 aa 2 00000 2351 00 lda pr2|0 000172 aa 000125 6700 04 tsp4 85,ic 000317 STATEMENT 1 ON LINE 95 p_code = 0; 000173 aa 6 00032 3735 20 epp7 pr6|26,* 000174 aa 7 00012 4501 20 stz pr7|10,* p_code STATEMENT 1 ON LINE 96 index_cursor_area_ptr = index_cursor.area_ptr; 000175 aa 6 00112 3715 20 epp5 pr6|74,* index_cursor_ptr 000176 aa 5 00004 3715 20 epp5 pr5|4,* index_cursor.area_ptr 000177 aa 6 00110 6515 00 spri5 pr6|72 index_cursor_area_ptr STATEMENT 1 ON LINE 97 cks_length = index_cursor.current_key_string_length; 000200 aa 6 00112 3535 20 epp3 pr6|74,* index_cursor_ptr 000201 aa 3 00010 2351 00 lda pr3|8 index_cursor.current_key_string_length 000202 aa 000057 7330 00 lrs 47 000203 aa 6 00103 7561 00 stq pr6|67 cks_length STATEMENT 1 ON LINE 99 string (index_cursor.flags) = "0"b; 000204 aa 3 00012 4501 00 stz pr3|10 STATEMENT 1 ON LINE 100 if index_cursor.current_key_string_ptr ^= null & index_cursor.current_key_string_ptr ^= p_key_string_ptr then free index_cursor.current_key_string_ptr -> current_key_string in (index_cursor_area); 000205 aa 3 00006 2371 00 ldaq pr3|6 index_cursor.current_key_string_ptr 000206 aa 777616 6770 04 eraq -114,ic 000024 = 077777000043 000001000000 000207 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 000210 aa 000012 6000 04 tze 10,ic 000222 000211 aa 3 00006 2371 00 ldaq pr3|6 index_cursor.current_key_string_ptr 000212 aa 7 00006 6771 20 eraq pr7|6,* p_key_string_ptr 000213 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 000214 aa 000006 6000 04 tze 6,ic 000222 000215 aa 6 00103 2361 00 ldq pr6|67 cks_length 000216 aa 000043 0760 07 adq 35,dl 000217 aa 000044 5060 07 div 36,dl 000220 aa 3 00006 3715 00 epp5 pr3|6 index_cursor.current_key_string_ptr 000221 aa 0 01404 7001 00 tsx0 pr0|772 free_based STATEMENT 1 ON LINE 103 if p_key_string_ptr = null then index_cursor.current_key_string_ptr = null; 000222 aa 6 00032 3735 20 epp7 pr6|26,* 000223 aa 7 00006 2371 20 ldaq pr7|6,* p_key_string_ptr 000224 aa 777600 6770 04 eraq -128,ic 000024 = 077777000043 000001000000 000225 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 000226 aa 000005 6010 04 tnz 5,ic 000233 000227 aa 777575 2370 04 ldaq -131,ic 000024 = 077777000043 000001000000 000230 aa 6 00112 3715 20 epp5 pr6|74,* index_cursor_ptr 000231 aa 5 00006 7571 00 staq pr5|6 index_cursor.current_key_string_ptr 000232 aa 000041 7100 04 tra 33,ic 000273 STATEMENT 1 ON LINE 105 else if index_cursor.current_key_string_ptr ^= p_key_string_ptr then do; 000233 aa 6 00112 3715 20 epp5 pr6|74,* index_cursor_ptr 000234 aa 5 00006 2371 00 ldaq pr5|6 index_cursor.current_key_string_ptr 000235 aa 7 00006 6771 20 eraq pr7|6,* p_key_string_ptr 000236 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 000237 aa 000034 6000 04 tze 28,ic 000273 STATEMENT 1 ON LINE 108 cks_length = p_key_string_length; 000240 aa 7 00010 2361 20 ldq pr7|8,* p_key_string_length 000241 aa 6 00103 7561 00 stq pr6|67 cks_length STATEMENT 1 ON LINE 109 cksb_length = divide (cks_length, BITS_PER_DOUBLE_WORD, 35, 0) + 1; 000242 aa 000110 5060 07 div 72,dl 000243 aa 000044 7770 00 llr 36 000244 aa 000044 7330 00 lrs 36 000245 aa 000001 0330 07 adl 1,dl 000246 aa 6 00104 7561 00 stq pr6|68 cksb_length STATEMENT 1 ON LINE 110 alloc current_key_string_buffer in (index_cursor_area); 000247 aa 000002 2360 07 ldq 2,dl 000250 aa 6 00104 4021 00 mpy pr6|68 cksb_length 000251 aa 6 00110 3521 20 epp2 pr6|72,* index_cursor_area 000252 aa 0 01402 7001 00 tsx0 pr0|770 alloc_based 000253 aa 777774 7100 04 tra -4,ic 000247 000254 aa 6 00106 2521 00 spri2 pr6|70 current_key_string_ptr STATEMENT 1 ON LINE 111 current_key_string = p_key_string_ptr -> current_key_string; 000255 aa 6 00032 3735 20 epp7 pr6|26,* 000256 aa 7 00006 3715 20 epp5 pr7|6,* p_key_string_ptr 000257 aa 5 00000 3715 20 epp5 pr5|0,* p_key_string_ptr 000260 aa 6 00103 2351 00 lda pr6|67 cks_length 000261 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 000262 aa 5 00000 00 0005 descb pr5|0,al current_key_string 000263 aa 2 00000 00 0005 descb pr2|0,al current_key_string STATEMENT 1 ON LINE 112 index_cursor.current_key_string_ptr = current_key_string_ptr; 000264 aa 6 00112 3535 20 epp3 pr6|74,* index_cursor_ptr 000265 aa 3 00006 2521 00 spri2 pr3|6 index_cursor.current_key_string_ptr STATEMENT 1 ON LINE 113 index_cursor.current_key_string_length = cks_length; 000266 aa 6 00103 2361 00 ldq pr6|67 cks_length 000267 aa 000057 7370 00 lls 47 000270 aa 3 00010 6751 00 era pr3|8 index_cursor.current_key_string_length 000271 aa 0 00062 3751 00 ana pr0|50 = 777777774000 000272 aa 3 00010 6551 00 ersa pr3|8 index_cursor.current_key_string_length STATEMENT 1 ON LINE 114 end; STATEMENT 1 ON LINE 115 index_cursor.flags.is_at_end_of_index = local_at_end_of_index; 000273 aa 6 00102 2351 00 lda pr6|66 local_at_end_of_index 000274 aa 000001 7710 00 arl 1 000275 aa 6 00112 3715 20 epp5 pr6|74,* index_cursor_ptr 000276 aa 5 00012 6751 00 era pr5|10 index_cursor.is_at_end_of_index 000277 aa 200000 3750 03 ana 65536,du 000300 aa 5 00012 6551 00 ersa pr5|10 index_cursor.is_at_end_of_index STATEMENT 1 ON LINE 116 index_cursor.flags.is_at_beginning_of_index = local_at_beginning_of_index; 000301 aa 6 00101 2351 00 lda pr6|65 local_at_beginning_of_index 000302 aa 5 00012 6751 00 era pr5|10 index_cursor.is_at_beginning_of_index 000303 aa 0 00002 3751 00 ana pr0|2 = 400000000000 000304 aa 5 00012 6551 00 ersa pr5|10 index_cursor.is_at_beginning_of_index STATEMENT 1 ON LINE 117 index_cursor.flags.current_key_exists = local_current_key_exists; 000305 aa 6 00100 2351 00 lda pr6|64 local_current_key_exists 000306 aa 000002 7710 00 arl 2 000307 aa 5 00012 6751 00 era pr5|10 index_cursor.current_key_exists 000310 aa 100000 3750 03 ana 32768,du 000311 aa 5 00012 6551 00 ersa pr5|10 index_cursor.current_key_exists STATEMENT 1 ON LINE 118 index_cursor.key_id_string = p_key_id_string; 000312 aa 7 00004 2351 20 lda pr7|4,* p_key_id_string 000313 aa 5 00003 7551 00 sta pr5|3 index_cursor.key_id_string STATEMENT 1 ON LINE 119 index_cursor.flags.is_valid = "1"b; 000314 aa 040000 2350 03 lda 16384,du 000315 aa 5 00012 2551 00 orsa pr5|10 index_cursor.is_valid STATEMENT 1 ON LINE 120 return; 000316 aa 0 00631 7101 00 tra pr0|409 return STATEMENT 1 ON LINE 137 end im_set_cursor; BEGIN PROCEDURE CHECK_VERSION ENTRY TO CHECK_VERSION STATEMENT 1 ON LINE 122 CHECK_VERSION: proc (p_received_version, p_expected_version, p_structure_name); 000317 aa 6 00114 6501 00 spri4 pr6|76 000320 aa 6 00116 2521 00 spri2 pr6|78 000321 aa 2 00002 3521 01 epp2 pr2|2,au 000322 aa 6 00120 2521 00 spri2 pr6|80 000323 aa 2 00004 2361 20 ldq pr2|4,* 000324 aa 000002 6040 04 tmi 2,ic 000326 000325 aa 777777 3760 07 anq 262143,dl 000326 aa 0 00250 3761 00 anq pr0|168 = 000077777777 000327 aa 6 00131 7561 00 stq pr6|89 STATEMENT 1 ON LINE 127 if p_received_version ^= p_expected_version then call sub_err_ (error_table_$unimplemented_version, myname, ACTION_CANT_RESTART, null, 0, "^/Expected version ^d of the ^a structure. Received version ^d instead.", p_expected_version, p_structure_name, p_received_version); 000330 aa 6 00116 3735 20 epp7 pr6|78,* 000331 aa 7 00002 2361 20 ldq pr7|2,* p_received_version 000332 aa 7 00004 1161 20 cmpq pr7|4,* p_expected_version 000333 aa 000057 6000 04 tze 47,ic 000412 000334 aa 777470 3714 24 epp5 -200,ic* 000335 aa 6 00132 6515 00 spri5 pr6|90 000336 aa 6 00134 4501 00 stz pr6|92 000337 aa 000 100 100 404 mlr (ic),(pr),fill(000) 000340 aa 777472 00 0110 desc9a -198,72 000031 = 136057105170 000341 aa 6 00136 00 0110 desc9a pr6|94,72 000342 aa 6 00044 3701 20 epp4 pr6|36,* 000343 la 4 00012 3521 20 epp2 pr4|10,* error_table_$unimplemented_version 000344 aa 6 00162 2521 00 spri2 pr6|114 000345 aa 777434 3520 04 epp2 -228,ic 000001 = 151155137163 000346 aa 6 00164 2521 00 spri2 pr6|116 000347 aa 777447 3520 04 epp2 -217,ic 000016 = 400000000000 000350 aa 6 00166 2521 00 spri2 pr6|118 000351 aa 6 00132 3521 00 epp2 pr6|90 000352 aa 6 00170 2521 00 spri2 pr6|120 000353 aa 6 00134 3521 00 epp2 pr6|92 000354 aa 6 00172 2521 00 spri2 pr6|122 000355 aa 6 00136 3521 00 epp2 pr6|94 000356 aa 6 00174 2521 00 spri2 pr6|124 000357 aa 7 00004 3521 20 epp2 pr7|4,* p_expected_version 000360 aa 6 00176 2521 00 spri2 pr6|126 000361 aa 7 00006 3521 20 epp2 pr7|6,* p_structure_name 000362 aa 6 00200 2521 00 spri2 pr6|128 000363 aa 7 00002 3521 20 epp2 pr7|2,* p_received_version 000364 aa 6 00202 2521 00 spri2 pr6|130 000365 aa 777432 3520 04 epp2 -230,ic 000017 = 404000000043 000366 aa 6 00204 2521 00 spri2 pr6|132 000367 aa 6 00220 2521 00 spri2 pr6|144 000370 aa 6 00224 2521 00 spri2 pr6|148 000371 aa 777422 3520 04 epp2 -238,ic 000013 = 530000000040 000372 aa 6 00206 2521 00 spri2 pr6|134 000373 aa 777426 3520 04 epp2 -234,ic 000021 = 514000000044 000374 aa 6 00210 2521 00 spri2 pr6|136 000375 aa 777425 3520 04 epp2 -235,ic 000022 = 464000000000 000376 aa 6 00212 2521 00 spri2 pr6|138 000377 aa 777413 3520 04 epp2 -245,ic 000012 = 404000000005 000400 aa 6 00214 2521 00 spri2 pr6|140 000401 aa 777410 3520 04 epp2 -248,ic 000011 = 524000000107 000402 aa 6 00216 2521 00 spri2 pr6|142 000403 aa 6 00120 3535 20 epp3 pr6|80,* 000404 aa 3 00004 3521 20 epp2 pr3|4,* 000405 aa 6 00222 2521 00 spri2 pr6|146 000406 aa 6 00160 6211 00 eax1 pr6|112 000407 aa 044000 4310 07 fld 18432,dl 000410 la 4 00010 3521 20 epp2 pr4|8,* sub_err_ 000411 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 132 end CHECK_VERSION; 000412 aa 6 00114 6101 00 rtcd pr6|76 END PROCEDURE CHECK_VERSION END PROCEDURE im_set_cursor ----------------------------------------------------------- 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