COMPILATION LISTING OF SEGMENT forum_notifications_ Compiled by: Multics PL/I Compiler, Release 31a, of October 12, 1988 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 03/15/89 0830.3 mst Wed Options: optimize map 1 /* *************************************************************** 2* * * 3* * Copyright (c) 1982 by Massachusetts Institute of Technology * 4* * * 5* *************************************************************** */ 6 7 8 9 /****^ HISTORY COMMENTS: 10* 1) change(89-02-27,TLNguyen), approve(89-02-27,MCR8049), 11* audit(89-02-28,Parisek), install(89-03-15,MR12.3-1025): 12* a. replaced create_branch_version_1 with create_branch_version_2. 13* b. removed an automatic variable named hash since there are no 14* references to this variable. 15* END HISTORY COMMENTS */ 16 17 18 forum_notifications_$accept: 19 procedure (P_status); 20 21 /* Jay Pattin 03/26/82 */ 22 /* Reworked for move into ring 1 - Jay Pattin 11/6/82 */ 23 /* Gutted and redone Jeffrey I. Schiller 09/21/83 */ 24 /* Fixed write-down bug found during security audit - J. Spencer Love 10/05/84 */ 25 26 declare P_status fixed bin (35) parameter, 27 P_result bit (1) aligned parameter, 28 P_user_name char (*) parameter; 29 30 declare notify_seg_ptr ptr static init (null ()), 31 me char (22) static init (""), 32 my_authorization bit (72) aligned static init (""b), 33 my_lock_id bit (36) aligned static init (""b); 34 35 declare notify_seg_entry char (32) static options (constant) init ("Notifications Database"), 36 sentinel bit (36) aligned static options (constant) init ("123456765432"b3); 37 38 declare exit label variable, 39 (inner_ring, user_ring) fixed bin (3), 40 max_auth bit (72) aligned, 41 (notify_idx, chain, slot) fixed bin, 42 p ptr, 43 status fixed bin (35), 44 system_high bit (72) aligned, 45 user_name char (22); 46 47 declare forum_data_$central_directory char (168) external; 48 49 declare (error_table_$lock_wait_time_exceeded, 50 error_table_$invalid_lock_reset, 51 error_table_$locked_by_this_process, 52 error_table_$noentry, 53 error_table_$no_w_permission, 54 forum_error_table_$need_system_high, 55 forum_error_table_$no_notify_seg, 56 forum_error_table_$notify_seg_bad, 57 forum_error_table_$unexpected_fault) 58 fixed bin (35) external; 59 60 declare (addr, hbound, length, null, rtrim, unspec) 61 builtin, 62 (any_other, cleanup, no_write_permission) 63 condition; 64 65 declare 1 notify_seg aligned based (notify_seg_ptr), 66 2 sentinel bit (36) aligned, 67 2 lock bit (36) aligned, 68 2 first_free fixed bin, /* free list head */ 69 2 highest_used fixed bin, /* highest index actually in use */ 70 2 first_slot (200) fixed bin, /* hash table */ 71 2 user (0 refer (notify_seg.highest_used)), 72 3 name char (22), 73 3 lock_id bit (36) aligned, 74 3 authorization bit (72) aligned, 75 3 next_slot fixed bin; 76 77 declare 1 cbi aligned like create_branch_info; 78 79 declare convert_authorization_$from_string 80 entry (bit (72) aligned, char (*), fixed bin (35)), 81 get_authorization_ entry (bit (72) aligned), 82 get_max_authorization_ entry returns (bit (72) aligned), 83 get_lock_id_ entry (bit(36) aligned), 84 get_ring_ entry returns (fixed bin (3)), 85 hash_index_ entry (ptr, fixed bin, fixed bin, fixed bin) returns (fixed bin), 86 hcs_$create_branch_ entry (char(*), char(*), ptr, fixed bin(35)), 87 hcs_$delentry_file entry (char(*), char(*), fixed bin(35)), 88 hcs_$initiate entry (char(*), char(*), char(*), fixed bin(1), fixed bin(2), ptr, fixed bin(35)), 89 hcs_$level_get entry returns (fixed bin (3)), 90 hcs_$level_set entry (fixed bin (3)), 91 hcs_$terminate_noname entry (ptr, fixed bin(35)), 92 set_lock_$lock entry (bit(36) aligned, fixed bin, fixed bin(35)), 93 set_lock_$unlock entry (bit(36) aligned, fixed bin(35)), 94 user_info_$whoami entry (char(*), char(*), char(*)); 95 1 1 /* BEGIN INCLUDE FILE - - - create_branch_info.incl.pl1 - - - created January 1975 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(89-01-16,TLNguyen), approve(89-01-16,MCR8049), 1 6* audit(89-02-03,Parisek), install(89-03-15,MR12.3-1025): 1 7* 1. Declare version constant properly. 1 8* 2. Remove version 1 since it was never referenced and to force 1 9* callers to upgrade their programs. 1 10* END HISTORY COMMENTS */ 1 11 1 12 1 13 /* Modified December 1984 for dir_quota, Keith Loepere. */ 1 14 1 15 /* this include files gives the argument structure for create_branch_ */ 1 16 1 17 dcl 1 create_branch_info aligned based, 1 18 2 version fixed bin, /* set this to the largest value given below */ 1 19 2 switches unaligned, 1 20 3 dir_sw bit (1) unaligned, /* if on, a directory branch is wanted */ 1 21 3 copy_sw bit (1) unaligned, /* if on, initiating segment will be done by copying */ 1 22 3 chase_sw bit (1) unaligned, /* if on, if pathname is a link, it will be chased */ 1 23 3 priv_upgrade_sw bit (1) unaligned, /* privileged creation (ring 1) of upgraded object */ 1 24 3 parent_ac_sw bit (1) unaligned, /* if on, use parent's access class for seg or dir created */ 1 25 3 mbz1 bit (31) unaligned, /* pad to full word */ 1 26 2 mode bit (3) unaligned, /* segment or directory for acl for userid */ 1 27 2 mbz2 bit (33) unaligned, /* pad to full word */ 1 28 2 rings (3) fixed bin (3), /* branch's ring brackets */ 1 29 2 userid char (32), /* user's access control name */ 1 30 2 bitcnt fixed bin (24), /* bit count of the segment */ 1 31 2 quota fixed bin (18), /* for directories, this am't of quota will be moved to it */ 1 32 2 access_class bit (72), /* is the access class of the body of the branch */ 1 33 2 dir_quota fixed bin (18); /* for directories, this am't of dir quota will be moved to it */ 1 34 1 35 dcl create_branch_version_2 fixed bin int static options (constant) init (2); 1 36 1 37 /* END INCLUDE FILE - - - create_branch_info.incl.pl1 - - - */ 1 38 96 97 98 /* forum_notifications_$accept: 99* procedure (P_status); */ 100 101 user_ring = hcs_$level_get (); 102 on cleanup call unlock_db (); 103 call initialize (ACCEPT_EXIT); 104 105 call lock_db (); 106 107 notify_idx = lookup (me, chain); 108 if notify_idx = 0 then do; 109 slot = allocate_slot (); 110 call thread_in (chain, slot); 111 end; 112 113 call unlock_db (); 114 115 P_status = 0; 116 return; 117 118 ACCEPT_EXIT: 119 REFUSE_EXIT: 120 P_status = status; 121 call unlock_db (); 122 return; 123 124 forum_notifications_$accept_test: entry (P_user_name, P_status); 125 126 user_name = P_user_name; 127 user_ring = hcs_$level_get (); 128 on cleanup call unlock_db (); 129 call initialize (ACCEPT_EXIT); 130 131 call lock_db (); 132 133 notify_idx = lookup (user_name, chain); 134 if notify_idx = 0 then do; 135 slot = allocate_slot (); 136 notify_seg.user (slot).name = user_name; 137 call thread_in (chain, slot); 138 end; 139 140 call unlock_db (); 141 142 P_status = 0; 143 return; 144 145 forum_notifications_$refuse: 146 entry (P_status); 147 148 user_ring = hcs_$level_get (); 149 on cleanup call unlock_db (); 150 call initialize (REFUSE_EXIT); 151 152 call lock_db (); 153 154 notify_idx = lookup (me, chain); 155 156 if notify_idx > 0 then do; 157 call thread_out (chain, notify_idx); 158 call free_slot (notify_idx); 159 end; 160 161 call unlock_db (); 162 163 P_status = 0; 164 return; 165 166 forum_notifications_$lookup: 167 entry (P_user_name, P_result, P_status); 168 169 user_ring = hcs_$level_get (); 170 on cleanup call unlock_db (); 171 call initialize (LOOKUP_EXIT); 172 173 call lock_db (); 174 175 user_name = P_user_name; 176 notify_idx = lookup (user_name, chain); 177 178 if notify_idx = 0 then P_result = "0"b; 179 else P_result = "1"b; 180 181 call unlock_db (); 182 P_status = 0; 183 return; 184 185 LOOKUP_EXIT: 186 P_status = status; 187 P_result = "0"b; 188 call unlock_db (); 189 return; 190 191 forum_notifications_$init: 192 entry (P_status); 193 194 exit = INIT_EXIT; 195 inner_ring = get_ring_ (); 196 user_ring = hcs_$level_get (); 197 198 on cleanup begin; 199 call hcs_$delentry_file (forum_data_$central_directory, notify_seg_entry, (0)); 200 call hcs_$level_set (user_ring); 201 end; 202 on any_other call error (forum_error_table_$unexpected_fault); 203 204 call convert_authorization_$from_string (system_high, "system_high", status); 205 if status ^= 0 then call error (status); 206 max_auth = get_max_authorization_ (); 207 if max_auth ^= system_high then call error (forum_error_table_$need_system_high); 208 209 call hcs_$level_set (inner_ring); 210 call hcs_$delentry_file (forum_data_$central_directory, notify_seg_entry, status); 211 if status ^= 0 & status ^= error_table_$noentry then call error (status); 212 213 unspec (cbi) = ""b; 214 cbi.version = create_branch_version_2; 215 cbi.priv_upgrade_sw = "1"b; 216 cbi.mode = "101"b; /* RW */ 217 cbi.rings (*) = inner_ring; 218 cbi.userid = "*.*.*"; 219 cbi.access_class = max_auth; 220 221 call hcs_$create_branch_ (forum_data_$central_directory, notify_seg_entry, addr (cbi), status); 222 if status ^= 0 then call error (status); 223 224 call hcs_$initiate (forum_data_$central_directory, notify_seg_entry, "", 0, 0, notify_seg_ptr, status); 225 if notify_seg_ptr = null () then call error (status); 226 227 notify_seg.first_free, notify_seg.highest_used = 0; 228 notify_seg.sentinel = sentinel; 229 230 p = notify_seg_ptr; 231 notify_seg_ptr = null (); 232 call hcs_$terminate_noname (p, (0)); 233 234 call hcs_$level_set (user_ring); 235 P_status = 0; 236 return; 237 238 INIT_EXIT: 239 call hcs_$delentry_file (forum_data_$central_directory, notify_seg_entry, (0)); 240 call hcs_$level_set (user_ring); 241 P_status = status; 242 return; 243 244 lock_db: 245 procedure; 246 247 on no_write_permission call error (error_table_$no_w_permission); 248 249 call set_lock_$lock (notify_seg.lock, 5, status); 250 if status ^= 0 & status ^= error_table_$invalid_lock_reset then call error (status); 251 252 return; 253 end lock_db; 254 255 unlock_db: 256 procedure; 257 258 on no_write_permission begin; 259 goto PUNT; 260 end; 261 262 if notify_seg_ptr ^= null () then 263 call set_lock_$unlock (notify_seg.lock, (0)); 264 PUNT: 265 call hcs_$level_set (user_ring); 266 return; 267 end unlock_db; 268 269 270 lookup: proc (user_name, hash) returns (fixed bin); 271 dcl user_name char (*); 272 dcl hash fixed bin; 273 dcl last_slot fixed bin; 274 dcl slot fixed bin; 275 276 hash = hash_index_ (addr (user_name), length (rtrim (user_name)), 0, hbound (notify_seg.first_slot, 1)) + 1; 277 278 lookup_retry: 279 last_slot = 0; 280 do slot = notify_seg.first_slot (hash) repeat notify_seg.user (slot).next_slot while (slot ^= 0); 281 NEXT: call set_lock_$lock (notify_seg.user.lock_id (slot), 0, status); 282 if status ^= error_table_$lock_wait_time_exceeded & status ^= error_table_$locked_by_this_process then do; 283 call thread_out (chain, slot); 284 call free_slot (slot); 285 goto lookup_retry; 286 end; 287 else if notify_seg.user (slot).name = user_name then do; 288 if notify_seg.user (slot).authorization = my_authorization 289 then return (slot); 290 end; 291 else last_slot = slot; 292 end; 293 294 return (0); 295 296 end lookup; 297 298 allocate_slot: procedure () returns (fixed bin); 299 dcl slot fixed bin; 300 301 if notify_seg.first_free = 0 then call gc (); 302 303 slot = notify_seg.first_free; 304 notify_seg.first_free = notify_seg.user (slot).next_slot; 305 306 notify_seg.user (slot).name = me; 307 notify_seg.user (slot).lock_id = my_lock_id; 308 notify_seg.user (slot).authorization = my_authorization; 309 notify_seg.user (slot).next_slot = 0; 310 311 return (slot); 312 end allocate_slot; 313 314 free_slot: proc (slot); 315 dcl slot fixed bin; 316 317 notify_seg.user (slot).name = ""; 318 notify_seg.user (slot).lock_id = ""b; 319 notify_seg.user (slot).authorization = ""b; 320 notify_seg.user (slot).next_slot = notify_seg.first_free; 321 notify_seg.first_free = slot; 322 return; 323 end free_slot; 324 325 thread_in: proc (chain, inslot); 326 dcl (chain, inslot) fixed bin; 327 dcl slot fixed bin; 328 dcl last_slot fixed bin; 329 330 last_slot = 0; 331 do slot = notify_seg.first_slot (chain) repeat notify_seg.user (slot).next_slot while (slot ^= 0); 332 last_slot = slot; 333 end; 334 if last_slot = 0 then 335 notify_seg.first_slot (chain) = inslot; 336 else notify_seg.user (last_slot).next_slot = inslot; 337 338 return; 339 340 end thread_in; 341 342 thread_out: proc (chain, outslot); 343 dcl chain fixed bin; 344 dcl outslot fixed bin; 345 dcl last_slot fixed bin; 346 dcl slot fixed bin; 347 348 last_slot = 0; 349 do slot = notify_seg.first_slot (chain) repeat notify_seg.user (slot).next_slot while (slot ^= 0); 350 if slot = outslot then do; 351 if last_slot = 0 then notify_seg.first_slot (chain) = 352 notify_seg.user (slot).next_slot; 353 else notify_seg.user (last_slot).next_slot = 354 notify_seg.user (slot).next_slot; 355 notify_seg.user (slot).next_slot = 0; 356 return; 357 end; 358 last_slot = slot; 359 end; 360 return; 361 end thread_out; 362 363 364 gc: proc (); 365 dcl (idx, slot) fixed bin; 366 dcl freed bit (1) aligned; 367 368 freed = "0"b; 369 do idx = 1 to hbound (notify_seg.first_slot, 1); 370 retry_gc_idx: 371 do slot = notify_seg.first_slot (idx) repeat notify_seg.user (slot).next_slot while (slot > 0); 372 call set_lock_$lock (notify_seg.user.lock_id (slot), 0, status); 373 if status ^= error_table_$lock_wait_time_exceeded & 374 status ^= error_table_$locked_by_this_process then do; 375 call thread_out (idx, slot); 376 call free_slot (slot); 377 freed = "1"b; 378 goto retry_gc_idx; 379 end; 380 end; 381 end; 382 383 if ^freed then do; 384 notify_seg.highest_used = notify_seg.highest_used + 1; 385 notify_seg.first_free = notify_seg.highest_used; 386 end; 387 388 return; 389 end gc; 390 391 initialize: 392 procedure (P_exit); 393 394 declare P_exit label variable; 395 396 exit = P_exit; 397 inner_ring = get_ring_ (); 398 399 call hcs_$level_set (inner_ring); 400 401 if notify_seg_ptr = null () then do; 402 call hcs_$initiate (forum_data_$central_directory, notify_seg_entry, "", 0, 0, notify_seg_ptr, (0)); 403 if notify_seg_ptr = null () then call error (forum_error_table_$no_notify_seg); 404 if notify_seg.sentinel ^= sentinel then do; 405 call hcs_$terminate_noname (notify_seg_ptr, (0)); 406 notify_seg_ptr = null (); 407 call error (forum_error_table_$notify_seg_bad); 408 end; 409 call user_info_$whoami (me, "", ""); 410 call get_lock_id_ (my_lock_id); 411 call get_authorization_ (my_authorization); 412 end; 413 414 return; 415 end initialize; 416 417 418 error: 419 procedure (P_status); 420 421 declare P_status fixed bin (35); 422 423 status = P_status; 424 goto exit; 425 426 end error; 427 428 end forum_notifications_$accept; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 03/15/89 0759.5 forum_notifications_.pl1 >special_ldd>install>MR12.3-1025>forum_notifications_.pl1 96 1 03/15/89 0759.4 create_branch_info.incl.pl1 >special_ldd>install>MR12.3-1025>create_branch_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. P_exit parameter label variable dcl 394 ref 391 396 P_result parameter bit(1) dcl 26 set ref 166 178* 179* 187* P_status parameter fixed bin(35,0) dcl 421 in procedure "error" ref 418 423 P_status parameter fixed bin(35,0) dcl 26 in procedure "forum_notifications_$accept" set ref 18 115* 118* 124 142* 145 163* 166 182* 185* 191 235* 241* P_user_name parameter char packed unaligned dcl 26 ref 124 126 166 175 access_class 20 000144 automatic bit(72) level 2 dcl 77 set ref 219* addr builtin function dcl 60 ref 221 221 276 276 any_other 000130 stack reference condition dcl 60 ref 202 authorization 323 based bit(72) array level 3 dcl 65 set ref 288 308* 319* cbi 000144 automatic structure level 1 dcl 77 set ref 213* 221 221 chain 000111 automatic fixed bin(17,0) dcl 38 in procedure "forum_notifications_$accept" set ref 107* 110* 133* 137* 154* 157* 176* 283* chain parameter fixed bin(17,0) dcl 343 in procedure "thread_out" ref 342 349 351 chain parameter fixed bin(17,0) dcl 326 in procedure "thread_in" ref 325 331 334 cleanup 000136 stack reference condition dcl 60 ref 102 128 149 170 198 convert_authorization_$from_string 000050 constant entry external dcl 79 ref 204 create_branch_info based structure level 1 dcl 1-17 create_branch_version_2 constant fixed bin(17,0) initial dcl 1-35 ref 214 error_table_$invalid_lock_reset 000030 external static fixed bin(35,0) dcl 49 ref 250 error_table_$lock_wait_time_exceeded 000026 external static fixed bin(35,0) dcl 49 ref 282 373 error_table_$locked_by_this_process 000032 external static fixed bin(35,0) dcl 49 ref 282 373 error_table_$no_w_permission 000036 external static fixed bin(35,0) dcl 49 set ref 247* error_table_$noentry 000034 external static fixed bin(35,0) dcl 49 ref 211 exit 000100 automatic label variable dcl 38 set ref 194* 396* 424 first_free 2 based fixed bin(17,0) level 2 dcl 65 set ref 227* 301 303 304* 320 321* 385* first_slot 4 based fixed bin(17,0) array level 2 dcl 65 set ref 276 276 280 331 334* 349 351* 369 370 forum_data_$central_directory 000024 external static char(168) packed unaligned dcl 47 set ref 199* 210* 221* 224* 238* 402* forum_error_table_$need_system_high 000040 external static fixed bin(35,0) dcl 49 set ref 207* forum_error_table_$no_notify_seg 000042 external static fixed bin(35,0) dcl 49 set ref 403* forum_error_table_$notify_seg_bad 000044 external static fixed bin(35,0) dcl 49 set ref 407* forum_error_table_$unexpected_fault 000046 external static fixed bin(35,0) dcl 49 set ref 202* freed 000252 automatic bit(1) dcl 366 set ref 368* 377* 383 get_authorization_ 000052 constant entry external dcl 79 ref 411 get_lock_id_ 000056 constant entry external dcl 79 ref 410 get_max_authorization_ 000054 constant entry external dcl 79 ref 206 get_ring_ 000060 constant entry external dcl 79 ref 195 397 hash parameter fixed bin(17,0) dcl 272 set ref 270 276* 280 hash_index_ 000062 constant entry external dcl 79 ref 276 hbound builtin function dcl 60 ref 276 276 369 hcs_$create_branch_ 000064 constant entry external dcl 79 ref 221 hcs_$delentry_file 000066 constant entry external dcl 79 ref 199 210 238 hcs_$initiate 000070 constant entry external dcl 79 ref 224 402 hcs_$level_get 000072 constant entry external dcl 79 ref 101 127 148 169 196 hcs_$level_set 000074 constant entry external dcl 79 ref 200 209 234 240 264 399 hcs_$terminate_noname 000076 constant entry external dcl 79 ref 232 405 highest_used 3 based fixed bin(17,0) level 2 dcl 65 set ref 227* 384* 384 385 idx 000250 automatic fixed bin(17,0) dcl 365 set ref 369* 370 375* inner_ring 000104 automatic fixed bin(3,0) dcl 38 set ref 195* 209* 217 397* 399* inslot parameter fixed bin(17,0) dcl 326 ref 325 334 336 last_slot 000202 automatic fixed bin(17,0) dcl 273 in procedure "lookup" set ref 278* 291* last_slot 000231 automatic fixed bin(17,0) dcl 328 in procedure "thread_in" set ref 330* 332* 334 336 last_slot 000240 automatic fixed bin(17,0) dcl 345 in procedure "thread_out" set ref 348* 351 353 358* length builtin function dcl 60 ref 276 276 lock 1 based bit(36) level 2 dcl 65 set ref 249* 262* lock_id 322 based bit(36) array level 3 dcl 65 set ref 281* 307* 318* 372* max_auth 000106 automatic bit(72) dcl 38 set ref 206* 207 219 me 000012 internal static char(22) initial packed unaligned dcl 30 set ref 107* 154* 306 409* mode 2 000144 automatic bit(3) level 2 packed packed unaligned dcl 77 set ref 216* my_authorization 000020 internal static bit(72) initial dcl 30 set ref 288 308 411* my_lock_id 000022 internal static bit(36) initial dcl 30 set ref 307 410* name 314 based char(22) array level 3 dcl 65 set ref 136* 287 306* 317* next_slot 325 based fixed bin(17,0) array level 3 dcl 65 set ref 292 304 309* 320* 333 336* 351 353* 353 355* 359 380 no_write_permission 000000 stack reference condition dcl 60 ref 247 258 notify_idx 000110 automatic fixed bin(17,0) dcl 38 set ref 107* 108 133* 134 154* 156 157* 158* 176* 178 notify_seg based structure level 1 dcl 65 notify_seg_entry 000001 constant char(32) initial packed unaligned dcl 35 set ref 199* 210* 221* 224* 238* 402* notify_seg_ptr 000010 internal static pointer initial dcl 30 set ref 136 224* 225 227 227 228 230 231* 249 262 262 276 276 280 281 287 288 292 301 303 304 304 306 307 308 309 317 318 319 320 320 321 331 333 334 336 349 351 351 353 353 355 359 369 370 372 380 384 384 385 385 401 402* 403 404 405* 406* null builtin function dcl 60 ref 225 231 262 401 403 406 outslot parameter fixed bin(17,0) dcl 344 ref 342 350 p 000114 automatic pointer dcl 38 set ref 230* 232* priv_upgrade_sw 1(03) 000144 automatic bit(1) level 3 packed packed unaligned dcl 77 set ref 215* rings 3 000144 automatic fixed bin(3,0) array level 2 dcl 77 set ref 217* rtrim builtin function dcl 60 ref 276 276 sentinel based bit(36) level 2 in structure "notify_seg" dcl 65 in procedure "forum_notifications_$accept" set ref 228* 404 sentinel 000000 constant bit(36) initial dcl 35 in procedure "forum_notifications_$accept" ref 228 404 set_lock_$lock 000100 constant entry external dcl 79 ref 249 281 372 set_lock_$unlock 000102 constant entry external dcl 79 ref 262 slot parameter fixed bin(17,0) dcl 315 in procedure "free_slot" ref 314 317 318 319 320 321 slot 000230 automatic fixed bin(17,0) dcl 327 in procedure "thread_in" set ref 331* 331* 332* 333 slot 000212 automatic fixed bin(17,0) dcl 299 in procedure "allocate_slot" set ref 303* 304 306 307 308 309 311 slot 000203 automatic fixed bin(17,0) dcl 274 in procedure "lookup" set ref 280* 280* 281 283* 284* 287 288 288 291* 292 slot 000241 automatic fixed bin(17,0) dcl 346 in procedure "thread_out" set ref 349* 349* 350 351 353 355 358* 359 slot 000251 automatic fixed bin(17,0) dcl 365 in procedure "gc" set ref 370* 370* 372 375* 376* 380 slot 000112 automatic fixed bin(17,0) dcl 38 in procedure "forum_notifications_$accept" set ref 109* 110* 135* 136 137* status 000116 automatic fixed bin(35,0) dcl 38 set ref 118 185 204* 205 205* 210* 211 211 211* 221* 222 222* 224* 225* 241 249* 250 250 250* 281* 282 282 372* 373 373 423* switches 1 000144 automatic structure level 2 packed packed unaligned dcl 77 system_high 000120 automatic bit(72) dcl 38 set ref 204* 207 unspec builtin function dcl 60 set ref 213* user 314 based structure array level 2 dcl 65 user_info_$whoami 000104 constant entry external dcl 79 ref 409 user_name 000122 automatic char(22) packed unaligned dcl 38 in procedure "forum_notifications_$accept" set ref 126* 133* 136 175* 176* user_name parameter char packed unaligned dcl 271 in procedure "lookup" set ref 270 276 276 276 276 287 user_ring 000105 automatic fixed bin(3,0) dcl 38 set ref 101* 127* 148* 169* 196* 200* 234* 240* 264* userid 6 000144 automatic char(32) level 2 dcl 77 set ref 218* version 000144 automatic fixed bin(17,0) level 2 dcl 77 set ref 214* NAMES DECLARED BY EXPLICIT CONTEXT. ACCEPT_EXIT 000163 constant label dcl 118 ref 103 103 129 129 INIT_EXIT 001220 constant label dcl 238 ref 194 LOOKUP_EXIT 000537 constant label dcl 185 ref 171 171 NEXT 001506 constant label dcl 281 PUNT 001407 constant label dcl 264 ref 259 REFUSE_EXIT 000163 constant label dcl 118 set ref 150 150 allocate_slot 001576 constant entry internal dcl 298 ref 109 135 error 002266 constant entry internal dcl 418 ref 202 205 207 211 222 225 247 250 403 407 forum_notifications_$accept 000056 constant entry external dcl 18 forum_notifications_$accept_test 000176 constant entry external dcl 124 forum_notifications_$init 000552 constant entry external dcl 191 forum_notifications_$lookup 000430 constant entry external dcl 166 forum_notifications_$refuse 000316 constant entry external dcl 145 free_slot 001633 constant entry internal dcl 314 ref 158 284 376 gc 001775 constant entry internal dcl 364 ref 301 initialize 002067 constant entry internal dcl 391 ref 103 129 150 171 lock_db 001255 constant entry internal dcl 244 ref 105 131 152 173 lookup 001420 constant entry internal dcl 270 ref 107 133 154 176 lookup_retry 001475 constant label dcl 278 ref 285 retry_gc_idx 002005 constant label dcl 370 ref 378 thread_in 001660 constant entry internal dcl 325 ref 110 137 thread_out 001722 constant entry internal dcl 342 ref 157 283 375 unlock_db 001344 constant entry internal dcl 255 ref 102 113 121 128 140 149 161 170 181 188 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3154 3262 2374 3164 Length 3620 2374 106 322 557 14 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME forum_notifications_$accept 324 external procedure is an external procedure. on unit on line 102 64 on unit on unit on line 128 64 on unit on unit on line 149 64 on unit on unit on line 170 64 on unit on unit on line 198 80 on unit on unit on line 202 70 on unit lock_db 80 internal procedure enables or reverts conditions. on unit on line 247 70 on unit unlock_db 78 internal procedure enables or reverts conditions. on unit on line 258 64 on unit lookup internal procedure shares stack frame of external procedure forum_notifications_$accept. allocate_slot internal procedure shares stack frame of external procedure forum_notifications_$accept. free_slot internal procedure shares stack frame of external procedure forum_notifications_$accept. thread_in internal procedure shares stack frame of external procedure forum_notifications_$accept. thread_out internal procedure shares stack frame of external procedure forum_notifications_$accept. gc internal procedure shares stack frame of external procedure forum_notifications_$accept. initialize internal procedure shares stack frame of external procedure forum_notifications_$accept. error 64 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 notify_seg_ptr forum_notifications_$accept 000012 me forum_notifications_$accept 000020 my_authorization forum_notifications_$accept 000022 my_lock_id forum_notifications_$accept STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME forum_notifications_$accept 000100 exit forum_notifications_$accept 000104 inner_ring forum_notifications_$accept 000105 user_ring forum_notifications_$accept 000106 max_auth forum_notifications_$accept 000110 notify_idx forum_notifications_$accept 000111 chain forum_notifications_$accept 000112 slot forum_notifications_$accept 000114 p forum_notifications_$accept 000116 status forum_notifications_$accept 000120 system_high forum_notifications_$accept 000122 user_name forum_notifications_$accept 000144 cbi forum_notifications_$accept 000202 last_slot lookup 000203 slot lookup 000212 slot allocate_slot 000230 slot thread_in 000231 last_slot thread_in 000240 last_slot thread_out 000241 slot thread_out 000250 idx gc 000251 slot gc 000252 freed gc THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 tra_ext_2 enable_op ext_entry ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. convert_authorization_$from_string get_authorization_ get_lock_id_ get_max_authorization_ get_ring_ hash_index_ hcs_$create_branch_ hcs_$delentry_file hcs_$initiate hcs_$level_get hcs_$level_set hcs_$terminate_noname set_lock_$lock set_lock_$unlock user_info_$whoami THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$invalid_lock_reset error_table_$lock_wait_time_exceeded error_table_$locked_by_this_process error_table_$no_w_permission error_table_$noentry forum_data_$central_directory forum_error_table_$need_system_high forum_error_table_$no_notify_seg forum_error_table_$notify_seg_bad forum_error_table_$unexpected_fault LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 18 000053 101 000066 102 000074 103 000116 105 000123 107 000127 108 000147 109 000151 110 000153 113 000155 115 000161 116 000162 118 000163 121 000165 122 000171 124 000172 126 000214 127 000222 128 000231 129 000253 131 000260 133 000264 134 000267 135 000271 136 000273 137 000304 140 000306 142 000312 143 000313 145 000314 148 000326 149 000335 150 000357 152 000364 154 000370 156 000410 157 000412 158 000414 161 000416 163 000422 164 000423 166 000424 169 000446 170 000455 171 000477 173 000504 175 000510 176 000516 178 000521 179 000526 181 000531 182 000535 183 000536 185 000537 187 000541 188 000543 189 000547 191 000550 194 000562 195 000565 196 000574 198 000603 199 000617 200 000640 201 000650 202 000651 204 000675 205 000722 206 000732 207 000741 209 000753 210 000762 211 001003 213 001016 214 001021 215 001023 216 001025 217 001031 218 001043 219 001046 221 001050 222 001077 224 001107 225 001152 227 001165 228 001171 230 001173 231 001174 232 001176 234 001207 235 001216 236 001217 238 001220 240 001242 241 001251 242 001253 244 001254 247 001262 249 001306 250 001325 252 001342 255 001343 258 001351 259 001365 262 001370 264 001407 266 001417 270 001420 276 001431 278 001475 280 001476 281 001506 282 001525 283 001533 284 001535 285 001537 287 001540 288 001552 290 001562 291 001563 292 001565 294 001573 298 001576 301 001600 303 001605 304 001611 306 001615 307 001621 308 001623 309 001626 311 001627 314 001633 317 001635 318 001645 319 001647 320 001653 321 001655 322 001657 325 001660 330 001662 331 001663 332 001672 333 001673 334 001701 336 001712 338 001721 342 001722 348 001724 349 001725 350 001734 351 001737 353 001751 355 001761 356 001764 358 001765 359 001766 360 001774 364 001775 368 001776 369 001777 370 002005 372 002014 373 002033 375 002041 376 002043 377 002045 378 002047 380 002050 381 002055 383 002057 384 002061 385 002064 388 002066 391 002067 396 002071 397 002077 399 002106 401 002115 402 002122 403 002165 404 002200 405 002204 406 002215 407 002220 409 002226 410 002246 411 002255 414 002264 418 002265 423 002273 424 002277 ----------------------------------------------------------- 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