COMPILATION LISTING OF SEGMENT up_rtdt_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/04/87 1321.6 mst Tue 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 /* format: style4 */ 13 up_rtdt_: procedure (upd_rtdtp, wordcount, instaldir, instalname, instalp, P_ansp, ip, answer, code); 14 15 /* 16* up_rtdt_ - update resource type description table. 17* Stolen from up_mgt_ on 03/21/78 by C. D. Tavares 18* Modified 10/03/80 by CDT to fix subscripting error causing additon 19* of only one new attribute per resource type per installation. 20* Modified November 1981, E. N. Kittlitz. user_table_entry conversion. 21* Modified January 1982, BIM for author changes (lock and install time). 22* Modified February 1982, E. N. Kittlitz. xxx.install.acs change. 23* Modified July 1982, E. N. Kittlitz. Put back CDT's fix of 10/03/80. 24* Modified October 1982, B. Braun to add attributes correctly (phx8087). 25* Modified September 1983, S. Harris (UNCA) via E. N. Kittlitz. Put back CDT's fixes again. 26* Modified: 27* 10/05/84 by R. Michael Tague: up_sysctl_$check_acs now returns a bit (36) 28* mode string instead of a fixed bin (5) and no longer takes a directoy arg. 29**/ 30 31 /****^ HISTORY COMMENTS: 32* 1) change(86-06-05,GJohnson), approve(86-06-05,MCR7387), 33* audit(86-06-10,Martinson), install(86-07-11,MR12.0-1092): 34* Correct error message documentation. 35* 2) change(87-04-26,GDixon), approve(87-07-13,MCR7741), 36* audit(87-07-16,Hartogs), install(87-08-04,MR12.1-1055): 37* Upgraded for change to answer_table.incl.pl1. 38* END HISTORY COMMENTS */ 39 40 /* DECLARATION OF PARAMETERS */ 41 dcl (upd_rtdtp, instalp, P_ansp, ip) pointer; 42 dcl wordcount fixed bin; 43 dcl code fixed bin (35); 44 dcl (instaldir char (*), instalname char (*), answer char (*)); 45 46 47 /* DECLARATION OF EXTERNAL SYMBOLS */ 48 49 dcl define_area_ ext entry (pointer, fixed bin (35)); 50 dcl get_ring_ entry () returns (fixed bin (3)); 51 dcl unique_chars_ ext entry (bit (*)) returns (char (15)); 52 dcl hcs_$chname_file entry (char (*), char (*), char (*), char (*), fixed bin (35)); 53 dcl hcs_$delentry_seg entry (ptr, fixed bin (35)); 54 dcl hcs_$get_ring_brackets entry (char (*), char (*), (3) fixed bin (3), fixed bin (35)); 55 dcl hcs_$set_ring_brackets entry (char (*), char (*), (3) fixed bin (3), fixed bin (35)); 56 dcl up_sysctl_$check_acs entry (char (*), char (*), fixed bin, bit (36) aligned, fixed bin (35)); 57 dcl get_process_id_ entry () returns (bit (36)); 58 dcl get_group_id_ entry () returns (char (32)); 59 dcl hcs_$replace_acl entry (char (*), char (*), ptr, fixed bin, bit (1), fixed bin (35)); 60 dcl hcs_$list_acl entry (char (*), char (*), ptr, ptr, ptr, fixed bin, fixed bin (35)); 61 dcl hcs_$set_safety_sw entry (char (*), char (*), bit (1), fixed bin (35)); 62 dcl hcs_$set_safety_sw_seg entry (pointer, bit (1) aligned, fixed bin (35)); 63 dcl hcs_$set_bc entry (char (*), char (*), fixed bin (24), fixed bin (35)); 64 dcl cu_$level_get entry (fixed bin); 65 dcl hcs_$make_seg entry (char (*), char (*), char (*), fixed bin (5), ptr, fixed bin (35)); 66 dcl hcs_$initiate entry (char (*), char (*), char (*), fixed bin (1), fixed bin (2), ptr, fixed bin (35)); 67 dcl sys_log_ entry options (variable); 68 dcl sys_log_$error_log entry options (variable); 69 dcl ioa_$rsnnl entry options (variable); 70 71 dcl error_table_$action_not_performed ext fixed bin (35); 72 dcl sys_info$max_seg_size ext fixed bin (35); 73 74 dcl (rcp_sys_$create_registry, 75 rcp_sys_$update_registry_header) ext entry (char (*) aligned, pointer, fixed bin (35)), 76 rcp_sys_$remove_registry ext entry (char (*) aligned, char (*) aligned, fixed bin (35)); 77 78 dcl (addr, binary, clock, empty, hbound, index, length, null, nullo, offset, pointer, 79 rel, rtrim, size, string, substr, unspec) builtin; 80 dcl cleanup condition; 81 82 /* DECLARATION OF INTERNAL STATIC VARIABLES */ 83 84 dcl acs_name char (32) int static options (constant) init ("rtdt.install.acs"); 85 dcl debug_sw bit (1) aligned static initial (""b); 86 87 dcl (TYPE_AND_LOG_MSG initial (1), 88 TYPE_AND_LOG_MSG_WITH_BANNER initial (2)) fixed bin internal static options (constant); 89 90 /* dcl LEGAL char (95) int static init /* Printables except PAD, semicolon, but with BS */ 91 /* (" !""#$%&'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~");/* */ 92 93 /* DECLARATION OF AUTOMATIC STORAGE VARIABLES */ 94 95 dcl (i, j) fixed bin; /* counters */ 96 dcl registry_dir char (168) aligned; 97 dcl newname char (32); 98 dcl acl_area area (300); 99 dcl acl_ptr pointer; 100 dcl acl_count fixed bin; 101 dcl unique_name char (32); 102 dcl bitcount fixed bin (24); 103 dcl tempstring char (128) aligned; 104 dcl upd_to_new (72) fixed bin; 105 dcl auto_upd_attributes_valid bit (72) aligned; 106 dcl not_found bit (1) aligned; 107 dcl no_prev_table bit (1); /* switch to indicate that an old table doesn't exist */ 108 dcl syacn fixed bin init (1); 109 dcl ring fixed bin; 110 dcl mode bit (36) aligned; 111 dcl rtdt_rings (3) fixed bin (3); 112 113 dcl 1 aclb (5) aligned int, 114 2 userid char (32), 115 2 mode bit (36), 116 2 rpad bit (36) init ((5) (36)"0"b), 117 2 rcode fixed bin (35); 118 119 /* ====================================================================== */ 120 1 1 /* --------------- BEGIN include file rtdt.incl.pl1 --------------- */ 1 2 1 3 dcl 1 rtdt aligned based (rtdtp), /* resource type description table */ 2 1 /* BEGIN INCLUDE FILE author.incl.pl1 */ 2 2 2 3 /* the "author" items must always be the first ones in the table. The 2 4* module which moves the converted table to the System Control process 2 5* fills in these data items and assumes them to be at the head of the segment 2 6* regardless of the specific table's actual declaration. The variables 2 7* "lock" and "last_install_time" used to be "process_id" and "ev_channel" 2 8* respectively. For tables installed in multiple processes, these 2 9* are to be used to lock out multiple installations. */ 2 10 2 11 /* Lock should be used as a modification lock. Since, in general, 2 12* entries may not be moved in system tables, even by installations, 2 13* it is sufficient for only installers and programs that change threads 2 14* to set or respect the lock. Simply updating data in an entry 2 15* requires no such protection. 2 16* 2 17* Last_install_time is used by readers of system tables to detect 2 18* installations or other serious modifications. By checking it before 2 19* and after copying a block of data, they can be protected against 2 20* modifications. 2 21* 2 22* Modules that set the lock should save proc_group_id, and then 2 23* put their group id there for the time they hold the lock. 2 24* if they do not actually install the, they should restore the group id. 2 25**/ 2 26 2 27 2 author aligned, /* validation data about table's author */ 2 28 3 proc_group_id char (32), /* process-group-id (personid.projectid.tag) */ 2 29 3 lock bit (36), /* installation lock */ 2 30 3 update_attributes bit (1) unal, /* update/add/delete attributes */ 2 31 3 update_authorization bit (1) unal, /* update only authorizations */ 2 32 3 deferral_notified bit (1) unal, /* installer notified of deferral of installation */ 2 33 3 pad bit (33) unaligned, 2 34 3 last_install_time fixed bin (71), 2 35 3 table char (4), /* name of table, e.g., SAT MGT TTT RTDT PDT etc. */ 2 36 3 w_dir char (64), /* author's working directory */ 2 37 2 38 /* END INCLUDE FILE author.incl.pl1 */ 1 4 1 5 2 version fixed bin, /* version number */ 1 6 2 installed_under_resource_mgt bit (1) aligned, /* resource mgt. was ON when this was installed */ 1 7 2 charge_type_table_ptr offset, /* points to charge_type_table */ 1 8 2 first_resource offset, /* chain for RTDE's */ 1 9 2 rtdt_area area (RTDT_area_len); /* all following items allocated here */ 1 10 1 11 dcl 1 charge_type_table aligned based (cttp), /* describes charges for resource types */ 1 12 2 n_charge_types fixed bin, /* number of distinct charge types */ 1 13 2 charge_types (N_CHARGE_TYPES refer (charge_type_table.n_charge_types)) aligned char (32), 1 14 2 flagword fixed bin (35) aligned; /* this word simply help us set bitcount properly */ 1 15 1 16 dcl 1 rtde aligned based (rtdep), /* describes one resource type */ 1 17 2 fixed_info aligned, 1 18 3 next_resource offset, /* chains to next type, or nullo */ 1 19 3 name char (32), /* name of resource type, e.g. "tape_drive" */ 1 20 3 syn_to char (32), /* if is_synonym this is master syn */ 1 21 3 precanon_proc char (64), /* name of routine to standardize resource name */ 1 22 3 pad_1 (16) fixed bin (35), 1 23 3 flags unaligned, 1 24 4 (valid, /* resource type hasn't been deleted */ 1 25 is_volume, /* specifies volume or device type */ 1 26 manual_clear, /* volumes of this type to be "degaussed" between owners */ 1 27 addition_pending, /* bookkeeping bit for upd_rtdt_ */ 1 28 deletion_pending, 1 29 is_synonym) bit (1) unaligned, /* ditto */ 1 30 4 pad bit (12) unaligned, 1 31 3 (process_limit, /* how many can you assign at one time */ 1 32 default_time, /* implicit reservations are for how many minutes */ 1 33 max_time, /* how long can you reserve it for */ 1 34 advance_notice_time, /* warn operator to prepare mount ahead of time */ 1 35 pad2, 1 36 n_exclusion_specs, /* number of distinct "name=" fields in attributes */ 1 37 n_mates, /* number of mating devs/vols for this vol/dev */ 1 38 n_subtypes, /* number of registration subtypes */ 1 39 n_defined_attributes) fixed bin (17) unaligned, /* number of defined attributes */ 1 40 3 pad_2 (8) fixed bin (35), 1 41 3 attributes_valid bit (72) aligned, /* "1"b if corresp. attribute undeleted */ 1 42 3 attributes_to_match bit (72) aligned, /* potential mate must possess these attributes */ 1 43 3 attribute_names (72) char (12) aligned, /* all possible attributes for this resource */ 1 44 3 exclusion_specs (36) bit (72) aligned, /* each masks all attrributes of the form "key=val" */ 1 45 3 pad_3 (32) fixed bin (35), 1 46 3 registration_defaults aligned, /* applied at reg. time if none given */ 1 47 4 default_flags aligned, 1 48 5 (potential_attributes_given, /* "1"b = there are default potential_attributes */ 1 49 attributes_given, /* and similarly, etc. */ 1 50 aim_range_given, 1 51 charge_type_given) bit (1) unaligned, 1 52 5 pad bit (31) unaligned, 1 53 4 potential_attributes bit (72) aligned, /* for registration, if given */ 1 54 4 attributes bit (72) aligned, /* for registration and also for runtime "I-don't-care" */ 1 55 4 aim_range (2) bit (72) aligned, /* and similarly, etc. */ 1 56 4 charge_type fixed bin, 1 57 4 pad_4 (8) fixed bin (35) aligned, 1 58 2 mates (N_MATES refer (rtde.n_mates)) char (32) aligned, 1 59 /* the volume type that mounts on this device, or vice versa */ 1 60 2 subtypes (N_SUBTYPES refer (rtde.n_subtypes)) aligned, /* named registration default groups */ 1 61 3 subtype_name char (32), /* name of the group */ 1 62 3 subtype_defaults like rtde.registration_defaults aligned; 1 63 1 64 dcl RTDT_version_3 fixed bin static options (constant) initial (3), 1 65 RTDT_version_2 fixed bin static options (constant) initial (2), 1 66 /* same format, but without precanon_proc */ 1 67 (N_MATES, N_SUBTYPES, N_CHARGE_TYPES) fixed bin, 1 68 RTDT_area_len fixed bin (18); 1 69 1 70 dcl (rtdep, rtdtp, cttp) pointer; 1 71 1 72 /* ---------------- END include file rtdt.incl.pl1 ---------------- */ 121 122 123 124 dcl 1 old_rtdt aligned like rtdt based (old_rtdtp); 125 dcl 1 new_rtdt aligned like rtdt based (new_rtdtp); 126 dcl 1 upd_rtdt aligned like rtdt based (upd_rtdtp); 127 128 dcl 1 old_rtde aligned based (old_rtdep), 129 2 fixed_info like rtde.fixed_info aligned, 130 2 mates (N_MATES refer (old_rtde.n_mates)) char (32) aligned, 131 2 subtypes (N_SUBTYPES refer (old_rtde.n_subtypes)) aligned, 132 3 subtype_name char (32), 133 3 subtype_defaults like rtde.registration_defaults aligned; 134 135 dcl 1 new_rtde aligned based (new_rtdep), 136 2 fixed_info like rtde.fixed_info aligned, 137 2 mates (N_MATES refer (new_rtde.n_mates)) char (32) aligned, 138 2 subtypes (N_SUBTYPES refer (new_rtde.n_subtypes)) aligned, 139 3 subtype_name char (32), 140 3 subtype_defaults like rtde.registration_defaults aligned; 141 142 dcl 1 upd_rtde aligned based (upd_rtdep), 143 2 fixed_info like rtde.fixed_info aligned, 144 2 mates (N_MATES refer (upd_rtde.n_mates)) char (32) aligned, 145 2 subtypes (N_SUBTYPES refer (upd_rtde.n_subtypes)) aligned, 146 3 subtype_name char (32), 147 3 subtype_defaults like rtde.registration_defaults aligned; 148 149 dcl (last_rtdep, upd_rtdep, new_rtdtp, new_rtdep, old_rtdtp, old_rtdep, old_cttp, upd_cttp, delthru_ptr) pointer; 150 151 dcl 1 auto_ctt aligned automatic, 152 2 n_charge_types fixed bin, 153 2 charge_types (100) char (32); 154 155 ansp = P_ansp; 156 if anstbl.as_procid ^= get_process_id_ () then return; 157 158 rtdtp = null; /* this will catch unqualified refs to rtdt */ 159 instalp = null; /* pre-set returned pointer */ 160 delthru_ptr = null; /* delete nothing if we fail(yet) */ 161 instaldir = anstbl.sysdir; /* Make name of place to put copy. */ 162 registry_dir = rtrim (instaldir, " ") || ">rcp"; 163 instalname = "rtdt"; /* Make segment name. */ 164 call hcs_$initiate (instaldir, instalname, "", 0, 0, old_rtdtp, code); 165 if old_rtdtp = null then do; 166 no_prev_table = "1"b; /* no old RTDT. How about that? */ 167 rtdt_rings (*) = get_ring_ (); 168 end; 169 else do; 170 no_prev_table = "0"b; 171 call hcs_$get_ring_brackets (instaldir, instalname, rtdt_rings, code); 172 if code ^= 0 then rtdt_rings (*) = get_ring_ (); 173 end; 174 175 if wordcount < 64 then do; /* make sure segment contains something */ 176 answer = "wordcount < 64"; 177 goto rtdt_error; 178 end; 179 if (upd_rtdt.version ^= RTDT_version_2) & (upd_rtdt.version ^= RTDT_version_3) then do; 180 answer = "unimplemented version"; 181 goto rtdt_error; 182 end; 183 184 if ^no_prev_table then do; 185 call cu_$level_get (ring); 186 call up_sysctl_$check_acs (acs_name, (upd_rtdt.author.proc_group_id), ring, mode, code); 187 if (code ^= 0) | ((mode & RW_ACCESS) ^= RW_ACCESS) then do; 188 answer = "access violation"; 189 goto rtdt_error; 190 end; 191 end; 192 193 /* Create a unique named segment to hold the RTDT during merge */ 194 195 unique_name = unique_chars_ (""b); 196 197 on cleanup call clean_up; 198 199 call hcs_$make_seg (instaldir, unique_name, "", 1010b, new_rtdtp, code); 200 if code ^= 0 then do; 201 answer = "cannot create temp RTDT"; 202 goto rtdt_error; 203 end; 204 205 delthru_ptr = new_rtdtp; 206 207 new_rtdt.author = upd_rtdt.author; 208 new_rtdt.author.last_install_time = clock (); 209 new_rtdt.author.lock = ""b; 210 new_rtdt.version = upd_rtdt.version; 211 new_rtdt.charge_type_table_ptr, 212 new_rtdt.first_resource = nullo; 213 new_rtdt.installed_under_resource_mgt = ip -> installation_parms.rcp_init_flags.resource_mgmt_enabled; 214 215 RTDT_area_len = 0; 216 RTDT_area_len = sys_info$max_seg_size - size (rtdt); 217 218 unspec (auto_area_info) = ""b; 219 auto_area_info.version = area_info_version_1; 220 auto_area_info.no_freeing, auto_area_info.dont_free = "1"b; 221 auto_area_info.owner = "RTDT"; 222 auto_area_info.size = RTDT_area_len; 223 auto_area_info.areap = addr (new_rtdt.rtdt_area); 224 225 call define_area_ (addr (auto_area_info), code); 226 if code ^= 0 then do; 227 answer = "Cannot define area in RTDT"; 228 goto rtdt_error; 229 end; 230 231 old_cttp, 232 last_rtdep = null; 233 auto_ctt.n_charge_types = 0; 234 235 upd_cttp = pointer (upd_rtdt.charge_type_table_ptr, upd_rtdt.rtdt_area); 236 237 238 /* If there is an RTDT already, we have to merge the new with the old. */ 239 240 if ^no_prev_table then do; 241 242 old_cttp = pointer (old_rtdt.charge_type_table_ptr, old_rtdt.rtdt_area); 243 244 do old_rtdep = pointer (old_rtdt.first_resource, old_rtdt.rtdt_area) 245 repeat (pointer (old_rtde.next_resource, old_rtdt.rtdt_area)) 246 while (old_rtdep ^= null); 247 248 old_rtde.deletion_pending = ""b; /* initialize this */ 249 250 if old_rtde.valid then do; 251 not_found = "1"b; 252 upd_to_new (*) = 0; 253 254 do upd_rtdep = pointer (upd_rtdt.first_resource, upd_rtdt.rtdt_area) 255 repeat (pointer (upd_rtde.next_resource, upd_rtdt.rtdt_area)) 256 while (upd_rtdep ^= null & not_found); 257 258 if upd_rtde.valid then 259 if old_rtde.name = upd_rtde.name then do; 260 not_found = ""b; 261 262 N_MATES = upd_rtde.n_mates; 263 N_SUBTYPES = upd_rtde.n_subtypes; 264 265 allocate new_rtde in (new_rtdt.rtdt_area); 266 267 /* Examine and merge the header for this RTDE. */ 268 269 if old_rtde.is_volume ^= upd_rtde.is_volume then do; 270 if old_rtde.is_volume 271 then answer = "attempt to change volume to device: " || old_rtde.name; 272 else answer = "attempt to change device to volume: " || old_rtde.name; 273 goto rtdt_error; /* This would screw up registration database no end */ 274 end; 275 276 if old_rtde.is_synonym ^= upd_rtde.is_synonym then 277 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a is ^[now^;no longer^] a synonym.", 278 old_rtde.name, upd_rtde.is_synonym); 279 280 if (debug_sw & ^upd_rtde.is_synonym) then do; 281 282 if old_rtde.manual_clear ^= upd_rtde.manual_clear then 283 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^b to ^b.", 284 old_rtde.name, "manual_clear", 285 old_rtde.manual_clear, upd_rtde.manual_clear); 286 if old_rtde.process_limit ^= upd_rtde.process_limit then 287 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^d to ^d.", 288 old_rtde.name, "process_limit", 289 old_rtde.process_limit, upd_rtde.process_limit); 290 if old_rtde.default_time ^= upd_rtde.default_time then 291 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^d to ^d.", 292 old_rtde.name, "default_time", 293 old_rtde.default_time, upd_rtde.default_time); 294 if old_rtde.max_time ^= upd_rtde.max_time then 295 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^d to ^d.", 296 old_rtde.name, "max_time", 297 old_rtde.max_time, upd_rtde.max_time); 298 if old_rtde.advance_notice_time ^= upd_rtde.advance_notice_time then 299 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^d to ^d.", 300 old_rtde.name, "advance_notice_time", 301 old_rtde.advance_notice_time, upd_rtde.advance_notice_time); 302 if old_rtde.advance_notice_time ^= upd_rtde.advance_notice_time then 303 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^d to ^d.", 304 old_rtde.name, "advance_notice_time", 305 old_rtde.advance_notice_time, upd_rtde.advance_notice_time); 306 if old_rtdt.version ^= RTDT_version_2 then 307 if old_rtde.precanon_proc ^= upd_rtde.precanon_proc then 308 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^a to ^a.", 309 old_rtde.name, "precanon_proc", 310 old_rtde.precanon_proc, upd_rtde.precanon_proc); 311 if old_rtde.n_subtypes ^= upd_rtde.n_subtypes then 312 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a ^a changed from ^d to ^d.", 313 old_rtde.name, "n_subtypes", 314 old_rtde.n_subtypes, upd_rtde.n_subtypes); 315 end; 316 317 if upd_rtdt.version = RTDT_version_3 then 318 call check_canon_proc (upd_rtde.precanon_proc); 319 320 unspec (new_rtde.fixed_info) = unspec (upd_rtde.fixed_info); 321 new_rtde.next_resource = nullo; 322 new_rtde.deletion_pending, new_rtde.addition_pending = ""b; 323 324 if new_rtde.is_synonym then do; /* syns are mostly hoochy-coochy */ 325 upd_rtde.valid = ""b; /* otherwise it shows up as an addition */ 326 goto skip_validation; 327 end; 328 329 /* RTDT's will be installed before Resource Management. The initial release 330* of RTDT's will not be accompanied by registries. When Resource Management 331* is turned on at a site, we will have to create fresh registries for each 332* resource type. The following code does this. Note that a site's RTDT must 333* be reinstalled to create these registries. */ 334 335 if old_rtdt.installed_under_resource_mgt = ""b then 336 if ip -> installation_parms.rcp_init_flags.resource_mgmt_enabled then 337 new_rtde.addition_pending = "1"b; 338 339 /* Now, examine the attributes and merge the new attributes with the old, 340* preserving the ordering of the old attributes. This is necessary because 341* all the resources described in the registration database reference these 342* attributes by a positional bit string, and thus we can never shift any of 343* these bits without passing through the entire registry for this resource 344* and doing the same thing to all those attribute bits too. */ 345 346 auto_upd_attributes_valid = upd_rtde.attributes_valid; 347 new_rtde.attributes_valid = old_rtde.attributes_valid; 348 new_rtde.attributes_to_match = old_rtde.attributes_to_match; 349 new_rtde.attribute_names (*) = old_rtde.attribute_names (*); 350 new_rtde.n_defined_attributes = old_rtde.n_defined_attributes; 351 /* we diddle this as we go, but we NEVER lower it */ 352 353 354 do i = 1 to old_rtde.n_defined_attributes; 355 356 if substr (old_rtde.attributes_valid, i, 1) then do; 357 358 do j = 1 to upd_rtde.n_defined_attributes 359 while (^substr (auto_upd_attributes_valid, j, 1) 360 | upd_rtde.attribute_names (j) ^= old_rtde.attribute_names (i)); 361 end; 362 363 if j > upd_rtde.n_defined_attributes then do; 364 if debug_sw then 365 call sys_log_ (TYPE_AND_LOG_MSG, 366 "up_rtdt_: ^a attribute ^a deleted.", 367 old_rtde.name, old_rtde.attribute_names (i)); 368 substr (new_rtde.attributes_valid, i, 1) = ""b; 369 end; 370 else do; 371 substr (auto_upd_attributes_valid, j, 1) = ""b; 372 /* it matches, remove it from further consideration */ 373 upd_to_new (j) = i; 374 end; 375 end; 376 end; 377 378 /* At this point we've found and matched all the existing attributes in the 379* old RTDE (or noticed their deletion.) Now we scan to see if new attributes 380* have been defined. */ 381 382 do while (auto_upd_attributes_valid ^= ""b); 383 j = index (auto_upd_attributes_valid, "1"b); 384 385 do i = 1 to old_rtde.n_defined_attributes 386 while (old_rtde.attribute_names (i) ^= upd_rtde.attribute_names (j)); 387 end; 388 389 if i > old_rtde.n_defined_attributes then do; 390 if i > hbound (upd_to_new, 1) then do; 391 answer = "attribute overflow on " || old_rtde.name; 392 goto rtdt_error; 393 end; 394 395 i = new_rtde.n_defined_attributes + 1; 396 new_rtde.attribute_names (i) = upd_rtde.attribute_names (j); 397 substr (new_rtde.attributes_to_match, i, 1) = substr (upd_rtde.attributes_to_match, j, 1); 398 new_rtde.n_defined_attributes = i; 399 end; 400 401 upd_to_new (j) = i; 402 substr (new_rtde.attributes_valid, i, 1) = "1"b; 403 substr (auto_upd_attributes_valid, j, 1) = ""b; /* mark it ignored */ 404 if debug_sw then 405 call sys_log_ (TYPE_AND_LOG_MSG, 406 "up_rtdt_: New attribute ^a for ^a.", new_rtde.attribute_names (i), 407 new_rtde.name); 408 end; 409 410 /* At this point, we've scanned all the attributes and know where each goes. 411* Now we scan the implication string to see if it has changed. */ 412 413 do j = 1 to upd_rtde.n_defined_attributes; 414 i = upd_to_new (j); 415 if i > 0 then 416 if substr (upd_rtde.attributes_to_match, j, 1) ^= substr (new_rtde.attributes_to_match, i, 1) then do; 417 if debug_sw then 418 call sys_log_ (TYPE_AND_LOG_MSG, 419 "up_rtdt_: ^a ^a ^[now^;no longer^] implies.", 420 upd_rtde.name, upd_rtde.attribute_names (j), 421 substr (upd_rtde.attributes_to_match, j, 1)); 422 423 substr (new_rtde.attributes_to_match, i, 1) = substr (upd_rtde.attributes_to_match, j, 1); 424 end; 425 end; 426 427 /* Now we (possibly) restructure the exclusion specifications. */ 428 429 do i = 1 to upd_rtde.n_exclusion_specs; 430 431 new_rtde.exclusion_specs (i) = ""b; 432 /* start out fresh */ 433 434 do j = 1 to upd_rtde.n_defined_attributes; 435 436 if upd_to_new (j) > 0 then /* do only if attr not deleted */ 437 substr (new_rtde.exclusion_specs (i), upd_to_new (j), 1) 438 = substr (upd_rtde.exclusion_specs (i), j, 1); 439 end; 440 end; 441 442 /* All the attributes are now known and loved. Now we merge the mates. */ 443 444 unspec (new_rtde.mates) = unspec (upd_rtde.mates); 445 446 if debug_sw then do; 447 do i = 1 to old_rtde.n_mates; 448 do j = 1 to upd_rtde.n_mates while (upd_rtde.mates (j) ^= old_rtde.mates (i)); 449 end; 450 451 if j > upd_rtde.n_mates then 452 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: ^a no longer mates with ^a.", 453 old_rtde.mates (i), old_rtde.name); 454 else upd_rtde.mates (j) = ""; 455 end; 456 457 do j = 1 to upd_rtde.n_mates; 458 if upd_rtde.mates (j) ^= "" then 459 call sys_log_ (TYPE_AND_LOG_MSG, 460 "up_rtdt_: ^a now mates with ^a.", upd_rtde.mates (j), upd_rtde.name); 461 end; 462 end; 463 464 /* Now we check the defaults and the defaults' attribute strings. */ 465 466 call check_subtype (old_rtde.registration_defaults, upd_rtde.registration_defaults, 467 new_rtde.registration_defaults, old_rtde.name); 468 469 do i = 1 to old_rtde.n_subtypes; 470 471 do j = 1 to upd_rtde.n_subtypes 472 while (upd_rtde.subtype_name (j) ^= old_rtde.subtype_name (i)); 473 end; 474 475 if j > upd_rtde.n_subtypes then 476 if debug_sw then 477 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Subtype ^a deleted from ^a.", 478 old_rtde.subtype_name (i), old_rtde.name); 479 else ; 480 481 else do; 482 483 new_rtde.subtype_name (j) = upd_rtde.subtype_name (j); 484 call ioa_$rsnnl ("^a (subtype ^a)", tempstring, 0, 485 upd_rtde.name, upd_rtde.subtype_name (j)); 486 487 call check_subtype (old_rtde.subtype_defaults (i), 488 upd_rtde.subtype_defaults (j), 489 new_rtde.subtype_defaults (j), tempstring); 490 491 upd_rtde.subtype_name (j) = ""; 492 end; 493 end; 494 495 do j = 1 to upd_rtde.n_subtypes; 496 if upd_rtde.subtype_name (j) ^= "" then do; 497 if debug_sw then 498 call sys_log_ (TYPE_AND_LOG_MSG, 499 "up_rtdt_: Subtype ^a added to ^a.", 500 upd_rtde.subtype_name (j), upd_rtde.name); 501 502 /* Don't get confused by the double subscript of "j"-- the new RTDE was 503* allocated with just as many subtypes as the upd RTDE. Therefore, if there 504* are any extra (new) subtypes in the upd RTDE, by definition we must have 505* encountered (j - n_extra) in the old RTDE. Confused? The answering 506* service isn't! */ 507 508 unspec (new_rtde.subtypes (j)) = unspec (upd_rtde.subtypes (j)); 509 call normalize_attributes (upd_rtde.subtypes (j).potential_attributes, 510 new_rtde.subtypes (j).potential_attributes); 511 call normalize_attributes (upd_rtde.subtypes (j).potential_attributes, 512 new_rtde.subtypes (j).potential_attributes); 513 call normalize_attributes (upd_rtde.subtypes (j).attributes, 514 new_rtde.subtypes (j).attributes); 515 call normalize_charge_type (upd_cttp -> charge_type_table.charge_types 516 (upd_rtde.subtypes (j).charge_type), 517 new_rtde.subtypes (j).charge_type); 518 end; 519 end; 520 521 upd_rtde.valid = ""b; /* exhausted this rtde, turn it off. */ 522 523 skip_validation: if last_rtdep = null then 524 new_rtdt.first_resource = offset (new_rtdep, new_rtdt.rtdt_area); 525 else last_rtdep -> rtde.next_resource = offset (new_rtdep, new_rtdt.rtdt_area); 526 527 last_rtdep = new_rtdep; 528 end; /* end processing of matching rtdes */ 529 end; /* end search for an upd_rtde to match an old_rtde */ 530 531 if not_found then old_rtde.deletion_pending = "1"b; 532 end; /* end finding of a valid old_rtde */ 533 end; /* end the loop thru all old_rtdes */ 534 end; /* end consideration of old RTDT */ 535 536 537 /* We interrupt this program to bring you a few brief and timely internal procedures. */ 538 539 check_subtype: proc (old_defaults, upd_defaults, new_defaults, name); 540 541 dcl 1 old_defaults aligned parameter like rtde.registration_defaults; 542 dcl 1 upd_defaults aligned parameter like rtde.registration_defaults; 543 dcl 1 new_defaults aligned parameter like rtde.registration_defaults; 544 545 dcl name char (*) aligned parameter; 546 547 dcl new_charge_type char (32) aligned; 548 549 if debug_sw then do; 550 if old_defaults.potential_attributes_given ^= upd_defaults.potential_attributes_given then 551 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Default ^a ^[added^;removed^] for ^a", 552 "potential_attributes", upd_defaults.potential_attributes_given, name); 553 if old_defaults.attributes_given ^= upd_defaults.attributes_given then 554 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Default ^a ^[added^;removed^] for ^a", 555 "attributes", upd_defaults.attributes_given, name); 556 if old_defaults.aim_range_given ^= upd_defaults.aim_range_given then 557 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Default ^a ^[added^;removed^] for ^a", 558 "access_bounds", upd_defaults.aim_range_given, name); 559 if old_defaults.charge_type_given ^= upd_defaults.charge_type_given then 560 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Default ^a ^[added^;removed^] for ^a", 561 "charge_type", upd_defaults.charge_type_given, name); 562 end; 563 564 string (new_defaults.default_flags) = string (upd_defaults.default_flags); 565 566 if upd_defaults.potential_attributes & ^upd_rtde.attributes_valid then do; 567 invalid_atts: answer = "invalid attributes as defaults"; 568 goto rtdt_error; 569 end; 570 571 call normalize_attributes (upd_defaults.potential_attributes, new_defaults.potential_attributes); 572 573 if upd_defaults.attributes & ^upd_rtde.attributes_valid then goto invalid_atts; 574 575 call normalize_attributes (upd_defaults.attributes, new_defaults.attributes); 576 577 if debug_sw then do; 578 if old_defaults.potential_attributes ^= new_defaults.potential_attributes then 579 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Default potential attributes changed for ^a", name); 580 581 if old_defaults.attributes ^= new_defaults.attributes then 582 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Default attributes changed for ^a", name); 583 584 if old_defaults.aim_range_given & upd_defaults.aim_range_given then 585 if (old_defaults.aim_range (1) ^= upd_defaults.aim_range (1) 586 | old_defaults.aim_range (2) ^= upd_defaults.aim_range (2)) then 587 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Default ^a changed for ^a", 588 "access_bounds", name); 589 end; 590 591 new_defaults.aim_range = upd_defaults.aim_range; 592 593 if upd_defaults.charge_type_given then 594 new_charge_type = upd_cttp -> charge_type_table.charge_types (upd_defaults.charge_type); 595 else new_charge_type = "* ERROR! *"; 596 597 if debug_sw then 598 if upd_defaults.charge_type_given & old_defaults.charge_type_given then 599 if new_charge_type ^= old_cttp -> charge_type_table.charge_types (old_defaults.charge_type) 600 then 601 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Charge type changed for ^a", name); 602 603 call normalize_charge_type (new_charge_type, new_defaults.charge_type); 604 605 return; 606 end check_subtype; 607 608 normalize_attributes: proc (upd_attributes, new_attributes); 609 610 dcl (upd_attributes, new_attributes) bit (72) aligned; 611 612 dcl (i, j) fixed bin; 613 614 new_attributes = ""b; 615 616 do i = 1 to length (upd_attributes); 617 j = upd_to_new (i); 618 if j > 0 then 619 substr (new_attributes, j, 1) = substr (upd_attributes, i, 1); 620 end; 621 622 return; 623 624 end normalize_attributes; 625 626 627 normalize_charge_type: proc (type_name, type_num); 628 629 dcl type_name char (32) aligned parameter, 630 type_num fixed bin parameter; 631 632 dcl i fixed bin; 633 634 do i = 1 to auto_ctt.n_charge_types 635 while (auto_ctt.charge_types (i) ^= type_name); 636 end; 637 638 if i > auto_ctt.n_charge_types then do; 639 auto_ctt.n_charge_types = i; 640 auto_ctt.charge_types (i) = type_name; 641 end; 642 643 type_num = i; 644 645 return; 646 647 end normalize_charge_type; 648 649 650 check_canon_proc: proc (canon_proc_name); 651 652 dcl canon_proc_name char (*) aligned parameter; 653 654 dcl cv_entry_ entry (char (*), ptr, fixed bin (35)) returns (entry), 655 entrypt entry variable; 656 657 if canon_proc_name = "" then return; /* no canon proc */ 658 entrypt = cv_entry_ (rtrim (canon_proc_name), null, code); 659 /* if you give the poor dolt trailing blanks he has a breakdown */ 660 if code = 0 then return; 661 662 answer = "canonicalizer not found: " || canon_proc_name; 663 goto rtdt_error; 664 665 end check_canon_proc; 666 667 668 /* Now consider all the new RTDE's that weren't in the old RTDT. This block 669* of code also installs the first RTDT when there is no old RTDT. (which is 670* a good trick, since the system won't come UP without an old rtdt...?!?) */ 671 672 do upd_rtdep = pointer (upd_rtdt.first_resource, upd_rtdt.rtdt_area) 673 repeat (pointer (upd_rtde.next_resource, upd_rtdt.rtdt_area)) 674 while (upd_rtdep ^= null); 675 676 if upd_rtde.valid then do; 677 678 N_MATES = upd_rtde.n_mates; 679 N_SUBTYPES = upd_rtde.n_subtypes; 680 681 allocate new_rtde in (new_rtdt.rtdt_area); 682 683 unspec (new_rtde) = unspec (upd_rtde); /* not completely right, but not bad for starters */ 684 685 if ^new_rtde.is_synonym then do; /* don't waste time on syns */ 686 if upd_rtdt.version = RTDT_version_3 then 687 call check_canon_proc (upd_rtde.precanon_proc); 688 689 call normalize_charge_type (upd_cttp -> charge_type_table.charge_types 690 (upd_rtde.registration_defaults.charge_type), 691 new_rtde.registration_defaults.charge_type); 692 693 do i = 1 to upd_rtde.n_subtypes; 694 call normalize_charge_type (upd_cttp -> charge_type_table.charge_types 695 (upd_rtde.subtypes (i).charge_type), 696 new_rtde.subtypes (i).charge_type); 697 end; 698 end; 699 700 new_rtde.addition_pending = "1"b; 701 new_rtde.next_resource = nullo; 702 703 if last_rtdep = null then 704 new_rtdt.first_resource = offset (new_rtdep, new_rtdt.rtdt_area); 705 else last_rtdep -> rtde.next_resource = offset (new_rtdep, new_rtdt.rtdt_area); 706 707 last_rtdep = new_rtdep; 708 end; 709 end; 710 711 N_CHARGE_TYPES = auto_ctt.n_charge_types; 712 allocate charge_type_table in (new_rtdt.rtdt_area); 713 unspec (charge_type_table.charge_types) = unspec (auto_ctt.charge_types); 714 new_rtdt.charge_type_table_ptr = offset (cttp, new_rtdt.rtdt_area); 715 716 bitcount = binary (rel (addr (charge_type_table.flagword))) * 36; 717 718 call hcs_$set_bc (instaldir, unique_name, bitcount, code); 719 call hcs_$set_safety_sw (instaldir, unique_name, "1"b, code); 720 call hcs_$set_ring_brackets (instaldir, unique_name, rtdt_rings, code); 721 722 if no_prev_table then do; 723 aclb (1).userid = get_group_id_ (); /* make up acl for newly-created RTDT */ 724 aclb (1).mode = "101"b; /* RW */ 725 aclb (syacn + 1).userid = "*.SysDaemon.*"; 726 aclb (syacn + 1).mode = "100"b; 727 aclb (syacn + 2).userid = "*.*.*"; 728 aclb (syacn + 2).mode = "100"b; 729 syacn = syacn + 2; 730 call hcs_$replace_acl (instaldir, unique_name, addr (aclb), syacn, "1"b, code); 731 end; 732 733 else do; 734 call hcs_$list_acl (instaldir, instalname, addr (acl_area), acl_ptr, null, acl_count, code); 735 if code ^= 0 then do; 736 answer = "cannot list ACL of current RTDT"; 737 goto rtdt_error; 738 end; 739 740 call hcs_$replace_acl (instaldir, unique_name, acl_ptr, acl_count, ""b, code); 741 if code ^= 0 then do; 742 answer = "cannot set ACL of new RTDT"; 743 goto rtdt_error; 744 end; 745 end; 746 747 /* Now create the new databases if resource types have been added. */ 748 749 do new_rtdep = pointer (new_rtdt.first_resource, new_rtdt.rtdt_area) 750 repeat (pointer (new_rtde.next_resource, new_rtdt.rtdt_area)) 751 while (new_rtdep ^= null); 752 753 if new_rtde.addition_pending then do; 754 755 if ^new_rtde.is_synonym then 756 if ip -> installation_parms.rcp_init_flags.resource_mgmt_enabled then do; 757 758 new_rtde.addition_pending = ""b; /* otherwise, fun when we later try to compare registry headers! */ 759 760 call rcp_sys_$create_registry (registry_dir, new_rtdep, code); 761 if code ^= 0 then do; 762 call sys_log_$error_log (TYPE_AND_LOG_MSG_WITH_BANNER, code, 763 "up_rtdt_", "Cannot create RCP registry for ^a", new_rtde.name); 764 answer = "cannot create registry for " || new_rtde.name; 765 goto rtdt_error; 766 end; 767 end; 768 769 call sys_log_ (TYPE_AND_LOG_MSG, 770 "up_rtdt_: Adding resource type ""^a"" to the system.", new_rtde.name); 771 end; 772 773 else do; 774 775 if ^new_rtde.is_synonym then 776 if ip -> installation_parms.rcp_init_flags.resource_mgmt_enabled then do; 777 call rcp_sys_$update_registry_header (registry_dir, new_rtdep, code); 778 if code ^= 0 then do; /* EXTREMELY unlikely */ 779 call sys_log_$error_log (TYPE_AND_LOG_MSG_WITH_BANNER, code, 780 "up_rtdt_", "Cannot update registry for ^a", new_rtde.name); 781 answer = "cannot update registry for " || new_rtde.name; 782 goto rtdt_error; 783 end; 784 end; 785 end; 786 end; 787 788 /* Now, QuickAsABunny rename the old and new RTDTS, replacing them. */ 789 790 if ^no_prev_table then do; 791 call ioa_$rsnnl ("^a.-.^a", newname, 0, instalname, unique_name); 792 793 call hcs_$chname_file (instaldir, instalname, instalname, newname, code); 794 if code ^= 0 then do; 795 call sys_log_$error_log (TYPE_AND_LOG_MSG_WITH_BANNER, code, "up_rtdt_", "Cannot rename old rtdt."); 796 answer = "cannot rename old RTDT."; 797 goto rtdt_error; 798 end; 799 end; 800 801 call hcs_$chname_file (instaldir, unique_name, unique_name, instalname, code); 802 if code ^= 0 then do; 803 call sys_log_$error_log (TYPE_AND_LOG_MSG_WITH_BANNER, code, "up_rtdt_", "Cannot rename new rtdt."); 804 answer = "cannot rename new RTDT."; 805 806 if ^no_prev_table then do; 807 call hcs_$chname_file (instaldir, newname, newname, instalname, code); 808 if code ^= 0 then 809 call sys_log_$error_log (TYPE_AND_LOG_MSG_WITH_BANNER, code, 810 "up_rtdt_", "Cannot recover by renaming original RTDT either."); 811 goto rtdt_error; 812 end; 813 end; 814 815 /* Now that no one can reference the dead resources, if any, we can free their registries. */ 816 817 if ^no_prev_table then 818 do old_rtdep = pointer (old_rtdt.first_resource, old_rtdt.rtdt_area) 819 repeat (pointer (old_rtde.next_resource, old_rtdt.rtdt_area)) 820 while (old_rtdep ^= null); 821 822 if old_rtde.deletion_pending then do; 823 824 call sys_log_ (TYPE_AND_LOG_MSG, "up_rtdt_: Deleting resource type ""^a"" from the system.", 825 old_rtde.name); 826 827 if ^old_rtde.is_synonym then 828 if ip -> installation_parms.rcp_init_flags.resource_mgmt_enabled then do; 829 call rcp_sys_$remove_registry (registry_dir, old_rtde.name, code); 830 if code ^= 0 then do; 831 call sys_log_$error_log (TYPE_AND_LOG_MSG_WITH_BANNER, code, 832 "up_rtdt_", "Unable to remove RCP registry for ^a.", old_rtde.name); 833 goto rtdt_error; 834 end; 835 end; 836 837 old_rtde.deletion_pending = ""b; 838 end; /* deletion of a resource */ 839 end; 840 841 842 code = 0; 843 844 instalp = old_rtdtp; /* ***** returning ptr to the old table seems useless, 845* but all the other up_something_'s do it */ 846 847 return; 848 849 rtdt_error: 850 code = error_table_$action_not_performed; /* RTDT not installed */ 851 852 call clean_up; 853 854 clean_up: proc; 855 if delthru_ptr ^= null then do; 856 call hcs_$set_safety_sw_seg (delthru_ptr, "0"b, 0); 857 call hcs_$delentry_seg (delthru_ptr, 0); 858 end; 859 end clean_up; 860 861 return; 862 863 /* BEGIN MESSAGE DOCUMENTATION 864* 865* Message: 866* up_rtdt_: ERROR_MESSAGE Cannot create RCP registry for RESOURCE_NAME. 867* 868* S: as (severity2) 869* 870* T: $run 871* 872* M: The error described by ERROR_MESSAGE occurred while a system 873* administrator was attempting to install a new rtdt. The rtdt contained a 874* new resource type, but the resource management registry for that resource 875* type could not be created. The rtdt is not installed. Some other 876* registries may already have been modified according to information in the 877* new rtdt. 878* 879* A: Notify the system administrator. 880* 881* Message: 882* up_rtdt_: ERROR_MESSAGE Cannot update RCP registry for RESOURCE_NAME. 883* 884* S: as (severity2) 885* 886* T: $run 887* 888* M: The error described by ERROR_MESSAGE occurred while a system 889* administrator was attempting to install a new rtdt. The rtdt contained 890* changes to a resource type, but the resource management registry for that 891* resource type could not be modified. The rtdt is not installed. Some 892* other registries may already have been modified according to information 893* in the new rtdt. 894* 895* A: Notify the system administrator. 896* 897* Message: 898* up_rtdt_: ERROR_MESSAGE Cannot rename old RTDT. 899* 900* S: as (severity2) 901* 902* T: $run 903* 904* M: The current rtdt could not be renamed to accomodate the 905* installation of a new rtdt. 906* 907* A: Notify the system administrator. 908* 909* Message: 910* up_rtdt_: ERROR_MESSAGE Cannot rename new rtdt. 911* 912* S: as (severity2) 913* 914* T: $run 915* 916* M: The new rtdt being installed could not be renamed to "rtdt". 917* The rtdt is not installed. 918* 919* A: Notify the system administrator. 920* 921* Message: 922* up_rtdt_: ERROR_MESSAGE Cannot recover by renaming old RTDT either. 923* 924* S: as (severity2) 925* 926* T: $run 927* 928* M: The program that installs rtdt's cannot recover correctly from an 929* earlier error in renaming, for which an error message is also printed. 930* Although the current rtdt is not destroyed, it is no longer accessible to 931* users. This will affect the operation of resource management and RCP. 932* 933* A: Notify the system administrator. 934* 935* Message: 936* up_rtdt_: Deleting resource type RESOURCE_TYPE from the system. 937* 938* S: as (severity1) 939* 940* T: $run 941* 942* M: The named resource type is no longer accessible by system users. This 943* is an advisory message. 944* 945* A: None. 946* 947* Message: 948* up_rtdt_: Adding resource type RESOURCE_TYPE to the system. 949* 950* S: as (severity1) 951* 952* T: $run 953* 954* M: The named resource type has been newly defined and will be accessible 955* by system users. This is an advisory message. 956* 957* A: None. 958* 959* END MESSAGE DOCUMENTATION */ 960 961 debug_rtdt_on: entry; 962 debug_sw = "1"b; 963 return; 964 965 debug_rtdt_off: entry; 966 debug_sw = ""b; 967 return; 968 969 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 3 2* 3 3* Values for the "access mode" argument so often used in hardcore 3 4* James R. Davis 26 Jan 81 MCR 4844 3 5* Added constants for SM access 4/28/82 Jay Pattin 3 6* Added text strings 03/19/85 Chris Jones 3 7**/ 3 8 3 9 3 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 3 11 dcl ( 3 12 N_ACCESS init ("000"b), 3 13 R_ACCESS init ("100"b), 3 14 E_ACCESS init ("010"b), 3 15 W_ACCESS init ("001"b), 3 16 RE_ACCESS init ("110"b), 3 17 REW_ACCESS init ("111"b), 3 18 RW_ACCESS init ("101"b), 3 19 S_ACCESS init ("100"b), 3 20 M_ACCESS init ("010"b), 3 21 A_ACCESS init ("001"b), 3 22 SA_ACCESS init ("101"b), 3 23 SM_ACCESS init ("110"b), 3 24 SMA_ACCESS init ("111"b) 3 25 ) bit (3) internal static options (constant); 3 26 3 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 3 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 3 29 3 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 3 31 static options (constant); 3 32 3 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 3 34 static options (constant); 3 35 3 36 dcl ( 3 37 N_ACCESS_BIN init (00000b), 3 38 R_ACCESS_BIN init (01000b), 3 39 E_ACCESS_BIN init (00100b), 3 40 W_ACCESS_BIN init (00010b), 3 41 RW_ACCESS_BIN init (01010b), 3 42 RE_ACCESS_BIN init (01100b), 3 43 REW_ACCESS_BIN init (01110b), 3 44 S_ACCESS_BIN init (01000b), 3 45 M_ACCESS_BIN init (00010b), 3 46 A_ACCESS_BIN init (00001b), 3 47 SA_ACCESS_BIN init (01001b), 3 48 SM_ACCESS_BIN init (01010b), 3 49 SMA_ACCESS_BIN init (01011b) 3 50 ) fixed bin (5) internal static options (constant); 3 51 3 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 969 970 /* BEGIN INCLUDE FILE ... answer_table.incl.pl1 */ 4 2 4 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 4 4 /* */ 4 5 /* The answer table has one entry per "login instance" whether completed or */ 4 6 /* not. It is connected to the Channel Definition Table by the pointer */ 4 7 /* "channel". The header is used mostly by dialup_. */ 4 8 /* */ 4 9 /* Programs which use this file must also include user_table_header.incl.pl1 */ 4 10 /* */ 4 11 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 4 12 4 13 /****^ HISTORY COMMENTS: 4 14* 1) change(81-09-10,Kittlitz), approve(), audit(), install(): 4 15* Replace anstbl.incl.pl1. 4 16* 2) change(85-01-15,Swenson), approve(), audit(), install(): 4 17* Add anstbl.session_uid_counter. 4 18* 3) change(85-08-21,Coren), approve(), audit(), install(): 4 19* Add anstbl.message_update_time and named constants for values of 4 20* anstbl.session, and to make all padding explicit. 4 21* 4) change(85-08-23,Coren), approve(), audit(), install(): 4 22* Change "entry" to a placeholder so as not to require 4 23* user_table_entry.incl.pl1. 4 24* 5) change(86-06-29,Swenson), approve(87-07-13,MCR7741), 4 25* audit(87-04-14,GDixon), install(87-08-04,MR12.1-1056): 4 26* Added the flag login_server_present which indicates whether a login 4 27* server request has been received. This is used to determine whether 4 28* dial_ctl_ should call uc_cleanup_network_dials_ (and thus 4 29* hpriv_connection_list_, which only exists with the MNA RPQ software). 4 30* 6) change(87-04-14,GDixon), approve(87-07-13,MCR7741), 4 31* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 4 32* A) Moved constants for ute.pw_flags.mask_ctl into 4 33* user_table_entry.incl.pl1. 4 34* B) Added common table header to all user tables. 4 35* END HISTORY COMMENTS */ 4 36 4 37 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 4 38 /* */ 4 39 /* The anstbl structure below is divided into sections. Each section begins */ 4 40 /* with a comment describing the elements in the section. Elements are */ 4 41 /* placed within a section, based upon their function or the programs that */ 4 42 /* use them. Each section begins on a double word and is an even number of */ 4 43 /* words long. */ 4 44 /* */ 4 45 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 4 46 4 47 4 48 4 49 /* format: style4 */ 4 50 4 51 dcl ANSTBL_version_4 static options (constant) init (4); /* version of this declaration */ 4 52 4 53 dcl ansp ptr automatic init (null); 4 54 4 55 dcl 1 anstbl based (ansp) aligned, /* Structure of answer table */ 4 56 2 header like ut_header, /* Header common to all user tables. */ 4 57 4 58 /* Counter elements. */ 4 59 2 nlin fixed bin, /* number of active lines */ 4 60 2 mxlin fixed bin, /* maximum number of active lines */ 4 61 2 n_users fixed bin, /* number of logged-in users */ 4 62 2 max_users fixed bin, /* maximum number of users allowed */ 4 63 2 n_units fixed bin, /* number of logged in units */ 4 64 2 max_units fixed bin, /* maximum number of units */ 4 65 2 n_sessions fixed bin, /* number of Multics sessions */ 4 66 2 n_pad fixed bin, 4 67 4 68 /* Name elements. */ 4 69 2 sysdir char (64) unal, /* name of main system control directory */ 4 70 2 as_tty char (8) unal, /* name of main answering service device. */ 4 71 4 72 /* Login elements. */ 4 73 2 login_word char (8) unal, /* login word if special_session=1 */ 4 74 2 session char (8) unal, /* session indicator */ 4 75 2 special_message char (128) unal, /* message to be printed for special session */ 4 76 2 message_update_time fixed bin (71), /* time at which special_message was last updated */ 4 77 2 message_lng fixed bin, /* length of special message */ 4 78 2 login_pad fixed bin, 4 79 4 80 /* Table update elements. */ 4 81 2 lock_count fixed bin, /* global lock for all system control tables */ 4 82 2 update_pending bit (1) aligned, /* flag indicating that update is required */ 4 83 2 update_channel fixed binary (71), /* event channel of update procedure */ 4 84 2 acct_update_chn fixed bin (71) aligned, /* Timer IPC channel */ 4 85 2 acct_last_update_time fixed bin (71) aligned, /* Time of last accounting update */ 4 86 2 acct_alarm_fail fixed bin, /* non-zero if alarm has failed */ 4 87 2 update_pad fixed bin, 4 88 4 89 /* dialup_ data values. */ 4 90 2 current_time fixed bin (71), /* Time of last transaction */ 4 91 2 processid_index fixed bin (18), /* unique index for process id generation */ 4 92 2 session_uid_counter fixed bin (35), /* current session_uid */ 4 93 4 94 /* load_ctl_ elements. */ 4 95 2 shift fixed bin, /* Shift, set by act_ctl_ */ 4 96 2 auto_maxu fixed bin, /* 0 = manual, 1 = config, 2 = load-level */ 4 97 2 extra_units fixed bin, /* Total daemon and abs units. */ 4 98 /* load_ctl_ load leveling desired response range: */ 4 99 2 response_high fixed bin, /* bad if user response time slower than this */ 4 100 2 response_low fixed bin, /* bad if user response time faster than this */ 4 101 2 load_ctl_pad fixed bin, 4 102 4 103 /* Login server request server data. */ 4 104 2 ls_request_server_event_channel fixed bin (71), /* channel for login server requests */ 4 105 2 ls_request_server_process_id bit (36) aligned, /* process serving login server requests */ 4 106 2 login_server_present bit (1) aligned, /* On IFF a login server request has been processed */ 4 107 4 108 2 entry_pad (28) fixed bin, /* pad to 128 words */ 4 109 2 entry (0 refer (anstbl.current_size)), /* user entries */ 4 110 3 contents (UTE_SIZE) fixed bin; 4 111 4 112 /* constants */ 4 113 4 114 /* values for anstbl.session */ 4 115 4 116 dcl (AT_NORMAL init ("normal "), 4 117 AT_SPECIAL init ("special "), 4 118 AT_SHUTDOWN init ("shutdown")) char (8) internal static options (constant); 4 119 4 120 dcl UTE_SIZE fixed bin internal static initial (300); 4 121 4 122 /* END INCLUDE FILE ... answer_table.incl.pl1 */ 970 971 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 5 2 5 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 5 4 5 5 dcl area_infop ptr; 5 6 5 7 dcl 1 area_info aligned based (area_infop), 5 8 2 version fixed bin, /* version number for this structure is 1 */ 5 9 2 control aligned like area_control, /* control bits for the area */ 5 10 2 owner char (32) unal, /* creator of the area */ 5 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 5 12 2 size fixed bin (18), /* size of the area in words */ 5 13 2 version_of_area fixed bin, /* version of area (returned only) */ 5 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 5 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 5 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 5 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 5 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 5 19 5 20 dcl 1 area_control aligned based, 5 21 2 extend bit (1) unal, /* says area is extensible */ 5 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 5 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 5 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 5 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 5 26 2 system bit (1) unal, /* says area is managed by system */ 5 27 2 pad bit (30) unal; 5 28 5 29 /* END INCLUDE FILE area_info.incl.pl1 */ 971 972 973 dcl 1 auto_area_info aligned automatic like area_info; 974 /* BEGIN INCLUDE FILE ... installation_parms.incl.pl1 */ 6 2 6 3 /* Modified 740723 by PG to add short AIM access names */ 6 4 /* Modified Fall 1977 by T. Casey to add fatal loop and trm_ signal parameters */ 6 5 /* Modified 04/03/78 by CDT to add rcp_init_flags structure */ 6 6 /* Modified May 1978 by T. Casey to add resource timer and resource price list parameters */ 6 7 /* Modified November 1978 by T. Casey for MR7.0, to add absentee control parameters */ 6 8 /* Modified 17 September 1980 by G. Palter to add default absentee queue */ 6 9 /* Modified April 1981 by E. N. Kittlitz for chn_wakeup_error_loop, chn_wakeup_error_count */ 6 10 /* Modified June 1981 by E. N. Kittlitz for nrates/rate_structures UNCA rate_structure support. 6 11* Version, expand foregound_cpu_default_limit and abs_cpu_max_limit to fixed bin (35) fields. 6 12* nrscp & resource array moved from offset 2064 (octal) to 2400 (octal). */ 6 13 /* Modified 1984-06-19 BIM to remove obsolete fields, and add 6 14* strict_trusted_path. */ 6 15 /* Modified 1984-10-24 BIM for default_pdir_quota. */ 6 16 /* Modified 1984-12-05 BIM for require_operator_login. */ 6 17 /* Modified 1985-03-01 by E. Swenson for password flags. */ 6 18 6 19 6 20 /****^ HISTORY COMMENTS: 6 21* 1) change(86-01-27,MSharpe), approve(87-05-25,MCR7690), 6 22* audit(87-03-29,GDixon), install(87-08-04,MR12.1-1056): 6 23* added vchn_requires_accept parameter. 6 24* 2) change(87-02-17,GDixon), approve(87-05-25,MCR7680), 6 25* audit(87-06-02,Parisek), install(87-08-04,MR12.1-1056): 6 26* Correct formatting problems. 6 27* END HISTORY COMMENTS */ 6 28 6 29 6 30 /* NOTE: rate_structure.incl.pl1 uses these declarations */ 6 31 6 32 6 33 dcl 1 installation_parms based (ip) aligned, /* describes installation parameters */ 6 34 2 part_1 like installation_parms_part_1 aligned, 6 35 2 resource (0 refer (installation_parms.nrscp)) like installation_parms_resource_array_part aligned; 6 36 6 37 dcl installation_parms_version_1 fixed bin init (1) static internal options (constant); 6 38 dcl installation_parms_version_2 fixed bin init (2) static internal options (constant); 6 39 6 40 dcl 1 installation_parms_part_1 based aligned, /* Used only by installation_parms and rate_structure */ 6 41 2 installation_id char (32), /* Name printed at dialup and in who */ 6 42 2 company char (64), /* company name */ 6 43 2 department char (64), /* department */ 6 44 2 companyds char (120), /* company, double spaced */ 6 45 2 departmentds char (120), /* dpeartment double spaced */ 6 46 2 shifttab (336) bit (3) unal, /* half-hrs from 0000 Mon, value is shift no */ 6 47 2 cpu_price (0: 7) float bin, /* price for cpu hour, by shift */ 6 48 2 log_base_price (0: 7) float bin, /* price for log hour, by shift */ 6 49 2 io_ops_price (0: 7) float bin, /* price per 1000 terminal io ops */ 6 50 2 core_price (0: 7) float bin, /* price for core page-hour, by shift */ 6 51 2 ndevices fixed bin, /* number of devices to charge */ 6 52 2 devtab (16), /* Maximum 16 */ 6 53 3 device_id char (8), /* Name of device */ 6 54 3 device_price (0: 7) float bin, /* Price by shift */ 6 55 2 inactive_time fixed bin, /* seconds of inactivity permitted */ 6 56 2 warning_time fixed bin, /* seconds from warning to logout */ 6 57 2 login_time fixed bin, /* seconds in which to complete login */ 6 58 2 acct_update fixed bin, /* seconds between acct update */ 6 59 2 login_tries fixed bin, /* number of login tries allowed */ 6 60 2 disk_price float bin, /* disk rate, in $/page-sec */ 6 61 2 registration_price float bin, /* fee per month per user */ 6 62 2 dolsign char (1), /* "dollar sign" */ 6 63 2 abs_cpu_price (4) float bin, /* price for absentee cpu by queue */ 6 64 2 abs_mem_price (4) float bin, /* Absentee memory charge */ 6 65 2 iod_rec_price (4) float bin, /* price for io daemon lines, per K, by queue */ 6 66 2 abs_timax (4) fixed bin (35), /* Absentee TIMAX parameter */ 6 67 2 abs_cpu_default_limit (4) fixed bin (35), /* default absentee cpu limit in seconds (changed from usec.) */ 6 68 2 syserr_log_copy_threshold fixed bin (9), /* Threshold (in PAGES) at which the 6 69* Initializer will copy the syserr_log */ 6 70 2 default_pdir_seg_quota fixed bin (17) unaligned, /* if system and project say 0 */ 6 71 2 default_pdir_dir_quota fixed bin (17) unaligned, /* Always used */ 6 72 2 fatal_error_loop_count fixed bin (17) unaligned, 6 73 2 fatal_error_loop_seconds fixed bin (17) unaligned, 6 74 2 term_real_time_seconds fixed bin (17) unaligned, 6 75 2 term_cpu_time_seconds fixed bin (17) unaligned, 6 76 2 rcp_init_flags like rcp_init_flags aligned, /* one word long */ 6 77 2 rsc_timer_seconds fixed bin (17) unaligned, /* time interval at which to check for resource availability */ 6 78 2 pad_old_fg_cpu_default_limit bit (18) unaligned, 6 79 2 foreground_queue_position fixed bin (17) unal, /* queue that foreground queue comes after */ 6 80 2 idle_time_constant_seconds fixed bin (17) unal, /* how far back to maintain moving average of load */ 6 81 2 sus_cpu_time_seconds fixed bin (17) unal, /* allow suspended process this much cpu time */ 6 82 2 sus_real_time_seconds fixed bin (17) unal, /* and this much real time, before bumping it */ 6 83 2 foreground_cpu_default_limit fixed bin (35), /* default cpu time limit (sec) for foreground absentee jobs */ 6 84 2 access_authorization_ceiling bit (72), /* "System high" access authorization. */ 6 85 2 level_names (0:7) char (32), /* Names for security levels. */ 6 86 2 category_names (18) char (32), /* Names for security categories. */ 6 87 2 short_level_names (0:7) char (8), /* Abbreviated level names. */ 6 88 2 short_category_names (18) char (8), /* Abbreviated category names. */ 6 89 2 ncon fixed bin, /* Number of config elements. */ 6 90 2 cona (51), /* each entry is 5 words long */ 6 91 3 cpu fixed bin (5) unal, /* Number of CPU's */ 6 92 3 shift fixed bin (5) unal, /* Shift number */ 6 93 3 x1 fixed bin (23) unal, 6 94 3 kmem fixed bin (17) unal, /* Memory size */ 6 95 3 kbulk fixed bin (17) unal, /* Bulk store size */ 6 96 3 x2 fixed bin (17) unal, 6 97 3 maxa fixed bin (11) unal, /* Max abs users */ 6 98 3 maxq fixed bin (5) unal, /* Max abs q */ 6 99 3 maxu_base fixed bin (17) unal, 6 100 3 response_high fixed bin (17) unal, 6 101 3 response_low fixed bin (17) unal, 6 102 3 x3 fixed bin (17) unal, 6 103 6 104 /* Absentee control parameters. New for MR7.0 */ 6 105 6 106 2 max_abs (0:7) fixed bin (17) unal, /* per-shift upper limit on abs_maxu */ 6 107 2 min_abs (0:7) fixed bin (17) unal, /* per-shift lower limit on abs_maxu */ 6 108 2 pct_abs (0:7) fixed bin (17) unal, /* abs_maxu is this pct (per-shift) of idle units */ 6 109 6 110 2 max_qres (0:7, 4) fixed bin (17) unal, /* per-shift-and-queue upper limit on reserved slots */ 6 111 2 min_qres (0:7, 4) fixed bin (17) unal, /* per-shift-and-queue lower limit on reserved slots */ 6 112 2 pct_qres (0:7, 4) fixed bin (17) unal, /* reserved slots are these pcts of abs_maxu */ 6 113 6 114 2 abs_cpu_max_limit (0:7, 4) fixed bin (35), /* per-shift-and-queue upper limit (sec) on jobs' cpu times */ 6 115 6 116 2 default_absentee_queue fixed binary (17) unaligned, /* default absentee queue for ear, etc. */ 6 117 6 118 2 chn_wakeup_error_loop_count fixed bin (17) unaligned, /* maximum number of channel wakeups in following interval */ 6 119 2 chn_wakeup_error_loop_seconds fixed bin (17) unaligned, /* works like fatal_error_loop_count/seconds */ 6 120 2 rate_structure_number fixed bin (17) unaligned, /* rate_structure number of this RS */ 6 121 2 version fixed bin (35), /* must be 2 */ 6 122 2 nrates fixed bin, /* number of rate structures */ 6 123 2 rate_structures (0:9) char (32), /* names of rate_structures */ 6 124 2 trusted_path_login bit (1) aligned, /* forbid logout -hold and new_proc -auth */ 6 125 2 require_operator_login bit (1) aligned, /* just what it says */ 6 126 2 operator_inactive_time fixed bin, /* seconds between commands --> not logged in. */ 6 127 2 validate_daemon_commands bit (1) aligned, /* force existence and adequate access to 6 128* mcacs segments for operators */ 6 129 2 password_min_length fixed bin, /* minimum length of passwords */ 6 130 2 password_gpw_length fixed bin, /* length of generated passwords */ 6 131 2 password_change_interval fixed bin, /* number of days until must change */ 6 132 2 password_expiration_interval fixed bin, /* number of days that a password may remain unused */ 6 133 2 vchn_requires_accept bit (1) aligned, /* "login personid -op -vchn foo" must be 6 134* "accepted" by operator if personid is not 6 135* signed on system console */ 6 136 2 end_pad (219) bit (36) aligned, /* leave plenty of pad before the variable length price list */ 6 137 2 nrscp fixed bin; /* length of resource price array; must have offset 2400 (octal), 6 138* or someone miscounted when using part of pad2 */ 6 139 6 140 6 141 /* Entries in the following array may be accessed via system_info_$resource_price. 6 142* This array should not be accessed directly, since its format will change in subsequent releases of Multics. */ 6 143 6 144 dcl 1 installation_parms_resource_array_part (0 refer (installation_parms.nrscp)) based, 6 145 2 name char (32), 6 146 2 price float bin; 6 147 7 1 /* BEGIN INCLUDE FILE ... rcp_init_flags.incl.pl1 */ 7 2 7 3 /* Created on 04/24/78 by Michael R. Jordan */ 7 4 /* Modified 04/10/79 by C. D. Tavares */ 7 5 7 6 dcl rifp ptr; 7 7 7 8 dcl 1 rcp_init_flags based (rifp), 7 9 2 unload_on_detach bit (1) unaligned, /* ON => tape volumes are unloaded after detaching */ 7 10 2 pad1 bit (2) unaligned, /* obsolete */ 7 11 2 resource_mgmt_enabled bit (1) unaligned, /* ON => resource management has been enabled */ 7 12 2 auto_registration bit (1) unaligned, /* ON => auto registration allowed */ 7 13 2 pad2 bit (2) unaligned, /* future expansion, possibly of authentication_level */ 7 14 2 authentication_level fixed bin (2) unaligned unsigned; /* see below for values */ 7 15 7 16 dcl (No_authentication initial (0), 7 17 Nominal_authentication initial (1), 7 18 Automatic_authentication initial (2), 7 19 Manual_authentication initial (3)) fixed bin internal static options (constant); 7 20 7 21 dcl authentication_level_names (0:3) char (12) internal static options (constant) initial 7 22 ("none", "nominal", "automatic", "manual"); 7 23 7 24 /* END INCLUDE FILE ... rcp_init_flags.incl.pl1 */ 6 148 6 149 6 150 /* END INCLUDE FILE ... installation_parms.incl.pl1 */ 974 975 /* BEGIN INCLUDE FILE ... user_table_header.incl.pl1 */ 8 2 8 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 8 4 /* */ 8 5 /* This include file declares the header shared by the answer_table, */ 8 6 /* absentee_user_table and daemon_user_table include files. */ 8 7 /* */ 8 8 /* * * * * * * * * * * * * * * * * * * * * * * * * * */ 8 9 8 10 /****^ HISTORY COMMENTS: 8 11* 1) change(87-04-26,GDixon), approve(87-07-13,MCR7741), 8 12* audit(87-07-16,Brunelle), install(87-08-04,MR12.1-1056): 8 13* Initial coding. 8 14* END HISTORY COMMENTS */ 8 15 8 16 dcl 1 ut_header aligned based, /* header shared by all user control tables. */ 8 17 2 header_version fixed bin, /* version of the header (3) */ 8 18 2 entry_version fixed bin, /* version of user table entries */ 8 19 2 user_table_type fixed bin, /* 1 interactive, 2 absentee, 3 daemon */ 8 20 2 header_length fixed bin, /* length of the header */ 8 21 2 max_size fixed bin, /* max number of entries in this table */ 8 22 2 current_size fixed bin, /* actual size of table (in entries) */ 8 23 2 number_free fixed bin, /* number of free entries in the table. */ 8 24 2 first_free fixed bin, /* index of first entry in the free list. */ 8 25 2 as_procid bit (36), /* process ID of user table manager process */ 8 26 2 ut_header_pad fixed bin; 8 27 8 28 /* END INCLUDE FILE ... user_table_header.incl.pl1 */ 975 976 977 978 end up_rtdt_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/04/87 1221.8 up_rtdt_.pl1 >special_ldd>install>MR12.1-1054>up_rtdt_.pl1 121 1 11/20/79 2015.6 rtdt.incl.pl1 >ldd>include>rtdt.incl.pl1 1-4 2 04/21/82 1211.8 author.incl.pl1 >ldd>include>author.incl.pl1 969 3 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 970 4 08/04/87 1210.2 answer_table.incl.pl1 >spec>install>1056>answer_table.incl.pl1 971 5 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 974 6 08/04/87 1140.0 installation_parms.incl.pl1 >spec>install>1056>installation_parms.incl.pl1 6-148 7 11/21/79 1458.3 rcp_init_flags.incl.pl1 >ldd>include>rcp_init_flags.incl.pl1 975 8 08/04/87 1138.0 user_table_header.incl.pl1 >spec>install>1056>user_table_header.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. N_CHARGE_TYPES 001135 automatic fixed bin(17,0) dcl 1-64 set ref 711* 712 712 N_MATES 001133 automatic fixed bin(17,0) dcl 1-64 set ref 262* 265 265 678* 681 681 N_SUBTYPES 001134 automatic fixed bin(17,0) dcl 1-64 set ref 263* 265 265 679* 681 681 P_ansp parameter pointer dcl 41 ref 13 155 RTDT_area_len 001136 automatic fixed bin(18,0) dcl 1-64 set ref 215* 216* 216 222 RTDT_version_2 constant fixed bin(17,0) initial dcl 1-64 ref 179 306 RTDT_version_3 constant fixed bin(17,0) initial dcl 1-64 ref 179 317 686 RW_ACCESS constant bit(3) initial unaligned dcl 3-11 ref 187 187 TYPE_AND_LOG_MSG 000101 constant fixed bin(17,0) initial dcl 87 set ref 276* 282* 286* 290* 294* 298* 302* 306* 311* 364* 404* 417* 451* 458* 475* 497* 550* 553* 556* 559* 578* 581* 584* 597* 769* 824* TYPE_AND_LOG_MSG_WITH_BANNER 000077 constant fixed bin(17,0) initial dcl 87 set ref 762* 779* 795* 803* 808* 831* acl_area 000172 automatic area(300) dcl 98 set ref 98* 734 734 acl_count 000650 automatic fixed bin(17,0) dcl 100 set ref 734* 740* acl_ptr 000646 automatic pointer dcl 99 set ref 734* 740* aclb 001044 automatic structure array level 1 dcl 113 set ref 730 730 acs_name 000000 constant char(32) initial unaligned dcl 84 set ref 186* addition_pending 61(03) based bit(1) level 4 packed unaligned dcl 135 set ref 322* 335* 700* 753 758* addr builtin function dcl 78 ref 223 225 225 716 730 730 734 734 advance_notice_time 63 based fixed bin(17,0) level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 298 298* 302 302* advance_notice_time 63 based fixed bin(17,0) level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" set ref 298 298* 302 302* aim_range 5 parameter bit(72) array level 2 in structure "new_defaults" dcl 543 in procedure "check_subtype" set ref 591* aim_range 5 parameter bit(72) array level 2 in structure "old_defaults" dcl 541 in procedure "check_subtype" ref 584 584 aim_range 5 parameter bit(72) array level 2 in structure "upd_defaults" dcl 542 in procedure "check_subtype" ref 584 584 591 aim_range_given 0(02) parameter bit(1) level 3 in structure "old_defaults" packed unaligned dcl 541 in procedure "check_subtype" ref 556 584 aim_range_given 0(02) parameter bit(1) level 3 in structure "upd_defaults" packed unaligned dcl 542 in procedure "check_subtype" set ref 556 556* 584 ansp 002630 automatic pointer initial dcl 4-53 set ref 155* 156 161 4-53* anstbl based structure level 1 dcl 4-55 answer parameter char unaligned dcl 44 set ref 13 176* 180* 188* 201* 227* 270* 272* 391* 567* 662* 736* 742* 764* 781* 796* 804* area_control based structure level 1 dcl 5-20 area_info based structure level 1 dcl 5-7 area_info_version_1 constant fixed bin(17,0) initial dcl 5-3 ref 219 areap 16 002632 automatic pointer level 2 dcl 973 set ref 223* as_procid 10 based bit(36) level 3 dcl 4-55 ref 156 attribute_names 102 based char(12) array level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" set ref 349 358 364* 385 attribute_names 102 based char(12) array level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 358 385 396 417* attribute_names 102 based char(12) array level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 349* 396* 404* attributes 3 parameter bit(72) level 2 in structure "old_defaults" dcl 541 in procedure "check_subtype" ref 581 attributes based bit(72) array level 4 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 513* attributes 3 parameter bit(72) level 2 in structure "upd_defaults" dcl 542 in procedure "check_subtype" set ref 573 575* attributes 3 parameter bit(72) level 2 in structure "new_defaults" dcl 543 in procedure "check_subtype" set ref 575* 581 attributes based bit(72) array level 4 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 513* attributes_given 0(01) parameter bit(1) level 3 in structure "upd_defaults" packed unaligned dcl 542 in procedure "check_subtype" set ref 553 553* attributes_given 0(01) parameter bit(1) level 3 in structure "old_defaults" packed unaligned dcl 541 in procedure "check_subtype" ref 553 attributes_to_match 100 based bit(72) level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" ref 348 attributes_to_match 100 based bit(72) level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 348* 397* 415 423* attributes_to_match 100 based bit(72) level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" ref 397 415 417 417 423 attributes_valid 76 based bit(72) level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" ref 346 566 573 attributes_valid 76 based bit(72) level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" ref 347 356 attributes_valid 76 based bit(72) level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 347* 368* 402* author based structure level 2 in structure "new_rtdt" dcl 125 in procedure "up_rtdt_" set ref 207* author based structure level 2 in structure "upd_rtdt" dcl 126 in procedure "up_rtdt_" ref 207 auto_area_info 002632 automatic structure level 1 dcl 973 set ref 218* 225 225 auto_ctt 001166 automatic structure level 1 dcl 151 auto_upd_attributes_valid 001032 automatic bit(72) dcl 105 set ref 346* 358 371* 382 383 403* binary builtin function dcl 78 ref 716 bitcount 000661 automatic fixed bin(24,0) dcl 102 set ref 716* 718* canon_proc_name parameter char dcl 652 ref 650 657 658 658 662 charge_type 613 based fixed bin(17,0) level 4 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 689 charge_type based fixed bin(17,0) array level 4 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 515* 694* charge_type 11 parameter fixed bin(17,0) level 2 in structure "upd_defaults" dcl 542 in procedure "check_subtype" ref 593 charge_type based fixed bin(17,0) array level 4 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 515 694 charge_type 613 based fixed bin(17,0) level 4 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 689* charge_type 11 parameter fixed bin(17,0) level 2 in structure "new_defaults" dcl 543 in procedure "check_subtype" set ref 603* charge_type 11 parameter fixed bin(17,0) level 2 in structure "old_defaults" dcl 541 in procedure "check_subtype" ref 597 charge_type_given 0(03) parameter bit(1) level 3 in structure "upd_defaults" packed unaligned dcl 542 in procedure "check_subtype" set ref 559 559* 593 597 charge_type_given 0(03) parameter bit(1) level 3 in structure "old_defaults" packed unaligned dcl 541 in procedure "check_subtype" ref 559 597 charge_type_table based structure level 1 dcl 1-11 set ref 712 charge_type_table_ptr 37 based offset level 2 in structure "upd_rtdt" dcl 126 in procedure "up_rtdt_" ref 235 charge_type_table_ptr 37 based offset level 2 in structure "old_rtdt" dcl 124 in procedure "up_rtdt_" ref 242 charge_type_table_ptr 37 based offset level 2 in structure "new_rtdt" dcl 125 in procedure "up_rtdt_" set ref 211* 714* charge_types 1 001166 automatic char(32) array level 2 in structure "auto_ctt" dcl 151 in procedure "up_rtdt_" set ref 634 640* 713 charge_types 1 based char(32) array level 2 in structure "charge_type_table" dcl 1-11 in procedure "up_rtdt_" set ref 515* 593 597 689* 694* 713* cleanup 000100 stack reference condition dcl 80 ref 197 clock builtin function dcl 78 ref 208 code parameter fixed bin(35,0) dcl 43 set ref 13 164* 171* 172 186* 187 199* 200 225* 226 658* 660 718* 719* 720* 730* 734* 735 740* 741 760* 761 762* 777* 778 779* 793* 794 795* 801* 802 803* 807* 808 808* 829* 830 831* 842* 849* control 1 002632 automatic structure level 2 dcl 973 cttp 001142 automatic pointer dcl 1-70 set ref 712* 713 714 716 cu_$level_get 000050 constant entry external dcl 64 ref 185 cv_entry_ 000076 constant entry external dcl 654 ref 658 debug_sw 000010 internal static bit(1) initial dcl 85 set ref 280 364 404 417 446 475 497 549 577 597 962* 966* default_flags parameter structure level 2 in structure "new_defaults" dcl 543 in procedure "check_subtype" set ref 564* default_flags parameter structure level 2 in structure "upd_defaults" dcl 542 in procedure "check_subtype" set ref 564 default_flags parameter structure level 2 in structure "old_defaults" dcl 541 in procedure "check_subtype" default_time 62 based fixed bin(17,0) level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" set ref 290 290* default_time 62 based fixed bin(17,0) level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 290 290* define_area_ 000012 constant entry external dcl 49 ref 225 deletion_pending 61(04) based bit(1) level 4 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" set ref 248* 531* 822 837* deletion_pending 61(04) based bit(1) level 4 in structure "new_rtde" packed unaligned dcl 135 in procedure "up_rtdt_" set ref 322* delthru_ptr 001164 automatic pointer dcl 149 set ref 160* 205* 855 856* 857* dont_free 1(03) 002632 automatic bit(1) level 3 packed unaligned dcl 973 set ref 220* empty builtin function dcl 78 ref 98 entrypt 003276 automatic entry variable dcl 654 set ref 658* error_table_$action_not_performed 000064 external static fixed bin(35,0) dcl 71 ref 849 exclusion_specs 432 based bit(72) array level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" ref 436 exclusion_specs 432 based bit(72) array level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 431* 436* first_resource 40 based offset level 2 in structure "old_rtdt" dcl 124 in procedure "up_rtdt_" ref 244 817 first_resource 40 based offset level 2 in structure "new_rtdt" dcl 125 in procedure "up_rtdt_" set ref 211* 523* 703* 749 first_resource 40 based offset level 2 in structure "upd_rtdt" dcl 126 in procedure "up_rtdt_" ref 254 672 fixed_info based structure level 2 in structure "rtde" dcl 1-16 in procedure "up_rtdt_" fixed_info based structure level 2 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" fixed_info based structure level 2 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 320* fixed_info based structure level 2 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 320 flags 61 based structure level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" flags 61 based structure level 3 in structure "new_rtde" packed unaligned dcl 135 in procedure "up_rtdt_" flags 61 based structure level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" flagword based fixed bin(35,0) level 2 dcl 1-11 set ref 716 get_group_id_ 000034 constant entry external dcl 58 ref 723 get_process_id_ 000032 constant entry external dcl 57 ref 156 get_ring_ 000014 constant entry external dcl 50 ref 167 172 hbound builtin function dcl 78 ref 390 hcs_$chname_file 000020 constant entry external dcl 52 ref 793 801 807 hcs_$delentry_seg 000022 constant entry external dcl 53 ref 857 hcs_$get_ring_brackets 000024 constant entry external dcl 54 ref 171 hcs_$initiate 000054 constant entry external dcl 66 ref 164 hcs_$list_acl 000040 constant entry external dcl 60 ref 734 hcs_$make_seg 000052 constant entry external dcl 65 ref 199 hcs_$replace_acl 000036 constant entry external dcl 59 ref 730 740 hcs_$set_bc 000046 constant entry external dcl 63 ref 718 hcs_$set_ring_brackets 000026 constant entry external dcl 55 ref 720 hcs_$set_safety_sw 000042 constant entry external dcl 61 ref 719 hcs_$set_safety_sw_seg 000044 constant entry external dcl 62 ref 856 header based structure level 2 dcl 4-55 i 003256 automatic fixed bin(17,0) dcl 612 in procedure "normalize_attributes" set ref 616* 617 618* i 003266 automatic fixed bin(17,0) dcl 632 in procedure "normalize_charge_type" set ref 634* 634* 638 639 640 643 i 000106 automatic fixed bin(17,0) dcl 95 in procedure "up_rtdt_" set ref 354* 356 358 364 368 373* 385* 385* 389 390 395* 396 397 398 401 402 404 414* 415 415 423 429* 431 436 436* 447* 448 451* 469* 471 475 487* 693* 694 694* index builtin function dcl 78 ref 383 instaldir parameter char unaligned dcl 44 set ref 13 161* 162 164* 171* 199* 718* 719* 720* 730* 734* 740* 793* 801* 807* installation_parms based structure level 1 dcl 6-33 installation_parms_part_1 based structure level 1 dcl 6-40 installation_parms_resource_array_part based structure array level 1 unaligned dcl 6-144 installed_under_resource_mgt 36 based bit(1) level 2 in structure "new_rtdt" dcl 125 in procedure "up_rtdt_" set ref 213* installed_under_resource_mgt 36 based bit(1) level 2 in structure "old_rtdt" dcl 124 in procedure "up_rtdt_" ref 335 instalname parameter char unaligned dcl 44 set ref 13 163* 164* 171* 734* 791* 793* 793* 801* 807* instalp parameter pointer dcl 41 set ref 13 159* 844* ioa_$rsnnl 000062 constant entry external dcl 69 ref 484 791 ip parameter pointer dcl 41 ref 13 213 335 755 775 827 is_synonym 61(05) based bit(1) level 4 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" ref 276 827 is_synonym 61(05) based bit(1) level 4 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 276 276* 280 is_synonym 61(05) based bit(1) level 4 in structure "new_rtde" packed unaligned dcl 135 in procedure "up_rtdt_" set ref 324 685 755 775 is_volume 61(01) based bit(1) level 4 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" ref 269 is_volume 61(01) based bit(1) level 4 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" ref 269 270 j 003257 automatic fixed bin(17,0) dcl 612 in procedure "normalize_attributes" set ref 617* 618 618 j 000107 automatic fixed bin(17,0) dcl 95 in procedure "up_rtdt_" set ref 358* 358 358* 363 371 373 383* 385 396 397 401 403 413* 414 415 417 417 417 423* 434* 436 436 436* 448* 448* 451 454 457* 458 458* 471* 471* 475 483 483 484 487 487 491 495* 496 497 508 508 509 509 511 511 513 513 515 515* last_install_time 12 based fixed bin(71,0) level 3 dcl 125 set ref 208* last_rtdep 001144 automatic pointer dcl 149 set ref 231* 523 525 527* 703 705 707* length builtin function dcl 78 ref 616 lock 10 based bit(36) level 3 dcl 125 set ref 209* manual_clear 61(02) based bit(1) level 4 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 282 282* manual_clear 61(02) based bit(1) level 4 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" set ref 282 282* mates 624 based char(32) array level 2 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 444 448 454* 458 458* mates 624 based char(32) array level 2 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 444* mates 624 based char(32) array level 2 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" set ref 448 451* max_time 62(18) based fixed bin(17,0) level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" set ref 294 294* max_time 62(18) based fixed bin(17,0) level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 294 294* mode 10 001044 automatic bit(36) array level 2 in structure "aclb" dcl 113 in procedure "up_rtdt_" set ref 724* 726* 728* mode 001040 automatic bit(36) dcl 110 in procedure "up_rtdt_" set ref 186* 187 n_charge_types based fixed bin(17,0) level 2 in structure "charge_type_table" dcl 1-11 in procedure "up_rtdt_" set ref 712* 713 716 n_charge_types 001166 automatic fixed bin(17,0) level 2 in structure "auto_ctt" dcl 151 in procedure "up_rtdt_" set ref 233* 634 638 639* 711 n_defined_attributes 65(18) based fixed bin(17,0) level 3 in structure "new_rtde" packed unaligned dcl 135 in procedure "up_rtdt_" set ref 350* 395 398* n_defined_attributes 65(18) based fixed bin(17,0) level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" ref 358 363 413 434 n_defined_attributes 65(18) based fixed bin(17,0) level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" ref 350 354 385 389 n_exclusion_specs 64 based fixed bin(17,0) level 3 packed unaligned dcl 142 ref 429 n_mates 64(18) based fixed bin(17,0) level 3 in structure "new_rtde" packed unaligned dcl 135 in procedure "up_rtdt_" set ref 265* 444 483 487 508 509 511 513 515 681* 683 694 n_mates 64(18) based fixed bin(17,0) level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" ref 262 444 448 451 457 471 483 484 487 491 496 497 508 509 511 513 515 678 683 694 n_mates 64(18) based fixed bin(17,0) level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" ref 447 471 475 487 n_subtypes 65 based fixed bin(17,0) level 3 in structure "new_rtde" packed unaligned dcl 135 in procedure "up_rtdt_" set ref 265* 681* 683 n_subtypes 65 based fixed bin(17,0) level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 263 311 311* 471 475 495 679 683 693 n_subtypes 65 based fixed bin(17,0) level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" set ref 311 311* 469 name 1 based char(32) level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 404* 762* 764 769* 779* 781 name parameter char dcl 545 in procedure "check_subtype" set ref 539 550* 553* 556* 559* 578* 581* 584* 597* name 1 based char(32) level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" set ref 258 270 272 276* 282* 286* 290* 294* 298* 302* 306* 311* 364* 391 451* 466* 475* 824* 829* 831* name 1 based char(32) level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 258 417* 458* 484* 497* new_attributes parameter bit(72) dcl 610 set ref 608 614* 618* new_charge_type 003240 automatic char(32) dcl 547 set ref 593* 595* 597 603* new_defaults parameter structure level 1 dcl 543 set ref 539 new_rtde based structure level 1 dcl 135 set ref 265 681 683* new_rtdep 001152 automatic pointer dcl 149 set ref 265* 320 321 322 322 324 335 347 348 349 350 368 395 396 397 398 402 404 404 415 423 431 436 444 466 483 487 508 509 511 513 515 523 525 527 681* 683 685 689 694 700 701 703 705 707 749* 749* 753 755 758 760* 762 764 769 775 777* 779 781* 786 new_rtdt based structure level 1 dcl 125 new_rtdtp 001150 automatic pointer dcl 149 set ref 199* 205 207 208 209 210 211 211 213 223 265 523 523 525 681 703 703 705 712 714 714 749 749 786 newname 000162 automatic char(32) unaligned dcl 97 set ref 791* 793* 807* 807* next_resource based offset level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" ref 533 839 next_resource based offset level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" ref 529 709 next_resource based offset level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 321* 701* 786 next_resource based offset level 3 in structure "rtde" dcl 1-16 in procedure "up_rtdt_" set ref 525* 705* no_freeing 1(04) 002632 automatic bit(1) level 3 packed unaligned dcl 973 set ref 220* no_prev_table 001035 automatic bit(1) unaligned dcl 107 set ref 166* 170* 184 240 722 790 806 817 not_found 001034 automatic bit(1) dcl 106 set ref 251* 254 260* 531 null builtin function dcl 78 ref 158 159 160 165 231 244 254 523 672 703 734 734 749 817 4-53 658 658 855 nullo builtin function dcl 78 ref 211 321 701 offset builtin function dcl 78 ref 523 525 703 705 714 old_cttp 001160 automatic pointer dcl 149 set ref 231* 242* 597 old_defaults parameter structure level 1 dcl 541 ref 539 old_rtde based structure level 1 dcl 128 old_rtdep 001156 automatic pointer dcl 149 set ref 244* 244* 248 250 258 269 270 270 272 276 276 282 282 282 286 286 286 290 290 290 294 294 294 298 298 298 302 302 302 306 306 306 311 311 311 347 348 349 350 354 356 358 364 364 385 385 389 391 447 448 451 451 466 466 469 471 475 475 487 531* 533 817* 817* 822 824 827 829 831 837* 839 old_rtdt based structure level 1 dcl 124 old_rtdtp 001154 automatic pointer dcl 149 set ref 164* 165 242 242 244 244 306 335 533 817 817 839 844 owner 2 002632 automatic char(32) level 2 packed unaligned dcl 973 set ref 221* part_1 based structure level 2 dcl 6-33 pointer builtin function dcl 78 ref 235 242 244 254 529 533 672 709 749 786 817 839 potential_attributes based bit(72) array level 4 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 509* 511* potential_attributes 1 parameter bit(72) level 2 in structure "upd_defaults" dcl 542 in procedure "check_subtype" set ref 566 571* potential_attributes based bit(72) array level 4 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 509* 511* potential_attributes 1 parameter bit(72) level 2 in structure "old_defaults" dcl 541 in procedure "check_subtype" ref 578 potential_attributes 1 parameter bit(72) level 2 in structure "new_defaults" dcl 543 in procedure "check_subtype" set ref 571* 578 potential_attributes_given parameter bit(1) level 3 in structure "old_defaults" packed unaligned dcl 541 in procedure "check_subtype" ref 550 potential_attributes_given parameter bit(1) level 3 in structure "upd_defaults" packed unaligned dcl 542 in procedure "check_subtype" set ref 550 550* precanon_proc 21 based char(64) level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 306 306* 317* 686* precanon_proc 21 based char(64) level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" set ref 306 306* proc_group_id based char(32) level 3 dcl 126 ref 186 process_limit 61(18) based fixed bin(17,0) level 3 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 286 286* process_limit 61(18) based fixed bin(17,0) level 3 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" set ref 286 286* rcp_init_flags 541 based structure level 3 in structure "installation_parms" dcl 6-33 in procedure "up_rtdt_" rcp_init_flags based structure level 1 packed unaligned dcl 7-8 in procedure "up_rtdt_" rcp_sys_$create_registry 000070 constant entry external dcl 74 ref 760 rcp_sys_$remove_registry 000074 constant entry external dcl 74 ref 829 rcp_sys_$update_registry_header 000072 constant entry external dcl 74 ref 777 registration_defaults 602 based structure level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 466* registration_defaults 602 based structure level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" set ref 466* registration_defaults 602 based structure level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 466* registration_defaults 602 based structure level 3 in structure "rtde" dcl 1-16 in procedure "up_rtdt_" registry_dir 000110 automatic char(168) dcl 96 set ref 162* 760* 777* 829* rel builtin function dcl 78 ref 716 resource_mgmt_enabled 541(03) based bit(1) level 4 packed unaligned dcl 6-33 ref 213 335 755 775 827 ring 001037 automatic fixed bin(17,0) dcl 109 set ref 185* 186* rpad 11 001044 automatic bit(36) initial array level 2 dcl 113 set ref 113* 113* 113* 113* 113* rtde based structure level 1 dcl 1-16 rtdt based structure level 1 dcl 1-3 ref 216 rtdt_area 42 based area level 2 in structure "new_rtdt" dcl 125 in procedure "up_rtdt_" set ref 223 265 523 525 681 703 705 712 714 749 786 rtdt_area 42 based area level 2 in structure "upd_rtdt" dcl 126 in procedure "up_rtdt_" ref 235 254 529 672 709 rtdt_area 42 based area level 2 in structure "old_rtdt" dcl 124 in procedure "up_rtdt_" ref 242 244 533 817 839 rtdt_rings 001041 automatic fixed bin(3,0) array dcl 111 set ref 167* 171* 172* 720* rtdtp 001140 automatic pointer dcl 1-70 set ref 158* 216 rtrim builtin function dcl 78 ref 162 658 658 size builtin function dcl 78 in procedure "up_rtdt_" ref 216 size 13 002632 automatic fixed bin(18,0) level 2 in structure "auto_area_info" dcl 973 in procedure "up_rtdt_" set ref 222* string builtin function dcl 78 set ref 564* 564 substr builtin function dcl 78 set ref 356 358 368* 371* 397* 397 402* 403* 415 415 417 417 423* 423 436* 436 618* 618 subtype_defaults based structure array level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 487* subtype_defaults based structure array level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" set ref 487* subtype_defaults based structure array level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 487* subtype_name based char(32) array level 3 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 471 483 484* 491* 496 497* subtype_name based char(32) array level 3 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 483* subtype_name based char(32) array level 3 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" set ref 471 475* subtypes based structure array level 2 in structure "new_rtde" dcl 135 in procedure "up_rtdt_" set ref 508* subtypes based structure array level 2 in structure "upd_rtde" dcl 142 in procedure "up_rtdt_" set ref 508 subtypes based structure array level 2 in structure "old_rtde" dcl 128 in procedure "up_rtdt_" syacn 001036 automatic fixed bin(17,0) initial dcl 108 set ref 108* 725 726 727 728 729* 729 730* sys_info$max_seg_size 000066 external static fixed bin(35,0) dcl 72 ref 216 sys_log_ 000056 constant entry external dcl 67 ref 276 282 286 290 294 298 302 306 311 364 404 417 451 458 475 497 550 553 556 559 578 581 584 597 769 824 sys_log_$error_log 000060 constant entry external dcl 68 ref 762 779 795 803 808 831 sysdir 22 based char(64) level 2 packed unaligned dcl 4-55 ref 161 tempstring 000662 automatic char(128) dcl 103 set ref 484* 487* type_name parameter char(32) dcl 629 ref 627 634 640 type_num parameter fixed bin(17,0) dcl 629 set ref 627 643* unique_chars_ 000016 constant entry external dcl 51 ref 195 unique_name 000651 automatic char(32) unaligned dcl 101 set ref 195* 199* 718* 719* 720* 730* 740* 791* 801* 801* unspec builtin function dcl 78 set ref 218* 320* 320 444* 444 508* 508 683* 683 713* 713 up_sysctl_$check_acs 000030 constant entry external dcl 56 ref 186 upd_attributes parameter bit(72) dcl 610 ref 608 616 618 upd_cttp 001162 automatic pointer dcl 149 set ref 235* 515 593 689 694 upd_defaults parameter structure level 1 dcl 542 set ref 539 upd_rtde based structure level 1 dcl 142 set ref 683 upd_rtdep 001146 automatic pointer dcl 149 set ref 254* 254* 258 258 262 263 269 276 276 280 282 282 286 286 290 290 294 294 298 298 302 302 306 306 311 311 317 320 325 346 358 358 363 385 396 397 413 415 417 417 417 417 423 429 434 436 444 448 448 451 454 457 458 458 458 466 471 471 475 483 484 484 487 491 495 496 497 497 508 509 511 513 515 521* 529 566 573 672* 672* 676 678 679 683 686 689 693 694* 709 upd_rtdt based structure level 1 dcl 126 upd_rtdtp parameter pointer dcl 41 ref 13 179 179 186 207 210 235 235 254 254 317 529 672 672 686 709 upd_to_new 000722 automatic fixed bin(17,0) array dcl 104 set ref 252* 373* 390 401* 414 436 436 617 userid 001044 automatic char(32) array level 2 dcl 113 set ref 723* 725* 727* ut_header based structure level 1 dcl 8-16 valid 61 based bit(1) level 4 in structure "old_rtde" packed unaligned dcl 128 in procedure "up_rtdt_" ref 250 valid 61 based bit(1) level 4 in structure "upd_rtde" packed unaligned dcl 142 in procedure "up_rtdt_" set ref 258 325* 521* 676 version 35 based fixed bin(17,0) level 2 in structure "upd_rtdt" dcl 126 in procedure "up_rtdt_" ref 179 179 210 317 686 version 35 based fixed bin(17,0) level 2 in structure "old_rtdt" dcl 124 in procedure "up_rtdt_" ref 306 version 35 based fixed bin(17,0) level 2 in structure "new_rtdt" dcl 125 in procedure "up_rtdt_" set ref 210* version 002632 automatic fixed bin(17,0) level 2 in structure "auto_area_info" dcl 973 in procedure "up_rtdt_" set ref 219* wordcount parameter fixed bin(17,0) dcl 42 ref 13 175 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ANSTBL_version_4 internal static fixed bin(17,0) initial dcl 4-51 AT_NORMAL internal static char(8) initial unaligned dcl 4-116 AT_SHUTDOWN internal static char(8) initial unaligned dcl 4-116 AT_SPECIAL internal static char(8) initial unaligned dcl 4-116 A_ACCESS internal static bit(3) initial unaligned dcl 3-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 Automatic_authentication internal static fixed bin(17,0) initial dcl 7-16 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 3-33 E_ACCESS internal static bit(3) initial unaligned dcl 3-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 M_ACCESS internal static bit(3) initial unaligned dcl 3-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 Manual_authentication internal static fixed bin(17,0) initial dcl 7-16 N_ACCESS internal static bit(3) initial unaligned dcl 3-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 No_authentication internal static fixed bin(17,0) initial dcl 7-16 Nominal_authentication internal static fixed bin(17,0) initial dcl 7-16 REW_ACCESS internal static bit(3) initial unaligned dcl 3-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 RE_ACCESS internal static bit(3) initial unaligned dcl 3-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 R_ACCESS internal static bit(3) initial unaligned dcl 3-11 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SA_ACCESS internal static bit(3) initial unaligned dcl 3-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 3-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 3-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 SM_ACCESS internal static bit(3) initial unaligned dcl 3-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 S_ACCESS internal static bit(3) initial unaligned dcl 3-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 UTE_SIZE internal static fixed bin(17,0) initial dcl 4-120 W_ACCESS internal static bit(3) initial unaligned dcl 3-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 3-36 area_infop automatic pointer dcl 5-5 authentication_level_names internal static char(12) initial array unaligned dcl 7-21 installation_parms_version_1 internal static fixed bin(17,0) initial dcl 6-37 installation_parms_version_2 internal static fixed bin(17,0) initial dcl 6-38 rifp automatic pointer dcl 7-6 rtdep automatic pointer dcl 1-70 NAMES DECLARED BY EXPLICIT CONTEXT. check_canon_proc 007646 constant entry internal dcl 650 ref 317 686 check_subtype 006707 constant entry internal dcl 539 ref 466 487 clean_up 007767 constant entry internal dcl 854 ref 197 852 debug_rtdt_off 006676 constant entry external dcl 965 debug_rtdt_on 006663 constant entry external dcl 961 invalid_atts 007222 constant label dcl 567 ref 573 normalize_attributes 007553 constant entry internal dcl 608 ref 509 511 513 571 575 normalize_charge_type 007604 constant entry internal dcl 627 ref 515 603 689 694 rtdt_error 006651 constant label dcl 849 ref 177 181 189 202 228 273 392 568 663 737 743 765 782 797 811 833 skip_validation 004712 constant label dcl 523 ref 326 up_rtdt_ 001030 constant entry external dcl 13 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 10422 10522 10035 10432 Length 11154 10035 100 415 365 2 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME up_rtdt_ 1928 external procedure is an external procedure. on unit on line 197 64 on unit check_subtype internal procedure shares stack frame of external procedure up_rtdt_. normalize_attributes internal procedure shares stack frame of external procedure up_rtdt_. normalize_charge_type internal procedure shares stack frame of external procedure up_rtdt_. check_canon_proc internal procedure shares stack frame of external procedure up_rtdt_. clean_up 74 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 debug_sw up_rtdt_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME up_rtdt_ 000106 i up_rtdt_ 000107 j up_rtdt_ 000110 registry_dir up_rtdt_ 000162 newname up_rtdt_ 000172 acl_area up_rtdt_ 000646 acl_ptr up_rtdt_ 000650 acl_count up_rtdt_ 000651 unique_name up_rtdt_ 000661 bitcount up_rtdt_ 000662 tempstring up_rtdt_ 000722 upd_to_new up_rtdt_ 001032 auto_upd_attributes_valid up_rtdt_ 001034 not_found up_rtdt_ 001035 no_prev_table up_rtdt_ 001036 syacn up_rtdt_ 001037 ring up_rtdt_ 001040 mode up_rtdt_ 001041 rtdt_rings up_rtdt_ 001044 aclb up_rtdt_ 001133 N_MATES up_rtdt_ 001134 N_SUBTYPES up_rtdt_ 001135 N_CHARGE_TYPES up_rtdt_ 001136 RTDT_area_len up_rtdt_ 001140 rtdtp up_rtdt_ 001142 cttp up_rtdt_ 001144 last_rtdep up_rtdt_ 001146 upd_rtdep up_rtdt_ 001150 new_rtdtp up_rtdt_ 001152 new_rtdep up_rtdt_ 001154 old_rtdtp up_rtdt_ 001156 old_rtdep up_rtdt_ 001160 old_cttp up_rtdt_ 001162 upd_cttp up_rtdt_ 001164 delthru_ptr up_rtdt_ 001166 auto_ctt up_rtdt_ 002630 ansp up_rtdt_ 002632 auto_area_info up_rtdt_ 003240 new_charge_type check_subtype 003256 i normalize_attributes 003257 j normalize_attributes 003266 i normalize_charge_type 003276 entrypt check_canon_proc THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc call_ext_out call_int_this call_int_other return_mac mpfx2 enable_op shorten_stack ext_entry ext_entry_desc int_entry pointer_hard offset_hard index_bs_1_eis op_alloc_ op_empty_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$level_get cv_entry_ define_area_ get_group_id_ get_process_id_ get_ring_ hcs_$chname_file hcs_$delentry_seg hcs_$get_ring_brackets hcs_$initiate hcs_$list_acl hcs_$make_seg hcs_$replace_acl hcs_$set_bc hcs_$set_ring_brackets hcs_$set_safety_sw hcs_$set_safety_sw_seg ioa_$rsnnl rcp_sys_$create_registry rcp_sys_$remove_registry rcp_sys_$update_registry_header sys_log_ sys_log_$error_log unique_chars_ up_sysctl_$check_acs THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 98 000763 108 000766 113 000770 4 53 001015 13 001021 155 001056 156 001062 158 001075 159 001077 160 001101 161 001102 162 001107 163 001135 164 001143 165 001207 166 001213 167 001215 168 001235 170 001236 171 001237 172 001266 175 001311 176 001315 177 001322 179 001323 180 001332 181 001337 184 001340 185 001342 186 001351 187 001410 188 001417 189 001424 195 001425 197 001445 199 001467 200 001530 201 001533 202 001540 205 001541 207 001543 208 001550 209 001552 210 001553 211 001555 213 001560 215 001567 216 001570 218 001602 219 001605 220 001607 221 001613 222 001616 223 001620 225 001622 226 001634 227 001637 228 001644 231 001645 233 001650 235 001651 240 001657 242 001661 244 001666 248 001676 250 001701 251 001704 252 001706 254 001716 258 001734 260 001745 262 001746 263 001752 265 001755 269 001776 270 002011 272 002032 273 002051 276 002053 280 002116 282 002125 286 002205 290 002266 294 002342 298 002421 302 002474 306 002547 311 002624 317 002701 320 002720 321 002725 322 002727 324 002733 325 002736 326 002740 335 002741 346 002754 347 002760 348 002765 349 002771 350 002774 354 002776 356 003007 358 003014 361 003047 363 003051 364 003057 368 003114 369 003121 371 003122 373 003126 376 003130 382 003132 383 003134 385 003141 387 003167 389 003171 390 003177 391 003202 392 003220 395 003222 396 003230 397 003244 398 003251 401 003253 402 003256 403 003262 404 003265 408 003320 413 003321 414 003333 415 003335 417 003345 423 003411 425 003420 429 003422 431 003433 434 003441 436 003453 439 003475 440 003477 444 003501 446 003522 447 003525 448 003537 449 003565 451 003567 454 003633 455 003641 457 003643 458 003655 461 003720 466 003722 469 003747 471 003761 473 004025 475 004027 479 004102 483 004103 484 004131 487 004172 491 004410 493 004426 495 004430 496 004441 497 004457 508 004514 509 004545 511 004564 513 004616 515 004650 519 004705 521 004707 523 004712 525 004724 527 004731 529 004733 531 004743 533 004750 672 004756 676 004772 678 004776 679 005002 681 005005 683 005026 685 005062 686 005065 689 005103 693 005120 694 005131 697 005165 700 005167 701 005172 703 005174 705 005206 707 005213 709 005214 711 005224 712 005226 713 005240 714 005246 716 005253 718 005266 719 005316 720 005347 722 005376 723 005400 724 005412 725 005414 726 005422 727 005424 728 005430 729 005431 730 005433 731 005476 734 005477 735 005544 736 005547 737 005554 740 005555 741 005615 742 005620 743 005625 749 005626 753 005640 755 005644 758 005655 760 005657 761 005700 762 005703 764 005743 765 005762 769 005764 771 006011 775 006012 777 006023 778 006044 779 006047 781 006107 782 006126 786 006130 790 006136 791 006140 793 006175 794 006230 795 006233 796 006271 797 006277 801 006300 802 006331 803 006334 804 006372 806 006400 807 006402 808 006432 811 006470 817 006471 822 006504 824 006510 827 006534 829 006546 830 006567 831 006572 833 006632 837 006633 839 006636 842 006644 844 006646 847 006650 849 006651 852 006655 861 006661 961 006662 962 006671 963 006674 965 006675 966 006704 967 006706 539 006707 549 006720 550 006723 553 006775 556 007052 559 007127 564 007205 566 007211 567 007222 568 007230 571 007231 573 007242 575 007254 577 007265 578 007270 581 007325 584 007363 591 007445 593 007453 595 007470 597 007473 603 007540 605 007552 608 007553 614 007555 616 007561 617 007567 618 007571 620 007601 622 007603 627 007604 634 007606 636 007625 638 007627 639 007632 640 007633 643 007642 645 007645 650 007646 657 007657 658 007666 660 007736 662 007743 663 007764 854 007766 855 007774 856 010001 857 010016 859 010031 ----------------------------------------------------------- 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