COMPILATION LISTING OF SEGMENT pnt_fs_util_ Compiled by: Multics PL/I Compiler, Release 33c, of October 25, 1990 Compiled at: ACTC Technologies Inc. Compiled on: 91-12-12_1506.52_Thu_mst Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1991 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* *********************************************************** */ 8 9 10 11 /****^ HISTORY COMMENTS: 12* 1) change(91-01-07,Vu), approve(91-01-07,MCR8233), audit(91-12-06,Zimmerman), 13* install(91-12-12,MR12.5-1006): 14* Correct error code returned for PNT extended object type. 15* END HISTORY COMMENTS */ 16 17 18 19 /* format: style2 */ 20 21 /* PNT_FS_UTIL_: This program supports the file-system interfaces for 22* PNTs. It assumes that its caller is in the inner ring, and consequently 23* does no parameter copying or validation level manipulations (this is 24* the responsibility of pnt_fs_interface_). It makes no assumptions about 25* THE PNT (>sc1>PNT.pnt) and accepts pathnames to specify the PNT. */ 26 27 pnt_fs_util_: 28 procedure (); 29 30 return; /* Not a valid entry point */ 31 32 /**** Written 1984-07-18 by BIM */ 33 /**** Rewritten 1984-07-25 by E. Swenson */ 34 /**** Modified 1985-01-31 by E. Swenson to reject bad suffixes on targets */ 35 36 /* Parameters */ 37 38 dcl P_acl_ptr ptr parameter; 39 dcl P_area_ptr ptr parameter; 40 dcl P_code fixed bin (35) parameter; 41 dcl P_desired_version char (*) parameter; 42 dcl P_dirname char (*) parameter; 43 dcl P_entryname char (*) parameter; 44 dcl P_error_on_target bit (1) aligned parameter; 45 dcl P_new_entryname char (*) parameter; 46 dcl P_no_sysdaemon bit (1) parameter; 47 dcl P_old_entryname char (*) parameter; 48 dcl P_size fixed bin (35) parameter; 49 dcl P_target_dirname char (*) parameter; 50 dcl P_target_entryname char (*) parameter; 51 52 /* Automatic */ 53 54 dcl dirname char (168); 55 dcl entryname char (32); 56 dcl new_entryname char (32); 57 dcl old_entryname char (32); 58 dcl pnt_ring fixed bin (3); 59 dcl ring_brackets (3) fixed bin (3); 60 dcl service_routine entry variable options (variable); 61 62 dcl 1 local_copy_options aligned like copy_options; 63 dcl 1 mti aligned like ms_table_info; 64 65 /* External Entries */ 66 67 dcl copy_ entry (ptr); 68 dcl get_ring_ entry () returns (fixed bin (3)); 69 dcl fs_util_$make_entry_for_type 70 entry (char (*), char (*), entry, fixed bin (35)); 71 dcl hcs_$chname_file entry (char (*), char (*), char (*), char (*), fixed bin (35)); 72 dcl ms_table_mgr_$create entry (character (*), character (*), pointer, fixed binary (35)); 73 dcl ms_table_mgr_$delete entry (character (*), character (*), fixed binary (35)); 74 75 /* External Static */ 76 77 dcl error_table_$bad_file_name 78 fixed bin (35) external static; 79 dcl error_table_$not_seg_type 80 external static fixed bin (35); 81 82 /* Constant */ 83 84 dcl PNT_TYPE char (3) aligned internal static options (constant) initial ("PNT"); 85 86 /* Conditions */ 87 dcl sub_error_ condition; /* Structures */ 88 89 /* Builtin */ 90 91 dcl addr builtin; 92 dcl length builtin; 93 dcl max builtin; 94 dcl null builtin; 95 dcl rtrim builtin; 96 dcl size builtin; 97 dcl string builtin; 98 dcl substr builtin; 99 100 create: 101 entry (P_dirname, P_entryname, P_size, P_code); 102 103 dirname = P_dirname; 104 entryname = P_entryname; 105 106 call CHECK_SUFFIX (entryname, P_code); 107 if P_code = 0 108 then call CREATE_PNT (); 109 return; 110 111 delete: 112 entry (P_dirname, P_entryname, P_code); 113 114 dirname = P_dirname; 115 entryname = P_entryname; 116 117 call CHECK_SUFFIX (entryname, P_code); 118 if P_code ^= 0 119 then return; 120 121 call PNT_VALIDATE (P_code); 122 if P_code = 0 123 then call ms_table_mgr_$delete (dirname, entryname, P_code); 124 return; 125 126 chname_file: 127 entry (P_dirname, P_entryname, P_old_entryname, P_new_entryname, P_code); 128 129 /* This entry has the same function as hcs_$chname_file for normal segments. 130* In fact, it calls hcs_$chname_file. */ 131 132 dirname = P_dirname; 133 entryname = P_entryname; 134 old_entryname = P_old_entryname; 135 new_entryname = P_new_entryname; 136 137 call CHECK_SUFFIX (entryname, P_code); 138 if P_code ^= 0 139 then return; 140 141 call PNT_VALIDATE (P_code); 142 if P_code ^= 0 143 then return; 144 145 if old_entryname ^= "" 146 then do; 147 call CHECK_SUFFIX (old_entryname, P_code); 148 if P_code ^= 0 149 then return; 150 end; 151 152 if new_entryname ^= "" 153 then do; 154 call CHECK_SUFFIX_DONT_ADD (new_entryname, P_code); 155 if P_code ^= 0 156 then return; 157 end; 158 159 call hcs_$chname_file (dirname, entryname, old_entryname, new_entryname, P_code); 160 return; 161 162 copy: 163 entry (P_dirname, P_entryname, P_target_dirname, P_target_entryname, P_error_on_target, P_code); 164 165 /* This entry copies a PNT from one place in the hierarchy to another. 166* It attempts to make identical copies (i.e. does no sanitizing or 167* restructuring. */ 168 169 copy_options_ptr = addr (local_copy_options); 170 copy_options.version = COPY_OPTIONS_VERSION_1; 171 copy_options.caller_name = "pnt_util_$copy"; 172 copy_options.source_dir = P_dirname; 173 copy_options.source_name = P_entryname; 174 copy_options.target_dir = P_target_dirname; 175 copy_options.target_name = P_target_entryname; 176 177 call CHECK_SUFFIX (copy_options.source_name, P_code); 178 if P_code ^= 0 179 then return; 180 181 call CHECK_SUFFIX_DONT_ADD (copy_options.target_name, P_code); 182 if P_code ^= 0 183 then do; 184 P_error_on_target = "1"b; 185 return; 186 end; 187 188 string (copy_options.flags) = ""b; 189 copy_options.flags.raw = "1"b; /* Don't recurse with xobj stuff */ 190 copy_options.flags.no_name_dup = "1"b; /* We don't want this in the inner ring */ 191 string (copy_options.copy_items) = ""b; 192 193 on sub_error_ call SUB_ERR_HANDLER (); /* copy_ reports erors with sub_err_ */ 194 call copy_ (copy_options_ptr); 195 revert sub_error_; 196 COPY_LOST: 197 P_error_on_target = copy_options.target_err_switch; 198 return; 199 200 list_acl: 201 entry (P_dirname, P_entryname, P_desired_version, P_area_ptr, P_acl_ptr, P_code); 202 203 call fs_util_$make_entry_for_type (FS_OBJECT_TYPE_MSF, FS_LIST_ACL, service_routine, P_code); 204 205 if P_code = 0 206 then call service_routine (P_dirname, P_entryname, P_desired_version, P_area_ptr, P_acl_ptr, P_code); 207 return; 208 209 add_acl_entries: 210 entry (P_dirname, P_entryname, P_acl_ptr, P_code); 211 212 call fs_util_$make_entry_for_type (FS_OBJECT_TYPE_MSF, FS_ADD_ACL_ENTRIES, service_routine, P_code); 213 214 if P_code = 0 215 then call service_routine (P_dirname, P_entryname, P_acl_ptr, P_code); 216 return; 217 218 delete_acl_entries: 219 entry (P_dirname, P_entryname, P_acl_ptr, P_code); 220 221 call fs_util_$make_entry_for_type (FS_OBJECT_TYPE_MSF, FS_DELETE_ACL_ENTRIES, service_routine, P_code); 222 223 if P_code = 0 224 then call service_routine (P_dirname, P_entryname, P_acl_ptr, P_code); 225 return; 226 227 replace_acl: 228 entry (P_dirname, P_entryname, P_acl_ptr, P_no_sysdaemon, P_code); 229 230 call fs_util_$make_entry_for_type (FS_OBJECT_TYPE_MSF, FS_REPLACE_ACL, service_routine, P_code); 231 232 if P_code = 0 233 then call service_routine (P_dirname, P_entryname, P_acl_ptr, P_no_sysdaemon, P_code); 234 return; 235 236 validate: 237 entry (P_dirname, P_entryname, P_code); 238 239 /* This entry supports the extended object suffix_pnt_$validate entry. 240* It is called in ring 1 to verify the object in question is indeed 241* a PNT. */ 242 243 dirname = P_dirname; 244 entryname = P_entryname; 245 246 call CHECK_SUFFIX (entryname, P_code); 247 if P_code ^= 0 248 then return; 249 250 call PNT_VALIDATE (P_code); 251 return; 252 253 PNT_VALIDATE: 254 procedure (code); 255 256 /**** This internal procedure is used to support the extended object 257* validate entrypoint. It can be called by users with no access 258* on the PNT components, so cannot attempt to open the MSF. */ 259 260 dcl code fixed bin (35) parameter; 261 262 call fs_util_$make_entry_for_type (FS_OBJECT_TYPE_MSF, FS_GET_RING_BRACKETS, service_routine, code); 263 if code ^= 0 264 then return; 265 266 call service_routine (dirname, entryname, ring_brackets, code); 267 if code ^= 0 268 then return; 269 270 pnt_ring = get_ring_ (); 271 if ring_brackets (1) ^= pnt_ring | ring_brackets (2) ^= pnt_ring 272 then code = error_table_$not_seg_type; 273 274 return; 275 end PNT_VALIDATE; 276 277 CHECK_SUFFIX: 278 procedure (en, code); 279 280 /* This procedure checks the user-supplied entryname for the "pnt" suffix 281* and adds it if necessary */ 282 283 dcl code fixed bin (35) parameter; 284 dcl en char (*) parameter; 285 dcl nen char (32); 286 dcl suffixed_name_$make entry (char (*), char (*), char (32), fixed bin (35)); 287 288 call suffixed_name_$make (en, "pnt", nen, code); 289 en = nen; 290 return; 291 end CHECK_SUFFIX; 292 293 CHECK_SUFFIX_DONT_ADD: 294 procedure (en, code); 295 296 /* This procedure checks the user-supplied entryname for the "pnt" suffix. 297* It returns an error if it is not supplied. */ 298 299 dcl code fixed bin (35) parameter; 300 dcl en char (*) parameter; 301 302 if substr (en, length (rtrim (en)) - 3, 4) ^= ".pnt" 303 then code = error_table_$bad_file_name; /* Illegal entry name */ 304 305 return; 306 end CHECK_SUFFIX_DONT_ADD; 307 308 SUB_ERR_HANDLER: 309 procedure (); 310 311 /* This procedure handles the sub_err_ condition signaled by copy_. */ 312 313 dcl continue_to_signal_ entry (fixed bin (35)); 314 dcl find_condition_info_ entry (ptr, ptr, fixed bin (35)); 315 dcl 1 ci aligned like condition_info; 316 317 ci.version = condition_info_version_1; 318 call find_condition_info_ (null (), addr (ci), (0)); 319 sub_error_info_ptr = ci.info_ptr; 320 321 if sub_error_info.name ^= "copy_" | copy_error_info.copy_options_ptr ^= copy_options_ptr 322 then do; 323 call continue_to_signal_ ((0)); 324 goto END_HANDLER; 325 end; 326 327 P_code = sub_error_info.status_code; 328 329 goto COPY_LOST; 330 END_HANDLER: 331 return; 332 333 end SUB_ERR_HANDLER; 334 335 CREATE_PNT: 336 procedure (); 337 338 mti.version = MS_TABLE_INFO_VERSION_3; 339 mti.type = PNT_TYPE; 340 mti.header_size = 16; 341 mti.entry_size = size (pnt_entry); 342 mti.max_entries = max (100, P_size); 343 mti.max_size = 65536; 344 mti.keep_meters = "1"b; 345 346 call ms_table_mgr_$create (dirname, entryname, addr (mti), P_code); 347 return; 348 end CREATE_PNT; 349 350 /* format: off */ 351 /* BEGIN INCLUDE FILE ... condition_info.incl.pl1 */ 1 2 1 3 /* Structure for find_condition_info_. 1 4* 1 5* Written 1-Mar-79 by M. N. Davidoff. 1 6**/ 1 7 1 8 /* automatic */ 1 9 1 10 declare condition_info_ptr pointer; 1 11 1 12 /* based */ 1 13 1 14 declare 1 condition_info aligned based (condition_info_ptr), 1 15 2 mc_ptr pointer, /* pointer to machine conditions at fault time */ 1 16 2 version fixed binary, /* Must be 1 */ 1 17 2 condition_name char (32) varying, /* name of condition */ 1 18 2 info_ptr pointer, /* pointer to the condition data structure */ 1 19 2 wc_ptr pointer, /* pointer to wall crossing machine conditions */ 1 20 2 loc_ptr pointer, /* pointer to location where condition occured */ 1 21 2 flags unaligned, 1 22 3 crawlout bit (1), /* on if condition occured in lower ring */ 1 23 3 pad1 bit (35), 1 24 2 pad2 bit (36), 1 25 2 user_loc_ptr pointer, /* ptr to most recent nonsupport loc before condition occurred */ 1 26 2 pad3 (4) bit (36); 1 27 1 28 /* internal static */ 1 29 1 30 declare condition_info_version_1 1 31 fixed binary internal static options (constant) initial (1); 1 32 1 33 /* END INCLUDE FILE ... condition_info.incl.pl1 */ 351 352 /* BEGIN INCLUDE FILE condition_info_header.incl.pl1 BIM 1981 */ 2 2 /* format: style2 */ 2 3 2 4 declare condition_info_header_ptr 2 5 pointer; 2 6 declare 1 condition_info_header 2 7 aligned based (condition_info_header_ptr), 2 8 2 length fixed bin, /* length in words of this structure */ 2 9 2 version fixed bin, /* version number of this structure */ 2 10 2 action_flags aligned, /* tell handler how to proceed */ 2 11 3 cant_restart bit (1) unaligned, /* caller doesn't ever want to be returned to */ 2 12 3 default_restart bit (1) unaligned, /* caller can be returned to with no further action */ 2 13 3 quiet_restart bit (1) unaligned, /* return, and print no message */ 2 14 3 support_signal bit (1) unaligned, /* treat this signal as if the signalling procedure had the support bit set */ 2 15 /* if the signalling procedure had the support bit set, do the same for its caller */ 2 16 3 pad bit (32) unaligned, 2 17 2 info_string char (256) varying, /* may contain printable message */ 2 18 2 status_code fixed bin (35); /* if^=0, code interpretable by com_err_ */ 2 19 2 20 /* END INCLUDE FILE condition_info_header.incl.pl1 */ 352 353 /* BEGIN INCLUDE FILE: copy_error_info.incl.pl1 3 2* 3 3* This is the structure pointed to by sub_error_info.info_ptr when copy_ 3 4* signals the sub_err_ condition. 3 5* 3 6* Jay Pattin 6/13/83 */ 3 7 3 8 declare 1 copy_error_info aligned based (sub_error_info.info_ptr), 3 9 2 copy_options_ptr ptr, /* Pointer to input argument of copy_ */ 3 10 2 operation char (32), /* Name of operation that failed. */ 3 11 2 target_err_switch bit (1) aligned; /* ON = error was on the target */ 3 12 3 13 /* END INCLUDE FILE: copy_error_info.incl.pl1 */ 353 354 /* BEGIN INCLUDE FILE: copy_flags.incl.pl1 */ 4 2 4 3 /* Flags for attributes that should/may be copied by the copy_ subroutine. This include file is 4 4* required by suffix_info.incl.pl1 and copy_options.incl.pl1 4 5* 4 6* Jay Pattin 6/23/83 */ 4 7 4 8 declare 1 copy_flags aligned based, /* ON means that this attribute may be copied by copy_ */ 4 9 2 names bit (1) unaligned, 4 10 2 acl bit (1) unaligned, 4 11 2 ring_brackets bit (1) unaligned, 4 12 2 max_length bit (1) unaligned, 4 13 2 copy_switch bit (1) unaligned, 4 14 2 safety_switch bit (1) unaligned, 4 15 2 dumper_switches bit (1) unaligned, 4 16 2 entry_bound bit (1) unaligned, /* only for vanilla object segments */ 4 17 2 extend bit (1) unaligned, /* copy_ may append to end of existing object */ 4 18 2 update bit (1) unaligned, /* copy_ may replace contents of existing object */ 4 19 2 mbz bit (26) unaligned; 4 20 4 21 /* END INCLUDE FILE: copy_flags.incl.pl1 */ 354 355 /* BEGIN INCLUDE FILE: copy_options.incl.pl1 */ 5 2 5 3 /* This structure declares the input structure used by the copy_ subroutine. 5 4* 5 5* NOTE: This include file depends on declarations in the include file 5 6* copy_flags.incl.pl1. 5 7* 5 8* Jay Pattin 6/1/83 */ 5 9 5 10 declare copy_options_ptr ptr; 5 11 5 12 declare 1 copy_options aligned based (copy_options_ptr), 5 13 2 version char (8), /* currently COPY_OPTIONS_VERSION_1 */ 5 14 2 caller_name char (32) unal, /* Used in nd_handler_ call */ 5 15 2 source_dir char (168) unal, 5 16 2 source_name char (32) unal, 5 17 2 target_dir char (168) unal, 5 18 2 target_name char (32) unal, 5 19 2 flags, 5 20 3 no_name_dup bit (1) unaligned, /* ON = don't call nd_handler_ */ 5 21 3 raw bit (1) unaligned, /* ON = don't call object_type_, use hcs_ */ 5 22 3 force bit (1) unaligned, /* ON = delete or force access to target */ 5 23 3 delete bit (1) unaligned, /* ON = delete original after copy (for move) */ 5 24 3 target_err_switch bit (1) unaligned, 5 25 3 mbz bit (31) unaligned, 5 26 2 copy_items like copy_flags; /* see copy_flags.incl.pl1 */ 5 27 5 28 declare COPY_OPTIONS_VERSION_1 char (8) static options (constant) init ("CPOPT001"); 5 29 5 30 /* END INCLUDE FILE: copy_options.incl.pl1 */ 355 356 /* Begin include file file_system_operations.incl.pl1 BIM 8309 */ 6 2 /* format: style3,indcomtxt,idind30 */ 6 3 6 4 /**** Operation names to be passed to fs_util_$make_entry */ 6 5 6 6 declare ( 6 7 FS_ADD_ACL_ENTRIES init ("add_acl_entries"), 6 8 FS_ADD_EXTENDED_ACL_ENTRIES init ("add_extended_acl_entries"), 6 9 FS_CHNAME_FILE init ("chname_file"), 6 10 FS_COPY init ("copy"), 6 11 FS_DELENTRY_FILE init ("delentry_file"), 6 12 FS_DELETE_ACL_ENTRIES init ("delete_acl_entries"), 6 13 FS_GET_BIT_COUNT init ("get_bit_count"), 6 14 FS_GET_MAX_LENGTH init ("get_max_length"), 6 15 FS_GET_RING_BRACKETS init ("get_ring_brackets"), 6 16 FS_GET_SWITCH init ("get_switch"), 6 17 FS_GET_USER_ACCESS_MODES init ("get_user_access_modes"), 6 18 FS_LIST_ACL init ("list_acl"), 6 19 FS_LIST_EXTENDED_ACL init ("list_extended_acl"), 6 20 FS_LIST_SWITCHES init ("list_switches"), 6 21 FS_REPLACE_ACL init ("replace_acl"), 6 22 FS_REPLACE_EXTENDED_ACL init ("replace_extended_acl"), 6 23 FS_SET_BIT_COUNT init ("set_bit_count"), 6 24 FS_SET_MAX_LENGTH init ("set_max_length"), 6 25 FS_SET_RING_BRACKETS init ("set_ring_brackets"), 6 26 FS_SET_SWITCH init ("set_switch"), 6 27 FS_SUFFIX_INFO init ("suffix_info"), 6 28 FS_VALIDATE init ("validate") 6 29 ) char (64) int static options (constant); 6 30 6 31 /* End include file file_system_operations.incl.pl1 */ 356 357 /* Begin include file ms_table_info.incl.pl1 */ 7 2 /* Written by C. Hornig, June 1979 */ 7 3 /* Modified by B. Margolin, July 1983, for version 2 */ 7 4 /* Modified 1984-07-24 BIM for V3, improved hash, checksums */ 7 5 7 6 /* This information is passed to ms_table_mgr_$create when a multi-segment 7 7* table is created. */ 7 8 7 9 /* format: style3 */ 7 10 7 11 declare MS_TABLE_INFO_VERSION_3 7 12 fixed init (3) internal static options (constant); 7 13 7 14 declare 1 ms_table_info aligned based, 7 15 2 version fixed, /* Should be 3 */ 7 16 2 type character (32), /* what table is this? */ 7 17 2 ( 7 18 header_size, /* length of table header in words */ 7 19 entry_size 7 20 ) unsigned fixed (18), /* same for table entries */ 7 21 2 max_entries unsigned fixed bin (18), /* how many entries */ 7 22 2 max_size fixed bin (19), /* max segment length */ 7 23 2 keep_meters bit (1) aligned; /* table is writable to readers */ 7 24 7 25 /* End include file ms_table_info.incl.pl1 */ 357 358 /* BEGIN INCLUDE FILE ... pnt_entry.incl.pl1 */ 8 2 8 3 /* Modified 790702 by C. Hornig for MSF PNT */ 8 4 /* Modified 84-07-18 BIM for V2, aim ranges, long passwords. */ 8 5 /* Modified 84-09-25 for operator attribute... -E. A. Ranzenbach */ 8 6 /* Modified 85-03-05 E. Swenson for user_validated_time */ 8 7 8 8 /**** The ms_table_mgr_ has fixed sized entries, for now. 8 9* The presence of a version field and some pad allow 8 10* us to have incrementally-upgraded PNTE's in a future change. 8 11**/ 8 12 8 13 /**** The conversion to V2 copies the existing encrypted passwords. 8 14* Since the 32 character scrambling algorithm will not give the 8 15* same results, the short_XX flags indicate that the old scrambler 8 16* should be used. The short flags are automatically turned off 8 17* by calls to update the password with the long-scrambled form. */ 8 18 8 19 /* format: style4,insnl,delnl */ 8 20 8 21 declare pntep pointer automatic; 8 22 declare 1 pnt_entry based (pntep) aligned, /* declaration of a single PNT entry */ 8 23 2 version fixed bin, 8 24 2 private aligned, 8 25 3 pw_flags aligned, 8 26 4 short_pw bit (1) unal, /* ON password is eight-character form */ 8 27 4 short_network_pw bit (1) unal, /* ON card password is eight character form. */ 8 28 3 password character (32), /* person's password */ 8 29 3 network_password character (32), 8 30 2 public, 8 31 3 user_id character (32), /* user ID (for alias entries */ 8 32 3 alias character (8), 8 33 3 default_project character (16), /* user's default project */ 8 34 3 flags, /* one-bit flags */ 8 35 4 has_password bit (1) unaligned, 8 36 4 has_network_password bit (1) unaligned, 8 37 4 trap bit (1) unal, /* If this password is used, holler */ 8 38 4 lock bit (1) unal, /* prevent login if on. */ 8 39 4 nochange bit (1) unal, /* user cannot change password */ 8 40 4 must_change bit unal, /* user must change password at next login */ 8 41 4 pw_time_lock bit (1) unal, /* if password has a time lock */ 8 42 4 generate_pw bit (1) unal, /* ON if we give new pw, OFF lets user select new pw */ 8 43 4 last_bad_pw_reported bit (1) unal, /* ON if user has NOT been told about last bad password */ 8 44 4 operator bit (1) unal, /* ON if user can login as an operator... */ 8 45 4 pads bit (26) unal, 8 46 3 n_good_pw fixed bin, /* Number of good passwords */ 8 47 3 n_bad_pw fixed bin, /* Number of wrong passwords */ 8 48 3 n_bad_pw_since_good fixed bin, /* Number of wrong passwords since good */ 8 49 3 time_pw_changed fixed bin (71), /* When password was modified by user */ 8 50 8 51 3 time_last_good_pw fixed bin (71), 8 52 3 time_last_bad_pw fixed bin (71), /* When pw was last given wrong */ 8 53 3 bad_pw_term_id character (4), /* where bad password from */ 8 54 3 bad_pw_line_type fixed bin (17), /* ... */ 8 55 3 bad_pw_term_type character (32), 8 56 3 password_timelock fixed bin (71), /* Password is locked up until here */ 8 57 3 person_authorization (2) bit (72), /* authorization of this person */ 8 58 3 default_person_authorization bit (72), /* default authorization of this person */ 8 59 3 audit bit (36), /* audit flags for person */ 8 60 3 pad1 bit (36), /* pad to even word boundary */ 8 61 3 user_validated_time fixed bin (71), /* time this PNT entry was last validated by an administrator */ 8 62 2 pad (80 - 64) bit (36) aligned; 8 63 8 64 declare PNT_ENTRY_VERSION_2 fixed bin init (2) int static options (constant); 8 65 8 66 /* END INCLUDE FILE ... pnte.incl.pl1 */ 358 359 /* BEGIN INCLUDE FILE: suffix_info.incl.pl1 */ 9 2 /* format: style3,indcomtxt,idind30 */ 9 3 /**** Jay Pattin 2/13/83 9 4* M. Pandolf 1984.11.30 to set FS_OBJECT_TYPE_MSF to -multisegment_file 9 5* 9 6* The include file copy_flags.incl.pl1 must be included in any program using this include file. 9 7* 9 8* This structure is returned by the suffix_XXX_$suffix_info subroutines */ 9 9 9 10 declare suffix_info_ptr ptr; 9 11 9 12 declare 1 suffix_info aligned based (suffix_info_ptr), 9 13 2 version char (8), 9 14 2 type char (32) unaligned, 9 15 2 type_name char (32) unaligned, /* Singular name of the object type, e.g. "mailbox" */ 9 16 2 plural_name char (32) unaligned, /* Plural of above, e.g. "mailboxes" */ 9 17 2 flags unaligned, 9 18 3 standard_object bit (1) unaligned, /* ON if not an extended object (no suffix_XXX_) */ 9 19 3 extended_acl bit (1) unaligned, /* ON if uses extended ACLs, off if regular ACLs */ 9 20 3 has_switches bit (1) unaligned, /* ON if supports switches for objects */ 9 21 3 mbz1 bit (33) unaligned, 9 22 2 modes char (36), /* correspondence between bits and chars for extended modes */ 9 23 2 max_mode_len fixed bin, /* maximum number of modes on an object */ 9 24 2 num_ring_brackets fixed bin, /* number of ring brackets on object */ 9 25 2 copy_flags like copy_flags, /* See copy_flags.incl.pl1 */ 9 26 2 info_pathname char (168) unaligned; 9 27 /* pathname of info segment containing more info */ 9 28 9 29 declare SUFFIX_INFO_VERSION_1 char (8) static options (constant) init ("SUFFIX01"); 9 30 9 31 /* This information is returned by the suffix_XXX_$list_switches subroutines */ 9 32 9 33 declare switch_list_ptr ptr, 9 34 alloc_switch_count fixed bin, 9 35 alloc_switch_name_count fixed bin; 9 36 9 37 declare 1 switch_list aligned based (switch_list_ptr), 9 38 2 version char (8), /* SWITCH_LIST_VERSION_1 */ 9 39 2 switch_count fixed bin, /* total number of switches */ 9 40 2 switch_name_count fixed bin, /* total number of names */ 9 41 2 switches (alloc_switch_count refer (switch_list.switch_count)), 9 42 3 name_index fixed bin, /* index of first name for this switch */ 9 43 3 name_count fixed bin, /* number of names for this switch */ 9 44 3 default_value bit (1) aligned, /* default setting for this switch */ 9 45 3 mbz1 bit (36) aligned, /* reserved for future use */ 9 46 2 names (alloc_switch_name_count refer (switch_list.switch_name_count)) char (32); 9 47 9 48 declare SWITCH_LIST_VERSION_1 char (8) static options (constant) init ("SWLIST01"); 9 49 9 50 declare ( 9 51 FS_OBJECT_TYPE_SEGMENT init ("-segment"), 9 52 FS_OBJECT_TYPE_DIRECTORY init ("-directory"), 9 53 FS_OBJECT_TYPE_MSF init ("-multisegment_file"), 9 54 FS_OBJECT_TYPE_DM_FILE init ("-dm_file"), 9 55 FS_OBJECT_TYPE_LINK init ("-link") 9 56 ) char (32) unaligned int static options (constant); 9 57 9 58 /* END INCLUDE FILE: suffix_info.incl.pl1 */ 359 360 /* BEGIN INCLUDE FILE sub_error_info.incl.pl1 */ 10 2 /* format: style2 */ 10 3 10 4 /* The include file condition_info_header must be used with this file */ 10 5 10 6 declare sub_error_info_ptr pointer; 10 7 declare 1 sub_error_info aligned based (sub_error_info_ptr), 10 8 2 header aligned like condition_info_header, 10 9 2 retval fixed bin (35), /* return value */ 10 10 2 name char (32), /* module name */ 10 11 2 info_ptr ptr; 10 12 10 13 declare sub_error_info_version_1 10 14 internal static options (constant) fixed bin init (1); 10 15 10 16 /* END INCLUDE FILE sub_error_info.incl.pl1 */ 360 361 /* format: on */ 362 363 end pnt_fs_util_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 12/12/91 1506.5 pnt_fs_util_.pl1 >spec>install>1006>pnt_fs_util_.pl1 351 1 06/28/79 1204.8 condition_info.incl.pl1 >ldd>incl>condition_info.incl.pl1 352 2 03/24/82 1347.2 condition_info_header.incl.pl1 >ldd>incl>condition_info_header.incl.pl1 353 3 10/14/83 1606.7 copy_error_info.incl.pl1 >ldd>incl>copy_error_info.incl.pl1 354 4 10/14/83 1606.7 copy_flags.incl.pl1 >ldd>incl>copy_flags.incl.pl1 355 5 10/14/83 1606.7 copy_options.incl.pl1 >ldd>incl>copy_options.incl.pl1 356 6 10/14/83 1606.7 file_system_operations.incl.pl1 >ldd>incl>file_system_operations.incl.pl1 357 7 12/07/84 1102.1 ms_table_info.incl.pl1 >ldd>incl>ms_table_info.incl.pl1 358 8 03/15/85 0953.1 pnt_entry.incl.pl1 >ldd>incl>pnt_entry.incl.pl1 359 9 03/05/85 1807.3 suffix_info.incl.pl1 >ldd>incl>suffix_info.incl.pl1 360 10 07/18/81 1100.0 sub_error_info.incl.pl1 >ldd>incl>sub_error_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. COPY_OPTIONS_VERSION_1 000130 constant char(8) initial packed unaligned dcl 5-28 ref 170 FS_ADD_ACL_ENTRIES 000110 constant char(64) initial packed unaligned dcl 6-6 set ref 212* FS_DELETE_ACL_ENTRIES 000070 constant char(64) initial packed unaligned dcl 6-6 set ref 221* FS_GET_RING_BRACKETS 000050 constant char(64) initial packed unaligned dcl 6-6 set ref 262* FS_LIST_ACL 000030 constant char(64) initial packed unaligned dcl 6-6 set ref 203* FS_OBJECT_TYPE_MSF 000000 constant char(32) initial packed unaligned dcl 9-50 set ref 203* 212* 221* 230* 262* FS_REPLACE_ACL 000010 constant char(64) initial packed unaligned dcl 6-6 set ref 230* MS_TABLE_INFO_VERSION_3 constant fixed bin(17,0) initial dcl 7-11 ref 338 PNT_TYPE 000132 constant char(3) initial dcl 84 ref 339 P_acl_ptr parameter pointer dcl 38 set ref 200 205* 209 214* 218 223* 227 232* P_area_ptr parameter pointer dcl 39 set ref 200 205* P_code parameter fixed bin(35,0) dcl 40 set ref 100 106* 107 111 117* 118 121* 122 122* 126 137* 138 141* 142 147* 148 154* 155 159* 162 177* 178 181* 182 200 203* 205 205* 209 212* 214 214* 218 221* 223 223* 227 230* 232 232* 236 246* 247 250* 327* 346* P_desired_version parameter char packed unaligned dcl 41 set ref 200 205* P_dirname parameter char packed unaligned dcl 42 set ref 100 103 111 114 126 132 162 172 200 205* 209 214* 218 223* 227 232* 236 243 P_entryname parameter char packed unaligned dcl 43 set ref 100 104 111 115 126 133 162 173 200 205* 209 214* 218 223* 227 232* 236 244 P_error_on_target parameter bit(1) dcl 44 set ref 162 184* 196* P_new_entryname parameter char packed unaligned dcl 45 ref 126 135 P_no_sysdaemon parameter bit(1) packed unaligned dcl 46 set ref 227 232* P_old_entryname parameter char packed unaligned dcl 47 ref 126 134 P_size parameter fixed bin(35,0) dcl 48 ref 100 342 P_target_dirname parameter char packed unaligned dcl 49 ref 162 174 P_target_entryname parameter char packed unaligned dcl 50 ref 162 175 addr builtin function dcl 91 ref 169 318 318 346 346 caller_name 2 based char(32) level 2 packed packed unaligned dcl 5-12 set ref 171* ci 000106 automatic structure level 1 dcl 315 set ref 318 318 code parameter fixed bin(35,0) dcl 283 in procedure "CHECK_SUFFIX" set ref 277 288* code parameter fixed bin(35,0) dcl 260 in procedure "PNT_VALIDATE" set ref 253 262* 263 266* 267 271* code parameter fixed bin(35,0) dcl 299 in procedure "CHECK_SUFFIX_DONT_ADD" set ref 293 302* condition_info based structure level 1 dcl 1-14 condition_info_header based structure level 1 dcl 2-6 condition_info_version_1 constant fixed bin(17,0) initial dcl 1-30 ref 317 continue_to_signal_ 000032 constant entry external dcl 313 ref 323 copy_ 000010 constant entry external dcl 67 ref 194 copy_error_info based structure level 1 dcl 3-8 copy_flags based structure level 1 dcl 4-8 copy_items 157 based structure level 2 dcl 5-12 set ref 191* copy_options based structure level 1 dcl 5-12 copy_options_ptr 000416 automatic pointer dcl 5-10 in procedure "pnt_fs_util_" set ref 169* 170 171 172 173 174 175 177 181 188 189 190 191 194* 196 321 copy_options_ptr based pointer level 2 in structure "copy_error_info" dcl 3-8 in procedure "pnt_fs_util_" ref 321 dirname 000100 automatic char(168) packed unaligned dcl 54 set ref 103* 114* 122* 132* 159* 243* 266* 346* en parameter char packed unaligned dcl 284 in procedure "CHECK_SUFFIX" set ref 277 288* 289* en parameter char packed unaligned dcl 300 in procedure "CHECK_SUFFIX_DONT_ADD" ref 293 302 302 entry_size 12 000372 automatic fixed bin(18,0) level 2 unsigned dcl 63 set ref 341* entryname 000152 automatic char(32) packed unaligned dcl 55 set ref 104* 106* 115* 117* 122* 133* 137* 159* 244* 246* 266* 346* error_table_$bad_file_name 000024 external static fixed bin(35,0) dcl 77 ref 302 error_table_$not_seg_type 000026 external static fixed bin(35,0) dcl 79 ref 271 find_condition_info_ 000034 constant entry external dcl 314 ref 318 flags 156 based structure level 2 dcl 5-12 set ref 188* fs_util_$make_entry_for_type 000014 constant entry external dcl 69 ref 203 212 221 230 262 get_ring_ 000012 constant entry external dcl 68 ref 270 hcs_$chname_file 000016 constant entry external dcl 71 ref 159 header based structure level 2 dcl 10-7 header_size 11 000372 automatic fixed bin(18,0) level 2 unsigned dcl 63 set ref 340* info_ptr 14 000106 automatic pointer level 2 in structure "ci" dcl 315 in procedure "SUB_ERR_HANDLER" set ref 319 info_ptr 116 based pointer level 2 in structure "sub_error_info" dcl 10-7 in procedure "pnt_fs_util_" ref 321 keep_meters 15 000372 automatic bit(1) level 2 dcl 63 set ref 344* length builtin function dcl 92 ref 302 local_copy_options 000212 automatic structure level 1 dcl 62 set ref 169 max builtin function dcl 93 ref 342 max_entries 13 000372 automatic fixed bin(18,0) level 2 unsigned dcl 63 set ref 342* max_size 14 000372 automatic fixed bin(19,0) level 2 dcl 63 set ref 343* ms_table_info based structure level 1 dcl 7-14 ms_table_mgr_$create 000020 constant entry external dcl 72 ref 346 ms_table_mgr_$delete 000022 constant entry external dcl 73 ref 122 mti 000372 automatic structure level 1 dcl 63 set ref 346 346 name 106 based char(32) level 2 dcl 10-7 ref 321 nen 000442 automatic char(32) packed unaligned dcl 285 set ref 288* 289 new_entryname 000162 automatic char(32) packed unaligned dcl 56 set ref 135* 152 154* 159* no_name_dup 156 based bit(1) level 3 packed packed unaligned dcl 5-12 set ref 190* null builtin function dcl 94 ref 318 318 old_entryname 000172 automatic char(32) packed unaligned dcl 57 set ref 134* 145 147* 159* pnt_entry based structure level 1 dcl 8-22 ref 341 pnt_ring 000202 automatic fixed bin(3,0) dcl 58 set ref 270* 271 271 pntep automatic pointer dcl 8-21 ref 341 raw 156(01) based bit(1) level 3 packed packed unaligned dcl 5-12 set ref 189* ring_brackets 000203 automatic fixed bin(3,0) array dcl 59 set ref 266* 271 271 rtrim builtin function dcl 95 ref 302 service_routine 000206 automatic entry variable dcl 60 set ref 203* 205 212* 214 221* 223 230* 232 262* 266 size builtin function dcl 96 ref 341 source_dir 12 based char(168) level 2 packed packed unaligned dcl 5-12 set ref 172* source_name 64 based char(32) level 2 packed packed unaligned dcl 5-12 set ref 173* 177* status_code 104 based fixed bin(35,0) level 3 dcl 10-7 ref 327 string builtin function dcl 97 set ref 188* 191* sub_error_ 000410 stack reference condition dcl 87 ref 193 195 sub_error_info based structure level 1 dcl 10-7 sub_error_info_ptr 000420 automatic pointer dcl 10-6 set ref 319* 321 321 327 substr builtin function dcl 98 ref 302 suffixed_name_$make 000030 constant entry external dcl 286 ref 288 target_dir 74 based char(168) level 2 packed packed unaligned dcl 5-12 set ref 174* target_err_switch 156(04) based bit(1) level 3 packed packed unaligned dcl 5-12 set ref 196 target_name 146 based char(32) level 2 packed packed unaligned dcl 5-12 set ref 175* 181* type 1 000372 automatic char(32) level 2 dcl 63 set ref 339* version 000372 automatic fixed bin(17,0) level 2 in structure "mti" dcl 63 in procedure "pnt_fs_util_" set ref 338* version 2 000106 automatic fixed bin(17,0) level 2 in structure "ci" dcl 315 in procedure "SUB_ERR_HANDLER" set ref 317* version based char(8) level 2 in structure "copy_options" dcl 5-12 in procedure "pnt_fs_util_" set ref 170* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. FS_ADD_EXTENDED_ACL_ENTRIES internal static char(64) initial packed unaligned dcl 6-6 FS_CHNAME_FILE internal static char(64) initial packed unaligned dcl 6-6 FS_COPY internal static char(64) initial packed unaligned dcl 6-6 FS_DELENTRY_FILE internal static char(64) initial packed unaligned dcl 6-6 FS_GET_BIT_COUNT internal static char(64) initial packed unaligned dcl 6-6 FS_GET_MAX_LENGTH internal static char(64) initial packed unaligned dcl 6-6 FS_GET_SWITCH internal static char(64) initial packed unaligned dcl 6-6 FS_GET_USER_ACCESS_MODES internal static char(64) initial packed unaligned dcl 6-6 FS_LIST_EXTENDED_ACL internal static char(64) initial packed unaligned dcl 6-6 FS_LIST_SWITCHES internal static char(64) initial packed unaligned dcl 6-6 FS_OBJECT_TYPE_DIRECTORY internal static char(32) initial packed unaligned dcl 9-50 FS_OBJECT_TYPE_DM_FILE internal static char(32) initial packed unaligned dcl 9-50 FS_OBJECT_TYPE_LINK internal static char(32) initial packed unaligned dcl 9-50 FS_OBJECT_TYPE_SEGMENT internal static char(32) initial packed unaligned dcl 9-50 FS_REPLACE_EXTENDED_ACL internal static char(64) initial packed unaligned dcl 6-6 FS_SET_BIT_COUNT internal static char(64) initial packed unaligned dcl 6-6 FS_SET_MAX_LENGTH internal static char(64) initial packed unaligned dcl 6-6 FS_SET_RING_BRACKETS internal static char(64) initial packed unaligned dcl 6-6 FS_SET_SWITCH internal static char(64) initial packed unaligned dcl 6-6 FS_SUFFIX_INFO internal static char(64) initial packed unaligned dcl 6-6 FS_VALIDATE internal static char(64) initial packed unaligned dcl 6-6 PNT_ENTRY_VERSION_2 internal static fixed bin(17,0) initial dcl 8-64 SUFFIX_INFO_VERSION_1 internal static char(8) initial packed unaligned dcl 9-29 SWITCH_LIST_VERSION_1 internal static char(8) initial packed unaligned dcl 9-48 alloc_switch_count automatic fixed bin(17,0) dcl 9-33 alloc_switch_name_count automatic fixed bin(17,0) dcl 9-33 condition_info_header_ptr automatic pointer dcl 2-4 condition_info_ptr automatic pointer dcl 1-10 sub_error_info_version_1 internal static fixed bin(17,0) initial dcl 10-13 suffix_info based structure level 1 dcl 9-12 suffix_info_ptr automatic pointer dcl 9-10 switch_list based structure level 1 dcl 9-37 switch_list_ptr automatic pointer dcl 9-33 NAMES DECLARED BY EXPLICIT CONTEXT. CHECK_SUFFIX 001662 constant entry internal dcl 277 ref 106 117 137 147 177 246 CHECK_SUFFIX_DONT_ADD 001733 constant entry internal dcl 293 ref 154 181 COPY_LOST 001002 constant label dcl 196 ref 329 CREATE_PNT 002046 constant entry internal dcl 335 ref 107 END_HANDLER 002045 constant label dcl 330 ref 324 PNT_VALIDATE 001554 constant entry internal dcl 253 ref 121 141 250 SUB_ERR_HANDLER 001770 constant entry internal dcl 308 ref 193 add_acl_entries 001143 constant entry external dcl 209 chname_file 000400 constant entry external dcl 126 copy 000612 constant entry external dcl 162 create 000203 constant entry external dcl 100 delete 000265 constant entry external dcl 111 delete_acl_entries 001250 constant entry external dcl 218 list_acl 001017 constant entry external dcl 200 pnt_fs_util_ 000170 constant entry external dcl 27 replace_acl 001360 constant entry external dcl 227 validate 001471 constant entry external dcl 236 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2366 2424 2122 2376 Length 3032 2122 36 372 243 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME pnt_fs_util_ 470 external procedure is an external procedure. on unit on line 193 110 on unit PNT_VALIDATE internal procedure shares stack frame of external procedure pnt_fs_util_. CHECK_SUFFIX internal procedure shares stack frame of external procedure pnt_fs_util_. CHECK_SUFFIX_DONT_ADD internal procedure shares stack frame of external procedure pnt_fs_util_. SUB_ERR_HANDLER internal procedure shares stack frame of on unit on line 193. CREATE_PNT internal procedure shares stack frame of external procedure pnt_fs_util_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME on unit on line 193 000106 ci SUB_ERR_HANDLER pnt_fs_util_ 000100 dirname pnt_fs_util_ 000152 entryname pnt_fs_util_ 000162 new_entryname pnt_fs_util_ 000172 old_entryname pnt_fs_util_ 000202 pnt_ring pnt_fs_util_ 000203 ring_brackets pnt_fs_util_ 000206 service_routine pnt_fs_util_ 000212 local_copy_options pnt_fs_util_ 000372 mti pnt_fs_util_ 000416 copy_options_ptr pnt_fs_util_ 000420 sub_error_info_ptr pnt_fs_util_ 000442 nen CHECK_SUFFIX THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ent_var_desc call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op ext_entry ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. continue_to_signal_ copy_ find_condition_info_ fs_util_$make_entry_for_type get_ring_ hcs_$chname_file ms_table_mgr_$create ms_table_mgr_$delete suffixed_name_$make THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_file_name error_table_$not_seg_type LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 27 000167 30 000175 100 000176 103 000226 104 000234 106 000241 107 000255 109 000260 111 000261 114 000310 115 000316 117 000323 118 000337 121 000341 122 000347 124 000372 126 000373 132 000435 133 000443 134 000450 135 000455 137 000462 138 000476 141 000500 142 000506 145 000510 147 000514 148 000530 152 000532 154 000536 155 000552 159 000554 160 000603 162 000604 169 000647 170 000651 171 000654 172 000657 173 000665 174 000672 175 000677 177 000704 178 000720 181 000722 182 000737 184 000741 185 000744 188 000745 189 000747 190 000751 191 000753 193 000754 194 000772 195 001001 196 001002 198 001010 200 001011 203 001051 205 001076 207 001135 209 001136 212 001170 214 001215 216 001245 218 001246 221 001275 223 001322 225 001352 227 001353 230 001405 232 001432 234 001466 236 001467 243 001514 244 001522 246 001527 247 001543 250 001545 251 001553 253 001554 262 001556 263 001604 266 001610 267 001634 270 001640 271 001647 274 001661 277 001662 288 001673 289 001724 290 001732 293 001733 302 001744 305 001767 308 001770 317 001771 318 001773 319 002013 321 002016 323 002027 324 002037 327 002040 329 002042 330 002045 335 002046 338 002047 339 002051 340 002054 341 002056 342 002060 343 002066 344 002070 346 002072 347 002121 ----------------------------------------------------------- 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