COMPILATION LISTING OF SEGMENT fm_attribute_fref_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/04/85 0942.7 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* 9* This module and the module fm_attribute_ together contain 10* all operations which deal with Data Management files as file system 11* objects. These operations are the eventual targets of entries in 12* fs_util_, the file system utility for handling file system objects 13* and extended objects. fm_attribute_fref_ contains those operations 14* which require the process to be using Data Management - per-process 15* initialization will be executed if it has not already been executed. 16* fm_attribute_ contains those operations which do not 17* require the process to be using Data Management. 18**/ 19 20 /* HISTORY: 21* 22*Written by Matthew Pierret, 11/13/84. 23*Modified: 24*12/19/84 by Matthew Pierret: Implemented set_ring_brackets and get_switch. 25* Changed all entries to call INIT_FOR_FINISH to initialize variables 26* which are tested in the FINISH procedure. 27*01/03/85 by Matthew Pierret: Changed to check for benign error code 28* dm_error_$file_already_open. 29*01/04/85 by Matthew C. Pierret: Changed to set file_pathname in 30* set_ring_brackets via the pathname_ function. 31*03/07/85 by Matthew C. Pierret: In response to audit comments, added a call 32* to ERROR_RETURN following the call to hcs_$chname_file if the 33* returned code is non-zero; added declaration of sum and unspec; 34* removed declartions of un-used variables. Also, added use of 35* ERROR_RETURN in other parts of the chname_file entry. 36**/ 37 38 /* format: style2,ind3 */ 39 40 fm_attribute_fref_$get_switch: 41 procedure (p_dirname, p_ename, p_switch_name, p_switch_value, p_code); 42 43 44 /* START OF DECLARATIONS */ 45 46 /* Parameter */ 47 48 dcl p_dirname char (*) parameter; /* directory containing the DM file */ 49 dcl p_ename char (*) parameter; /* name of the DM file */ 50 dcl p_code fixed bin (35) parameter; 51 52 dcl p_old_name char (*) parameter; /* name to be deleted */ 53 dcl p_new_name char (*) parameter; /* name to be added */ 54 55 dcl p_ring_brackets (2) fixed bin (3) parameter; 56 /* new ring brackets */ 57 dcl p_switch_name char (*) parameter; 58 dcl p_switch_value bit (1) parameter; 59 60 /* Automatic */ 61 62 dcl dirname char (256); 63 dcl file_pathname char (256); 64 dcl ename char (32); 65 dcl old_name char (32); 66 dcl new_name char (32); 67 dcl switch_name char (64); 68 dcl component_name char (32); 69 70 dcl callers_validation_level 71 init (-1) fixed bin; 72 dcl code fixed bin (35); 73 dcl entry_idx fixed bin; 74 dcl file_uid bit (36) aligned; 75 dcl fs_ring_brackets (3) fixed bin (3); 76 dcl my_file_oid aligned bit (36) init (""b); 77 dcl number_of_opens fixed bin; 78 dcl ring_brackets (2) fixed bin (3); 79 dcl ring_brackets_bc fixed bin (24); 80 dcl sys_pn_tbl_idx fixed bin; 81 82 dcl local_msf_ptr ptr; 83 84 dcl 1 my_file_attributes aligned like file_attributes; 85 86 /* Based */ 87 88 /* Builtins */ 89 90 dcl (addr, hbound, lbound, null, sum, unspec) 91 builtin; 92 93 /* Condition */ 94 95 dcl cleanup condition; 96 97 /* Constant */ 98 99 dcl ( 100 LOCK_WAIT_TIME init (1000000000) fixed bin (71), 101 STAR_BRANCHES_ONLY init (2) fixed bin (2) 102 ) internal static options (constant); 103 104 /* Entry */ 105 106 dcl cu_$level_get entry (fixed bin); 107 dcl cu_$level_set entry (fixed bin); 108 dcl file_manager_$close entry (bit (36) aligned, fixed bin (35)); 109 dcl file_manager_$open entry (char (*), char (*), bit (36) aligned, fixed bin (35)); 110 dcl fm_get_$internal_get entry (bit (36) aligned, fixed bin (27), ptr, fixed bin (35)); 111 dcl fm_put_$internal_put entry (bit (36) aligned, fixed bin (27), ptr, fixed bin (35)); 112 dcl fm_sys_pn_tbl_util_$opens 113 entry (bit (36) aligned, fixed bin, fixed bin); 114 dcl fm_validate_$check_write_ring_bracket 115 entry (char (*), char (*), fixed bin (35)); 116 dcl get_ring_ entry returns (fixed bin); 117 dcl get_system_free_area_ entry () returns (ptr); 118 dcl hcs_$chname_file entry (char (*), char (*), char (*), char (*), fixed bin (35)); 119 dcl hcs_$set_bc entry (char (*), char (*), fixed bin (24), fixed bin (35)); 120 dcl hcs_$set_ring_brackets entry (char (*), char (*), (3) fixed bin (3), fixed bin (35)); 121 dcl hcs_$star_ entry (char (*), char (*), fixed bin (2), ptr, fixed bin, ptr, ptr, fixed bin (35)); 122 dcl lock_manager_$lock entry (bit (36) aligned, fixed bin (27), fixed bin, fixed bin (71), fixed bin, 123 fixed bin (35)); 124 dcl msf_manager_$close entry (ptr); 125 dcl msf_manager_$open entry (char (*), char (*), ptr, fixed bin (35)); 126 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 127 128 /* External */ 129 130 dcl dm_error_$bad_file_atrs_ver 131 fixed bin (35) ext; 132 dcl dm_error_$file_already_open 133 fixed bin (35) ext; 134 dcl dm_error_$file_in_use fixed bin (35) ext; 135 dcl dm_error_$file_not_dm_type 136 fixed bin (35) ext; 137 dcl dm_error_$fm_cant_remove_name 138 fixed bin (35) ext; 139 dcl error_table_$argerr fixed bin (35) ext; 140 dcl error_table_$invalid_ring_brackets 141 fixed bin (35) ext; 142 dcl error_table_$not_seg_type 143 fixed bin (35) ext; 144 145 146 /* The actual entry is the main procedure statement. 147* It is repeated here for clarity. 148* 149*get_switch: 150* entry (p_dirname, p_ename, p_switch_name, p_switch_value, p_code); 151**/ 152 153 dirname = p_dirname; 154 ename = p_ename; 155 switch_name = p_switch_name; 156 p_switch_value = ""b; 157 p_code, code = 0; 158 159 call INIT_FOR_FINISH (); 160 161 if switch_name = "prot" 162 then switch_name = "protection"; 163 else if switch_name = "conc" 164 then switch_name = "concurrency"; 165 else if switch_name = "rlb" 166 then switch_name = "rollback"; 167 if switch_name ^= "protection" & switch_name ^= "concurrency" & switch_name ^= "rollback" 168 then call ERROR_RETURN (error_table_$argerr); /* This is the code returned the get_switch entry of other managers */ 169 170 call cu_$level_get (callers_validation_level); 171 on cleanup call FINISH (); 172 173 call file_manager_$open (dirname, ename, my_file_oid, code); 174 if code = dm_error_$file_already_open 175 then code = 0; 176 if code ^= 0 177 then call ERROR_RETURN (code); 178 179 call cu_$level_set (get_ring_ ()); 180 181 call GET_FILE_ATTRIBUTES (my_file_oid, addr (my_file_attributes)); 182 183 if switch_name = "protection" 184 then p_switch_value = my_file_attributes.flags.protected; 185 else if switch_name = "concurrency" 186 then p_switch_value = my_file_attributes.flags.protected & ^my_file_attributes.flags.no_concurrency; 187 else if switch_name = "rollback" 188 then p_switch_value = my_file_attributes.flags.protected & ^my_file_attributes.flags.no_rollback; 189 190 call cu_$level_set (callers_validation_level); 191 192 call file_manager_$close (my_file_oid, code); 193 if code ^= 0 194 then call ERROR_RETURN (code); 195 196 call RETURN (); 197 198 199 200 /* Changes the names on a DM file. Renames are not supported. */ 201 202 chname_file: 203 entry (p_dirname, p_ename, p_old_name, p_new_name, p_code); 204 205 dirname = p_dirname; 206 ename = p_ename; 207 old_name = p_old_name; 208 new_name = p_new_name; 209 p_code, code = 0; 210 211 call INIT_FOR_FINISH (); 212 213 if old_name ^= "" 214 then call ERROR_RETURN (dm_error_$fm_cant_remove_name); 215 /* mustn't delete name */ 216 217 call fm_validate_$check_write_ring_bracket (dirname, ename, code); 218 if code ^= 0 219 then if code = error_table_$not_seg_type 220 then call ERROR_RETURN (dm_error_$file_not_dm_type); 221 else call ERROR_RETURN (code); 222 223 call cu_$level_get (callers_validation_level); 224 on cleanup call FINISH (); 225 call cu_$level_set (get_ring_ ()); 226 227 call hcs_$chname_file (dirname, ename, old_name, new_name, code); 228 229 if code ^= 0 230 then call ERROR_RETURN (code); 231 232 call cu_$level_set (callers_validation_level); 233 call RETURN (); 234 235 /* DESCRIPTION OF set_ring_brackets: 236* 237* This entry sets the extended ring brackets of a DM file. Because 238* there exists no faulting mechanism as for hardware ring brackets, the 239* ring brackets can not be made more restrictive and still have all 240* current users of the file honor the new ring brackets. For this reason, 241* this entry only allows one to change ring brackets to a higher level, 242* e.g., 4,4 to 4,5. 243* */ 244 245 set_ring_brackets: 246 entry (p_dirname, p_ename, p_ring_brackets, p_code); 247 248 dirname = p_dirname; 249 ename = p_ename; 250 ring_brackets (*) = p_ring_brackets (*); 251 code = 0; 252 unspec (my_file_attributes) = ""b; 253 call INIT_FOR_FINISH (); 254 on cleanup call FINISH (); 255 256 call cu_$level_get (callers_validation_level); 257 258 call file_manager_$open (dirname, ename, my_file_oid, code); 259 if code = dm_error_$file_already_open 260 then code = 0; 261 if code ^= 0 262 then call ERROR_RETURN (code); 263 264 /*** Make sure that no one else is using this file. Do so by 265* locking the file exclusively, preventing any new openings. 266* Then check the system pathname table to see if 267* our opening is the only current opening for this file. 268* If not, we have to give up. */ 269 270 file_uid = file_access_table.e (addr (my_file_oid) -> file_oid.file_access_table_idx).uid; 271 sys_pn_tbl_idx = file_access_table.e (addr (my_file_oid) -> file_oid.file_access_table_idx).pn_tbl_idx; 272 273 call lock_manager_$lock (file_uid, LOCK_ENTIRE_FILE, LOCK_MODE_X, 1e9, (0), code); 274 if code ^= 0 275 then call ERROR_RETURN (code); 276 call fm_sys_pn_tbl_util_$opens (file_uid, sys_pn_tbl_idx, number_of_opens); 277 if number_of_opens > 1 278 then call ERROR_RETURN (dm_error_$file_in_use); 279 280 /*** Get the current ring brackets from the file_attributes. */ 281 282 call cu_$level_set (get_ring_ ()); 283 284 call GET_FILE_ATTRIBUTES (my_file_oid, addr (my_file_attributes)); 285 286 /* Verify that the given ring brackets are acceptable. */ 287 288 if ring_brackets (1) > ring_brackets (2) | get_ring_ () > ring_brackets (1) 289 | callers_validation_level > ring_brackets (1) 290 then call ERROR_RETURN (error_table_$invalid_ring_brackets); 291 292 /*** Set the new ring brackets in the file's file_attributes. */ 293 294 my_file_attributes.ring_brackets.write = ring_brackets (1); 295 my_file_attributes.ring_brackets.read = ring_brackets (2); 296 297 call PUT_FILE_ATTRIBUTES (my_file_oid, addr (my_file_attributes)); 298 299 /*** Set the actual file system ring brackets on the components 300* to conform to the new DM file ring brackets. This means leaving 301* the write bracket alone and setting the read bracket to the 302* level of the DM file read bracket. */ 303 304 fs_ring_brackets (1) = get_ring_ (); 305 fs_ring_brackets (2) = ring_brackets (2); 306 fs_ring_brackets (3) = ring_brackets (2); 307 308 file_pathname = pathname_ (dirname, ename); 309 310 call hcs_$star_ (file_pathname, "*", STAR_BRANCHES_ONLY, get_system_free_area_ (), star_entry_count, star_entry_ptr, 311 star_names_ptr, code); 312 if code ^= 0 313 then call ERROR_RETURN (code); 314 do entry_idx = lbound (star_entries, 1) to hbound (star_entries, 1); 315 component_name = star_names (star_entries (entry_idx).nindex); 316 call hcs_$set_ring_brackets (file_pathname, component_name, fs_ring_brackets, code); 317 if code ^= 0 318 then call ERROR_RETURN (code); 319 end; 320 321 /*** Now re-open the file MSF to reset fcb.rbs */ 322 323 local_msf_ptr = file_access_table.e (addr (my_file_oid) -> file_oid.file_access_table_idx).msf_ptr; 324 file_access_table.e (addr (my_file_oid) -> file_oid.file_access_table_idx).msf_ptr = null; 325 call msf_manager_$close (local_msf_ptr); 326 call msf_manager_$open (dirname, ename, local_msf_ptr, code); 327 if code ^= 0 328 then call ERROR_RETURN (code); 329 file_access_table.e (addr (my_file_oid) -> file_oid.file_access_table_idx).msf_ptr = local_msf_ptr; 330 331 /*** Store an encoded version of the ring brackets in the 332* bit count of the first component. */ 333 334 ring_brackets_bc = 8 * ring_brackets (1) + ring_brackets (2); 335 call hcs_$set_bc (file_pathname, "0", ring_brackets_bc, code); 336 if code ^= 0 337 then call ERROR_RETURN (code); 338 339 /* Now finish up and return. */ 340 341 call cu_$level_set (callers_validation_level); 342 343 call file_manager_$close (my_file_oid, code); 344 if code ^= 0 345 then call ERROR_RETURN (code); 346 347 call RETURN (); 348 349 350 MAIN_RETURN: 351 return; 352 353 RETURN: 354 proc (); 355 356 call FINISH (); 357 go to MAIN_RETURN; 358 359 end RETURN; 360 361 ERROR_RETURN: 362 proc (er_p_code); 363 364 dcl er_p_code fixed bin (35) parameter; 365 366 p_code = er_p_code; 367 call FINISH (); 368 go to MAIN_RETURN; 369 370 end ERROR_RETURN; 371 372 FINISH: 373 proc (); 374 375 if local_msf_ptr = null () 376 then 377 do; 378 call msf_manager_$open (dirname, ename, local_msf_ptr, (0)); 379 file_access_table.e (addr (my_file_oid) -> file_oid.file_access_table_idx).msf_ptr = local_msf_ptr; 380 end; 381 382 if star_names_ptr ^= null 383 then free star_names; 384 if star_entry_ptr ^= null 385 then free star_entries; 386 387 if my_file_oid ^= ""b 388 then call file_manager_$close (my_file_oid, (0)); 389 390 if callers_validation_level > 0 391 then call cu_$level_set (callers_validation_level); 392 393 end FINISH; 394 395 INIT_FOR_FINISH: 396 proc (); 397 398 star_names_ptr = null (); 399 star_entry_ptr = null (); 400 my_file_oid = ""b; 401 local_msf_ptr = addr (local_msf_ptr); /* Must be non-null for FINISH */ 402 callers_validation_level = 0; 403 404 end INIT_FOR_FINISH; 405 406 GET_FILE_ATTRIBUTES: 407 proc (gfa_p_file_oid, gfa_p_file_attributes_ptr); 408 409 /* DESCRIPTION of GET_FILE_ATTRIBUTES: 410* 411* Get the file_attributes structure of file indicated by gfa_p_file_oid, 412* putting it at gfa_p_file_attributes_ptr. The location in the file of the 413* file_attributes structure is between the end of the addressable portion 414* of control interval 0 and the trailer of that control interval. 415**/ 416 417 dcl gfa_p_file_attributes_ptr 418 ptr parameter; 419 dcl gfa_p_file_oid bit (36) aligned parameter; 420 dcl gfa_code fixed bin (35); 421 dcl 1 gfa_ci_parts aligned, 422 2 number_of_parts fixed bin init (1), 423 2 mbz fixed bin init (0), 424 2 part (1) like ci_parts.part; 425 426 gfa_ci_parts.part (1).offset_in_bytes = CI_0_ADDRESSABLE_LENGTH; 427 gfa_ci_parts.part (1).length_in_bytes = CI_ADDRESSABLE_LENGTH - CI_0_ADDRESSABLE_LENGTH; 428 gfa_ci_parts.part (1).local_ptr = gfa_p_file_attributes_ptr; 429 430 call fm_get_$internal_get (gfa_p_file_oid, 0, addr (gfa_ci_parts), gfa_code); 431 if gfa_code ^= 0 432 then call ERROR_RETURN (gfa_code); 433 434 if gfa_p_file_attributes_ptr -> file_attributes.version ^= FILE_ATTRIBUTES_VERSION_2 435 then call ERROR_RETURN (dm_error_$bad_file_atrs_ver); 436 437 return; 438 439 end GET_FILE_ATTRIBUTES; 440 441 PUT_FILE_ATTRIBUTES: 442 proc (pfa_p_file_oid, pfa_p_file_attributes_ptr); 443 444 /* DESCRIPTION of PUT_FILE_ATTRIBUTES: 445* 446* Put the file_attributes structure pointed to by 447* pfs_p_file_attributes_ptr in the appropriate location in the file 448* indicated by pfa_p_file_oid. The location in the file of the 449* file_attributes structure is between the end of the addressable portion 450* of control interval 0 and the trailer of that control interval. 451**/ 452 453 dcl pfa_p_file_attributes_ptr 454 ptr parameter; 455 dcl pfa_p_file_oid bit (36) aligned parameter; 456 dcl pfa_code fixed bin (35); 457 dcl 1 pfa_ci_parts aligned, 458 2 number_of_parts fixed bin init (1), 459 2 mbz fixed bin init (0), 460 2 part (1) like ci_parts.part; 461 462 pfa_ci_parts.part (1).offset_in_bytes = CI_0_ADDRESSABLE_LENGTH; 463 pfa_ci_parts.part (1).length_in_bytes = CI_ADDRESSABLE_LENGTH - CI_0_ADDRESSABLE_LENGTH; 464 pfa_ci_parts.part (1).local_ptr = pfa_p_file_attributes_ptr; 465 466 call fm_put_$internal_put (pfa_p_file_oid, 0, addr (pfa_ci_parts), pfa_code); 467 if pfa_code ^= 0 468 then call ERROR_RETURN (pfa_code); 469 470 return; 471 472 end PUT_FILE_ATTRIBUTES; 473 1 1 /* BEGIN INCLUDE FILE: dm_fm_file_access_tbl.incl.pl1 */ 1 2 1 3 /* DESCRIPTION: 1 4* 1 5* This include file contains the file_access_table structure. This 1 6* is a per-process table which contains one entry for each file which the 1 7* process has open. The table is set up during per-process initialization 1 8* and is pointed to by fm_data_$file_access_table_ptr. The bounds limit 1 9* on the array of entries is abritrary and can be changed. 1 10**/ 1 11 1 12 /* HISTORY: 1 13*Written by Jeffrey D. Ives, 10/11/82. 1 14* (01/28/82 Andre Bensoussan, Design.) 1 15*Modified: 1 16*07/11/84 by Matthew Pierret: Changed name of structure from proc_ad_tbl to 1 17* file_access_table. 1 18*11/07/84 by Matthew Pierret: Removed the un-used post_commit_actions element. 1 19* Removed the now-obsolete oid structure. It has been replaced by 1 20* file_oid in dm_fm_file_oid.incl.pl1. 1 21**/ 1 22 1 23 /* format: style2,ind3 */ 1 24 1 25 1 26 dcl fm_data_$file_access_table_ptr 1 27 ptr ext; 1 28 1 29 dcl 1 file_access_table aligned based (fm_data_$file_access_table_ptr), 1 30 2 h, 1 31 3 version char (8) aligned, 1 32 3 last_entry fixed bin, 1 33 3 post_transaction_actions 1 34 fixed bin, 1 35 3 mbz_1 (6) fixed bin (71), 1 36 2 e (1024) like file_access_info; 1 37 1 38 1 39 dcl FILE_ACCESS_TABLE_VERSION_1 1 40 init ("FileAT 1") char (8) aligned static options (constant); 1 41 1 42 /* END INCLUDE FILE: dm_fm_file_access_tbl.incl.pl1 */ 474 475 2 1 /* BEGIN INCLUDE FILE: dm_fm_file_access_info.incl.pl1 */ 2 2 2 3 /* DESCRIPTION: 2 4* The file_access_info structure contains per-process information 2 5* about a DM file. Each file_access_info structure is one entry in 2 6* the file_access_table.e array. The entry can be in one of three states: 2 7* not-in-use (file_access_info.entry_state is 0), in-use (entry_state is 2 8* -1) or still in-use, but to be discarded at the end of the transaction 2 9* (any number > 0). An entry needs to be discarded when the file is 2 10* completely closed by the user. This last state is useful because it is 2 11* better not to discard the entry when it is completely closed until the 2 12* end of the current transaction, so that if the transaction is aborted, the 2 13* file need not be re-opened to apply the before images. A list of entries 2 14* to be discarded is maintained using the entry_state variable. 2 15* The file can be in one of three states: exists (file_state = 1), 2 16* does not exist (file_state = 0), and logically_deleted (file_state = 3). 2 17**/ 2 18 2 19 /* HISTORY: 2 20*Written by Jeffrey D. Ives, 10/11/82. 2 21* (Original design by Andre Bensoussan, 01/28/82.) 2 22*Modified: 2 23*10/05/83 Jeffrey D. Ives: Added fields for lock advice and expanded seg_nums. 2 24*07/12/84 by Matthew Pierret: Re-named proc_ad to file_access_info. 2 25*12/17/84 by Matthew Pierret: Changed post_transaction_actions sub-structure 2 26* to state, with entry_state (replacing thread) and the new 2 27* file_state. Added a DESCRIPTION section. Added constants for 2 28* possible file_state values. 2 29**/ 2 30 2 31 /* format: style2,^inddcls,dclind5 */ 2 32 2 33 dcl 1 file_access_info aligned based (file_access_info_ptr), 2 34 2 state aligned, 2 35 3 entry_state fixed bin (17) unal, 2 36 3 file_state fixed bin (17) unal, 2 37 2 uid bit (36), 2 38 2 blocking_factor fixed bin (17) unal, 2 39 2 ring_brackets unal, 2 40 3 write fixed bin (3) unsigned unal, 2 41 3 read fixed bin (3) unsigned unal, 2 42 3 mbz_rb fixed bin (3) unsigned unal, 2 43 2 integrity_switches unal, 2 44 3 record_time_modified 2 45 bit (1) unal, /* record time modified in ci_header and trailer */ 2 46 3 transaction bit (1) unal, /* permit access only during a transaction */ 2 47 3 lock bit (1) unal, /* lock control intervals before accessing them */ 2 48 3 bj bit (1) unal, /* put undo records in the before journal */ 2 49 3 aj bit (1) unal, /* put redo records in the after journal */ 2 50 3 mbz_is bit (4) unal, 2 51 2 last_transaction_id 2 52 bit (36), 2 53 2 msf_ptr ptr unal, 2 54 2 pn_tbl_idx fixed bin (17) unal, 2 55 2 lock_advice fixed bin (17) unal, 2 56 2 opens fixed bin (17) unal, 2 57 2 seg_0_num bit (18) unal, 2 58 2 seg_nums (27) fixed bin (12) uns unal; 2 59 2 60 2 61 dcl file_access_info_ptr ptr init (null ()); 2 62 2 63 dcl ( 2 64 FILE_ACCESS_INFO_IN_USE 2 65 init (-1), 2 66 FILE_ACCESS_INFO_NOT_IN_USE 2 67 init (0), 2 68 FILE_DOES_NOT_EXIST init (0), 2 69 FILE_EXISTS init (1), 2 70 FILE_LOGICALLY_DELETED init (3) 2 71 ) fixed bin internal static options (constant); 2 72 2 73 2 74 /* END INCLUDE FILE: dm_fm_file_access_info.incl.pl1 */ 476 477 3 1 /* BEGIN INCULE FILE dm_fm_file_attributes.incl.pl1 */ 3 2 3 3 /* DESCRIPTION: 3 4* 3 5* This include file contains the declaration of the file_attributes 3 6* structure. An instance of this structure is stored in control interval 3 7* zero of each DM file. It describes the attributes of the file. 3 8* 3 9* The structure is 896 bytes, or 224 words, long. 3 10**/ 3 11 3 12 /* HISTORY: 3 13*Written by Matthew Pierret, 06/15/84. 3 14* (Structure designed by Jeff Ives.) 3 15*Modified: 3 16*11/06/84 by Matthew Pierret: Changed mbz_rb1 from bit (28) to bit (30). 3 17* Removed the un-used version overlay and related constants. 3 18**/ 3 19 3 20 /* format: style2,ind3 */ 3 21 3 22 dcl 1 file_attributes aligned based (file_attributes_ptr), 3 23 2 version char (8) aligned, 3 24 2 unique_id bit (36), 3 25 2 ci_size_in_bytes fixed bin (35), /* control interval physical size, must be 4096 */ 3 26 2 blocking_factor fixed bin, /* # of cis in each msf seg, must be 64 or 255 */ 3 27 2 flags aligned, 3 28 3 protected bit unal, /* protected against inconsistency */ 3 29 3 no_concurrency bit unal, /* don't protect against concurrent access */ 3 30 3 no_rollback bit unal, /* don't protect against system failure */ 3 31 3 mbz_f1 bit (33) unal, 3 32 2 date_time_created fixed bin (71), 3 33 2 ring_brackets aligned, 3 34 3 write fixed bin (3) uns unal, 3 35 3 read fixed bin (3) uns unal, 3 36 3 mbz_rb1 bit (30) bit unal, 3 37 2 mbz_1 fixed bin (35), /* 10 words so far */ 3 38 2 mbz_2 (9) fixed bin (71), /* 28 words so far */ 3 39 2 time_last_dumped fixed bin (71), /* Not yet used */ 3 40 2 dump_file_path char (168), /* Not yet used */ 3 41 2 mbz_3 (4) fixed bin (71), /* 80 words so far */ 3 42 2 after_journal_path char (168), /* Not yet used */ 3 43 2 mbz_4 (50) fixed bin (71), /* 222 words so far */ 3 44 2 mbz_5 bit (54) unal, /* 223.5 words so far */ 3 45 2 length_of_attributes 3 46 fixed bin (17) unal; /* 224 words total */ 3 47 3 48 3 49 dcl file_attributes_ptr ptr init (null ()); 3 50 3 51 dcl FILE_ATTRIBUTES_VERSION_2 3 52 init ("FilAtt02") char (8) aligned internal static options (constant); 3 53 3 54 3 55 /* END INCLUDE FILE dm_fm_file_attributes.incl.pl1 */ 478 479 4 1 /* BEGIN INCLUDE FILE: dm_fm_file_oid.incl.pl1 */ 4 2 4 3 /* DESCRIPTION: 4 4* This include file contains the file_oid (file opening identifier) 4 5* structure. File opening ids are passed across the file_manager_ 4 6* interface as bit(36)aligned strings. The file_oid structure defines 4 7* the contents of the string. Two components make up a file opening id: 4 8* the index of the file opening in the file_access_table structure, which 4 9* contains per-process information on each file which is open, and the 4 10* last 18 bits of the file's unique id, used for verification of the entry 4 11* in the file_access_table. 4 12**/ 4 13 4 14 /* 4 15*HISTORY: 4 16*Written by Matthew Pierret, 07/16/84. 4 17*Modified: 4 18*11/02/84 by Matthew Pierret: Made file_oid based. 4 19**/ 4 20 4 21 /* format: style2,ind3 */ 4 22 4 23 dcl 1 file_oid aligned based, 4 24 2 file_access_table_idx 4 25 fixed bin (17) unal, /* index into file_access_table */ 4 26 2 uid_tail bit (18) unal; /* Last 18 bits of file unique id */ 4 27 4 28 4 29 /* END INCLUDE FILE: dm_fm_file_oid.incl.pl1 */ 480 481 5 1 /* BEGIN INCLUDE FILE: dm_ci_parts.incl.pl1 */ 5 2 5 3 /* DESCRIPTION: 5 4* 5 5* This include file contains the ci_parts structure. This structure 5 6* is used across the file_manager_ interface to specify the parts of a 5 7* control interval to get or put. If the number_of parts is equal to 0, 5 8* modules which take ci_parts interpret this case to mean to do everything 5 9* except the actual requested operation, i.e., lock the control interval 5 10* but don't get anything. offset_in_bytes is the 0-originned offset in 5 11* bytes from the beginning of the addressable portion of the control interval. 5 12* An offset_in_bytes which is in the addressable portion is in error. 5 13* Likewise, if offset_in_bytes + length_in_bytes is outside of the addressable 5 14* portion, it is in error. 5 15**/ 5 16 5 17 /* HISTORY: 5 18*Written by Matthew Pierret, 01/28/82. 5 19* (01/28/82 Andre Bensoussan, Design.) 5 20*Modified: 5 21*11/07/84 by Matthew Pierret: To add must_be_zero, initial attributes on 5 22* automatic storge. 5 23**/ 5 24 5 25 /* format: style2,ind3 */ 5 26 5 27 dcl 1 ci_parts aligned based (ci_parts_ptr), 5 28 2 number_of_parts fixed bin (17), 5 29 2 must_be_zero fixed bin, 5 30 2 part (cip_number_of_parts refer (ci_parts.number_of_parts)), 5 31 3 offset_in_bytes fixed bin (17), 5 32 3 length_in_bytes fixed bin (17), 5 33 3 local_ptr ptr; 5 34 5 35 dcl ci_parts_ptr ptr init (null ()); 5 36 dcl cip_number_of_parts fixed bin (17) init (0); 5 37 5 38 5 39 /* BEGIN INCLUDE FILE: dm_ci_parts.incl.pl1 */ 482 483 6 1 /* BEGIN INCLUDE FILE dm_ci_lengths.incl.pl1 */ 6 2 6 3 /* DESCRIPTION: 6 4* This include file contains constants which are the length in bytes 6 5* of the addressable portion of a control interval. The addressable portion 6 6* is that part of the control interval which callers of file_manager_ 6 7* may access, specifically, everything between the end of the control 6 8* interval header (ci_header) and the control interval trailer (ci_trailer). 6 9* Control interval 0 is slightly different, as it also contains an 6 10* unaddressable portion in which it maintains the file attributes. For 6 11* control interval 0 the addressable portion is everything between the end 6 12* of the control interval header and the beginning of the file attributes. 6 13**/ 6 14 6 15 /* HISTORY: 6 16*Written by Matthew Pierret, 11/02/84. 6 17*Modified: 6 18**/ 6 19 6 20 /* format: style2,ind3 */ 6 21 6 22 dcl CONTROL_INTERVAL_ADDRESSABLE_LENGTH_IN_BYTES 6 23 fixed bin (17) init (4072) int static options (constant); 6 24 6 25 dcl CONTROL_INTERVAL_ZERO_ADDRESSABLE_LENGTH_IN_BYTES 6 26 fixed bin (17) init (3176) int static options (constant); 6 27 6 28 6 29 dcl CI_ADDRESSABLE_LENGTH fixed bin (17) init (4072) int static options (constant); 6 30 6 31 dcl CI_0_ADDRESSABLE_LENGTH 6 32 fixed bin (17) init (3176) int static options (constant); 6 33 6 34 /* END INCLUDE FILE dm_ci_lengths.incl.pl1 */ 484 485 7 1 /* BEGIN INCLUDE FILE . . . star_structures.incl.pl1 */ 7 2 7 3 /* This include file contains structures for the hcs_$star_, 7 4* hcs_$star_list_ and hcs_$star_dir_list_ entry points. 7 5* 7 6* Written 23 October 1978 by Monte Davidoff. 7 7* Modified January 1979 by Michael R. Jordan to use unsigned and different pointers for different structures. 7 8* Modified June 1981 by C. Hornig to count link pathnames more efficiently. 7 9**/ 7 10 7 11 /* automatic */ 7 12 7 13 declare star_branch_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching branch count */ 7 14 declare star_entry_count fixed binary; /* hcs_$star_: number of matching entries */ 7 15 declare star_entry_ptr pointer; /* hcs_$star_: pointer to array of entry information */ 7 16 declare star_list_branch_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to array of info */ 7 17 declare star_link_count fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: matching link count */ 7 18 declare star_linkx fixed binary; /* hcs_$star_list_, hcs_$star_dir_list_: index into star_links */ 7 19 declare star_names_ptr pointer; /* hcs_$star_: pointer to array of entry names */ 7 20 declare star_list_names_ptr pointer; /* hcs_$star_list_, hcs_$star_dir_list_: ptr to entry names */ 7 21 declare star_select_sw fixed binary (3); /* hcs_$star_list_, hcs_$star_dir_list_: what info to return */ 7 22 7 23 /* based */ 7 24 7 25 /* hcs_$star_ entry structure */ 7 26 7 27 declare 1 star_entries (star_entry_count) aligned based (star_entry_ptr), 7 28 2 type fixed binary (2) unsigned unaligned, 7 29 /* storage system type */ 7 30 2 nnames fixed binary (16) unsigned unaligned, 7 31 /* number of names of entry that match star_name */ 7 32 2 nindex fixed binary (18) unsigned unaligned; 7 33 /* index of first name in star_names */ 7 34 7 35 /* hcs_$star_ name structure */ 7 36 7 37 declare star_names (sum (star_entries (*).nnames)) char (32) based (star_names_ptr); 7 38 7 39 /* hcs_$star_list_ branch structure */ 7 40 7 41 declare 1 star_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 7 42 2 type fixed binary (2) unsigned unaligned, 7 43 /* storage system type */ 7 44 2 nnames fixed binary (16) unsigned unaligned, 7 45 /* number of names of entry that match star_name */ 7 46 2 nindex fixed binary (18) unsigned unaligned, 7 47 /* index of first name in star_list_names */ 7 48 2 dtcm bit (36) unaligned, /* date-time contents of branch were last modified */ 7 49 2 dtu bit (36) unaligned, /* date-time branch was last used */ 7 50 2 mode bit (5) unaligned, /* user's access mode to the branch */ 7 51 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 7 52 2 master_dir bit (1) unaligned, /* is branch a master directory */ 7 53 2 pad bit (7) unaligned, 7 54 2 records fixed binary (18) unsigned unaligned; 7 55 /* records used by branch */ 7 56 7 57 /* hcs_$star_dir_list_ branch structure */ 7 58 7 59 declare 1 star_dir_list_branch (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 7 60 2 type fixed binary (2) unsigned unaligned, 7 61 /* storage system type */ 7 62 2 nnames fixed binary (16) unsigned unaligned, 7 63 /* number of names of entry that match star_name */ 7 64 2 nindex fixed binary (18) unsigned unaligned, 7 65 /* index of first name in star_list_names */ 7 66 2 dtem bit (36) unaligned, /* date-time directory entry of branch was last modified */ 7 67 2 pad bit (36) unaligned, 7 68 2 mode bit (5) unaligned, /* user's access mode to the branch */ 7 69 2 raw_mode bit (5) unaligned, /* user's ACL access mode */ 7 70 2 master_dir bit (1) unaligned, /* is branch a master directory */ 7 71 2 bit_count fixed binary (24) unaligned; 7 72 /* bit count of the branch */ 7 73 7 74 /* hcs_$star_list_ and hcs_$star_dir_list_ link structure */ 7 75 7 76 declare 1 star_links (star_branch_count + star_link_count) aligned based (star_list_branch_ptr), 7 77 2 type fixed binary (2) unsigned unaligned, 7 78 /* storage system type */ 7 79 2 nnames fixed binary (16) unsigned unaligned, 7 80 /* number of names of entry that match star_name */ 7 81 2 nindex fixed binary (18) unsigned unaligned, 7 82 /* index of first name in star_list_names */ 7 83 2 dtem bit (36) unaligned, /* date-time link was last modified */ 7 84 2 dtd bit (36) unaligned, /* date-time the link was last dumped */ 7 85 2 pathname_len fixed binary (18) unsigned unaligned, 7 86 /* length of the pathname of the link */ 7 87 2 pathname_index fixed binary (18) unsigned unaligned; 7 88 /* index of start of pathname in star_list_names */ 7 89 7 90 /* hcs_$star_list_ and hcs_$star_dir_list_ name array */ 7 91 7 92 declare star_list_names char (32) based (star_list_names_ptr) 7 93 dimension (star_links (star_branch_count + star_link_count).nindex 7 94 + star_links (star_branch_count + star_link_count).nnames 7 95 + divide (star_links (star_branch_count + star_link_count).pathname_len + 31, 32, 17, 0) 7 96 * binary ( 7 97 (star_links (star_branch_count + star_link_count).type = star_LINK) 7 98 & (star_select_sw >= star_LINKS_ONLY_WITH_LINK_PATHS), 1)); 7 99 7 100 /* hcs_$star_list_ and hcs_$star_dir_list_ link pathname */ 7 101 7 102 declare star_link_pathname char (star_links (star_linkx).pathname_len) 7 103 based (addr (star_list_names (star_links (star_linkx).pathname_index))); 7 104 7 105 /* internal static */ 7 106 7 107 /* star_select_sw values */ 7 108 7 109 declare star_LINKS_ONLY fixed binary (2) internal static options (constant) initial (1); 7 110 declare star_BRANCHES_ONLY fixed binary (2) internal static options (constant) initial (2); 7 111 declare star_ALL_ENTRIES fixed binary (2) internal static options (constant) initial (3); 7 112 declare star_LINKS_ONLY_WITH_LINK_PATHS 7 113 fixed binary (3) internal static options (constant) initial (5); 7 114 declare star_ALL_ENTRIES_WITH_LINK_PATHS 7 115 fixed binary (3) internal static options (constant) initial (7); 7 116 7 117 /* storage system types */ 7 118 7 119 declare star_LINK fixed binary (2) unsigned internal static options (constant) initial (0); 7 120 declare star_SEGMENT fixed binary (2) unsigned internal static options (constant) initial (1); 7 121 declare star_DIRECTORY fixed binary (2) unsigned internal static options (constant) initial (2); 7 122 7 123 /* END INCLUDE FILE . . . star_structures.incl.pl1 */ 486 487 8 1 /* START OF: dm_lock_modes.incl.pl1 * * * * * * * * * * * * * * * * */ 8 2 8 3 /* DESCRIPTION: 8 4* 8 5* Hierarchical lock modes for Data Management control interval locking. In 8 6*addition to conventional read and write locks, intention locks are provided 8 7*for finer locking granularity. 8 8**/ 8 9 8 10 /* HISTORY: 8 11*Written by Jeffrey D. Ives, 04/30/82. 8 12*Modified: 8 13*12/05/84 by Stanford S. Cox: Added Description. 8 14**/ 8 15 /* format: style3,idind25 */ 8 16 8 17 dcl LOCK_MODE_S fixed bin static options (constant) init (2); 8 18 dcl LOCK_MODE_X fixed bin static options (constant) init (3); 8 19 dcl LOCK_MODE_IS fixed bin static options (constant) init (4); 8 20 dcl LOCK_MODE_IX fixed bin static options (constant) init (5); 8 21 dcl LOCK_MODE_SIX fixed bin static options (constant) init (6); 8 22 8 23 dcl LOCK_ENTIRE_FILE fixed bin (27) static options (constant) init (-1); 8 24 8 25 dcl LOCK_MODE_NAMES (2:6) char (3) int static options (constant) 8 26 init (" S", " X", " IS", " IX", "SIX"); 8 27 8 28 /* 8 29* S Share Let others read it but not modify it. 8 30* X Exclusive Let nobody else read or modify it. 8 31* IS Intention Share I am only using S locks, because I am only reading CIs. 8 32* IX Intention Exclusive I am using S and X locks, because I am reading and modifying CIs. 8 33* SIX Share with Intention Exclusive I am reading control intervals, but only locking the ones I modify. 8 34**/ 8 35 8 36 /* END OF: dm_lock_modes.incl.pl1 * * * * * * * * * * * * * * * * */ 488 489 490 end fm_attribute_fref_$get_switch; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/04/85 0826.6 fm_attribute_fref_.pl1 >spec>on>7192.pbf-04/04/85>fm_attribute_fref_.pl1 474 1 01/07/85 0901.1 dm_fm_file_access_tbl.incl.pl1 >ldd>include>dm_fm_file_access_tbl.incl.pl1 476 2 03/06/85 1031.2 dm_fm_file_access_info.incl.pl1 >ldd>include>dm_fm_file_access_info.incl.pl1 478 3 01/07/85 0901.0 dm_fm_file_attributes.incl.pl1 >ldd>include>dm_fm_file_attributes.incl.pl1 480 4 01/07/85 0900.9 dm_fm_file_oid.incl.pl1 >ldd>include>dm_fm_file_oid.incl.pl1 482 5 01/07/85 0900.8 dm_ci_parts.incl.pl1 >ldd>include>dm_ci_parts.incl.pl1 484 6 01/07/85 0900.7 dm_ci_lengths.incl.pl1 >ldd>include>dm_ci_lengths.incl.pl1 486 7 06/10/82 1045.5 star_structures.incl.pl1 >ldd>include>star_structures.incl.pl1 488 8 01/07/85 0901.4 dm_lock_modes.incl.pl1 >ldd>include>dm_lock_modes.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. CI_0_ADDRESSABLE_LENGTH constant fixed bin(17,0) initial dcl 6-31 ref 426 427 462 463 CI_ADDRESSABLE_LENGTH constant fixed bin(17,0) initial dcl 6-29 ref 427 463 FILE_ATTRIBUTES_VERSION_2 000000 constant char(8) initial dcl 3-51 ref 434 LOCK_ENTIRE_FILE 000002 constant fixed bin(27,0) initial dcl 8-23 set ref 273* LOCK_MODE_X 000020 constant fixed bin(17,0) initial dcl 8-18 set ref 273* STAR_BRANCHES_ONLY 000022 constant fixed bin(2,0) initial dcl 99 set ref 310* addr builtin function dcl 90 ref 181 181 270 271 284 284 297 297 323 324 329 379 401 430 430 466 466 callers_validation_level 000360 automatic fixed bin(17,0) initial dcl 70 set ref 70* 170* 190* 223* 232* 256* 288 341* 390 390* 402* ci_parts based structure level 1 dcl 5-27 ci_parts_ptr 000752 automatic pointer initial dcl 5-35 set ref 5-35* cip_number_of_parts 000754 automatic fixed bin(17,0) initial dcl 5-36 set ref 5-36* cleanup 000740 stack reference condition dcl 95 ref 171 224 254 code 000361 automatic fixed bin(35,0) dcl 72 set ref 157* 173* 174 174* 176 176* 192* 193 193* 209* 217* 218 218 221* 227* 229 229* 251* 258* 259 259* 261 261* 273* 274 274* 310* 312 312* 316* 317 317* 326* 327 327* 335* 336 336* 343* 344 344* component_name 000350 automatic char(32) unaligned dcl 68 set ref 315* 316* cu_$level_get 000010 constant entry external dcl 106 ref 170 223 256 cu_$level_set 000012 constant entry external dcl 107 ref 179 190 225 232 282 341 390 dirname 000100 automatic char(256) unaligned dcl 62 set ref 153* 173* 205* 217* 227* 248* 258* 308* 326* 378* dm_error_$bad_file_atrs_ver 000054 external static fixed bin(35,0) dcl 130 set ref 434* dm_error_$file_already_open 000056 external static fixed bin(35,0) dcl 132 ref 174 259 dm_error_$file_in_use 000060 external static fixed bin(35,0) dcl 134 set ref 277* dm_error_$file_not_dm_type 000062 external static fixed bin(35,0) dcl 135 set ref 218* dm_error_$fm_cant_remove_name 000064 external static fixed bin(35,0) dcl 137 set ref 213* e 20 based structure array level 2 dcl 1-29 ename 000300 automatic char(32) unaligned dcl 64 set ref 154* 173* 206* 217* 227* 249* 258* 308* 326* 378* entry_idx 000362 automatic fixed bin(17,0) dcl 73 set ref 314* 315* er_p_code parameter fixed bin(35,0) dcl 364 ref 361 366 error_table_$argerr 000066 external static fixed bin(35,0) dcl 139 set ref 167* error_table_$invalid_ring_brackets 000070 external static fixed bin(35,0) dcl 140 set ref 288* error_table_$not_seg_type 000072 external static fixed bin(35,0) dcl 142 ref 218 file_access_info based structure level 1 dcl 2-33 file_access_info_ptr 000746 automatic pointer initial dcl 2-61 set ref 2-61* file_access_table based structure level 1 dcl 1-29 file_access_table_idx based fixed bin(17,0) level 2 packed unaligned dcl 4-23 ref 270 271 323 324 329 379 file_attributes based structure level 1 dcl 3-22 file_attributes_ptr 000750 automatic pointer initial dcl 3-49 set ref 3-49* file_manager_$close 000014 constant entry external dcl 108 ref 192 343 387 file_manager_$open 000016 constant entry external dcl 109 ref 173 258 file_oid based structure level 1 dcl 4-23 file_pathname 000200 automatic char(256) unaligned dcl 63 set ref 308* 310* 316* 335* file_uid 000363 automatic bit(36) dcl 74 set ref 270* 273* 276* flags 5 000400 automatic structure level 2 dcl 84 fm_data_$file_access_table_ptr 000074 external static pointer dcl 1-26 ref 270 271 323 324 329 379 fm_get_$internal_get 000020 constant entry external dcl 110 ref 430 fm_put_$internal_put 000022 constant entry external dcl 111 ref 466 fm_sys_pn_tbl_util_$opens 000024 constant entry external dcl 112 ref 276 fm_validate_$check_write_ring_bracket 000026 constant entry external dcl 114 ref 217 fs_ring_brackets 000364 automatic fixed bin(3,0) array dcl 75 set ref 304* 305* 306* 316* get_ring_ 000030 constant entry external dcl 116 ref 179 179 225 225 282 282 288 304 get_system_free_area_ 000032 constant entry external dcl 117 ref 310 310 gfa_ci_parts 001022 automatic structure level 1 dcl 421 set ref 430 430 gfa_code 001020 automatic fixed bin(35,0) dcl 420 set ref 430* 431 431* gfa_p_file_attributes_ptr parameter pointer dcl 417 ref 406 428 434 gfa_p_file_oid parameter bit(36) dcl 419 set ref 406 430* hbound builtin function dcl 90 ref 314 hcs_$chname_file 000034 constant entry external dcl 118 ref 227 hcs_$set_bc 000036 constant entry external dcl 119 ref 335 hcs_$set_ring_brackets 000040 constant entry external dcl 120 ref 316 hcs_$star_ 000042 constant entry external dcl 121 ref 310 lbound builtin function dcl 90 ref 314 length_in_bytes 3 001040 automatic fixed bin(17,0) array level 3 in structure "pfa_ci_parts" dcl 457 in procedure "PUT_FILE_ATTRIBUTES" set ref 463* length_in_bytes 3 001022 automatic fixed bin(17,0) array level 3 in structure "gfa_ci_parts" dcl 421 in procedure "GET_FILE_ATTRIBUTES" set ref 427* local_msf_ptr 000376 automatic pointer dcl 82 set ref 323* 325* 326* 329 375 378* 379 401* 401 local_ptr 4 001022 automatic pointer array level 3 in structure "gfa_ci_parts" dcl 421 in procedure "GET_FILE_ATTRIBUTES" set ref 428* local_ptr 4 001040 automatic pointer array level 3 in structure "pfa_ci_parts" dcl 457 in procedure "PUT_FILE_ATTRIBUTES" set ref 464* lock_manager_$lock 000044 constant entry external dcl 122 ref 273 mbz 1 001040 automatic fixed bin(17,0) initial level 2 in structure "pfa_ci_parts" dcl 457 in procedure "PUT_FILE_ATTRIBUTES" set ref 457* mbz 1 001022 automatic fixed bin(17,0) initial level 2 in structure "gfa_ci_parts" dcl 421 in procedure "GET_FILE_ATTRIBUTES" set ref 421* msf_manager_$close 000046 constant entry external dcl 124 ref 325 msf_manager_$open 000050 constant entry external dcl 125 ref 326 378 msf_ptr 24 based pointer array level 3 packed unaligned dcl 1-29 set ref 323 324* 329* 379* my_file_attributes 000400 automatic structure level 1 dcl 84 set ref 181 181 252* 284 284 297 297 my_file_oid 000367 automatic bit(36) initial dcl 76 set ref 76* 173* 181* 192* 258* 270 271 284* 297* 323 324 329 343* 379 387 387* 400* new_name 000320 automatic char(32) unaligned dcl 66 set ref 208* 227* nindex 0(18) based fixed bin(18,0) array level 2 packed unsigned unaligned dcl 7-27 ref 315 nnames 0(02) based fixed bin(16,0) array level 2 packed unsigned unaligned dcl 7-27 ref 382 no_concurrency 5(01) 000400 automatic bit(1) level 3 packed unaligned dcl 84 set ref 185 no_rollback 5(02) 000400 automatic bit(1) level 3 packed unaligned dcl 84 set ref 187 null builtin function dcl 90 ref 324 2-61 3-49 5-35 375 382 384 398 399 number_of_opens 000370 automatic fixed bin(17,0) dcl 77 set ref 276* 277 number_of_parts 001022 automatic fixed bin(17,0) initial level 2 in structure "gfa_ci_parts" dcl 421 in procedure "GET_FILE_ATTRIBUTES" set ref 421* number_of_parts 001040 automatic fixed bin(17,0) initial level 2 in structure "pfa_ci_parts" dcl 457 in procedure "PUT_FILE_ATTRIBUTES" set ref 457* offset_in_bytes 2 001040 automatic fixed bin(17,0) array level 3 in structure "pfa_ci_parts" dcl 457 in procedure "PUT_FILE_ATTRIBUTES" set ref 462* offset_in_bytes 2 001022 automatic fixed bin(17,0) array level 3 in structure "gfa_ci_parts" dcl 421 in procedure "GET_FILE_ATTRIBUTES" set ref 426* old_name 000310 automatic char(32) unaligned dcl 65 set ref 207* 213 227* p_code parameter fixed bin(35,0) dcl 50 set ref 40 157* 202 209* 245 366* p_dirname parameter char unaligned dcl 48 ref 40 153 202 205 245 248 p_ename parameter char unaligned dcl 49 ref 40 154 202 206 245 249 p_new_name parameter char unaligned dcl 53 ref 202 208 p_old_name parameter char unaligned dcl 52 ref 202 207 p_ring_brackets parameter fixed bin(3,0) array dcl 55 ref 245 250 p_switch_name parameter char unaligned dcl 57 ref 40 155 p_switch_value parameter bit(1) unaligned dcl 58 set ref 40 156* 183* 185* 187* part 2 001040 automatic structure array level 2 in structure "pfa_ci_parts" dcl 457 in procedure "PUT_FILE_ATTRIBUTES" part 2 001022 automatic structure array level 2 in structure "gfa_ci_parts" dcl 421 in procedure "GET_FILE_ATTRIBUTES" part 2 based structure array level 2 in structure "ci_parts" dcl 5-27 in procedure "fm_attribute_fref_$get_switch" pathname_ 000052 constant entry external dcl 126 ref 308 pfa_ci_parts 001040 automatic structure level 1 dcl 457 set ref 466 466 pfa_code 001036 automatic fixed bin(35,0) dcl 456 set ref 466* 467 467* pfa_p_file_attributes_ptr parameter pointer dcl 453 ref 441 464 pfa_p_file_oid parameter bit(36) dcl 455 set ref 441 466* pn_tbl_idx 25 based fixed bin(17,0) array level 3 packed unaligned dcl 1-29 ref 271 protected 5 000400 automatic bit(1) level 3 packed unaligned dcl 84 set ref 183 185 187 read 10(03) 000400 automatic fixed bin(3,0) level 3 packed unsigned unaligned dcl 84 set ref 295* ring_brackets 10 000400 automatic structure level 2 in structure "my_file_attributes" dcl 84 in procedure "fm_attribute_fref_$get_switch" ring_brackets 000372 automatic fixed bin(3,0) array dcl 78 in procedure "fm_attribute_fref_$get_switch" set ref 250* 288 288 288 288 294 295 305 306 334 334 ring_brackets_bc 000374 automatic fixed bin(24,0) dcl 79 set ref 334* 335* star_entries based structure array level 1 dcl 7-27 ref 314 314 384 star_entry_count 000755 automatic fixed bin(17,0) dcl 7-14 set ref 310* 314 382 384 star_entry_ptr 000756 automatic pointer dcl 7-15 set ref 310* 314 314 315 382 384 384 399* star_names based char(32) array unaligned dcl 7-37 ref 315 382 star_names_ptr 000760 automatic pointer dcl 7-19 set ref 310* 315 382 382 398* sum builtin function dcl 90 ref 382 switch_name 000330 automatic char(64) unaligned dcl 67 set ref 155* 161 161* 163 163* 165 165* 167 167 167 183 185 187 sys_pn_tbl_idx 000375 automatic fixed bin(17,0) dcl 80 set ref 271* 276* uid 21 based bit(36) array level 3 dcl 1-29 ref 270 unspec builtin function dcl 90 set ref 252* version based char(8) level 2 dcl 3-22 ref 434 write 10 000400 automatic fixed bin(3,0) level 3 packed unsigned unaligned dcl 84 set ref 294* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CONTROL_INTERVAL_ADDRESSABLE_LENGTH_IN_BYTES internal static fixed bin(17,0) initial dcl 6-22 CONTROL_INTERVAL_ZERO_ADDRESSABLE_LENGTH_IN_BYTES internal static fixed bin(17,0) initial dcl 6-25 FILE_ACCESS_INFO_IN_USE internal static fixed bin(17,0) initial dcl 2-63 FILE_ACCESS_INFO_NOT_IN_USE internal static fixed bin(17,0) initial dcl 2-63 FILE_ACCESS_TABLE_VERSION_1 internal static char(8) initial dcl 1-39 FILE_DOES_NOT_EXIST internal static fixed bin(17,0) initial dcl 2-63 FILE_EXISTS internal static fixed bin(17,0) initial dcl 2-63 FILE_LOGICALLY_DELETED internal static fixed bin(17,0) initial dcl 2-63 LOCK_MODE_IS internal static fixed bin(17,0) initial dcl 8-19 LOCK_MODE_IX internal static fixed bin(17,0) initial dcl 8-20 LOCK_MODE_NAMES internal static char(3) initial array unaligned dcl 8-25 LOCK_MODE_S internal static fixed bin(17,0) initial dcl 8-17 LOCK_MODE_SIX internal static fixed bin(17,0) initial dcl 8-21 LOCK_WAIT_TIME internal static fixed bin(71,0) initial dcl 99 star_ALL_ENTRIES internal static fixed bin(2,0) initial dcl 7-111 star_ALL_ENTRIES_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 7-114 star_BRANCHES_ONLY internal static fixed bin(2,0) initial dcl 7-110 star_DIRECTORY internal static fixed bin(2,0) initial unsigned dcl 7-121 star_LINK internal static fixed bin(2,0) initial unsigned dcl 7-119 star_LINKS_ONLY internal static fixed bin(2,0) initial dcl 7-109 star_LINKS_ONLY_WITH_LINK_PATHS internal static fixed bin(3,0) initial dcl 7-112 star_SEGMENT internal static fixed bin(2,0) initial unsigned dcl 7-120 star_branch_count automatic fixed bin(17,0) dcl 7-13 star_dir_list_branch based structure array level 1 dcl 7-59 star_link_count automatic fixed bin(17,0) dcl 7-17 star_link_pathname based char unaligned dcl 7-102 star_links based structure array level 1 dcl 7-76 star_linkx automatic fixed bin(17,0) dcl 7-18 star_list_branch based structure array level 1 dcl 7-41 star_list_branch_ptr automatic pointer dcl 7-16 star_list_names based char(32) array unaligned dcl 7-92 star_list_names_ptr automatic pointer dcl 7-20 star_select_sw automatic fixed bin(3,0) dcl 7-21 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 001625 constant entry internal dcl 361 ref 167 176 193 213 218 221 229 261 274 277 288 312 317 327 336 344 431 434 467 FINISH 001637 constant entry internal dcl 372 ref 171 224 254 356 367 GET_FILE_ATTRIBUTES 002013 constant entry internal dcl 406 ref 181 284 INIT_FOR_FINISH 002002 constant entry internal dcl 395 ref 159 211 253 MAIN_RETURN 001616 constant label dcl 350 ref 357 368 PUT_FILE_ATTRIBUTES 002072 constant entry internal dcl 441 ref 297 RETURN 001617 constant entry internal dcl 353 ref 196 233 347 chname_file 000451 constant entry external dcl 202 fm_attribute_fref_$get_switch 000074 constant entry external dcl 40 set_ring_brackets 000731 constant entry external dcl 245 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2606 2704 2160 2616 Length 3332 2160 76 412 426 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME fm_attribute_fref_$get_switch 676 external procedure is an external procedure. on unit on line 171 64 on unit on unit on line 224 64 on unit on unit on line 254 64 on unit RETURN internal procedure shares stack frame of external procedure fm_attribute_fref_$get_switch ERROR_RETURN internal procedure shares stack frame of external procedure fm_attribute_fref_$get_switch FINISH 84 internal procedure is called by several nonquick procedures. INIT_FOR_FINISH internal procedure shares stack frame of external procedure fm_attribute_fref_$get_switch GET_FILE_ATTRIBUTES internal procedure shares stack frame of external procedure fm_attribute_fref_$get_switch PUT_FILE_ATTRIBUTES internal procedure shares stack frame of external procedure fm_attribute_fref_$get_switch STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME fm_attribute_fref_$get_switch 000100 dirname fm_attribute_fref_$get_switch 000200 file_pathname fm_attribute_fref_$get_switch 000300 ename fm_attribute_fref_$get_switch 000310 old_name fm_attribute_fref_$get_switch 000320 new_name fm_attribute_fref_$get_switch 000330 switch_name fm_attribute_fref_$get_switch 000350 component_name fm_attribute_fref_$get_switch 000360 callers_validation_level fm_attribute_fref_$get_switch 000361 code fm_attribute_fref_$get_switch 000362 entry_idx fm_attribute_fref_$get_switch 000363 file_uid fm_attribute_fref_$get_switch 000364 fs_ring_brackets fm_attribute_fref_$get_switch 000367 my_file_oid fm_attribute_fref_$get_switch 000370 number_of_opens fm_attribute_fref_$get_switch 000372 ring_brackets fm_attribute_fref_$get_switch 000374 ring_brackets_bc fm_attribute_fref_$get_switch 000375 sys_pn_tbl_idx fm_attribute_fref_$get_switch 000376 local_msf_ptr fm_attribute_fref_$get_switch 000400 my_file_attributes fm_attribute_fref_$get_switch 000746 file_access_info_ptr fm_attribute_fref_$get_switch 000750 file_attributes_ptr fm_attribute_fref_$get_switch 000752 ci_parts_ptr fm_attribute_fref_$get_switch 000754 cip_number_of_parts fm_attribute_fref_$get_switch 000755 star_entry_count fm_attribute_fref_$get_switch 000756 star_entry_ptr fm_attribute_fref_$get_switch 000760 star_names_ptr fm_attribute_fref_$get_switch 001020 gfa_code GET_FILE_ATTRIBUTES 001022 gfa_ci_parts GET_FILE_ATTRIBUTES 001036 pfa_code PUT_FILE_ATTRIBUTES 001040 pfa_ci_parts PUT_FILE_ATTRIBUTES THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a call_ext_out_desc call_ext_out call_int_this call_int_other return mpfx2 enable ext_entry_desc int_entry free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$level_get cu_$level_set file_manager_$close file_manager_$open fm_get_$internal_get fm_put_$internal_put fm_sys_pn_tbl_util_$opens fm_validate_$check_write_ring_bracket get_ring_ get_system_free_area_ hcs_$chname_file hcs_$set_bc hcs_$set_ring_brackets hcs_$star_ lock_manager_$lock msf_manager_$close msf_manager_$open pathname_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$bad_file_atrs_ver dm_error_$file_already_open dm_error_$file_in_use dm_error_$file_not_dm_type dm_error_$fm_cant_remove_name error_table_$argerr error_table_$invalid_ring_brackets error_table_$not_seg_type fm_data_$file_access_table_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 70 000055 76 000057 2 61 000060 3 49 000062 5 35 000063 5 36 000064 40 000067 153 000125 154 000133 155 000140 156 000145 157 000151 159 000153 161 000154 163 000164 165 000174 167 000203 170 000226 171 000235 173 000257 174 000304 176 000311 179 000315 181 000333 183 000337 185 000351 187 000374 190 000416 192 000425 193 000436 196 000442 202 000443 205 000507 206 000515 207 000522 208 000527 209 000534 211 000536 213 000537 217 000552 218 000573 221 000607 223 000611 224 000620 225 000642 227 000660 229 000707 232 000713 233 000722 245 000723 248 000755 249 000763 250 000770 251 000774 252 000775 253 001000 254 001001 256 001023 258 001032 259 001057 261 001064 270 001070 271 001100 273 001103 274 001126 276 001132 277 001145 282 001157 284 001175 288 001201 294 001235 295 001242 297 001247 304 001253 305 001264 306 001266 308 001267 310 001313 312 001367 314 001373 315 001403 316 001414 317 001441 319 001445 323 001447 324 001457 325 001464 326 001472 327 001517 329 001523 334 001533 335 001537 336 001565 341 001571 343 001600 344 001611 347 001615 350 001616 353 001617 356 001620 357 001624 361 001625 366 001627 367 001631 368 001635 372 001636 375 001644 378 001651 379 001676 382 001707 384 001743 387 001752 390 001767 393 002001 395 002002 398 002003 399 002005 400 002006 401 002007 402 002011 404 002012 406 002013 421 002015 426 002020 427 002022 428 002024 430 002027 431 002047 434 002053 437 002071 441 002072 457 002074 462 002077 463 002101 464 002103 466 002106 467 002126 470 002132 ----------------------------------------------------------- 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