COMPILATION LISTING OF SEGMENT forum_space_mgr_ Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: ACTC Technologies Inc. Compiled on: 10/20/92 1120.7 mdt Tue Options: optimize map 1 /****^ ************************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1992 * 4* * * 5* * Copyright, (C) Massachusetts Institute of Technology, 1984 * 6* * * 7* ************************************************************** */ 8 9 10 11 /****^ HISTORY COMMENTS: 12* 1) change(86-07-29,Pattin), approve(86-07-29,MCR7354), 13* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 14* Added $next and $previous, changed to use find_bit_ for effeciency in 15* searching seen maps. 16* Moved get_highest_seen from trans_mgr and rewrote it to be faster. 17* Fixed bug in block chaining (see find_block). 18* 2) change(92-09-10,Zimmerman), approve(92-09-10,MCR8258), 19* audit(92-09-22,WAAnderson), install(92-09-28,MR12.5-1020): 20* Problem with current being set to deleted txn., or being set to -1. 21* 3) change(92-10-02,Zimmerman), approve(92-10-02,PBF8258), 22* audit(92-10-09,WAAnderson), install(92-10-20,MR12.5-1030): 23* Post bug fix: correct error which caused ckm to incorrectly report seen 24* txns. as new. 25* END HISTORY COMMENTS */ 26 27 28 /* format: style3,ifthen,ifthendo,ifthenstmt,^indnoniterdo,^inditerdo,idind30 */ 29 forum_space_mgr_$find_attendee: 30 proc (P_attendee_seg_ptr, P_attendee_name, P_attendee_ptr, P_status); 31 32 /* Version 2 Forum - 33* This module contains procedures to find and allocate attendee 34* slots, transaction slots, and bit maps. 35* 36* Jay Pattin 1/1/83 37* Modified 09/12/83 by Jeffrey I. Schiller. Bugfix to get_transaction_slot 38* Audit changes, J. Spencer Love 10/05/84 */ 39 40 declare (P_attendee_name char (*), 41 P_attendee_ptr ptr, 42 P_attendee_seg_ptr ptr, 43 P_bit_map_ptr ptr, 44 P_check_new bit (1) aligned, 45 P_first fixed bin, 46 P_next_idx fixed bin, 47 P_open_data_ptr ptr, 48 P_prev_idx fixed bin, 49 P_status fixed bin (35), 50 P_transaction_ptr ptr, 51 P_transaction_seg_ptr ptr, 52 P_trans_idx fixed bin) 53 parameter; 54 55 declare attendee_name char (22), 56 attendee_offset bit (18), 57 based_area_ptr ptr, 58 based_area area based (based_area_ptr), 59 based_bs bit (bit_map.length) based, 60 egress label variable, 61 first fixed bin, 62 highest fixed bin, 63 idx fixed bin, 64 last_trans_ptr ptr, 65 loop_counter fixed bin, 66 MAX_ATTENDEES fixed bin static options (constant) initial (6000), 67 me char (16) static options (constant) init ("forum_space_mgr_"), 68 result fixed bin, 69 old_attendee_ptr ptr, 70 old_bit_map_ptr ptr, 71 original_high fixed bin, 72 p ptr, 73 path char (168), 74 seen_all bit (1) aligned, 75 status fixed bin (35), 76 trans_offset bit (18), 77 trans_idx fixed bin; 78 79 declare (addr, addrel, clock, copy, hbound, index, max, null, ptr, rel, size, substr) 80 builtin, 81 area condition; 82 83 declare END_OF_SEG bit (18) aligned static options (constant) init ("776000"b3); 84 85 declare (forum_et_$invalid_trans_idx, 86 forum_et_$meeting_bloat, 87 forum_et_$no_such_user, 88 forum_et_$no_transactions, 89 forum_et_$roster_full, 90 forum_et_$trans_reaped, 91 forum_et_$unexpected_fault) 92 fixed bin (35) external static; 93 94 declare forum_logger_ entry options (variable), 95 hcs_$fs_get_path_name entry (ptr, char (*), fixed bin, char (*), fixed bin (35)), 96 find_bit_$last_on entry (bit (*)) returns (fixed bin (24)); 97 declare out_of_bounds condition; 98 1 1 /* BEGIN INCLUDE FILE: forum_structures.incl.pl1 */ 1 2 1 3 /* This include file contains the declarations for all of the structures 1 4* used in a version 2 Forum meeting. 1 5* 1 6* Jay Pattin 12/28/82 */ 1 7 1 8 declare attendee_seg_ptr ptr, 1 9 transaction_seg_ptr ptr, 1 10 attendee_ptr ptr, 1 11 transaction_ptr ptr, 1 12 transaction_block_ptr ptr, 1 13 bit_map_ptr ptr; 1 14 1 15 /* This structure is for the segment "Attendees", it contains the participant 1 16* records and the bit-maps of transactions that have been seen. */ 1 17 1 18 declare 1 attendee_seg aligned based (attendee_seg_ptr), 1 19 2 header like attendee_seg_header, 1 20 2 attendee_area area; /* where attendee and bit map nodes go */ 1 21 1 22 declare 1 attendee_seg_header aligned based, 1 23 2 version char (8), 1 24 2 lock bit (36) aligned, 1 25 2 flags, 1 26 3 adjourned bit (1) unaligned, 1 27 3 am_init bit (1) unaligned, /* on if next value valid */ 1 28 3 am_print_acl_msg bit (1) unaligned, /* on if Sysadmin wants them printed */ 1 29 3 cm_init bit (1) unaligned, /* on if next vaue valid */ 1 30 3 cm_print_acl_msg bit (1) unaligned, /* on if chair wants messages printed */ 1 31 3 salvaging bit (1) unaligned, 1 32 3 mbz1 bit (30) unaligned, 1 33 2 attendee_count fixed bin, /* current number of attendees */ 1 34 2 chairman, 1 35 3 person_id char (22), 1 36 3 project_id char (9), 1 37 2 chairman_message char (256), 1 38 2 first_attendee_offset bit (18), 1 39 2 last_attendee_offset bit (18), 1 40 2 mbz2 (16) fixed bin (35); 1 41 1 42 declare 1 attendee aligned based (attendee_ptr), 1 43 2 version fixed bin, 1 44 2 attendee_uid fixed bin, /* Unique for this meeting only */ 1 45 2 person_id char (22), 1 46 2 project_id char (9), /* of project on when last opened */ 1 47 2 flags, 1 48 3 attending bit (1) unaligned, 1 49 3 participating bit (1) unaligned, 1 50 3 deleted bit (1) unaligned, /* by chairman - dlpt request */ 1 51 3 notify bit (1) unaligned, 1 52 3 acl_change_pending bit (1) unaligned, 1 53 3 message_change_pending bit (1) unaligned, 1 54 3 mbz1 bit (30) unaligned, 1 55 2 xacl bit (36) aligned, /* extended acl - see modes below */ 1 56 2 lock_id bit (36) aligned, 1 57 2 process_id bit (36) aligned, 1 58 2 event_channel fixed bin (71), /* For "A new transaction ..." messages */ 1 59 2 last_time_attended fixed bin (71), 1 60 2 bit_map_first_trans fixed bin, 1 61 2 bit_map_offset bit (18), 1 62 2 bit_map_length fixed bin, 1 63 2 left_son_offset bit (18), /* attendees are in a tree */ 1 64 2 right_son_offset bit (18), 1 65 2 next_offset bit (18); /* For sequential searching */ 1 66 1 67 declare 1 bit_map aligned based (bit_map_ptr), 1 68 2 attendee_uid fixed bin, /* For checking */ 1 69 2 length fixed bin, 1 70 2 map bit (alloc_bit_map_length refer (bit_map.length)); 1 71 1 72 declare alloc_bit_map_length fixed bin; 1 73 1 74 /* This structure is for the segment "Transactions" which contains all 1 75* information about transactions except the subject and text. */ 1 76 1 77 declare 1 transaction_seg aligned based (transaction_seg_ptr), 1 78 2 version char (8), 1 79 2 transaction_count fixed bin, 1 80 2 deleted_count fixed bin, 1 81 2 first_trans_offset bit (18), 1 82 2 last_trans_offset bit (18), 1 83 2 first_block_offset bit (18), 1 84 2 current_block_offset bit (18), /* location of block containing pointer to last trans */ 1 85 2 last_trans_in_block fixed bin, /* When we need to allocate new block */ 1 86 2 current_segno fixed bin, /* Where transactions are being allocated */ 1 87 2 next_trans_offset bit (18), /* offset within that seg */ 1 88 2 free_space_offset bit (18), /* first unused word in this seg */ 1 89 2 first_free_word fixed bin; /* only used to find initial value of previous */ 1 90 1 91 declare 1 transaction based (transaction_ptr), 1 92 2 version fixed bin, 1 93 2 trans_idx fixed bin, 1 94 2 author, 1 95 3 person_id char (22), 1 96 3 project_id char (9), 1 97 2 flags, 1 98 3 deleted bit (1) unaligned, 1 99 3 deleted_by_author bit (1) unaligned, /* As opposed to deleted by chairman */ 1 100 3 unfilled bit (1) unaligned, /* And it should stay that way */ 1 101 3 mbz1 bit (33) unaligned, 1 102 2 pref_offset bit (18), 1 103 2 nref_offset bit (18), 1 104 2 time fixed bin (71), 1 105 2 segno fixed bin, /* What proceeding segment this is in */ 1 106 2 subject_offset bit (18), 1 107 2 subject_length fixed bin (21), 1 108 2 text_offset bit (18), 1 109 2 text_length fixed bin (21), 1 110 2 next_offset bit (18), 1 111 2 prev_offset bit (18); 1 112 1 113 1 114 declare 1 transaction_block based (transaction_block_ptr), 1 115 2 first_trans_idx fixed bin, /* In this block */ 1 116 2 last_trans_idx fixed bin, 1 117 2 time fixed bin (71), /* of first trans in this block */ 1 118 2 prev_block_offset bit (18), 1 119 2 next_block_offset bit (18), 1 120 2 transactions (1014), 1 121 3 offset bit (18); /* -1 if expunged */ 1 122 1 123 declare (ATTENDEE_SEG_VERSION_1 init ("FMCTL_1"), 1 124 TRANS_SEG_VERSION_1 init ("FMTR_1")) 1 125 char (8) static options (constant); 1 126 1 127 declare (ATTENDEE_SEG_NAME init ("Attendees"), 1 128 TRANSACTION_SEG_NAME init ("Transactions"), 1 129 PROCEEDINGS_SEG_NAME init ("Proceedings.")) /* numeric suffix is added */ 1 130 char (32) static options (constant); 1 131 1 132 declare (ATTENDEE_VERSION_1, 1 133 TRANSACTION_VERSION_1) fixed bin static options (constant) init (-42); 1 134 1 135 declare EXPUNGED bit (18) static options (constant) init ("111111111111111111"b); 1 136 1 137 declare (RWC_XACL init ("111"b), 1 138 RW_XACL init ("110"b), 1 139 R_XACL init ("100"b)) 1 140 bit (3) static options (constant); 1 141 1 142 /* END INCLUDE FILE: forum_structures.incl.pl1 */ 99 100 2 1 /* BEGIN INCLUDE FILE: forum_open_data.incl.pl1 */ 2 2 2 3 declare open_data_ptr ptr; 2 4 2 5 declare 1 open_data aligned based (open_data_ptr), 2 6 2 next_open_data_ptr ptr, 2 7 2 prev_open_data_ptr ptr, 2 8 2 forum_name char (168), 2 9 2 forum_idx fixed bin, 2 10 2 forum_uid bit (36), /* UID of attendee seg */ 2 11 2 attendee_seg_ptr ptr, 2 12 2 transaction_seg_ptr ptr, 2 13 2 proceedings_ptrs (16) ptr, 2 14 2 attendee_ptr ptr, /* -> attendee slot for this user */ 2 15 2 bit_map_ptr ptr, /* -> bit_map for this user */ 2 16 2 open_count fixed bin, 2 17 2 invalid bit (1) aligned; 2 18 2 19 /* END INCLUDE FILE: forum_open_data.incl.pl1 */ 101 102 103 /* forum_space_mgr_$find_attendee: 104* proc (P_attendee_seg_ptr, P_attendee_name, P_attendee_ptr, P_status); */ 105 106 attendee_name = P_attendee_name; 107 attendee_seg_ptr = P_attendee_seg_ptr; 108 109 egress = GET_ATTENDEE_EXIT; 110 111 result = lookup_attendee (); 112 113 if result ^= 0 then do; 114 P_status = forum_et_$no_such_user; 115 P_attendee_ptr = null (); 116 end; 117 else do; 118 P_attendee_ptr = attendee_ptr; 119 P_status = 0; 120 end; 121 return; 122 123 forum_space_mgr_$get_attendee_slot: /* allocate a new attendee_slot */ 124 entry (P_attendee_seg_ptr, P_attendee_name, P_attendee_ptr, P_status); 125 126 egress = GET_ATTENDEE_EXIT; 127 128 attendee_name = P_attendee_name; 129 attendee_seg_ptr = P_attendee_seg_ptr; 130 131 if attendee_seg.first_attendee_offset = ""b then attendee_ptr = null (); 132 else do; 133 result = lookup_attendee (); 134 if result = 0 then do; 135 P_attendee_ptr = attendee_ptr; 136 P_status = 0; 137 return; 138 end; 139 end; 140 141 old_attendee_ptr = attendee_ptr; 142 based_area_ptr = addr (attendee_seg.attendee_area); 143 144 on area call error (forum_et_$roster_full); 145 allocate attendee in (based_area); 146 revert area; 147 148 attendee_offset = rel (attendee_ptr); 149 150 attendee.version = ATTENDEE_VERSION_1; 151 attendee.attendee_uid = attendee_seg.attendee_count + 1; 152 attendee.person_id = attendee_name; 153 154 if attendee_seg.chairman_message ^= "" then 155 attendee.flags.message_change_pending = "1"b; 156 157 if old_attendee_ptr = null () then attendee_seg.first_attendee_offset = attendee_offset; 158 else do; 159 if result = 1 then old_attendee_ptr -> attendee.left_son_offset = attendee_offset; 160 else old_attendee_ptr -> attendee.right_son_offset = attendee_offset; 161 162 old_attendee_ptr = ptr (attendee_seg_ptr, attendee_seg.last_attendee_offset); 163 old_attendee_ptr -> attendee.next_offset = attendee_offset; 164 end; 165 166 attendee_seg.last_attendee_offset = attendee_offset; 167 attendee_seg.attendee_count = attendee_seg.attendee_count + 1; 168 169 P_attendee_ptr = attendee_ptr; 170 P_status = 0; 171 return; 172 173 GET_ATTENDEE_EXIT: 174 P_status = status; 175 P_attendee_ptr = null (); 176 return; 177 178 lookup_attendee: 179 proc () returns (fixed bin); /* 0 - found, 1 - left, 2 - right */ 180 181 declare attendee_count fixed bin; 182 183 attendee_count = 0; 184 attendee_ptr = ptr (attendee_seg_ptr, attendee_seg.first_attendee_offset); 185 186 do attendee_ptr = attendee_ptr repeat p; 187 attendee_count = attendee_count + 1; 188 if attendee.version ^= ATTENDEE_VERSION_1 | attendee_count > MAX_ATTENDEES then do; 189 call hcs_$fs_get_path_name (attendee_seg_ptr, path, idx, "", (0)); 190 call forum_logger_ (0, me, "Bad attendee thread at ^p in ^a.", attendee_ptr, substr (path, 1, idx)); 191 call error (forum_et_$unexpected_fault); 192 end; 193 194 if attendee.person_id = attendee_name then return (0); 195 196 if attendee_name > attendee.person_id then do; 197 if attendee.right_son_offset = ""b then return (2); 198 p = ptr (attendee_seg_ptr, attendee.right_son_offset); 199 end; 200 201 else do; 202 if attendee.left_son_offset = ""b then return (1); 203 p = ptr (attendee_seg_ptr, attendee.left_son_offset); 204 end; 205 end; 206 207 end lookup_attendee; 208 209 forum_space_mgr_$find_transaction: 210 entry (P_transaction_seg_ptr, P_trans_idx, P_transaction_ptr, P_status); 211 212 egress = FIND_TRANS_EXIT; 213 214 trans_idx = P_trans_idx; 215 transaction_seg_ptr = P_transaction_seg_ptr; 216 217 call find_block (); 218 219 if transaction_block.offset (idx) = EXPUNGED then call error (forum_et_$trans_reaped); 220 221 transaction_ptr = ptr (transaction_seg_ptr, transaction_block.offset (idx)); 222 on out_of_bounds goto hit_out_of_bounds; 223 if transaction.version ^= TRANSACTION_VERSION_1 | transaction.trans_idx ^= trans_idx then do; 224 hit_out_of_bounds: 225 revert out_of_bounds; 226 call hcs_$fs_get_path_name (transaction_seg_ptr, path, idx, "", (0)); 227 call forum_logger_ (0, me, "Bad transaction thread at ^p (^d) in ^a.", transaction_ptr, trans_idx, 228 substr (path, 1, idx)); 229 call error (forum_et_$unexpected_fault); 230 end; 231 revert out_of_bounds; 232 233 P_transaction_ptr = transaction_ptr; 234 P_status = 0; 235 return; 236 237 FIND_TRANS_EXIT: 238 P_transaction_ptr = null (); 239 P_status = status; 240 return; 241 242 243 find_block: 244 procedure (); 245 246 /* last_block_ptr used to correct bug in pre 2.13 forum */ 247 248 declare last_block_ptr pointer; 249 250 if trans_idx < 1 | trans_idx > transaction_seg.transaction_count then 251 call error (forum_et_$invalid_trans_idx); 252 253 loop_counter = 0; 254 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_seg.current_block_offset); 255 256 if transaction_block.next_block_offset ^= ""b then do; 257 do while (transaction_block_ptr ^= null ()); 258 last_block_ptr = transaction_block_ptr; 259 if transaction_block.prev_block_offset = ""b then transaction_block_ptr = null (); 260 else do; 261 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_block.prev_block_offset); 262 transaction_block.next_block_offset = rel (last_block_ptr); 263 end; 264 end; 265 266 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_seg.current_block_offset); 267 transaction_block.next_block_offset = ""b; 268 end; 269 270 do while (trans_idx < transaction_block.first_trans_idx); 271 loop_counter = loop_counter + 1; 272 if loop_counter > 100 /* infinity */ then call error (forum_et_$unexpected_fault); 273 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_block.prev_block_offset); 274 end; 275 276 idx = trans_idx - transaction_block.first_trans_idx + 1; 277 end find_block; 278 279 forum_space_mgr_$find_next_transaction: 280 entry (P_transaction_seg_ptr, P_trans_idx, P_next_idx, P_status); 281 282 egress = NEXT_TRANS_EXIT; 283 transaction_seg_ptr = P_transaction_seg_ptr; 284 trans_idx = P_trans_idx; 285 286 call find_block (); 287 288 do while (transaction_block_ptr ^= null ()); 289 do loop_counter = idx + 1 to transaction_block.last_trans_idx; 290 if transaction_block.offset (loop_counter) ^= EXPUNGED then do; 291 P_next_idx = transaction_block.first_trans_idx + loop_counter - 1; 292 P_status = 0; 293 return; 294 end; 295 end; 296 idx = 0; 297 if transaction_block.next_block_offset ^= ""b then 298 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_block.next_block_offset); 299 else transaction_block_ptr = null (); 300 end; 301 302 status = forum_et_$no_transactions; 303 304 NEXT_TRANS_EXIT: 305 P_next_idx = 0; 306 P_status = status; 307 return; 308 309 forum_space_mgr_$find_prev_transaction: 310 entry (P_transaction_seg_ptr, P_trans_idx, P_prev_idx, P_status); 311 312 egress = PREV_TRANS_EXIT; 313 transaction_seg_ptr = P_transaction_seg_ptr; 314 trans_idx = P_trans_idx; 315 316 call find_block (); 317 318 do while (transaction_block_ptr ^= null ()); 319 do loop_counter = idx - 1 by -1 to 1; 320 if transaction_block.offset (loop_counter) ^= EXPUNGED then do; 321 P_prev_idx = transaction_block.first_trans_idx + loop_counter - 1; 322 P_status = 0; 323 return; 324 end; 325 end; 326 if transaction_block.prev_block_offset ^= ""b then do; 327 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_block.prev_block_offset); 328 idx = transaction_block.last_trans_idx + 1; 329 end; 330 else transaction_block_ptr = null (); 331 end; 332 333 status = forum_et_$no_transactions; 334 335 PREV_TRANS_EXIT: 336 P_prev_idx = 0; 337 P_status = status; 338 return; 339 340 forum_space_mgr_$get_transaction_slot: 341 entry (P_transaction_seg_ptr, P_transaction_ptr, P_status); 342 343 egress = FIND_TRANS_EXIT; 344 345 transaction_seg_ptr = P_transaction_seg_ptr; 346 347 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_seg.current_block_offset); 348 if transaction_seg.last_trans_offset = ""b then last_trans_ptr = null (); 349 else last_trans_ptr = ptr (transaction_seg_ptr, transaction_seg.last_trans_offset); 350 trans_idx = transaction_seg.transaction_count + 1; 351 if transaction_seg.first_trans_offset = ""b then do; 352 transaction_seg.first_trans_offset = transaction_seg.free_space_offset; 353 transaction_block.time = clock (); 354 end; 355 356 if trans_idx > transaction_seg.last_trans_in_block then call get_new_block (); 357 358 transaction_ptr = ptr (transaction_seg_ptr, transaction_seg.free_space_offset); 359 trans_offset = rel (addrel (transaction_ptr, size (transaction))); 360 if trans_offset >= END_OF_SEG then call error (forum_et_$meeting_bloat); 361 362 idx = trans_idx - transaction_block.first_trans_idx + 1; 363 transaction_seg.last_trans_offset, transaction_block.offset (idx) = transaction_seg.free_space_offset; 364 transaction_seg.free_space_offset = trans_offset; 365 366 transaction.version = TRANSACTION_VERSION_1; 367 if last_trans_ptr = null () then 368 transaction.prev_offset = ""b; 369 else transaction.prev_offset = rel (last_trans_ptr); 370 transaction.trans_idx = trans_idx; 371 372 if last_trans_ptr ^= null () then 373 last_trans_ptr -> transaction.next_offset = rel (transaction_ptr); 374 transaction_seg.transaction_count = trans_idx; 375 transaction_block.last_trans_idx = idx; 376 377 P_transaction_ptr = transaction_ptr; 378 P_status = 0; 379 return; 380 381 382 383 get_new_block: 384 proc (); 385 386 declare old_block_offset bit (18); 387 388 old_block_offset = rel (transaction_block_ptr); 389 390 transaction_block.next_block_offset, transaction_seg.current_block_offset = transaction_seg.free_space_offset; 391 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_seg.free_space_offset); 392 trans_offset = rel (addrel (transaction_block_ptr, size (transaction_block))); 393 if trans_offset >= END_OF_SEG then call error (forum_et_$meeting_bloat); 394 395 transaction_seg.free_space_offset = trans_offset; 396 transaction_seg.last_trans_in_block = transaction_seg.last_trans_in_block + hbound (transaction_block.transactions, 1); 397 398 transaction_block.first_trans_idx = trans_idx; 399 transaction_block.prev_block_offset = old_block_offset; 400 transaction_block.time = clock (); 401 402 return; 403 end get_new_block; 404 405 forum_space_mgr_$allocate_bit_map: 406 entry (P_open_data_ptr, P_attendee_ptr, P_first, P_bit_map_ptr, P_status); 407 408 egress = BIT_MAP_EXIT; 409 410 open_data_ptr = P_open_data_ptr; 411 attendee_ptr = P_attendee_ptr; 412 attendee_seg_ptr = open_data.attendee_seg_ptr; 413 transaction_seg_ptr = open_data.transaction_seg_ptr; 414 415 if transaction_seg.first_trans_offset = ""b then first = transaction_seg.transaction_count; 416 else first = max (P_first, ptr (transaction_seg_ptr, transaction_seg.first_trans_offset) -> transaction.trans_idx); 417 418 if attendee.bit_map_offset = ""b then old_bit_map_ptr = null (); 419 else old_bit_map_ptr = ptr (attendee_seg_ptr, attendee.bit_map_offset); 420 based_area_ptr = addr (attendee_seg.attendee_area); 421 422 alloc_bit_map_length = max (504, transaction_seg.transaction_count + 100 - first); 423 on area call error (forum_et_$roster_full); 424 allocate bit_map in (based_area); 425 revert area; 426 427 bit_map.attendee_uid = attendee.attendee_uid; 428 if old_bit_map_ptr ^= null () then do; 429 if first < attendee.bit_map_first_trans then do; 430 idx = attendee.bit_map_first_trans - first; 431 substr (bit_map.map, 1, idx) = copy ("1"b, idx); 432 substr (bit_map.map, idx + 1) = old_bit_map_ptr -> bit_map.map; 433 end; 434 435 else if first = attendee.bit_map_first_trans then 436 bit_map.map = old_bit_map_ptr -> bit_map.map; 437 438 else do; 439 idx = first - attendee.bit_map_first_trans + 1; 440 bit_map.map = substr (old_bit_map_ptr -> bit_map.map, idx, attendee.bit_map_length - idx + 1); 441 end; 442 443 free old_bit_map_ptr -> bit_map; 444 end; 445 else if ^attendee_seg.salvaging then call mark_expunged (); 446 447 attendee.bit_map_first_trans = first; 448 attendee.bit_map_offset = rel (bit_map_ptr); 449 attendee.bit_map_length = bit_map.length; 450 451 P_bit_map_ptr = bit_map_ptr; 452 P_status = 0; 453 return; 454 455 BIT_MAP_EXIT: 456 P_status = status; 457 P_bit_map_ptr = null (); 458 if bit_map_ptr ^= null () then free bit_map; 459 return; 460 461 mark_expunged: 462 procedure (); 463 464 declare idx fixed bin, 465 status fixed bin (35); 466 467 call forum_space_mgr_$find_transaction (transaction_seg_ptr, first, transaction_ptr, status); 468 if status ^= 0 then return; 469 470 do while ("1"b); 471 idx = transaction.trans_idx; 472 if transaction.next_offset = ""b then return; 473 474 transaction_ptr = ptr (transaction_seg_ptr, transaction.next_offset); 475 if transaction.trans_idx ^= idx + 1 then 476 substr (bit_map.map, idx - first + 2, transaction.trans_idx - idx - 1) = 477 copy ("1"b, transaction.trans_idx - idx - 1); 478 end; 479 end mark_expunged; 480 481 forum_space_mgr_$get_highest_seen: 482 entry (P_attendee_ptr, P_transaction_seg_ptr, P_check_new, P_trans_idx, P_transaction_ptr, P_status); 483 484 dcl seen_last bit (1); 485 486 attendee_ptr = P_attendee_ptr; 487 transaction_seg_ptr = P_transaction_seg_ptr; 488 egress = GET_HIGHEST_EXIT; 489 seen_last = "0"b; 490 491 492 if attendee.bit_map_offset = ""b then do; 493 P_trans_idx = 0; 494 P_transaction_ptr = ptr (transaction_seg_ptr, transaction_seg.first_trans_offset); 495 P_status = 0; 496 return; 497 end; 498 499 bit_map_ptr = ptr (attendee_ptr, attendee.bit_map_offset); 500 seen_all = "0"b; 501 502 /* NOTE: use based_bit to avoid having to call the alloc_bs operator. 503* Because bit_map.map is declared to be aligned, it owuld otherwise 504* have to be copied. */ 505 506 highest = find_bit_$last_on (addr (bit_map.map) -> based_bs) - 1; 507 idx = highest + attendee.bit_map_first_trans; 508 original_high = 0; 509 510 if idx = transaction_seg.transaction_count then 511 if index (substr (bit_map.map, 1, transaction_seg.transaction_count - attendee.bit_map_first_trans + 1), "0"b) = 0 then 512 seen_all = "1"b; 513 else 514 seen_last = "1"b; 515 516 else if idx > transaction_seg.transaction_count then do; 517 call hcs_$fs_get_path_name (attendee_ptr, path, original_high, "", (0)); 518 call forum_logger_ (0, me, "Bit map too high. highest = ^d, first = ^d, count = ^d in ^a.", idx, 519 attendee.bit_map_first_trans, transaction_seg.transaction_count, 520 substr (path, 1, original_high)); 521 idx = transaction_seg.transaction_count; 522 transaction_ptr = ptr (transaction_seg_ptr, transaction_seg.last_trans_offset); 523 goto EXIT_LOOP; 524 end; 525 526 do while (idx > 0); /* Find highest seen not by us */ 527 call forum_space_mgr_$find_transaction (transaction_seg_ptr, idx, transaction_ptr, status); 528 if status = 0 then do; /* skip transactions entered by us. */ 529 if seen_all | ^P_check_new | ((transaction.person_id ^= attendee.person_id) & ^transaction.deleted) then goto EXIT_LOOP; 530 if original_high = 0 then original_high = idx; /* highest unexpunged we've seen */ 531 idx = idx - 1; 532 end; 533 else if status = forum_et_$trans_reaped then do; 534 call forum_space_mgr_$find_prev_transaction (transaction_seg_ptr, idx, idx, status); 535 if status ^= 0 then 536 if status ^= forum_et_$no_transactions then call error (status); 537 if idx < attendee.bit_map_first_trans then highest = -1; 538 else highest = idx - attendee.bit_map_first_trans + 1; 539 end; 540 else call error (status); 541 542 if highest > 0 then do; 543 highest = find_bit_$last_on (substr (bit_map.map, 1, highest)) - 1; 544 idx = attendee.bit_map_first_trans + highest; 545 end; 546 end; 547 548 /* Now scan forward until we come to a transaction that isn't ours */ 549 550 EXIT_LOOP: 551 if idx = 0 then do; 552 if original_high = 0 then do; /* No transactions seen */ 553 P_trans_idx = 0; 554 if transaction_seg.first_trans_offset = ""b then P_transaction_ptr = null (); 555 else P_transaction_ptr = ptr (transaction_seg_ptr, transaction_seg.first_trans_offset); 556 end; 557 else do; 558 P_trans_idx = 0; /* All were deleted or ours */ 559 call forum_space_mgr_$find_transaction (transaction_seg_ptr, original_high, 560 transaction_ptr, status); 561 if status ^= 0 then call error (status); 562 563 if transaction.next_offset = ""b then P_transaction_ptr = null (); 564 else P_transaction_ptr = ptr (transaction_seg_ptr, transaction.next_offset); 565 end; 566 end; 567 else if (P_check_new & ^seen_last) then do; 568 do while (transaction.next_offset ^= ""b); 569 transaction_ptr = ptr (transaction_seg_ptr, transaction.next_offset); 570 if (transaction.person_id ^= attendee.person_id & ^transaction.deleted) then goto FOUND_UNSEEN; 571 end; 572 573 transaction_ptr = null (); 574 575 FOUND_UNSEEN: 576 577 P_trans_idx = idx; 578 P_transaction_ptr = transaction_ptr; 579 end; 580 581 else do; 582 P_trans_idx = idx; 583 P_transaction_ptr = null (); 584 end; 585 P_status = 0; 586 return; 587 588 GET_HIGHEST_EXIT: 589 P_status = status; 590 P_trans_idx = 0; 591 P_transaction_ptr = null (); 592 return; 593 594 error: 595 proc (P_status); 596 597 declare P_status fixed bin (35); 598 599 status = P_status; 600 goto egress; 601 602 end error; 603 604 end forum_space_mgr_$find_attendee; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/20/92 1120.7 forum_space_mgr_.pl1 >spec>install>1030>forum_space_mgr_.pl1 99 1 10/31/84 1215.3 forum_structures.incl.pl1 >ldd>include>forum_structures.incl.pl1 101 2 10/31/84 1215.3 forum_open_data.incl.pl1 >ldd>include>forum_open_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. ATTENDEE_VERSION_1 002731 constant fixed bin(17,0) initial dcl 1-132 ref 150 188 END_OF_SEG constant bit(18) initial dcl 83 ref 360 393 EXPUNGED 002730 constant bit(18) initial packed unaligned dcl 1-135 ref 219 290 320 MAX_ATTENDEES constant fixed bin(17,0) initial dcl 55 ref 188 P_attendee_name parameter char packed unaligned dcl 40 ref 29 106 123 128 P_attendee_ptr parameter pointer dcl 40 set ref 29 115* 118* 123 135* 169* 175* 405 411 481 486 P_attendee_seg_ptr parameter pointer dcl 40 ref 29 107 123 129 P_bit_map_ptr parameter pointer dcl 40 set ref 405 451* 457* P_check_new parameter bit(1) dcl 40 ref 481 529 567 P_first parameter fixed bin(17,0) dcl 40 ref 405 416 P_next_idx parameter fixed bin(17,0) dcl 40 set ref 279 291* 304* P_open_data_ptr parameter pointer dcl 40 ref 405 410 P_prev_idx parameter fixed bin(17,0) dcl 40 set ref 309 321* 335* P_status parameter fixed bin(35,0) dcl 40 in procedure "forum_space_mgr_$find_attendee" set ref 29 114* 119* 123 136* 170* 173* 209 234* 239* 279 292* 306* 309 322* 337* 340 378* 405 452* 455* 481 495* 585* 588* P_status parameter fixed bin(35,0) dcl 597 in procedure "error" ref 594 599 P_trans_idx parameter fixed bin(17,0) dcl 40 set ref 209 214 279 284 309 314 481 493* 553* 558* 575* 582* 590* P_transaction_ptr parameter pointer dcl 40 set ref 209 233* 237* 340 377* 481 494* 554* 555* 563* 564* 578* 583* 591* P_transaction_seg_ptr parameter pointer dcl 40 ref 209 215 279 283 309 313 340 345 481 487 TRANSACTION_VERSION_1 002731 constant fixed bin(17,0) initial dcl 1-132 ref 223 366 addr builtin function dcl 79 ref 142 420 506 addrel builtin function dcl 79 ref 359 392 alloc_bit_map_length 000244 automatic fixed bin(17,0) dcl 1-72 set ref 422* 424 424 area 000214 stack reference condition dcl 79 ref 144 146 423 425 attendee based structure level 1 dcl 1-42 set ref 145 attendee_area 140 based area(1024) level 2 dcl 1-18 set ref 142 420 attendee_count 4 based fixed bin(17,0) level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_space_mgr_$find_attendee" set ref 151 167* 167 attendee_count 000274 automatic fixed bin(17,0) dcl 181 in procedure "lookup_attendee" set ref 183* 187* 187 188 attendee_name 000100 automatic char(22) packed unaligned dcl 55 set ref 106* 128* 152 194 196 attendee_offset 000106 automatic bit(18) packed unaligned dcl 55 set ref 148* 157 159 160 163 166 attendee_ptr 000234 automatic pointer dcl 1-8 set ref 118 131* 135 141 145* 148 150 151 152 154 169 184* 186* 186* 188 190* 194 196 197 198 202 203* 411* 418 419 427 429 430 435 439 440 447 448 449 486* 492 499 499 507 510 517* 518 529 537 538 544 570 attendee_seg based structure level 1 dcl 1-18 attendee_seg_header based structure level 1 dcl 1-22 attendee_seg_ptr 60 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_space_mgr_$find_attendee" ref 412 attendee_seg_ptr 000230 automatic pointer dcl 1-8 in procedure "forum_space_mgr_$find_attendee" set ref 107* 129* 131 142 151 154 157 162 162 166 167 167 184 184 189* 198 203 412* 419 420 445 attendee_uid 1 based fixed bin(17,0) level 2 in structure "attendee" dcl 1-42 in procedure "forum_space_mgr_$find_attendee" set ref 151* 427 attendee_uid based fixed bin(17,0) level 2 in structure "bit_map" dcl 1-67 in procedure "forum_space_mgr_$find_attendee" set ref 427* author 2 based structure level 2 packed packed unaligned dcl 1-91 based_area based area(1024) dcl 55 ref 145 424 based_area_ptr 000110 automatic pointer dcl 55 set ref 142* 145 420* 424 based_bs based bit packed unaligned dcl 55 set ref 506* bit_map based structure level 1 dcl 1-67 set ref 424 443 458 bit_map_first_trans 24 based fixed bin(17,0) level 2 dcl 1-42 set ref 429 430 435 439 447* 507 510 518* 537 538 544 bit_map_length 26 based fixed bin(17,0) level 2 dcl 1-42 set ref 440 449* bit_map_offset 25 based bit(18) level 2 dcl 1-42 set ref 418 419 448* 492 499 bit_map_ptr 000242 automatic pointer dcl 1-8 set ref 424* 427 431 432 435 440 448 449 451 458 458 475 499* 506 506 506 510 543 543 chairman_message 16 based char(256) level 3 dcl 1-18 ref 154 clock builtin function dcl 79 ref 353 400 copy builtin function dcl 79 ref 431 475 current_block_offset 7 based bit(18) level 2 dcl 1-77 set ref 254 266 347 390* deleted 11(27) based bit(1) level 3 packed packed unaligned dcl 1-91 ref 529 570 egress 000112 automatic label variable dcl 55 set ref 109* 126* 212* 282* 312* 343* 408* 488* 600 find_bit_$last_on 000032 constant entry external dcl 94 ref 506 543 first 000116 automatic fixed bin(17,0) dcl 55 set ref 415* 416* 422 429 430 435 439 447 467* 475 first_attendee_offset 116 based bit(18) level 3 dcl 1-18 set ref 131 157* 184 first_trans_idx based fixed bin(17,0) level 2 dcl 1-114 set ref 270 276 291 321 362 398* first_trans_offset 4 based bit(18) level 2 dcl 1-77 set ref 351 352* 415 416 494 554 555 flags 3 based structure level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_space_mgr_$find_attendee" flags 13 based structure level 2 in structure "attendee" dcl 1-42 in procedure "forum_space_mgr_$find_attendee" flags 11(27) based structure level 2 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_space_mgr_$find_attendee" forum_et_$invalid_trans_idx 000010 external static fixed bin(35,0) dcl 85 set ref 250* forum_et_$meeting_bloat 000012 external static fixed bin(35,0) dcl 85 set ref 360* 393* forum_et_$no_such_user 000014 external static fixed bin(35,0) dcl 85 ref 114 forum_et_$no_transactions 000016 external static fixed bin(35,0) dcl 85 ref 302 333 535 forum_et_$roster_full 000020 external static fixed bin(35,0) dcl 85 set ref 144* 423* forum_et_$trans_reaped 000022 external static fixed bin(35,0) dcl 85 set ref 219* 533 forum_et_$unexpected_fault 000024 external static fixed bin(35,0) dcl 85 set ref 191* 229* 272* forum_logger_ 000026 constant entry external dcl 94 ref 190 227 518 free_space_offset 13 based bit(18) level 2 dcl 1-77 set ref 352 358 363 364* 390 391 395* hbound builtin function dcl 79 ref 396 hcs_$fs_get_path_name 000030 constant entry external dcl 94 ref 189 226 517 header based structure level 2 dcl 1-18 highest 000117 automatic fixed bin(17,0) dcl 55 set ref 506* 507 537* 538* 542 543* 543 543 544 idx 000120 automatic fixed bin(17,0) dcl 55 in procedure "forum_space_mgr_$find_attendee" set ref 189* 190 190 219 221 226* 227 227 276* 289 296* 319 328* 362* 363 375 430* 431 431 432 439* 440 440 507* 510 516 518* 521* 526 527* 530 531* 531 534* 534* 537 538 544* 550 575 582 idx 000324 automatic fixed bin(17,0) dcl 464 in procedure "mark_expunged" set ref 471* 475 475 475 475 index builtin function dcl 79 ref 510 last_attendee_offset 117 based bit(18) level 3 dcl 1-18 set ref 162 166* last_block_ptr 000304 automatic pointer dcl 248 set ref 258* 262 last_trans_idx 1 based fixed bin(17,0) level 2 dcl 1-114 set ref 289 328 375* last_trans_in_block 10 based fixed bin(17,0) level 2 dcl 1-77 set ref 356 396* 396 last_trans_offset 5 based bit(18) level 2 dcl 1-77 set ref 348 349 363* 522 last_trans_ptr 000122 automatic pointer dcl 55 set ref 348* 349* 367 369 372 372 left_son_offset 27 based bit(18) level 2 dcl 1-42 set ref 159* 202 203 length 1 based fixed bin(17,0) level 2 dcl 1-67 set ref 424* 431 432 432 435 435 440 440 443 449 458 475 506 506 506 510 543 543 loop_counter 000124 automatic fixed bin(17,0) dcl 55 set ref 253* 271* 271 272 289* 290 291* 319* 320 321* map 2 based bit level 2 dcl 1-67 set ref 431* 432* 432 435* 435 440* 440 475* 506 510 543 543 max builtin function dcl 79 ref 416 422 me 000000 constant char(16) initial packed unaligned dcl 55 set ref 190* 227* 518* message_change_pending 13(05) based bit(1) level 3 packed packed unaligned dcl 1-42 set ref 154* next_block_offset 4(18) based bit(18) level 2 packed packed unaligned dcl 1-114 set ref 256 262* 267* 297 297 390* next_offset 23 based bit(18) level 2 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_space_mgr_$find_attendee" set ref 372* 472 474 563 564 568 569 next_offset 31 based bit(18) level 2 in structure "attendee" dcl 1-42 in procedure "forum_space_mgr_$find_attendee" set ref 163* null builtin function dcl 79 ref 115 131 157 175 237 257 259 288 299 318 330 348 367 372 418 428 457 458 554 563 573 583 591 offset 5 based bit(18) array level 3 packed packed unaligned dcl 1-114 set ref 219 221 290 320 363* old_attendee_ptr 000126 automatic pointer dcl 55 set ref 141* 157 159 160 162* 163 old_bit_map_ptr 000130 automatic pointer dcl 55 set ref 418* 419* 428 432 435 440 443 old_block_offset 000314 automatic bit(18) packed unaligned dcl 386 set ref 388* 399 open_data based structure level 1 dcl 2-5 open_data_ptr 000246 automatic pointer dcl 2-3 set ref 410* 412 413 original_high 000132 automatic fixed bin(17,0) dcl 55 set ref 508* 517* 518 518 530 530* 552 559* out_of_bounds 000222 stack reference condition dcl 97 ref 222 224 231 p 000134 automatic pointer dcl 55 set ref 198* 203* 205 path 000136 automatic char(168) packed unaligned dcl 55 set ref 189* 190 190 226* 227 227 517* 518 518 person_id 2 based char(22) level 2 in structure "attendee" dcl 1-42 in procedure "forum_space_mgr_$find_attendee" set ref 152* 194 196 529 570 person_id 2 based char(22) level 3 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_space_mgr_$find_attendee" ref 529 570 prev_block_offset 4 based bit(18) level 2 packed packed unaligned dcl 1-114 set ref 259 261 273 326 327 399* prev_offset 23(18) based bit(18) level 2 packed packed unaligned dcl 1-91 set ref 367* 369* ptr builtin function dcl 79 ref 162 184 198 203 221 254 261 266 273 297 327 347 349 358 391 416 419 474 494 499 522 555 564 569 rel builtin function dcl 79 ref 148 262 359 369 372 388 392 448 result 000125 automatic fixed bin(17,0) dcl 55 set ref 111* 113 133* 134 159 right_son_offset 30 based bit(18) level 2 dcl 1-42 set ref 160* 197 198 salvaging 3(05) based bit(1) level 4 packed packed unaligned dcl 1-18 ref 445 seen_all 000210 automatic bit(1) dcl 55 set ref 500* 510* 529 seen_last 000250 automatic bit(1) packed unaligned dcl 484 set ref 489* 513* 567 size builtin function dcl 79 ref 359 392 status 000211 automatic fixed bin(35,0) dcl 55 in procedure "forum_space_mgr_$find_attendee" set ref 173 239 302* 306 333* 337 455 527* 528 533 534* 535 535 535* 540* 559* 561 561* 588 599* status 000325 automatic fixed bin(35,0) dcl 464 in procedure "mark_expunged" set ref 467* 468 substr builtin function dcl 79 set ref 190 190 227 227 431* 432* 440 475* 510 518 518 543 543 time 2 based fixed bin(71,0) level 2 dcl 1-114 set ref 353* 400* trans_idx 000213 automatic fixed bin(17,0) dcl 55 in procedure "forum_space_mgr_$find_attendee" set ref 214* 223 227* 250 250 270 276 284* 314* 350* 356 362 370 374 398 trans_idx 1 based fixed bin(17,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_space_mgr_$find_attendee" set ref 223 370* 416 471 475 475 475 trans_offset 000212 automatic bit(18) packed unaligned dcl 55 set ref 359* 360 364 392* 393 395 transaction based structure level 1 unaligned dcl 1-91 set ref 359 transaction_block based structure level 1 unaligned dcl 1-114 set ref 392 transaction_block_ptr 000240 automatic pointer dcl 1-8 set ref 219 221 254* 256 257 258 259 259* 261* 261 262 266* 267 270 273* 273 276 288 289 290 291 297 297* 297 299* 318 320 321 326 327* 327 328 330* 347* 353 362 363 375 388 390 391* 392 392 396 398 399 400 transaction_count 2 based fixed bin(17,0) level 2 dcl 1-77 set ref 250 350 374* 415 422 510 510 516 518* 521 transaction_ptr 000236 automatic pointer dcl 1-8 set ref 221* 223 223 227* 233 358* 359 359 366 367 369 370 372 377 467* 471 472 474* 474 475 475 475 522* 527* 529 529 559* 563 564 568 569* 569 570 570 573* 578 transaction_seg based structure level 1 dcl 1-77 transaction_seg_ptr 62 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_space_mgr_$find_attendee" ref 413 transaction_seg_ptr 000232 automatic pointer dcl 1-8 in procedure "forum_space_mgr_$find_attendee" set ref 215* 221 226* 250 254 254 261 266 266 273 283* 297 313* 327 345* 347 347 348 349 349 350 351 352 352 356 358 358 363 363 364 374 390 390 391 391 395 396 396 413* 415 415 416 416 422 467* 474 487* 494 494 510 510 516 518 521 522 522 527* 534* 554 555 555 559* 564 569 transactions 5 based structure array level 2 packed packed unaligned dcl 1-114 set ref 396 version based fixed bin(17,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_space_mgr_$find_attendee" set ref 223 366* version based fixed bin(17,0) level 2 in structure "attendee" dcl 1-42 in procedure "forum_space_mgr_$find_attendee" set ref 150* 188 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ATTENDEE_SEG_NAME internal static char(32) initial packed unaligned dcl 1-127 ATTENDEE_SEG_VERSION_1 internal static char(8) initial packed unaligned dcl 1-123 PROCEEDINGS_SEG_NAME internal static char(32) initial packed unaligned dcl 1-127 RWC_XACL internal static bit(3) initial packed unaligned dcl 1-137 RW_XACL internal static bit(3) initial packed unaligned dcl 1-137 R_XACL internal static bit(3) initial packed unaligned dcl 1-137 TRANSACTION_SEG_NAME internal static char(32) initial packed unaligned dcl 1-127 TRANS_SEG_VERSION_1 internal static char(8) initial packed unaligned dcl 1-123 NAMES DECLARED BY EXPLICIT CONTEXT. BIT_MAP_EXIT 001461 constant label dcl 455 ref 408 EXIT_LOOP 002124 constant label dcl 550 ref 523 529 FIND_TRANS_EXIT 000605 constant label dcl 237 ref 212 343 FOUND_UNSEEN 002235 constant label dcl 575 ref 570 GET_ATTENDEE_EXIT 000346 constant label dcl 173 ref 109 126 GET_HIGHEST_EXIT 002247 constant label dcl 588 ref 488 NEXT_TRANS_EXIT 000721 constant label dcl 304 ref 282 PREV_TRANS_EXIT 001034 constant label dcl 335 ref 312 error 002710 constant entry internal dcl 594 ref 144 191 219 229 250 272 360 393 423 535 540 561 find_block 002445 constant entry internal dcl 243 ref 217 286 316 forum_space_mgr_$allocate_bit_map 001226 constant entry external dcl 405 forum_space_mgr_$find_attendee 000107 constant entry external dcl 29 forum_space_mgr_$find_next_transaction 000617 constant entry external dcl 279 forum_space_mgr_$find_prev_transaction 000730 constant entry external dcl 309 ref 534 forum_space_mgr_$find_transaction 000360 constant entry external dcl 209 ref 467 527 559 forum_space_mgr_$get_attendee_slot 000161 constant entry external dcl 123 forum_space_mgr_$get_highest_seen 001507 constant entry external dcl 481 forum_space_mgr_$get_transaction_slot 001045 constant entry external dcl 340 get_new_block 002561 constant entry internal dcl 383 ref 356 hit_out_of_bounds 000465 constant label dcl 224 ref 222 lookup_attendee 002255 constant entry internal dcl 178 ref 111 133 mark_expunged 002632 constant entry internal dcl 461 ref 445 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3366 3422 2732 3376 Length 3706 2732 34 250 433 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME forum_space_mgr_$find_attendee 381 external procedure is an external procedure. on unit on line 144 70 on unit lookup_attendee internal procedure shares stack frame of external procedure forum_space_mgr_$find_attende on unit on line 222 64 on unit find_block internal procedure shares stack frame of external procedure forum_space_mgr_$find_attende get_new_block internal procedure shares stack frame of external procedure forum_space_mgr_$find_attende on unit on line 423 70 on unit mark_expunged internal procedure shares stack frame of external procedure forum_space_mgr_$find_attende error 64 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME forum_space_mgr_$find_attendee 000100 attendee_name forum_space_mgr_$find_attendee 000106 attendee_offset forum_space_mgr_$find_attendee 000110 based_area_ptr forum_space_mgr_$find_attendee 000112 egress forum_space_mgr_$find_attendee 000116 first forum_space_mgr_$find_attendee 000117 highest forum_space_mgr_$find_attendee 000120 idx forum_space_mgr_$find_attendee 000122 last_trans_ptr forum_space_mgr_$find_attendee 000124 loop_counter forum_space_mgr_$find_attendee 000125 result forum_space_mgr_$find_attendee 000126 old_attendee_ptr forum_space_mgr_$find_attendee 000130 old_bit_map_ptr forum_space_mgr_$find_attendee 000132 original_high forum_space_mgr_$find_attendee 000134 p forum_space_mgr_$find_attendee 000136 path forum_space_mgr_$find_attendee 000210 seen_all forum_space_mgr_$find_attendee 000211 status forum_space_mgr_$find_attendee 000212 trans_offset forum_space_mgr_$find_attendee 000213 trans_idx forum_space_mgr_$find_attendee 000230 attendee_seg_ptr forum_space_mgr_$find_attendee 000232 transaction_seg_ptr forum_space_mgr_$find_attendee 000234 attendee_ptr forum_space_mgr_$find_attendee 000236 transaction_ptr forum_space_mgr_$find_attendee 000240 transaction_block_ptr forum_space_mgr_$find_attendee 000242 bit_map_ptr forum_space_mgr_$find_attendee 000244 alloc_bit_map_length forum_space_mgr_$find_attendee 000246 open_data_ptr forum_space_mgr_$find_attendee 000250 seen_last forum_space_mgr_$find_attendee 000274 attendee_count lookup_attendee 000304 last_block_ptr find_block 000314 old_block_offset get_new_block 000324 idx mark_expunged 000325 status mark_expunged THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp alloc_bit_temp call_ext_in call_ext_out_desc call_int_this call_int_other return_mac tra_ext_1 tra_ext_2 signal_op enable_op shorten_stack ext_entry ext_entry_desc int_entry index_bs_1_eis op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. find_bit_$last_on forum_logger_ hcs_$fs_get_path_name THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. forum_et_$invalid_trans_idx forum_et_$meeting_bloat forum_et_$no_such_user forum_et_$no_transactions forum_et_$roster_full forum_et_$trans_reaped forum_et_$unexpected_fault LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 29 000102 106 000127 107 000133 109 000136 111 000141 113 000143 114 000145 115 000150 116 000152 118 000153 119 000155 121 000156 123 000157 126 000201 128 000204 129 000212 131 000215 133 000222 134 000224 135 000226 136 000230 137 000231 141 000232 142 000234 144 000237 145 000263 146 000270 148 000271 150 000273 151 000275 152 000301 154 000304 157 000312 159 000321 160 000330 162 000333 163 000337 166 000341 167 000342 169 000343 170 000344 171 000345 173 000346 175 000350 176 000352 209 000353 212 000376 214 000401 215 000403 217 000406 219 000407 221 000425 222 000437 223 000456 224 000465 226 000466 227 000520 229 000570 231 000600 233 000601 234 000603 235 000604 237 000605 239 000607 240 000611 279 000612 282 000633 283 000636 284 000641 286 000643 288 000644 289 000650 290 000661 291 000670 292 000675 293 000676 295 000677 296 000701 297 000702 299 000713 300 000715 302 000716 304 000721 306 000723 307 000725 309 000726 312 000744 313 000747 314 000752 316 000754 318 000755 319 000762 320 000771 321 001000 322 001005 323 001006 325 001007 326 001012 327 001017 328 001022 329 001025 330 001026 331 001030 333 001031 335 001034 337 001036 338 001040 340 001041 343 001061 345 001064 347 001067 348 001073 349 001100 350 001103 351 001106 352 001110 353 001112 356 001114 358 001121 359 001126 360 001132 362 001144 363 001150 364 001161 366 001163 367 001165 369 001175 370 001201 372 001203 374 001212 375 001214 377 001216 378 001217 379 001220 405 001221 408 001240 410 001243 411 001247 412 001252 413 001254 415 001256 416 001263 418 001272 419 001300 420 001303 422 001306 423 001315 424 001341 425 001353 427 001354 428 001357 429 001363 430 001366 431 001371 432 001374 433 001404 435 001405 439 001415 440 001420 443 001431 444 001437 445 001440 447 001445 448 001450 449 001452 451 001455 452 001457 453 001460 455 001461 457 001463 458 001466 459 001500 481 001501 486 001527 487 001532 488 001535 489 001540 492 001541 493 001543 494 001544 495 001550 496 001551 499 001552 500 001555 506 001556 507 001601 508 001604 510 001605 513 001623 516 001626 517 001627 518 001661 521 001735 522 001741 523 001745 526 001746 527 001750 528 001764 529 001766 530 002005 531 002011 532 002013 533 002014 534 002017 535 002032 537 002045 538 002054 539 002057 540 002060 542 002066 543 002070 544 002117 546 002123 550 002124 552 002126 553 002130 554 002131 555 002137 556 002142 558 002143 559 002144 561 002160 563 002170 564 002200 566 002203 567 002204 568 002212 569 002217 570 002222 571 002232 573 002233 575 002235 578 002237 579 002241 582 002242 583 002243 585 002245 586 002246 588 002247 590 002251 591 002252 592 002254 178 002255 183 002257 184 002260 186 002265 187 002266 188 002267 189 002275 190 002327 191 002373 194 002403 196 002413 197 002414 198 002422 199 002425 202 002426 203 002434 205 002437 207 002441 243 002445 250 002446 253 002463 254 002464 256 002471 257 002474 258 002500 259 002502 261 002511 262 002514 264 002517 266 002520 267 002525 270 002527 271 002533 272 002534 273 002546 274 002554 276 002555 277 002560 383 002561 388 002562 390 002564 391 002573 392 002577 393 002603 395 002615 396 002620 398 002622 399 002624 400 002627 402 002631 461 002632 467 002633 468 002647 471 002652 472 002655 474 002662 475 002665 478 002705 479 002706 594 002707 599 002715 600 002721 ----------------------------------------------------------- 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