COMPILATION LISTING OF SEGMENT vrmu_iocb_manager Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 11/21/84 1338.0 mst Wed Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* *********************************************************** */ 6 7 vrmu_iocb_manager: proc (); return; 8 9 /* . BEGIN_DESCRIPTION 10* 11* This module provides a common location for creating and 12* destroying iocbs in the vfile_relmgr_ programs. 13* 14* Also manages the list of vrm_iocb_list_block where cursor iocbs 15* are kept. 16* 17* There are 5 entry points: 18* 19* create_iocb for non-cursor use. 20* 21* destroy_iocb for non-cursor use. 22* 23* add_cursor_iocb 24* destroy_cursor_iocb 25* destroy_all_iocbs_for_oid 26* 27* . END_DESCRIPTION 28**/ 29 30 /* History 31* 32* 82-11-16 R. Harvey: Initially written 33* 34* 82-12-09 Modified by Roger Lackey : To added vrm_iocb_list_block handling 35* 36* 83-06-21 Roger Lackey : Make sure that there is room for two iocb_ptrs in 37* vrm_iocb_list_block, the cursor iocb_ptr and the secondary_iocb_ptr. 38* 39* 83-10-04 Roger Lackey : added the initiazation of quit_signaled = "0"b 40* and to free last block in list in destroy_all_iocb_for_oid 41* 42* 84-10-22 Thanh Nguyen : Added looping three more times to open a relation 43* in case of the heavy loaded system, and the relation is busy in the 44* subroutine attach_and_open. 45**/ 46 47 create_iocb: entry (I_rel_dir, I_rel_name, I_open_mode, I_stationary, I_caller_name, O_iocb_ptr, O_code); 48 49 /* This is for non-cursor type iocbs */ 50 51 dcl I_rel_dir char (*) parameter; 52 dcl I_rel_name char (*) parameter; 53 dcl I_open_mode fixed bin parameter; 54 dcl I_stationary bit (1) aligned parameter; 55 dcl I_caller_name char (*) parameter; 56 dcl O_iocb_ptr ptr parameter; 57 dcl O_code fixed bin (35) parameter; 58 59 atd = "vfile_ "; 60 atd = atd || rtrim (I_rel_dir); 61 atd = atd || ">"; 62 atd = atd || rtrim (I_rel_name); 63 atd = atd || " -dup_ok -share "; 64 atd = atd || ltrim (char (vrm_data_$max_vfile_wait_time)); 65 66 67 if I_stationary then 68 atd = atd || " -stationary"; 69 70 attach_desc = atd; 71 72 call attach_and_open (I_caller_name, attach_desc, I_open_mode, O_iocb_ptr, O_code); 73 return; 74 75 destroy_iocb: entry (I_di_iocb_ptr, O_code); 76 77 dcl I_di_iocb_ptr ptr parameter; 78 79 /* dcl O_code fixed bin (35) parameter; error code declared else where */ 80 81 call delete_iocb (I_di_iocb_ptr, code); /* Call internal proc to do the work */ 82 O_code = code; 83 84 return; 85 86 /* * * * * * * * * * * * add_cursor_iocb * * * * * * * * * * * * */ 87 88 add_cursor_iocb: entry (I_ac_cursor_ptr, O_code); 89 90 91 /* This entry point creates and opens an iocb and adds it to the list of iocbs 92* for a specific open_id */ 93 94 dcl I_ac_cursor_ptr ptr parameter; /* Pointer to vrm_cursor */ 95 96 /* dcl O_code fixed bin (35) parameter; error code declared else where */ 97 98 vrm_cursor_ptr = I_ac_cursor_ptr; 99 vrm_rel_desc_ptr = vrm_cursor.vrm_relation_desc_ptr; 100 vrm_open_info_ptr = vrm_cursor.open_info_ptr; 101 102 vrm_iocb_list_block_ptr = vrm_open_info.iocb_list_ptr; 103 104 do while (vrm_iocb_list_block.next_block_ptr ^= null); 105 106 vrm_iocb_list_block_ptr = vrm_iocb_list_block.next_block_ptr; 107 end; 108 109 /* We must make room for two iocbs_ptrs the cursor_iocb and the secondary_iocb_ptr 110* This procedure only attaches and opens the cursor iocb, 111* the secondary_iocb_ptr is set to null here 112* and is attached and opened when needed by vrmu_search */ 113 114 if vrm_iocb_list_block.num_iocbs_used + 2 > vrm_data_$iocb_list_block_size then do; 115 116 save_vrm_iocb_list_block_ptr = vrm_iocb_list_block_ptr; 117 118 vrm_com_ptr = vrm_open_info.com_ptr; 119 120 allocate vrm_iocb_list_block in (vrm_com.oid_area) set (vrm_iocb_list_block_ptr); 121 122 quit_signaled = "0"b; 123 on quit quit_signaled = "1"b; 124 125 vrm_iocb_list_block.num_iocbs_used = 0; 126 vrm_iocb_list_block.prev_block_ptr = save_vrm_iocb_list_block_ptr; 127 vrm_iocb_list_block.next_block_ptr = null; 128 vrm_iocb_list_block.iocbs = null; /* Init all to null */ 129 save_vrm_iocb_list_block_ptr -> vrm_iocb_list_block.next_block_ptr = 130 vrm_iocb_list_block_ptr; 131 132 revert quit; 133 134 if quit_signaled then signal quit; 135 end; 136 137 atd = "vfile_ "; 138 atd = atd || rtrim (vrm_open_info.database_dir_path); 139 atd = atd || ">"; 140 atd = atd || rtrim (vrm_open_info.relation_name); 141 atd = atd || " -dup_ok -share "; 142 atd = atd || ltrim (char (vrm_data_$max_vfile_wait_time)); 143 144 if vrm_rel_desc.switches.stationary_records then 145 atd = atd || " -stationary"; 146 147 attach_desc = atd; 148 149 picture_opening_id = binary (vrm_cursor.opening_id); 150 151 open_mode = KSQU; /* Try KSQU first */ 152 153 call attach_and_open (".file_" || picture_opening_id, attach_desc, open_mode, iocb_ptr, code); 154 155 if code = 0 then do; 156 vrm_iocb_list_block.num_iocbs_used = vrm_iocb_list_block.num_iocbs_used + 1; 157 vrm_iocb_list_block.iocbs (vrm_iocb_list_block.num_iocbs_used) = iocb_ptr; 158 vrm_cursor.iocb_ptr = iocb_ptr; 159 vrm_cursor.vrm_iocb_list_block_ptr = 160 vrm_iocb_list_block_ptr; 161 vrm_cursor.vrm_iocb_list_block_iocbs_ix = 162 vrm_iocb_list_block.num_iocbs_used; 163 164 vrm_iocb_list_block.num_iocbs_used = /* Because the secondatry_iocb_ptr goes in this slot */ 165 vrm_iocb_list_block.num_iocbs_used + 1; 166 vrm_cursor.opening_mode = open_mode; 167 end; 168 169 O_code = code; 170 return; 171 172 173 /* * * * * * * * * * * * * * destroy_cursor_iocb * * * * * * * * * * * * */ 174 175 destroy_cursor_iocb: entry (I_dc_cursor_ptr, O_code); 176 177 /* This entry point will destroy the iocbs associated with a particular cursor */ 178 179 180 /* HISTORY: 181*83-06-21 Roger Lackey added code to destroy the secondary iocb_ptr 182**/ 183 184 dcl I_dc_cursor_ptr ptr parameter; /* Pointer to vrm_cursor */ 185 186 /* dcl O_code fixed bin (35) parameter; error code declared else where */ 187 188 code = 0; 189 190 vrm_cursor_ptr = I_dc_cursor_ptr; 191 192 vrm_iocb_list_block_ptr = vrm_cursor.vrm_iocb_list_block_ptr; 193 194 if vrm_iocb_list_block.iocbs (vrm_cursor.vrm_iocb_list_block_iocbs_ix + 1) ^= 195 null then /* If vrm_cursor.secondary_iocb_ptr exists */ 196 call delete_iocb (vrm_iocb_list_block.iocbs (vrm_cursor.vrm_iocb_list_block_iocbs_ix + 1), code); 197 198 vrm_iocb_list_block.iocbs (vrm_cursor.vrm_iocb_list_block_iocbs_ix + 1) = null; 199 200 vrm_cursor.secondary_iocb_ptr = null; 201 202 if vrm_iocb_list_block.iocbs (vrm_cursor.vrm_iocb_list_block_iocbs_ix) ^= null then 203 call delete_iocb (vrm_iocb_list_block.iocbs (vrm_cursor.vrm_iocb_list_block_iocbs_ix), code); 204 205 vrm_iocb_list_block.iocbs (vrm_cursor.vrm_iocb_list_block_iocbs_ix) = null; 206 207 vrm_cursor.iocb_ptr = null; 208 209 vrm_cursor.vrm_iocb_list_block_ptr = null; 210 211 vrm_cursor.vrm_iocb_list_block_iocbs_ix = 0; 212 213 O_code = code; 214 215 return; /* Return from destroy_cursor_iocb */ 216 217 218 /* * * * * * * * * * * * * * destroy_all_iocbs_for_oid * * * * * * * * */ 219 220 destroy_all_iocbs_for_oid: entry (I_open_info_ptr, O_code); 221 222 /* The purpose of this entry is to destroy all the iocbs for a given opening_id */ 223 224 225 dcl I_open_info_ptr ptr parameter; 226 227 /* dcl O_code fixed bin (35) parameter; Defined else where */ 228 229 vrm_open_info_ptr = I_open_info_ptr; 230 O_code = 0; 231 232 if vrm_open_info.iocb_list_ptr = null then return;/* Nothing to do */ 233 234 vrm_iocb_list_block_ptr = vrm_open_info.iocb_list_ptr; 235 236 do while (vrm_iocb_list_block.next_block_ptr ^= null); /* Find last block */ 237 238 vrm_iocb_list_block_ptr = vrm_iocb_list_block.next_block_ptr; 239 end; 240 241 code = 0; 242 243 delete_loop: 244 do i = 1 to vrm_iocb_list_block.num_iocbs_used while (code = 0); 245 246 if vrm_iocb_list_block.iocbs (i) ^= null then 247 call delete_iocb (vrm_iocb_list_block.iocbs (i), code); 248 vrm_iocb_list_block.iocbs (i) = null; 249 end; 250 251 if code = 0 & vrm_iocb_list_block.prev_block_ptr ^= null then do; 252 save_vrm_iocb_list_block_ptr = vrm_iocb_list_block_ptr; 253 vrm_iocb_list_block_ptr = save_vrm_iocb_list_block_ptr -> 254 vrm_iocb_list_block.prev_block_ptr; 255 256 vrm_iocb_list_block.next_block_ptr = null; 257 258 quit_signaled = "0"b; 259 on quit quit_signaled = "1"b; 260 free save_vrm_iocb_list_block_ptr -> vrm_iocb_list_block; 261 revert quit; 262 if quit_signaled then signal quit; 263 264 goto delete_loop; 265 end; 266 else do; /* Last block (first in list) */ 267 quit_signaled = "0"b; 268 on quit quit_signaled = "1"b; 269 free vrm_iocb_list_block_ptr -> vrm_iocb_list_block; 270 vrm_open_info.iocb_list_ptr = null; 271 revert quit; 272 if quit_signaled then signal quit; 273 end; 274 275 O_code = code; 276 277 return; /* return from destroy_all_iocbs_for_oid */ 278 279 280 /* * * * * * * * * * * * * * * * * attach_and_open * * * * * * * * * * * */ 281 282 attach_and_open: procedure (I_ao_caller_name, I_attach_desc, I_ao_open_mode, O_ao_iocb_ptr, O_ao_code); 283 284 dcl O_ao_code fixed bin (35) parameter; 285 dcl O_ao_iocb_ptr ptr parameter; 286 dcl I_ao_caller_name char (*) parameter; 287 dcl I_ao_open_mode fixed bin parameter; 288 dcl I_attach_desc char (*) parameter; 289 dcl count fixed bin (17); 290 291 292 /* attach and open the data vfile, filling in the iocb pointer */ 293 294 call iox_$attach_name (unique_chars_ ("0"b) || I_ao_caller_name, 295 O_ao_iocb_ptr, 296 rtrim (I_attach_desc), null (), code); 297 if code ^= 0 298 then do; 299 O_ao_iocb_ptr = null (); 300 O_ao_code = code; 301 end; 302 else do; 303 open_mode = I_ao_open_mode; 304 call iox_$open (O_ao_iocb_ptr, 305 open_mode, "0"b, code); 306 if code = error_table_$moderr & open_mode = KSQU /* if not access to open with KSQU */ 307 then do; /* try with just KSQR */ 308 open_mode = KSQR; /* reduce mode and try again */ 309 call iox_$open (O_ao_iocb_ptr, 310 open_mode, "0"b, code); 311 end; 312 313 /* Just in case the relation is busy by other process. */ 314 do count = 1 to 3 while (code = error_table_$file_busy); 315 call iox_$open (O_ao_iocb_ptr, open_mode, "0"b, code); 316 end; 317 318 if code = 0 then call iox_$position (O_ao_iocb_ptr, -1, /* Init position to BOF */ 319 0, code); 320 321 if code ^= 0 then do; 322 O_ao_code = code; 323 end; 324 else O_ao_code = 0; 325 end; 326 327 return; 328 end attach_and_open; 329 330 /* * * * * * * * * * * * delete_iocb * * * * * * * * * * * * * * * */ 331 332 delete_iocb: proc (I_d_iocb_ptr, O_d_i_code); 333 334 dcl I_d_iocb_ptr ptr parameter; 335 dcl O_d_i_code fixed bin (35) parameter; 336 337 call iox_$close (I_d_iocb_ptr, O_d_i_code); 338 339 if O_d_i_code = 0 then do; 340 call iox_$detach_iocb (I_d_iocb_ptr, O_d_i_code); 341 342 if O_d_i_code = 0 then 343 call iox_$destroy_iocb (I_d_iocb_ptr, O_d_i_code); 344 345 end; 346 347 end delete_iocb; 348 1 1 /* BEGIN INCLUDE vrm_iocb_list_block.incl.pl1 */ 1 2 1 3 dcl vrm_iocb_list_block_ptr pointer; 1 4 1 5 dcl 1 vrm_iocb_list_block aligned based (vrm_iocb_list_block_ptr), 1 6 2 num_iocbs_used fixed bin, /* Number of iocbs used in this block */ 1 7 2 prev_block_ptr ptr unal, /* Pointer to previous block or 1 8* or null if first block */ 1 9 2 next_block_ptr ptr unal, /* Pointer to next block or null */ 1 10 2 iocbs (vrm_data_$iocb_list_block_size) pointer; /* Iocb pointers */ 1 11 1 12 /* END INCLUDE vrm_iocb_list_block.incl.pl1 */ 349 350 2 1 /* BEGIN INCLUDE vrm_cursor.incl.pl1 */ 2 2 2 3 /* 83-05-26 Roger Lackey : Modifyed for relation cursors */ 2 4 2 5 dcl vrm_cursor_ptr pointer; /* Pointer to this structure */ 2 6 2 7 dcl 1 vrm_cursor aligned based (vrm_cursor_ptr), /* vfile relation manager cursor */ 2 8 2 opening_id bit (36) aligned, /* ID of opening associated with this cursor */ 2 9 2 debug_sw unal, /* Undefined MBZ */ 2 10 3 trace_open bit (1) unal, /* Show opening of iocb cursor creation time */ 2 11 3 pad bit (35) unal, 2 12 2 switches, 2 13 3 shared bit (1) unal, /* Other processes can use this relation */ 2 14 3 meter_sw bit (1) unal, /* On = Keep meters for this cursor */ 2 15 3 pad bit (7) unal, /* Unsed */ 2 16 2 opening_mode fixed bin, /* Opening mode for this cursor (8 = KSQR 10 = KSQU) */ 2 17 2 open_info_ptr pointer, /* Pointer to parent opening info structure */ 2 18 2 vrm_relation_desc_ptr pointer, /* Pointer to parent rel desc */ 2 19 2 iocb_ptr pointer, /* Pointer to attach iocb */ 2 20 2 secondary_iocb_ptr ptr, /* Second iocb_ptr used by vrmu_search */ 2 21 2 search_list_ptr ptr, /* Pointer to search_list */ 2 22 2 search_keys_ptr ptr, /* Pointer to search_keys array */ 2 23 2 meter_ptr pointer, /* Pointer metering str if metering is on or null */ 2 24 2 vrm_iocb_list_block_ptr pointer, /* Pointer to vrm_iocb_list_block that contains this cursors iocb */ 2 25 2 vrm_iocb_list_block_iocbs_ix fixed bin; /* Index into list_block.iocbs for location of iocb */ 2 26 2 27 2 28 /* END INCLUDE vrm_cursor.incl.pl1 */ 351 352 3 1 /* BEGIN INCLUDE vrm_rel_desc.incl.pl1 */ 3 2 3 3 /* 83-05-26 Roger Lackey : Added vrm_attr_info.key_head bit for relation_cursors */ 3 4 3 5 dcl 1 vrm_rel_desc based (vrm_rel_desc_ptr), 3 6 2 record_id bit (12) unal, /* Distinguish us from tuples and collection records */ 3 7 2 version char (8), /* Version of this structure */ 3 8 2 file_id bit (7), /* Value of file id from model */ 3 9 2 rel_id bit (12), /* Relation id */ 3 10 2 switches, 3 11 3 MRDS_compatible bit (1) unal, /* For pre-relation_manager_ MRDS */ 3 12 3 stationary_records 3 13 bit (1) unal, /* On = stationary */ 3 14 3 indexed bit (1) unal, /* This relation has attributes with secondary indices */ 3 15 3 pad bit (33) unal, 3 16 2 var_offset fixed bin (35), /* Position of first varying attr */ 3 17 2 maximum_data_length 3 18 fixed bin (35), /* Maximum size of tuple in characters */ 3 19 2 number_primary_key_attrs 3 20 fixed bin, /* Number of attributes which make up the primary key */ 3 21 2 number_sec_indexes fixed bin, /* Number of attributes which have a secondary index */ 3 22 2 last_var_attr_no fixed bin, /* Attr index of last varying attribute */ 3 23 2 number_var_attrs fixed bin, /* Number of varying attributes */ 3 24 2 number_attrs fixed bin, /* Number of attribute in rel */ 3 25 2 attr (vrd_no_of_attrs /* Description of each attribute */ 3 26 refer (vrm_rel_desc.number_attrs)) aligned like vrm_attr_info; 3 27 3 28 dcl 1 vrm_attr_info based (vrm_attr_info_ptr), 3 29 /* Attribute specific info */ 3 30 2 name char (32), /* Name of the attribute */ 3 31 2 descriptor bit (36) aligned, /* domain descriptor */ 3 32 2 varying bit (1) unal, /* ON = This is a varying string */ 3 33 2 key_head bit (1) unal, /* ON = This attr can be a keyhead */ 3 34 2 primary_key_attr bit (1) unal, /* ON = This is a primary key attribute */ 3 35 2 pad bit (15) unal, /* unused */ 3 36 2 index_collextion_ix fixed bin (17) unal, /* Index into vrm_open_info.index_collection array if key_head is on */ 3 37 2 bit_length fixed bin (35), /* Maximum bit length of tuple */ 3 38 2 bit_offset fixed bin (35); /* Offset in tuple if fixed, index to offset in tuple if varying */ 3 39 3 40 3 41 dcl vrm_rel_desc_ptr pointer; 3 42 dcl vrd_no_of_attrs fixed bin; 3 43 dcl VRM_REL_DESC_RECORD_ID bit (12) unal int static options (constant) init ("100000000000"b); 3 44 dcl VRM_REL_DESC_VERSION_1 char (8) int static options (constant) init (" 1"); 3 45 dcl vrm_attr_info_ptr pointer; 3 46 dcl VRM_REL_DESC_KEY char (256) varying int static options (constant) init ("@relation_description"); 3 47 3 48 /* END INCLUDE vrm_rel_desc.incl.pl1 */ 353 354 4 1 /* BEGIN INCLUDE vrm_open_info.incl.pl1 */ 4 2 4 3 /* R. Harvey 82-11-02 4 4* 82-09-82 Roger Lackey: added iocb_list_ptr */ 4 5 4 6 dcl 1 vrm_open_info aligned based (vrm_open_info_ptr), /* Vfile relation description */ 4 7 2 version char (8), /* Version number of this structure */ 4 8 2 opening_id bit (36) aligned, /* Opening id associated with this desc */ 4 9 2 file_uid bit (36) aligned, /* Unique id of msf dir */ 4 10 2 number_of_openings fixed bin, /* Number of separate calls to vrm$open */ 4 11 2 switches, 4 12 3 shared bit (1) unal, /* Open relation in shared mode */ 4 13 3 pad bit (35) unal init ("0"b), /* Unused must be zero */ 4 14 2 database_dir_path char (168) varying, /* Absolute path of database */ 4 15 2 relation_name char (30) varying, /* Name of relation */ 4 16 2 relation_model_ptr pointer, /* Pointer to the relation_model in the relation itself or a temp seg */ 4 17 2 com_ptr pointer, /* Temp seg for cursors and scratch space */ 4 18 2 iocb_list_ptr pointer, /* Pointer to first vrm_iocb_list_block */ 4 19 2 primary_key_info_ptr pointer, /* Special case collection info ptr */ 4 20 2 number_of_index_collections fixed bin, /* Count of index collections (include primary key) */ 4 21 2 index_collection (voi_no_of_index_collections 4 22 refer (vrm_open_info.number_of_index_collections)), 4 23 3 id bit (36), 4 24 3 info_ptr ptr unal; /* Points to more detailed info */ 4 25 4 26 4 27 dcl VRM_OPEN_INFO_VERSION_1 char (8) int static options (constant) init (" 1"); 4 28 dcl vrm_open_info_ptr ptr; 4 29 dcl voi_no_of_index_collections fixed bin; 4 30 4 31 /* END INCLUDE vrm_open_info.incl.pl1 */ 355 356 5 1 /* BEGIN INCLUDE vrm_com.incl.pl1 */ 5 2 5 3 /* Written 82-08-23 by R. Harvey */ 5 4 5 5 dcl vrm_com_ptr ptr; 5 6 dcl 1 vrm_com aligned based (vrm_com_ptr), 5 7 2 get_seg_ptr ptr, /* temp seg for retrieve routines */ 5 8 2 put_seg_ptr ptr, /* temp seg for store routines */ 5 9 2 mod_seg_ptr ptr, /* temp seg for modify routines */ 5 10 2 work_area_ptr ptr, /* freeing area for oid_table sections and rel_descriptors */ 5 11 2 highest_oid bit (36) aligned, /* highest valid oid */ 5 12 2 next_free_oid bit (36) aligned, /* offset of first in free chain */ 5 13 2 first_assigned_oid bit (36) aligned, /* offset of first in assigned chain */ 5 14 2 oid_area area (sys_info$max_seg_size - fixed (rel (addr (vrm_com.work_area_ptr)))); 5 15 5 16 /* END INCLUDE vrm_com.incl.pl1 */ 357 358 359 /* Automatic */ 360 361 dcl atd char (344) varying; 362 dcl attach_desc char (344); 363 dcl code fixed bin (35); 364 dcl save_vrm_iocb_list_block_ptr ptr; 365 dcl i fixed bin (24); 366 dcl iocb_ptr ptr; 367 dcl open_mode fixed bin; 368 dcl picture_opening_id pic "99999"; 369 dcl quit_signaled bit (1); 370 371 /* Conditions */ 372 373 dcl quit condition; 374 375 /* Builtin */ 376 377 dcl (binary, char, ltrim, null, rtrim) builtin; 378 379 /* External entry */ 380 381 dcl iox_$attach_name entry (char (*), ptr, char (*), ptr, fixed bin (35)); 382 dcl iox_$close entry (ptr, fixed bin (35)); 383 dcl iox_$detach_iocb entry (ptr, fixed bin (35)); 384 dcl iox_$destroy_iocb entry (ptr, fixed bin (35)); 385 dcl iox_$open entry (ptr, fixed bin, bit (1) aligned, fixed bin (35)); 386 dcl iox_$position entry (ptr, fixed bin, fixed bin (21), fixed bin (35)); 387 dcl unique_chars_ entry (bit (*)) returns (char (15)); 388 389 390 /* External static */ 391 392 dcl (error_table_$file_busy, 393 error_table_$moderr, 394 sys_info$max_seg_size, 395 vrm_data_$max_vfile_wait_time 396 ) fixed bin (35) ext static; 397 398 dcl vrm_data_$iocb_list_block_size ext static fixed bin; 399 400 /* Internal static */ 401 402 dcl KSQR fixed bin int static init (8) options (constant); 403 dcl KSQU fixed bin int static init (10) options (constant); 404 405 406 407 408 409 end vrmu_iocb_manager; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/21/84 0920.3 vrmu_iocb_manager.pl1 >special_ldd>online>mrds_install>vrmu_iocb_manager.pl1 349 1 10/14/83 1609.1 vrm_iocb_list_block.incl.pl1 >ldd>include>vrm_iocb_list_block.incl.pl1 351 2 10/14/83 1609.1 vrm_cursor.incl.pl1 >ldd>include>vrm_cursor.incl.pl1 353 3 10/14/83 1609.1 vrm_rel_desc.incl.pl1 >ldd>include>vrm_rel_desc.incl.pl1 355 4 10/14/83 1609.1 vrm_open_info.incl.pl1 >ldd>include>vrm_open_info.incl.pl1 357 5 10/14/83 1609.1 vrm_com.incl.pl1 >ldd>include>vrm_com.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. I_ac_cursor_ptr parameter pointer dcl 94 ref 88 98 I_ao_caller_name parameter char unaligned dcl 286 ref 282 294 I_ao_open_mode parameter fixed bin(17,0) dcl 287 ref 282 303 I_attach_desc parameter char unaligned dcl 288 ref 282 294 294 I_caller_name parameter char unaligned dcl 55 set ref 47 72* I_d_iocb_ptr parameter pointer dcl 334 set ref 332 337* 340* 342* I_dc_cursor_ptr parameter pointer dcl 184 ref 175 190 I_di_iocb_ptr parameter pointer dcl 77 set ref 75 81* I_open_info_ptr parameter pointer dcl 225 ref 220 229 I_open_mode parameter fixed bin(17,0) dcl 53 set ref 47 72* I_rel_dir parameter char unaligned dcl 51 ref 47 60 I_rel_name parameter char unaligned dcl 52 ref 47 62 I_stationary parameter bit(1) dcl 54 ref 47 67 KSQR constant fixed bin(17,0) initial dcl 402 ref 308 KSQU constant fixed bin(17,0) initial dcl 403 ref 151 306 O_ao_code parameter fixed bin(35,0) dcl 284 set ref 282 300* 322* 324* O_ao_iocb_ptr parameter pointer dcl 285 set ref 282 294* 299* 304* 309* 315* 318* O_code parameter fixed bin(35,0) dcl 57 set ref 47 72* 75 82* 88 169* 175 213* 220 230* 275* O_d_i_code parameter fixed bin(35,0) dcl 335 set ref 332 337* 339 340* 342 342* O_iocb_ptr parameter pointer dcl 56 set ref 47 72* atd 000112 automatic varying char(344) dcl 361 set ref 59* 60* 60 61* 61 62* 62 63* 63 64* 64 67* 67 70 137* 138* 138 139* 139 140* 140 141* 141 142* 142 144* 144 147 attach_desc 000241 automatic char(344) unaligned dcl 362 set ref 70* 72* 147* 153* binary builtin function dcl 377 ref 149 char builtin function dcl 377 ref 64 142 code 000367 automatic fixed bin(35,0) dcl 363 set ref 81* 82 153* 155 169 188* 194* 202* 213 241* 243 246* 251 275 294* 297 300 304* 306 309* 314 315* 318 318* 321 322 com_ptr 74 based pointer level 2 dcl 4-6 ref 118 count 000424 automatic fixed bin(17,0) dcl 289 set ref 314* database_dir_path 6 based varying char(168) level 2 dcl 4-6 ref 138 error_table_$file_busy 000026 external static fixed bin(35,0) dcl 392 ref 314 error_table_$moderr 000030 external static fixed bin(35,0) dcl 392 ref 306 i 000372 automatic fixed bin(24,0) dcl 365 set ref 243* 246 246 248* iocb_list_ptr 76 based pointer level 2 dcl 4-6 set ref 102 232 234 270* iocb_ptr 10 based pointer level 2 in structure "vrm_cursor" dcl 2-7 in procedure "vrmu_iocb_manager" set ref 158* 207* iocb_ptr 000374 automatic pointer dcl 366 in procedure "vrmu_iocb_manager" set ref 153* 157 158 iocbs 4 based pointer array level 2 dcl 1-5 set ref 128* 157* 194 194* 198* 202 202* 205* 246 246* 248* iox_$attach_name 000010 constant entry external dcl 381 ref 294 iox_$close 000012 constant entry external dcl 382 ref 337 iox_$destroy_iocb 000016 constant entry external dcl 384 ref 342 iox_$detach_iocb 000014 constant entry external dcl 383 ref 340 iox_$open 000020 constant entry external dcl 385 ref 304 309 315 iox_$position 000022 constant entry external dcl 386 ref 318 ltrim builtin function dcl 377 ref 64 142 next_block_ptr 2 based pointer level 2 packed unaligned dcl 1-5 set ref 104 106 127* 129* 236 238 256* null builtin function dcl 377 ref 104 127 128 194 198 200 202 205 207 209 232 236 246 248 251 256 270 294 294 299 num_iocbs_used based fixed bin(17,0) level 2 dcl 1-5 set ref 114 125* 156* 156 157 161 164* 164 243 oid_area 14 based area level 2 dcl 5-6 ref 120 open_info_ptr 4 based pointer level 2 dcl 2-7 ref 100 open_mode 000376 automatic fixed bin(17,0) dcl 367 set ref 151* 153* 166 303* 304* 306 308* 309* 315* opening_id based bit(36) level 2 dcl 2-7 ref 149 opening_mode 3 based fixed bin(17,0) level 2 dcl 2-7 set ref 166* picture_opening_id 000400 automatic picture(5) unaligned dcl 368 set ref 149* 153 prev_block_ptr 1 based pointer level 2 packed unaligned dcl 1-5 set ref 126* 251 253 quit 000404 stack reference condition dcl 373 ref 123 132 134 259 261 262 268 271 272 quit_signaled 000402 automatic bit(1) unaligned dcl 369 set ref 122* 123* 134 258* 259* 262 267* 268* 272 relation_name 61 based varying char(30) level 2 dcl 4-6 ref 140 rtrim builtin function dcl 377 ref 60 62 138 140 294 294 save_vrm_iocb_list_block_ptr 000370 automatic pointer dcl 364 set ref 116* 126 129 252* 253 260 secondary_iocb_ptr 12 based pointer level 2 dcl 2-7 set ref 200* stationary_records 3(02) based bit(1) level 3 packed unaligned dcl 3-5 ref 144 switches 3(01) based structure level 2 packed unaligned dcl 3-5 unique_chars_ 000024 constant entry external dcl 387 ref 294 vrm_attr_info based structure level 1 unaligned dcl 3-28 vrm_com based structure level 1 dcl 5-6 vrm_com_ptr 000110 automatic pointer dcl 5-5 set ref 118* 120 vrm_cursor based structure level 1 dcl 2-7 vrm_cursor_ptr 000102 automatic pointer dcl 2-5 set ref 98* 99 100 149 158 159 161 166 190* 192 194 194 198 200 202 202 205 207 209 211 vrm_data_$iocb_list_block_size 000034 external static fixed bin(17,0) dcl 398 ref 114 120 128 260 269 vrm_data_$max_vfile_wait_time 000032 external static fixed bin(35,0) dcl 392 ref 64 142 vrm_iocb_list_block based structure level 1 dcl 1-5 set ref 120 260 269 vrm_iocb_list_block_iocbs_ix 24 based fixed bin(17,0) level 2 dcl 2-7 set ref 161* 194 194 198 202 202 205 211* vrm_iocb_list_block_ptr 000100 automatic pointer dcl 1-3 in procedure "vrmu_iocb_manager" set ref 102* 104 106* 106 114 116 120* 125 126 127 128 129 156 156 157 157 159 161 164 164 192* 194 194 198 202 202 205 234* 236 238* 238 243 246 246 248 251 252 253* 256 269 vrm_iocb_list_block_ptr 22 based pointer level 2 in structure "vrm_cursor" dcl 2-7 in procedure "vrmu_iocb_manager" set ref 159* 192 209* vrm_open_info based structure level 1 dcl 4-6 vrm_open_info_ptr 000106 automatic pointer dcl 4-28 set ref 100* 102 118 138 140 229* 232 234 270 vrm_rel_desc based structure level 1 unaligned dcl 3-5 vrm_rel_desc_ptr 000104 automatic pointer dcl 3-41 set ref 99* 144 vrm_relation_desc_ptr 6 based pointer level 2 dcl 2-7 ref 99 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. VRM_OPEN_INFO_VERSION_1 internal static char(8) initial unaligned dcl 4-27 VRM_REL_DESC_KEY internal static varying char(256) initial dcl 3-46 VRM_REL_DESC_RECORD_ID internal static bit(12) initial unaligned dcl 3-43 VRM_REL_DESC_VERSION_1 internal static char(8) initial unaligned dcl 3-44 sys_info$max_seg_size external static fixed bin(35,0) dcl 392 voi_no_of_index_collections automatic fixed bin(17,0) dcl 4-29 vrd_no_of_attrs automatic fixed bin(17,0) dcl 3-42 vrm_attr_info_ptr automatic pointer dcl 3-45 NAMES DECLARED BY EXPLICIT CONTEXT. add_cursor_iocb 000342 constant entry external dcl 88 attach_and_open 001241 constant entry internal dcl 282 ref 72 153 create_iocb 000044 constant entry external dcl 47 delete_iocb 001543 constant entry internal dcl 332 ref 81 194 202 246 delete_loop 001062 constant label dcl 243 ref 264 destroy_all_iocbs_for_oid 001026 constant entry external dcl 220 destroy_cursor_iocb 000725 constant entry external dcl 175 destroy_iocb 000314 constant entry external dcl 75 vrmu_iocb_manager 000030 constant entry external dcl 7 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2072 2130 1643 2102 Length 2444 1643 36 300 226 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME vrmu_iocb_manager 382 external procedure is an external procedure. on unit on line 123 64 on unit on unit on line 259 64 on unit on unit on line 268 64 on unit attach_and_open internal procedure shares stack frame of external procedure vrmu_iocb_manager. delete_iocb internal procedure shares stack frame of external procedure vrmu_iocb_manager. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME vrmu_iocb_manager 000100 vrm_iocb_list_block_ptr vrmu_iocb_manager 000102 vrm_cursor_ptr vrmu_iocb_manager 000104 vrm_rel_desc_ptr vrmu_iocb_manager 000106 vrm_open_info_ptr vrmu_iocb_manager 000110 vrm_com_ptr vrmu_iocb_manager 000112 atd vrmu_iocb_manager 000241 attach_desc vrmu_iocb_manager 000367 code vrmu_iocb_manager 000370 save_vrm_iocb_list_block_ptr vrmu_iocb_manager 000372 i vrmu_iocb_manager 000374 iocb_ptr vrmu_iocb_manager 000376 open_mode vrmu_iocb_manager 000400 picture_opening_id vrmu_iocb_manager 000402 quit_signaled vrmu_iocb_manager 000424 count attach_and_open THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_cs call_ext_out_desc call_ext_out return signal enable shorten_stack ext_entry ext_entry_desc int_entry alloc_based free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. iox_$attach_name iox_$close iox_$destroy_iocb iox_$detach_iocb iox_$open iox_$position unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$file_busy error_table_$moderr vrm_data_$iocb_list_block_size vrm_data_$max_vfile_wait_time LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 7 000027 7 000035 47 000036 59 000074 60 000101 61 000130 62 000137 63 000165 64 000177 67 000235 70 000252 72 000256 73 000307 75 000310 81 000324 82 000335 84 000337 88 000340 98 000352 99 000356 100 000360 102 000362 104 000364 106 000370 107 000372 114 000373 116 000400 118 000401 120 000404 122 000415 123 000416 125 000436 126 000437 127 000442 128 000444 129 000461 132 000463 134 000464 137 000471 138 000476 139 000524 140 000533 141 000560 142 000572 144 000630 147 000646 149 000652 151 000665 153 000667 155 000700 156 000702 157 000703 158 000710 159 000712 161 000713 164 000715 166 000716 169 000720 170 000722 175 000723 188 000735 190 000736 192 000742 194 000744 198 000764 200 000773 202 000774 205 001007 207 001016 209 001017 211 001020 213 001021 215 001023 220 001024 229 001036 230 001042 232 001043 234 001047 236 001051 238 001056 239 001060 241 001061 243 001062 246 001073 248 001114 249 001122 251 001124 252 001132 253 001133 256 001136 258 001140 259 001141 260 001161 261 001167 262 001170 264 001175 267 001176 268 001177 269 001217 270 001225 271 001230 272 001231 275 001236 277 001240 282 001241 294 001257 297 001373 299 001376 300 001401 301 001403 303 001404 304 001407 306 001426 308 001435 309 001437 314 001456 315 001467 316 001506 318 001510 321 001533 322 001535 323 001537 324 001540 327 001542 332 001543 337 001545 339 001557 340 001562 342 001573 347 001607 ----------------------------------------------------------- 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