COMPILATION LISTING OF SEGMENT unassign_resource Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 02/16/84 1522.7 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 unassign_resource: ur: procedure; 12 13 /* This program is a command that may be called to unassign a resource controled by RCP. 14* * Created on 01/10/75 by Bill Silver. 15* * Changed on 03/30/75 by Bill Silver to add "device" option. 16* * Modified on 12/09/78 by Michael R. Jordan for version 3 list info. 17* * Modified 2/80 by Michael R. Jordan to add -all 18* * Modified 12/12/83 by Jim Lippard to remove "all". 19* * 20* * In the current implementation this command can unassign only devices. 21* * Its calling sequence is: 22* * 23* * unassign_resource, ur [resource] [-control_args] 24* * 25* * resource Specifies the resource to be unassigned. 26* * A user may unassign any device by specifying its name. 27* * 28* * The following optional control arguments are also supported: 29* * 30* * (-com | -comment) The value argument is a comment that will be displayed 31* * to the operator when the device is unassigned. If more 32* * than one term is required they should be in quotes. 33* * (-am | -admin) Indicates that a force unassignment is to be done. 34* * The user must have access to the gate rcp_sys_. 35* * (-a | -all) Indicates that all resources are to be unassigned. 36**/ 37 38 /* AUTOMATIC DATA */ 39 40 dcl pointers (1) ptr; /* Pointer array for temp segment manager. */ 41 42 dcl admin_flag bit (1); /* ON => we must do a force unassignment. */ 43 dcl all_sw bit (1); /* ON => unassign all resources */ 44 dcl arg_len fixed bin; /* Length of an argument string. */ 45 dcl arg_ptr ptr; /* Pointer to an argument string. */ 46 dcl argx fixed bin; /* Number of the current argument. */ 47 dcl comment char (64); /* Comments to and from operator. */ 48 dcl device_name char (32); /* Name of device to be unassigned. */ 49 dcl ecode fixed bin (35); /* error_table_ code. */ 50 dcl i fixed bin; 51 dcl num_args fixed bin; /* Number of command arguments. */ 52 dcl num_unassigned fixed bin; /* Number of devices unassigned. */ 53 dcl option char (12); /* Command option string. */ 54 dcl seg_size fixed bin (19); /* Max size of temp segment. */ 55 56 57 /* BASED DATA */ 58 59 dcl argument char (arg_len) based (arg_ptr); /* Used to reference argument string. */ 60 61 62 /* INTERNAL STATIC DATA */ 63 64 dcl brief_options (3) char (4) /* Brief form of command options. */ 65 internal static init ("-com", "-am", "-a"); 66 67 dcl long_options (3) char (8) /* Long form of command options. */ 68 internal static init ("-comment", "-admin", "-all"); 69 70 dcl HAS_VALUE (3) bit (1) unal internal static options (constant) init ("1"b, "0"b, "0"b); 71 72 /* EXTERNAL ENTRIES CALLED */ 73 74 dcl cleanup condition; 75 76 dcl (addr, hbound, null, substr) builtin; 77 78 dcl (error_table_$badopt, 79 error_table_$inconsistent, 80 error_table_$noarg, 81 error_table_$resource_unassigned) fixed bin (35) external; 82 83 dcl com_err_ entry options (variable); 84 dcl cu_$arg_count entry (fixed bin); 85 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin, fixed bin (35)); 86 dcl get_temp_segments_ entry (char (*), (1) ptr, fixed bin (35)); 87 dcl hcs_$get_max_length_seg entry (ptr, fixed bin (19), fixed bin (35)); 88 dcl rcp_$copy_list entry (ptr, fixed bin (19), fixed bin (35)); 89 dcl rcp_$unassign entry (bit (36) aligned, bit (*), char (*), fixed bin (35)); 90 dcl rcp_sys_$unassign_device entry (char (*), fixed bin (35)); 91 dcl release_temp_segments_ entry (char (*), (1) ptr, fixed bin (35)); 92 1 1 /* Begin include file ... rcp_list_info.incl.pl1 1 2* * 1 3* * Created on 01/29/75 by Bill Silver. 1 4* * Changed on 04/02/76 by Bill Silver to add lv entries. 1 5* * Modified on 12/09/78 by Michael R. Jordan to add reservation information (version 3). 1 6* * Modified 8/81 by M.R. Jordan to expand reservation information (version 4). 1 7* * This include file defines arrays of entries that contain information 1 8* * about the resources that a process has assigned and attached. 1 9**/ 1 10 dcl rli_ptr ptr; /* Pointer to base of RCP list structure. */ 1 11 dcl dassign_ptr ptr; /* Pointer to a device assignment entry. */ 1 12 dcl attach_ptr ptr; /* Pointer to an attachment entry. */ 1 13 dcl lv_ptr ptr; /* Pointer to an lv entry. */ 1 14 dcl device_resv_ptr ptr; /* Pointer to a device reservation entry. */ 1 15 dcl vol_resv_ptr ptr; /* Pointer to a volume reservation entry. */ 1 16 1 17 dcl rli_version_4 fixed bin internal static init (4); 1 18 1 19 dcl 1 rli based (rli_ptr) aligned, /* Base of RCP list structure. */ 1 20 2 head like rli_header, /* header of structure. */ 1 21 2 dassigns (0 refer (rli.head.num_dassign)) 1 22 like dassign, /* An array of device assignment entries. */ 1 23 2 attaches (0 refer (rli.head.num_attach)) 1 24 like attach, /* An array of attachment entries. */ 1 25 2 lvs (0 refer (rli.head.num_lv)) 1 26 like lv, /* An array of lv attachment entries. */ 1 27 2 device_resvs (0 refer (rli.head.num_device_resv)) 1 28 like device_resv, 1 29 2 vol_resvs (0 refer (rli.head.num_vol_resv)) 1 30 like vol_resv, 1 31 2 end bit (36); /* Dummy used to reference end of structure. */ 1 32 1 33 dcl 1 rli_header based aligned, /* Header of RCP list info structure. */ 1 34 2 version_num fixed bin, /* Current version number. Now = 1. */ 1 35 2 num_lv fixed bin, /* Number of lv attachment entries. */ 1 36 2 num_dassign fixed bin, /* Number of device assignment entries. */ 1 37 2 num_attach fixed bin, /* Number of attachment entries. */ 1 38 2 num_device_resv fixed bin, /* Number of devices reserved. */ 1 39 2 num_vol_resv fixed bin; /* Number of volumes reserved. */ 1 40 1 41 dcl 1 dassign based (dassign_ptr) aligned, /* Structure of a device assignment entry. */ 1 42 2 device_name char (8), /* Device name. */ 1 43 2 dtypex fixed bin, /* Device type index. */ 1 44 2 model fixed bin, /* Device model number. */ 1 45 2 num_qualifiers fixed bin, /* Number of device qualifiers. */ 1 46 2 qualifiers (4) fixed bin (35), /* Device qualifiers. */ 1 47 2 state_time fixed bin (71), /* Time assignment put into current state. */ 1 48 2 state fixed bin, /* Current state of assignment. */ 1 49 2 level fixed bin, /* Current validation level. */ 1 50 2 disposition bit (36), /* Disposition of assignment. */ 1 51 2 flags, 1 52 (3 attached bit (1)) unaligned, /* ON => device is attached. */ 1 53 2 rcp_id bit (36), /* RCP ID for this assignment. */ 1 54 2 usage_time fixed bin, /* Number of minutes device may be assigned. */ 1 55 2 wait_time fixed bin; /* Number of minutes user must wait for assignment. */ 1 56 1 57 dcl 1 attach based (attach_ptr) aligned, /* Structure of an attachment entry. */ 1 58 2 device_name char (8), /* Name of attached device. */ 1 59 2 volume_name char (32), /* Name of attached volume. */ 1 60 2 dtypex fixed bin, /* Device type index. */ 1 61 2 state_time fixed bin (71), /* Time attachment put into current state. */ 1 62 2 state fixed bin, /* Current state of this attachment. */ 1 63 2 level fixed bin, /* Current validation level. */ 1 64 2 flags, /* Info flags. */ 1 65 (3 priv bit (1), /* ON => attached with privilege. */ 1 66 3 writing bit (1)) unal, /* ON => attached for writing. */ 1 67 2 rcp_id bit (36), /* RCP ID for this attachment. */ 1 68 2 workspace_max fixed bin (19), /* Max size of IOI workspace buffer. */ 1 69 2 timeout_max fixed bin (52), /* Max IOI time-out interval. */ 1 70 2 ioi_index fixed bin, /* Index used to communicate with IOI. */ 1 71 2 usage_time fixed bin, /* Number of minutes device may be attached. */ 1 72 2 wait_time fixed bin; /* Number of minutes user must wait for attachment. */ 1 73 1 74 dcl 1 lv based (lv_ptr) aligned, /* Structure of an LV entry. */ 1 75 2 volume_name char (32), /* Logical volume name. */ 1 76 2 state_time fixed bin (71), /* Time lv attached for process. */ 1 77 2 rcp_id bit (36); /* RCP ID for this lv attachment. */ 1 78 1 79 dcl 1 device_resv based (device_resv_ptr) aligned, /* Structure of a device reservation. */ 1 80 2 reservation_id fixed bin (71), 1 81 2 reserved_by char (32), 1 82 2 dtypex fixed bin, 1 83 2 device_name char (8); 1 84 1 85 dcl 1 vol_resv based (vol_resv_ptr) aligned, /* Structure of a volume reservation. */ 1 86 2 reservation_id fixed bin (71), 1 87 2 reserved_by char (32), 1 88 2 vtypex fixed bin, 1 89 2 volume_name char (32); 1 90 1 91 /* End of include file ... rcp_list_info.incl.pl1 */ 93 94 95 /* Begin command: unassign_resource 96**/ 97 ecode, /* Initialize. */ 98 num_unassigned = 0; 99 comment, 100 device_name = " "; 101 admin_flag = "0"b; /* Assume no admin unassignment. */ 102 all_sw = "0"b; /* not -all */ 103 104 call cu_$arg_count (num_args); /* Total number of command arguments. */ 105 106 if num_args < 1 /* Was any device specified? */ 107 then do; /* No, no argument. */ 108 NO_RESOURCE: call com_err_ (error_table_$noarg, "unassign_resource", "No resource specified."); 109 return; 110 end; 111 112 call cu_$arg_ptr (1, arg_ptr, arg_len, ecode); /* Get resource name. */ 113 if ecode ^= 0 114 then do; 115 call com_err_ (ecode, "unassign_resource", "Error getting resource name argument."); 116 return; 117 end; 118 119 if substr (argument, 1, 1) ^= "-" /* Make sure that it is not a control argument. */ 120 then do; 121 argx = 2; 122 device_name = argument; 123 end; 124 else argx = 1; 125 126 do argx = argx to num_args; /* Process any optional control arguments. */ 127 call PROCESS_ARG; /* Most will be processed in pairs. */ 128 if ecode ^= 0 /* Was there an error? */ 129 then return; /* Yes, abort. */ 130 end; 131 132 if device_name ^= "" 133 & all_sw then do; 134 call com_err_ (error_table_$inconsistent, "unassign_resource", "Cannot specify resource name and -all."); 135 return; 136 end; 137 138 if device_name = "" 139 & ^all_sw 140 then goto NO_RESOURCE; 141 142 if admin_flag /* Does user want to force the unassignment? */ 143 then do; /* Yes. */ 144 if all_sw 145 then do; 146 call com_err_ (error_table_$inconsistent, "unassign_resource", "Cannot specify -admin and -all together."); 147 return; 148 end; 149 call rcp_sys_$unassign_device (device_name, ecode); 150 if ecode ^= 0 151 then call com_err_ (ecode, "unassign_resource", "Error force unassigning ^a.", device_name); 152 return; 153 end; 154 155 /* User wants to unassign one or more devices from her/his process. 156* * Get temporary segment for RCP list info structure. 157* * Set up cleanup handler to release temp segment. 158**/ 159 pointers (1) = null (); 160 on cleanup begin; 161 if pointers (1) ^= null () 162 then call release_temp_segments_ ("unassign_resource", pointers, ecode); 163 end; 164 165 call get_temp_segments_ ("unassign_resource", pointers, ecode); 166 if ecode ^= 0 /* Unable to get temporary working segment? */ 167 then do; /* Yes. */ 168 call com_err_ (ecode, "unassign_resource", "Error getting temporary segment."); 169 return; 170 end; 171 172 call hcs_$get_max_length_seg (pointers (1), seg_size, ecode); 173 if ecode ^= 0 /* We need max size of temp segment. */ 174 then do; 175 call com_err_ (ecode, "unassign_resource", "Error getting maximum length of temporary segment."); 176 goto RETURN; 177 end; 178 179 rli_ptr = pointers (1); /* Temp segment used to RCP info. */ 180 rli.version_num = rli_version_4; 181 182 call rcp_$copy_list (rli_ptr, seg_size, ecode); 183 if ecode ^= 0 /* Error copying process's RCP info? */ 184 then do; /* Yes. */ 185 call com_err_ (ecode, "unassign_resource", "Error copying RCP info from lower ring."); 186 goto RETURN; 187 end; 188 189 do i = 1 to rli.head.num_dassign; /* Look at each assigned device. */ 190 dassign_ptr = addr (rli.dassigns (i)); /* Get pointer to assignment entry. */ 191 if all_sw | /* Unassigning all devices? */ 192 (device_name = dassign.device_name) /* Or this device? */ 193 then do; /* Yes, unassign this device. */ 194 num_unassigned = num_unassigned + 1; 195 call rcp_$unassign (dassign.rcp_id, "0"b, comment, ecode); 196 if ecode ^= 0 197 then call com_err_ (ecode, "unassign_resource", "Error unassigning ^a.", dassign.device_name); 198 comment = " "; /* Issue comment only once. */ 199 end; 200 end; 201 202 if num_unassigned = 0 /* Did we unassign any devices? */ 203 then if all_sw /* No. */ 204 then call com_err_ (error_table_$resource_unassigned, "unassign_resource", "No resources assigned."); 205 else call com_err_ (error_table_$resource_unassigned, "unassign_resource", "^a", device_name); 206 207 RETURN: /* Come here to release temp segment. */ 208 call release_temp_segments_ ("unassign_resource", pointers, ecode); 209 if ecode ^= 0 210 then call com_err_ (ecode, "unassign_resource", "Error releasing temporary segment."); 211 212 return; 213 /* */ 214 PROCESS_ARG: procedure; 215 216 /* This procedure is called to process one option argument. 217* * All of the option arguments except "-admin" have a value argument. 218* * This value must be the next argument. In this case we will process 219* * the value argument too. 220**/ 221 call cu_$arg_ptr (argx, arg_ptr, arg_len, ecode); 222 if ecode ^= 0 223 then do; 224 call com_err_ (ecode, "unassign_resource", "Error getting argument ^d.", argx); 225 return; 226 end; 227 228 option = argument; /* Save option argument. */ 229 230 do i = 1 to hbound (brief_options, 1); /* Look for valid option name. */ 231 if (option = brief_options (i)) | /* Is it this brief name? */ 232 (option = long_options (i)) /* Or this long name. */ 233 then do; /* Yes, one of them. */ 234 if HAS_VALUE (i) 235 then do; 236 call GET_VALUE; /* Get accompanying value argument. */ 237 if ecode ^= 0 /* Check for errors. */ 238 then return; 239 end; 240 goto OPTION (i); /* Go process this option. */ 241 end; 242 end; 243 244 ecode = error_table_$badopt; /* Option not found. */ 245 call com_err_ (ecode, "uasssign_resource", "^a", option); 246 return; 247 248 OPTION (1): /* "-com" or "-comment" */ 249 comment = argument; /* Save user's comment to operator. */ 250 return; 251 252 OPTION (2): /* "-am" or "-admin" */ 253 admin_flag = "1"b; /* We want to unassign through privileged gate. */ 254 return; 255 256 OPTION (3): /* "-a" or "-all" */ 257 258 all_sw = "1"b; 259 return; 260 261 end PROCESS_ARG; 262 /* */ 263 GET_VALUE: procedure; 264 265 /* This procedure is called to get the value argument that is associated 266* * with the current option argument. 267**/ 268 if argx = num_args /* Is this the last argument? */ 269 then do; /* Yes, value argument missing. */ 270 ecode = error_table_$noarg; 271 call com_err_ (ecode, "unassign_resource", "No value argument for ^a.", option); 272 return; 273 end; 274 275 argx = argx + 1; /* Move to the next argument. */ 276 277 call cu_$arg_ptr (argx, arg_ptr, arg_len, ecode); 278 if ecode ^= 0 279 then do; 280 call com_err_ (ecode, "unassign_resource", "Error getting argument ^d.", argx); 281 return; 282 end; 283 284 if substr (argument, 1, 1) = "-" /* Is next argument a control option? */ 285 then do; /* Yes, value argument is missing. */ 286 ecode = error_table_$noarg; 287 call com_err_ (ecode, "unassign_resource", "No value argument for ^a.", option); 288 return; 289 end; 290 291 end GET_VALUE; 292 293 294 end unassign_resource; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 02/16/84 1522.4 unassign_resource.pl1 >special_ldd>on>6673>unassign_resource.pl1 93 1 03/19/82 1647.0 rcp_list_info.incl.pl1 >ldd>include>rcp_list_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. HAS_VALUE constant bit(1) initial array unaligned dcl 70 ref 234 addr builtin function dcl 76 ref 190 admin_flag 000102 automatic bit(1) unaligned dcl 42 set ref 101* 142 252* all_sw 000103 automatic bit(1) unaligned dcl 43 set ref 102* 132 138 144 191 202 256* arg_len 000104 automatic fixed bin(17,0) dcl 44 set ref 112* 119 122 221* 228 248 277* 284 arg_ptr 000106 automatic pointer dcl 45 set ref 112* 119 122 221* 228 248 277* 284 argument based char unaligned dcl 59 ref 119 122 228 248 284 argx 000110 automatic fixed bin(17,0) dcl 46 set ref 121* 124* 126* 126* 221* 224* 268 275* 275 277* 280* attach based structure level 1 dcl 1-57 brief_options 000011 constant char(4) initial array unaligned dcl 64 ref 230 231 cleanup 000152 stack reference condition dcl 74 ref 160 com_err_ 000020 constant entry external dcl 83 ref 108 115 134 146 150 168 175 185 196 202 205 209 224 245 271 280 287 comment 000111 automatic char(64) unaligned dcl 47 set ref 99* 195* 198* 248* cu_$arg_count 000022 constant entry external dcl 84 ref 104 cu_$arg_ptr 000024 constant entry external dcl 85 ref 112 221 277 dassign based structure level 1 dcl 1-41 dassign_ptr 000162 automatic pointer dcl 1-11 set ref 190* 191 195 196 dassigns 6 based structure array level 2 dcl 1-19 set ref 190 device_name 000131 automatic char(32) unaligned dcl 48 in procedure "ur" set ref 99* 122* 132 138 149* 150* 191 205* device_name based char(8) level 2 in structure "dassign" dcl 1-41 in procedure "ur" set ref 191 196* device_resv based structure level 1 dcl 1-79 ecode 000141 automatic fixed bin(35,0) dcl 49 set ref 97* 112* 113 115* 128 149* 150 150* 161* 165* 166 168* 172* 173 175* 182* 183 185* 195* 196 196* 207* 209 209* 221* 222 224* 237 244* 245* 270* 271* 277* 278 280* 286* 287* error_table_$badopt 000010 external static fixed bin(35,0) dcl 78 ref 244 error_table_$inconsistent 000012 external static fixed bin(35,0) dcl 78 set ref 134* 146* error_table_$noarg 000014 external static fixed bin(35,0) dcl 78 set ref 108* 270 286 error_table_$resource_unassigned 000016 external static fixed bin(35,0) dcl 78 set ref 202* 205* get_temp_segments_ 000026 constant entry external dcl 86 ref 165 hbound builtin function dcl 76 ref 230 hcs_$get_max_length_seg 000030 constant entry external dcl 87 ref 172 head based structure level 2 dcl 1-19 i 000142 automatic fixed bin(17,0) dcl 50 set ref 189* 190* 230* 231 231 234 240* long_options 000003 constant char(8) initial array unaligned dcl 67 ref 231 lv based structure level 1 dcl 1-74 null builtin function dcl 76 ref 159 161 num_args 000143 automatic fixed bin(17,0) dcl 51 set ref 104* 106 126 268 num_dassign 2 based fixed bin(17,0) level 3 dcl 1-19 ref 189 num_unassigned 000144 automatic fixed bin(17,0) dcl 52 set ref 97* 194* 194 202 option 000145 automatic char(12) unaligned dcl 53 set ref 228* 231 231 245* 271* 287* pointers 000100 automatic pointer array dcl 40 set ref 159* 161 161* 165* 172* 179 207* rcp_$copy_list 000032 constant entry external dcl 88 ref 182 rcp_$unassign 000034 constant entry external dcl 89 ref 195 rcp_id 20 based bit(36) level 2 dcl 1-41 set ref 195* rcp_sys_$unassign_device 000036 constant entry external dcl 90 ref 149 release_temp_segments_ 000040 constant entry external dcl 91 ref 161 207 rli based structure level 1 dcl 1-19 rli_header based structure level 1 dcl 1-33 rli_ptr 000160 automatic pointer dcl 1-10 set ref 179* 180 182* 189 190 rli_version_4 constant fixed bin(17,0) initial dcl 1-17 ref 180 seg_size 000150 automatic fixed bin(19,0) dcl 54 set ref 172* 182* substr builtin function dcl 76 ref 119 284 version_num based fixed bin(17,0) level 3 dcl 1-19 set ref 180* vol_resv based structure level 1 dcl 1-85 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. attach_ptr automatic pointer dcl 1-12 device_resv_ptr automatic pointer dcl 1-14 lv_ptr automatic pointer dcl 1-13 vol_resv_ptr automatic pointer dcl 1-15 NAMES DECLARED BY EXPLICIT CONTEXT. GET_VALUE 001540 constant entry internal dcl 263 ref 236 NO_RESOURCE 000301 constant label dcl 108 ref 138 OPTION 000000 constant label array(3) dcl 248 ref 240 PROCESS_ARG 001345 constant entry internal dcl 214 ref 127 RETURN 001267 constant label dcl 207 ref 176 186 unassign_resource 000251 constant entry external dcl 11 ur 000242 constant entry external dcl 11 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2126 2170 1724 2136 Length 2416 1724 42 212 202 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME ur 260 external procedure is an external procedure. on unit on line 160 84 on unit PROCESS_ARG internal procedure shares stack frame of external procedure ur. GET_VALUE internal procedure shares stack frame of external procedure ur. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ur 000100 pointers ur 000102 admin_flag ur 000103 all_sw ur 000104 arg_len ur 000106 arg_ptr ur 000110 argx ur 000111 comment ur 000131 device_name ur 000141 ecode ur 000142 i ur 000143 num_args ur 000144 num_unassigned ur 000145 option ur 000150 seg_size ur 000160 rli_ptr ur 000162 dassign_ptr ur THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return enable ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ cu_$arg_count cu_$arg_ptr get_temp_segments_ hcs_$get_max_length_seg rcp_$copy_list rcp_$unassign rcp_sys_$unassign_device release_temp_segments_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$inconsistent error_table_$noarg error_table_$resource_unassigned LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 11 000241 97 000256 99 000260 101 000266 102 000267 104 000270 106 000276 108 000301 109 000333 112 000334 113 000353 115 000355 116 000404 119 000405 121 000412 122 000414 123 000420 124 000421 126 000423 127 000433 128 000434 130 000436 132 000440 134 000446 135 000475 138 000476 142 000504 144 000506 146 000510 147 000537 149 000540 150 000555 152 000612 159 000613 160 000615 161 000631 163 000661 165 000662 166 000706 168 000710 169 000737 172 000740 173 000753 175 000755 176 001004 179 001005 180 001007 182 001011 183 001024 185 001026 186 001055 189 001056 190 001067 191 001073 194 001101 195 001102 196 001131 198 001171 200 001174 202 001176 205 001235 207 001267 209 001313 212 001344 214 001345 221 001346 222 001363 224 001365 225 001420 228 001421 230 001426 231 001433 234 001446 236 001454 237 001455 240 001460 242 001462 244 001464 245 001467 246 001523 248 001524 250 001531 252 001532 254 001534 256 001535 259 001537 263 001540 268 001541 270 001544 271 001547 272 001601 275 001602 277 001603 278 001620 280 001622 281 001655 284 001656 286 001663 287 001666 288 001720 291 001721 ----------------------------------------------------------- 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