COMPILATION LISTING OF SEGMENT vfile_status_ Compiled by: Multics PL/I Compiler, Release 28b, of April 11, 1983 Compiled at: Honeywell LCPD Phoenix, System M Compiled on: 09/26/83 1120.7 mst Mon Options: optimize map 1 /* ****************************************************** 2* * * 3* * * 4* * Copyright (c) 1972 by Massachusetts Institute of * 5* * Technology and Honeywell Information Systems, Inc. * 6* * * 7* * * 8* ****************************************************** */ 9 10 /* DESCRIPTION: 11* This routine supplies information about a storage system file 12* given its pathname. Information includes the file's type and 13* various appropriate statistics. 14**/ 15 16 /* HISTORY: 17* 18*Written by Mike Asherman. 19*Modified: 20*05/16/83 by Lindsey Spratt: Fixed to destroy the temporary iocb. 21**/ 22 23 /* format: style2 */ 24 vfile_status_: 25 proc (d_name_arg, e_name_arg, info_ptr, code); 26 seg_ptr_entry = "0"b; /* this is the pathname entry */ 27 d_name = d_name_arg; 28 e_name = e_name_arg; 29 iocb_ptr = null; /* indicates no I/O switch */ 30 call get_file_base; /* finds first seg and gets pointer */ 31 call check_access; /* verifies that user has read access */ 32 get_status: 33 if info_ptr -> info.version ^= vfs_version_1 34 then do; 35 code = error_table_$bad_arg; 36 return; 37 end; 38 if seg_ptr -> common_header.file_code = seq_code /* file is sequential */ 39 then call proc_seq_file; 40 else if seg_ptr -> common_header.file_code = blk_code 41 /* file is blocked */ 42 then call proc_blk_file; 43 else if seg_ptr -> common_header.file_code = indx_code 44 /* indexed file */ 45 then call proc_indx_file; 46 else call proc_uns_file; /* must be unstructured */ 47 cleanup: 48 if seg_ptr_entry & ^not_open /* no cleanup necessary */ 49 then return; 50 if fcb_ptr ^= null 51 then call msf_manager_$close (fcb_ptr); /* frees the control block */ 52 else if seg_ptr ^= null 53 then call hcs_$terminate_noname (seg_ptr, foo); 54 if iocb_ptr ^= null /* I/O switch may be attached and open */ 55 then do; /* close and detach */ 56 call iox_$close (iocb_ptr, foo); 57 if ^seg_ptr_entry 58 then do; 59 call iox_$detach_iocb (iocb_ptr, foo); 60 call iox_$destroy_iocb (iocb_ptr, foo); 61 end; 62 end; 63 return; /* end of main vfile_status_ routine */ 64 65 seg: 66 entry (iocb_ptr_arg, seg_ptr_arg, info_ptr, code); 67 seg_ptr_entry = "1"b; 68 iocb_ptr = iocb_ptr_arg; 69 not_open = (iocb_ptr -> iocb.open_descrip_ptr = null); 70 if not_open /* seg pointer not yet obtained */ 71 then do; 72 d_name = substr (atb.attach_descrip_string, 8, atb.dname_len); 73 e_name = substr (atb.attach_descrip_string, 9 + dname_len, ename_len); 74 call get_file_base; 75 call check_access; 76 go to get_status; 77 end; 78 seg_ptr = seg_ptr_arg; 79 code = 0; 80 go to get_status; 81 82 check_code: 83 proc; /* aborts if non-zero error code */ 84 if code ^= 0 85 then go to cleanup; /* don't leave a mess */ 86 end check_code; 87 88 get_file_base: 89 proc; /* finds first file component and sets seg_ptr */ 90 seg_ptr = null; /* segment not initiated */ 91 fcb_ptr = null; /* will be non-null if msf opened */ 92 call hcs_$status_long (d_name, e_name, 1, addr (branch_info), null, code); 93 if code ^= 0 94 then if code = error_table_$no_s_permission 95 then code = 0; /* not really an error */ 96 else go to cleanup; /* error--abort */ 97 if branch_info.type = "10"b /* directory or msf */ 98 then if branch_info.bit_count = "0"b /* directory */ 99 then code = error_table_$dirseg; 100 else do; /* get ptr to base of msf */ 101 call msf_manager_$open ((d_name), (e_name), fcb_ptr, code); 102 /* creates control block */ 103 call check_code; /* abort on error */ 104 call msf_manager_$get_ptr (fcb_ptr, 0, "0"b, seg_ptr, bc, code); 105 /* pointer to base of file */ 106 if seg_ptr ^= null 107 then code = 0; /* reset spurious code */ 108 end; 109 else do; /* get ptr to base of segment */ 110 call hcs_$initiate (d_name, e_name, "", 0, 1, seg_ptr, code); 111 if seg_ptr ^= null 112 then code = 0; /* no error if pointer returned */ 113 end; 114 call check_code; 115 end get_file_base; 116 117 check_access: 118 proc; /* checks for read access to segment */ 119 mode = 0; /* read bit will be set if access OK */ 120 call hcs_$fs_get_mode (seg_ptr, mode, code); /* gets access mode */ 121 if ^substr (bit (mode), 2, 1) /* read bit not set */ 122 then code = error_table_$moderr; 123 call check_code; 124 end check_access; 125 126 get_lock_status: 127 proc; /* finds state of file lock */ 128 lock_word = seg_ptr -> common_header.file_lock; /* copy the file's lock */ 129 call set_lock_$lock (lock_word, 0, foo); /* returned code (foo) reveals status */ 130 if foo = 0 /* not locked */ 131 then info_ptr -> seq_info.lock_status = "00"b; /* all structured files have this in the same place */ 132 else if foo = error_table_$lock_wait_time_exceeded 133 then info_ptr -> seq_info.lock_status = "01"b; /* locked by another process */ 134 else if foo = error_table_$locked_by_this_process 135 then info_ptr -> seq_info.lock_status = "10"b; /* busy in caller's process */ 136 else info_ptr -> seq_info.lock_status = "11"b; /* locked by defunct process */ 137 end get_lock_status; 138 139 proc_uns_file: 140 proc; /* gets info for unstructured files */ 141 info_ptr -> uns_info.type = 1; /* identifies file as unstructured */ 142 info_ptr -> uns_info.header_present = (seg_ptr -> common_header.file_code = uns_code); 143 /* no header unless code */ 144 if info_ptr -> uns_info.header_present /* pick up identifier from header */ 145 then info_ptr -> uns_info.header_id = seg_ptr -> uns_header.identifier; 146 if ^seg_ptr_entry /* don't already have an I/O switch */ 147 then do; 148 d_len = length (d_name) + 1 - verify (reverse (d_name), " "); 149 /* don't count trailing blanks */ 150 atd = "vfile_ " || substr (d_name, 1, d_len) || ">" || e_name; 151 if info_ptr -> uns_info.header_present 152 then atd = atd || " -header"; 153 call iox_$attach_ioname (unique_chars_ ("0"b), iocb_ptr, atd, code); 154 /* attach uniquely named switch */ 155 call check_code; 156 open_it: 157 call iox_$open (iocb_ptr, 1 /* stream_input */, "0"b, code); 158 /* open file for input */ 159 call check_code; 160 end; 161 else if not_open /* switch already attached */ 162 then go to open_it; 163 call iox_$control (iocb_ptr, "read_position", addr (rp_info), code); 164 /* gets byte count of file */ 165 call check_code; 166 info_ptr -> uns_info.end_pos = rp_info.end_pos; 167 dcl d_len fixed; 168 end proc_uns_file; 169 170 proc_seq_file: 171 proc; /* sets info for unstructured files */ 172 info_ptr -> seq_info.type = 2; /* identifies file type */ 173 call get_lock_status; /* looks at file lock */ 174 info_ptr -> seq_info.version = seg_ptr -> seq_header.version; 175 /* file version */ 176 info_ptr -> seq_info.action = seg_ptr -> seq_header.file_state; 177 if seg_ptr_entry & ^not_open 178 then if ^iocb_ptr -> iocb.open_data_ptr -> seq_cb.input_only 179 /* modify opening */ 180 then do; /* use open data stats */ 181 info_ptr -> seq_info.end_pos = iocb_ptr -> iocb.open_data_ptr -> seq_cb.end_pos; 182 /* latest end pos */ 183 return; 184 end; 185 info_ptr -> seq_info.end_pos = seg_ptr -> seq_header.end_pos; 186 /* record count--only valid 187* if version is current */ 188 end proc_seq_file; 189 190 proc_blk_file: 191 proc; /* gets info for blocked files */ 192 info_ptr -> blk_info.type = 3; /* identifies blocked file info struc */ 193 call get_lock_status; 194 info_ptr -> blk_info.version = seg_ptr -> blk_header.version; 195 info_ptr -> blk_info.action = seg_ptr -> blk_header.action; 196 /* non-zero if update 197* is in progress */ 198 info_ptr -> blk_info.max_rec_len = seg_ptr -> blk_header.max_rec_len; 199 /* 200* maximum record length associated with file (bytes) */ 201 if seg_ptr_entry & ^not_open /* we have an iocb */ 202 then if (iocb_ptr -> iocb.open_data_ptr -> blk_cb.mode > 4 /* modify opening */) 203 & ^iocb_ptr -> iocb.open_data_ptr -> blk_cb.shared 204 then do; 205 info_ptr -> blk_info.end_pos = iocb_ptr -> iocb.open_data_ptr -> blk_cb.end_pos; 206 /* latest end pos */ 207 go to get_time_stamp; 208 end; 209 info_ptr -> blk_info.end_pos = seg_ptr -> blk_header.end_pos; 210 /* record count */ 211 get_time_stamp: 212 info_ptr -> blk_info.time_last_modified = seg_ptr -> common_header.time_last_modified; 213 end proc_blk_file; 214 215 proc_indx_file: 216 proc; /* gets info for indexed files */ 217 info_ptr -> indx_info.type = 4; /* identifies indexed file info struc */ 218 call get_lock_status; 219 info_ptr -> indx_info.file_version = seg_ptr -> indx_header.file_version; 220 info_ptr -> indx_info.program_version = seg_ptr -> indx_header.program_version; 221 /* 222* if old this may indicate file has bugs */ 223 state = seg_ptr -> indx_header.file_state; /* selects valid block of stats */ 224 if (info_ptr -> indx_info.file_version = 30 /* file is latest version */) 225 | (info_ptr -> indx_info.file_version = 40) 226 then call get_latest_indx_stats; 227 else if info_ptr -> indx_info.file_version = 20 228 then call get_new_stats; 229 else if info_ptr -> indx_info.file_version = 10 230 then call get_old_stats; /* old version header is differently organized */ 231 else code = error_table_$bad_file; 232 return; /* end of routine for handling indexed files */ 233 234 get_latest_indx_stats: 235 proc; /* routine gets statistics for version 4.0 files */ 236 call get_common_indx_stats; /* change count and index state */ 237 f_s_ptr = addr (seg_ptr -> new_indx_header.file_state_blocks (state)); 238 info_ptr -> indx_info.action = f_s_ptr -> new_fs_block.file_action; 239 /* ^=0 if operation in progress */ 240 info_ptr -> indx_info.records = f_s_ptr -> new_fs_block.number_of_records; 241 info_ptr -> indx_info.record_bytes = f_s_ptr -> new_fs_block.total_record_length; 242 info_ptr -> indx_info.non_null_recs = f_s_ptr -> new_fs_block.number_of_allocated_records; 243 info_ptr -> indx_info.free_blocks = f_s_ptr -> new_fs_block.number_of_free_blocks; 244 info_ptr -> indx_info.num_keys = f_s_ptr -> new_fs_block.number_of_keys; 245 info_ptr -> indx_info.key_bytes = f_s_ptr -> new_fs_block.total_key_length; 246 info_ptr -> indx_info.dup_keys = f_s_ptr -> new_fs_block.duplicate_keys; 247 info_ptr -> indx_info.dup_key_bytes = f_s_ptr -> new_fs_block.dup_key_bytes; 248 end get_latest_indx_stats; 249 250 get_common_indx_stats: 251 proc; /* routine used with latest two file versions */ 252 info_ptr -> indx_info.change_count = seg_ptr -> indx_header.change_count; 253 i_state = seg_ptr -> indx_header.index_state; /* locates proper index state block */ 254 i_s_ptr = addr (seg_ptr -> indx_header.index_state_blocks (i_state)); 255 /* pointer to index state block */ 256 info_ptr -> indx_info.index_height = i_s_ptr -> index_state_block.index_height; 257 info_ptr -> indx_info.nodes = i_s_ptr -> index_state_block.number_of_nodes; 258 end get_common_indx_stats; 259 260 set_default_stats: 261 proc; /* used with old version indexed files */ 262 info_ptr -> indx_info.num_keys = info_ptr -> indx_info.records; 263 info_ptr -> indx_info.dup_keys = 0; 264 info_ptr -> indx_info.dup_key_bytes = 0; 265 end set_default_stats; 266 267 get_new_stats: 268 proc; /* gets file statistics for MR3.0 version indexed files */ 269 call get_common_indx_stats; 270 f_s_ptr = addr (seg_ptr -> indx_header.file_state_blocks (state)); 271 /* pointer to file state block */ 272 info_ptr -> indx_info.action = f_s_ptr -> file_state_block.file_action; 273 /* ^=0 if operation in progress */ 274 info_ptr -> indx_info.records = f_s_ptr -> file_state_block.number_of_records; 275 info_ptr -> indx_info.record_bytes = f_s_ptr -> file_state_block.total_record_length; 276 info_ptr -> indx_info.non_null_recs = f_s_ptr -> file_state_block.number_of_allocated_records; 277 info_ptr -> indx_info.free_blocks = f_s_ptr -> file_state_block.number_of_free_blocks; 278 info_ptr -> indx_info.key_bytes = f_s_ptr -> file_state_block.total_key_length; 279 call set_default_stats; 280 end get_new_stats; 281 282 get_old_stats: 283 proc; /* gets statistics for old version indexed files */ 284 info_ptr -> indx_info.change_count = 0; /* not supported */ 285 old_f_s_ptr = addr (seg_ptr -> old_indx_header.old_file_state_blocks (state)); 286 /* pointer 287* to old version file state block */ 288 info_ptr -> indx_info.action = old_f_s_ptr -> old_f_s_block.file_action; 289 /* if ^=0 file cannot be restored */ 290 info_ptr -> indx_info.records = old_f_s_ptr -> old_f_s_block.number_of_records; 291 info_ptr -> indx_info.record_bytes = old_f_s_ptr -> old_f_s_block.total_record_length; 292 info_ptr -> indx_info.key_bytes = old_f_s_ptr -> old_f_s_block.total_key_length; 293 r_state = seg_ptr -> old_indx_header.record_state;/* selects a record_state_block */ 294 r_s_ptr = addr (seg_ptr -> old_indx_header.record_state_blocks (r_state)); 295 /* points to record 296* state block--part of file state block in new version files */ 297 info_ptr -> indx_info.non_null_recs = r_s_ptr -> r_s_block.number_of_allocated_records; 298 info_ptr -> indx_info.free_blocks = r_s_ptr -> r_s_block.number_of_free_blocks; 299 info_ptr -> indx_info.index_height = seg_ptr -> old_indx_header.old_version_index_height; 300 info_ptr -> indx_info.nodes = seg_ptr -> old_indx_header.old_version_number_of_nodes; 301 call set_default_stats; 302 end get_old_stats; 303 304 end proc_indx_file; 305 306 /* declarations for entire program */ 307 dcl seg_ptr_entry bit (1) aligned; 308 dcl seg_ptr_arg ptr; 309 dcl iocb_ptr_arg ptr; 310 dcl 1 branch_info aligned, /* info returned by hcs_$status_long */ 311 2 type bit (2) unal, 312 2 pad0 bit (34) unal, 313 2 words1 (6) fixed, /* of no interest */ 314 2 pad1 bit (12) unal, 315 2 bit_count bit (24) unal, /* distinguishes msf and dir */ 316 2 words2 (2); 317 dcl hcs_$status_long entry (char (*), char (*), fixed (1), ptr, ptr, fixed (35)); 318 dcl hcs_$initiate entry (char (*), char (*), char (*), fixed (1), fixed (2), ptr, fixed (35)); 319 dcl hcs_$terminate_noname entry (ptr, fixed (35)); 320 dcl hcs_$fs_get_mode entry (ptr, fixed (5), fixed (35)); 321 dcl mode fixed (5); 322 dcl iocb_ptr ptr; 323 dcl iox_$close entry (ptr, fixed (35)); 324 dcl iox_$detach_iocb entry (ptr, fixed (35)); 325 dcl iox_$destroy_iocb entry (ptr, fixed bin (35)); 326 dcl iox_$attach_ioname entry (char (*), ptr, char (*), fixed (35)); 327 dcl iox_$open entry (ptr, fixed, bit (1) aligned, fixed (35)); 328 dcl unique_chars_ entry (bit (*)) returns (char (15)); 329 dcl iox_$control entry (ptr, char (*), ptr, fixed (35)); 330 dcl state fixed; 331 dcl ( 332 error_table_$lock_wait_time_exceeded, 333 error_table_$no_s_permission, 334 error_table_$bad_file, 335 error_table_$bad_arg, 336 error_table_$moderr, 337 error_table_$dirseg, 338 error_table_$locked_by_this_process 339 ) external fixed (35); 340 dcl set_lock_$lock entry (bit (36) aligned, fixed, fixed (35)); 341 dcl lock_word bit (36) aligned; 342 dcl seg_ptr ptr; 343 dcl 1 rp_info, /* used in "read_position" control order */ 344 2 next_pos fixed (34), /* of no interest in this routine */ 345 2 end_pos fixed (34); /* used to get byte count of uns files */ 346 dcl 1 uns_header based (seg_ptr), /* optional header for unstructured files */ 347 2 common_header_words 348 (4) fixed, 349 2 identifier fixed (35); /* set and interpreted by user */ 350 dcl 1 seq_header based (seg_ptr), /* standard header for sequential files */ 351 2 common_header_words 352 (4) fixed, 353 2 version_word aligned, 354 3 file_state fixed (17) unal, 355 3 version fixed (17) unal, 356 2 words (3) fixed, /* not of interest to this program */ 357 2 end_pos fixed (34), /* record count */ 358 2 end_desc fixed (35); 359 dcl 1 common_header based (seg_ptr), /* common header for structured files */ 360 2 file_code fixed (35), 361 2 file_lock bit (36) aligned, 362 2 time_last_modified fixed (71); 363 dcl (code, foo) fixed (35); 364 dcl fcb_ptr ptr; 365 dcl (null, bit, substr, length, verify, reverse, addr, fixed) 366 builtin; 367 dcl msf_manager_$close entry (ptr); 368 dcl (d_name_arg, e_name_arg) 369 char (*); 370 dcl d_name char (168); 371 dcl e_name char (32); 372 dcl atd char (256); 373 dcl not_open bit (1) aligned; 374 dcl msf_manager_$open entry (char (*) aligned, char (*) aligned, ptr, fixed (35)); 375 dcl msf_manager_$get_ptr entry (ptr, fixed, bit (1), ptr, fixed (24), fixed (35)); 376 dcl bc fixed (24); 377 dcl uns_code static internal fixed init (31191); 378 dcl seq_code static internal fixed init (83711); 379 dcl blk_code static internal fixed init (22513); 380 dcl indx_code static internal fixed init (7129); 381 dcl 1 indx_header aligned based (seg_ptr), 382 /* current version */ 383 2 words1 (4), 384 2 file_version fixed, 385 2 program_version fixed, 386 2 words2 (8), 387 2 file_state fixed, 388 2 change_count fixed (35), 389 2 words3 (46), 390 2 file_state_blocks (0:1), 391 3 words (7) fixed, 392 2 index_state fixed, 393 2 index_state_blocks (0:1), 394 3 words (104); 395 dcl 1 new_indx_header aligned based (seg_ptr), 396 /* version 4.0 indexed file header */ 397 2 words (361) fixed, 398 2 file_state_blocks (0:1), 399 3 words (12) fixed; 400 dcl 1 new_fs_block based (f_s_ptr), /* version 4.0 file state block */ 401 2 file_action fixed, 402 2 file_substate fixed, 403 2 number_of_keys fixed (34), 404 2 duplicate_keys fixed (34), /* 0 if no duplications */ 405 2 dup_key_bytes fixed (34), 406 2 total_key_length fixed (34), 407 2 number_of_records fixed (34), 408 2 total_record_length 409 fixed (34), 410 2 number_of_allocated_records 411 fixed (34), 412 2 number_of_free_blocks 413 fixed (34), 414 2 words (2) fixed; 415 dcl (f_s_ptr, i_s_ptr, old_f_s_ptr, r_s_ptr) 416 ptr; 417 dcl (i_state, r_state) fixed; 418 dcl 1 file_state_block based (f_s_ptr), 419 2 file_action fixed, 420 2 word1, 421 2 number_of_records fixed, 422 2 total_key_length fixed (34), 423 2 total_record_length 424 fixed (34), 425 2 number_of_allocated_records 426 fixed (34), 427 2 number_of_free_blocks 428 fixed (34); 429 dcl 1 index_state_block based (i_s_ptr), 430 2 number_of_nodes fixed (34), 431 2 words1 (2), 432 2 index_height fixed; 433 dcl 1 old_indx_header based (seg_ptr), /* old version indexed file header */ 434 2 words1 (15), 435 2 old_file_state_blocks 436 (0:1), 437 3 words (5), 438 2 words2 (7), 439 2 record_state fixed, 440 2 record_state_blocks 441 (0:1), 442 3 words (4), 443 2 words3 (14), 444 2 old_version_index_height 445 fixed, 446 2 old_version_number_of_nodes 447 fixed (34); 448 dcl 1 old_f_s_block based (old_f_s_ptr), 449 2 file_action fixed, 450 2 word, 451 2 number_of_records fixed (34), 452 2 total_key_length fixed (34), 453 2 total_record_length 454 fixed (34); 455 dcl 1 r_s_block based (r_s_ptr), 456 2 word, 457 2 number_of_allocated_records 458 fixed (34), 459 2 number_of_free_blocks 460 fixed (34); 461 dcl 1 blk_header aligned based, /* standard header for blocked files */ 462 2 words1 (4) fixed, /* of no interest here */ 463 2 version fixed, 464 2 words2 (3) fixed, 465 2 max_rec_len fixed (21), 466 2 end_pos fixed (34), 467 2 action fixed; /* non-zero indicates operation in progress */ 468 dcl 1 seq_cb aligned based, /* open data block for sequential files */ 469 2 seg_ptr ptr, /* ptr to current seg */ 470 2 fcb_ptr ptr, /* ptr to msf control block */ 471 2 component fixed bin, /* component number of 472* current seg */ 473 2 write_limit fixed bin (21), /* set at open to max seg size + 1 */ 474 2 beyond_limits fixed bin (21), /* set at open to write_limit + 4 */ 475 2 max_record_size fixed bin (21), /* set at open to 4*max_component_size- 476* header_size-12(i.e. 3 desciptor words */ 477 2 write_pos fixed bin (21), /* in write state = 478* pos of final descriptor, in read state = 479* beyond limits */ 480 2 read_pos fixed bin (21), /* in read state = 481* pos of next descriptor, in write state 482* = minus_one_pos */ 483 2 current_record_ptr ptr, 484 2 end_pos fixed (34), /* number of records in file */ 485 2 end_desc fixed (35), 486 2 next_pos fixed (34), /* next record number */ 487 2 next_is_current bit (1) aligned, /* "0"b if positions staggerred */ 488 2 updating bit (1) aligned, /* set if mode=7 (sequential_update) */ 489 2 append_sw bit (1) aligned, /* set if mode=6 (seq in out) and -append attachment */ 490 2 input_only bit (1) aligned, 491 2 ssf_sw bit (1) aligned, /* -ssf option indicator */ 492 2 is_msf bit (1) aligned, /* set when msf is opened */ 493 2 end_not_valid bit (1) aligned, /* used with old version files */ 494 2 error, /* used by "error_status" control order */ 495 3 type fixed, 496 3 requested fixed (34), 497 3 received fixed (34), 498 2 minus_one_word fixed, 499 2 file_base_ptr ptr; 500 dcl 1 blk_cb aligned based, /* open data block for blocked files */ 501 2 file_base_ptr ptr, /* points to base of segment */ 502 2 seg_ptr_array_ptr ptr, 503 2 fcb_ptr ptr, 504 2 mode fixed, /* opening mode (=4,5,6, or 7) */ 505 2 appending bit (1) aligned, /* -append option */ 506 2 max_comp_size fixed (19), /* determines capacity of file */ 507 2 max_rec_len fixed (21), /* determines block size */ 508 2 block_size fixed (19), /* words, including header */ 509 2 capacity fixed (19), /* max number of records per comp */ 510 2 current_pos fixed (34), /* current record number */ 511 2 next_pos fixed (34), /* next record position (0,1,2,...) */ 512 2 end_pos fixed (34), /* number of records in file */ 513 2 last_comp_num fixed, 514 2 is_msf bit (1) aligned, 515 2 ssf_sw bit (1) aligned, 516 2 seg_ptr_array_limit 517 fixed, 518 2 words (3) fixed, 519 2 shared bit (1) aligned; 520 dcl cb_ptr ptr; 521 dcl info_ptr ptr; 522 dcl 1 info based (info_ptr), /* structure to receive file information */ 523 2 version fixed, /* must =1 */ 524 2 words (size (indx_info) - 1) fixed; 1 1 dcl 1 uns_info based (addr (info)), /* info structure for unstructured files */ 1 2 2 info_version fixed, /* (Input) must =1--only one version 1 3* currently supported */ 1 4 2 type fixed, /* =1 */ 1 5 2 end_pos fixed (34), /* length (bytes) not including header */ 1 6 2 flags aligned, 1 7 3 pad1 bit (2) unal, /* used for lock_status in other files */ 1 8 3 header_present bit (1) unal, /* on if file code is set */ 1 9 3 pad2 bit (33) unal, 1 10 2 header_id fixed (35); /* meaning is user defined */ 1 11 dcl 1 seq_info based (addr (info)), /* info structure for sequential files */ 1 12 2 info_version fixed, 1 13 2 type fixed, /* =2 */ 1 14 2 end_pos fixed (34), /* record count */ 1 15 2 flags aligned, 1 16 3 lock_status bit (2) unal, /* 0,1,2, or 3 to indicate not locked, 1 17* locked by (other,this,dead) process */ 1 18 3 pad bit (34) unal, 1 19 2 version fixed, /* end_pos valid only in latest version */ 1 20 2 action fixed; /* indicates if adjustment or rollback is needed */ 1 21 dcl 1 blk_info based (addr (info)), /* info structure for blocked files */ 1 22 2 info_version fixed, 1 23 2 type fixed, /* =3 */ 1 24 2 end_pos fixed (34), /* record count */ 1 25 2 flags aligned, 1 26 3 lock_status bit (2) unal, /* same as seq_info.= */ 1 27 3 pad bit (34) unal, 1 28 2 version fixed, /* only one currently supported */ 1 29 2 action fixed, /* non-zero if truncation in progress, else =0 */ 1 30 2 max_rec_len fixed (21), /* bytes--determines characteristiWc block size */ 1 31 2 pad fixed, /* not used at this time */ 1 32 2 time_last_modified fixed (71); /* time stamp for synchronization */ 1 33 dcl 1 indx_info based (addr (info)), /* info structure for indexed files */ 1 34 2 info_version fixed, 1 35 2 type fixed, /* =4 */ 1 36 2 records fixed (34), /* record count */ 1 37 2 flags aligned, 1 38 3 lock_status bit (2) unal, /* same as seq_info.= */ 1 39 3 pad bit (34) unal, 1 40 2 version_info aligned, 1 41 3 file_version fixed (17) unal, /* headers differ */ 1 42 3 program_version fixed (17) unal, /* may indicate bugs */ 1 43 2 action fixed, /* non-zero code indicates update in progress */ 1 44 2 non_null_recs fixed (34), /* count of allocated recs */ 1 45 2 record_bytes fixed (34), /* total record length */ 1 46 2 free_blocks fixed, /* available record blocks */ 1 47 2 index_height fixed, /* height of index tree (0 if empty) */ 1 48 2 nodes fixed, /* nodes being used in the index */ 1 49 2 key_bytes fixed (34), /* total length of keys */ 1 50 2 change_count fixed (35), /* bumped on each file modification */ 1 51 2 num_keys fixed (34), /* number of index entries */ 1 52 2 dup_keys fixed (34), /* 0 if all keys are distinct, else 1 for each dup */ 1 53 2 dup_key_bytes fixed (34), /* total bytes of duplicate keys */ 1 54 2 word (1) fixed; /* reserved for future use */ 1 55 dcl 1 vbl_info based (addr (info)), /* info structure for variable files */ 1 56 2 info_version fixed, 1 57 2 type fixed, /* =5 */ 1 58 2 end_pos fixed (34), /* logical end of file--not necessarily allocation count */ 1 59 2 flags aligned, 1 60 3 lock_status bit (2) unal, /* same as seq_info.= */ 1 61 3 pad bit (34) unal, 1 62 2 version fixed, /* only one currently supported */ 1 63 2 action fixed, /* same as in indexed files */ 1 64 2 first_nz fixed (34), /* position (numeric key) for first allocated record */ 1 65 2 last_nz fixed (34), /* last allocated record position */ 1 66 2 change_count fixed (35); /* used for synchronization */ 1 67 dcl vfs_version_1 static internal fixed init (1); 1 68 /* should be used in 1 69* assignments to info_version */ 525 2 1 /* include file for common portions of vfile_'s attach block used in 2 2* several modules--created by M. Asherman 1/9/76 2 3* Modified 8/28/76 to add last_comp */ 2 4 2 5 dcl 1 atb based (iocb_ptr -> iocb.actual_iocb_ptr -> iocb.attach_data_ptr), 2 6 /* attach block */ 2 7 2 flags aligned, 2 8 3 (pad1, appending, no_trunc, pad2, ssf, header_present, blocked, shared, pad3, msf, inv_lock_reset, 2 9 dup_ok_sw, trans_sw, noend_sw, exclu_sw, stat_sw, checkpoint_sw) 2 10 bit (1) unal, 2 11 3 pad5 bit (19) unal, 2 12 2 wait_time fixed (35), 2 13 2 word fixed, 2 14 2 max_rec_len fixed (35), 2 15 2 header_id fixed (35), 2 16 2 word2 fixed, 2 17 2 attach_descrip_string 2 18 char (256), 2 19 2 dname_len, 2 20 2 ename_len fixed, 2 21 2 words3 (9) fixed, 2 22 2 opening_mode fixed, 2 23 2 word4 fixed, 2 24 2 fcbp ptr, 2 25 2 fsp ptr, /* first seg ptr */ 2 26 2 close_x entry, /* set to close routine */ 2 27 2 last_comp fixed, /* msf component number */ 2 28 2 tcf_iocbp ptr; /* iocb ptr for transaction control switch */ 526 3 1 3 2 dcl 1 iocb aligned based (iocb_ptr), 3 3 /* I/O control block. */ 3 4 2 iocb_version fixed init (1), /* Version number of structure. */ 3 5 2 name char (32), /* I/O name of this block. */ 3 6 2 actual_iocb_ptr ptr, /* IOCB ultimately SYNed to. */ 3 7 2 attach_descrip_ptr ptr, /* Ptr to printable attach description. */ 3 8 2 attach_data_ptr ptr, /* Ptr to attach data structure. */ 3 9 2 open_descrip_ptr ptr, /* Ptr to printable open description. */ 3 10 2 open_data_ptr ptr, /* Ptr to open data structure (old SDB). */ 3 11 2 reserved bit (72), /* Reserved for future use. */ 3 12 2 detach_iocb entry (ptr, fixed (35)),/* detach_iocb(p,s) */ 3 13 2 open entry (ptr, fixed, bit (1) aligned, fixed (35)), 3 14 /* open(p,mode,not_used,s) */ 3 15 2 close entry (ptr, fixed (35)),/* close(p,s) */ 3 16 2 get_line entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 3 17 /* get_line(p,bufptr,buflen,actlen,s) */ 3 18 2 get_chars entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 3 19 /* get_chars(p,bufptr,buflen,actlen,s) */ 3 20 2 put_chars entry (ptr, ptr, fixed (21), fixed (35)), 3 21 /* put_chars(p,bufptr,buflen,s) */ 3 22 2 modes entry (ptr, char (*), char (*), fixed (35)), 3 23 /* modes(p,newmode,oldmode,s) */ 3 24 2 position entry (ptr, fixed, fixed (21), fixed (35)), 3 25 /* position(p,u1,u2,s) */ 3 26 2 control entry (ptr, char (*), ptr, fixed (35)), 3 27 /* control(p,order,infptr,s) */ 3 28 2 read_record entry (ptr, ptr, fixed (21), fixed (21), fixed (35)), 3 29 /* read_record(p,bufptr,buflen,actlen,s) */ 3 30 2 write_record entry (ptr, ptr, fixed (21), fixed (35)), 3 31 /* write_record(p,bufptr,buflen,s) */ 3 32 2 rewrite_record entry (ptr, ptr, fixed (21), fixed (35)), 3 33 /* rewrite_record(p,bufptr,buflen,s) */ 3 34 2 delete_record entry (ptr, fixed (35)),/* delete_record(p,s) */ 3 35 2 seek_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 3 36 /* seek_key(p,key,len,s) */ 3 37 2 read_key entry (ptr, char (256) varying, fixed (21), fixed (35)), 3 38 /* read_key(p,key,len,s) */ 3 39 2 read_length entry (ptr, fixed (21), fixed (35)); 3 40 /* read_length(p,len,s) */ 3 41 527 528 529 end vfile_status_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/26/83 1117.4 vfile_status_.pl1 >spec>on>09/26/83>vfile_status_.pl1 525 1 07/19/79 1547.0 vfs_info.incl.pl1 >ldd>include>vfs_info.incl.pl1 526 2 07/19/79 1547.0 vf_attach_block.incl.pl1 >ldd>include>vf_attach_block.incl.pl1 527 3 07/02/81 1905.0 iocbv.incl.pl1 >ldd>include>iocbv.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 5 based fixed bin(17,0) level 2 in structure "blk_info" dcl 1-21 in procedure "vfile_status_" set ref 195* action 5 based fixed bin(17,0) level 2 in structure "seq_info" dcl 1-11 in procedure "vfile_status_" set ref 176* action 12 based fixed bin(17,0) level 2 in structure "blk_header" dcl 461 in procedure "vfile_status_" ref 195 action 5 based fixed bin(17,0) level 2 in structure "indx_info" dcl 1-33 in procedure "vfile_status_" set ref 238* 272* 288* actual_iocb_ptr 12 based pointer level 2 dcl 3-2 ref 72 72 73 73 73 addr builtin function dcl 365 ref 92 92 163 163 237 254 270 285 294 atb based structure level 1 unaligned dcl 2-5 atd 000212 automatic char(256) unaligned dcl 372 set ref 150* 151* 151 153* attach_data_ptr 16 based pointer level 2 dcl 3-2 ref 72 72 73 73 73 attach_descrip_string 6 based char(256) level 2 packed unaligned dcl 2-5 ref 72 73 bc 000313 automatic fixed bin(24,0) dcl 376 set ref 104* bit builtin function dcl 365 ref 121 bit_count 7(12) 000101 automatic bit(24) level 2 packed unaligned dcl 310 set ref 97 blk_cb based structure level 1 dcl 500 blk_code constant fixed bin(17,0) initial dcl 379 ref 40 blk_header based structure level 1 dcl 461 blk_info based structure level 1 unaligned dcl 1-21 branch_info 000101 automatic structure level 1 dcl 310 set ref 92 92 change_count 17 based fixed bin(35,0) level 2 in structure "indx_header" dcl 381 in procedure "vfile_status_" ref 252 change_count 14 based fixed bin(35,0) level 2 in structure "indx_info" dcl 1-33 in procedure "vfile_status_" set ref 252* 284* code parameter fixed bin(35,0) dcl 363 set ref 24 35* 65 79* 84 92* 93 93 93* 97* 101* 104* 106* 110* 111* 120* 121* 153* 156* 163* 231* common_header based structure level 1 unaligned dcl 359 d_len 000364 automatic fixed bin(17,0) dcl 167 set ref 148* 150 d_name 000130 automatic char(168) unaligned dcl 370 set ref 27* 72* 92* 101 110* 148 148 150 d_name_arg parameter char unaligned dcl 368 ref 24 27 dname_len 106 based fixed bin(17,0) level 2 dcl 2-5 ref 72 73 dup_key_bytes 4 based fixed bin(34,0) level 2 in structure "new_fs_block" dcl 400 in procedure "vfile_status_" ref 247 dup_key_bytes 17 based fixed bin(34,0) level 2 in structure "indx_info" dcl 1-33 in procedure "vfile_status_" set ref 247* 264* dup_keys 16 based fixed bin(34,0) level 2 dcl 1-33 set ref 246* 263* duplicate_keys 3 based fixed bin(34,0) level 2 dcl 400 ref 246 e_name 000202 automatic char(32) unaligned dcl 371 set ref 28* 73* 92* 101 110* 150 e_name_arg parameter char unaligned dcl 368 ref 24 28 ename_len 107 based fixed bin(17,0) level 2 dcl 2-5 ref 73 end_pos 16 based fixed bin(34,0) level 2 in structure "blk_cb" dcl 500 in procedure "vfile_status_" ref 205 end_pos 2 based fixed bin(34,0) level 2 in structure "uns_info" dcl 1-1 in procedure "vfile_status_" set ref 166* end_pos 10 based fixed bin(34,0) level 2 in structure "seq_header" dcl 350 in procedure "vfile_status_" ref 185 end_pos 2 based fixed bin(34,0) level 2 in structure "seq_info" dcl 1-11 in procedure "vfile_status_" set ref 181* 185* end_pos 1 000122 automatic fixed bin(34,0) level 2 in structure "rp_info" dcl 343 in procedure "vfile_status_" set ref 166 end_pos 2 based fixed bin(34,0) level 2 in structure "blk_info" dcl 1-21 in procedure "vfile_status_" set ref 205* 209* end_pos 14 based fixed bin(34,0) level 2 in structure "seq_cb" dcl 468 in procedure "vfile_status_" ref 181 end_pos 11 based fixed bin(34,0) level 2 in structure "blk_header" dcl 461 in procedure "vfile_status_" ref 209 error_table_$bad_arg 000044 external static fixed bin(35,0) dcl 331 ref 35 error_table_$bad_file 000042 external static fixed bin(35,0) dcl 331 ref 231 error_table_$dirseg 000050 external static fixed bin(35,0) dcl 331 ref 97 error_table_$lock_wait_time_exceeded 000036 external static fixed bin(35,0) dcl 331 ref 132 error_table_$locked_by_this_process 000052 external static fixed bin(35,0) dcl 331 ref 134 error_table_$moderr 000046 external static fixed bin(35,0) dcl 331 ref 121 error_table_$no_s_permission 000040 external static fixed bin(35,0) dcl 331 ref 93 f_s_ptr 000314 automatic pointer dcl 415 set ref 237* 238 240 241 242 243 244 245 246 247 270* 272 274 275 276 277 278 fcb_ptr 000126 automatic pointer dcl 364 set ref 50 50* 91* 101* 104* file_action based fixed bin(17,0) level 2 in structure "file_state_block" dcl 418 in procedure "vfile_status_" ref 272 file_action based fixed bin(17,0) level 2 in structure "new_fs_block" dcl 400 in procedure "vfile_status_" ref 238 file_action based fixed bin(17,0) level 2 in structure "old_f_s_block" dcl 448 in procedure "vfile_status_" ref 288 file_code based fixed bin(35,0) level 2 dcl 359 ref 38 40 43 142 file_lock 1 based bit(36) level 2 dcl 359 ref 128 file_state 16 based fixed bin(17,0) level 2 in structure "indx_header" dcl 381 in procedure "vfile_status_" ref 223 file_state 4 based fixed bin(17,0) level 3 in structure "seq_header" packed unaligned dcl 350 in procedure "vfile_status_" ref 176 file_state_block based structure level 1 unaligned dcl 418 file_state_blocks 551 based structure array level 2 in structure "new_indx_header" dcl 395 in procedure "vfile_status_" set ref 237 file_state_blocks 76 based structure array level 2 in structure "indx_header" dcl 381 in procedure "vfile_status_" set ref 270 file_version 4 based fixed bin(17,0) level 3 in structure "indx_info" packed unaligned dcl 1-33 in procedure "vfile_status_" set ref 219* 224 224 227 229 file_version 4 based fixed bin(17,0) level 2 in structure "indx_header" dcl 381 in procedure "vfile_status_" ref 219 flags 3 based structure level 2 in structure "uns_info" dcl 1-1 in procedure "vfile_status_" flags 3 based structure level 2 in structure "seq_info" dcl 1-11 in procedure "vfile_status_" foo 000124 automatic fixed bin(35,0) dcl 363 set ref 52* 56* 59* 60* 129* 130 132 134 free_blocks 10 based fixed bin(17,0) level 2 dcl 1-33 set ref 243* 277* 298* hcs_$fs_get_mode 000016 constant entry external dcl 320 ref 120 hcs_$initiate 000012 constant entry external dcl 318 ref 110 hcs_$status_long 000010 constant entry external dcl 317 ref 92 hcs_$terminate_noname 000014 constant entry external dcl 319 ref 52 header_id 4 based fixed bin(35,0) level 2 dcl 1-1 set ref 144* header_present 3(02) based bit(1) level 3 packed unaligned dcl 1-1 set ref 142* 144 151 i_s_ptr 000316 automatic pointer dcl 415 set ref 254* 256 257 i_state 000324 automatic fixed bin(17,0) dcl 417 set ref 253* 254 identifier 4 based fixed bin(35,0) level 2 dcl 346 ref 144 index_height 3 based fixed bin(17,0) level 2 in structure "index_state_block" dcl 429 in procedure "vfile_status_" ref 256 index_height 11 based fixed bin(17,0) level 2 in structure "indx_info" dcl 1-33 in procedure "vfile_status_" set ref 256* 299* index_state 114 based fixed bin(17,0) level 2 dcl 381 ref 253 index_state_block based structure level 1 unaligned dcl 429 index_state_blocks 115 based structure array level 2 dcl 381 set ref 254 indx_code constant fixed bin(17,0) initial dcl 380 ref 43 indx_header based structure level 1 dcl 381 indx_info based structure level 1 unaligned dcl 1-33 info based structure level 1 unaligned dcl 522 info_ptr parameter pointer dcl 521 ref 24 32 65 130 132 134 136 141 142 144 144 151 166 172 174 176 181 185 192 194 195 198 205 209 211 217 219 220 224 224 227 229 238 240 241 242 243 244 245 246 247 252 256 257 262 262 263 264 272 274 275 276 277 278 284 288 290 291 292 297 298 299 300 input_only 22 based bit(1) level 2 dcl 468 ref 177 iocb based structure level 1 dcl 3-2 iocb_ptr 000114 automatic pointer dcl 322 set ref 29* 54 56* 59* 60* 68* 69 72 72 73 73 73 153* 156* 163* 177 181 201 201 205 iocb_ptr_arg parameter pointer dcl 309 ref 65 68 iox_$attach_ioname 000026 constant entry external dcl 326 ref 153 iox_$close 000020 constant entry external dcl 323 ref 56 iox_$control 000034 constant entry external dcl 329 ref 163 iox_$destroy_iocb 000024 constant entry external dcl 325 ref 60 iox_$detach_iocb 000022 constant entry external dcl 324 ref 59 iox_$open 000030 constant entry external dcl 327 ref 156 key_bytes 13 based fixed bin(34,0) level 2 dcl 1-33 set ref 245* 278* 292* length builtin function dcl 365 ref 148 lock_status 3 based bit(2) level 3 packed unaligned dcl 1-11 set ref 130* 132* 134* 136* lock_word 000117 automatic bit(36) dcl 341 set ref 128* 129* max_rec_len 10 based fixed bin(21,0) level 2 in structure "blk_header" dcl 461 in procedure "vfile_status_" ref 198 max_rec_len 6 based fixed bin(21,0) level 2 in structure "blk_info" dcl 1-21 in procedure "vfile_status_" set ref 198* mode 000113 automatic fixed bin(5,0) dcl 321 in procedure "vfile_status_" set ref 119* 120* 121 mode 6 based fixed bin(17,0) level 2 in structure "blk_cb" dcl 500 in procedure "vfile_status_" ref 201 msf_manager_$close 000056 constant entry external dcl 367 ref 50 msf_manager_$get_ptr 000062 constant entry external dcl 375 ref 104 msf_manager_$open 000060 constant entry external dcl 374 ref 101 new_fs_block based structure level 1 unaligned dcl 400 new_indx_header based structure level 1 dcl 395 nodes 12 based fixed bin(17,0) level 2 dcl 1-33 set ref 257* 300* non_null_recs 6 based fixed bin(34,0) level 2 dcl 1-33 set ref 242* 276* 297* not_open 000312 automatic bit(1) dcl 373 set ref 47 69* 70 161 177 201 null builtin function dcl 365 ref 29 50 52 54 69 90 91 92 92 106 111 num_keys 15 based fixed bin(34,0) level 2 dcl 1-33 set ref 244* 262* number_of_allocated_records 5 based fixed bin(34,0) level 2 in structure "file_state_block" dcl 418 in procedure "vfile_status_" ref 276 number_of_allocated_records 10 based fixed bin(34,0) level 2 in structure "new_fs_block" dcl 400 in procedure "vfile_status_" ref 242 number_of_allocated_records 1 based fixed bin(34,0) level 2 in structure "r_s_block" dcl 455 in procedure "vfile_status_" ref 297 number_of_free_blocks 2 based fixed bin(34,0) level 2 in structure "r_s_block" dcl 455 in procedure "vfile_status_" ref 298 number_of_free_blocks 11 based fixed bin(34,0) level 2 in structure "new_fs_block" dcl 400 in procedure "vfile_status_" ref 243 number_of_free_blocks 6 based fixed bin(34,0) level 2 in structure "file_state_block" dcl 418 in procedure "vfile_status_" ref 277 number_of_keys 2 based fixed bin(34,0) level 2 dcl 400 ref 244 number_of_nodes based fixed bin(34,0) level 2 dcl 429 ref 257 number_of_records 2 based fixed bin(34,0) level 2 in structure "old_f_s_block" dcl 448 in procedure "vfile_status_" ref 290 number_of_records 6 based fixed bin(34,0) level 2 in structure "new_fs_block" dcl 400 in procedure "vfile_status_" ref 240 number_of_records 2 based fixed bin(17,0) level 2 in structure "file_state_block" dcl 418 in procedure "vfile_status_" ref 274 old_f_s_block based structure level 1 unaligned dcl 448 old_f_s_ptr 000320 automatic pointer dcl 415 set ref 285* 288 290 291 292 old_file_state_blocks 17 based structure array level 2 unaligned dcl 433 set ref 285 old_indx_header based structure level 1 unaligned dcl 433 old_version_index_height 67 based fixed bin(17,0) level 2 dcl 433 ref 299 old_version_number_of_nodes 70 based fixed bin(34,0) level 2 dcl 433 ref 300 open_data_ptr 22 based pointer level 2 dcl 3-2 ref 177 181 201 201 205 open_descrip_ptr 20 based pointer level 2 dcl 3-2 ref 69 program_version 4(18) based fixed bin(17,0) level 3 in structure "indx_info" packed unaligned dcl 1-33 in procedure "vfile_status_" set ref 220* program_version 5 based fixed bin(17,0) level 2 in structure "indx_header" dcl 381 in procedure "vfile_status_" ref 220 r_s_block based structure level 1 unaligned dcl 455 r_s_ptr 000322 automatic pointer dcl 415 set ref 294* 297 298 r_state 000325 automatic fixed bin(17,0) dcl 417 set ref 293* 294 record_bytes 7 based fixed bin(34,0) level 2 dcl 1-33 set ref 241* 275* 291* record_state 40 based fixed bin(17,0) level 2 dcl 433 ref 293 record_state_blocks 41 based structure array level 2 unaligned dcl 433 set ref 294 records 2 based fixed bin(34,0) level 2 dcl 1-33 set ref 240* 262 274* 290* reverse builtin function dcl 365 ref 148 rp_info 000122 automatic structure level 1 unaligned dcl 343 set ref 163 163 seg_ptr 000120 automatic pointer dcl 342 set ref 38 40 43 52 52* 78* 90* 104* 106 110* 111 120* 128 142 144 174 176 185 194 195 198 209 211 219 220 223 237 252 253 254 270 285 293 294 299 300 seg_ptr_arg parameter pointer dcl 308 ref 65 78 seg_ptr_entry 000100 automatic bit(1) dcl 307 set ref 26* 47 57 67* 146 177 201 seq_cb based structure level 1 dcl 468 seq_code constant fixed bin(17,0) initial dcl 378 ref 38 seq_header based structure level 1 unaligned dcl 350 seq_info based structure level 1 unaligned dcl 1-11 set_lock_$lock 000054 constant entry external dcl 340 ref 129 shared 26 based bit(1) level 2 dcl 500 ref 201 state 000116 automatic fixed bin(17,0) dcl 330 set ref 223* 237 270 285 substr builtin function dcl 365 ref 72 73 121 150 time_last_modified 2 based fixed bin(71,0) level 2 in structure "common_header" dcl 359 in procedure "vfile_status_" ref 211 time_last_modified 10 based fixed bin(71,0) level 2 in structure "blk_info" dcl 1-21 in procedure "vfile_status_" set ref 211* total_key_length 3 based fixed bin(34,0) level 2 in structure "file_state_block" dcl 418 in procedure "vfile_status_" ref 278 total_key_length 5 based fixed bin(34,0) level 2 in structure "new_fs_block" dcl 400 in procedure "vfile_status_" ref 245 total_key_length 3 based fixed bin(34,0) level 2 in structure "old_f_s_block" dcl 448 in procedure "vfile_status_" ref 292 total_record_length 7 based fixed bin(34,0) level 2 in structure "new_fs_block" dcl 400 in procedure "vfile_status_" ref 241 total_record_length 4 based fixed bin(34,0) level 2 in structure "file_state_block" dcl 418 in procedure "vfile_status_" ref 275 total_record_length 4 based fixed bin(34,0) level 2 in structure "old_f_s_block" dcl 448 in procedure "vfile_status_" ref 291 type 1 based fixed bin(17,0) level 2 in structure "indx_info" dcl 1-33 in procedure "vfile_status_" set ref 217* type 1 based fixed bin(17,0) level 2 in structure "seq_info" dcl 1-11 in procedure "vfile_status_" set ref 172* type 1 based fixed bin(17,0) level 2 in structure "uns_info" dcl 1-1 in procedure "vfile_status_" set ref 141* type 1 based fixed bin(17,0) level 2 in structure "blk_info" dcl 1-21 in procedure "vfile_status_" set ref 192* type 000101 automatic bit(2) level 2 in structure "branch_info" packed unaligned dcl 310 in procedure "vfile_status_" set ref 97 unique_chars_ 000032 constant entry external dcl 328 ref 153 153 uns_code constant fixed bin(17,0) initial dcl 377 ref 142 uns_header based structure level 1 unaligned dcl 346 uns_info based structure level 1 unaligned dcl 1-1 verify builtin function dcl 365 ref 148 version 4(18) based fixed bin(17,0) level 3 in structure "seq_header" packed unaligned dcl 350 in procedure "vfile_status_" ref 174 version 4 based fixed bin(17,0) level 2 in structure "blk_header" dcl 461 in procedure "vfile_status_" ref 194 version based fixed bin(17,0) level 2 in structure "info" dcl 522 in procedure "vfile_status_" ref 32 version 4 based fixed bin(17,0) level 2 in structure "seq_info" dcl 1-11 in procedure "vfile_status_" set ref 174* version 4 based fixed bin(17,0) level 2 in structure "blk_info" dcl 1-21 in procedure "vfile_status_" set ref 194* version_info 4 based structure level 2 dcl 1-33 version_word 4 based structure level 2 dcl 350 vfs_version_1 constant fixed bin(17,0) initial dcl 1-67 ref 32 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. cb_ptr automatic pointer dcl 520 fixed builtin function dcl 365 vbl_info based structure level 1 unaligned dcl 1-55 NAMES DECLARED BY EXPLICIT CONTEXT. check_access 000537 constant entry internal dcl 117 ref 31 75 check_code 000275 constant entry internal dcl 82 ref 103 114 123 155 159 165 cleanup 000125 constant label dcl 47 ref 84 93 get_common_indx_stats 001346 constant entry internal dcl 250 ref 236 269 get_file_base 000302 constant entry internal dcl 88 ref 30 74 get_latest_indx_stats 001311 constant entry internal dcl 234 ref 224 get_lock_status 000572 constant entry internal dcl 126 ref 173 193 218 get_new_stats 001400 constant entry internal dcl 267 ref 227 get_old_stats 001430 constant entry internal dcl 282 ref 229 get_status 000076 constant label dcl 32 ref 76 80 get_time_stamp 001236 constant label dcl 211 ref 207 open_it 001043 constant label dcl 156 ref 161 proc_blk_file 001174 constant entry internal dcl 190 ref 40 proc_indx_file 001242 constant entry internal dcl 215 ref 43 proc_seq_file 001133 constant entry internal dcl 170 ref 38 proc_uns_file 000655 constant entry internal dcl 139 ref 46 seg 000231 constant entry external dcl 65 set_default_stats 001367 constant entry internal dcl 260 ref 279 301 vfile_status_ 000037 constant entry external dcl 24 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1746 2032 1474 1756 Length 2304 1474 64 235 252 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME vfile_status_ 457 external procedure is an external procedure. check_code internal procedure shares stack frame of external procedure vfile_status_. get_file_base internal procedure shares stack frame of external procedure vfile_status_. check_access internal procedure shares stack frame of external procedure vfile_status_. get_lock_status internal procedure shares stack frame of external procedure vfile_status_. proc_uns_file internal procedure shares stack frame of external procedure vfile_status_. proc_seq_file internal procedure shares stack frame of external procedure vfile_status_. proc_blk_file internal procedure shares stack frame of external procedure vfile_status_. proc_indx_file internal procedure shares stack frame of external procedure vfile_status_. get_latest_indx_stats internal procedure shares stack frame of external procedure vfile_status_. get_common_indx_stats internal procedure shares stack frame of external procedure vfile_status_. set_default_stats internal procedure shares stack frame of external procedure vfile_status_. get_new_stats internal procedure shares stack frame of external procedure vfile_status_. get_old_stats internal procedure shares stack frame of external procedure vfile_status_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME vfile_status_ 000100 seg_ptr_entry vfile_status_ 000101 branch_info vfile_status_ 000113 mode vfile_status_ 000114 iocb_ptr vfile_status_ 000116 state vfile_status_ 000117 lock_word vfile_status_ 000120 seg_ptr vfile_status_ 000122 rp_info vfile_status_ 000124 foo vfile_status_ 000126 fcb_ptr vfile_status_ 000130 d_name vfile_status_ 000202 e_name vfile_status_ 000212 atd vfile_status_ 000312 not_open vfile_status_ 000313 bc vfile_status_ 000314 f_s_ptr vfile_status_ 000316 i_s_ptr vfile_status_ 000320 old_f_s_ptr vfile_status_ 000322 r_s_ptr vfile_status_ 000324 i_state vfile_status_ 000325 r_state vfile_status_ 000364 d_len proc_uns_file THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_cs cat_realloc_cs call_ext_out_desc call_ext_out return shorten_stack ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. hcs_$fs_get_mode hcs_$initiate hcs_$status_long hcs_$terminate_noname iox_$attach_ioname iox_$close iox_$control iox_$destroy_iocb iox_$detach_iocb iox_$open msf_manager_$close msf_manager_$get_ptr msf_manager_$open set_lock_$lock unique_chars_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$bad_file error_table_$dirseg error_table_$lock_wait_time_exceeded error_table_$locked_by_this_process error_table_$moderr error_table_$no_s_permission LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 24 000032 26 000057 27 000060 28 000066 29 000072 30 000074 31 000075 32 000076 35 000103 36 000106 38 000107 40 000114 43 000120 46 000124 47 000125 50 000131 52 000145 54 000162 56 000166 57 000177 59 000201 60 000212 63 000223 65 000224 67 000236 68 000240 69 000244 70 000251 72 000252 73 000260 74 000265 75 000266 76 000267 78 000270 79 000273 80 000274 82 000275 84 000276 86 000301 88 000302 90 000303 91 000305 92 000306 93 000351 97 000360 101 000373 103 000426 104 000427 106 000454 108 000462 110 000463 111 000527 114 000535 115 000536 117 000537 119 000540 120 000541 121 000555 123 000570 124 000571 126 000572 128 000573 129 000576 130 000612 132 000622 134 000635 136 000647 137 000654 139 000655 141 000656 142 000663 144 000672 146 000702 148 000704 150 000721 151 000756 153 000774 155 001042 156 001043 159 001065 160 001066 161 001067 163 001071 165 001124 166 001125 168 001132 170 001133 172 001134 173 001141 174 001142 176 001152 177 001155 181 001165 183 001167 185 001170 188 001173 190 001174 192 001175 193 001202 194 001203 195 001211 198 001213 201 001215 205 001230 207 001232 209 001233 211 001236 213 001241 215 001242 217 001243 218 001250 219 001251 220 001260 223 001262 224 001264 227 001275 229 001301 231 001305 232 001310 234 001311 236 001312 237 001313 238 001320 240 001325 241 001327 242 001331 243 001333 244 001335 245 001337 246 001341 247 001343 248 001345 250 001346 252 001347 253 001355 254 001357 256 001362 257 001364 258 001366 260 001367 262 001370 263 001375 264 001376 265 001377 267 001400 269 001401 270 001402 272 001407 274 001414 275 001416 276 001420 277 001422 278 001424 279 001426 280 001427 282 001430 284 001431 285 001435 288 001442 290 001444 291 001446 292 001450 293 001452 294 001454 297 001457 298 001461 299 001463 300 001465 301 001467 302 001470 ----------------------------------------------------------- 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