COMPILATION LISTING OF SEGMENT forum_trans_mgr_ Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: ACTC Technologies Inc. Compiled on: 10/19/92 1453.3 mdt Mon 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,MCR7356), 13* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 14* Added $rechain entry point. 15* 2) change(86-07-30,Pattin), approve(86-07-30,MCR7354), 16* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 17* Added (next previous)_transaction entries. Improved handling of RQO 18* during salvage/copy and transaction entering. Fixed some looping bugs in 19* trans_time_info. Fixed trans_time_info error return. Other performance 20* improvements in forum_limits and trans_ref_info. 21* 3) change(92-10-07,Vu), approve(92-10-07,MCR8273), audit(92-10-08,Zimmerman), 22* install(92-10-19,MR12.5-1027): 23* Forum will go into an infinite loop for any date_time string which falls 24* between transaction blocks. 25* END HISTORY COMMENTS */ 26 27 28 /* SECURITY/AUDITING NOTE: 29* The enter_trans and rechain entrypoints reference the string arguments 30* (P_input_string and P_subject) twice. Since neither of these strings 31* are used in any security or integrity checking, this should not be 32* considered a violation of the standard that states that gates should 33* only reference their arguments twice. */ 34 35 /* format: style3,ifthen,ifthendo,ifthenstmt,^indnoniterdo,^inditerdo,idind30 */ 36 37 forum_trans_mgr_$enter_trans: 38 procedure (P_forum_idx, P_input_string, P_pref, P_subject, P_filled_sw, P_trans_idx, P_status); 39 40 /* Version 2 Forum - 41* This module deals with entering and reading transactions, and 42* managing information relating to transactions. 43* 44* Jay Pattin 1/2/83 45* 8/19/83 Jay Pattin new notifications 46* Modified 11/20/83 by Jeffrey I. Schiller to allow expunging of 47* forums with multiple proceedings segments (prior behavior was 48* an FPE). Also bugfixes to support large (upto one segment) transactions. 49* Modified 12/22/83 by Jeffrey I. Schiller to fix bug in forum_limits 50* as applied to expunged transactions. 51* Audit changes, J. Spencer Love 10/05/84 */ 52 53 declare ( 54 P_attendee_offset bit (18), 55 P_bit_map bit (*), 56 P_deleted_sw bit (1) aligned, 57 P_directory char (*), 58 P_filled_sw bit (1) aligned, 59 P_first_trans_idx fixed bin, 60 P_flags_word bit (36) aligned, 61 P_forum_idx fixed bin, 62 (P_high_time, P_low_time) fixed bin (71), 63 (P_high_trans, P_low_trans) fixed bin, 64 P_input_string char (*), 65 P_last_trans_idx fixed bin, 66 P_last_seen_trans_idx fixed bin, 67 P_name char (*), 68 P_new_trans_count fixed bin, 69 (P_next, P_previous) fixed bin, 70 P_open_data_ptr ptr, 71 P_area_ptr ptr, 72 P_trans_ptr ptr, 73 (P_pref, P_nref) fixed bin, 74 P_status fixed bin (35), 75 P_subject char (*), 76 P_trans_idx fixed bin, 77 P_type fixed bin, 78 P_uid bit (36) aligned, 79 P_user_name char (*), 80 P_value_sw bit (1) aligned 81 ) parameter; 82 83 declare chairman bit (1) aligned, 84 directory char (168), 85 done bit (1) aligned, 86 forum_idx fixed bin, 87 input_len fixed bin (21), 88 (high_time, low_time) fixed bin (71), 89 (high_trans, low_trans) fixed bin, 90 idx fixed bin, 91 loading bit (1) aligned, 92 message char (256), 93 name char (32), 94 new_trans_count fixed bin, 95 next_trans_ptr ptr, 96 next_word fixed bin (35), 97 (nref, pref) fixed bin, 98 privileged bit (1) aligned, 99 status fixed bin (35), 100 subject_len fixed bin (21), 101 subject_offset bit (18) aligned, 102 text_offset bit (18) aligned, 103 trans_idx fixed bin, 104 trans_ptr ptr, 105 type fixed bin, 106 user_name char (32), 107 value_sw bit (1) aligned, 108 xacl bit (36) aligned, 109 (any_other, area, record_quota_overflow, seg_fault_error, cleanup) condition, 110 (addr, binary, bit, clock, copy, divide, index, length, null, ptr, rel, rtrim, string, substr) builtin; 111 112 declare person_id char (22) static, 113 project_id char (9) static, 114 static_init bit (1) aligned static init ("0"b); 115 116 declare 1 forum_message aligned, 117 2 forum_uid bit (36), 118 2 attendee_offset bit (18); 119 120 declare ipc_message fixed bin (71) based (addr (forum_message)); 121 declare forum_logger_ entry options (variable), 122 forum_logger_$any_other entry options (variable), 123 forum_notify_gate_$lookup entry (char (*), bit (1) aligned, fixed bin (35)), 124 forum_open_mgr_$lookup_forum_idx entry (fixed bin, ptr, bit (36) aligned, fixed bin (35)), 125 forum_seg_mgr_$create_segment entry (ptr, fixed bin (35)), 126 forum_seg_mgr_$initiate entry (char (*), char (*), bit (1) aligned, ptr, ptr, bit (36) aligned, fixed bin (35)), 127 forum_seg_mgr_$initiate_seg entry (ptr, fixed bin, fixed bin (35)), 128 forum_seg_mgr_$terminate entry (ptr, ptr), 129 forum_seg_mgr_$unlock entry (ptr), 130 forum_space_mgr_$allocate_bit_map entry (ptr, ptr, fixed bin, ptr, fixed bin (35)), 131 forum_space_mgr_$find_attendee entry (ptr, char (*), ptr, fixed bin (35)), 132 forum_space_mgr_$find_next_transaction entry (ptr, fixed bin, fixed bin, fixed bin(35)), 133 forum_space_mgr_$find_prev_transaction entry (ptr, fixed bin, fixed bin, fixed bin(35)), 134 forum_space_mgr_$find_transaction entry (ptr, fixed bin, ptr, fixed bin (35)), 135 forum_space_mgr_$get_transaction_slot entry (ptr, ptr, fixed bin (35)), 136 forum_space_mgr_$get_highest_seen entry (ptr, ptr, bit (1) aligned, fixed bin, ptr, fixed bin (35)), 137 get_temp_segment_ entry (char (*), ptr, fixed bin (35)), 138 hcs_$force_write entry (ptr, bit (36), fixed bin (35)), 139 hcs_$wakeup entry (bit (36) aligned, fixed bin (71), fixed bin (71), fixed bin (35)), 140 ioa_$rsnnl entry options (variable), 141 send_mail_ entry (char (*), char (*), ptr, fixed bin (35)), 142 sys_info$max_seg_size fixed bin(35) ext static, 143 user_info_$login_data 144 entry (char (*), char (*), char (*), fixed bin, fixed bin, fixed bin, fixed bin (71), char (*)); 145 146 declare ( 147 error_table_$noalloc, 148 error_table_$rqover, 149 error_table_$seg_busted, 150 forum_et_$cant_notify, 151 forum_et_$no_message, 152 forum_et_$not_eligible, 153 forum_et_$meeting_bloat, 154 forum_et_$message_too_long, 155 forum_et_$incorrect_uid, 156 forum_et_$read_only, 157 forum_et_$rqo, 158 forum_et_$rqo_load, 159 forum_et_$trans_deleted, 160 forum_et_$chairman_only, 161 forum_et_$invalid_att_idx, 162 forum_et_$unexpected_fault 163 ) fixed bin (35) external; 164 165 declare ( 166 forum_data_$print_eligibility_messages, 167 forum_data_$chairman_override 168 ) bit (1) aligned external; 169 170 declare egress label variable, 171 output_area area based (P_area_ptr), 172 proceeding_string char (alloc_text_length) based (trans_ptr), 173 subject char (subject_len) based, 174 text char (input_len) based; 175 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 */ 176 177 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 */ 178 179 3 1 /* ... BEGIN INCLUDE FILE forum_flags.incl.pl1 ... */ 3 2 3 3 /* Flags returned by forum_$forum_limits 3 4* Jay Pattin 5/5/82 */ 3 5 3 6 dcl forum_flags_word bit (36) aligned; 3 7 3 8 dcl 1 forum_flags aligned based (addr (forum_flags_word)), 3 9 2 chairman bit (1) unaligned, 3 10 2 read_only bit (1) unaligned, 3 11 2 print_cm_message bit (1) unaligned, 3 12 2 print_acl_message bit (1) unaligned, 3 13 2 acl_has_changed bit (1) unaligned, 3 14 2 adjourned bit (1) unaligned, 3 15 2 mbz bit (30) unaligned; 3 16 3 17 /* END INCLUDE FILE forum_flags.incl.pl1 */ 180 181 4 1 /* BEGIN INCLUDE FILE: forum_user_trans.incl.pl1 */ 4 2 4 3 dcl alloc_text_length fixed bin (21); /* length of text area to allocate */ 4 4 dcl alloc_subject_length fixed bin (21); /* length of subject area to allocate */ 4 5 dcl forum_user_trans_ptr ptr; /* pointer to below structure */ 4 6 4 7 dcl 1 forum_user_trans based (forum_user_trans_ptr) aligned, 4 8 2 type fixed bin, /* type of transaction */ 4 9 2 person_id char (22), /* person_id of author of this transaction */ 4 10 2 project_id char (9), /* project_id of author of this transaction */ 4 11 2 time fixed bin (71), /* time transaction was entered */ 4 12 2 trans_no fixed bin, /* number of this transaction */ 4 13 2 next_trans_ptr ptr, /* pointer (in user ring) of next transaction */ 4 14 2 prev_trans_ptr ptr, /* pointer (in user ring) of previous transaction */ 4 15 2 subject_length fixed bin (21), /* length of subject field of transaction */ 4 16 2 text_length fixed bin (21), /* length of text field of transaction */ 4 17 2 unfilled bit (1) aligned, /* set if transaction is NOT stored filled */ 4 18 2 subject char (alloc_subject_length refer (forum_user_trans.subject_length)) unaligned, /* subject of transaction */ 4 19 2 text char (alloc_text_length refer (forum_user_trans.text_length)) unaligned; /* text of transaction */ 4 20 4 21 declare user_trans_type fixed bin static options (constant) initial (1); 4 22 declare message_type fixed bin static options (constant) initial (2); 4 23 4 24 declare (ONLY_UNDELETED init (0), 4 25 INCLUDE_DELETED init (1), 4 26 ONLY_DELETED init (2)) 4 27 fixed bin static options (constant); 4 28 4 29 /* END INCLUDE FILE: forum_user_trans.incl.pl1 */ 182 183 5 1 /* BEGIN send_mail_info include file */ 5 2 5 3 dcl send_mail_info_version_2 fixed bin init(2); 5 4 5 5 dcl 1 send_mail_info aligned, 5 6 2 version fixed bin, /* = 2 */ 5 7 2 sent_from char(32) aligned, 5 8 2 switches, 5 9 3 wakeup bit(1) unal, 5 10 3 mbz1 bit(1) unal, 5 11 3 always_add bit(1) unal, 5 12 3 never_add bit(1) unal, 5 13 3 notify bit(1) unal, 5 14 3 acknowledge bit(1) unal, 5 15 3 mbz bit(30) unal; 5 16 5 17 /* END send_mail_info include file */ 184 185 186 /* forum_trans_mgr_$enter_trans: 187* procedure (P_forum_idx, P_input_string, P_pref, P_subject, P_filled_sw, P_trans_idx, P_status); */ 188 189 loading = "0"b; 190 goto ENTER_COMMON; 191 192 forum_trans_mgr_$load_trans: 193 entry (P_open_data_ptr, P_input_string, P_pref, P_subject, P_filled_sw, P_trans_idx, P_status); 194 195 loading = "1"b; 196 ENTER_COMMON: 197 call initialize (ENTER_PUNT); 198 199 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 200 on seg_fault_error call error (error_table_$seg_busted); 201 on any_other call any_other_handler (); 202 203 if ^loading then do; 204 forum_idx = P_forum_idx; 205 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 206 if status ^= 0 207 then call error (status); 208 end; 209 else open_data_ptr = P_open_data_ptr; 210 211 transaction_seg_ptr = open_data.transaction_seg_ptr; 212 attendee_seg_ptr = open_data.attendee_seg_ptr; 213 if ^loading then do; 214 if xacl = R_XACL 215 then call error (forum_et_$read_only); 216 attendee_ptr = open_data.attendee_ptr; 217 bit_map_ptr = open_data.bit_map_ptr; 218 end; 219 220 pref = P_pref; 221 if pref ^= 0 then do; 222 call forum_space_mgr_$find_transaction (transaction_seg_ptr, pref, trans_ptr, status); 223 if status ^= 0 224 then if loading 225 then pref = 0; 226 else call error (status); 227 end; 228 229 idx = transaction_seg.current_segno; 230 if open_data.proceedings_ptrs (idx) = null () then do; 231 if ^attendee_seg.salvaging then 232 call forum_seg_mgr_$initiate_seg (open_data_ptr, idx, status); 233 else call get_temp_segment_ ("forum_salvager_", open_data.proceedings_ptrs (idx), status); 234 if status ^= 0 235 then call error (status); 236 end; 237 238 next_word = binary (transaction_seg.next_trans_offset, 35); 239 input_len = length (rtrim (P_input_string)); 240 subject_len = length (rtrim (P_subject)); 241 242 if (next_word + divide (subject_len + input_len + 3, 4, 35) + 2) > sys_info$max_seg_size 243 then do; 244 call get_new_seg (); 245 next_word = 0; 246 end; 247 248 next_trans_ptr = ptr (open_data.proceedings_ptrs (idx), next_word); 249 250 on record_quota_overflow begin; 251 if loading then call error (forum_et_$rqo_load); 252 else call error (forum_et_$rqo); 253 end; 254 255 next_trans_ptr -> subject = P_subject; 256 subject_offset = rel (next_trans_ptr); 257 next_word = next_word + divide (subject_len + 3, 4, 35); 258 next_trans_ptr = ptr (next_trans_ptr, next_word); 259 next_trans_ptr -> text = P_input_string; 260 text_offset = rel (next_trans_ptr); 261 next_word = next_word + divide (input_len + 3, 4, 35); 262 transaction_seg.next_trans_offset = bit (binary (next_word, 18), 18); 263 264 call forum_space_mgr_$get_transaction_slot (transaction_seg_ptr, transaction_ptr, status); 265 if status ^= 0 266 then call error (status); 267 268 transaction.segno = idx; 269 transaction.subject_offset = subject_offset; 270 transaction.subject_length = subject_len; 271 transaction.text_offset = text_offset; 272 transaction.text_length = input_len; 273 274 if ^loading then do; 275 call hcs_$force_write (open_data.proceedings_ptrs (idx), (""b), (0)); 276 transaction.person_id = person_id; 277 transaction.project_id = project_id; 278 transaction.time = clock (); 279 end; 280 281 transaction.nref_offset = ""b; 282 string (transaction.flags) = ""b; 283 transaction.unfilled = P_filled_sw; 284 285 if pref ^= 0 then do; /* link this transaction into reply chain if apropriate */ 286 done = "0"b; 287 do while (^done); 288 if trans_ptr -> transaction.nref_offset = ""b 289 then done = "1"b; 290 else trans_ptr = ptr (transaction_seg_ptr, trans_ptr -> transaction.nref_offset); 291 end; 292 trans_ptr -> transaction.nref_offset = rel (transaction_ptr); 293 transaction.pref_offset = rel (trans_ptr); 294 end; 295 296 if ^loading then call set_seen_switch (transaction.trans_idx, "1"b); 297 P_trans_idx = transaction.trans_idx; 298 299 revert seg_fault_error; 300 revert record_quota_overflow; 301 302 on any_other 303 begin; 304 on any_other system; 305 call forum_logger_$any_other (0, "forum_trans_mgr_ (notify)", open_data.forum_name); 306 call error (forum_et_$cant_notify); 307 end; 308 309 status = 0; 310 311 if ^loading then do; 312 forum_message.forum_uid = open_data.forum_uid; 313 /* for validation purposes */ 314 forum_message.attendee_offset = rel (attendee_ptr); 315 316 call ioa_$rsnnl ("A new transaction has just been added to the ^a meeting.", message, (0), 317 open_data.forum_name); 318 319 send_mail_info.version = 2; 320 send_mail_info.sent_from = "forum"; 321 string (send_mail_info.switches) = ""b; 322 send_mail_info.wakeup, send_mail_info.always_add = "1"b; 323 324 attendee_ptr = ptr (attendee_seg_ptr, attendee_seg.first_attendee_offset); 325 do while (attendee_ptr ^= null ()); 326 if attendee.person_id = person_id 327 then goto NEXT; 328 if attendee.attending & attendee.participating 329 then call hcs_$wakeup (attendee.process_id, attendee.event_channel, ipc_message, (0)); 330 else if attendee.notify & attendee.participating then do; 331 call forum_notify_gate_$lookup ((attendee.person_id), done, status); 332 if done & status = 0 333 then call send_mail_ (rtrim (attendee.person_id) || "." || rtrim (attendee.project_id), 334 rtrim (message), addr (send_mail_info), (0)); 335 end; 336 NEXT: 337 if attendee.next_offset = ""b 338 then attendee_ptr = null (); 339 else attendee_ptr = ptr (attendee_seg_ptr, attendee.next_offset); 340 end; 341 status = 0; 342 call forum_seg_mgr_$unlock (attendee_seg_ptr); 343 end; 344 P_status = status; 345 return; 346 347 ENTER_PUNT: 348 if ^loading 349 then call forum_seg_mgr_$unlock (attendee_seg_ptr); 350 P_status = status; 351 return; 352 353 get_new_seg: 354 proc (); 355 356 if attendee_seg.salvaging then do; 357 idx, transaction_seg.current_segno = transaction_seg.current_segno + 1; 358 transaction_seg.next_trans_offset = ""b; 359 call get_temp_segment_ ("forum_salvager_", open_data.proceedings_ptrs (idx), status); 360 if status ^= 0 361 then call error (status); 362 end; 363 else do; 364 call forum_seg_mgr_$create_segment (open_data_ptr, status); 365 if status ^= 0 366 then call error (status); 367 368 idx = transaction_seg.current_segno; 369 370 call forum_seg_mgr_$initiate_seg (open_data_ptr, idx, status); 371 if status ^= 0 372 then call error (status); 373 end; 374 375 next_trans_ptr = open_data.proceedings_ptrs (idx); 376 return; 377 378 end get_new_seg; 379 380 forum_trans_mgr_$rechain: 381 entry (P_forum_idx, P_trans_idx, P_pref, P_subject, P_status); 382 383 call initialize (CHAIN_PUNT); 384 385 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 386 on any_other call any_other_handler (); 387 388 forum_idx = P_forum_idx; 389 trans_idx = P_trans_idx; 390 pref = P_pref; 391 392 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 393 if status ^= 0 then call error (status); 394 395 attendee_seg_ptr = open_data.attendee_seg_ptr; 396 transaction_seg_ptr = open_data.transaction_seg_ptr; 397 if xacl ^= RWC_XACL then call error (forum_et_$chairman_only); 398 399 call forum_space_mgr_$find_transaction (transaction_seg_ptr, trans_idx, transaction_ptr, status); 400 if status ^= 0 then call error (status); 401 402 call change_subject (P_subject); 403 404 if pref ^= 0 then do; 405 call forum_space_mgr_$find_transaction (transaction_seg_ptr, pref, trans_ptr, status); 406 if status ^= 0 then call error (status); 407 408 if pref > trans_idx then do; 409 done = "0"b; 410 do while (^done); 411 if trans_ptr -> transaction.pref_offset = ""b then done = "1"b; 412 else if trans_ptr -> transaction.trans_idx <= trans_idx then done = "1"b; 413 else trans_ptr = ptr (trans_ptr, trans_ptr -> transaction.pref_offset); 414 end; 415 416 if trans_ptr -> transaction.trans_idx > trans_idx then do; /* first in chain */ 417 call remove_from_chain (); 418 transaction.pref_offset = ""b; 419 transaction.nref_offset = rel (trans_ptr); 420 trans_ptr -> transaction.pref_offset = rel (transaction_ptr); 421 goto CHAIN_PUNT; /* done */ 422 end; 423 end; 424 425 done = "0"b; 426 do while (^done); 427 if trans_ptr -> transaction.nref_offset = ""b then done = "1"b; 428 else if ptr (trans_ptr, trans_ptr -> transaction.nref_offset) -> transaction.trans_idx >= trans_idx then done = "1"b; 429 else trans_ptr = ptr (trans_ptr, trans_ptr -> transaction.nref_offset); 430 end; 431 432 if trans_ptr = transaction_ptr then goto CHAIN_PUNT; /* already chained */ 433 end; 434 435 call remove_from_chain (); 436 437 if pref ^= 0 then do; /* If this had a reply, unthread it */ 438 transaction.nref_offset = trans_ptr -> transaction.nref_offset; /* and thread in new one */ 439 if transaction.nref_offset ^= ""b then 440 ptr (transaction_ptr, transaction.nref_offset) -> transaction.pref_offset = rel (transaction_ptr); 441 transaction.pref_offset = rel (trans_ptr); 442 trans_ptr -> transaction.nref_offset = rel (transaction_ptr); 443 end; 444 else do; 445 transaction.pref_offset = ""b; /* Not in reply to anything anymore */ 446 transaction.nref_offset = ""b; 447 end; 448 449 status = 0; 450 451 CHAIN_PUNT: 452 call forum_seg_mgr_$unlock (attendee_seg_ptr); 453 P_status = status; 454 return; 455 456 remove_from_chain: 457 procedure (); 458 459 if transaction.pref_offset ^= ""b then /* remove from original chain */ 460 ptr (transaction_ptr, transaction.pref_offset) -> transaction.nref_offset = transaction.nref_offset; 461 if transaction.nref_offset ^= ""b then 462 ptr (transaction_ptr, transaction.nref_offset) -> transaction.pref_offset = transaction.pref_offset; 463 464 end remove_from_chain; 465 466 change_subject: 467 procedure (new_subject); 468 469 declare new_subject char (*) parameter; 470 471 subject_len = length (rtrim (new_subject)); 472 if subject_len = 0 then return; 473 474 /* easy case. it's short enough to just overwrite the old one */ 475 476 if subject_len <= transaction.subject_length then do; 477 idx = transaction.segno; 478 if open_data.proceedings_ptrs (idx) = null () then 479 call forum_seg_mgr_$initiate_seg (open_data_ptr, idx, status); 480 if status ^= 0 then call error (status); 481 482 ptr (open_data.proceedings_ptrs (idx), transaction.subject_offset) -> subject = new_subject; 483 transaction.subject_length = subject_len; 484 return; 485 end; 486 487 if transaction.segno ^= transaction_seg.current_segno then call error (forum_et_$meeting_bloat); 488 489 /* If it won't fit in the new segment, shoudl we copy the transaction ?? */ 490 491 next_word = binary (transaction_seg.next_trans_offset, 35); 492 493 if next_word + divide (subject_len + 3, 4, 35) + 2 > sys_info$max_seg_size then call error (forum_et_$meeting_bloat); 494 /* lose, lose */ 495 496 next_trans_ptr = ptr (open_data.proceedings_ptrs (transaction_seg.current_segno), next_word); 497 498 on record_quota_overflow call error (forum_et_$rqo); 499 500 next_trans_ptr -> subject = new_subject; 501 revert record_quota_overflow; 502 503 transaction.subject_offset = rel (next_trans_ptr); 504 transaction.subject_length = subject_len; 505 next_word = next_word + divide (subject_len + 3, 4, 35); 506 transaction_seg.next_trans_offset = bit (binary (next_word, 18), 18); 507 508 return; 509 end change_subject; 510 511 forum_trans_mgr_$read_trans: 512 entry (P_forum_idx, P_trans_idx, P_area_ptr, P_trans_ptr, P_status); 513 514 call initialize (READ_PUNT); 515 516 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 517 on seg_fault_error call error (error_table_$seg_busted); 518 on any_other call any_other_handler (); 519 520 forum_idx = P_forum_idx; 521 trans_idx = P_trans_idx; 522 523 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 524 if status ^= 0 525 then call error (status); 526 527 transaction_seg_ptr = open_data.transaction_seg_ptr; 528 attendee_seg_ptr = open_data.attendee_seg_ptr; 529 530 call forum_space_mgr_$find_transaction (transaction_seg_ptr, trans_idx, transaction_ptr, status); 531 if status ^= 0 532 then call error (status); 533 534 if transaction.deleted 535 then if xacl ^= RWC_XACL & person_id ^= transaction.person_id 536 then call error (forum_et_$trans_deleted); 537 538 idx = transaction.segno; 539 if open_data.proceedings_ptrs (idx) = null () then do; 540 call forum_seg_mgr_$initiate_seg (open_data_ptr, idx, status); 541 if status ^= 0 then call error (status); 542 end; 543 544 subject_len, alloc_subject_length = transaction.subject_length; 545 alloc_text_length = transaction.text_length; 546 547 on area call error (error_table_$noalloc); 548 on record_quota_overflow call error (error_table_$rqover); 549 allocate forum_user_trans in (output_area) set (forum_user_trans_ptr); 550 revert area; 551 revert record_quota_overflow; 552 553 forum_user_trans.type = user_trans_type; 554 forum_user_trans.person_id = transaction.person_id; 555 forum_user_trans.project_id = transaction.project_id; 556 forum_user_trans.trans_no = trans_idx; 557 forum_user_trans.time = transaction.time; 558 forum_user_trans.prev_trans_ptr, forum_user_trans.next_trans_ptr = null (); 559 /* these are used by user ring status */ 560 forum_user_trans.unfilled = transaction.unfilled; 561 562 trans_ptr = ptr (open_data.proceedings_ptrs (idx), transaction.subject_offset); 563 forum_user_trans.subject = trans_ptr -> subject; 564 565 trans_ptr = ptr (trans_ptr, transaction.text_offset); 566 forum_user_trans.text = proceeding_string; 567 568 if transaction.deleted 569 then P_status = forum_et_$trans_deleted; 570 else P_status = 0; 571 572 P_trans_ptr = forum_user_trans_ptr; 573 call forum_seg_mgr_$unlock (attendee_seg_ptr); 574 575 return; 576 577 READ_PUNT: 578 call forum_seg_mgr_$unlock (attendee_seg_ptr); 579 P_trans_ptr = null (); 580 P_status = status; 581 return; 582 583 forum_trans_mgr_$set_message: 584 entry (P_forum_idx, P_input_string, P_status); 585 586 call initialize (SET_MESSAGE_EXIT); 587 588 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 589 on any_other call any_other_handler (); 590 591 forum_idx = P_forum_idx; 592 if length (rtrim (P_input_string)) > 256 593 then call error (forum_et_$message_too_long); 594 595 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 596 if status ^= 0 597 then call error (status); 598 599 attendee_seg_ptr = open_data.attendee_seg_ptr; 600 601 if xacl ^= RWC_XACL 602 then call error (forum_et_$chairman_only); 603 604 attendee_seg.chairman_message = P_input_string; 605 606 attendee_ptr = ptr (attendee_seg_ptr, attendee_seg.first_attendee_offset); 607 do while (attendee_ptr ^= null ()); 608 attendee.message_change_pending = "1"b; 609 if attendee.next_offset = ""b 610 then attendee_ptr = null (); 611 else attendee_ptr = ptr (attendee_seg_ptr, attendee.next_offset); 612 end; 613 614 status = 0; 615 616 SET_MESSAGE_EXIT: 617 call forum_seg_mgr_$unlock (attendee_seg_ptr); 618 P_status = status; 619 return; 620 621 forum_trans_mgr_$get_message: 622 entry (P_forum_idx, P_input_string, P_status); 623 624 call initialize (GET_MESSAGE_EXIT); 625 626 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 627 on any_other call any_other_handler (); 628 629 forum_idx = P_forum_idx; 630 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 631 if status ^= 0 632 then call error (status); 633 634 attendee_seg_ptr = open_data.attendee_seg_ptr; 635 636 if attendee_seg.chairman_message = "" 637 then call error (forum_et_$no_message); 638 P_input_string = attendee_seg.chairman_message; 639 640 GET_MESSAGE_EXIT: 641 call forum_seg_mgr_$unlock (attendee_seg_ptr); 642 P_status = status; 643 if status ^= 0 644 then P_input_string = ""; 645 return; 646 647 forum_trans_mgr_$trans_time_info: 648 entry (P_forum_idx, P_low_time, P_high_time, P_low_trans, P_high_trans, P_status); 649 650 call initialize (TRANS_TIME_PUNT); 651 652 on any_other call any_other_handler (); 653 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 654 655 forum_idx = P_forum_idx; 656 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 657 if status ^= 0 658 then call error (status); 659 660 attendee_seg_ptr = open_data.attendee_seg_ptr; 661 transaction_seg_ptr = open_data.transaction_seg_ptr; 662 663 low_time = P_low_time; 664 high_time = P_high_time; 665 low_trans = 1; 666 high_trans = transaction_seg.transaction_count; 667 668 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_seg.first_block_offset); 669 transaction_ptr = ptr (transaction_seg_ptr, transaction_seg.last_trans_offset); 670 671 if transaction_seg.last_trans_offset = ""b then do; /* see TR 19266 */ 672 high_trans = 0; 673 low_trans = 0; 674 end; 675 else if high_time ^= 0 & high_time < transaction_block.time then high_trans = 0; 676 else if low_time > transaction.time then low_trans = high_trans; 677 else do; 678 if low_time > transaction_block.time 679 then low_trans = find (low_time, "1"b); 680 if high_time ^= 0 & high_time < transaction.time 681 then high_trans = find (high_time, "0"b); 682 end; 683 684 P_high_trans = high_trans; 685 P_low_trans = low_trans; 686 call forum_seg_mgr_$unlock (attendee_seg_ptr); 687 P_status = 0; 688 return; 689 690 TRANS_TIME_PUNT: 691 call forum_seg_mgr_$unlock (attendee_seg_ptr); 692 P_high_trans = 0; 693 P_low_trans = 0; 694 P_status = status; 695 return; 696 697 find: 698 proc (t, low_end) returns (fixed bin); 699 700 declare t fixed bin (71), 701 low_end bit (1) aligned, 702 trans_ptr ptr, 703 1 trans like transaction based (trans_ptr), 704 (idx, low, high, h, l) fixed bin; 705 706 done = "0"b; 707 transaction_block_ptr = ptr (transaction_seg_ptr, transaction_seg.current_block_offset); 708 do while (^done); 709 if t < transaction_block.time 710 then transaction_block_ptr = ptr (transaction_seg_ptr, transaction_block.prev_block_offset); 711 else done = "1"b; 712 end; 713 714 low = 1; 715 high = transaction_block.last_trans_idx; 716 do idx = divide (high + low, 2, 17, 0) repeat idx; 717 if transaction_block.offset (idx) = EXPUNGED then do; 718 do h = idx to high while (transaction_block.offset (h) = EXPUNGED); 719 end; 720 do l = idx to low by -1 while (transaction_block.offset (l) = EXPUNGED); 721 end; 722 723 if h > high then do; /* all expunged */ 724 if l = 0 then 725 if low_end then return (ptr (transaction_seg_ptr, transaction_seg.first_trans_offset) -> transaction.trans_idx); 726 else return (0); 727 else high = l; 728 end; 729 else if t < ptr (transaction_seg_ptr, transaction_block.offset (h)) -> trans.time then high = l; 730 else low = h; 731 732 if idx > high then idx = high; 733 else if idx < low then idx = low; 734 end; 735 else do; 736 trans_ptr = ptr (transaction_seg_ptr, transaction_block.offset (idx)); 737 if trans.time < t then do; 738 if ptr (transaction_seg_ptr, trans.next_offset) -> trans.time > t 739 then return (idx + transaction_block.first_trans_idx - 1); 740 else do; 741 low = idx + 1; 742 idx = divide (high + low, 2, 17, 0); 743 end; 744 end; 745 else if ptr (transaction_seg_ptr, trans.prev_offset) -> trans.time <= t 746 then return (idx + transaction_block.first_trans_idx - 2); 747 else do; 748 high = idx - 1; 749 idx = divide (high + low, 2, 17, 0); 750 end; 751 end; 752 end; 753 end find; 754 755 forum_trans_mgr_$trans_ref_info: 756 entry (P_forum_idx, P_trans_idx, P_type, P_pref, P_nref, P_deleted_sw, P_status); 757 758 call initialize (TRANS_REF_PUNT); 759 760 on any_other call any_other_handler (); 761 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 762 763 forum_idx = P_forum_idx; 764 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 765 if status ^= 0 766 then call error (status); 767 768 attendee_seg_ptr = open_data.attendee_seg_ptr; 769 transaction_seg_ptr = open_data.transaction_seg_ptr; 770 771 trans_idx = P_trans_idx; 772 type = P_type; 773 774 call forum_space_mgr_$find_transaction (transaction_seg_ptr, trans_idx, transaction_ptr, status); 775 if status ^= 0 776 then call error (status); 777 778 chairman = (person_id = attendee_seg.chairman.person_id); 779 P_deleted_sw = transaction.deleted; 780 781 pref, nref = 0; 782 done = "0"b; 783 trans_ptr = transaction_ptr; 784 do while (^done); 785 if trans_ptr -> transaction.pref_offset = ""b then done = "1"b; 786 else do; 787 trans_ptr = ptr (transaction_seg_ptr, trans_ptr -> transaction.pref_offset); 788 done = check (); 789 if done then pref = trans_ptr -> transaction.trans_idx; 790 end; 791 end; 792 793 done = "0"b; 794 trans_ptr = transaction_ptr; 795 do while (^done); 796 if trans_ptr -> transaction.nref_offset = ""b then done = "1"b; 797 else do; 798 trans_ptr = ptr (transaction_seg_ptr, trans_ptr -> transaction.nref_offset); 799 done = check (); 800 if done then nref = trans_ptr -> transaction.trans_idx; 801 end; 802 end; 803 804 P_pref = pref; 805 P_nref = nref; 806 807 TRANS_REF_PUNT: 808 call forum_seg_mgr_$unlock (attendee_seg_ptr); 809 if status ^= 0 then do; 810 P_pref, P_nref = 0; 811 P_deleted_sw = "0"b; 812 end; 813 P_status = status; 814 return; 815 816 forum_trans_mgr_$set_delete_sw: 817 entry (P_forum_idx, P_trans_idx, P_value_sw, P_status); 818 819 call initialize (SET_DELETE_EXIT); 820 821 on any_other call any_other_handler (); 822 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 823 824 forum_idx = P_forum_idx; 825 trans_idx = P_trans_idx; 826 value_sw = P_value_sw; 827 828 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 829 if status ^= 0 830 then call error (status); 831 832 attendee_seg_ptr = open_data.attendee_seg_ptr; 833 transaction_seg_ptr = open_data.transaction_seg_ptr; 834 835 call forum_space_mgr_$find_transaction (transaction_seg_ptr, trans_idx, transaction_ptr, status); 836 if status ^= 0 837 then call error (status); 838 839 if person_id = transaction.person_id 840 then privileged = "0"b; 841 else if xacl = RWC_XACL 842 then privileged = "1"b; 843 else call error (forum_et_$chairman_only); 844 845 if ^value_sw & ^privileged & ^transaction.deleted_by_author 846 then call error (forum_et_$chairman_only); 847 848 transaction.deleted_by_author = value_sw & ^privileged & (^transaction.deleted | value_sw); 849 850 if transaction.deleted & value_sw 851 then goto SET_DELETE_EXIT; 852 if ^transaction.deleted & ^value_sw 853 then goto SET_DELETE_EXIT; 854 855 transaction.deleted = value_sw; 856 857 if value_sw 858 then transaction_seg.deleted_count = transaction_seg.deleted_count + 1; 859 else transaction_seg.deleted_count = transaction_seg.deleted_count - 1; 860 861 SET_DELETE_EXIT: 862 call forum_seg_mgr_$unlock (attendee_seg_ptr); 863 P_status = status; 864 return; 865 866 forum_trans_mgr_$set_seen_switch: 867 entry (P_forum_idx, P_user_name, P_trans_idx, P_value_sw, P_status); 868 869 call initialize (SET_SEEN_EXIT); 870 871 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 872 873 forum_idx = P_forum_idx; 874 user_name = P_user_name; 875 trans_idx = P_trans_idx; 876 value_sw = P_value_sw; 877 878 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 879 if status ^= 0 880 then call error (status); 881 882 attendee_seg_ptr = open_data.attendee_seg_ptr; 883 transaction_seg_ptr = open_data.transaction_seg_ptr; 884 885 if user_name = "" | user_name = person_id 886 then attendee_ptr = open_data.attendee_ptr; 887 else do; 888 if xacl ^= RWC_XACL 889 then call error (forum_et_$chairman_only); 890 call forum_space_mgr_$find_attendee (attendee_seg_ptr, user_name, attendee_ptr, status); 891 if status ^= 0 892 then call error (status); 893 end; 894 895 call forum_space_mgr_$find_transaction (transaction_seg_ptr, trans_idx, transaction_ptr, status); 896 if status ^= 0 897 then call error (status); 898 899 call set_seen_switch (trans_idx, value_sw); 900 901 SET_SEEN_EXIT: 902 call forum_seg_mgr_$unlock (attendee_seg_ptr); 903 P_status = status; 904 return; 905 906 set_seen_switch: 907 proc (trans_idx, value); 908 909 declare trans_idx fixed bin, 910 value bit (1) aligned; 911 912 idx = trans_idx - attendee.bit_map_first_trans + 1; 913 bit_map_ptr = ptr (attendee_seg_ptr, attendee.bit_map_offset); 914 915 if idx < 1 then do; 916 if value then return; 917 call forum_space_mgr_$allocate_bit_map (open_data_ptr, attendee_ptr, trans_idx, bit_map_ptr, status); 918 if status ^= 0 then call error (status); 919 end; 920 921 else if idx > bit_map.length then do; 922 if ^value then return; 923 idx = index (bit_map.map, "0"b); 924 if idx = 0 then idx = bit_map.length; 925 idx = idx + attendee.bit_map_first_trans - 1; 926 call forum_space_mgr_$allocate_bit_map (open_data_ptr, attendee_ptr, idx, bit_map_ptr, status); 927 if status ^= 0 then call error (status); 928 end; 929 930 idx = trans_idx - attendee.bit_map_first_trans + 1; 931 open_data.bit_map_ptr = bit_map_ptr; 932 substr (bit_map.map, idx, 1) = value; 933 934 return; 935 end set_seen_switch; 936 937 forum_trans_mgr_$get_transaction_map: 938 entry (P_directory, P_name, P_user_name, P_bit_map, P_status); 939 940 call initialize (GET_MAP_EXIT); 941 942 on cleanup call forum_seg_mgr_$terminate (attendee_seg_ptr, transaction_seg_ptr); 943 944 directory = P_directory; 945 name = P_name; 946 call forum_seg_mgr_$initiate (directory, name, "1"b, attendee_seg_ptr, transaction_seg_ptr, xacl, status); 947 if status ^= 0 948 then call error (status); 949 if xacl = ""b 950 then call error (forum_et_$not_eligible); 951 952 call get_seen_map (); 953 954 call forum_seg_mgr_$terminate (attendee_seg_ptr, transaction_seg_ptr); 955 P_status = 0; 956 return; 957 958 GET_MAP_EXIT: 959 call forum_seg_mgr_$terminate (attendee_seg_ptr, transaction_seg_ptr); 960 P_bit_map = ""b; 961 P_status = status; 962 return; 963 964 forum_trans_mgr_$get_transaction_map_idx: 965 entry (P_forum_idx, P_user_name, P_bit_map, P_status); 966 967 call initialize (GET_MAP_IDX_EXIT); 968 969 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 970 971 forum_idx = P_forum_idx; 972 973 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 974 if status ^= 0 975 then call error (status); 976 977 attendee_seg_ptr = open_data.attendee_seg_ptr; 978 transaction_seg_ptr = open_data.transaction_seg_ptr; 979 980 call get_seen_map (); 981 982 call forum_seg_mgr_$unlock (attendee_seg_ptr); 983 P_status = 0; 984 return; 985 986 GET_MAP_IDX_EXIT: 987 call forum_seg_mgr_$unlock (attendee_seg_ptr); 988 P_status = status; 989 P_bit_map = ""b; 990 return; 991 992 get_seen_map: 993 proc (); 994 995 declare seen_map bit (transaction_seg.transaction_count); 996 997 user_name = P_user_name; 998 if open_data_ptr ^= null () & (user_name = "" | user_name = person_id) 999 then attendee_ptr = open_data.attendee_ptr; 1000 else do; 1001 call forum_space_mgr_$find_attendee (attendee_seg_ptr, user_name, attendee_ptr, status); 1002 if status ^= 0 1003 then call error (status); 1004 end; 1005 1006 if attendee.bit_map_offset = ""b 1007 then seen_map = ""b; 1008 else do; 1009 bit_map_ptr = ptr (attendee_seg_ptr, attendee.bit_map_offset); 1010 idx = attendee.bit_map_first_trans - 1; 1011 if idx = 0 1012 then seen_map = bit_map.map; 1013 else do; 1014 substr (seen_map, 1, idx) = copy ("1"b, idx); 1015 substr (seen_map, idx + 1) = bit_map.map; 1016 end; 1017 end; 1018 1019 P_bit_map = seen_map; 1020 end get_seen_map; 1021 1022 forum_trans_mgr_$forum_limits: 1023 entry (P_forum_idx, P_type, P_last_seen_trans_idx, P_first_trans_idx, P_last_trans_idx, P_new_trans_count, 1024 P_flags_word, P_status); 1025 1026 call initialize (FORUM_LIMITS_PUNT); 1027 1028 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 1029 1030 forum_idx = P_forum_idx; 1031 type = P_type; 1032 1033 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 1034 if status ^= 0 then call error (status); 1035 1036 attendee_seg_ptr = open_data.attendee_seg_ptr; 1037 transaction_seg_ptr = open_data.transaction_seg_ptr; 1038 attendee_ptr = open_data.attendee_ptr; 1039 1040 chairman = (xacl = RWC_XACL); 1041 forum_flags_word = ""b; 1042 forum_flags.chairman = chairman; 1043 forum_flags.adjourned = attendee_seg.adjourned; 1044 forum_flags.read_only = (xacl = R_XACL); 1045 forum_flags.print_cm_message = attendee.message_change_pending; 1046 forum_flags.acl_has_changed = attendee.acl_change_pending; 1047 1048 /* The following statement is dedicated to IS-14 and HBD */ 1049 1050 forum_flags.print_acl_message = 1051 attendee_seg.cm_print_acl_msg | (attendee_seg.am_init & attendee_seg.am_print_acl_msg) 1052 | (forum_data_$print_eligibility_messages & ^(attendee_seg.am_init & ^attendee_seg.am_print_acl_msg) 1053 & ^(forum_data_$chairman_override & attendee_seg.cm_init & ^attendee_seg.cm_print_acl_msg)); 1054 1055 P_flags_word = forum_flags_word; 1056 1057 if transaction_seg.first_trans_offset = ""b then do; 1058 P_first_trans_idx, P_last_trans_idx, P_last_seen_trans_idx, P_new_trans_count = 0; 1059 goto FORUM_LIMITS_PUNT; 1060 end; 1061 1062 done = "0"b; 1063 trans_ptr = ptr (transaction_seg_ptr, transaction_seg.first_trans_offset); 1064 do idx = 1 to transaction_seg.transaction_count while (^done); 1065 done = check (); 1066 if trans_ptr -> transaction.next_offset = ""b then done = "1"b; 1067 else if ^done then 1068 trans_ptr = ptr (transaction_seg_ptr, trans_ptr -> transaction.next_offset); 1069 end; 1070 if ^done then call looping (); 1071 1072 /* Check to make sure we actually found a transaction that meets the select type */ 1073 if trans_ptr -> transaction.next_offset = ""b then do; 1074 done = check (); 1075 if ^done then do; 1076 P_first_trans_idx, P_last_trans_idx, P_last_seen_trans_idx, P_new_trans_count = 0; 1077 goto FORUM_LIMITS_PUNT; 1078 end; 1079 end; 1080 1081 P_first_trans_idx = trans_ptr -> transaction.trans_idx; 1082 1083 done = "0"b; 1084 trans_ptr = ptr (transaction_seg_ptr, transaction_seg.last_trans_offset); 1085 do idx = 1 to transaction_seg.transaction_count while (^done); 1086 done = check (); 1087 if trans_ptr -> transaction.prev_offset = ""b then done = "1"b; 1088 else if ^done then trans_ptr = ptr (transaction_seg_ptr, trans_ptr -> transaction.prev_offset); 1089 end; 1090 if ^done then call looping (); 1091 P_last_trans_idx = trans_ptr -> transaction.trans_idx; 1092 1093 call forum_space_mgr_$get_highest_seen (attendee_ptr, transaction_seg_ptr, "1"b, high_trans, 1094 transaction_ptr, status); 1095 if status ^= 0 then call error (status); 1096 1097 P_last_seen_trans_idx = high_trans; 1098 1099 new_trans_count = 0; 1100 done = (transaction_ptr = null ()); 1101 do idx = 1 to transaction_seg.transaction_count while (^done); 1102 if transaction.person_id ^= person_id & ^transaction.deleted 1103 then new_trans_count = new_trans_count + 1; 1104 if transaction.next_offset = ""b then done = "1"b; 1105 else transaction_ptr = ptr (transaction_seg_ptr, transaction.next_offset); 1106 end; 1107 if ^done then call looping (); 1108 1109 P_new_trans_count = new_trans_count; 1110 1111 FORUM_LIMITS_PUNT: 1112 call forum_seg_mgr_$unlock (attendee_seg_ptr); 1113 P_status = status; 1114 return; 1115 1116 check: 1117 proc () returns (bit (1) aligned); 1118 1119 if type = ONLY_UNDELETED & trans_ptr -> transaction.deleted then 1120 return ("0"b); 1121 else if type = ONLY_DELETED & ^trans_ptr -> transaction.deleted 1122 then return ("0"b); 1123 else if trans_ptr -> transaction.deleted & ^chairman & trans_ptr -> transaction.person_id ^= person_id 1124 then return ("0"b); 1125 else return ("1"b); 1126 1127 end check; 1128 1129 1130 looping: 1131 proc; 1132 1133 call forum_logger_ (0, "forum_trans_mgr_", "Loop detected in ^a, trans_ptr = ^p.", open_data.forum_name, 1134 trans_ptr); 1135 call error (forum_et_$unexpected_fault); 1136 1137 end looping; 1138 1139 forum_trans_mgr_$check_user: 1140 entry (P_forum_idx, P_user_name, P_trans_idx, P_status); 1141 1142 call initialize (CHECK_USER_EXIT); 1143 1144 on any_other call any_other_handler (); 1145 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 1146 1147 forum_idx = P_forum_idx; 1148 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 1149 if status ^= 0 1150 then call error (status); 1151 1152 attendee_seg_ptr = open_data.attendee_seg_ptr; 1153 transaction_seg_ptr = open_data.transaction_seg_ptr; 1154 1155 user_name = P_user_name; 1156 P_trans_idx = 0; 1157 1158 done = "0"b; 1159 transaction_ptr = ptr (transaction_seg_ptr, transaction_seg.last_trans_offset); 1160 do while (^done); 1161 if transaction.person_id = user_name 1162 then done = "1"b; 1163 else if transaction.prev_offset = ""b 1164 then done = "1"b; 1165 else transaction_ptr = ptr (transaction_seg_ptr, transaction.prev_offset); 1166 end; 1167 if transaction.person_id = user_name 1168 then P_trans_idx = transaction.trans_idx; 1169 1170 CHECK_USER_EXIT: 1171 call forum_seg_mgr_$unlock (attendee_seg_ptr); 1172 P_status = status; 1173 return; 1174 1175 forum_trans_mgr_$convert_attendee_idx: 1176 entry (P_forum_idx, P_attendee_offset, P_user_name, P_status); 1177 1178 call initialize (CONV_ATT_EXIT); 1179 P_user_name = ""; 1180 1181 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 1182 on any_other call any_other_handler (); 1183 1184 forum_idx = P_forum_idx; 1185 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 1186 if status ^= 0 1187 then call error (status); 1188 1189 attendee_seg_ptr = open_data.attendee_seg_ptr; 1190 attendee_ptr = ptr (attendee_seg_ptr, P_attendee_offset); 1191 1192 if attendee.version ^= ATTENDEE_VERSION_1 1193 then call error (forum_et_$invalid_att_idx); 1194 1195 P_user_name = rtrim (attendee.person_id) || "." || attendee.project_id; 1196 1197 CONV_ATT_EXIT: 1198 call forum_seg_mgr_$unlock (attendee_seg_ptr); 1199 P_status = status; 1200 return; 1201 1202 forum_trans_mgr_$validate_uid: 1203 entry (P_forum_idx, P_uid, P_status); 1204 1205 call initialize (VALIDATE_UID_EXIT); 1206 1207 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 1208 on any_other call any_other_handler (); 1209 1210 forum_idx = P_forum_idx; 1211 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 1212 if status ^= 0 1213 then call error (status); 1214 1215 attendee_seg_ptr = open_data.attendee_seg_ptr; 1216 if open_data.forum_uid ^= P_uid 1217 then call error (forum_et_$incorrect_uid); 1218 1219 VALIDATE_UID_EXIT: 1220 call forum_seg_mgr_$unlock (attendee_seg_ptr); 1221 P_status = status; 1222 return; 1223 1224 forum_trans_mgr_$next_transaction: 1225 entry (P_forum_idx, P_trans_idx, P_next, P_status); 1226 1227 call initialize (NEXT_PUNT); 1228 1229 on any_other call any_other_handler; 1230 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 1231 1232 forum_idx = P_forum_idx; 1233 trans_idx = P_trans_idx; 1234 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 1235 if status ^= 0 then call error (status); 1236 1237 attendee_seg_ptr = open_data.attendee_seg_ptr; 1238 1239 call forum_space_mgr_$find_next_transaction (open_data.transaction_seg_ptr, trans_idx, high_trans, status); 1240 if status ^= 0 then call error (status); 1241 1242 P_next = high_trans; 1243 status = 0; 1244 1245 NEXT_PUNT: 1246 if status ^= 0 then P_next = 0; 1247 call forum_seg_mgr_$unlock (attendee_seg_ptr); 1248 P_status = status; 1249 return; 1250 1251 forum_trans_mgr_$previous_transaction: 1252 entry (P_forum_idx, P_trans_idx, P_previous, P_status); 1253 1254 call initialize (PREV_PUNT); 1255 1256 on any_other call any_other_handler; 1257 on cleanup call forum_seg_mgr_$unlock (attendee_seg_ptr); 1258 1259 forum_idx = P_forum_idx; 1260 trans_idx = P_trans_idx; 1261 call forum_open_mgr_$lookup_forum_idx (forum_idx, open_data_ptr, xacl, status); 1262 if status ^= 0 then call error (status); 1263 1264 attendee_seg_ptr = open_data.attendee_seg_ptr; 1265 call forum_space_mgr_$find_prev_transaction (open_data.transaction_seg_ptr, trans_idx, low_trans, status); 1266 if status ^= 0 then call error (status); 1267 1268 P_previous = low_trans; 1269 status = 0; 1270 1271 PREV_PUNT: 1272 if status ^= 0 then P_previous = 0; 1273 call forum_seg_mgr_$unlock (attendee_seg_ptr); 1274 P_status = status; 1275 return; 1276 1277 initialize: 1278 procedure (P_egress); 1279 1280 declare P_egress label variable, 1281 anon fixed bin; 1282 1283 egress = P_egress; 1284 1285 if ^static_init then do; 1286 call user_info_$login_data (person_id, project_id, (""), anon, 0, 0, 0, ("")); 1287 if anon = 1 1288 then person_id = "*" || person_id; 1289 static_init = "1"b; 1290 end; 1291 1292 attendee_seg_ptr, transaction_seg_ptr, open_data_ptr = null (); 1293 status = 0; 1294 1295 return; 1296 end initialize; 1297 1298 any_other_handler: 1299 proc (); 1300 1301 on any_other system; 1302 if open_data_ptr ^= null () 1303 then directory = open_data.forum_name; 1304 else directory = ""; 1305 1306 call forum_logger_$any_other (0, "forum_trans_mgr_", directory); 1307 status = forum_et_$unexpected_fault; 1308 goto egress; 1309 1310 end any_other_handler; 1311 1312 error: 1313 procedure (P_status); 1314 1315 declare P_status fixed bin (35); 1316 1317 status = P_status; 1318 goto egress; 1319 1320 end error; 1321 1322 end forum_trans_mgr_$enter_trans; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/19/92 1453.3 forum_trans_mgr_.pl1 >spec>install>1027>forum_trans_mgr_.pl1 176 1 10/31/84 1215.3 forum_structures.incl.pl1 >ldd>include>forum_structures.incl.pl1 178 2 10/31/84 1215.3 forum_open_data.incl.pl1 >ldd>include>forum_open_data.incl.pl1 180 3 10/31/84 1215.3 forum_flags.incl.pl1 >ldd>include>forum_flags.incl.pl1 182 4 10/31/84 1215.4 forum_user_trans.incl.pl1 >ldd>include>forum_user_trans.incl.pl1 184 5 04/27/78 1604.4 send_mail_info.incl.pl1 >ldd>include>send_mail_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. ATTENDEE_VERSION_1 011167 constant fixed bin(17,0) initial dcl 1-132 ref 1192 EXPUNGED 011166 constant bit(18) initial packed unaligned dcl 1-135 ref 717 718 720 ONLY_DELETED constant fixed bin(17,0) initial dcl 4-24 ref 1121 ONLY_UNDELETED constant fixed bin(17,0) initial dcl 4-24 ref 1119 P_area_ptr parameter pointer dcl 53 ref 511 549 P_attendee_offset parameter bit(18) packed unaligned dcl 53 ref 1175 1190 P_bit_map parameter bit packed unaligned dcl 53 set ref 937 960* 964 989* 1019* P_deleted_sw parameter bit(1) dcl 53 set ref 755 779* 811* P_directory parameter char packed unaligned dcl 53 ref 937 944 P_egress parameter label variable dcl 1280 ref 1277 1283 P_filled_sw parameter bit(1) dcl 53 ref 37 192 283 P_first_trans_idx parameter fixed bin(17,0) dcl 53 set ref 1022 1058* 1076* 1081* P_flags_word parameter bit(36) dcl 53 set ref 1022 1055* P_forum_idx parameter fixed bin(17,0) dcl 53 ref 37 204 380 388 511 520 583 591 621 629 647 655 755 763 816 824 866 873 964 971 1022 1030 1139 1147 1175 1184 1202 1210 1224 1232 1251 1259 P_high_time parameter fixed bin(71,0) dcl 53 ref 647 664 P_high_trans parameter fixed bin(17,0) dcl 53 set ref 647 684* 692* P_input_string parameter char packed unaligned dcl 53 set ref 37 192 239 259 583 592 604 621 638* 643* P_last_seen_trans_idx parameter fixed bin(17,0) dcl 53 set ref 1022 1058* 1076* 1097* P_last_trans_idx parameter fixed bin(17,0) dcl 53 set ref 1022 1058* 1076* 1091* P_low_time parameter fixed bin(71,0) dcl 53 ref 647 663 P_low_trans parameter fixed bin(17,0) dcl 53 set ref 647 685* 693* P_name parameter char packed unaligned dcl 53 ref 937 945 P_new_trans_count parameter fixed bin(17,0) dcl 53 set ref 1022 1058* 1076* 1109* P_next parameter fixed bin(17,0) dcl 53 set ref 1224 1242* 1245* P_nref parameter fixed bin(17,0) dcl 53 set ref 755 805* 810* P_open_data_ptr parameter pointer dcl 53 ref 192 209 P_pref parameter fixed bin(17,0) dcl 53 set ref 37 192 220 380 390 755 804* 810* P_previous parameter fixed bin(17,0) dcl 53 set ref 1251 1268* 1271* P_status parameter fixed bin(35,0) dcl 53 in procedure "forum_trans_mgr_$enter_trans" set ref 37 192 344* 350* 380 453* 511 568* 570* 580* 583 618* 621 642* 647 687* 694* 755 813* 816 863* 866 903* 937 955* 961* 964 983* 988* 1022 1113* 1139 1172* 1175 1199* 1202 1221* 1224 1248* 1251 1274* P_status parameter fixed bin(35,0) dcl 1315 in procedure "error" ref 1312 1317 P_subject parameter char packed unaligned dcl 53 set ref 37 192 240 255 380 402* P_trans_idx parameter fixed bin(17,0) dcl 53 set ref 37 192 297* 380 389 511 521 755 771 816 825 866 875 1139 1156* 1167* 1224 1233 1251 1260 P_trans_ptr parameter pointer dcl 53 set ref 511 572* 579* P_type parameter fixed bin(17,0) dcl 53 ref 755 772 1022 1031 P_uid parameter bit(36) dcl 53 ref 1202 1216 P_user_name parameter char packed unaligned dcl 53 set ref 866 874 937 964 997 1139 1155 1175 1179* 1195* P_value_sw parameter bit(1) dcl 53 ref 816 826 866 876 RWC_XACL constant bit(3) initial packed unaligned dcl 1-137 ref 397 534 601 841 888 1040 R_XACL constant bit(3) initial packed unaligned dcl 1-137 ref 214 1044 acl_change_pending 13(04) based bit(1) level 3 packed packed unaligned dcl 1-42 ref 1046 acl_has_changed 0(04) based bit(1) level 2 packed packed unaligned dcl 3-8 set ref 1046* addr builtin function dcl 83 ref 328 332 332 1042 1043 1044 1045 1046 1050 adjourned 0(05) based bit(1) level 2 in structure "forum_flags" packed packed unaligned dcl 3-8 in procedure "forum_trans_mgr_$enter_trans" set ref 1043* adjourned 3 based bit(1) level 4 in structure "attendee_seg" packed packed unaligned dcl 1-18 in procedure "forum_trans_mgr_$enter_trans" ref 1043 alloc_subject_length 000416 automatic fixed bin(21,0) dcl 4-4 set ref 544* 549 549 alloc_text_length 000415 automatic fixed bin(21,0) dcl 4-3 set ref 545* 549 549 566 always_add 11(02) 000423 automatic bit(1) level 3 packed packed unaligned dcl 5-5 set ref 322* am_init 3(01) based bit(1) level 4 packed packed unaligned dcl 1-18 ref 1050 1050 am_print_acl_msg 3(02) based bit(1) level 4 packed packed unaligned dcl 1-18 ref 1050 1050 anon 000550 automatic fixed bin(17,0) dcl 1280 set ref 1286* 1287 any_other 000332 stack reference condition dcl 83 ref 201 302 304 386 518 589 627 652 760 821 1144 1182 1208 1229 1256 1301 area 000340 stack reference condition dcl 83 ref 547 550 attendee based structure level 1 dcl 1-42 attendee_offset 1 000370 automatic bit(18) level 2 dcl 116 set ref 314* attendee_ptr 124 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_trans_mgr_$enter_trans" ref 216 885 998 1038 attendee_ptr 000402 automatic pointer dcl 1-8 in procedure "forum_trans_mgr_$enter_trans" set ref 216* 314 324* 325 326 328 328 328 328 330 330 331 332 332 336 336* 339* 339 606* 607 608 609 609* 611* 611 885* 890* 912 913 917* 925 926* 930 998* 1001* 1006 1009 1010 1038* 1045 1046 1093* 1190* 1192 1195 1195 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_trans_mgr_$enter_trans" ref 212 395 528 599 634 660 768 832 882 977 1036 1152 1189 1215 1237 1264 attendee_seg_ptr 000376 automatic pointer dcl 1-8 in procedure "forum_trans_mgr_$enter_trans" set ref 199* 212* 231 324 324 339 342* 347* 356 385* 395* 451* 516* 528* 573* 577* 588* 599* 604 606 606 611 616* 626* 634* 636 638 640* 653* 660* 686* 690* 761* 768* 778 807* 822* 832* 861* 871* 882* 890* 901* 913 942* 946* 954* 958* 969* 977* 982* 986* 1001* 1009 1028* 1036* 1043 1050 1050 1050 1050 1050 1050 1050 1111* 1145* 1152* 1170* 1181* 1189* 1190 1197* 1207* 1215* 1219* 1230* 1237* 1247* 1257* 1264* 1273* 1292* attending 13 based bit(1) level 3 packed packed unaligned dcl 1-42 ref 328 author 2 based structure level 2 packed packed unaligned dcl 1-91 binary builtin function dcl 83 ref 238 262 491 506 bit builtin function dcl 83 ref 262 506 bit_map based structure level 1 dcl 1-67 bit_map_first_trans 24 based fixed bin(17,0) level 2 dcl 1-42 ref 912 925 930 1010 bit_map_offset 25 based bit(18) level 2 dcl 1-42 ref 913 1006 1009 bit_map_ptr 126 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_trans_mgr_$enter_trans" set ref 217 931* bit_map_ptr 000410 automatic pointer dcl 1-8 in procedure "forum_trans_mgr_$enter_trans" set ref 217* 913* 917* 921 923 924 926* 931 932 1009* 1011 1015 chairman 5 based structure level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_trans_mgr_$enter_trans" chairman 000100 automatic bit(1) dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 778* 1040* 1042 1123 chairman based bit(1) level 2 in structure "forum_flags" packed packed unaligned dcl 3-8 in procedure "forum_trans_mgr_$enter_trans" set ref 1042* chairman_message 16 based char(256) level 3 dcl 1-18 set ref 604* 636 638 cleanup 000362 stack reference condition dcl 83 ref 199 385 516 588 626 653 761 822 871 942 969 1028 1145 1181 1207 1230 1257 clock builtin function dcl 83 ref 278 cm_init 3(03) based bit(1) level 4 packed packed unaligned dcl 1-18 ref 1050 cm_print_acl_msg 3(04) based bit(1) level 4 packed packed unaligned dcl 1-18 ref 1050 1050 copy builtin function dcl 83 ref 1014 current_block_offset 7 based bit(18) level 2 dcl 1-77 ref 707 current_segno 11 based fixed bin(17,0) level 2 dcl 1-77 set ref 229 357 357* 368 487 496 deleted 11(27) based bit(1) level 3 packed packed unaligned dcl 1-91 set ref 534 568 779 848 850 852 855* 1102 1119 1121 1123 deleted_by_author 11(28) based bit(1) level 3 packed packed unaligned dcl 1-91 set ref 845 848* deleted_count 3 based fixed bin(17,0) level 2 dcl 1-77 set ref 857* 857 859* 859 directory 000101 automatic char(168) packed unaligned dcl 83 set ref 944* 946* 1302* 1304* 1306* divide builtin function dcl 83 ref 242 257 261 493 505 716 742 749 done 000153 automatic bit(1) dcl 83 set ref 286* 287 288* 331* 332 409* 410 411* 412* 425* 426 427* 428* 706* 708 711* 782* 784 785* 788* 789 793* 795 796* 799* 800 1062* 1064 1065* 1066* 1067 1070 1074* 1075 1083* 1085 1086* 1087* 1088 1090 1100* 1101 1104* 1107 1158* 1160 1161* 1163* egress 000372 automatic label variable dcl 170 set ref 1283* 1308 1318 error_table_$noalloc 000100 external static fixed bin(35,0) dcl 146 set ref 547* error_table_$rqover 000102 external static fixed bin(35,0) dcl 146 set ref 548* error_table_$seg_busted 000104 external static fixed bin(35,0) dcl 146 set ref 200* 517* event_channel 20 based fixed bin(71,0) level 2 dcl 1-42 set ref 328* first_attendee_offset 116 based bit(18) level 3 dcl 1-18 ref 324 606 first_block_offset 6 based bit(18) level 2 dcl 1-77 ref 668 first_trans_idx based fixed bin(17,0) level 2 dcl 1-114 ref 738 745 first_trans_offset 4 based bit(18) level 2 dcl 1-77 ref 724 1057 1063 flags 13 based structure level 2 in structure "attendee" dcl 1-42 in procedure "forum_trans_mgr_$enter_trans" flags 3 based structure level 3 in structure "attendee_seg" dcl 1-18 in procedure "forum_trans_mgr_$enter_trans" flags 11(27) based structure level 2 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 282* forum_data_$chairman_override 000142 external static bit(1) dcl 165 ref 1050 forum_data_$print_eligibility_messages 000140 external static bit(1) dcl 165 ref 1050 forum_et_$cant_notify 000106 external static fixed bin(35,0) dcl 146 set ref 306* forum_et_$chairman_only 000132 external static fixed bin(35,0) dcl 146 set ref 397* 601* 843* 845* 888* forum_et_$incorrect_uid 000120 external static fixed bin(35,0) dcl 146 set ref 1216* forum_et_$invalid_att_idx 000134 external static fixed bin(35,0) dcl 146 set ref 1192* forum_et_$meeting_bloat 000114 external static fixed bin(35,0) dcl 146 set ref 487* 493* forum_et_$message_too_long 000116 external static fixed bin(35,0) dcl 146 set ref 592* forum_et_$no_message 000110 external static fixed bin(35,0) dcl 146 set ref 636* forum_et_$not_eligible 000112 external static fixed bin(35,0) dcl 146 set ref 949* forum_et_$read_only 000122 external static fixed bin(35,0) dcl 146 set ref 214* forum_et_$rqo 000124 external static fixed bin(35,0) dcl 146 set ref 252* 498* forum_et_$rqo_load 000126 external static fixed bin(35,0) dcl 146 set ref 251* forum_et_$trans_deleted 000130 external static fixed bin(35,0) dcl 146 set ref 534* 568 forum_et_$unexpected_fault 000136 external static fixed bin(35,0) dcl 146 set ref 1135* 1307 forum_flags based structure level 1 dcl 3-8 forum_flags_word 000414 automatic bit(36) dcl 3-6 set ref 1041* 1042 1043 1044 1045 1046 1050 1055 forum_idx 000154 automatic fixed bin(17,0) dcl 83 set ref 204* 205* 388* 392* 520* 523* 591* 595* 629* 630* 655* 656* 763* 764* 824* 828* 873* 878* 971* 973* 1030* 1033* 1147* 1148* 1184* 1185* 1210* 1211* 1232* 1234* 1259* 1261* forum_logger_ 000022 constant entry external dcl 121 ref 1133 forum_logger_$any_other 000024 constant entry external dcl 121 ref 305 1306 forum_message 000370 automatic structure level 1 dcl 116 set ref 328 forum_name 4 based char(168) level 2 dcl 2-5 set ref 305* 316* 1133* 1302 forum_notify_gate_$lookup 000026 constant entry external dcl 121 ref 331 forum_open_mgr_$lookup_forum_idx 000030 constant entry external dcl 121 ref 205 392 523 595 630 656 764 828 878 973 1033 1148 1185 1211 1234 1261 forum_seg_mgr_$create_segment 000032 constant entry external dcl 121 ref 364 forum_seg_mgr_$initiate 000034 constant entry external dcl 121 ref 946 forum_seg_mgr_$initiate_seg 000036 constant entry external dcl 121 ref 231 370 478 540 forum_seg_mgr_$terminate 000040 constant entry external dcl 121 ref 942 954 958 forum_seg_mgr_$unlock 000042 constant entry external dcl 121 ref 199 342 347 385 451 516 573 577 588 616 626 640 653 686 690 761 807 822 861 871 901 969 982 986 1028 1111 1145 1170 1181 1197 1207 1219 1230 1247 1257 1273 forum_space_mgr_$allocate_bit_map 000044 constant entry external dcl 121 ref 917 926 forum_space_mgr_$find_attendee 000046 constant entry external dcl 121 ref 890 1001 forum_space_mgr_$find_next_transaction 000050 constant entry external dcl 121 ref 1239 forum_space_mgr_$find_prev_transaction 000052 constant entry external dcl 121 ref 1265 forum_space_mgr_$find_transaction 000054 constant entry external dcl 121 ref 222 399 405 530 774 835 895 forum_space_mgr_$get_highest_seen 000060 constant entry external dcl 121 ref 1093 forum_space_mgr_$get_transaction_slot 000056 constant entry external dcl 121 ref 264 forum_uid 000370 automatic bit(36) level 2 in structure "forum_message" dcl 116 in procedure "forum_trans_mgr_$enter_trans" set ref 312* forum_uid 57 based bit(36) level 2 in structure "open_data" dcl 2-5 in procedure "forum_trans_mgr_$enter_trans" ref 312 1216 forum_user_trans based structure level 1 dcl 4-7 set ref 549 forum_user_trans_ptr 000420 automatic pointer dcl 4-5 set ref 549* 553 554 555 556 557 558 558 560 563 566 572 get_temp_segment_ 000062 constant entry external dcl 121 ref 233 359 h 000513 automatic fixed bin(17,0) dcl 700 set ref 718* 718* 723 729 730 hcs_$force_write 000064 constant entry external dcl 121 ref 275 hcs_$wakeup 000066 constant entry external dcl 121 ref 328 header based structure level 2 dcl 1-18 high 000512 automatic fixed bin(17,0) dcl 700 set ref 715* 716 718 723 727* 729* 732 732 742 748* 749 high_time 000156 automatic fixed bin(71,0) dcl 83 set ref 664* 675 675 680 680 680* high_trans 000162 automatic fixed bin(17,0) dcl 83 set ref 666* 672* 675* 676 680* 684 1093* 1097 1239* 1242 idx 000510 automatic fixed bin(17,0) dcl 700 in procedure "find" set ref 716* 717 718 720 732 732* 733 733* 736 738 741 742* 745 748 749* 752* idx 000164 automatic fixed bin(17,0) dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 229* 230 231* 233 248 268 275 357* 359 368* 370* 375 477* 478 478* 482 538* 539 540* 562 912* 915 921 923* 924 924* 925* 925 926* 930* 932 1010* 1011 1014 1014 1015 1064* 1085* 1101* index builtin function dcl 83 ref 923 input_len 000155 automatic fixed bin(21,0) dcl 83 set ref 239* 242 259 261 272 ioa_$rsnnl 000070 constant entry external dcl 121 ref 316 ipc_message based fixed bin(71,0) dcl 120 set ref 328* l 000514 automatic fixed bin(17,0) dcl 700 set ref 720* 720* 724 727 729 last_trans_idx 1 based fixed bin(17,0) level 2 dcl 1-114 ref 715 last_trans_offset 5 based bit(18) level 2 dcl 1-77 ref 669 671 1084 1159 length 1 based fixed bin(17,0) level 2 in structure "bit_map" dcl 1-67 in procedure "forum_trans_mgr_$enter_trans" ref 921 923 924 932 1011 1015 length builtin function dcl 83 in procedure "forum_trans_mgr_$enter_trans" ref 239 240 471 592 loading 000165 automatic bit(1) dcl 83 set ref 189* 195* 203 213 223 251 274 296 311 347 low 000511 automatic fixed bin(17,0) dcl 700 set ref 714* 716 720 730* 733 733 741* 742 749 low_end parameter bit(1) dcl 700 ref 697 724 low_time 000160 automatic fixed bin(71,0) dcl 83 set ref 663* 676 678 678* low_trans 000163 automatic fixed bin(17,0) dcl 83 set ref 665* 673* 676* 678* 685 1265* 1268 map 2 based bit level 2 dcl 1-67 set ref 923 932* 1011 1015 message 000166 automatic char(256) packed unaligned dcl 83 set ref 316* 332 332 message_change_pending 13(05) based bit(1) level 3 packed packed unaligned dcl 1-42 set ref 608* 1045 name 000266 automatic char(32) packed unaligned dcl 83 set ref 945* 946* new_subject parameter char packed unaligned dcl 469 ref 466 471 482 500 new_trans_count 000276 automatic fixed bin(17,0) dcl 83 set ref 1099* 1102* 1102 1109 next_offset 31 based bit(18) level 2 in structure "attendee" dcl 1-42 in procedure "forum_trans_mgr_$enter_trans" ref 336 339 609 611 next_offset 23 based bit(18) level 2 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" ref 1066 1067 1073 1104 1105 next_offset 23 based bit(18) level 2 in structure "trans" packed packed unaligned dcl 700 in procedure "find" ref 738 next_trans_offset 12 based bit(18) level 2 dcl 1-77 set ref 238 262* 358* 491 506* next_trans_ptr 16 based pointer level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 558* next_trans_ptr 000300 automatic pointer dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 248* 255 256 258* 258 259 260 375* 496* 500 503 next_word 000302 automatic fixed bin(35,0) dcl 83 set ref 238* 242 245* 248 257* 257 258 261* 261 262 491* 493 496 505* 505 506 notify 13(03) based bit(1) level 3 packed packed unaligned dcl 1-42 ref 330 nref 000303 automatic fixed bin(17,0) dcl 83 set ref 781* 800* 805 nref_offset 13(09) based bit(18) level 2 packed packed unaligned dcl 1-91 set ref 281* 288 290 292* 419* 427 428 429 438* 438 439 439 442* 446* 459* 459 461 461 796 798 null builtin function dcl 83 ref 230 325 336 478 539 558 579 607 609 998 1100 1292 1302 offset 5 based bit(18) array level 3 packed packed unaligned dcl 1-114 ref 717 718 720 729 736 open_data based structure level 1 dcl 2-5 open_data_ptr 000412 automatic pointer dcl 2-3 set ref 205* 209* 211 212 216 217 230 231* 233 248 275 305 312 316 359 364* 370* 375 392* 395 396 478 478* 482 496 523* 527 528 539 540* 562 595* 599 630* 634 656* 660 661 764* 768 769 828* 832 833 878* 882 883 885 917* 926* 931 973* 977 978 998 998 1033* 1036 1037 1038 1133 1148* 1152 1153 1185* 1189 1211* 1215 1216 1234* 1237 1239 1261* 1264 1265 1292* 1302 1302 output_area based area(1024) dcl 170 ref 549 participating 13(01) based bit(1) level 3 packed packed unaligned dcl 1-42 ref 328 330 person_id 000010 internal static char(22) packed unaligned dcl 112 in procedure "forum_trans_mgr_$enter_trans" set ref 276 326 534 778 839 885 998 1102 1123 1286* 1287* 1287 person_id 5 based char(22) level 4 in structure "attendee_seg" dcl 1-18 in procedure "forum_trans_mgr_$enter_trans" ref 778 person_id 2 based char(22) level 2 in structure "attendee" dcl 1-42 in procedure "forum_trans_mgr_$enter_trans" ref 326 331 332 1195 person_id 1 based char(22) level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 554* person_id 2 based char(22) level 3 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 276* 534 554 839 1102 1123 1161 1167 pref 000304 automatic fixed bin(17,0) dcl 83 set ref 220* 221 222* 223* 285 390* 404 405* 408 437 781* 789* 804 pref_offset 12(27) based bit(18) level 2 packed packed unaligned dcl 1-91 set ref 293* 411 413 418* 420* 439* 441* 445* 459 459 461* 461 785 787 prev_block_offset 4 based bit(18) level 2 packed packed unaligned dcl 1-114 ref 709 prev_offset 23(18) based bit(18) level 2 in structure "trans" packed packed unaligned dcl 700 in procedure "find" ref 745 prev_offset 23(18) based bit(18) level 2 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" ref 1087 1088 1163 1165 prev_trans_ptr 20 based pointer level 2 dcl 4-7 set ref 558* print_acl_message 0(03) based bit(1) level 2 packed packed unaligned dcl 3-8 set ref 1050* print_cm_message 0(02) based bit(1) level 2 packed packed unaligned dcl 3-8 set ref 1045* privileged 000305 automatic bit(1) dcl 83 set ref 839* 841* 845 848 proceeding_string based char packed unaligned dcl 170 ref 566 proceedings_ptrs 64 based pointer array level 2 dcl 2-5 set ref 230 233* 248 275* 359* 375 478 482 496 539 562 process_id 16 based bit(36) level 2 dcl 1-42 set ref 328* project_id 000016 internal static char(9) packed unaligned dcl 112 in procedure "forum_trans_mgr_$enter_trans" set ref 277 1286* project_id 7 based char(9) level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 555* project_id 7(18) based char(9) level 3 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 277* 555 project_id 10 based char(9) level 2 in structure "attendee" dcl 1-42 in procedure "forum_trans_mgr_$enter_trans" ref 332 1195 ptr builtin function dcl 83 ref 248 258 290 324 339 413 428 429 439 459 461 482 496 562 565 606 611 668 669 707 709 724 729 736 738 745 787 798 913 1009 1063 1067 1084 1088 1105 1159 1165 1190 read_only 0(01) based bit(1) level 2 packed packed unaligned dcl 3-8 set ref 1044* record_quota_overflow 000346 stack reference condition dcl 83 ref 250 300 498 501 548 551 rel builtin function dcl 83 ref 256 260 292 293 314 419 420 439 441 442 503 rtrim builtin function dcl 83 ref 239 240 332 332 332 332 471 592 1195 salvaging 3(05) based bit(1) level 4 packed packed unaligned dcl 1-18 ref 231 356 seen_map 000100 automatic bit packed unaligned dcl 995 set ref 1006* 1011* 1014* 1015* 1019 seg_fault_error 000354 stack reference condition dcl 83 ref 200 299 517 segno 16 based fixed bin(17,0) level 2 dcl 1-91 set ref 268* 477 487 538 send_mail_ 000072 constant entry external dcl 121 ref 332 send_mail_info 000423 automatic structure level 1 dcl 5-5 set ref 332 332 send_mail_info_version_2 000422 automatic fixed bin(17,0) initial dcl 5-3 set ref 5-3* sent_from 1 000423 automatic char(32) level 2 dcl 5-5 set ref 320* static_init 000021 internal static bit(1) initial dcl 112 set ref 1285 1289* status 000306 automatic fixed bin(35,0) dcl 83 set ref 205* 206 206* 222* 223 226* 231* 233* 234 234* 264* 265 265* 309* 331* 332 341* 344 350 359* 360 360* 364* 365 365* 370* 371 371* 392* 393 393* 399* 400 400* 405* 406 406* 449* 453 478* 480 480* 523* 524 524* 530* 531 531* 540* 541 541* 580 595* 596 596* 614* 618 630* 631 631* 642 643 656* 657 657* 694 764* 765 765* 774* 775 775* 809 813 828* 829 829* 835* 836 836* 863 878* 879 879* 890* 891 891* 895* 896 896* 903 917* 918 918* 926* 927 927* 946* 947 947* 961 973* 974 974* 988 1001* 1002 1002* 1033* 1034 1034* 1093* 1095 1095* 1113 1148* 1149 1149* 1172 1185* 1186 1186* 1199 1211* 1212 1212* 1221 1234* 1235 1235* 1239* 1240 1240* 1243* 1245 1248 1261* 1262 1262* 1265* 1266 1266* 1269* 1271 1274 1293* 1307* 1317* string builtin function dcl 83 set ref 282* 321* subject based char packed unaligned dcl 170 in procedure "forum_trans_mgr_$enter_trans" set ref 255* 482* 500* 563 subject 25 based char level 2 in structure "forum_user_trans" packed packed unaligned dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 563* subject_len 000307 automatic fixed bin(21,0) dcl 83 set ref 240* 242 255 257 270 471* 472 476 482 483 493 500 504 505 544* 563 subject_length 20 based fixed bin(21,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 270* 476 483* 504* 544 subject_length 22 based fixed bin(21,0) level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 549* 563 566 subject_offset 17 based bit(18) level 2 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 269* 482 503* 562 subject_offset 000310 automatic bit(18) dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 256* 269 substr builtin function dcl 83 set ref 932* 1014* 1015* switches 11 000423 automatic structure level 2 dcl 5-5 set ref 321* sys_info$max_seg_size 000074 external static fixed bin(35,0) dcl 121 ref 242 493 t parameter fixed bin(71,0) dcl 700 ref 697 709 729 737 738 745 text based char level 2 in structure "forum_user_trans" packed packed unaligned dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 566* text based char packed unaligned dcl 170 in procedure "forum_trans_mgr_$enter_trans" set ref 259* text_length 22 based fixed bin(21,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 272* 545 text_length 23 based fixed bin(21,0) level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 549* 566 text_offset 000311 automatic bit(18) dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 260* 271 text_offset 21 based bit(18) level 2 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 271* 565 time 12 based fixed bin(71,0) level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 557* time 2 based fixed bin(71,0) level 2 in structure "transaction_block" dcl 1-114 in procedure "forum_trans_mgr_$enter_trans" ref 675 678 709 time 14 based fixed bin(71,0) level 2 in structure "trans" dcl 700 in procedure "find" ref 729 737 738 745 time 14 based fixed bin(71,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 278* 557 676 680 trans based structure level 1 unaligned dcl 700 trans_idx 1 based fixed bin(17,0) level 2 in structure "transaction" dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 296* 297 412 416 428 724 789 800 1081 1091 1167 trans_idx 000312 automatic fixed bin(17,0) dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 389* 399* 408 412 416 428 521* 530* 556 771* 774* 825* 835* 875* 895* 899* 1233* 1239* 1260* 1265* trans_idx parameter fixed bin(17,0) dcl 909 in procedure "set_seen_switch" set ref 906 912 917* 930 trans_no 14 based fixed bin(17,0) level 2 dcl 4-7 set ref 556* trans_ptr 000506 automatic pointer dcl 700 in procedure "find" set ref 736* 737 738 745 trans_ptr 000314 automatic pointer dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 222* 288 290* 290 292 293 405* 411 412 413* 413 413 416 419 420 427 428 428 429* 429 429 432 438 441 442 562* 563 565* 565 566 783* 785 787* 787 789 794* 796 798* 798 800 1063* 1066 1067* 1067 1073 1081 1084* 1087 1088* 1088 1091 1119 1121 1123 1123 1133* transaction based structure level 1 unaligned dcl 1-91 transaction_block based structure level 1 unaligned dcl 1-114 transaction_block_ptr 000406 automatic pointer dcl 1-8 set ref 668* 675 678 707* 709 709* 709 715 717 718 720 729 736 738 745 transaction_count 2 based fixed bin(17,0) level 2 dcl 1-77 ref 666 995 1064 1085 1101 transaction_ptr 000404 automatic pointer dcl 1-8 set ref 264* 268 269 270 271 272 276 277 278 281 282 283 292 293 296 297 399* 418 419 420 432 438 439 439 439 439 441 442 445 446 459 459 459 459 461 461 461 461 476 477 482 483 487 503 504 530* 534 534 538 544 545 554 555 557 560 562 565 568 669* 676 680 774* 779 783 794 835* 839 845 848 848 850 852 855 895* 1093* 1100 1102 1102 1104 1105* 1105 1159* 1161 1163 1165* 1165 1167 1167 transaction_seg based structure level 1 dcl 1-77 transaction_seg_ptr 000400 automatic pointer dcl 1-8 in procedure "forum_trans_mgr_$enter_trans" set ref 211* 222* 229 238 262 264* 290 357 357 358 368 396* 399* 405* 487 491 496 506 527* 530* 661* 666 668 668 669 669 671 707 707 709 724 724 729 736 738 745 769* 774* 787 798 833* 835* 857 857 859 859 883* 895* 942* 946* 954* 958* 978* 995 1037* 1057 1063 1063 1064 1067 1084 1084 1085 1088 1093* 1101 1105 1153* 1159 1159 1165 1292* transaction_seg_ptr 62 based pointer level 2 in structure "open_data" dcl 2-5 in procedure "forum_trans_mgr_$enter_trans" set ref 211 396 527 661 769 833 883 978 1037 1153 1239* 1265* transactions 5 based structure array level 2 packed packed unaligned dcl 1-114 type 000316 automatic fixed bin(17,0) dcl 83 in procedure "forum_trans_mgr_$enter_trans" set ref 772* 1031* 1119 1121 type based fixed bin(17,0) level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 553* unfilled 11(29) based bit(1) level 3 in structure "transaction" packed packed unaligned dcl 1-91 in procedure "forum_trans_mgr_$enter_trans" set ref 283* 560 unfilled 24 based bit(1) level 2 in structure "forum_user_trans" dcl 4-7 in procedure "forum_trans_mgr_$enter_trans" set ref 560* user_info_$login_data 000076 constant entry external dcl 121 ref 1286 user_name 000317 automatic char(32) packed unaligned dcl 83 set ref 874* 885 885 890* 997* 998 998 1001* 1155* 1161 1167 user_trans_type constant fixed bin(17,0) initial dcl 4-21 ref 553 value parameter bit(1) dcl 909 ref 906 916 922 932 value_sw 000327 automatic bit(1) dcl 83 set ref 826* 845 848 848 850 852 855 857 876* 899* version based fixed bin(17,0) level 2 in structure "attendee" dcl 1-42 in procedure "forum_trans_mgr_$enter_trans" ref 1192 version 000423 automatic fixed bin(17,0) level 2 in structure "send_mail_info" dcl 5-5 in procedure "forum_trans_mgr_$enter_trans" set ref 319* wakeup 11 000423 automatic bit(1) level 3 packed packed unaligned dcl 5-5 set ref 322* xacl 000330 automatic bit(36) dcl 83 set ref 205* 214 392* 397 523* 534 595* 601 630* 656* 764* 828* 841 878* 888 946* 949 973* 1033* 1040 1044 1148* 1185* 1211* 1234* 1261* 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 INCLUDE_DELETED internal static fixed bin(17,0) initial dcl 4-24 PROCEEDINGS_SEG_NAME internal static char(32) initial packed unaligned dcl 1-127 RW_XACL internal static bit(3) initial packed unaligned dcl 1-137 TRANSACTION_SEG_NAME internal static char(32) initial packed unaligned dcl 1-127 TRANSACTION_VERSION_1 internal static fixed bin(17,0) initial dcl 1-132 TRANS_SEG_VERSION_1 internal static char(8) initial packed unaligned dcl 1-123 alloc_bit_map_length automatic fixed bin(17,0) dcl 1-72 message_type internal static fixed bin(17,0) initial dcl 4-22 NAMES DECLARED BY EXPLICIT CONTEXT. CHAIN_PUNT 002201 constant label dcl 451 ref 383 383 421 432 CHECK_USER_EXIT 006271 constant label dcl 1170 ref 1142 1142 CONV_ATT_EXIT 006536 constant label dcl 1197 ref 1178 1178 ENTER_COMMON 000234 constant label dcl 196 ref 190 ENTER_PUNT 001547 constant label dcl 347 ref 196 196 FORUM_LIMITS_PUNT 006045 constant label dcl 1111 ref 1026 1026 1059 1077 GET_MAP_EXIT 005132 constant label dcl 958 ref 940 940 GET_MAP_IDX_EXIT 005311 constant label dcl 986 ref 967 967 GET_MESSAGE_EXIT 003314 constant label dcl 640 ref 624 624 NEXT 001522 constant label dcl 336 ref 326 NEXT_PUNT 007104 constant label dcl 1245 ref 1227 1227 PREV_PUNT 007301 constant label dcl 1271 ref 1254 1254 READ_PUNT 002670 constant label dcl 577 ref 514 514 SET_DELETE_EXIT 004431 constant label dcl 861 ref 819 819 850 852 SET_MESSAGE_EXIT 003131 constant label dcl 616 ref 586 586 SET_SEEN_EXIT 004707 constant label dcl 901 ref 869 869 TRANS_REF_PUNT 004101 constant label dcl 807 ref 758 758 TRANS_TIME_PUNT 003563 constant label dcl 690 set ref 650 650 VALIDATE_UID_EXIT 006710 constant label dcl 1219 ref 1205 1205 any_other_handler 011011 constant entry internal dcl 1298 ref 201 386 518 589 627 652 760 821 1144 1182 1208 1229 1256 change_subject 007501 constant entry internal dcl 466 ref 402 check 010561 constant entry internal dcl 1116 ref 788 799 1065 1074 1086 error 011107 constant entry internal dcl 1312 ref 200 206 214 226 234 251 252 265 306 360 365 371 393 397 400 406 480 487 493 498 517 524 531 534 541 547 548 592 596 601 631 636 657 765 775 829 836 843 845 879 888 891 896 918 927 947 949 974 1002 1034 1095 1135 1149 1186 1192 1212 1216 1235 1240 1262 1266 find 007751 constant entry internal dcl 697 ref 678 680 forum_trans_mgr_$check_user 006064 constant entry external dcl 1139 forum_trans_mgr_$convert_attendee_idx 006310 constant entry external dcl 1175 forum_trans_mgr_$enter_trans 000142 constant entry external dcl 37 forum_trans_mgr_$forum_limits 005342 constant entry external dcl 1022 forum_trans_mgr_$get_message 003145 constant entry external dcl 621 forum_trans_mgr_$get_transaction_map 004726 constant entry external dcl 937 forum_trans_mgr_$get_transaction_map_idx 005163 constant entry external dcl 964 forum_trans_mgr_$load_trans 000202 constant entry external dcl 192 forum_trans_mgr_$next_transaction 006727 constant entry external dcl 1224 forum_trans_mgr_$previous_transaction 007124 constant entry external dcl 1251 forum_trans_mgr_$read_trans 002220 constant entry external dcl 511 forum_trans_mgr_$rechain 001570 constant entry external dcl 380 forum_trans_mgr_$set_delete_sw 004125 constant entry external dcl 816 forum_trans_mgr_$set_message 002711 constant entry external dcl 583 forum_trans_mgr_$set_seen_switch 004450 constant entry external dcl 866 forum_trans_mgr_$trans_ref_info 003606 constant entry external dcl 755 forum_trans_mgr_$trans_time_info 003343 constant entry external dcl 647 forum_trans_mgr_$validate_uid 006555 constant entry external dcl 1202 get_new_seg 007317 constant entry internal dcl 353 ref 244 get_seen_map 010376 constant entry internal dcl 992 ref 952 980 initialize 010677 constant entry internal dcl 1277 ref 196 383 514 586 624 650 758 819 869 940 967 1026 1142 1178 1205 1227 1254 looping 010622 constant entry internal dcl 1130 ref 1070 1090 1107 remove_from_chain 007452 constant entry internal dcl 456 ref 417 435 set_seen_switch 010233 constant entry internal dcl 906 ref 296 899 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 13064 13230 11172 13074 Length 14054 11172 144 610 1671 12 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME forum_trans_mgr_$enter_trans 568 external procedure is an external procedure. on unit on line 199 68 on unit on unit on line 200 70 on unit on unit on line 201 64 on unit on unit on line 250 70 on unit on unit on line 302 94 on unit enables or reverts conditions. on unit on line 304 64 on unit get_new_seg internal procedure shares stack frame of external procedure forum_trans_mgr_$enter_trans. on unit on line 385 68 on unit on unit on line 386 64 on unit remove_from_chain internal procedure shares stack frame of external procedure forum_trans_mgr_$enter_trans. change_subject 82 internal procedure enables or reverts conditions. on unit on line 498 70 on unit on unit on line 516 68 on unit on unit on line 517 70 on unit on unit on line 518 64 on unit on unit on line 547 70 on unit on unit on line 548 70 on unit on unit on line 588 68 on unit on unit on line 589 64 on unit on unit on line 626 68 on unit on unit on line 627 64 on unit on unit on line 652 64 on unit on unit on line 653 68 on unit find internal procedure shares stack frame of external procedure forum_trans_mgr_$enter_trans. on unit on line 760 64 on unit on unit on line 761 68 on unit on unit on line 821 64 on unit on unit on line 822 68 on unit on unit on line 871 68 on unit set_seen_switch internal procedure shares stack frame of external procedure forum_trans_mgr_$enter_trans. on unit on line 942 70 on unit on unit on line 969 68 on unit get_seen_map 86 internal procedure uses auto adjustable storage. on unit on line 1028 68 on unit check internal procedure shares stack frame of external procedure forum_trans_mgr_$enter_trans. looping internal procedure shares stack frame of external procedure forum_trans_mgr_$enter_trans. on unit on line 1144 64 on unit on unit on line 1145 68 on unit on unit on line 1181 68 on unit on unit on line 1182 64 on unit on unit on line 1207 68 on unit on unit on line 1208 64 on unit on unit on line 1229 64 on unit on unit on line 1230 68 on unit on unit on line 1256 64 on unit on unit on line 1257 68 on unit initialize internal procedure shares stack frame of external procedure forum_trans_mgr_$enter_trans. any_other_handler 90 internal procedure enables or reverts conditions. on unit on line 1301 64 on unit error 64 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 person_id forum_trans_mgr_$enter_trans 000016 project_id forum_trans_mgr_$enter_trans 000021 static_init forum_trans_mgr_$enter_trans STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME forum_trans_mgr_$enter_trans 000100 chairman forum_trans_mgr_$enter_trans 000101 directory forum_trans_mgr_$enter_trans 000153 done forum_trans_mgr_$enter_trans 000154 forum_idx forum_trans_mgr_$enter_trans 000155 input_len forum_trans_mgr_$enter_trans 000156 high_time forum_trans_mgr_$enter_trans 000160 low_time forum_trans_mgr_$enter_trans 000162 high_trans forum_trans_mgr_$enter_trans 000163 low_trans forum_trans_mgr_$enter_trans 000164 idx forum_trans_mgr_$enter_trans 000165 loading forum_trans_mgr_$enter_trans 000166 message forum_trans_mgr_$enter_trans 000266 name forum_trans_mgr_$enter_trans 000276 new_trans_count forum_trans_mgr_$enter_trans 000300 next_trans_ptr forum_trans_mgr_$enter_trans 000302 next_word forum_trans_mgr_$enter_trans 000303 nref forum_trans_mgr_$enter_trans 000304 pref forum_trans_mgr_$enter_trans 000305 privileged forum_trans_mgr_$enter_trans 000306 status forum_trans_mgr_$enter_trans 000307 subject_len forum_trans_mgr_$enter_trans 000310 subject_offset forum_trans_mgr_$enter_trans 000311 text_offset forum_trans_mgr_$enter_trans 000312 trans_idx forum_trans_mgr_$enter_trans 000314 trans_ptr forum_trans_mgr_$enter_trans 000316 type forum_trans_mgr_$enter_trans 000317 user_name forum_trans_mgr_$enter_trans 000327 value_sw forum_trans_mgr_$enter_trans 000330 xacl forum_trans_mgr_$enter_trans 000370 forum_message forum_trans_mgr_$enter_trans 000372 egress forum_trans_mgr_$enter_trans 000376 attendee_seg_ptr forum_trans_mgr_$enter_trans 000400 transaction_seg_ptr forum_trans_mgr_$enter_trans 000402 attendee_ptr forum_trans_mgr_$enter_trans 000404 transaction_ptr forum_trans_mgr_$enter_trans 000406 transaction_block_ptr forum_trans_mgr_$enter_trans 000410 bit_map_ptr forum_trans_mgr_$enter_trans 000412 open_data_ptr forum_trans_mgr_$enter_trans 000414 forum_flags_word forum_trans_mgr_$enter_trans 000415 alloc_text_length forum_trans_mgr_$enter_trans 000416 alloc_subject_length forum_trans_mgr_$enter_trans 000420 forum_user_trans_ptr forum_trans_mgr_$enter_trans 000422 send_mail_info_version_2 forum_trans_mgr_$enter_trans 000423 send_mail_info forum_trans_mgr_$enter_trans 000506 trans_ptr find 000510 idx find 000511 low find 000512 high find 000513 h find 000514 l find 000550 anon initialize get_seen_map 000100 seen_map get_seen_map THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other return_mac tra_ext_2 alloc_auto_adj signal_op enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc index_bs_1_eis op_alloc_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. forum_logger_ forum_logger_$any_other forum_notify_gate_$lookup forum_open_mgr_$lookup_forum_idx forum_seg_mgr_$create_segment forum_seg_mgr_$initiate forum_seg_mgr_$initiate_seg forum_seg_mgr_$terminate forum_seg_mgr_$unlock forum_space_mgr_$allocate_bit_map forum_space_mgr_$find_attendee forum_space_mgr_$find_next_transaction forum_space_mgr_$find_prev_transaction forum_space_mgr_$find_transaction forum_space_mgr_$get_highest_seen forum_space_mgr_$get_transaction_slot get_temp_segment_ hcs_$force_write hcs_$wakeup ioa_$rsnnl send_mail_ user_info_$login_data THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$noalloc error_table_$rqover error_table_$seg_busted forum_data_$chairman_override forum_data_$print_eligibility_messages forum_et_$cant_notify forum_et_$chairman_only forum_et_$incorrect_uid forum_et_$invalid_att_idx forum_et_$meeting_bloat forum_et_$message_too_long forum_et_$no_message forum_et_$not_eligible forum_et_$read_only forum_et_$rqo forum_et_$rqo_load forum_et_$trans_deleted forum_et_$unexpected_fault sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 5 3 000130 37 000134 189 000172 190 000173 192 000174 195 000232 196 000234 199 000241 200 000265 201 000311 203 000333 204 000335 205 000340 206 000355 208 000365 209 000366 211 000372 212 000375 213 000400 214 000402 216 000414 217 000417 220 000422 221 000424 222 000425 223 000442 226 000450 229 000456 230 000461 231 000470 233 000510 234 000540 238 000550 239 000554 240 000571 242 000605 244 000622 245 000623 248 000624 250 000634 251 000650 252 000663 253 000672 255 000673 256 000703 257 000705 258 000714 259 000716 260 000724 261 000726 262 000735 264 000743 265 000756 268 000766 269 000771 270 000773 271 000775 272 000777 274 001001 275 001003 276 001024 277 001031 278 001034 281 001037 282 001041 283 001044 285 001052 286 001054 287 001055 288 001061 290 001072 291 001075 292 001076 293 001102 296 001107 297 001124 299 001127 300 001130 302 001131 304 001145 305 001162 306 001211 307 001221 309 001222 311 001223 312 001225 314 001230 316 001232 319 001263 320 001265 321 001270 322 001271 324 001275 325 001302 326 001306 328 001314 330 001342 331 001347 332 001372 335 001521 336 001522 339 001530 340 001533 341 001534 342 001535 344 001544 345 001546 347 001547 350 001560 351 001562 380 001563 383 001613 385 001620 386 001644 388 001666 389 001671 390 001673 392 001675 393 001712 395 001722 396 001725 397 001730 399 001742 400 001757 402 001767 404 002001 405 002003 406 002020 408 002030 409 002033 410 002034 411 002037 412 002051 413 002057 414 002061 416 002062 417 002066 418 002067 419 002073 420 002076 421 002103 425 002104 426 002105 427 002111 428 002122 429 002133 430 002135 432 002136 435 002142 437 002143 438 002145 439 002151 441 002162 442 002166 443 002171 445 002172 446 002176 449 002200 451 002201 453 002210 454 002212 511 002213 514 002233 516 002240 517 002264 518 002310 520 002332 521 002335 523 002337 524 002354 527 002364 528 002367 530 002372 531 002407 534 002417 538 002441 539 002444 540 002452 541 002465 544 002475 545 002501 547 002503 548 002527 549 002553 550 002572 551 002573 553 002574 554 002576 555 002602 556 002605 557 002607 558 002611 560 002614 562 002620 563 002627 565 002634 566 002637 568 002646 570 002655 572 002656 573 002660 575 002667 577 002670 579 002677 580 002702 581 002704 583 002705 586 002730 588 002735 589 002761 591 003003 592 003006 595 003032 596 003047 599 003057 601 003062 604 003074 606 003103 607 003107 608 003114 609 003117 611 003124 612 003127 614 003130 616 003131 618 003140 619 003142 621 003143 624 003164 626 003171 627 003215 629 003237 630 003242 631 003257 634 003267 636 003272 638 003305 640 003314 642 003323 643 003325 645 003334 647 003335 650 003354 652 003361 653 003403 655 003427 656 003432 657 003447 660 003457 661 003462 663 003465 664 003470 665 003472 666 003474 668 003476 669 003502 671 003506 672 003507 673 003510 674 003511 675 003512 676 003520 678 003526 680 003534 684 003545 685 003550 686 003552 687 003561 688 003562 690 003563 692 003572 693 003574 694 003575 695 003577 755 003600 758 003625 760 003632 761 003654 763 003700 764 003703 765 003720 768 003730 769 003733 771 003736 772 003740 774 003742 775 003757 778 003767 779 003776 781 004004 782 004006 783 004007 784 004010 785 004013 787 004025 788 004030 789 004032 791 004040 793 004041 794 004042 795 004044 796 004047 798 004060 799 004063 800 004065 802 004073 804 004074 805 004076 807 004101 809 004110 810 004112 811 004115 813 004116 814 004117 816 004120 819 004142 821 004147 822 004171 824 004215 825 004220 826 004222 828 004225 829 004242 832 004252 833 004255 835 004260 836 004275 839 004305 841 004315 843 004323 845 004331 848 004351 850 004376 852 004406 855 004413 857 004420 859 004426 861 004431 863 004440 864 004442 866 004443 869 004472 871 004477 873 004523 874 004526 875 004536 876 004540 878 004543 879 004560 882 004570 883 004573 885 004576 888 004613 890 004624 891 004650 895 004660 896 004675 899 004705 901 004707 903 004716 904 004720 937 004721 940 004762 942 004767 944 005015 945 005023 946 005030 947 005072 949 005102 952 005113 954 005117 955 005130 956 005131 958 005132 960 005143 961 005153 962 005155 964 005156 967 005205 969 005212 971 005236 973 005241 974 005256 977 005266 978 005271 980 005274 982 005300 983 005307 984 005310 986 005311 988 005320 989 005322 990 005332 1022 005333 1026 005355 1028 005362 1030 005406 1031 005411 1033 005413 1034 005430 1036 005440 1037 005443 1038 005446 1040 005451 1041 005455 1042 005456 1043 005461 1044 005466 1045 005475 1046 005502 1050 005506 1055 005553 1057 005556 1058 005560 1059 005564 1062 005565 1063 005566 1064 005571 1065 005604 1066 005606 1067 005616 1069 005625 1070 005627 1073 005633 1074 005637 1075 005641 1076 005644 1077 005651 1081 005652 1083 005656 1084 005657 1085 005664 1086 005676 1087 005700 1088 005710 1089 005717 1090 005721 1091 005725 1093 005731 1095 005754 1097 005764 1099 005767 1100 005770 1101 005775 1102 006010 1104 006022 1105 006031 1106 006034 1107 006036 1109 006042 1111 006045 1113 006054 1114 006056 1139 006057 1142 006104 1144 006111 1145 006133 1147 006157 1148 006162 1149 006177 1152 006207 1153 006212 1155 006215 1156 006225 1158 006226 1159 006227 1160 006233 1161 006237 1163 006247 1165 006256 1166 006261 1167 006262 1170 006271 1172 006300 1173 006302 1175 006303 1178 006326 1179 006333 1181 006343 1182 006367 1184 006411 1185 006414 1186 006431 1189 006441 1190 006444 1192 006455 1195 006467 1197 006536 1199 006546 1200 006550 1202 006551 1205 006566 1207 006573 1208 006617 1210 006641 1211 006644 1212 006661 1215 006671 1216 006674 1219 006710 1221 006717 1222 006721 1224 006722 1227 006742 1229 006747 1230 006771 1232 007015 1233 007020 1234 007022 1235 007037 1237 007047 1239 007052 1240 007070 1242 007100 1243 007103 1245 007104 1247 007110 1248 007117 1249 007121 1251 007122 1254 007137 1256 007144 1257 007166 1259 007212 1260 007215 1261 007217 1262 007234 1264 007244 1265 007247 1266 007265 1268 007275 1269 007300 1271 007301 1273 007305 1274 007314 1275 007316 353 007317 356 007320 357 007324 358 007331 359 007332 360 007364 362 007374 364 007375 365 007406 368 007416 370 007421 371 007434 375 007444 376 007451 456 007452 459 007453 461 007465 464 007477 466 007500 471 007514 472 007531 476 007532 477 007535 478 007537 480 007557 482 007571 483 007610 484 007612 487 007613 491 007626 493 007633 496 007657 498 007671 500 007715 501 007726 503 007727 504 007732 505 007734 506 007742 508 007750 697 007751 706 007753 707 007754 708 007761 709 007765 711 010000 712 010002 714 010003 715 010005 716 010010 717 010014 718 010025 719 010043 720 010045 721 010063 723 010066 724 010071 726 010106 727 010110 728 010111 729 010112 730 010132 732 010134 733 010142 734 010146 736 010147 737 010152 738 010156 741 010173 742 010176 744 010201 745 010202 748 010217 749 010222 752 010225 753 010227 906 010233 912 010235 913 010242 915 010246 916 010250 917 010254 918 010274 919 010304 921 010305 922 010307 923 010313 924 010320 925 010323 926 010327 927 010346 930 010356 931 010364 932 010367 934 010374 992 010375 995 010403 997 010414 998 010424 1001 010444 1002 010467 1006 010501 1009 010515 1010 010520 1011 010524 1014 010534 1015 010540 1019 010547 1020 010560 1116 010561 1119 010563 1121 010575 1123 010604 1125 010617 1130 010622 1133 010623 1135 010667 1137 010676 1277 010677 1283 010701 1285 010707 1286 010712 1287 010757 1289 010776 1292 011002 1293 011006 1295 011007 1298 011010 1301 011016 1302 011033 1304 011045 1306 011050 1307 011100 1308 011104 1312 011106 1317 011114 1318 011120 ----------------------------------------------------------- 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