COMPILATION LISTING OF SEGMENT rcp_lv_ Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 0948.2 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 rcp_lv_: procedure; 14 15 /* This program is an internal interface of RCP. 16* * Created on 04/08/76 by Bill Silver. 17* * Massively reworked on 09/13/76 by Bernard Greenberg for lv_request_. 18* * 19* * This program is call to manage a per-process list of attached logical volumes. 20* * It has the following entry points: 21* * 1. add_lv - Adds a logical volume to the list. 22* * 2. del_lv - Deletes a logical volume from the list. 23* * 3. check - Returns lvid of attached lv. 24* * 4. number - Returns the number of attached lvs. 25* * 5. copy - Copies lv info. 26**/ 27 28 /* ARGUMENTS */ 29 30 dcl arg_ecode fixed bin (35); /* (O) error_table_ code. */ 31 dcl arg_event_id fixed bin (71); /* (I) User-supplied event ID */ 32 dcl arg_lvid bit (36) aligned; /* (I/O) Logical volume ID. */ 33 dcl arg_lv_name char (*); /* (I) Logical volume name. */ 34 dcl arg_num_lvs fixed bin; /* (O) Number of attached lvs. */ 35 dcl arg_rcp_id bit (36) aligned; /* (I/O) RCP ID of this LV attachment. */ 36 dcl arg_rli_ptr ptr; /* (I) Pointer to RLI structure. */ 37 dcl arg_statex fixed bin; /* (O) State index. */ 38 39 40 /* AUTOMATIC DATA */ 41 42 dcl ecode fixed bin (35); /* error_table_ code. */ 43 dcl event_id fixed bin (71); /* User's event ID. */ 44 dcl lvid bit (36) aligned; /* LV ID. */ 45 dcl lv_name char (32); /* Name of lv. */ 46 dcl i fixed bin; 47 dcl listx fixed bin; /* LV array index. */ 48 dcl num_lvs fixed bin; /* Number of attached lvs. */ 49 dcl rcp_id bit (36) aligned; /* RCP ID for this LV attachment. */ 50 dcl statex fixed bin; 51 dcl freex fixed bin; /* Free index in lv_list search */ 52 53 54 /* BASED DATA */ 55 56 dcl 1 based_rcp_id based aligned, /* Overlay of RCP ID. */ 57 (2 id_count fixed bin (17), /* Count make ID unique. */ 58 2 index fixed bin (17)) unal; /* LV list index. */ 59 60 /* STATIC DATA */ 61 62 dcl rcp_id_count fixed bin internal static init (0); 63 64 dcl 1 lv_list (16) aligned internal static, /* Per-process list of attached lvs. */ 65 2 volume_name char (32), /* LV name. */ 66 2 lvatep ptr, /* Identifier for lv_request_communicator_ */ 67 2 r0_accepted bit (1), /* Called attach_lv. */ 68 2 lvid bit (36), /* UID of lv. */ 69 2 rcp_id bit (36), /* RCP ID for this LV attachment. */ 70 2 state_time fixed bin (71); /* Time lv attached for process. */ 71 72 73 /* EXTERNAL ENTRIES CALLED */ 74 75 dcl (addr, hbound) builtin; 76 77 dcl error_table_$bad_index fixed bin (35) external; 78 dcl error_table_$noalloc fixed bin (35) external; 79 dcl error_table_$resource_assigned fixed bin (35) external; 80 dcl error_table_$resource_unassigned fixed bin (35) external; 81 82 dcl admin_gate_$attach_lv entry (bit (36) aligned, fixed bin (35)); 83 dcl admin_gate_$detach_lv entry (bit (36) aligned, fixed bin (35)); 84 dcl clock_ entry returns (fixed bin (71)); 85 dcl lv_request_communicator_$alloc_lvate entry (fixed bin (35)) returns (ptr); 86 dcl lv_request_communicator_$abandon entry (ptr); 87 dcl lv_request_communicator_$check entry (ptr, fixed bin, fixed bin (35)); 88 dcl lv_request_communicator_$intent_to_mount entry (ptr, char (*), fixed bin (71), fixed bin (35)); 89 dcl lv_request_communicator_$intent_to_detach entry (ptr, fixed bin (35)); 90 /* */ 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 */ 91 92 /* */ 93 add_lv: entry (arg_lv_name, arg_lvid, arg_event_id, arg_rcp_id, arg_ecode); 94 95 /* This entry will add the specified logical volume to the list of 96* * attached lvs. The name and ID of this lv will be saved. 97* * An RCP ID will be generated that references this LV attachment. 98* * If valid, the lv_request_mechanism will be informed of the attachment. 99**/ 100 101 lv_name = arg_lv_name; /* Copy arguments. */ 102 lvid = arg_lvid; 103 event_id = arg_event_id; 104 rcp_id = "0"b; 105 ecode = 0; 106 107 freex = 0; /* Initialize search through list. */ 108 do i = 1 to hbound (lv_list, 1); /* Look at all possible entries. */ 109 110 rcp_id = lv_list (i).rcp_id; /* Make sure each entry is valid as it is considered. */ 111 call CHECK_RCP_ID; /* Get latest info. */ 112 113 if lv_list (i).rcp_id = "0"b /* Is this a free entry? */ 114 then if freex = 0 /* Yes, is it the first free entry? */ 115 then freex = i; /* Yes, remember this entry. */ 116 else; /* No, we already have an entry. */ 117 else if lv_list (i).volume_name = lv_name 118 then do; /* Entry taken, and by this lv. */ 119 ecode = error_table_$resource_assigned; 120 rcp_id = lv_list (i).rcp_id; /* Return so check call can go. */ 121 goto ADD_LV_RETURN; 122 end; 123 end; 124 125 if freex = 0 /* Did we find a free entry? */ 126 then do; /* No, all taken. */ 127 ecode = error_table_$noalloc; 128 goto ADD_LV_RETURN; 129 end; 130 131 listx = freex; /* First free is new one. */ 132 133 134 rcp_id_count = rcp_id_count + 1; /* Found entry. Gen new RCP ID. */ 135 addr (rcp_id) -> based_rcp_id.id_count = rcp_id_count; 136 addr (rcp_id) -> based_rcp_id.index = listx; 137 138 139 lv_list (listx).lvatep = lv_request_communicator_$alloc_lvate (ecode); 140 if ecode ^= 0 then go to ADD_LV_RETURN; 141 142 call lv_request_communicator_$intent_to_mount (lv_list (listx).lvatep, lv_name, event_id, ecode); 143 /* Fill in entry, send message */ 144 if ecode ^= 0 then go to ADD_LV_RETURN; 145 146 lv_list (listx).volume_name = lv_name; /* Fill entry with lv info. */ 147 lv_list (listx).r0_accepted = "0"b; /* Haven't checked into ring 0 yet. */ 148 lv_list (listx).lvid = lvid; 149 lv_list (listx).state_time = clock_ (); 150 lv_list (listx).rcp_id = rcp_id; /* This marks entry as being used. */ 151 152 ADD_LV_RETURN: 153 arg_rcp_id = rcp_id; 154 arg_ecode = ecode; 155 return; 156 /* */ 157 del_lv: entry (arg_rcp_id, arg_ecode); 158 159 /* This entry is called to remove an lv from the list of attached lvs. 160**/ 161 162 rcp_id = arg_rcp_id; /* Copy RCP ID argument. */ 163 164 call CHECK_RCP_ID; /* Check that this RCP ID is valid. */ 165 if ecode = 0 166 then do; 167 call lv_request_communicator_$intent_to_detach (lv_list (listx).lvatep, ecode); 168 lv_list (listx).rcp_id = "0"b; /* free local entry */ 169 ecode = 0; /* Dont care */ 170 end; 171 172 arg_ecode = ecode; 173 return; 174 175 176 177 178 179 180 181 182 check: entry (arg_rcp_id, arg_lvid, arg_statex, arg_ecode); 183 184 /* This entry is called to check that the specified (by RCP ID) lv 185* * is really still attached. If it is the ID of the lv will be returned. 186**/ 187 188 rcp_id = arg_rcp_id; 189 190 call CHECK_RCP_ID; /* Check that this RCP ID is valid. */ 191 if ecode = 0 192 then arg_lvid = lv_list (listx).lvid; /* Get lv ID. */ 193 else arg_lvid = "0"b; 194 195 if ecode = 0 & statex = 0 then if ^lv_list (listx).r0_accepted then do; 196 call admin_gate_$attach_lv (lv_list (listx).lvid, ecode); 197 if ecode = 0 then lv_list (listx).r0_accepted = "1"b; 198 end; 199 200 arg_ecode = ecode; 201 arg_statex = statex; 202 return; 203 /* */ 204 number: entry (arg_num_lvs); 205 206 /* This entry returns the current number of attached lvs. 207**/ 208 num_lvs = 0; /* Init. */ 209 210 do i = 1 to hbound (lv_list, 1); /* Test all possible entries. */ 211 212 rcp_id = lv_list (i).rcp_id; 213 call CHECK_RCP_ID; /* Get latest info on validity. */ 214 215 if lv_list (i).rcp_id ^= "0"b /* Is this entry being used? */ 216 then num_lvs = num_lvs + 1; /* Yes, there is an attached lv here. */ 217 end; 218 219 arg_num_lvs = num_lvs; 220 return; 221 222 223 224 225 226 227 228 copy: entry (arg_rli_ptr); 229 230 /* This entry is called to fill in info about all attached lvs. 231**/ 232 rli_ptr = arg_rli_ptr; /* Get pointer to RLI structure. */ 233 234 rli.head.num_lv = hbound (lv_list, 1); /* Set max number for now. */ 235 num_lvs = 0; /* Init to count attached lvs. */ 236 237 do i = 1 to hbound (lv_list, 1); /* Test all possible entries. */ 238 rcp_id = lv_list (i).rcp_id; 239 call CHECK_RCP_ID; /* Get latest info on validity. */ 240 241 if lv_list (i).rcp_id ^= "0"b /* Is this entry being used? */ 242 then do; /* Yes, copy info. */ 243 num_lvs = num_lvs + 1; /* Up count. */ 244 lv_ptr = addr (rli.lvs (num_lvs)); 245 lv.volume_name = lv_list (i).volume_name; 246 lv.state_time = lv_list (i).state_time; 247 lv.rcp_id = lv_list (i).rcp_id; 248 end; 249 end; 250 251 rli.head.num_lv = num_lvs; /* Set real count. */ 252 253 return; 254 /* */ 255 CHECK_RCP_ID: procedure; 256 257 /* This internal procedure is called to validate the RCP ID argument. 258* * If it is valid it will return the index to the lv_list entry that 259* * corresponds to the RCP ID. 260**/ 261 262 listx = addr (rcp_id) -> based_rcp_id.index; /* Get array index. */ 263 if (listx = 0) | /* Is index part of RCP ID valid? */ 264 (listx > hbound (lv_list, 1)) 265 then do; /* No. */ 266 ecode = error_table_$bad_index; 267 return; 268 end; 269 270 if lv_list (listx).rcp_id = rcp_id /* Is this RCP ID valid? */ 271 then ecode = 0; /* Yes. */ 272 else do; /* Bad, bad */ 273 ecode = error_table_$resource_unassigned; 274 return; 275 end; 276 277 call lv_request_communicator_$check (lv_list (listx).lvatep, statex, ecode); 278 279 if ecode ^= 0 then do; /* Invalidate lv_list slot, abandon entry */ 280 if lv_list (listx).r0_accepted 281 then call admin_gate_$detach_lv (lv_list (listx).lvid, (0)); 282 /* Get it out of ring 0. */ 283 call lv_request_communicator_$abandon (lv_list (listx).lvatep); 284 lv_list (listx).rcp_id = "0"b; 285 end; 286 287 end CHECK_RCP_ID; 288 289 end rcp_lv_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0805.5 rcp_lv_.pl1 >spec>install>1111>rcp_lv_.pl1 91 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. addr builtin function dcl 75 ref 135 136 244 262 admin_gate_$attach_lv 000422 constant entry external dcl 82 ref 196 admin_gate_$detach_lv 000424 constant entry external dcl 83 ref 280 arg_ecode parameter fixed bin(35,0) dcl 30 set ref 93 154* 157 172* 182 200* arg_event_id parameter fixed bin(71,0) dcl 31 ref 93 103 arg_lv_name parameter char packed unaligned dcl 33 ref 93 101 arg_lvid parameter bit(36) dcl 32 set ref 93 102 182 191* 193* arg_num_lvs parameter fixed bin(17,0) dcl 34 set ref 204 219* arg_rcp_id parameter bit(36) dcl 35 set ref 93 152* 157 162 182 188 arg_rli_ptr parameter pointer dcl 36 ref 228 232 arg_statex parameter fixed bin(17,0) dcl 37 set ref 182 201* attach based structure level 1 dcl 1-57 based_rcp_id based structure level 1 dcl 56 clock_ 000426 constant entry external dcl 84 ref 149 dassign based structure level 1 dcl 1-41 device_resv based structure level 1 dcl 1-79 ecode 000100 automatic fixed bin(35,0) dcl 42 set ref 105* 119* 127* 139* 140 142* 144 154 165 167* 169* 172 191 195 196* 197 200 266* 270* 273* 277* 279 error_table_$bad_index 000412 external static fixed bin(35,0) dcl 77 ref 266 error_table_$noalloc 000414 external static fixed bin(35,0) dcl 78 ref 127 error_table_$resource_assigned 000416 external static fixed bin(35,0) dcl 79 ref 119 error_table_$resource_unassigned 000420 external static fixed bin(35,0) dcl 80 ref 273 event_id 000102 automatic fixed bin(71,0) dcl 43 set ref 103* 142* freex 000122 automatic fixed bin(17,0) dcl 51 set ref 107* 113 113* 125 131 hbound builtin function dcl 75 ref 108 210 234 237 263 head based structure level 2 dcl 1-19 i 000115 automatic fixed bin(17,0) dcl 46 set ref 108* 110 113 113 117 120* 210* 212 215* 237* 238 241 245 246 247* id_count based fixed bin(17,0) level 2 packed packed unaligned dcl 56 set ref 135* index 0(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 56 set ref 136* 262 listx 000116 automatic fixed bin(17,0) dcl 47 set ref 131* 136 139 142 146 147 148 149 150 167 168 191 195 196 197 262* 263 263 270 277 280 280 283 284 lv based structure level 1 dcl 1-74 lv_list 000012 internal static structure array level 1 dcl 64 set ref 108 210 234 237 263 lv_name 000105 automatic char(32) packed unaligned dcl 45 set ref 101* 117 142* 146 lv_ptr 000126 automatic pointer dcl 1-13 set ref 244* 245 246 247 lv_request_communicator_$abandon 000432 constant entry external dcl 86 ref 283 lv_request_communicator_$alloc_lvate 000430 constant entry external dcl 85 ref 139 lv_request_communicator_$check 000434 constant entry external dcl 87 ref 277 lv_request_communicator_$intent_to_detach 000440 constant entry external dcl 89 ref 167 lv_request_communicator_$intent_to_mount 000436 constant entry external dcl 88 ref 142 lvatep 10 000012 internal static pointer array level 2 dcl 64 set ref 139* 142* 167* 277* 283* lvid 000104 automatic bit(36) dcl 44 in procedure "rcp_lv_" set ref 102* 148 lvid 13 000012 internal static bit(36) array level 2 in structure "lv_list" dcl 64 in procedure "rcp_lv_" set ref 148* 191 196* 280* lvs based structure array level 2 dcl 1-19 set ref 244 num_attach 3 based fixed bin(17,0) level 3 dcl 1-19 ref 244 num_dassign 2 based fixed bin(17,0) level 3 dcl 1-19 ref 244 num_lv 1 based fixed bin(17,0) level 3 dcl 1-19 set ref 234* 251* num_lvs 000117 automatic fixed bin(17,0) dcl 48 set ref 208* 215* 215 219 235* 243* 243 244 251 r0_accepted 12 000012 internal static bit(1) array level 2 dcl 64 set ref 147* 195 197* 280 rcp_id 14 000012 internal static bit(36) array level 2 in structure "lv_list" dcl 64 in procedure "rcp_lv_" set ref 110 113 120 150* 168* 212 215 238 241 247 270 284* rcp_id 12 based bit(36) level 2 in structure "lv" dcl 1-74 in procedure "rcp_lv_" set ref 247* rcp_id 000120 automatic bit(36) dcl 49 in procedure "rcp_lv_" set ref 104* 110* 120* 135 136 150 152 162* 188* 212* 238* 262 270 rcp_id_count 000010 internal static fixed bin(17,0) initial dcl 62 set ref 134* 134 135 rli based structure level 1 dcl 1-19 rli_header based structure level 1 dcl 1-33 rli_ptr 000124 automatic pointer dcl 1-10 set ref 232* 234 244 251 state_time 10 based fixed bin(71,0) level 2 in structure "lv" dcl 1-74 in procedure "rcp_lv_" set ref 246* state_time 16 000012 internal static fixed bin(71,0) array level 2 in structure "lv_list" dcl 64 in procedure "rcp_lv_" set ref 149* 246 statex 000121 automatic fixed bin(17,0) dcl 50 set ref 195 201 277* vol_resv based structure level 1 dcl 1-85 volume_name 000012 internal static char(32) array level 2 in structure "lv_list" dcl 64 in procedure "rcp_lv_" set ref 117 146* 245 volume_name based char(32) level 2 in structure "lv" dcl 1-74 in procedure "rcp_lv_" set ref 245* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. attach_ptr automatic pointer dcl 1-12 dassign_ptr automatic pointer dcl 1-11 device_resv_ptr automatic pointer dcl 1-14 rli_version_4 internal static fixed bin(17,0) initial dcl 1-17 vol_resv_ptr automatic pointer dcl 1-15 NAMES DECLARED BY EXPLICIT CONTEXT. ADD_LV_RETURN 000225 constant label dcl 152 ref 121 128 140 144 CHECK_RCP_ID 000534 constant entry internal dcl 255 ref 111 164 190 213 239 add_lv 000023 constant entry external dcl 93 check 000305 constant entry external dcl 182 copy 000436 constant entry external dcl 228 del_lv 000236 constant entry external dcl 157 number 000376 constant entry external dcl 204 rcp_lv_ 000010 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 1034 1476 630 1044 Length 1720 630 442 205 203 402 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rcp_lv_ 136 external procedure is an external procedure. CHECK_RCP_ID internal procedure shares stack frame of external procedure rcp_lv_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 rcp_id_count rcp_lv_ 000012 lv_list rcp_lv_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rcp_lv_ 000100 ecode rcp_lv_ 000102 event_id rcp_lv_ 000104 lvid rcp_lv_ 000105 lv_name rcp_lv_ 000115 i rcp_lv_ 000116 listx rcp_lv_ 000117 num_lvs rcp_lv_ 000120 rcp_id rcp_lv_ 000121 statex rcp_lv_ 000122 freex rcp_lv_ 000124 rli_ptr rcp_lv_ 000126 lv_ptr rcp_lv_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. admin_gate_$attach_lv admin_gate_$detach_lv clock_ lv_request_communicator_$abandon lv_request_communicator_$alloc_lvate lv_request_communicator_$check lv_request_communicator_$intent_to_detach lv_request_communicator_$intent_to_mount THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_index error_table_$noalloc error_table_$resource_assigned error_table_$resource_unassigned LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000007 93 000015 101 000043 102 000051 103 000053 104 000055 105 000056 107 000057 108 000060 110 000065 111 000071 113 000072 116 000104 117 000105 119 000112 120 000114 121 000115 123 000116 125 000120 127 000122 128 000125 131 000126 134 000127 135 000131 136 000134 139 000136 140 000150 142 000152 144 000200 146 000202 147 000210 148 000211 149 000213 150 000221 152 000225 154 000227 155 000231 157 000232 162 000250 164 000252 165 000253 167 000255 168 000271 169 000274 172 000275 173 000277 182 000300 188 000317 190 000321 191 000322 193 000333 195 000335 196 000347 197 000357 200 000365 201 000367 202 000372 204 000373 208 000403 210 000404 212 000411 213 000415 215 000416 217 000425 219 000427 220 000432 228 000433 232 000443 234 000447 235 000451 237 000452 238 000457 239 000463 241 000464 243 000472 244 000473 245 000515 246 000522 247 000524 249 000526 251 000530 253 000533 255 000534 262 000535 263 000541 266 000544 267 000547 270 000550 273 000560 274 000562 277 000563 279 000575 280 000577 283 000614 284 000624 287 000627 ----------------------------------------------------------- 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