COMPILATION LISTING OF SEGMENT register_resource Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/06/87 1315.1 mst Thu Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 15 /****^ HISTORY COMMENTS: 16* 1) change(87-06-19,Rauschelbach), approve(87-06-29,MCR7736), 17* audit(87-07-21,Farley), install(87-08-06,MR12.1-1064): 18* Error message duplication was removed, and a call to com_err_ with a more 19* standard version. 20* END HISTORY COMMENTS */ 21 22 23 /* format:style4,delnl,insnl,indattr,ifthen,dclind10 */ 24 register_resource: 25 rgr: 26 proc; 27 28 /* This command registers a resource or a number of resources. 29* Written 10/09/78 by C. D. Tavares */ 30 /* Modified 08/79 by CDT to remove warning when default attributes are 31* supplied from RTDT on registration. The fix is not a complete solution. */ 32 /* Modified 12/10/79 by CDT to get rid of timer sleep code which is now 33* handled in ring 1 */ 34 /* Last modified 06/17/81 by CDT to make error messages nicer and to reject 35* -owner in set_resource call. */ 36 /* Modified 841106 to query users when registering/acquiring multi-class volumes which are basically useless... - M. M. Pozzo */ 37 38 /* automatic */ 39 40 dcl action fixed bin, 41 ap pointer, 42 al fixed bin, 43 alp pointer, 44 arg_positions_ptr pointer, 45 eca_ptr pointer, 46 nargs fixed bin, 47 position fixed bin, 48 code fixed bin (35), 49 i fixed bin, 50 myname char (32), 51 err_msg char (256) varying, 52 resource_subtype char (32), 53 yes_sw bit (1); 54 55 /* external static */ 56 57 dcl ( 58 sys_info$max_seg_size, 59 error_table_$noarg, 60 error_table_$inconsistent, 61 error_table_$lock_wait_time_exceeded, 62 error_table_$resource_not_modified, 63 error_table_$action_not_performed 64 ) external fixed bin (35) static; 65 66 /* entries */ 67 68 dcl aim_check_$equal 69 entry (bit (72) aligned, bit (72) aligned) returns (bit (1) aligned); 70 dcl build_resource_desc_$from_arglist 71 ext 72 entry (pointer, pointer, pointer, pointer, bit (1) aligned, pointer, char (*) varying, 73 fixed bin (35)); 74 75 dcl define_area_ ext entry (pointer, fixed bin (35)), 76 release_area_ ext entry (pointer); 77 78 dcl command_query_$yes_no entry options (variable), 79 cu_$arg_count ext entry (fixed bin), 80 cu_$arg_ptr ext entry (fixed bin, pointer, fixed bin, fixed bin (35)), 81 cu_$arg_list_ptr ext entry (pointer); 82 83 dcl ioa_ ext entry options (variable); 84 85 dcl resource_info_$defaults 86 ext entry (char (*) aligned, char (*), pointer, fixed bin, fixed bin (35)); 87 88 dcl ( 89 rcp_admin_$register, 90 rcp_admin_$deregister, 91 rcp_sys_$clear_resource, 92 rcp_admin_$acquire, 93 rcp_$acquire, 94 rcp_admin_$release, 95 rcp_$release, 96 rcp_admin_$set_status, 97 rcp_$set_status 98 ) ext entry (pointer, char (*), fixed bin (35)); 99 100 /* based */ 101 102 dcl arg char (al) based (ap), 103 temp_area area (1000) based (auto_area_info.areap), 104 arg_positions (eca_ptr -> arg_struc_template.n_extra_args) fixed bin based (arg_positions_ptr); 105 106 dcl 1 arg_struc_template aligned based (eca_ptr), 107 2 n_extra_args fixed bin, 108 2 each (0 refer (arg_struc_template.n_extra_args)), 109 3 long_name char (32), 110 3 short_name char (32), 111 3 n_following fixed bin; 112 113 /* builtins */ 114 115 dcl (addr, null, unspec, index) 116 builtin; 117 118 /* conditions */ 119 120 dcl cleanup condition; 121 122 /* static */ 123 124 dcl sys_dir char (168) static initial (">system_control_1>rcp"); 125 126 /* constants */ 127 128 dcl 1 register_control_args 129 aligned static options (constant), 130 2 n_extra_args fixed bin initial (1), 131 2 each (1), 132 3 long_name char (32) initial ("-type"), 133 3 short_name char (32) initial ("-tp"), 134 3 n_following fixed bin initial (1); 135 136 dcl 1 no_control_args aligned static options (constant), 137 2 n_extra_args fixed bin initial (0); 138 139 dcl 1 only_priv_control_arg 140 aligned static options (constant), 141 2 n_extra_args fixed bin initial (1), 142 2 each (1), 143 3 long_name char (32) initial ("-priv"), 144 3 short_name char (32) initial ("-priv"), 145 3 n_following fixed bin initial (0); 146 147 dcl ( 148 Register initial (1), 149 Deregister initial (2), 150 Acquire initial (3), 151 Release initial (4), 152 Set initial (5), 153 Clear initial (6) 154 ) fixed bin static options (constant); 155 1 1 /* --------------- BEGIN include file resource_control_desc.incl.pl1 --------------- */ 1 2 1 3 /* Written by R.J.C. Kissel 3/78. */ 1 4 /* Modified 09/28/78 by C. D. Tavares */ 1 5 1 6 dcl 1 resource_descriptions based (resource_desc_ptr) aligned, 1 7 2 version_no fixed bin, /* caller must set this to resource_desc_version_1 */ 1 8 2 n_items fixed bin, /* Number of resources described by this structure. */ 1 9 2 item (Resource_count refer (resource_descriptions.n_items)) aligned, 1 10 3 type char (32), /* e.g., "tape_drive" */ 1 11 3 name char (32), /* e.g., "tapa_03" */ 1 12 3 uid bit (36), /* The resource unique id. */ 1 13 3 potential_attributes bit (72), /* resource's permissible attributes */ 1 14 3 attributes (2) bit (72), /* RCP attribute description (output) */ 1 15 3 desired_attributes (4) bit (72), /* desired attributes (input) */ 1 16 3 potential_aim_range (2) bit (72), /* Lowest and highest possible AIM bounds for resource */ 1 17 3 aim_range (2) bit (72), /* Current AIM range */ 1 18 3 owner char (32), /* e.g., "Smith.Project" */ 1 19 3 acs_path char (168), /* Access control segment pathname. */ 1 20 3 location char (168), /* String describing location in unusual cases */ 1 21 3 comment char (168), /* User-settable comment string */ 1 22 3 charge_type char (32), /* accounting identifier for this resource */ 1 23 3 rew bit (3) unaligned, /* user's effective access to resource */ 1 24 3 (usage_lock, /* This resource may not be acquired or used. */ 1 25 release_lock, /* The owner is not allowed to release the resource. */ 1 26 awaiting_clear, /* Resource awaiting manual clear */ 1 27 user_alloc) bit (1) unaligned, /* User claims volume contains useful data */ 1 28 3 pad2 bit (29) unaligned, /* Ignored field. */ 1 29 3 given aligned, /* each of these bits says the corresponding */ 1 30 /* item is significant on input */ 1 31 (4 (name, 1 32 uid, 1 33 potential_attributes, 1 34 desired_attributes, 1 35 potential_aim_range, 1 36 aim_range, 1 37 owner, 1 38 acs_path, 1 39 location, 1 40 comment, 1 41 charge_type, 1 42 usage_lock, 1 43 release_lock, 1 44 user_alloc) bit (1), 1 45 4 pad1 bit (22)) unaligned, 1 46 3 state bit (36) aligned, /* For use of resource_control_ only */ 1 47 3 status_code fixed bin (35); /* Standard system status code for this resource. */ 1 48 1 49 1 50 /* Note that the reservation description must always be used with a resource 1 51* description structure. When they are used together the two structures must 1 52* have the same number of entries, i.e. Resource_count is the same for both. */ 1 53 1 54 1 55 dcl 1 reservation_description based (resource_res_ptr) aligned, 1 56 2 version_no fixed bin, /* The version number for this structure. */ 1 57 2 reserved_for char (32), /* Group id of reserved for process. */ 1 58 2 reserved_by char (32), /* Group id of reserved by process. */ 1 59 2 reservation_id fixed bin (71), /* Reservation id of this reservation group. */ 1 60 2 group_starting_time fixed bin (71), /* Starting time for this reservation group. */ 1 61 2 asap_duration fixed bin (71), /* Duration after which as soon as possible is no longer good. */ 1 62 2 flags aligned, 1 63 (3 auto_expire bit (1), /* Should reservation expire when this process terminates. */ 1 64 3 asap bit (1), /* Make this reservation group as soon as possible. */ 1 65 3 rel bit (1), /* Times are relative/absolute. */ 1 66 3 sec bit (1)) unaligned, /* Times are in sec/microsec. */ 1 67 2 n_items fixed bin, /* Number of resources reserved in this group. */ 1 68 2 reservation_group (Resource_count refer (reservation_description.n_items)), 1 69 3 starting_time fixed bin (71), /* When this resource res. starts in the group. */ 1 70 3 duration fixed bin (71); /* Duration of this resource res. in the group. */ 1 71 1 72 dcl (resource_desc_ptr, 1 73 resource_res_ptr) pointer; 1 74 1 75 dcl (resource_desc_version_1 initial (1), 1 76 resource_res_version_1 initial (1)) internal static options (constant); 1 77 1 78 dcl Resource_count fixed bin; /* The number of resources described in the structures. */ 1 79 1 80 /* ---------------- END include file resource_control_desc.incl.pl1 ---------------- */ 156 157 2 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 2 2 2 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 2 4 2 5 dcl area_infop ptr; 2 6 2 7 dcl 1 area_info aligned based (area_infop), 2 8 2 version fixed bin, /* version number for this structure is 1 */ 2 9 2 control aligned like area_control, /* control bits for the area */ 2 10 2 owner char (32) unal, /* creator of the area */ 2 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 2 12 2 size fixed bin (18), /* size of the area in words */ 2 13 2 version_of_area fixed bin, /* version of area (returned only) */ 2 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 2 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 2 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 2 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 2 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 2 19 2 20 dcl 1 area_control aligned based, 2 21 2 extend bit (1) unal, /* says area is extensible */ 2 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 2 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 2 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 2 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 2 26 2 system bit (1) unal, /* says area is managed by system */ 2 27 2 pad bit (30) unal; 2 28 2 29 /* END INCLUDE FILE area_info.incl.pl1 */ 158 159 160 dcl 1 auto_area_info aligned automatic like area_info; 161 162 action = Register; 163 myname = "register_resource"; 164 goto common; 165 166 deregister_resource: 167 drr: 168 entry; 169 170 action = Deregister; 171 myname = "deregister_resource"; 172 goto common; 173 174 acquire_resource: 175 aqr: 176 entry; 177 178 action = Acquire; 179 myname = "acquire_resource"; 180 goto common; 181 182 release_resource: 183 rlr: 184 entry; 185 186 action = Release; 187 myname = "release_resource"; 188 goto common; 189 190 set_resource: 191 setr: 192 entry; 193 194 action = Set; 195 myname = "set_resource"; 196 goto common; 197 198 clear_resource: 199 clr: 200 entry; 201 202 action = Clear; 203 myname = "clear_resource"; 204 goto common; 205 206 common: 207 unspec (auto_area_info) = ""b; 208 auto_area_info.version = area_info_version_1; 209 auto_area_info.owner = myname; 210 auto_area_info.size = sys_info$max_seg_size; 211 auto_area_info.areap = null; 212 auto_area_info.extend, auto_area_info.no_freeing = "1"b; 213 214 call cu_$arg_count (nargs); 215 if nargs < 2 then 216 noarg: 217 call crump (error_table_$noarg, "Usage: ^a resource_type resource_names {-control_args}"); 218 219 call cu_$arg_list_ptr (alp); 220 221 on cleanup call clean_up; 222 223 call define_area_ (addr (auto_area_info), code); 224 if code ^= 0 then 225 call crump (code, "Defining area."); 226 227 if action = Register then 228 eca_ptr = addr (register_control_args); 229 else if (action = Deregister) | (action = Clear) then 230 eca_ptr = addr (no_control_args); 231 else eca_ptr = addr (only_priv_control_arg); 232 233 allocate arg_positions in (temp_area); 234 235 call build_resource_desc_$from_arglist (alp, auto_area_info.areap, eca_ptr, resource_desc_ptr, 236 (action = Register), arg_positions_ptr, err_msg, code); 237 if code ^= 0 then 238 call crump (code, (err_msg)); 239 240 if resource_descriptions.n_items <= 0 then 241 goto noarg; 242 243 244 goto process_action (action); 245 246 process_action (1): /* register */ 247 if ^resource_descriptions.item (1).given.owner then do; 248 if resource_descriptions.item (1).given.aim_range then 249 err_msg = "-access_class"; 250 else if resource_descriptions.item (1).given.acs_path then 251 err_msg = "-acs_path"; 252 else if resource_descriptions.item (1).given.comment then 253 err_msg = "-comment"; 254 else if resource_descriptions.item (1).given.user_alloc then 255 err_msg = "-user_alloc"; 256 else if resource_descriptions.item (1).given.release_lock then 257 err_msg = "-release_lock"; 258 else err_msg = ""; 259 260 if err_msg ^= "" then do; 261 err_msg = err_msg || " requires -owner"; 262 call crump (error_table_$inconsistent, (err_msg)); 263 end; 264 265 266 end; /* See if this is an acquire as well and if so, if this is a multi-class volume if the user really wants to do this */ 267 268 if ^multi_class_volume_continue () then do; 269 err_msg = "User does not wish to acquire useless multi-class volume"; 270 call crump (error_table_$action_not_performed, (err_msg)); 271 end; 272 273 274 /* We get the defaults for this type of resource and fill them into the 275* structure that we got back from build_resource_desc_ if they aren't already 276* provided. Notice that we only do this for ONE resource type-- because the 277* current syntax of the registration command only provides for registering 278* resources of one resource type at a time; plus all of the resources share 279* common control arguments, meaning that you can't (say) provide attributes 280* for one resource but not the others; so we assume that if the first 281* resource in the structure doesn't have something, none of them have it. */ 282 283 Resource_count = 1; /* get defaults for type */ 284 285 if search_list ("-type", position) then do; 286 call cu_$arg_ptr (position + 1, ap, al, code); 287 if code ^= 0 then 288 call crump (code, "after -type."); 289 resource_subtype = arg; 290 end; 291 else resource_subtype = ""; 292 293 call resource_info_$defaults (resource_descriptions.item (1).type, resource_subtype, resource_desc_ptr, 0, code) 294 ; 295 if code ^= 0 then 296 call crump (code, "Obtaining defaults."); 297 298 call rcp_admin_$register (resource_desc_ptr, sys_dir, code); 299 if code ^= 0 then 300 call crump_in_struc (code, "Cannot register resources."); 301 302 goto process_action_end; 303 304 process_action (2): /* deregister */ 305 call rcp_admin_$deregister (resource_desc_ptr, sys_dir, code); 306 if code ^= 0 then 307 call crump_in_struc (code, "Cannot deregister resources."); 308 309 goto process_action_end; 310 311 process_action (3): /* acquire */ 312 /* If this is a multi-class volume acquire, make sure user really wants to do this */ 313 if ^multi_class_volume_continue () then do; 314 err_msg = "User does not wish to acquire useless multi-class volume"; 315 call crump (error_table_$action_not_performed, (err_msg)); 316 end; 317 318 if search_list ("-priv", 0) then 319 call rcp_admin_$acquire (resource_desc_ptr, sys_dir, code); 320 else call rcp_$acquire (resource_desc_ptr, sys_dir, code); 321 if code ^= 0 then 322 call crump_in_struc (code, "Cannot acquire resources."); 323 324 do i = 1 to resource_descriptions.n_items; 325 if ^resource_descriptions.given.name (i) then 326 call ioa_ ("Resource ^a ^a acquired.", resource_descriptions.type (i), 327 resource_descriptions.item.name (i)); 328 end; 329 330 goto process_action_end; 331 332 process_action (4): /* release */ 333 if release_continue () then 334 if search_list ("-priv", 0) then 335 call rcp_admin_$release (resource_desc_ptr, sys_dir, code); 336 else call rcp_$release (resource_desc_ptr, sys_dir, code); 337 if code ^= 0 then 338 call crump_in_struc (code, "Cannot release resources."); 339 340 goto process_action_end; 341 342 process_action (5): /* set */ 343 if resource_descriptions.item (1).given.owner then 344 call crump (error_table_$resource_not_modified, "Cannot modify resource owner via set_resource."); 345 346 if search_list ("-priv", 0) then 347 call rcp_admin_$set_status (resource_desc_ptr, sys_dir, code); 348 else call rcp_$set_status (resource_desc_ptr, sys_dir, code); 349 if code ^= 0 then 350 call crump_in_struc (code, "Cannot set resources."); 351 352 goto process_action_end; 353 354 process_action (6): /* clear */ 355 call rcp_sys_$clear_resource (resource_desc_ptr, sys_dir, code); 356 if code ^= 0 then 357 call crump_in_struc (code, "Cannot clear resources."); 358 359 goto process_action_end; 360 361 process_action_end: 362 call clean_up; 363 364 /* ----- */ 365 366 clean_up: 367 proc; 368 369 if auto_area_info.areap ^= null then 370 call release_area_ (auto_area_info.areap); 371 372 end clean_up; 373 374 /* ----- */ 375 376 return_hard: 377 return; 378 379 search_list: 380 proc (desired_arg, position) returns (bit (1) aligned); 381 382 dcl desired_arg char (*) parameter, 383 position fixed bin parameter; 384 385 dcl i fixed bin; 386 387 do i = 1 to eca_ptr -> arg_struc_template.n_extra_args 388 while (eca_ptr -> arg_struc_template.long_name (i) ^= desired_arg); 389 end; 390 391 if i ^> eca_ptr -> arg_struc_template.n_extra_args then do; 392 position = arg_positions (i); 393 if position > 0 then 394 return ("1"b); 395 else return (""b); 396 end; 397 398 position = -1; 399 return (""b); 400 401 end search_list; 402 403 crump: 404 proc (code, reason); 405 406 dcl code fixed bin (35), 407 reason char (*); 408 409 dcl ( 410 com_err_, 411 com_err_$suppress_name 412 ) ext entry options (variable), 413 i fixed bin; 414 415 call com_err_ (code, myname, reason, myname); 416 call clean_up; 417 goto return_hard; 418 419 crump_in_struc: 420 entry (code, reason); 421 422 do i = 1 to resource_descriptions.n_items while (resource_descriptions.item (i).status_code = 0); 423 end; 424 425 if i <= resource_descriptions.n_items then 426 call com_err_ (code, myname, reason); 427 else call com_err_ (resource_descriptions.item (i).status_code, myname, "for ^a ^a", 428 resource_descriptions.item (i).type, resource_descriptions.item (i).name); 429 430 if code = error_table_$lock_wait_time_exceeded then 431 call com_err_$suppress_name (code, myname, "Resource registry is busy."); 432 433 call clean_up; 434 435 goto return_hard; 436 437 end crump; 438 439 test: 440 entry (new_sys_dir); 441 442 dcl new_sys_dir char (*) parameter; 443 444 if new_sys_dir = "" then 445 sys_dir = ">system_control_1>rcp"; 446 else sys_dir = new_sys_dir; 447 return; 448 449 multi_class_volume_continue: 450 proc () returns (bit (1)); 451 452 dcl continue bit (1); 453 continue = "1"b; /* Are we acquiring a multi-class resource */ 454 455 if (resource_descriptions.item (1).given.owner & resource_descriptions.item (1).given.aim_range) then do; 456 457 /* Is it a multi-class volume? */ 458 459 if index (resource_descriptions.item (1).type, "vol") ^= 0 then do; 460 461 /* Is the min_access_class < max_access_class? */ 462 463 if ^aim_check_$equal (resource_descriptions.item (1).aim_range (1), 464 resource_descriptions.item (1).aim_range (2)) then do; 465 466 /* Does the user wish to continue? */ 467 call command_query_$yes_no (yes_sw, 0, myname, "", 468 "Do you really want to acquire a multi-class volume?"); 469 if ^yes_sw then 470 continue = "0"b; 471 end; 472 end; 473 end; 474 return (continue); 475 476 end multi_class_volume_continue; 477 478 release_continue: 479 proc () returns (bit (1)); 480 481 dcl continue bit (1); 482 continue = "1"b; 483 484 call command_query_$yes_no (yes_sw, 0, myname, "", 485 "Releasing this resource may cause it to be degaussed. Do you wish to continue?"); 486 487 if ^yes_sw then 488 continue = "0"b; 489 490 return (continue); 491 end release_continue; 492 493 end register_resource; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/06/87 1304.7 register_resource.pl1 >special_ldd>install>MR12.1-1064>register_resource.pl1 156 1 02/13/79 1715.0 resource_control_desc.incl.pl1 >ldd>include>resource_control_desc.incl.pl1 158 2 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. Acquire constant fixed bin(17,0) initial dcl 147 ref 178 Clear constant fixed bin(17,0) initial dcl 147 ref 202 229 Deregister constant fixed bin(17,0) initial dcl 147 ref 170 229 Register constant fixed bin(17,0) initial dcl 147 ref 162 227 235 Release constant fixed bin(17,0) initial dcl 147 ref 186 Resource_count 000252 automatic fixed bin(17,0) dcl 1-78 set ref 283* Set constant fixed bin(17,0) initial dcl 147 ref 194 acs_path 270(07) based bit(1) array level 4 packed unaligned dcl 1-6 ref 250 action 000100 automatic fixed bin(17,0) dcl 40 set ref 162* 170* 178* 186* 194* 202* 227 229 229 235 244 addr builtin function dcl 115 ref 223 223 227 229 231 aim_check_$equal 000076 constant entry external dcl 68 ref 463 aim_range 45 based bit(72) array level 3 in structure "resource_descriptions" dcl 1-6 in procedure "rgr" set ref 463* 463* aim_range 270(05) based bit(1) array level 4 in structure "resource_descriptions" packed unaligned dcl 1-6 in procedure "rgr" ref 248 455 al 000104 automatic fixed bin(17,0) dcl 40 set ref 286* 289 alp 000106 automatic pointer dcl 40 set ref 219* 235* ap 000102 automatic pointer dcl 40 set ref 286* 289 area_control based structure level 1 dcl 2-20 area_info based structure level 1 dcl 2-7 area_info_version_1 constant fixed bin(17,0) initial dcl 2-3 ref 208 areap 16 000254 automatic pointer level 2 dcl 160 set ref 211* 233 235* 369 369* arg based char unaligned dcl 102 ref 289 arg_positions based fixed bin(17,0) array dcl 102 ref 233 392 arg_positions_ptr 000110 automatic pointer dcl 40 set ref 233* 235* 392 arg_struc_template based structure level 1 dcl 106 auto_area_info 000254 automatic structure level 1 dcl 160 set ref 206* 223 223 build_resource_desc_$from_arglist 000100 constant entry external dcl 70 ref 235 cleanup 000242 stack reference condition dcl 120 ref 221 code 000116 automatic fixed bin(35,0) dcl 40 in procedure "rgr" set ref 223* 224 224* 235* 237 237* 286* 287 287* 293* 295 295* 298* 299 299* 304* 306 306* 318* 320* 321 321* 332* 336* 337 337* 346* 348* 349 349* 354* 356 356* code parameter fixed bin(35,0) dcl 406 in procedure "crump" set ref 403 415* 419 425* 430 430* com_err_ 000144 constant entry external dcl 409 ref 415 425 427 com_err_$suppress_name 000146 constant entry external dcl 409 ref 430 command_query_$yes_no 000106 constant entry external dcl 78 ref 467 484 comment 270(09) based bit(1) array level 4 packed unaligned dcl 1-6 ref 252 continue 000330 automatic bit(1) unaligned dcl 481 in procedure "release_continue" set ref 482* 487* 490 continue 000320 automatic bit(1) unaligned dcl 452 in procedure "multi_class_volume_continue" set ref 453* 469* 474 control 1 000254 automatic structure level 2 dcl 160 cu_$arg_count 000110 constant entry external dcl 78 ref 214 cu_$arg_list_ptr 000114 constant entry external dcl 78 ref 219 cu_$arg_ptr 000112 constant entry external dcl 78 ref 286 define_area_ 000102 constant entry external dcl 75 ref 223 desired_arg parameter char unaligned dcl 382 ref 379 387 each 1 based structure array level 2 dcl 106 eca_ptr 000112 automatic pointer dcl 40 set ref 227* 229* 231* 233 235* 387 387 391 err_msg 000130 automatic varying char(256) dcl 40 set ref 235* 237 248* 250* 252* 254* 256* 258* 260 261* 261 262 269* 270 314* 315 error_table_$action_not_performed 000074 external static fixed bin(35,0) dcl 57 set ref 270* 315* error_table_$inconsistent 000066 external static fixed bin(35,0) dcl 57 set ref 262* error_table_$lock_wait_time_exceeded 000070 external static fixed bin(35,0) dcl 57 ref 430 error_table_$noarg 000064 external static fixed bin(35,0) dcl 57 set ref 215* error_table_$resource_not_modified 000072 external static fixed bin(35,0) dcl 57 set ref 342* extend 1 000254 automatic bit(1) level 3 packed unaligned dcl 160 set ref 212* given 270 based structure array level 3 dcl 1-6 i 000310 automatic fixed bin(17,0) dcl 385 in procedure "search_list" set ref 387* 387* 391 392 i 000100 automatic fixed bin(17,0) dcl 409 in procedure "crump" set ref 422* 422* 425 427 427 427 i 000117 automatic fixed bin(17,0) dcl 40 in procedure "rgr" set ref 324* 325 325 325* index builtin function dcl 115 ref 459 ioa_ 000116 constant entry external dcl 83 ref 325 item 2 based structure array level 2 dcl 1-6 long_name 1 based char(32) array level 3 dcl 106 ref 387 myname 000120 automatic char(32) unaligned dcl 40 set ref 163* 171* 179* 187* 195* 203* 209 415* 415* 425* 427* 430* 467* 484* n_extra_args based fixed bin(17,0) level 2 dcl 106 ref 233 387 391 n_items 1 based fixed bin(17,0) level 2 dcl 1-6 ref 240 324 422 425 name 12 based char(32) array level 3 in structure "resource_descriptions" dcl 1-6 in procedure "rgr" set ref 325* 427* name 270 based bit(1) array level 4 in structure "resource_descriptions" packed unaligned dcl 1-6 in procedure "rgr" ref 325 nargs 000114 automatic fixed bin(17,0) dcl 40 set ref 214* 215 new_sys_dir parameter char unaligned dcl 442 ref 439 444 446 no_control_args 000022 constant structure level 1 dcl 136 set ref 229 no_freeing 1(04) 000254 automatic bit(1) level 3 packed unaligned dcl 160 set ref 212* null builtin function dcl 115 ref 211 369 only_priv_control_arg 000023 constant structure level 1 dcl 139 set ref 231 owner 2 000254 automatic char(32) level 2 in structure "auto_area_info" packed unaligned dcl 160 in procedure "rgr" set ref 209* owner 270(06) based bit(1) array level 4 in structure "resource_descriptions" packed unaligned dcl 1-6 in procedure "rgr" ref 246 342 455 position 000115 automatic fixed bin(17,0) dcl 40 in procedure "rgr" set ref 285* 286 position parameter fixed bin(17,0) dcl 382 in procedure "search_list" set ref 379 392* 393 398* rcp_$acquire 000132 constant entry external dcl 88 ref 320 rcp_$release 000136 constant entry external dcl 88 ref 336 rcp_$set_status 000142 constant entry external dcl 88 ref 348 rcp_admin_$acquire 000130 constant entry external dcl 88 ref 318 rcp_admin_$deregister 000124 constant entry external dcl 88 ref 304 rcp_admin_$register 000122 constant entry external dcl 88 ref 298 rcp_admin_$release 000134 constant entry external dcl 88 ref 332 rcp_admin_$set_status 000140 constant entry external dcl 88 ref 346 rcp_sys_$clear_resource 000126 constant entry external dcl 88 ref 354 reason parameter char unaligned dcl 406 set ref 403 415* 419 425* register_control_args 000000 constant structure level 1 dcl 128 set ref 227 release_area_ 000104 constant entry external dcl 75 ref 369 release_lock 270(12) based bit(1) array level 4 packed unaligned dcl 1-6 ref 256 resource_desc_ptr 000250 automatic pointer dcl 1-72 set ref 235* 240 246 248 250 252 254 256 293 293* 298* 304* 318* 320* 324 325 325 325 332* 336* 342 346* 348* 354* 422 422 425 427 427 427 455 455 459 463 463 resource_descriptions based structure level 1 dcl 1-6 resource_info_$defaults 000120 constant entry external dcl 85 ref 293 resource_subtype 000231 automatic char(32) unaligned dcl 40 set ref 289* 291* 293* size 13 000254 automatic fixed bin(18,0) level 2 dcl 160 set ref 210* status_code 272 based fixed bin(35,0) array level 3 dcl 1-6 set ref 422 427* sys_dir 000010 internal static char(168) initial unaligned dcl 124 set ref 298* 304* 318* 320* 332* 336* 346* 348* 354* 444* 446* sys_info$max_seg_size 000062 external static fixed bin(35,0) dcl 57 ref 210 temp_area based area(1000) dcl 102 ref 233 type 2 based char(32) array level 3 dcl 1-6 set ref 293* 325* 427* 459 unspec builtin function dcl 115 set ref 206* user_alloc 270(13) based bit(1) array level 4 packed unaligned dcl 1-6 ref 254 version 000254 automatic fixed bin(17,0) level 2 dcl 160 set ref 208* yes_sw 000241 automatic bit(1) unaligned dcl 40 set ref 467* 469 484* 487 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. area_infop automatic pointer dcl 2-5 reservation_description based structure level 1 dcl 1-55 resource_desc_version_1 internal static fixed bin(17,0) initial dcl 1-75 resource_res_ptr automatic pointer dcl 1-72 resource_res_version_1 internal static fixed bin(17,0) initial dcl 1-75 NAMES DECLARED BY EXPLICIT CONTEXT. acquire_resource 000476 constant entry external dcl 174 aqr 000467 constant entry external dcl 174 clean_up 002304 constant entry internal dcl 366 ref 221 361 416 433 clear_resource 000567 constant entry external dcl 198 clr 000560 constant entry external dcl 198 common 000602 constant label dcl 206 ref 164 172 180 188 196 204 crump 002404 constant entry internal dcl 403 ref 215 224 237 262 270 287 295 315 342 crump_in_struc 002455 constant entry internal dcl 419 ref 299 306 321 337 349 356 deregister_resource 000453 constant entry external dcl 166 drr 000444 constant entry external dcl 166 multi_class_volume_continue 002647 constant entry internal dcl 449 ref 268 311 noarg 000634 constant label dcl 215 ref 240 process_action 000045 constant label array(6) dcl 246 ref 244 process_action_end 002237 constant label dcl 361 ref 302 309 330 340 352 359 register_resource 000430 constant entry external dcl 24 release_continue 002754 constant entry internal dcl 478 ref 332 release_resource 000521 constant entry external dcl 182 return_hard 002243 constant label dcl 376 ref 417 435 rgr 000421 constant entry external dcl 24 rlr 000512 constant entry external dcl 182 search_list 002325 constant entry internal dcl 379 ref 285 318 332 346 set_resource 000544 constant entry external dcl 190 setr 000535 constant entry external dcl 190 test 002247 constant entry external dcl 439 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3612 3762 3130 3622 Length 4302 3130 150 303 462 52 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rgr 378 external procedure is an external procedure. on unit on line 221 64 on unit clean_up 68 internal procedure is called by several nonquick procedures. search_list internal procedure shares stack frame of external procedure rgr. crump 112 internal procedure is called during a stack extension. multi_class_volume_continue internal procedure shares stack frame of external procedure rgr. release_continue internal procedure shares stack frame of external procedure rgr. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 sys_dir rgr STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME crump 000100 i crump rgr 000100 action rgr 000102 ap rgr 000104 al rgr 000106 alp rgr 000110 arg_positions_ptr rgr 000112 eca_ptr rgr 000114 nargs rgr 000115 position rgr 000116 code rgr 000117 i rgr 000120 myname rgr 000130 err_msg rgr 000231 resource_subtype rgr 000241 yes_sw rgr 000250 resource_desc_ptr rgr 000252 Resource_count rgr 000254 auto_area_info rgr 000310 i search_list 000320 continue multi_class_volume_continue 000330 continue release_continue THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other return_mac tra_ext_1 enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc set_chars_eis index_chars_eis op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. aim_check_$equal build_resource_desc_$from_arglist com_err_ com_err_$suppress_name command_query_$yes_no cu_$arg_count cu_$arg_list_ptr cu_$arg_ptr define_area_ ioa_ rcp_$acquire rcp_$release rcp_$set_status rcp_admin_$acquire rcp_admin_$deregister rcp_admin_$register rcp_admin_$release rcp_admin_$set_status rcp_sys_$clear_resource release_area_ resource_info_$defaults THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$inconsistent error_table_$lock_wait_time_exceeded error_table_$noarg error_table_$resource_not_modified sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 24 000420 162 000435 163 000437 164 000442 166 000443 170 000460 171 000462 172 000465 174 000466 178 000503 179 000505 180 000510 182 000511 186 000526 187 000530 188 000533 190 000534 194 000551 195 000553 196 000556 198 000557 202 000574 203 000576 204 000601 206 000602 208 000605 209 000607 210 000612 211 000615 212 000617 214 000623 215 000631 219 000654 221 000663 223 000705 224 000720 227 000744 229 000752 231 000761 233 000763 235 000770 237 001035 240 001063 244 001067 246 001071 248 001074 250 001105 252 001116 254 001127 256 001140 258 001151 260 001152 261 001157 262 001171 263 001216 268 001217 269 001224 270 001231 271 001256 283 001257 285 001261 286 001271 287 001311 289 001334 290 001341 291 001342 293 001345 295 001402 298 001423 299 001444 302 001465 304 001466 306 001507 309 001530 311 001531 314 001536 315 001543 316 001570 318 001571 320 001624 321 001645 324 001666 325 001677 328 001737 330 001741 332 001742 336 002002 337 002023 340 002044 342 002045 346 002070 348 002123 349 002144 352 002170 354 002171 356 002212 359 002236 361 002237 376 002243 439 002244 444 002262 446 002276 447 002302 366 002303 369 002311 372 002324 379 002325 387 002336 389 002357 391 002361 392 002364 393 002370 395 002374 398 002376 399 002401 403 002403 415 002417 416 002444 417 002451 419 002454 422 002470 423 002506 425 002510 427 002541 430 002606 433 002637 435 002644 449 002647 453 002651 455 002653 459 002660 463 002667 467 002705 469 002742 474 002746 478 002754 482 002756 484 002760 487 003015 490 003021 ----------------------------------------------------------- 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