COMPILATION LISTING OF SEGMENT list_inacl_all Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1044.8 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /* format: style2 */ 14 15 list_inacl_all: 16 proc (a_dirname, a_area_ptr, a_acl_ptr, a_info_ptr, a_code); 17 18 /* Modified 06/11/84 by Keith Loepere to use the new dc_find. */ 19 /* Modified 05/10/79 by B Margulies to remove xmode check */ 20 /* Modified 07/77 by THVV for bad_dir_ check */ 21 /* modified by R. Bratt 06/01/76 to call find_$finished */ 22 /* modified by Kobziar 1/24/75 to accept a null area ptr and return only counts */ 23 /* coded RE Mullen: 4/13/74 */ 24 25 dcl a_acl_ptr ptr parameter; 26 dcl a_area_ptr ptr parameter; 27 dcl a_code fixed bin (35) parameter; 28 dcl a_dirname char (*) parameter; 29 dcl a_info_ptr ptr parameter; 30 31 dcl 1 acl_arrays aligned based (acl_ptr), 32 2 seg_aclsa (alloc_seg_acl_count) aligned like segment_acl_entry, 33 2 dir_aclsa (alloc_dir_acl_count) aligned like directory_acl_entry; 34 dcl 1 dir_acls (dir_acl_count) aligned like directory_acl_entry based (da_ptr); 35 dcl 1 inacl_info aligned based (info_ptr) like list_inacl_all_info; 36 /* Our structure */ 37 dcl 1 list aligned based, 38 2 frp bit (18) unal, 39 2 brp bit (18) unal; 40 dcl 1 seg_acls (seg_acl_count) aligned like segment_acl_entry based (sa_ptr); 41 dcl user_area area based (area_ptr); 42 43 dcl 1 a_n aligned, 44 2 ac_name, 45 3 person char (32), 46 3 project char (32), 47 3 tag char (1), 48 2 mode bit (36), 49 2 ex_mode bit (36); 50 dcl acls_listed fixed bin (17); 51 dcl alloc_dir_acl_count fixed bin; 52 dcl alloc_seg_acl_count fixed bin; 53 dcl area_ptr pointer; 54 dcl called_find bit (1) aligned; 55 dcl code fixed bin (35); 56 dcl d_s bit (1) aligned; 57 dcl da_ptr pointer; 58 dcl dir_acl_count fixed bin; 59 dcl dir_aclx fixed bin; 60 dcl dirname char (168); 61 dcl i fixed bin (17); 62 dcl info_ptr pointer; 63 dcl lev fixed bin (17); 64 dcl list_ptr pointer; 65 dcl locked bit (1) aligned; 66 dcl return_the_acls bit (1) aligned; 67 dcl sa_ptr pointer; 68 dcl saved_dir_change_pclock 69 fixed bin (35); 70 dcl seg_acl_count fixed bin; 71 dcl seg_aclx fixed bin; 72 73 dcl (area, bad_dir_, cleanup, seg_fault_error) 74 condition; 75 76 dcl acl_$list_entry entry (fixed bin, bit (36) aligned, ptr, ptr, fixed bin (17), fixed bin (35)); 77 dcl lock$dir_lock_read entry (ptr, fixed bin (35)); 78 dcl lock$dir_unlock entry (ptr); 79 80 dcl error_table_$noalloc ext fixed bin (35); 81 dcl error_table_$null_info_ptr 82 ext fixed bin (35); 83 84 dcl (addr, bin, bit, max, rtrim, null, ptr, rel, sum, unspec) 85 builtin; 86 87 dirname = a_dirname; /* copy args befor locking dir */ 88 area_ptr = a_area_ptr; 89 info_ptr = a_info_ptr; 90 91 RESTART: 92 acl_ptr = null; 93 locked, called_find = "0"b; 94 sa_ptr, da_ptr = null; 95 on cleanup call cleanup_; 96 97 if info_ptr = null 98 then call fatal_error (error_table_$null_info_ptr); 99 100 return_the_acls = (area_ptr ^= null); 101 102 /* Find the directory and lock it. */ 103 104 call dc_find$dir_read (dirname, dp, code); 105 if code ^= 0 106 then call fatal_error (code); 107 called_find = "1"b; 108 locked = "1"b; 109 110 /* See how much info to return */ 111 112 seg_acl_count = sum (dir.iacl_count.seg); 113 dir_acl_count = sum (dir.iacl_count.dir); 114 115 if seg_acl_count + dir_acl_count = 0 116 then do; 117 unspec (inacl_info) = ""b; 118 call unlock_dir; 119 a_acl_ptr = null; 120 a_code = 0; 121 go to RETURN; 122 end; 123 124 125 if return_the_acls 126 then do; 127 128 saved_dir_change_pclock = dir.change_pclock; 129 130 call lock$dir_unlock (dp); 131 locked = "0"b; 132 133 on area call fatal_error (error_table_$noalloc); 134 135 alloc_seg_acl_count = max (1, seg_acl_count); 136 alloc_dir_acl_count = max (1, dir_acl_count); 137 138 allocate acl_arrays in (user_area) set (acl_ptr); 139 140 revert area; 141 142 sa_ptr = addr (seg_aclsa); /* avoid expensive runtime adress preparation */ 143 da_ptr = addr (dir_aclsa); 144 145 on seg_fault_error signal bad_dir_; 146 call lock$dir_lock_read (dp, code); 147 revert seg_fault_error; 148 locked = "1"b; 149 150 if code ^= 0 151 then call fatal_error (code); 152 153 if dir.change_pclock ^= saved_dir_change_pclock 154 then do; 155 call unlock_dir; 156 call free_storage; 157 go to RESTART; 158 end; 159 end; 160 161 /* Call internal proc for seg and dir iacls per ring */ 162 163 seg_aclx, dir_aclx = 1; 164 acls_listed = 0; 165 166 d_s = "0"b; /* set switch for internal proc */ 167 168 do lev = 0 to 7; /* do all rings */ 169 170 call do_one_list (addr (dp -> dir.iacl (lev).seg_frp), dir.iacl_count (lev).seg); 171 end; 172 173 d_s = "1"b; 174 do lev = 0 to 7; 175 call do_one_list (addr (dp -> dir.iacl (lev).dir_frp), dir.iacl_count (lev).dir); 176 end; 177 178 if acls_listed < (seg_acl_count + dir_acl_count) 179 then signal bad_dir_; /* make sure we found all we were supposed to */ 180 181 call unlock_dir; 182 183 a_code = 0; 184 a_acl_ptr = acl_ptr; 185 return; 186 187 do_one_list: 188 proc (acl_start_ptr, a_n_iacls); 189 190 dcl a_n_iacls fixed bin unal parameter; 191 dcl acl_start_ptr pointer parameter; 192 193 dcl access_name character (32); 194 dcl n_iacls fixed bin; 195 196 n_iacls = a_n_iacls; 197 i = 0; 198 list_ptr = acl_start_ptr; 199 if n_iacls = 0 200 then do; 201 if list_ptr -> list.frp ^= ""b 202 then signal bad_dir_; 203 else if d_s 204 then do; 205 inacl_info.dia_relp (lev) = ""b; 206 inacl_info.dia_count (lev) = 0; 207 end; 208 else do; 209 inacl_info.sia_relp (lev) = ""b; 210 inacl_info.sia_count (lev) = 0; 211 end; 212 return; 213 end; 214 215 if d_s 216 then do; 217 inacl_info.dia_relp (lev) = rel_to_acl_ptr (addr (dir_acls (dir_aclx))); 218 inacl_info.dia_count (lev) = n_iacls; 219 end; 220 else do; 221 inacl_info.sia_relp (lev) = rel_to_acl_ptr (addr (seg_acls (dir_aclx))); 222 inacl_info.sia_count (lev) = n_iacls; 223 end; 224 225 do while (list_ptr -> list.frp ^= ""b); 226 list_ptr = ptr (list_ptr, list_ptr -> list.frp); 227 i = i + 1; 228 if i > n_iacls 229 then signal bad_dir_; 230 231 if return_the_acls 232 then do; /* want all the info */ 233 234 call acl_$list_entry (n_iacls, dir.uid, acl_start_ptr, addr (a_n), i, code); 235 if code ^= 0 236 then call fatal_error (code); 237 238 acls_listed = acls_listed + 1; 239 240 access_name = 241 rtrim (a_n.ac_name.person) || "." || rtrim (a_n.ac_name.project) || "." || a_n.ac_name.tag; 242 243 if d_s 244 then do; 245 if dir_aclx > dir_acl_count 246 then signal bad_dir_; 247 dir_acls (dir_aclx).access_name = access_name; 248 dir_acls (dir_aclx).mode = a_n.ex_mode; 249 dir_acls (dir_aclx).status_code = 0; 250 /* no per user errors on list */ 251 dir_aclx = dir_aclx + 1; 252 end; 253 else do; 254 if seg_aclx > seg_acl_count 255 then signal bad_dir_; 256 seg_acls (seg_aclx).access_name = access_name; 257 seg_acls (seg_aclx).mode = a_n.mode; 258 seg_acls (seg_aclx).extended_mode = a_n.ex_mode; 259 seg_acls (seg_aclx).status_code = 0; 260 seg_aclx = seg_aclx + 1; 261 end; 262 end; 263 else acls_listed = acls_listed + 1; /* just count */ 264 end; 265 if i < n_iacls 266 then signal bad_dir_; 267 268 rel_to_acl_ptr: 269 procedure (aptr) returns (bit (18)) reducible; 270 271 dcl aptr pointer parameter; 272 273 dcl relf fixed bin (18) uns; 274 275 relf = bin (rel (aptr), 18) - bin (rel (acl_ptr), 18); 276 return (bit (relf, 18)); 277 end rel_to_acl_ptr; 278 279 end do_one_list; 280 281 fatal_error: 282 procedure (c); 283 dcl c fixed bin (35); 284 285 call unlock_dir; 286 call free_storage; 287 a_code = c; 288 go to ERR_RETURN; 289 end fatal_error; 290 RETURN: 291 ERR_RETURN: 292 return; 293 294 unlock_dir: 295 procedure; 296 if called_find 297 then call dc_find$finished (dp, locked); 298 else if locked 299 then call lock$dir_unlock (dp); 300 end unlock_dir; 301 302 free_storage: 303 procedure; 304 if acl_ptr ^= null 305 then free acl_arrays; 306 end free_storage; 307 308 cleanup_: 309 procedure; 310 call free_storage; 311 if called_find 312 then call dc_find$finished (dp, "0"b); /* leave locked for verify lock */ 313 end cleanup_; 314 1 1 /* Begin include file -- acl_structures.incl.pl1 BIM 3/82 */ 1 2 /* format: style3,indcomtxt,idind30 */ 1 3 1 4 declare acl_ptr pointer; 1 5 declare acl_count fixed bin; 1 6 1 7 declare 1 general_acl aligned based (acl_ptr), /* for fs_util_ */ 1 8 2 version char (8) aligned, 1 9 2 count fixed bin, 1 10 2 entries (acl_count refer (general_acl.count)) aligned like general_acl_entry; 1 11 1 12 declare 1 general_acl_entry based, 1 13 2 access_name character (32) unaligned, 1 14 2 mode bit (36) aligned, 1 15 2 status_code fixed bin (35); 1 16 1 17 1 18 declare 1 general_extended_acl aligned based (acl_ptr), /* for fs_util_ */ 1 19 2 version char (8) aligned, 1 20 2 count fixed bin, 1 21 2 entries (acl_count refer (general_extended_acl.count)) aligned like general_extended_acl_entry; 1 22 1 23 declare 1 general_extended_acl_entry aligned based, 1 24 2 access_name character (32) unaligned, 1 25 2 mode bit (36) aligned, 1 26 2 extended_mode bit (36) aligned, 1 27 2 status_code fixed bin (35); 1 28 1 29 1 30 declare 1 general_delete_acl aligned based (acl_ptr), /* for file_system_ */ 1 31 2 version char (8) aligned, 1 32 2 count fixed bin, 1 33 2 entries (acl_count refer (general_delete_acl.count)) aligned like delete_acl_entry; 1 34 1 35 declare 1 general_delete_acl_entry aligned based, 1 36 2 access_name character (32) unaligned, 1 37 2 status_code fixed bin (35); 1 38 1 39 1 40 declare 1 segment_acl aligned based (acl_ptr), 1 41 2 version fixed bin, 1 42 2 count fixed bin, 1 43 2 entries (acl_count refer (segment_acl.count)) aligned like segment_acl_entry; 1 44 1 45 declare 1 segment_acl_entry like general_extended_acl_entry aligned based; 1 46 declare 1 segment_acl_array (acl_count) aligned like segment_acl_entry based (acl_ptr); 1 47 1 48 1 49 declare 1 directory_acl aligned based (acl_ptr), 1 50 2 version fixed bin, 1 51 2 count fixed bin, 1 52 2 entries (acl_count refer (directory_acl.count)) aligned like directory_acl_entry; 1 53 1 54 declare 1 directory_acl_entry like general_acl_entry aligned based; 1 55 declare 1 directory_acl_array (acl_count) aligned like directory_acl_entry based (acl_ptr); 1 56 1 57 1 58 declare 1 delete_acl based (acl_ptr) aligned, 1 59 2 version fixed bin, 1 60 2 count fixed bin, 1 61 2 entries (acl_count refer (delete_acl.count)) aligned like delete_acl_entry; 1 62 1 63 declare 1 delete_acl_entry like general_delete_acl_entry aligned based; 1 64 declare 1 delete_acl_array (acl_count) aligned like delete_acl_entry based (acl_ptr); 1 65 1 66 1 67 declare (SEG_ACL_VERSION_1 init ("sga1"), 1 68 DIR_ACL_VERSION_1 init ("dra1"), 1 69 DELETE_ACL_VERSION_1 init ("dla1")) 1 70 char (4) int static options (constant); 1 71 1 72 declare (GENERAL_ACL_VERSION_1 init ("gacl001"), 1 73 GENERAL_EXTENDED_ACL_VERSION_1 init ("gxacl001"), 1 74 GENERAL_DELETE_ACL_VERSION_1 init ("gdacl001")) 1 75 char (8) internal static options (constant); 1 76 1 77 declare ACL_VERSION_1 fixed bin init (1) int static options (constant); 1 78 1 79 /* End include file acl_structures.incl.pl1 */ 315 316 2 1 /* BEGIN include file dc_find_dcls.incl.pl1 */ 2 2 2 3 /* Calling sequences for dc_find. Keith Loepere, June 1984. */ 2 4 /* Added a few more, October 1984. */ 2 5 /* 85-05-08, EJ Sharpe: added obj_delete_uid, obj_status_read_uid, and obj_status_read_raw_uid */ 2 6 /* 85-05-15, EJ Sharpe: changed dir_write_raw_uid to mdir_set_quota_uid */ 2 7 2 8 /* format: style4,indattr,ifthenstmt,ifthen,idind35,^indcomtxt */ 2 9 2 10 dcl DC_FIND_CHASE fixed bin (1) static options (constant) init (1); 2 11 dcl DC_FIND_NO_CHASE fixed bin (1) static options (constant) init (0); 2 12 dcl DC_FIND_NO_UNLOCK_DIR bit (1) aligned static options (constant) init ("0"b); 2 13 dcl DC_FIND_UNLOCK_DIR bit (1) aligned static options (constant) init ("1"b); 2 14 2 15 dcl dc_find$dir_for_append entry (char (168), char (32), fixed bin (1), ptr, ptr, fixed bin (35)); 2 16 dcl dc_find$dir_for_append_raw entry (char (168), char (32), fixed bin (1), ptr, ptr, fixed bin (35)); 2 17 dcl dc_find$dir_for_retrieve_append entry (char (168), char (32), fixed bin (1), ptr, ptr, ptr, fixed bin (35)); 2 18 2 19 dcl dc_find$dir_initiate entry (char (168), ptr, fixed bin (35)); 2 20 2 21 dcl dc_find$dir_move_quota entry (char (168), ptr, ptr, fixed bin (35)); 2 22 2 23 dcl dc_find$dir_read entry (char (168), ptr, fixed bin (35)); 2 24 dcl dc_find$dir_read_priv entry (char (168), ptr, fixed bin (35)); 2 25 2 26 dcl dc_find$dir_reclassify entry (char (168), ptr, ptr, ptr, fixed bin (35)); 2 27 2 28 dcl dc_find$dir_salvage entry (char (168), bit (36) aligned, ptr, fixed bin (35)); 2 29 2 30 dcl dc_find$dir_write entry (char (168), fixed bin (18) uns, ptr, fixed bin (35)); 2 31 dcl dc_find$dir_write_priv entry (char (168), fixed bin (18) uns, ptr, fixed bin (35)); 2 32 2 33 dcl dc_find$finished entry (ptr, bit (1) aligned); 2 34 2 35 dcl dc_find$link_target entry (char (168), char (32), fixed bin (35)); 2 36 2 37 dcl dc_find$mdir_set_quota_uid entry ((0:15) bit (36) aligned, char (168), fixed bin (18) uns, ptr, ptr, fixed bin (35)); 2 38 2 39 dcl dc_find$obj_access_write entry (char (168), char (32), fixed bin (1), fixed bin (18) uns, ptr, fixed bin (35)); 2 40 dcl dc_find$obj_access_write_priv entry (char (168), char (32), fixed bin (1), fixed bin (18) uns, ptr, fixed bin (35)); 2 41 2 42 dcl dc_find$obj_attributes_read entry (char (168), char (32), fixed bin (1), ptr, fixed bin (35)); 2 43 dcl dc_find$obj_attributes_read_ptr entry (ptr, ptr, fixed bin (35)); 2 44 2 45 dcl dc_find$obj_attributes_write entry (char (168), char (32), fixed bin (1), fixed bin (18) uns, ptr, fixed bin (35)); 2 46 dcl dc_find$obj_attributes_write_ptr entry (ptr, fixed bin (18) uns, ptr, fixed bin (35)); 2 47 2 48 dcl dc_find$obj_bc_delta_write entry (char (168), char (32), fixed bin (24), ptr, fixed bin (35)); 2 49 dcl dc_find$obj_bc_delta_write_ptr entry (ptr, fixed bin (24), ptr, fixed bin (35)); 2 50 dcl dc_find$obj_bc_write entry (char (168), char (32), fixed bin (24), ptr, fixed bin (35)); 2 51 dcl dc_find$obj_bc_write_ptr entry (ptr, fixed bin (24), ptr, fixed bin (35)); 2 52 2 53 dcl dc_find$obj_delete entry (char (168), char (32), fixed bin (1), ptr, fixed bin (35)); 2 54 dcl dc_find$obj_delete_priv entry (char (168), char (32), fixed bin (1), ptr, fixed bin (35)); 2 55 dcl dc_find$obj_delete_uid entry ((0:15) bit (36) aligned, char (168), char (32), ptr, fixed bin (35)); 2 56 dcl dc_find$obj_delete_priv_uid entry ((0:15) bit (36) aligned, char (168), char (32), ptr, fixed bin (35)); 2 57 dcl dc_find$obj_delete_ptr entry (ptr, ptr, fixed bin (35)); 2 58 2 59 dcl dc_find$obj_existence_ptr entry (ptr, ptr, fixed bin (35)); 2 60 2 61 dcl dc_find$obj_for_audit entry (char (168), char (32), ptr, fixed bin (35)); 2 62 2 63 dcl dc_find$obj_initiate entry (char (168), char (32), ptr, fixed bin (35)); 2 64 dcl dc_find$obj_initiate_for_linker_dp entry (ptr, char (32), ptr, fixed bin (35)); 2 65 dcl dc_find$obj_initiate_raw entry (char (168), char (32), ptr, fixed bin (35)); 2 66 2 67 dcl dc_find$obj_linkage_ring_ptr entry (ptr, fixed bin (35)); 2 68 2 69 dcl dc_find$obj_modes_ptr entry (ptr, bit (36) aligned, bit (36) aligned, (3) fixed bin (3), fixed bin (35)); 2 70 2 71 dcl dc_find$obj_reclassify entry (char (168), char (32), ptr, ptr, fixed bin (35)); 2 72 2 73 dcl dc_find$obj_status_attributes_read entry (char (168), char (32), fixed bin (1), ptr, fixed bin (35)); 2 74 2 75 dcl dc_find$obj_status_read entry (char (168), char (32), fixed bin (1), ptr, fixed bin (35)); 2 76 dcl dc_find$obj_status_read_uid entry ((0:15) bit (36) aligned, char (168), char (32), ptr, fixed bin (35)); 2 77 dcl dc_find$obj_status_read_priv entry (char (168), char (32), fixed bin (1), ptr, fixed bin (35)); 2 78 dcl dc_find$obj_status_read_priv_ptr entry (ptr, ptr, fixed bin (35)); 2 79 dcl dc_find$obj_status_read_priv_uid entry ((0:15) bit (36) aligned, char (168), char (32), ptr, fixed bin (35)); 2 80 dcl dc_find$obj_status_read_raw_uid entry ((0:15) bit (36) aligned, char (168), char (32), ptr, fixed bin (35)); 2 81 dcl dc_find$obj_status_read_ptr entry (ptr, ptr, fixed bin (35)); 2 82 2 83 dcl dc_find$obj_status_write entry (char (168), char (32), fixed bin (1), fixed bin (18) uns, ptr, fixed bin (35)); 2 84 dcl dc_find$obj_status_write_priv entry (char (168), char (32), fixed bin (1), fixed bin (18) uns, ptr, fixed bin (35)); 2 85 dcl dc_find$obj_status_write_priv_ptr entry (ptr, fixed bin (18) uns, ptr, fixed bin (35)); 2 86 dcl dc_find$obj_status_write_ptr entry (ptr, fixed bin (18) uns, ptr, fixed bin (35)); 2 87 2 88 dcl dc_find$obj_terminate entry (char (168), char (32), fixed bin (1), ptr, fixed bin (35)); 2 89 dcl dc_find$obj_terminate_ptr entry (ptr, ptr, fixed bin (35)); 2 90 2 91 dcl dc_find$obj_truncate entry (char (168), char (32), ptr, fixed bin (35)); 2 92 dcl dc_find$obj_truncate_ptr entry (ptr, ptr, fixed bin (35)); 2 93 dcl dc_find$obj_truncate_raw_ptr entry (ptr, ptr, fixed bin (35)); 2 94 2 95 dcl dc_find$obj_volume_retrieve entry (char (168), char (32), ptr, ptr, fixed bin (35)); 2 96 2 97 dcl dc_find$seg_fault entry (ptr, ptr, fixed bin (35)); 2 98 2 99 /* END include file dc_find_dcls.incl.pl1 */ 317 318 3 1 /* BEGIN INCLUDE FILE ... dir_header.incl.pl1 */ 3 2 /* Modified 8/74 for NSS */ 3 3 /* Modified 8/76 to add version number and hash table rel pointer for variable hash table sizes */ 3 4 /* Modified 3/82 BIM for change pclock */ 3 5 /* format: style3 */ 3 6 3 7 /* Template for the directory header. Length = 64 words. */ 3 8 3 9 dcl dp ptr; 3 10 3 11 dcl 1 dir based (dp) aligned, 3 12 3 13 2 modify bit (36), /* Process ID of last modifier */ 3 14 2 type bit (18) unaligned, /* type of object = dir header */ 3 15 2 size fixed bin (17) unaligned, /* size of header in words */ 3 16 2 dtc (3), /* date-time checked by salvager array */ 3 17 3 date bit (36), /* the date */ 3 18 3 error bit (36), /* what errors were discovered */ 3 19 3 20 2 uid bit (36), /* uid of the directory - copied from branch */ 3 21 3 22 2 pvid bit (36), /* phys vol id of the dir - copied from branch */ 3 23 3 24 2 sons_lvid bit (36), /* log vol id for inf non dir seg - copied from branch */ 3 25 3 26 2 access_class bit (72), /* security attributes of dir - copied from branch */ 3 27 3 28 (2 vtocx fixed bin (17), /* vtoc entry index of the dir - copied from branch */ 3 29 2 version_number fixed bin (17), /* version number of header */ 3 30 3 31 2 entryfrp bit (18), /* rel ptr to beginning of entry list */ 3 32 2 pad2 bit (18), 3 33 3 34 2 entrybrp bit (18), /* rel ptr to end of entry list */ 3 35 2 pad3 bit (18), 3 36 3 37 2 pers_frp bit (18), /* rel ptr to start of person name list */ 3 38 2 proj_frp bit (18), /* rel ptr to start of project name list */ 3 39 3 40 2 pers_brp bit (18), /* rel ptr to end of person name list */ 3 41 2 proj_brp bit (18), /* rel ptr to end of project name list */ 3 42 3 43 2 seg_count fixed bin (17), /* number of non-directory branches */ 3 44 2 dir_count fixed bin (17), /* number of directory branches */ 3 45 3 46 2 lcount fixed bin (17), /* number of links */ 3 47 2 acle_total fixed bin (17), /* total number of ACL entries in directory */ 3 48 3 49 2 arearp bit (18), /* relative pointer to beginning of allocation area */ 3 50 2 per_process_sw bit (1), /* indicates dir contains per process segments */ 3 51 2 master_dir bit (1), /* TRUE if this is a master dir */ 3 52 2 force_rpv bit (1), /* TRUE if segs must be on RPV */ 3 53 2 rehashing bit (1), /* TRUE if hash table is being constructed */ 3 54 2 pad4 bit (14), 3 55 3 56 2 iacl_count (0:7), 3 57 3 seg fixed bin (17), /* number of initial acl entries for segs */ 3 58 3 dir fixed bin (17), /* number of initial acl entries for dir */ 3 59 3 60 2 iacl (0:7), /* pointer to initial ACLs for each ring */ 3 61 3 seg_frp bit (18), /* rel ptr to start of initial ACL for segs */ 3 62 3 seg_brp bit (18), /* rel ptr to end of initial ACL for segs */ 3 63 3 64 3 dir_frp bit (18), /* rel ptr to start of initial for dirs */ 3 65 3 dir_brp bit (18), /* rel ptr to end of initial ACL for dirs */ 3 66 3 67 2 htsize fixed bin (17), /* size of hash table */ 3 68 2 hash_table_rp bit (18), /* rel ptr to start of hash table */ 3 69 3 70 2 htused fixed bin (17), /* no. of used places in hash table */ 3 71 2 pad6 fixed bin (17), 3 72 3 73 2 tree_depth fixed bin (17), /* number of levels from root of this dir */ 3 74 2 pad7 bit (18)) unaligned, 3 75 3 76 2 dts bit (36), /* date-time directory last salvaged */ 3 77 3 78 2 master_dir_uid bit (36), /* uid of superior master dir */ 3 79 2 change_pclock fixed bin (35), /* up one each call to sum$dirmod */ 3 80 2 pad8 (11) bit (36), /* pad to make it a 64 word header */ 3 81 2 checksum bit (36), /* checksummed from uid on */ 3 82 2 owner bit (36); /* uid of parent dir */ 3 83 3 84 dcl version_number_2 fixed bin int static options (constant) init (2); 3 85 3 86 /* END INCLUDE FILE ... dir_header.incl.pl1 */ 319 320 4 1 /* Begin include file list_inacl_all_info.incl.pl1 BIM 3/82 */ 4 2 /* format: style3 */ 4 3 4 4 declare list_inacl_all_info_ptr 4 5 pointer; 4 6 declare 1 list_inacl_all_info 4 7 aligned based (list_inacl_all_info_ptr), 4 8 2 sia_relp (0:7) bit (18), 4 9 2 sia_count (0:7) fixed bin, 4 10 2 dia_relp (0:7) bit (18), 4 11 2 dia_count (0:7) fixed bin; 4 12 4 13 /* End include file */ 321 322 end list_inacl_all; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0800.6 list_inacl_all.pl1 >spec>install>1110>list_inacl_all.pl1 315 1 10/14/83 1606.6 acl_structures.incl.pl1 >ldd>include>acl_structures.incl.pl1 317 2 05/20/85 0848.1 dc_find_dcls.incl.pl1 >ldd>include>dc_find_dcls.incl.pl1 319 3 05/24/82 1005.0 dir_header.incl.pl1 >ldd>include>dir_header.incl.pl1 321 4 05/24/82 1005.0 list_inacl_all_info.incl.pl1 >ldd>include>list_inacl_all_info.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. a_acl_ptr parameter pointer dcl 25 set ref 15 119* 184* a_area_ptr parameter pointer dcl 26 ref 15 88 a_code parameter fixed bin(35,0) dcl 27 set ref 15 120* 183* 287* a_dirname parameter char packed unaligned dcl 28 ref 15 87 a_info_ptr parameter pointer dcl 29 ref 15 89 a_n 000100 automatic structure level 1 dcl 43 set ref 234 234 a_n_iacls parameter fixed bin(17,0) packed unaligned dcl 190 ref 187 196 ac_name 000100 automatic structure level 2 dcl 43 access_name based char(32) array level 2 in structure "seg_acls" packed packed unaligned dcl 40 in procedure "list_inacl_all" set ref 256* access_name 000302 automatic char(32) packed unaligned dcl 193 in procedure "do_one_list" set ref 240* 247 256 access_name based char(32) array level 2 in structure "dir_acls" packed packed unaligned dcl 34 in procedure "list_inacl_all" set ref 247* acl_$list_entry 000010 constant entry external dcl 76 ref 234 acl_arrays based structure level 1 dcl 31 set ref 138 304 acl_ptr 000262 automatic pointer dcl 1-4 set ref 91* 138* 142 143 184 275 304 304 acl_start_ptr parameter pointer dcl 191 set ref 187 198 234* acls_listed 000123 automatic fixed bin(17,0) dcl 50 set ref 164* 178 238* 238 263* 263 addr builtin function dcl 84 ref 142 143 170 170 175 175 217 217 221 221 234 234 alloc_dir_acl_count 000124 automatic fixed bin(17,0) dcl 51 set ref 136* 138 304 alloc_seg_acl_count 000125 automatic fixed bin(17,0) dcl 52 set ref 135* 138 143 304 aptr parameter pointer dcl 271 ref 268 275 area 000232 stack reference condition dcl 73 ref 133 140 area_ptr 000126 automatic pointer dcl 53 set ref 88* 100 138 bad_dir_ 000240 stack reference condition dcl 73 ref 145 178 201 228 245 254 265 bin builtin function dcl 84 ref 275 275 bit builtin function dcl 84 ref 276 c parameter fixed bin(35,0) dcl 283 ref 281 287 called_find 000130 automatic bit(1) dcl 54 set ref 93* 107* 296 311 change_pclock 62 based fixed bin(35,0) level 2 dcl 3-11 ref 128 153 cleanup 000246 stack reference condition dcl 73 ref 95 code 000131 automatic fixed bin(35,0) dcl 55 set ref 104* 105 105* 146* 150 150* 234* 235 235* d_s 000132 automatic bit(1) dcl 56 set ref 166* 173* 203 215 243 da_ptr 000134 automatic pointer dcl 57 set ref 94* 143* 217 217 247 248 249 dc_find$dir_read 000022 constant entry external dcl 2-23 ref 104 dc_find$finished 000024 constant entry external dcl 2-33 ref 296 311 delete_acl_entry based structure level 1 dcl 1-63 dia_count 30 based fixed bin(17,0) array level 2 dcl 35 set ref 206* 218* dia_relp 20 based bit(18) array level 2 dcl 35 set ref 205* 217* dir 25(18) based fixed bin(17,0) array level 3 in structure "dir" packed packed unaligned dcl 3-11 in procedure "list_inacl_all" set ref 113 175* dir based structure level 1 dcl 3-11 in procedure "list_inacl_all" dir_acl_count 000136 automatic fixed bin(17,0) dcl 58 set ref 113* 115 136 178 245 dir_acls based structure array level 1 dcl 34 set ref 217 217 dir_aclsa based structure array level 2 dcl 31 set ref 143 dir_aclx 000137 automatic fixed bin(17,0) dcl 59 set ref 163* 217 217 221 221 245 247 248 249 251* 251 dir_frp 36 based bit(18) array level 3 packed packed unaligned dcl 3-11 set ref 175 175 directory_acl_entry based structure level 1 dcl 1-54 dirname 000140 automatic char(168) packed unaligned dcl 60 set ref 87* 104* dp 000264 automatic pointer dcl 3-9 set ref 104* 112 113 128 130* 146* 153 170 170 170 175 175 175 234 296* 298* 311* error_table_$noalloc 000016 external static fixed bin(35,0) dcl 80 set ref 133* error_table_$null_info_ptr 000020 external static fixed bin(35,0) dcl 81 set ref 97* ex_mode 22 000100 automatic bit(36) level 2 dcl 43 set ref 248 258 extended_mode 11 based bit(36) array level 2 dcl 40 set ref 258* frp based bit(18) level 2 packed packed unaligned dcl 37 ref 201 225 226 general_acl_entry based structure level 1 unaligned dcl 1-12 general_delete_acl_entry based structure level 1 dcl 1-35 general_extended_acl_entry based structure level 1 dcl 1-23 i 000212 automatic fixed bin(17,0) dcl 61 set ref 197* 227* 227 228 234* 265 iacl 35 based structure array level 2 packed packed unaligned dcl 3-11 iacl_count 25 based structure array level 2 packed packed unaligned dcl 3-11 inacl_info based structure level 1 dcl 35 set ref 117* info_ptr 000214 automatic pointer dcl 62 set ref 89* 97 117 205 206 209 210 217 218 221 222 lev 000216 automatic fixed bin(17,0) dcl 63 set ref 168* 170 170 170* 174* 175 175 175* 205 206 209 210 217 218 221 222 list based structure level 1 dcl 37 list_inacl_all_info based structure level 1 dcl 4-6 list_ptr 000220 automatic pointer dcl 64 set ref 198* 201 225 226* 226 226 lock$dir_lock_read 000012 constant entry external dcl 77 ref 146 lock$dir_unlock 000014 constant entry external dcl 78 ref 130 298 locked 000222 automatic bit(1) dcl 65 set ref 93* 108* 131* 148* 296* 298 max builtin function dcl 84 ref 135 136 mode 21 000100 automatic bit(36) level 2 in structure "a_n" dcl 43 in procedure "list_inacl_all" set ref 257 mode 10 based bit(36) array level 2 in structure "seg_acls" dcl 40 in procedure "list_inacl_all" set ref 257* mode 10 based bit(36) array level 2 in structure "dir_acls" dcl 34 in procedure "list_inacl_all" set ref 248* n_iacls 000312 automatic fixed bin(17,0) dcl 194 set ref 196* 199 218 222 228 234* 265 null builtin function dcl 84 ref 91 94 97 100 119 304 person 000100 automatic char(32) level 3 dcl 43 set ref 240 project 10 000100 automatic char(32) level 3 dcl 43 set ref 240 ptr builtin function dcl 84 ref 226 rel builtin function dcl 84 ref 275 275 relf 000330 automatic fixed bin(18,0) unsigned dcl 273 set ref 275* 276 return_the_acls 000223 automatic bit(1) dcl 66 set ref 100* 125 231 rtrim builtin function dcl 84 ref 240 240 sa_ptr 000224 automatic pointer dcl 67 set ref 94* 142* 221 221 256 257 258 259 saved_dir_change_pclock 000226 automatic fixed bin(35,0) dcl 68 set ref 128* 153 seg 25 based fixed bin(17,0) array level 3 packed packed unaligned dcl 3-11 set ref 112 170* seg_acl_count 000227 automatic fixed bin(17,0) dcl 70 set ref 112* 115 135 178 254 seg_acls based structure array level 1 dcl 40 set ref 221 221 seg_aclsa based structure array level 2 dcl 31 set ref 142 seg_aclx 000230 automatic fixed bin(17,0) dcl 71 set ref 163* 254 256 257 258 259 260* 260 seg_fault_error 000254 stack reference condition dcl 73 ref 145 147 seg_frp 35 based bit(18) array level 3 packed packed unaligned dcl 3-11 set ref 170 170 segment_acl_entry based structure level 1 dcl 1-45 sia_count 10 based fixed bin(17,0) array level 2 dcl 35 set ref 210* 222* sia_relp based bit(18) array level 2 dcl 35 set ref 209* 221* status_code 11 based fixed bin(35,0) array level 2 in structure "dir_acls" dcl 34 in procedure "list_inacl_all" set ref 249* status_code 12 based fixed bin(35,0) array level 2 in structure "seg_acls" dcl 40 in procedure "list_inacl_all" set ref 259* sum builtin function dcl 84 ref 112 113 tag 20 000100 automatic char(1) level 3 dcl 43 set ref 240 uid 10 based bit(36) level 2 dcl 3-11 set ref 234* unspec builtin function dcl 84 set ref 117* user_area based area(1024) dcl 41 ref 138 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACL_VERSION_1 internal static fixed bin(17,0) initial dcl 1-77 DC_FIND_CHASE internal static fixed bin(1,0) initial dcl 2-10 DC_FIND_NO_CHASE internal static fixed bin(1,0) initial dcl 2-11 DC_FIND_NO_UNLOCK_DIR internal static bit(1) initial dcl 2-12 DC_FIND_UNLOCK_DIR internal static bit(1) initial dcl 2-13 DELETE_ACL_VERSION_1 internal static char(4) initial packed unaligned dcl 1-67 DIR_ACL_VERSION_1 internal static char(4) initial packed unaligned dcl 1-67 GENERAL_ACL_VERSION_1 internal static char(8) initial packed unaligned dcl 1-72 GENERAL_DELETE_ACL_VERSION_1 internal static char(8) initial packed unaligned dcl 1-72 GENERAL_EXTENDED_ACL_VERSION_1 internal static char(8) initial packed unaligned dcl 1-72 SEG_ACL_VERSION_1 internal static char(4) initial packed unaligned dcl 1-67 acl_count automatic fixed bin(17,0) dcl 1-5 dc_find$dir_for_append 000000 constant entry external dcl 2-15 dc_find$dir_for_append_raw 000000 constant entry external dcl 2-16 dc_find$dir_for_retrieve_append 000000 constant entry external dcl 2-17 dc_find$dir_initiate 000000 constant entry external dcl 2-19 dc_find$dir_move_quota 000000 constant entry external dcl 2-21 dc_find$dir_read_priv 000000 constant entry external dcl 2-24 dc_find$dir_reclassify 000000 constant entry external dcl 2-26 dc_find$dir_salvage 000000 constant entry external dcl 2-28 dc_find$dir_write 000000 constant entry external dcl 2-30 dc_find$dir_write_priv 000000 constant entry external dcl 2-31 dc_find$link_target 000000 constant entry external dcl 2-35 dc_find$mdir_set_quota_uid 000000 constant entry external dcl 2-37 dc_find$obj_access_write 000000 constant entry external dcl 2-39 dc_find$obj_access_write_priv 000000 constant entry external dcl 2-40 dc_find$obj_attributes_read 000000 constant entry external dcl 2-42 dc_find$obj_attributes_read_ptr 000000 constant entry external dcl 2-43 dc_find$obj_attributes_write 000000 constant entry external dcl 2-45 dc_find$obj_attributes_write_ptr 000000 constant entry external dcl 2-46 dc_find$obj_bc_delta_write 000000 constant entry external dcl 2-48 dc_find$obj_bc_delta_write_ptr 000000 constant entry external dcl 2-49 dc_find$obj_bc_write 000000 constant entry external dcl 2-50 dc_find$obj_bc_write_ptr 000000 constant entry external dcl 2-51 dc_find$obj_delete 000000 constant entry external dcl 2-53 dc_find$obj_delete_priv 000000 constant entry external dcl 2-54 dc_find$obj_delete_priv_uid 000000 constant entry external dcl 2-56 dc_find$obj_delete_ptr 000000 constant entry external dcl 2-57 dc_find$obj_delete_uid 000000 constant entry external dcl 2-55 dc_find$obj_existence_ptr 000000 constant entry external dcl 2-59 dc_find$obj_for_audit 000000 constant entry external dcl 2-61 dc_find$obj_initiate 000000 constant entry external dcl 2-63 dc_find$obj_initiate_for_linker_dp 000000 constant entry external dcl 2-64 dc_find$obj_initiate_raw 000000 constant entry external dcl 2-65 dc_find$obj_linkage_ring_ptr 000000 constant entry external dcl 2-67 dc_find$obj_modes_ptr 000000 constant entry external dcl 2-69 dc_find$obj_reclassify 000000 constant entry external dcl 2-71 dc_find$obj_status_attributes_read 000000 constant entry external dcl 2-73 dc_find$obj_status_read 000000 constant entry external dcl 2-75 dc_find$obj_status_read_priv 000000 constant entry external dcl 2-77 dc_find$obj_status_read_priv_ptr 000000 constant entry external dcl 2-78 dc_find$obj_status_read_priv_uid 000000 constant entry external dcl 2-79 dc_find$obj_status_read_ptr 000000 constant entry external dcl 2-81 dc_find$obj_status_read_raw_uid 000000 constant entry external dcl 2-80 dc_find$obj_status_read_uid 000000 constant entry external dcl 2-76 dc_find$obj_status_write 000000 constant entry external dcl 2-83 dc_find$obj_status_write_priv 000000 constant entry external dcl 2-84 dc_find$obj_status_write_priv_ptr 000000 constant entry external dcl 2-85 dc_find$obj_status_write_ptr 000000 constant entry external dcl 2-86 dc_find$obj_terminate 000000 constant entry external dcl 2-88 dc_find$obj_terminate_ptr 000000 constant entry external dcl 2-89 dc_find$obj_truncate 000000 constant entry external dcl 2-91 dc_find$obj_truncate_ptr 000000 constant entry external dcl 2-92 dc_find$obj_truncate_raw_ptr 000000 constant entry external dcl 2-93 dc_find$obj_volume_retrieve 000000 constant entry external dcl 2-95 dc_find$seg_fault 000000 constant entry external dcl 2-97 delete_acl based structure level 1 dcl 1-58 delete_acl_array based structure array level 1 dcl 1-64 directory_acl based structure level 1 dcl 1-49 directory_acl_array based structure array level 1 dcl 1-55 general_acl based structure level 1 dcl 1-7 general_delete_acl based structure level 1 dcl 1-30 general_extended_acl based structure level 1 dcl 1-18 list_inacl_all_info_ptr automatic pointer dcl 4-4 segment_acl based structure level 1 dcl 1-40 segment_acl_array based structure array level 1 dcl 1-46 version_number_2 internal static fixed bin(17,0) initial dcl 3-84 NAMES DECLARED BY EXPLICIT CONTEXT. ERR_RETURN 000513 constant label dcl 290 ref 288 RESTART 000055 constant label dcl 91 ref 157 RETURN 000513 constant label dcl 290 ref 121 cleanup_ 001203 constant entry internal dcl 308 ref 95 do_one_list 000514 constant entry internal dcl 187 ref 170 175 fatal_error 001074 constant entry internal dcl 281 ref 97 105 133 150 235 free_storage 001160 constant entry internal dcl 302 ref 156 286 310 list_inacl_all 000027 constant entry external dcl 15 rel_to_acl_ptr 001050 constant entry internal dcl 268 ref 217 221 unlock_dir 001124 constant entry internal dcl 294 ref 118 155 181 285 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1420 1446 1237 1430 Length 1722 1237 26 237 160 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME list_inacl_all 255 external procedure is an external procedure. on unit on line 95 78 on unit on unit on line 133 70 on unit on unit on line 145 70 on unit do_one_list internal procedure shares stack frame of external procedure list_inacl_all. rel_to_acl_ptr internal procedure shares stack frame of external procedure list_inacl_all. fatal_error 64 internal procedure is called by several nonquick procedures. unlock_dir 70 internal procedure is called by several nonquick procedures. free_storage 65 internal procedure is called by several nonquick procedures. cleanup_ internal procedure shares stack frame of on unit on line 95. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME list_inacl_all 000100 a_n list_inacl_all 000123 acls_listed list_inacl_all 000124 alloc_dir_acl_count list_inacl_all 000125 alloc_seg_acl_count list_inacl_all 000126 area_ptr list_inacl_all 000130 called_find list_inacl_all 000131 code list_inacl_all 000132 d_s list_inacl_all 000134 da_ptr list_inacl_all 000136 dir_acl_count list_inacl_all 000137 dir_aclx list_inacl_all 000140 dirname list_inacl_all 000212 i list_inacl_all 000214 info_ptr list_inacl_all 000216 lev list_inacl_all 000220 list_ptr list_inacl_all 000222 locked list_inacl_all 000223 return_the_acls list_inacl_all 000224 sa_ptr list_inacl_all 000226 saved_dir_change_pclock list_inacl_all 000227 seg_acl_count list_inacl_all 000230 seg_aclx list_inacl_all 000262 acl_ptr list_inacl_all 000264 dp list_inacl_all 000302 access_name do_one_list 000312 n_iacls do_one_list 000330 relf rel_to_acl_ptr THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp cat_realloc_chars call_ext_out call_int_this call_int_other return_mac tra_ext_1 signal_op enable_op shorten_stack ext_entry_desc int_entry op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. acl_$list_entry dc_find$dir_read dc_find$finished lock$dir_lock_read lock$dir_unlock THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$noalloc error_table_$null_info_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 15 000022 87 000042 88 000047 89 000052 91 000055 93 000057 94 000061 95 000064 97 000102 100 000115 104 000122 105 000135 107 000145 108 000147 112 000150 113 000172 115 000216 117 000220 118 000224 119 000230 120 000233 121 000234 125 000235 128 000237 130 000241 131 000250 133 000251 135 000275 136 000302 138 000307 140 000321 142 000322 143 000324 145 000330 146 000350 147 000361 148 000362 150 000364 153 000374 155 000400 156 000404 157 000410 163 000411 164 000414 166 000415 168 000416 170 000423 171 000441 173 000443 174 000445 175 000451 176 000471 178 000473 181 000502 183 000506 184 000510 185 000512 290 000513 187 000514 196 000516 197 000525 198 000526 199 000531 201 000532 203 000541 205 000543 206 000546 207 000547 209 000550 210 000552 212 000554 215 000555 217 000557 218 000573 219 000575 221 000576 222 000611 225 000614 226 000620 227 000623 228 000624 231 000632 234 000634 235 000661 238 000671 240 000672 243 000764 245 000767 247 000775 248 001004 249 001007 251 001010 252 001011 254 001012 256 001020 257 001027 258 001032 259 001034 260 001035 262 001036 263 001037 264 001040 265 001041 279 001047 268 001050 275 001052 276 001063 281 001073 285 001101 286 001106 287 001113 288 001120 294 001123 296 001131 298 001145 300 001156 302 001157 304 001165 306 001202 308 001203 310 001204 311 001211 313 001227 ----------------------------------------------------------- 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