COMPILATION LISTING OF SEGMENT find_common_acl_names_ Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-05-05_1832.99_Fri_mdt 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 find_common_acl_names_: proc (a_access_name, a_names_ptr, a_datap, /* input args */ 12 a_count, a_missing_component, a_already_used, a_code); /* output args */ 13 14 15 /* DECLARATIONS */ 16 17 18 /* fixed point */ 19 20 dcl ( 21 a_acl_count, 22 a_count, 23 a_ex_acl_type, 24 a_type, 25 count init (0), 26 i, 27 j 28 ) fixed bin aligned; 29 30 dcl ( 31 a_code, 32 code init (0), 33 error_table_$badcall ext, 34 error_table_$badstar ext, 35 error_table_$out_of_sequence ext 36 ) fixed bin (35) aligned; 37 38 39 /* pointers */ 40 41 dcl ( 42 a_datap, 43 a_names_ptr, 44 a_caller_areap, 45 names_ptr, 46 procp int static init (null) 47 ) ptr aligned; 48 49 50 /* bit strings */ 51 52 dcl ( 53 a_already_used, 54 a_missing_component, 55 match_found, 56 missing_component init ("0"b) 57 ) bit (1) aligned; 58 59 60 /* character strings */ 61 62 dcl ( 63 a_access_name 64 ) char (*); 65 66 dcl ( 67 a_en, 68 component (3), 69 component2 (3) 70 ) char (32) aligned; 71 72 dcl ( 73 a_dn 74 ) char (168) aligned; 75 76 77 /* based structures */ 78 79 dcl 1 acl (acl_count) aligned based (aclp), 80 2 access_name char (32) aligned, 81 2 modes bit (real_access_bit_length) aligned, 82 2 extended_access bit (extended_access_bit_length) aligned, 83 2 reterr fixed bin (35) aligned; 84 85 dcl acl_entry_already_used (acl_count) bit (1) unaligned based (bsp); 86 87 dcl 1 data aligned based (a_datap), 88 2 aclp pointer, 89 2 bsp pointer, 90 2 acl_count fixed bin(17), 91 2 extended_access_bit_length fixed bin(17), 92 2 real_access_bit_length fixed bin(17); 93 94 dcl name_array (acl_count) char (32) aligned based (names_ptr); 95 96 97 /* include files */ 98 1 1 /* BEGIN include file extended_access_data */ 1 2 1 3 dcl typ_count int static init (2) fixed bin aligned; 1 4 1 5 dcl 1 segdata (2) aligned int static, 1 6 2 gate_name char (32) aligned init 1 7 ("message_segment_", "mailbox_"), 1 8 2 acl_prefix char (8) var aligned init 1 9 ("ms_", "mbx_"), 1 10 2 segment_suffix_length fixed bin aligned init 1 11 (3, 4), 1 12 2 segment_suffix char (8) aligned init 1 13 (".ms", ".mbx"), 1 14 2 full_extended_access bit (36) aligned init 1 15 ("111110000000000000000000000000000000"b, "111111100000000000000000000000000000"b), 1 16 2 first_extended_access_bit fixed bin aligned init 1 17 (1, 1), 1 18 2 mode_letter_count fixed bin aligned init 1 19 (5, 7), 1 20 2 mode_letters (36) char (1) unaligned init ( 1 21 "a", "d", "r", "o", "s", (31) (1) "", 1 22 "a", "d", "r", "o", "s", "w", "u", (29) (1) ""); 1 23 1 24 /* END include file extended_access_data */ 99 100 101 102 /* builtin functions */ 103 104 dcl ( 105 addr, 106 index, 107 length, 108 null, 109 substr, 110 verify 111 ) builtin; 112 113 114 /* entries */ 115 116 dcl cu_$ptr_call ext entry 117 options (variable); 118 119 dcl hcs_$make_ptr ext entry 120 (ptr aligned, char (*) aligned, char (*) aligned, ptr aligned, fixed bin (35) aligned); 121 122 /* */ 123 124 a_count = 0; 125 names_ptr = a_names_ptr; 126 a_already_used = "0"b; 127 a_missing_component = "0"b; 128 a_code = 0; 129 130 if aclp = null 131 then call return (error_table_$out_of_sequence); 132 133 call set_components (a_access_name, component); 134 do i = 1 to 3 while (^missing_component); 135 if component (i) = "" 136 then missing_component = "1"b; 137 end; 138 139 do i = 1 to acl_count; 140 call set_components (substr (acl (i).access_name, 1, 32), component2); 141 match_found = "1"b; 142 do j = 1 to 3 while (match_found); 143 if component (j) ^= "" 144 then if component (j) ^= component2 (j) 145 then match_found = "0"b; 146 end; 147 if match_found 148 then do; 149 if acl_entry_already_used (i) 150 then a_already_used = "1"b; 151 else 152 do; 153 count = count + 1; 154 name_array (count) = acl (i).access_name; 155 acl_entry_already_used (i) = "1"b; 156 end; 157 end; 158 end; 159 160 if count > 0 161 then a_count = count; 162 a_missing_component = missing_component; 163 164 go to RETURN; 165 166 167 init: entry (a_dn, a_en, a_type, a_ex_acl_type, a_caller_areap, a_datap, a_code); 168 169 a_code = 0; 170 acl_count = 0; 171 aclp = null; 172 bsp = null; 173 174 if a_type = 5 175 then do; 176 extended_access_bit_length = 36; 177 real_access_bit_length = 36; 178 if a_ex_acl_type < 1 | a_ex_acl_type > typ_count 179 then call return (error_table_$badcall); 180 call hcs_$make_ptr 181 (null, segdata (a_ex_acl_type).gate_name, 182 segdata (a_ex_acl_type).acl_prefix||"acl_list", procp, code); 183 if procp = null 184 then call return (code); 185 acl_count = -1; 186 call cu_$ptr_call (procp, a_dn, a_en, aclp, acl_count, a_caller_areap, code); 187 if code ^= 0 188 then call return (code); 189 do i = 1 to acl_count; 190 if acl (i).reterr ^= 0 191 then call return (acl (i).reterr); 192 end; 193 end; 194 195 else 196 call return (error_table_$badcall); 197 198 if code ^= 0 199 then call return (code); 200 201 return; 202 203 204 /* ------------------------------------------------------------------------- */ 205 RETURN: return; 206 207 /* */ 208 209 /* ------------------ */ 210 /* LEVEL 1 PROCEDURES */ 211 /* ------------------ */ 212 213 set_components: proc (sc_access_name, sc_component); 214 215 dcl ( 216 sc_dot_count init (0), 217 sc_dot_loc (2) init ((2) 0), 218 sc_i, 219 sc_len 220 ) fixed bin aligned; 221 222 dcl ( 223 sc_access_name 224 ) char (*); 225 226 dcl ( 227 sc_component (3) 228 ) char (32) aligned; 229 230 231 do sc_i = 1 to 3; 232 sc_component (sc_i) = ""; 233 end; 234 235 if sc_access_name = "." 236 then do; 237 sc_component(3) = "*"; 238 sc_access_name = "..*"; 239 return; 240 end; 241 242 sc_len = index (sc_access_name, " ") - 1; 243 if sc_len = -1 244 then sc_len = length (sc_access_name); 245 else if verify(substr(sc_access_name,sc_len+1)," ")^=0 /* blanks inside the name */ 246 then call return(error_table_$badstar); 247 248 do sc_i = 1 to sc_len; 249 if substr (sc_access_name, sc_i, 1) = "." 250 then do; 251 sc_dot_count = sc_dot_count + 1; 252 if sc_dot_count > 2 253 then call return (error_table_$badstar); 254 sc_dot_loc (sc_dot_count) = sc_i; 255 end; 256 end; 257 258 if sc_dot_count = 0 259 then do; 260 sc_component (1) = sc_access_name; 261 sc_component (2), sc_component (3) = "*"; 262 substr(sc_access_name,sc_len+1,4) = ".*.*"; 263 end; 264 265 else 266 if sc_dot_count = 1 267 then do; 268 if sc_dot_loc (1) = 1 269 then do; 270 sc_component (2) = substr (sc_access_name, 2, sc_len-1); 271 sc_component (3) = "*"; 272 end; 273 else 274 do; 275 sc_component (1) = substr (sc_access_name, 1, sc_dot_loc (1)-1); 276 if sc_dot_loc (1) < sc_len 277 then sc_component (2) = substr (sc_access_name, sc_dot_loc (1)+1, sc_len-sc_dot_loc (1)); 278 sc_component (3) = "*"; 279 end; 280 substr(sc_access_name,sc_len+1,2) = ".*"; 281 end; 282 283 else /* sc_dot_count = 2 */ 284 do; 285 if sc_dot_loc (1) ^= 1 286 then sc_component (1) = substr (sc_access_name, 1, sc_dot_loc (1)-1); 287 if sc_dot_loc (1)+1 < sc_dot_loc (2) 288 then sc_component (2) = substr (sc_access_name, sc_dot_loc (1)+1, sc_dot_loc (2)-sc_dot_loc (1)-1); 289 if sc_dot_loc (2) < sc_len 290 then sc_component (3) = substr (sc_access_name, sc_dot_loc (2)+1, sc_len-sc_dot_loc (2)); 291 end; 292 293 return; 294 295 end set_components; 296 297 /* */ 298 /* ------------------ */ 299 /* LEVEL 2 PROCEDURES */ 300 /* ------------------ */ 301 302 return: proc (r_code); 303 304 dcl ( 305 r_code 306 ) fixed bin (35) aligned; 307 308 a_code = r_code; 309 go to RETURN; 310 311 end return; 312 313 314 end find_common_acl_names_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/05/00 1832.9 find_common_acl_names_.pl1 >udd>sm>ds>w>ml>find_common_acl_names_.pl1 99 1 01/10/75 1443.6 extended_access_data.incl.pl1 >ldd>incl>extended_access_data.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. a_access_name parameter char packed unaligned dcl 62 set ref 11 133* a_already_used parameter bit(1) dcl 52 set ref 11 126* 149* a_caller_areap parameter pointer dcl 41 set ref 167 186* a_code parameter fixed bin(35,0) dcl 30 set ref 11 128* 167 169* 308* a_count parameter fixed bin(17,0) dcl 20 set ref 11 124* 160* a_datap parameter pointer dcl 41 ref 11 130 139 140 140 140 140 140 140 140 140 140 140 149 154 154 154 154 154 155 167 170 171 172 176 177 185 186 186 189 190 190 190 190 190 190 190 190 190 190 190 190 190 190 a_dn parameter char(168) dcl 72 set ref 167 186* a_en parameter char(32) dcl 66 set ref 167 186* a_ex_acl_type parameter fixed bin(17,0) dcl 20 ref 167 178 178 180 180 a_missing_component parameter bit(1) dcl 52 set ref 11 127* 162* a_names_ptr parameter pointer dcl 41 ref 11 125 a_type parameter fixed bin(17,0) dcl 20 ref 167 174 access_name based char(32) array level 2 dcl 79 ref 140 140 154 acl based structure array level 1 dcl 79 acl_count 4 based fixed bin(17,0) level 2 dcl 87 set ref 139 170* 185* 186* 189 acl_entry_already_used based bit(1) array packed unaligned dcl 85 set ref 149 155* acl_prefix 10 000012 internal static varying char(8) initial array level 2 dcl 1-5 ref 180 aclp based pointer level 2 dcl 87 set ref 130 140 140 154 171* 186* 190 190 bsp 2 based pointer level 2 dcl 87 set ref 149 155 172* code 000103 automatic fixed bin(35,0) initial dcl 30 set ref 30* 180* 183* 186* 187 187* 198 198* component 000110 automatic char(32) array dcl 66 set ref 133* 135 143 143 component2 000140 automatic char(32) array dcl 66 set ref 140* 143 count 000100 automatic fixed bin(17,0) initial dcl 20 set ref 20* 153* 153 154 160 160 cu_$ptr_call 000104 constant entry external dcl 116 ref 186 data based structure level 1 dcl 87 error_table_$badcall 000076 external static fixed bin(35,0) dcl 30 set ref 178* 195* error_table_$badstar 000100 external static fixed bin(35,0) dcl 30 set ref 245* 252* error_table_$out_of_sequence 000102 external static fixed bin(35,0) dcl 30 set ref 130* extended_access_bit_length 5 based fixed bin(17,0) level 2 dcl 87 set ref 140 140 140 140 154 154 176* 190 190 190 190 190 190 gate_name 000012 internal static char(32) initial array level 2 dcl 1-5 set ref 180* hcs_$make_ptr 000106 constant entry external dcl 119 ref 180 i 000101 automatic fixed bin(17,0) dcl 20 set ref 134* 135* 139* 140 140 149 154 155* 189* 190 190* index builtin function dcl 104 ref 242 j 000102 automatic fixed bin(17,0) dcl 20 set ref 142* 143 143 143* length builtin function dcl 104 ref 243 match_found 000106 automatic bit(1) dcl 52 set ref 141* 142 143* 147 missing_component 000107 automatic bit(1) initial dcl 52 set ref 52* 134 135* 162 name_array based char(32) array dcl 94 set ref 154* names_ptr 000104 automatic pointer dcl 41 set ref 125* 154 null builtin function dcl 104 ref 130 171 172 180 180 183 procp 000010 internal static pointer initial dcl 41 set ref 180* 183 186* r_code parameter fixed bin(35,0) dcl 304 ref 302 308 real_access_bit_length 6 based fixed bin(17,0) level 2 dcl 87 set ref 140 140 140 140 154 154 177* 190 190 190 190 190 190 reterr based fixed bin(35,0) array level 2 dcl 79 set ref 190 190* sc_access_name parameter char packed unaligned dcl 222 set ref 213 235 238* 242 243 245 249 260 262* 270 275 276 280* 285 287 289 sc_component parameter char(32) array dcl 226 set ref 213 232* 237* 260* 261* 261* 270* 271* 275* 276* 278* 285* 287* 289* sc_dot_count 000202 automatic fixed bin(17,0) initial dcl 215 set ref 215* 251* 251 252 254 258 265 sc_dot_loc 000204 automatic fixed bin(17,0) initial array dcl 215 set ref 215* 215* 254* 268 275 276 276 276 285 285 287 287 287 287 287 289 289 289 sc_i 000206 automatic fixed bin(17,0) dcl 215 set ref 231* 232* 248* 249 254* sc_len 000207 automatic fixed bin(17,0) dcl 215 set ref 242* 243 243* 245 248 262 270 276 276 280 289 289 segdata 000012 internal static structure array level 1 dcl 1-5 substr builtin function dcl 104 set ref 140 140 245 249 262* 270 275 276 280* 285 287 289 typ_count constant fixed bin(17,0) initial dcl 1-3 ref 178 verify builtin function dcl 104 ref 245 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. a_acl_count automatic fixed bin(17,0) dcl 20 addr builtin function dcl 104 NAMES DECLARED BY EXPLICIT CONTEXT. RETURN 000617 constant label dcl 205 ref 164 309 find_common_acl_names_ 000036 constant entry external dcl 11 init 000325 constant entry external dcl 167 return 001137 constant entry internal dcl 302 ref 130 178 183 187 190 195 198 245 252 set_components 000620 constant entry internal dcl 213 ref 133 140 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1270 1400 1170 1300 Length 1604 1170 110 167 100 66 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME find_common_acl_names_ 232 external procedure is an external procedure. set_components internal procedure shares stack frame of external procedure find_common_acl_names_. return internal procedure shares stack frame of external procedure find_common_acl_names_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 procp find_common_acl_names_ 000012 segdata find_common_acl_names_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME find_common_acl_names_ 000100 count find_common_acl_names_ 000101 i find_common_acl_names_ 000102 j find_common_acl_names_ 000103 code find_common_acl_names_ 000104 names_ptr find_common_acl_names_ 000106 match_found find_common_acl_names_ 000107 missing_component find_common_acl_names_ 000110 component find_common_acl_names_ 000140 component2 find_common_acl_names_ 000202 sc_dot_count set_components 000204 sc_dot_loc set_components 000206 sc_i set_components 000207 sc_len set_components THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc return_mac shorten_stack ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$ptr_call hcs_$make_ptr THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badcall error_table_$badstar error_table_$out_of_sequence LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 20 000023 30 000024 52 000025 11 000030 124 000055 125 000057 126 000062 127 000063 128 000064 130 000065 133 000101 134 000117 135 000127 137 000140 139 000142 140 000153 141 000203 142 000205 143 000215 146 000232 147 000234 149 000236 153 000252 154 000253 155 000302 158 000305 160 000307 162 000313 164 000316 167 000317 169 000336 170 000340 171 000343 172 000345 174 000350 176 000353 177 000357 178 000360 180 000374 183 000451 185 000461 186 000465 187 000525 189 000531 190 000543 192 000600 193 000602 195 000603 198 000612 201 000616 205 000617 213 000620 215 000631 231 000641 232 000647 233 000656 235 000660 237 000667 238 000673 239 000676 242 000677 243 000707 245 000714 248 000740 249 000747 251 000755 252 000756 254 000770 256 000773 258 000775 260 000777 261 001006 262 001014 263 001020 265 001021 268 001023 270 001026 271 001036 272 001041 275 001042 276 001051 278 001062 280 001065 281 001071 285 001072 287 001104 289 001122 293 001136 302 001137 308 001141 309 001144 ----------------------------------------------------------- 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