COMPILATION LISTING OF SEGMENT forum_trans_specs_ Compiled by: Multics PL/I Compiler, Release 33d, of April 24, 1992 Compiled at: ACTC Technologies Inc. Compiled on: 92-09-28_1714.37_Mon_mdt Options: optimize map 1 /****^ *************************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1992 * 4* * * 5* * Copyright, (C) Massachusetts Institute of Technology, 1986 * 6* * * 7* * Copyright (c) 1982 by Massachusetts Institute of Technology * 8* * * 9* *************************************************************** */ 10 11 12 13 /****^ HISTORY COMMENTS: 14* 1) change(86-07-29,Pattin), approve(86-07-29,MCR7354), 15* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 16* Added the bref transactiobn specifier. Reorganized program to optimize 17* performance, specifically by minimizing gate calls. Added expand_list 18* instead of allocating massive trans_list structure. Fixed bug where 19* arg_map was not being freed. Remember deleted status in trans_list 20* structure. Fixed handling of \c in regexps. 21* 2) change(91-08-29,Huen), approve(91-08-29,MCR8248), 22* audit(92-01-08,Zimmerman), install(92-04-27,MR12.5-1014): 23* phx21375: Set the initial value of current trans correctly. 24* phx21376: Fxi the "delete" request to handle the current trans correctly 25* so that the behavour will be consistent with the rdm "dl" request. 26* phx21377: Same trans returned by the "c" request and "c" used as an arg. 27* 3) change(91-09-05,Huen), approve(91-09-05,MCR8249), 28* audit(92-01-08,Zimmerman), install(92-04-27,MR12.5-1014): 29* phx20579: Set inhibit_error if unproc trans is selected. 30* 4) change(91-09-05,Huen), approve(91-09-05,MCR8250), 31* audit(92-01-08,Zimmerman), install(92-04-27,MR12.5-1014): 32* phx20810: Do not output error if inhibit_error is used with the "list" 33* active request. 34* 5) change(92-09-10,Zimmerman), approve(92-09-10,MCR8258), 35* audit(92-09-22,WAAnderson), install(92-09-28,MR12.5-1020): 36* Problem with current being set to deleted txn., or being set to -1. 37* END HISTORY COMMENTS */ 38 39 40 /* format: style3,ifthen,ifthendo,ifthenstmt,^indnoniterdo,^inditerdo,idind30 */ 41 42 forum_trans_specs_$parse_specs: 43 procedure (P_passport_info_ptr, P_first_arg, P_parse_flags, P_ctl_arg_entry, P_forum_idx, P_forum_dir, P_forum_name, 44 P_forum_trans_list_ptr); 45 46 /* Subroutine to parse and process transaction specifiers for forum 47* Also includes requests to return transaction numbers for all specifiers */ 48 49 /* original coding 06/17/81 Jay Pattin 50* modified for ssu_ 08/22/81 Jay Pattin 51* added chairman_message trans spec 05/14/82 Jay Pattin 52* added highest (last_seen) trans spec 10/20/82 Jay Pattin 53* changes for reading deleted transactions, added -idl, -odl, -ondl 10/23/82 Jay Pattin 54* added seen/unseen and friends 1/8/83 Jay Pattin 55* made spec requests call parse 6/29/83 Jay Pattin 56* Modified 12/21/83 by Jeffrey I. Schiller to fix first_unseen to skip 57* over expunged transactions. 58* Speed improvements 11/30/85 Jay Pattin 59* Added bref 12/22/85 Jay Pattin */ 60 61 dcl ( 62 P_forum_idx fixed bin, 63 P_forum_dir char (*), 64 P_forum_name char (*), 65 P_forum_trans_list_ptr pointer, 66 P_first_arg fixed bin, 67 P_parse_flags bit (36) aligned, 68 P_ctl_arg_entry entry (fixed bin) variable, 69 P_passport_info_ptr pointer, 70 P_ssu_ptr pointer 71 ) parameter; 72 73 declare value fixed bin, /* value of expression */ 74 (this_val, state, last_val) fixed bin, 75 (by_chain, list, no_current, reverse_sw, idl_given, temp_forum, initial, reset_current, expunged, inhibit_error, 76 have_limits) bit (1) aligned init ("0"b), 77 (active_function, in_expr, cache, deleted, in_range) 78 bit (1) aligned, 79 (empty, blank, only_unproc) bit (1) init ("1"b), 80 first_char char (1), 81 me char (22), 82 arg_len fixed bin (21), 83 arg_ptr ptr, 84 argmap_ptr ptr, 85 alloc_argmap_size fixed bin, 86 bit_map_len fixed bin, 87 bit_map_ptr ptr, 88 code fixed bin (35), 89 forum_idx fixed bin, 90 forum_dir char (168), 91 forum_name char (32), 92 message char (256), 93 request_name char (32), 94 ret_len fixed bin (21), 95 ret_ptr ptr, 96 ret_string char (80) varying init (""), 97 ssu_ptr ptr, 98 (current, nref, pref, first, last, last_seen, last_tri, last_sent) 99 fixed bin, 100 (idx, jdx, kdx, tidx, sign, select_type, type, arg_count) 101 fixed bin, 102 match_code fixed bin (35); 103 104 declare arg char (arg_len) based (arg_ptr), 105 bit_map bit (bit_map_len) aligned based (bit_map_ptr); 106 declare ret_val char (ret_len) varying based (ret_ptr); 107 declare argmap bit (alloc_argmap_size) based (argmap_ptr); 108 /* on if we look at it on pass 2 */ 109 110 declare ( 111 DIGITS char (10) init ("1234567890"), 112 LETTERS char (53) init ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"), 113 UC_ALPHA char (26) init ("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 114 LC_ALPHA char (26) init ("abcdefghijklmnopqrstuvwxyz") 115 ) internal static options (constant); 116 117 declare keywords (55) char (16) internal static options (constant) 118 init ("first", "f", "last", "l", "previous", "prev", "p", "next", "n", "current", 119 "c", "firstref", "fref", "lastref", "lref", "previousref", "pref", "nextref", 120 "nref", "allref", "aref", "all", "a", "new", "unprocessed", "unproc", "unp", "u", 121 "restref", "rref", "chairman_message", "cmsg", "all_seen", "seen", "first_seen", 122 "fs", "next_seen", "ns", "previous_seen", "ps", "last_seen", "ls", "highest", 123 "all_unseen", "unseen", "first_unseen", "fu", "next_unseen", "nu", 124 "previous_unseen", "pu", "last_unseen", "lu", "beforeref", "bref"); 125 126 declare key_val (55) fixed bin 127 init (1, 1, 2, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 128 13, 13, 13, 13, 14, 14, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 21, 22, 129 22, 23, 23, 24, 24, 25, 25, 26, 26, 15, 15); 130 131 declare ( 132 FIRST init (1), 133 LAST init (2), 134 PREVIOUS init (3), 135 NEXT init (4), 136 CURRENT init (5), 137 FREF init (6), 138 LREF init (7), 139 PREF init (8), 140 NREF init (9), 141 AREF init (10), 142 ALL init (11), 143 NEW init (12), 144 UNPROC init (13), 145 RREF init (14), 146 BREF init (15), 147 CMSG init (16), 148 SEEN init (17), 149 FIRST_SEEN init (18), 150 NEXT_SEEN init (19), 151 PREV_SEEN init (20), 152 LAST_SEEN init (21), 153 UNSEEN init (22), 154 FIRST_UNSEEN init (23), 155 NEXT_UNSEEN init (24), 156 PREV_UNSEEN init (25), 157 LAST_UNSEEN init (26) 158 ) fixed bin internal static options (constant); 159 160 declare ( 161 NEED_CURRENT init ("00100111110001100011000110"b), 162 NEED_LIMITS init ("11011000001100001111111111"b), 163 MULTIPLE init ("00000000011101101000010000"b), 164 UNPROC_OK init ("00000111010001100000000000"b) 165 ) bit (26) static options (constant); 166 167 declare ( 168 ANYTHING init (0), 169 MUST_BE_ARITH init (1), 170 MUST_BE_REGEXP init (2), 171 MUST_BE_USERID init (3) 172 ) fixed bin internal static options (constant); 173 174 declare ( 175 AFTER init (1), 176 BEFORE init (2), 177 ON_OR_BEFORE init (3), 178 DATE init (4) 179 ) fixed bin static options (constant); 180 181 declare THERE_IS_NO char (32) static options (constant) init ("There is no ^a transaction."); 182 183 declare 1 trans_specs aligned, 184 2 flags aligned, 185 3 selected bit (1) unaligned, /* on if any transactions selected */ 186 3 regexp_given bit (1) unaligned, 187 3 no_match_sj bit (1) unaligned, /* don't match regexp against subject */ 188 3 no_match_text bit (1) unaligned, /* ditto for text */ 189 3 id_given bit (1) unaligned, 190 3 date_given bit (1) unaligned, 191 3 pad bit (30) unaligned, 192 2 low_date fixed bin (71), 193 2 high_date fixed bin (71), 194 2 regexp_len fixed bin (21), 195 2 regexp char (256), /* select by regexp matching */ 196 2 person_id char (22); /* Used for selecting by person_id */ 197 198 declare saved_regexp char (256) varying internal static init (""); 199 200 declare (fixed, substr, verify, translate, null, string, length, min, hbound, index, after, before, char, ltrim, rtrim, 201 unspec, max, addr, reverse) builtin; 202 declare (area, cleanup) condition; 203 204 declare convert_date_to_binary_ entry (char (*), fixed bin (71), fixed bin (35)), 205 decode_clock_value_ entry (fixed bin (71), fixed bin, fixed bin, fixed bin, fixed bin (71), fixed bin, 206 char (3)), 207 encode_clock_value_ entry (fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, 208 fixed bin (71), fixed bin, char (3), fixed bin (71), fixed bin (35)), 209 ioa_ entry () options (variable), 210 user_info_$whoami entry (char (*), char (*), char (*)), 211 search_file_$silent entry (ptr, fixed bin (21), fixed bin (21), ptr, fixed bin (21), fixed bin (21), 212 fixed bin (21), fixed bin (21), fixed bin (35)), 213 forum_$forum_limits entry (fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, 214 bit (36) aligned, fixed bin (35)), 215 forum_$get_transaction_map_idx 216 entry (fixed bin, char (*), bit (*) aligned, fixed bin (35)), 217 forum_$next_transaction entry (fixed bin, fixed bin, fixed bin, fixed bin (35)), 218 forum_$previous_transaction entry (fixed bin, fixed bin, fixed bin, fixed bin (35)), 219 forum_$trans_ref_info entry (fixed bin, fixed bin, fixed bin, fixed bin, fixed bin, bit (1) aligned, 220 fixed bin (35)), 221 forum_$trans_time_info entry (fixed bin, fixed bin (71), fixed bin (71), fixed bin, fixed bin, 222 fixed bin (35)), 223 forum_$check_user entry (fixed bin, char (*), fixed bin, fixed bin (35)), 224 forum_$close_forum entry (fixed bin, fixed bin (35)), 225 forum_$get_message entry (fixed bin, char (*), fixed bin (35)), 226 forum_requests_$open_forum entry (char (*), fixed bin, char (*), char (*), fixed bin (35)), 227 forum_trans_util_$clear_cache entry (ptr), 228 forum_trans_util_$read_trans entry (ptr, fixed bin, fixed bin, ptr, fixed bin (35)), 229 forum_trans_util_$reverse entry (ptr, ptr), 230 forum_trans_util_$sort_by_chain 231 entry (ptr, fixed bin, ptr, fixed bin), 232 ssu_$abort_line entry options (variable), 233 ssu_$arg_ptr entry (ptr, fixed bin, ptr, fixed bin (21)), 234 ssu_$get_request_name entry (ptr) returns (char (32)), 235 ssu_$print_message entry options (variable), 236 ssu_$return_arg entry (ptr, fixed bin, bit (1) aligned, ptr, fixed bin (21)); 237 238 declare ( 239 error_table_$badopt, 240 error_table_$inconsistent, 241 error_table_$noarg, 242 error_table_$nomatch, 243 forum_et_$bad_trans_spec, 244 forum_et_$no_forum, 245 forum_et_$no_current, 246 forum_et_$old_format, 247 forum_et_$missing_spec, 248 forum_et_$too_many_trans, 249 forum_et_$too_many_regexps, 250 forum_et_$too_many_personids, 251 forum_et_$key_not_allowed, 252 forum_et_$no_trans_for_user, 253 forum_et_$no_transactions, 254 forum_et_$trans_deleted, 255 forum_et_$trans_reaped, 256 forum_et_$trans_not_deleted, 257 forum_et_$unproc_not_allowed, 258 forum_et_$null_range_spec, 259 forum_et_$invalid_trans_idx 260 ) fixed bin (35) external; 261 1 1 /* ... BEGIN INCLUDE FILE forum_trans_list.incl.pl1 ... */ 1 2 1 3 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(86-07-30,Pattin), approve(86-07-30,MCR7354), 1 7* audit(86-08-07,Margolin), install(86-08-16,MR12.0-1128): 1 8* Added deleted switch. 1 9* 2) change(91-09-05,Huen), approve(91-09-05,MCR8249), 1 10* audit(92-01-08,Zimmerman), install(92-04-27,MR12.5-1014): 1 11* phx20579: Added parse_flags.default_to_unproc & CREATE_UNPROC 1 12* END HISTORY COMMENTS */ 1 13 1 14 1 15 dcl forum_trans_list_ptr ptr; 1 16 dcl alloc_trans_list_size fixed bin; 1 17 1 18 dcl 1 forum_trans_list aligned based (forum_trans_list_ptr), 1 19 2 max_size fixed bin, 1 20 2 size fixed bin, 1 21 2 max_personid_len fixed bin, 1 22 2 list (alloc_trans_list_size refer (forum_trans_list.max_size)), 1 23 3 trans_num fixed bin (17), /* must be aligned */ 1 24 3 nref fixed bin (17) unaligned, 1 25 3 pref fixed bin (17) unaligned, 1 26 3 flags unaligned, 1 27 4 deleted bit (1) unaligned, 1 28 4 pad bit (35) unaligned; 1 29 1 30 dcl parse_flags_word bit (36) aligned; 1 31 1 32 dcl 1 parse_flags aligned based (addr (parse_flags_word)), 1 33 2 non_null bit (1) unal, /* on if trans_spec cannot be empty */ 1 34 2 only_one bit (1) unal, /* on if only one transaction may be specified */ 1 35 2 allow_deleted bit (1) unal, /* on if deleted transactions may be specified */ 1 36 2 must_be_deleted bit (1) unal, /* on if must be deleted */ 1 37 2 disallow_unproc bit (1) unal, /* on if unprocessed transaction not valid */ 1 38 2 disallow_meeting bit (1) unal, /* on if -meeting not allowed */ 1 39 2 disallow_reverse bit (1) unal, /* on if -reverse not allowed */ 1 40 2 disallow_idl bit (1) unal, /* on if -include_deleted not allowed */ 1 41 2 dont_read bit (1) unal, /* on if regexps, -sj, -text, userids, time not allowed */ 1 42 2 disallow_initial bit (1) unal, /* on if -initial not allowed */ 1 43 2 default_to_all bit (1) unal, /* on if defaults to all rather than current */ 1 44 2 default_to_unproc bit (1) unal, /* on if defaults to unproc, not current */ 1 45 2 disallow_cmsg bit (1) unal, /* no chairman_message */ 1 46 2 disallow_by_chain bit (1) unal, /* no -by_chain */ 1 47 2 allow_inhibit_error bit (1) unal, /* don't complain if none selected and -ihe given */ 1 48 2 call_on_non_ctl_arg bit (1) unal, /* call request on bad arguments even if not ctl args */ 1 49 2 default_to_none bit (1) unal, /* allow no transactions to be selected */ 1 50 2 create_unproc bit (1) unal, /* allow unproc even if there isn't one */ 1 51 2 padding bit (18) unal; 1 52 1 53 dcl ANY bit (36) aligned init (""b); 1 54 dcl (NON_NULL init ("100000000000000000"b), 1 55 ONLY_ONE init ("010000000000000000"b), 1 56 ALLOW_DELETED init ("001000000000000000"b), 1 57 MUST_BE_DELETED init ("001100000000000000"b), 1 58 DISALLOW_UNPROC init ("000010000000000000"b), 1 59 DISALLOW_MTG init ("000001000000000000"b), 1 60 DISALLOW_REV init ("000000100000000000"b), 1 61 DISALLOW_IDL init ("000000010000000000"b), 1 62 DONT_READ init ("000000001000000000"b), 1 63 DISALLOW_INITIAL init ("000000000100000000"b), 1 64 DEFAULT_TO_ALL init ("000000000010000000"b), 1 65 DEFAULT_TO_UNPROC init ("000000000001000000"b), 1 66 DISALLOW_CMSG init ("000000000000100000"b), 1 67 DISALLOW_BYCHAIN init ("000000000000010000"b), 1 68 ALLOW_IHE init ("000000000000001000"b), 1 69 CALL_ON_BAD_ARGS init ("000000000000000100"b), 1 70 DEFAULT_TO_NONE init ("000000000000000010"b), 1 71 CREATE_UNPROC init ("000000000000000001"b) 1 72 ) bit (18) aligned internal static options (constant); 1 73 1 74 /* ... END INCLUDE FILE forum_trans_list.incl.pl1 ... */ 262 263 2 1 /* BEGIN INCLUDE FILE: forum_user_trans.incl.pl1 */ 2 2 2 3 dcl alloc_text_length fixed bin (21); /* length of text area to allocate */ 2 4 dcl alloc_subject_length fixed bin (21); /* length of subject area to allocate */ 2 5 dcl forum_user_trans_ptr ptr; /* pointer to below structure */ 2 6 2 7 dcl 1 forum_user_trans based (forum_user_trans_ptr) aligned, 2 8 2 type fixed bin, /* type of transaction */ 2 9 2 person_id char (22), /* person_id of author of this transaction */ 2 10 2 project_id char (9), /* project_id of author of this transaction */ 2 11 2 time fixed bin (71), /* time transaction was entered */ 2 12 2 trans_no fixed bin, /* number of this transaction */ 2 13 2 next_trans_ptr ptr, /* pointer (in user ring) of next transaction */ 2 14 2 prev_trans_ptr ptr, /* pointer (in user ring) of previous transaction */ 2 15 2 subject_length fixed bin (21), /* length of subject field of transaction */ 2 16 2 text_length fixed bin (21), /* length of text field of transaction */ 2 17 2 unfilled bit (1) aligned, /* set if transaction is NOT stored filled */ 2 18 2 subject char (alloc_subject_length refer (forum_user_trans.subject_length)) unaligned, /* subject of transaction */ 2 19 2 text char (alloc_text_length refer (forum_user_trans.text_length)) unaligned; /* text of transaction */ 2 20 2 21 declare user_trans_type fixed bin static options (constant) initial (1); 2 22 declare message_type fixed bin static options (constant) initial (2); 2 23 2 24 declare (ONLY_UNDELETED init (0), 2 25 INCLUDE_DELETED init (1), 2 26 ONLY_DELETED init (2)) 2 27 fixed bin static options (constant); 2 28 2 29 /* END INCLUDE FILE: forum_user_trans.incl.pl1 */ 264 265 3 1 /* START OF: forum_passport.incl.pl1 * * * * * * * * * * * * * * * * */ 3 2 3 3 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(86-07-30,Pattin), approve(86-07-30,MCR7354), 3 7* audit(86-08-03,Margolin), install(86-08-16,MR12.0-1128): 3 8* Added trailer_format. 3 9* END HISTORY COMMENTS */ 3 10 3 11 3 12 declare passport_info_ptr ptr; 3 13 3 14 declare 1 passport aligned based (passport_info_ptr), 3 15 2 version fixed bin, /* 2 */ 3 16 2 forum_idx fixed bin, /* current forum */ 3 17 2 forum_dir char (168) unal, /* where forum lives */ 3 18 2 forum_name char (32) unal, /* Current forum I'm at */ 3 19 2 forum_name_len fixed bin, /* length of forum_name without suffix */ 3 20 2 flags unal, 3 21 3 brief_sw bit (1) unal, /* specified at invocation */ 3 22 3 talk_fill bit (1) unal, /* God knows */ 3 23 3 print_fill bit (1) unal, /* God doesn't know */ 3 24 3 read_only bit (1) unal, 3 25 3 print_message bit (1) unal, /* Print chairman message on talk/reply */ 3 26 3 auto_write bit (1) unal, 3 27 3 mbz bit (30) unal, /* Future expansion */ 3 28 2 current_trans fixed bin, /* current transaction number */ 3 29 2 input_fill_width fixed bin, /* line length used for input filling */ 3 30 2 output_fill_width fixed bin, /* line length used for output filling */ 3 31 2 public_channel fixed bin (71), /* My transaction wakeup channel. */ 3 32 2 area_ptr ptr, /* used for random temporary storage */ 3 33 2 first_trans_ptr ptr, /* ptrs to linked list of transactions copied to */ 3 34 2 last_trans_ptr ptr, /* user ring */ 3 35 2 unprocessed_trans_ptr ptr, /* If this isn't null, we got one pending. */ 3 36 2 unprocessed_reply_trans fixed bin, /* If nonzero, unprocessed trans is a reply. */ 3 37 2 unprocessed_forum_dir char (168), /* Directory containing meeting unproc is for. */ 3 38 2 unprocessed_forum_name char (32), /* Name of meeting unproc is for */ 3 39 2 unprocessed_name_len fixed bin, /* length (w/o suffix) of Name of meeting unproc is for */ 3 40 2 ssu_ptr ptr, /* Department of Redundancy Department. */ 3 41 2 next_passport_ptr ptr, /* list of all invocations */ 3 42 2 trailer_format fixed bin; 3 43 3 44 declare passport_version_2 fixed bin static options (constant) initial (2); 3 45 3 46 declare forum_area area based (passport.area_ptr), 3 47 no_suffix_name char (passport.forum_name_len) based (addr (passport.forum_name)); 3 48 3 49 declare forum_data_$version_string character (8) external, 3 50 forum_data_$central_directory 3 51 character (168) unaligned external, 3 52 forum_data_$info_directory character (168) unaligned external; 3 53 3 54 declare (TFMT_none init (0), 3 55 TFMT_number init (1), 3 56 TFMT_more init (2), 3 57 TFMT_reference init (3)) 3 58 fixed bin static options (constant); 3 59 3 60 /* END OF: forum_passport.incl.pl1 * * * * * * * * * * * * * * * * */ 266 267 268 passport_info_ptr = P_passport_info_ptr; 269 ssu_ptr = passport.ssu_ptr; 270 271 P_forum_idx = 0; 272 parse_flags_word = P_parse_flags; 273 forum_idx = passport.forum_idx; /* assume current forum */ 274 current = passport.current_trans; 275 if current = 0 then no_current = "1"b; 276 277 argmap_ptr, bit_map_ptr, forum_trans_list_ptr = null (); 278 code, last_tri = 0; 279 cache = "1"b; /* Use the cache (we are in current forum) */ 280 281 on cleanup call cleanup_handler; 282 283 string (trans_specs.flags) = ""b; 284 trans_specs.low_date, trans_specs.high_date = 0; 285 trans_specs.regexp = ""; 286 trans_specs.regexp_len = 0; 287 trans_specs.person_id = ""; 288 289 if parse_flags.must_be_deleted then select_type = ONLY_DELETED; 290 else if parse_flags.allow_deleted then select_type = INCLUDE_DELETED; 291 else select_type = ONLY_UNDELETED; 292 293 call ssu_$return_arg (ssu_ptr, arg_count, active_function, (null ()), (0)); 294 295 alloc_argmap_size = arg_count; 296 allocate argmap in (forum_area); /* tells if args are processed on pass 1 */ 297 298 state = ANYTHING; 299 do idx = P_first_arg to arg_count; /* Pass 1, ctl args, ids, regexps */ 300 call ssu_$arg_ptr (ssu_ptr, idx, arg_ptr, arg_len); 301 if substr (arg, 1, 1) = "-" & index (DIGITS, substr (arg, 2, 1)) = 0 & state = ANYTHING then do; 302 /* control arg */ 303 if ^parse_flags.disallow_meeting & (arg = "-meeting" | arg = "-mtg") then do; 304 idx = idx + 1; 305 if idx > arg_count then 306 NOARG: 307 call ssu_$abort_line (ssu_ptr, error_table_$noarg, "Following ""^a"".", arg); 308 call ssu_$arg_ptr (ssu_ptr, idx, arg_ptr, arg_len); 309 call forum_requests_$open_forum (arg, forum_idx, forum_dir, forum_name, code); 310 if code ^= 0 then call ssu_$abort_line (ssu_ptr, code, "Opening meeting ""^a"".", arg); 311 312 temp_forum = "1"b; 313 if forum_idx ^= passport.forum_idx then cache = "0"b; 314 end; 315 316 else if ^parse_flags.disallow_idl & (arg = "-include_deleted" | arg = "-idl") then 317 select_type = INCLUDE_DELETED; 318 else if ^parse_flags.disallow_idl & (arg = "-only_deleted" | arg = "-odl") then 319 select_type = ONLY_DELETED; 320 else if ^parse_flags.disallow_idl & (arg = "-only_non_deleted" | arg = "-ondl") then 321 select_type = ONLY_UNDELETED; 322 323 else if parse_flags.allow_inhibit_error & (arg = "-inhibit_error" | arg = "-ihe") then 324 inhibit_error = "1"b; 325 else if parse_flags.allow_inhibit_error & (arg = "-no_inhibit_error" | arg = "-nihe") then 326 inhibit_error = "0"b; 327 else if ^parse_flags.disallow_initial & arg = "-initial" then initial = "1"b; 328 else if ^parse_flags.disallow_by_chain & arg = "-by_chain" then by_chain = "1"b; 329 else if ^parse_flags.disallow_reverse & (arg = "-reverse" | arg = "-rv") then reverse_sw = "1"b; 330 else if ^parse_flags.dont_read then do; 331 if arg = "-after" | arg = "-af" then call get_date (AFTER, "1"b); 332 else if arg = "-after_time" | arg = "-aft" then call get_date (AFTER, "0"b); 333 else if arg = "-before" | arg = "-be" then call get_date (BEFORE, "1"b); 334 else if arg = "-before_time" | arg = "-bet" then call get_date (BEFORE, "0"b); 335 else if arg = "-between" | arg = "-bt" then do; 336 call get_date (AFTER, "1"b); 337 call get_date (ON_OR_BEFORE, "1"b); 338 end; 339 else if arg = "-between_time" | arg = "-btt" then do; 340 call get_date (AFTER, "0"b); 341 call get_date (BEFORE, "0"b); 342 end; 343 else if arg = "-date" | arg = "-dt" then call get_date (DATE, "1"b); 344 else if arg = "-from" | arg = "-fm" then do; 345 if idx = arg_count then goto NOARG; 346 state = MUST_BE_USERID; 347 end; 348 else if arg = "-subject" | arg = "-sj" then do; 349 if idx = arg_count then goto NOARG; 350 state = MUST_BE_REGEXP; 351 trans_specs.no_match_text = "1"b; 352 end; 353 else if arg = "-text" | arg = "-tx" then do; 354 if idx = arg_count then goto NOARG; 355 state = MUST_BE_REGEXP; 356 trans_specs.no_match_sj = "1"b; 357 end; 358 else call P_ctl_arg_entry (idx); 359 end; 360 else call P_ctl_arg_entry (idx); 361 end; /* control arg */ 362 else do; 363 empty = "0"b; 364 substr (argmap, idx, 1) = "1"b; /* process it on pass 2 */ 365 if index (arg, ":") = 0 | index (arg, "/") ^= 0 then 366 call pass1 (arg); /* range not given */ 367 else do; 368 only_unproc = "0"b; 369 end; 370 state = ANYTHING; 371 end; 372 end; /* pass1 */ 373 374 if reverse_sw & by_chain then 375 call ssu_$abort_line (ssu_ptr, error_table_$inconsistent, """-reverse"" and ""-by_chain"""); 376 if trans_specs.high_date < trans_specs.low_date & trans_specs.high_date ^= 0 then 377 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "Invalid range in date specification."); 378 379 /* TR20810: If inhibit_error is set, do not output error */ 380 if last_sent = 0 & trans_specs.id_given & ^inhibit_error then 381 call ssu_$abort_line (ssu_ptr, forum_et_$no_trans_for_user, "^a", arg); 382 if ^parse_flags.default_to_unproc then 383 only_unproc = only_unproc & ^empty; /* if something given, then isn't only unproc */ 384 else only_unproc = only_unproc & (passport.unprocessed_trans_ptr ^= null ()); 385 386 if ^only_unproc & forum_idx = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_forum); 387 if only_unproc then last = 0; /* unproc doesn't require a forum */ 388 else if temp_forum then call get_limits (); 389 390 alloc_trans_list_size = 100; 391 392 RETRY_ATL: 393 on area 394 begin; 395 call forum_trans_util_$clear_cache (passport_info_ptr); 396 goto RETRY_ATL; 397 end; 398 399 allocate forum_trans_list in (forum_area); 400 forum_trans_list.max_size = 100; 401 forum_trans_list.size, forum_trans_list.max_personid_len = 0; 402 403 revert area; 404 405 do idx = P_first_arg to arg_count; /* pass 2 */ 406 if substr (argmap, idx, 1) then do; 407 call ssu_$arg_ptr (ssu_ptr, idx, arg_ptr, arg_len); 408 in_range = "0"b; 409 jdx = index (arg, ":"); 410 if jdx ^= 0 then do; 411 if jdx = 1 | jdx = arg_len then 412 call ssu_$abort_line (ssu_ptr, 0, "Null value before or after a "":"". ^a", arg); 413 in_range = "1"b; 414 call pass2 (before (arg, ":")); 415 last_val = value; 416 call pass2 (after (arg, ":")); 417 call do_range (); /* add transactions in the range */ 418 end; 419 else call pass2 (arg); 420 end; 421 end; 422 423 if ^trans_specs.selected then do; /* noone home */ 424 if ^blank then 425 if ^inhibit_error then 426 call ssu_$abort_line (ssu_ptr, forum_et_$no_transactions); 427 else ; 428 else if trans_specs.regexp_given | trans_specs.id_given | trans_specs.date_given then call get_all (); 429 else if parse_flags.non_null then call ssu_$abort_line (ssu_ptr, forum_et_$missing_spec); 430 else if parse_flags.default_to_none then inhibit_error = "1"b; 431 else if parse_flags.default_to_all then call get_all (); 432 /* TR20810, 20579: Set inhibit_error if unproc trans is selected */ 433 else if parse_flags.default_to_unproc 434 & (parse_flags.create_unproc | passport.unprocessed_trans_ptr ^= null ()) then do; 435 if passport.unprocessed_trans_ptr = null () then 436 inhibit_error = "1"b; 437 else do; 438 deleted = "0"b; 439 kdx = UNPROC; /* Yet another kludge */ 440 call allocate_num (0); 441 end; 442 end; 443 else do; 444 if current > 0 then this_val = current; /* TR21375-6: Try setting current first. */ 445 else if current = 0 then do; 446 call set_current (); /* TR21377: Same trans returned by "c" request and "c" used as an arg */ 447 passport.current_trans = this_val; 448 current = this_val; 449 end; 450 if current = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_current); 451 call get_tri (current, "0"b, 0, (0)); 452 if ^initial | pref = 0 then call allocate_num (current); 453 end; 454 end; 455 if bit_map_ptr ^= null () then free bit_map; 456 if argmap_ptr ^= null () then free argmap; 457 458 if ^trans_specs.selected & ^inhibit_error then /* still noone home */ 459 call ssu_$abort_line (ssu_ptr, forum_et_$no_transactions); 460 461 if forum_trans_list.size > 1 then 462 if reverse_sw then call forum_trans_util_$reverse (passport_info_ptr, forum_trans_list_ptr); 463 else if by_chain then 464 call forum_trans_util_$sort_by_chain (passport_info_ptr, forum_idx, forum_trans_list_ptr, select_type) 465 ; 466 467 if temp_forum then do; /* if -meeting was given, tell our caller */ 468 P_forum_idx = forum_idx; 469 P_forum_name = forum_name; 470 P_forum_dir = forum_dir; 471 end; 472 P_forum_trans_list_ptr = forum_trans_list_ptr; 473 return; 474 475 /* Now the entries that return values for all the keywords */ 476 first_request: 477 entry (P_ssu_ptr, P_passport_info_ptr); 478 479 call common (FIRST, "0"b); 480 481 last_request: 482 entry (P_ssu_ptr, P_passport_info_ptr); 483 484 call common (LAST, "0"b); 485 486 previous_request: 487 entry (P_ssu_ptr, P_passport_info_ptr); 488 489 call common (PREVIOUS, "1"b); 490 491 next_request: 492 entry (P_ssu_ptr, P_passport_info_ptr); 493 494 call common (NEXT, "1"b); 495 496 current_request: 497 entry (P_ssu_ptr, P_passport_info_ptr); 498 499 call common (CURRENT, "0"b); 500 501 fref_request: 502 entry (P_ssu_ptr, P_passport_info_ptr); 503 504 call common (FREF, "1"b); 505 506 lref_request: 507 entry (P_ssu_ptr, P_passport_info_ptr); 508 509 call common (LREF, "1"b); 510 511 pref_request: 512 entry (P_ssu_ptr, P_passport_info_ptr); 513 514 call common (PREF, "1"b); 515 516 nref_request: 517 entry (P_ssu_ptr, P_passport_info_ptr); 518 519 call common (NREF, "1"b); 520 521 aref_request: 522 entry (P_ssu_ptr, P_passport_info_ptr); 523 524 call common (AREF, "1"b); 525 526 rref_request: 527 entry (P_ssu_ptr, P_passport_info_ptr); 528 529 call common (RREF, "1"b); 530 531 bref_request: 532 entry (P_ssu_ptr, P_passport_info_ptr); 533 534 call common (BREF, "1"b); 535 536 new_request: 537 entry (P_ssu_ptr, P_passport_info_ptr); 538 539 call common (NEW, "0"b); 540 541 all_request: 542 entry (P_ssu_ptr, P_passport_info_ptr); 543 544 call common (ALL, "0"b); 545 546 seen_request: 547 entry (P_ssu_ptr, P_passport_info_ptr); 548 549 call common (SEEN, "0"b); 550 551 unseen_request: 552 entry (P_ssu_ptr, P_passport_info_ptr); 553 554 call common (UNSEEN, "0"b); 555 556 first_seen_request: 557 entry (P_ssu_ptr, P_passport_info_ptr); 558 559 call common (FIRST_SEEN, "0"b); 560 561 first_unseen_request: 562 entry (P_ssu_ptr, P_passport_info_ptr); 563 564 call common (FIRST_UNSEEN, "0"b); 565 566 next_seen_request: 567 entry (P_ssu_ptr, P_passport_info_ptr); 568 569 call common (NEXT_SEEN, "1"b); 570 571 next_unseen_request: 572 entry (P_ssu_ptr, P_passport_info_ptr); 573 574 call common (NEXT_UNSEEN, "1"b); 575 576 prev_seen_request: 577 entry (P_ssu_ptr, P_passport_info_ptr); 578 579 call common (PREV_SEEN, "1"b); 580 581 prev_unseen_request: 582 entry (P_ssu_ptr, P_passport_info_ptr); 583 584 call common (PREV_UNSEEN, "1"b); 585 586 last_seen_request: 587 entry (P_ssu_ptr, P_passport_info_ptr); 588 589 call common (LAST_SEEN, "0"b); 590 591 last_unseen_request: 592 entry (P_ssu_ptr, P_passport_info_ptr); 593 594 call common (LAST_UNSEEN, "0"b); 595 596 MAIN_RETURN: 597 return; 598 599 common: 600 proc (P_type, allow_spec); 601 602 declare P_type fixed bin, 603 allow_spec bit (1) aligned; 604 605 ssu_ptr = P_ssu_ptr; 606 passport_info_ptr = P_passport_info_ptr; 607 type = P_type; 608 forum_idx = passport.forum_idx; 609 if forum_idx = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_forum); 610 current = passport.current_trans; 611 if current = 0 then no_current = "1"b; 612 list = "1"b; 613 temp_forum = "0"b; 614 last_tri = 0; 615 argmap_ptr, bit_map_ptr, forum_trans_list_ptr = null (); 616 select_type = ONLY_UNDELETED; 617 request_name = ssu_$get_request_name (ssu_ptr); 618 call ssu_$return_arg (ssu_ptr, arg_count, active_function, ret_ptr, ret_len); 619 620 on cleanup call cleanup_handler (); 621 622 if arg_count > 0 & allow_spec then do; 623 parse_flags_word = 624 ONLY_ONE | DISALLOW_MTG | DISALLOW_REV | DISALLOW_INITIAL | DONT_READ | DISALLOW_CMSG 625 | DISALLOW_BYCHAIN; 626 if ^substr (UNPROC_OK, type, 1) then parse_flags_word = parse_flags_word | DISALLOW_UNPROC; 627 628 call forum_trans_specs_$parse_specs (passport_info_ptr, 1, parse_flags_word, dummy, (0), (""), (""), 629 forum_trans_list_ptr); 630 current = forum_trans_list.trans_num (1); 631 if current = 0 then do; 632 if ^substr (UNPROC_OK, type, 1) then 633 call ssu_$abort_line (ssu_ptr, 0, "The unprocessed transaction is not a reply."); 634 current = passport.unprocessed_reply_trans; 635 if type = PREF then current = -current; /* PREF of unproc is weird */ 636 end; 637 free forum_trans_list; 638 end; 639 640 do idx = 1 to arg_count; 641 call ssu_$arg_ptr (ssu_ptr, idx, arg_ptr, arg_len); 642 if index (arg, "-") = 1 then do; 643 if arg = "-include_deleted" | arg = "-idl" then select_type = INCLUDE_DELETED; 644 else if arg = "-only_deleted" | arg = "-odl" then select_type = ONLY_DELETED; 645 else if arg = "-only_non_deleted" | arg = "-ondl" then select_type = ONLY_UNDELETED; 646 else if ^allow_spec then call ssu_$abort_line (ssu_ptr, error_table_$badopt, "^a", arg); 647 end; 648 else if ^allow_spec then call ssu_$abort_line (ssu_ptr, 0, "Usage: ^a {-control_args}", request_name); 649 end; 650 651 if substr (NEED_LIMITS, type, 1) then do; 652 call forum_$forum_limits (forum_idx, select_type, last_seen, first, last, (0), ("0"b), code); 653 if code ^= 0 then call ssu_$abort_line (ssu_ptr, code, "Getting meeting status."); 654 if first = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_transactions); 655 end; 656 657 if type >= SEEN then do; 658 bit_map_len = last; 659 allocate bit_map in (forum_area); 660 call forum_$get_transaction_map_idx (forum_idx, "", bit_map, code); 661 if code ^= 0 then 662 if code = forum_et_$old_format then do; 663 if type ^= LAST_SEEN then 664 call ssu_$abort_line (ssu_ptr, 0, "Version 1 meetings do not have seen maps."); 665 end; 666 else call ssu_$abort_line (ssu_ptr, code, "Getting transaction map."); 667 end; 668 669 if last_seen > 0 & current = 0 & substr (NEED_CURRENT, type, 1) then 670 call ssu_$abort_line (ssu_ptr, forum_et_$no_current); 671 672 unspec (trans_specs) = "0"b; 673 674 if type = AREF then call add_aref ("1"b); 675 else if type = RREF then call add_rref (); 676 else if type = BREF then call add_aref ("0"b); 677 else if type = NEW then call add_new (); 678 else if type = ALL then call get_all (); 679 else if type = SEEN then call get_seen ("1"b); 680 else if type = UNSEEN then call get_seen ("0"b); 681 else do; 682 if type = CURRENT then do; 683 if current > 0 then this_val = current; /* TR21375-6: Try setting current first. */ 684 else if current = 0 then do; 685 call set_current (); /* TR21377: Same trans returned by "c" request and "c" used as an arg */ 686 passport.current_trans = this_val; 687 current = this_val; 688 end; 689 690 if current = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_current); 691 end; 692 else if type = FIRST then this_val = first; 693 else if type = LAST then this_val = last; 694 else if type = PREVIOUS then call get_prev (); 695 else if type = NEXT then call get_next (); 696 else if type = FREF then call get_fref (); 697 else if type = LREF then call get_lref (); 698 else if type = NREF then call get_nref (); 699 else if type = PREF then call get_pref (); 700 else if type = FIRST_SEEN then call get_first_seen (); 701 else if type = FIRST_UNSEEN then call get_first_unseen (); 702 else if type = NEXT_SEEN then call get_next_seen (); 703 else if type = NEXT_UNSEEN then call get_next_unseen (); 704 else if type = PREV_SEEN then call get_prev_seen (); 705 else if type = PREV_UNSEEN then call get_prev_unseen (); 706 else if type = LAST_SEEN then call get_last_seen (); 707 else if type = LAST_UNSEEN then call get_last_unseen (); 708 trans_specs.selected = "1"b; 709 ret_string = ltrim (char (this_val)); /* and put it in a string */ 710 end; 711 call cleanup_handler (); 712 713 if ^trans_specs.selected then call ssu_$abort_line (ssu_ptr, forum_et_$no_transactions); 714 715 if active_function then 716 ret_val = ret_val || ret_string; 717 else call ioa_ ("^a", ret_string); 718 goto MAIN_RETURN; 719 720 dummy: 721 entry (P_arg_idx); 722 723 declare P_arg_idx fixed bin; 724 725 call ssu_$arg_ptr (ssu_ptr, P_arg_idx, arg_ptr, arg_len); 726 call ssu_$abort_line (ssu_ptr, error_table_$badopt, "^a", arg); 727 return; 728 729 end common; 730 731 cleanup_handler: 732 proc; 733 734 if forum_trans_list_ptr ^= null () then free forum_trans_list; 735 if bit_map_ptr ^= null () then free bit_map; 736 if argmap_ptr ^= null () then free argmap; 737 if temp_forum then call forum_$close_forum (forum_idx, (0)); 738 return; 739 end; 740 741 add_to_string: /* routine to build return string for all, aref, new */ 742 proc (number); 743 744 declare number fixed bin; 745 746 trans_specs.selected = "1"b; /* remember if we found any */ 747 if active_function then 748 ret_val = ret_val || ltrim (char (number)) || " "; 749 else do; 750 if length (ret_string) > 72 then do; 751 call ioa_ (ret_string); /* print out one line */ 752 ret_string = ""; 753 end; 754 ret_string = ret_string || ltrim (char (number)) || " "; 755 end; 756 return; 757 end add_to_string; 758 759 get_limits: 760 proc (); 761 762 call forum_$forum_limits (forum_idx, select_type, last_seen, first, last, (0), (""b), code); 763 if code ^= 0 then call ssu_$abort_line (ssu_ptr, code); 764 if first = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_transactions); 765 if temp_forum then do; 766 current = last_seen; 767 no_current = "0"b; 768 end; 769 770 have_limits = "1"b; 771 end get_limits; 772 773 get_date: 774 proc (type, truncate); 775 776 declare type fixed bin, 777 truncate bit (1) aligned, 778 (month, day, year) fixed bin, 779 time_stamp fixed bin (71), 780 ONE_DAY_MINUS_A_MICROSECOND init (86399999999) fixed bin (71) static options (constant); 781 782 if idx = arg_count then goto NOARG; 783 idx = idx + 1; 784 call ssu_$arg_ptr (ssu_ptr, idx, arg_ptr, arg_len); 785 call convert_date_to_binary_ (arg, time_stamp, code); 786 if code ^= 0 then call ssu_$abort_line (ssu_ptr, code, "^a", arg); 787 788 if truncate then do; 789 call decode_clock_value_ (time_stamp, month, day, year, (0), (0), ("")); 790 call encode_clock_value_ (month, day, year, 0, 0, 0, 0, 0, "", time_stamp, (0)); 791 end; 792 793 trans_specs.date_given = "1"b; 794 if type = BEFORE then trans_specs.high_date = time_stamp; 795 else if type = ON_OR_BEFORE then trans_specs.high_date = time_stamp + ONE_DAY_MINUS_A_MICROSECOND; 796 else if type = AFTER then trans_specs.low_date = time_stamp; 797 else do; 798 trans_specs.low_date = time_stamp; 799 trans_specs.high_date = time_stamp + ONE_DAY_MINUS_A_MICROSECOND; 800 end; 801 802 return; 803 end get_date; 804 805 get_tri: 806 proc (idx, ignore_reaped, direction, next); 807 808 declare (idx, direction, next) fixed bin, 809 ignore_reaped bit (1) aligned; 810 811 if idx ^= last_tri then do; 812 call forum_$trans_ref_info (forum_idx, idx, select_type, pref, nref, deleted, code); 813 if code ^= 0 then 814 if (code ^= forum_et_$trans_reaped) | ^ignore_reaped then 815 call ssu_$abort_line (ssu_ptr, code, "Transaction ^d.", idx); 816 end; 817 818 expunged = (code ^= 0); 819 if code = 0 then next = idx + direction; 820 else if direction = 1 then next = find_next (idx); 821 else if direction = -1 then next = find_previous (idx); 822 823 last_tri = idx; 824 return; 825 end get_tri; 826 827 find_next: 828 proc (idx) returns (fixed bin); 829 830 declare (idx, next) fixed bin; 831 832 if forum_idx > 0 then return (idx + 1); 833 834 call forum_$next_transaction (forum_idx, idx, next, code); 835 if code ^= 0 then 836 if code = forum_et_$no_transactions then 837 next = (2 ** 17) - 1; /* bbig number, > last, hopefully */ 838 else call ssu_$abort_line (ssu_ptr, code, "Transaction ^d.", idx); 839 return (next); 840 end find_next; 841 842 843 find_previous: 844 proc (idx) returns (fixed bin); 845 846 declare (idx, previous) fixed bin; 847 848 if forum_idx > 0 then return (idx - 1); 849 850 call forum_$previous_transaction (forum_idx, idx, previous, code); 851 if code ^= 0 then 852 if code = forum_et_$no_transactions then 853 previous = -1; 854 else call ssu_$abort_line (ssu_ptr, code, "Transaction ^d.", idx); 855 return (previous); 856 end find_previous; 857 858 859 lookup_word: 860 proc (word) returns (fixed bin); 861 862 declare word char (*) parameter, 863 idx fixed bin; 864 865 word = translate (word, LC_ALPHA, UC_ALPHA); /* ignore case */ 866 867 do idx = 1 to hbound (keywords, 1); 868 if word = keywords (idx) then return (key_val (idx)); 869 end; 870 871 return (0); 872 end lookup_word; 873 874 /* Deal with regexps and userids, check for bad characters */ 875 pass1: 876 proc (spec); 877 878 declare spec char (*); 879 declare pos fixed bin init (1); 880 declare spec_len fixed bin; 881 882 spec_len = length (spec); 883 if spec_len = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$null_range_spec, "^a", arg); 884 in_expr = "0"b; 885 886 do while (pos <= spec_len); 887 first_char = substr (spec, pos, 1); 888 889 if state = MUST_BE_REGEXP & first_char ^= "/" then 890 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, 891 "Missing regexp following -subject or -text."); 892 if state = MUST_BE_USERID then do; 893 jdx = spec_len - pos + 1; 894 goto USERID; 895 end; 896 897 if first_char = "+" | first_char = "-" then do; 898 if pos = spec_len then 899 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "Trailing '+' or '-'."); 900 pos = pos + 1; 901 in_expr = "1"b; 902 first_char = substr (spec, pos, 1); 903 end; 904 else if state = MUST_BE_ARITH then call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, spec); 905 else if pos > 1 then call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "^a", spec); 906 907 /* skip over numbers */ 908 if index (DIGITS, first_char) ^= 0 then do; 909 only_unproc = "0"b; 910 jdx = verify (substr (spec, pos), DIGITS); 911 if jdx = 0 then 912 jdx = spec_len - pos + 1; 913 else jdx = jdx - 1; 914 pos = pos + jdx; 915 end; 916 917 else if first_char = "/" then do; /* start of a regexp */ 918 if parse_flags.dont_read then 919 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, 920 "Regular expressions may not be used with this request."); 921 if in_expr then call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, spec); 922 if trans_specs.regexp_given then call ssu_$abort_line (ssu_ptr, forum_et_$too_many_regexps, spec); 923 jdx = pos + 1; 924 REGEXP_LOOP: 925 if jdx > spec_len then 926 BAD_REGEXP: 927 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, 928 "Missing trailing '/' after regexp ""^a"".", spec); 929 kdx = index (substr (spec, jdx), "/"); 930 if kdx = 0 then goto BAD_REGEXP; /* didn't find a '/' */ 931 if kdx >= 3 then 932 if substr (spec, jdx + kdx - 3, 2) = "\c" then do; 933 /* \c makes / not terminator */ 934 substr (trans_specs.regexp, trans_specs.regexp_len + 1, kdx - 2) = 935 substr (spec, jdx, kdx - 3) || "/"; 936 trans_specs.regexp_len = trans_specs.regexp_len + kdx - 2; 937 jdx = jdx + kdx; 938 goto REGEXP_LOOP; 939 end; 940 941 trans_specs.regexp_given = "1"b; 942 if kdx > 1 then do; 943 substr (trans_specs.regexp, trans_specs.regexp_len + 1) = substr (spec, jdx, kdx - 1); 944 trans_specs.regexp_len = trans_specs.regexp_len + kdx - 1; 945 saved_regexp = trans_specs.regexp; 946 end; 947 else do; 948 if saved_regexp = "" then 949 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "No previous regexp for //."); 950 trans_specs.regexp_len = length (rtrim (saved_regexp)); 951 trans_specs.regexp = saved_regexp; 952 end; 953 954 pos = jdx + kdx; 955 only_unproc = "0"b; 956 substr (argmap, idx, 1) = "0"b; /* don't need to look here again */ 957 end; /* regexp */ 958 959 else if index (LETTERS, first_char) ^= 0 then do; 960 /* keyword or userid */ 961 jdx = verify (substr (spec, pos), LETTERS); 962 if jdx = 0 then 963 jdx = spec_len - pos + 1; /* rest of line */ 964 else jdx = jdx - 1; 965 966 kdx = lookup_word (substr (spec, pos, min (32, jdx))); 967 if kdx > 0 then goto GOT_WORD; 968 969 if parse_flags.call_on_non_ctl_arg then do; 970 /* Request wants to see this one */ 971 substr (argmap, idx, 1) = ""b; 972 call P_ctl_arg_entry (idx); 973 return; 974 end; /* Nobody knows who this is. */ 975 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "^a", arg); 976 USERID: 977 if index (arg, ".") > 0 then 978 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, 979 "Person_id's may not contain ""."". ""^a""", arg); 980 981 call forum_$check_user (forum_idx, arg, last_sent, (0)); 982 983 if trans_specs.id_given then call ssu_$abort_line (ssu_ptr, forum_et_$too_many_personids, arg); 984 985 if parse_flags.dont_read then 986 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, 987 "Personids may not be used with this request. ^a.", arg); 988 trans_specs.id_given = "1"b; 989 trans_specs.person_id = arg; 990 only_unproc = "0"b; 991 substr (argmap, idx, 1) = "0"b; /* don't need to look here on pass 2 */ 992 goto END_LOOP; 993 994 995 GOT_WORD: 996 if kdx ^= UNPROC then only_unproc = "0"b; 997 END_LOOP: 998 pos = pos + jdx; 999 state = MUST_BE_ARITH; 1000 end; /* keyword or user id */ 1001 else if parse_flags.call_on_non_ctl_arg then do; 1002 /* Request wants to see this one */ 1003 substr (argmap, idx, 1) = ""b; 1004 call P_ctl_arg_entry (idx); 1005 return; 1006 end; 1007 else call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "^a", spec); 1008 /* unknown special char */ 1009 end; /* token loop */ 1010 1011 end pass1; 1012 1013 /* This subroutine figures out which transactions were requested */ 1014 pass2: 1015 proc (spec); 1016 1017 declare spec char (*); 1018 declare pos fixed bin init (1); 1019 declare spec_len fixed bin; 1020 1021 spec_len = length (spec); 1022 1023 if index (spec, ":") ^= 0 then call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "^a", arg); 1024 value = 0; 1025 sign = 1; 1026 in_expr = "0"b; 1027 1028 do while (pos <= spec_len); 1029 this_val = 0; 1030 first_char = substr (spec, pos, 1); 1031 kdx = index ("++-", first_char); 1032 1033 if kdx ^= 0 then do; 1034 pos = pos + 1; 1035 if value = 0 & pos = 2 then value = current; 1036 /* leading + or - is relative to current */ 1037 in_expr = "1"b; /* next must be single numeric */ 1038 sign = 2 - kdx; 1039 first_char = substr (spec, pos, 1); 1040 end; 1041 else if pos > 1 then call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "^a", spec); 1042 1043 if index (DIGITS, first_char) ^= 0 then do; 1044 jdx = index (DIGITS, first_char); 1045 jdx = verify (substr (spec, pos), DIGITS); 1046 if jdx = 0 then 1047 jdx = spec_len - pos + 1; 1048 else jdx = jdx - 1; 1049 1050 if jdx > 6 then call ssu_$abort_line (ssu_ptr, forum_et_$invalid_trans_idx, spec); 1051 this_val = fixed (substr (spec, pos, jdx)); 1052 pos = pos + jdx; 1053 end; 1054 1055 else if index (LETTERS, first_char) ^= 0 then do; 1056 /* keyword or userid */ 1057 jdx = verify (substr (spec, pos), LETTERS); 1058 if jdx = 0 then 1059 jdx = spec_len - pos + 1; /* word is the rest of line */ 1060 else jdx = jdx - 1; 1061 1062 kdx = lookup_word (substr (spec, pos, min (32, jdx))); 1063 if kdx = 0 then 1064 call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, substr (spec, pos, min (32, jdx))); 1065 1066 if substr (MULTIPLE, kdx, 1) & (in_range | in_expr) then 1067 BAD_WORD: 1068 call ssu_$abort_line (ssu_ptr, forum_et_$key_not_allowed, "'^a' in '^a'", 1069 substr (spec, pos, min (32, jdx)), arg); 1070 1071 if substr (NEED_CURRENT, kdx, 1) & no_current then 1072 call ssu_$abort_line (ssu_ptr, forum_et_$no_current); 1073 1074 if ^have_limits & substr (NEED_LIMITS, kdx, 1) then call get_limits (); 1075 1076 if kdx >= SEEN & bit_map_ptr = null () then do; 1077 bit_map_len = last; 1078 allocate bit_map in (forum_area); 1079 call forum_$get_transaction_map_idx (forum_idx, "", bit_map, code); 1080 if code ^= 0 then 1081 if code = forum_et_$old_format then do; 1082 if kdx ^= LAST_SEEN then 1083 call ssu_$abort_line (ssu_ptr, 0, "Version 1 meetings do not have seen maps."); 1084 end; 1085 else call ssu_$abort_line (ssu_ptr, code, "Getting transaction map."); 1086 end; 1087 1088 if kdx = ALL then call get_all (); 1089 else if kdx = NEW then do; 1090 in_range = "1"b; 1091 call add_new (); 1092 end; 1093 1094 else if kdx = AREF then do; 1095 in_range = "1"b; 1096 call add_aref ("1"b); 1097 end; 1098 1099 else if kdx = RREF then do; 1100 in_range = "1"b; 1101 call add_rref (); 1102 end; 1103 1104 else if kdx = BREF then do; 1105 in_range = "1"b; 1106 call add_aref ("0"b); 1107 end; 1108 1109 else if kdx = CMSG then do; 1110 if parse_flags.disallow_cmsg then 1111 call ssu_$abort_line (ssu_ptr, 0, "The chairman_message keyword may not be used."); 1112 if in_range | in_expr then goto BAD_WORD; 1113 call forum_$get_message (forum_idx, message, code); 1114 if code ^= 0 then call ssu_$abort_line (ssu_ptr, code, "Getting chairman message."); 1115 in_range = "1"b; 1116 deleted = "0"b; 1117 call allocate_num (-1); 1118 end; 1119 1120 else if kdx = UNPROC then do; 1121 if parse_flags.disallow_unproc then call ssu_$abort_line (ssu_ptr, forum_et_$unproc_not_allowed); 1122 if in_range | in_expr then goto BAD_WORD; 1123 in_range = "1"b; 1124 deleted = "0"b; 1125 call allocate_num (0); /* unprocessed is transaction 0 */ 1126 end; 1127 else if kdx = CURRENT then do; 1128 if current > 0 then this_val = current; 1129 /* TR21375-6: Try setting current first. */ 1130 else if current = 0 then do; 1131 call set_current (); /* TR21377: Same trans returned by "c" request and "c" used as an arg */ 1132 passport.current_trans = this_val; 1133 current = this_val; 1134 end; 1135 1136 if current = 0 then call ssu_$abort_line (ssu_ptr, forum_et_$no_current); 1137 end; 1138 else if kdx = FIRST then this_val = first; 1139 else if kdx = LAST then this_val = last; 1140 else if kdx = PREVIOUS then call get_prev (); 1141 else if kdx = NEXT then call get_next (); 1142 else if kdx = FREF then call get_fref (); 1143 else if kdx = LREF then call get_lref (); 1144 else if kdx = NREF then call get_nref (); 1145 else if kdx = PREF then call get_pref (); 1146 else if kdx = SEEN then call get_seen ("1"b); 1147 else if kdx = FIRST_SEEN then call get_first_seen (); 1148 else if kdx = NEXT_SEEN then call get_next_seen (); 1149 else if kdx = PREV_SEEN then call get_prev_seen (); 1150 else if kdx = LAST_SEEN then call get_last_seen (); 1151 else if kdx = UNSEEN then call get_seen ("0"b); 1152 else if kdx = FIRST_UNSEEN then call get_first_unseen (); 1153 else if kdx = NEXT_UNSEEN then call get_next_unseen (); 1154 else if kdx = PREV_UNSEEN then call get_prev_unseen (); 1155 else if kdx = LAST_UNSEEN then call get_last_unseen (); 1156 1157 END_LOOP: 1158 pos = pos + jdx; 1159 end; /* keyword or user id */ 1160 else call ssu_$abort_line (ssu_ptr, forum_et_$bad_trans_spec, "^a", spec); 1161 value = value + sign * this_val; /* add up expression */ 1162 sign = 1; 1163 end; /* token loop */ 1164 1165 if ^in_range then do; /* add it to the list */ 1166 call get_tri (value, "1"b, 0, (0)); 1167 if ^(initial & pref ^= 0) then call allocate_num (value); 1168 end; 1169 end pass2; 1170 1171 get_seen: 1172 proc (seen); 1173 1174 declare seen bit (1) aligned, 1175 idx fixed bin; 1176 1177 in_range = "1"b; 1178 blank = "0"b; 1179 tidx = 1; 1180 do while (tidx <= bit_map_len); 1181 idx = index (substr (bit_map, tidx), seen); 1182 if idx = 0 then return; 1183 tidx = tidx + idx - 1; 1184 if tidx <= bit_map_len then do; 1185 call get_tri (tidx, "1"b, 1, idx); 1186 if check () then call add_from_multiple (); 1187 tidx = idx; 1188 end; 1189 end; 1190 end get_seen; 1191 1192 get_first_seen: 1193 proc (); 1194 dcl (backward_sw, which_seen, next_sw) 1195 bit (1); 1196 1197 backward_sw = "0"b; 1198 which_seen = "1"b; 1199 next_sw = "0"b; 1200 goto get_common; 1201 1202 1203 get_first_unseen: 1204 entry (); 1205 which_seen = "0"b; 1206 backward_sw = "0"b; 1207 next_sw = "0"b; 1208 goto get_common; 1209 1210 get_last_unseen: 1211 entry (); 1212 backward_sw = "1"b; 1213 which_seen = "0"b; 1214 next_sw = "0"b; 1215 goto get_common; 1216 1217 set_current: 1218 entry (); 1219 1220 if ^have_limits then call get_limits (); 1221 if bit_map_ptr = null () then do; 1222 bit_map_len = last; 1223 allocate bit_map in (forum_area); 1224 call forum_$get_transaction_map_idx (forum_idx, "", bit_map, code); 1225 if code ^= 0 then call ssu_$abort_line (ssu_ptr, code, "Getting transaction map."); 1226 end; 1227 1228 reset_current = "1"b; 1229 backward_sw = "1"b; 1230 which_seen = "1"b; 1231 next_sw = "0"b; 1232 goto get_common; 1233 1234 get_last_seen: 1235 entry (); 1236 if bit_map_ptr = null () then do; /* v1 meeting */ 1237 this_val = last_seen; 1238 return; 1239 end; 1240 backward_sw = "1"b; 1241 which_seen = "1"b; 1242 next_sw = "0"b; 1243 goto get_common; 1244 1245 get_next_seen: 1246 entry (); 1247 backward_sw = "0"b; 1248 which_seen = "1"b; 1249 next_sw = "1"b; 1250 goto get_common; 1251 1252 get_next_unseen: 1253 entry (); 1254 backward_sw = "0"b; 1255 which_seen = "0"b; 1256 next_sw = "1"b; 1257 goto get_common; 1258 1259 get_prev_seen: 1260 entry (); 1261 backward_sw = "1"b; 1262 which_seen = "1"b; 1263 next_sw = "1"b; 1264 goto get_common; 1265 1266 get_prev_unseen: 1267 entry (); 1268 backward_sw = "1"b; 1269 which_seen = "0"b; 1270 next_sw = "1"b; 1271 goto get_common; 1272 1273 get_common: 1274 if next_sw then do; /* TR21375-6: If there is no seen trans, "c" is set to the first non_deleted */ 1275 if last_seen = 0 then 1276 this_val = first; 1277 else this_val = current; 1278 end; 1279 else do; 1280 if backward_sw then 1281 this_val = last; 1282 else this_val = first; 1283 if substr (bit_map, this_val, 1) = which_seen then 1284 if ^expungedp () then return; 1285 end; 1286 1287 /* TR21375-6: If current trans is deleted, "c" is skipped to the next non_deleted trans. If there are no more non_deleted trans, c is undefined */ 1288 do while ("1"b); 1289 this_val = skip_some (); 1290 if this_val = 0 then do; 1291 if next_sw then 1292 call ssu_$abort_line (ssu_ptr, 0, "No ^[previous^;more^] ^[un^]seen transactions.", backward_sw, 1293 ^which_seen); 1294 else if ^(reset_current) then 1295 call ssu_$abort_line (ssu_ptr, 0, "^[No^;All^] transactions have been seen.", which_seen); 1296 1297 /* Reset current to first non_deleted trans if reset_current is set */ 1298 else if (first > 0) then do; 1299 this_val = first; 1300 reset_current = "0"b; 1301 end; 1302 end; 1303 if ^expungedp () then return; 1304 end; 1305 1306 skip_some: 1307 proc () returns (fixed bin); 1308 dcl i fixed bin; 1309 1310 if backward_sw then do; 1311 this_val = find_previous (this_val); 1312 if this_val <= 0 then return (0); 1313 i = index (reverse (substr (bit_map, 1, this_val)), which_seen); 1314 if i = 0 then return (i); 1315 i = this_val - i + 1; 1316 return (i); 1317 end; 1318 else do; 1319 this_val = find_next (this_val); 1320 if this_val > last then return (0); 1321 i = index (substr (bit_map, this_val), which_seen); 1322 if i = 0 then return (i); 1323 i = i + this_val - 1; 1324 return (i); 1325 end; 1326 1327 end skip_some; 1328 1329 expungedp: 1330 proc () returns (bit (1)); 1331 1332 call get_tri (this_val, "1"b, 0, (0)); 1333 return (^check ()); 1334 1335 end expungedp; 1336 1337 end get_first_seen; 1338 1339 get_nref: 1340 proc (); 1341 1342 call get_tri (current, "0"b, 0, (0)); 1343 if nref = 0 then 1344 call ssu_$abort_line (ssu_ptr, 0, "There is no next transaction in this chain. ^[""^a""^]", ^list, arg); 1345 this_val = nref; 1346 return; 1347 end get_nref; 1348 1349 get_pref: /* gets previous in chain of current */ 1350 proc (); 1351 1352 if current < 0 then 1353 this_val = -current; /* pref unproc */ 1354 else do; 1355 call get_tri (current, "0"b, 0, (0)); 1356 if pref = 0 then 1357 call ssu_$abort_line (ssu_ptr, 0, "There is no previous transaction in this chain. ^[""^a""^]", ^list, 1358 arg); 1359 this_val = pref; 1360 end; 1361 return; 1362 end get_pref; 1363 1364 get_lref: /* gets last in current chain */ 1365 proc (); 1366 1367 do this_val = current repeat nref; 1368 call get_tri (this_val, "1"b, 0, (0)); 1369 if nref = 0 then return; 1370 end; 1371 end get_lref; 1372 1373 get_fref: /* gets first in current chain */ 1374 proc; 1375 1376 do this_val = current repeat pref; 1377 call get_tri (this_val, "1"b, 0, (0)); 1378 if pref = 0 then return; 1379 end; 1380 end get_fref; 1381 1382 get_prev: /* gets previous undeleted */ 1383 proc; 1384 1385 declare idx fixed bin; 1386 1387 do tidx = current - 1 repeat idx while (tidx > 0); 1388 call get_tri (tidx, "1"b, -1, idx); 1389 if check () then do; 1390 this_val = tidx; 1391 return; 1392 end; 1393 end; 1394 call ssu_$abort_line (ssu_ptr, 0, THERE_IS_NO, "previous"); 1395 end get_prev; 1396 1397 check: 1398 proc () returns (bit (1) aligned); 1399 1400 return (^expunged & ((deleted & select_type ^= ONLY_UNDELETED) | (^deleted & select_type ^= ONLY_DELETED))); 1401 1402 end check; 1403 1404 get_next: 1405 proc (); 1406 1407 declare idx fixed bin; 1408 1409 do tidx = current + 1 repeat idx while (tidx <= last); 1410 call get_tri (tidx, "1"b, 1, idx); 1411 if check () then do; 1412 this_val = tidx; 1413 return; 1414 end; 1415 end; 1416 call ssu_$abort_line (ssu_ptr, 0, THERE_IS_NO, "next"); 1417 end get_next; 1418 1419 1420 get_all: /* gets all non-deleted */ 1421 proc (); 1422 1423 declare (low, high, idx) fixed bin; 1424 1425 /* This can be called even if get_limits hasn't been called, if default_to_all 1426* or date/regexp */ 1427 1428 if ^have_limits then call get_limits (); 1429 1430 in_range = "1"b; 1431 if trans_specs.date_given then do; 1432 call forum_$trans_time_info (forum_idx, trans_specs.low_date, trans_specs.high_date, low, high, code); 1433 if code ^= 0 then call ssu_$abort_line (ssu_ptr, code); 1434 if high + low = 0 then low = 1; /* No transactions in range */ 1435 end; 1436 else do; 1437 low = first; 1438 high = last; 1439 end; 1440 1441 do tidx = low repeat idx while (tidx <= high); 1442 call get_tri (tidx, "1"b, 1, idx); 1443 if check () then call add_from_multiple (); 1444 end; 1445 return; 1446 end get_all; 1447 1448 add_from_multiple: 1449 proc (); 1450 1451 if list then call add_to_string (tidx); 1452 else if ^(initial & pref ^= 0) then call allocate_num (tidx); 1453 1454 end add_from_multiple; 1455 1456 /* This routine actually adds a transaction number to the list after making sure it is compatible */ 1457 /* with the flags given to parse_specs - deleted etc */ 1458 1459 allocate_num: 1460 proc (tnum); 1461 1462 declare tnum fixed bin; 1463 1464 blank = "0"b; 1465 if (tnum = 0 & kdx ^= UNPROC) | (tnum = -1 & kdx ^= CMSG) | tnum < -1 then 1466 call ssu_$abort_line (ssu_ptr, forum_et_$invalid_trans_idx, "^d", tnum); 1467 1468 if trans_specs.selected & parse_flags.only_one then call ssu_$abort_line (ssu_ptr, forum_et_$too_many_trans); 1469 if deleted & select_type = ONLY_UNDELETED then do; 1470 if ^in_range then call ssu_$print_message (ssu_ptr, forum_et_$trans_deleted, "Transaction ^d.", tnum); 1471 return; 1472 end; 1473 else if code = forum_et_$trans_reaped then do; 1474 if ^in_range then call ssu_$print_message (ssu_ptr, code, "Transaction ^d.", tnum); 1475 return; 1476 end; 1477 else if ^deleted & select_type = ONLY_DELETED then do; 1478 if ^in_range then call ssu_$print_message (ssu_ptr, forum_et_$trans_not_deleted, "Transaction ^d.", tnum); 1479 return; 1480 end; 1481 1482 if ^parse_flags.dont_read & tnum ^= -1 then do; 1483 if ^select (tnum) then return; /* check if it matches username and/or regexp */ 1484 forum_trans_list.max_personid_len = 1485 max (forum_trans_list.max_personid_len, length (rtrim (forum_user_trans.person_id))); 1486 end; 1487 1488 if forum_trans_list.size = forum_trans_list.max_size then call expand_list (); 1489 forum_trans_list.size = forum_trans_list.size + 1; 1490 forum_trans_list.list.trans_num (forum_trans_list.size) = tnum; 1491 if tnum <= 0 then do; 1492 forum_trans_list.list.nref (forum_trans_list.size) = 0; 1493 forum_trans_list.list.pref (forum_trans_list.size) = 0; 1494 end; 1495 else do; 1496 forum_trans_list.list.nref (forum_trans_list.size) = nref; 1497 forum_trans_list.list.pref (forum_trans_list.size) = pref; 1498 end; 1499 string (forum_trans_list.list.flags (forum_trans_list.size)) = ""b; 1500 forum_trans_list.list.flags.deleted (forum_trans_list.size) = deleted; 1501 1502 trans_specs.selected = "1"b; 1503 return; 1504 end allocate_num; 1505 1506 expand_list: 1507 procedure (); 1508 1509 declare idx fixed bin, 1510 new_list_ptr pointer, 1511 1 new_list aligned like forum_trans_list based (new_list_ptr); 1512 1513 new_list_ptr = null (); 1514 alloc_trans_list_size = forum_trans_list.max_size * 4; 1515 1516 on cleanup 1517 begin; 1518 if new_list_ptr ^= null then free new_list; 1519 end; 1520 1521 RETRY: 1522 on area 1523 begin; 1524 call forum_trans_util_$clear_cache (passport_info_ptr); 1525 goto RETRY; 1526 end; 1527 1528 allocate new_list in (forum_area); 1529 revert area; 1530 1531 new_list.max_size = alloc_trans_list_size; 1532 new_list.size = forum_trans_list.size; 1533 new_list.max_personid_len = forum_trans_list.max_personid_len; 1534 1535 do idx = 1 to new_list.size; 1536 new_list.list (idx) = forum_trans_list.list (idx); 1537 end; 1538 1539 free forum_trans_list; 1540 forum_trans_list_ptr = new_list_ptr; 1541 return; 1542 end expand_list; 1543 1544 /* This routine adds all transactions greater than last_seen not from this user to the list */ 1545 add_new: 1546 proc; 1547 1548 declare idx fixed bin; 1549 1550 blank = "0"b; /* KLUDGE - in case there aren't any new ones */ 1551 call user_info_$whoami (me, "", ""); 1552 if last_seen = 0 then 1553 tidx = 1; 1554 else tidx = last_seen + 1; 1555 1556 do tidx = tidx repeat idx while (tidx <= last); 1557 call get_tri (tidx, "1"b, 1, idx); 1558 if check () then do; 1559 call forum_trans_util_$read_trans (passport_info_ptr, forum_idx, tidx, forum_user_trans_ptr, (0)); 1560 if forum_user_trans.person_id ^= me then call add_from_multiple (); 1561 /* if I sent it, it ain't new */ 1562 end; 1563 end; 1564 return; 1565 end add_new; 1566 1567 1568 add_aref: /* adds all in current chain */ 1569 proc (P_all); 1570 1571 declare (P_all, all) bit (1) aligned; 1572 1573 all = P_all; 1574 do tidx = current repeat pref; /* back up to beginning of chain */ 1575 call get_tri (tidx, "1"b, 0, (0)); 1576 if pref = 0 then goto BEGIN_CHAIN; 1577 end; 1578 1579 add_rref: 1580 entry (); 1581 1582 call get_tri (current, "0"b, 0, (0)); 1583 if nref = 0 then call ssu_$abort_line (ssu_ptr, 0, "There are no more transactions in this chain."); 1584 tidx = nref; 1585 all = "1"b; 1586 1587 BEGIN_CHAIN: /* and add moving forward */ 1588 do tidx = tidx repeat nref; 1589 call get_tri (tidx, "0"b, 0, (0)); 1590 if check () then call add_from_multiple (); 1591 if nref = 0 | initial | (^all & nref = current) then return; 1592 end; 1593 end add_aref; 1594 1595 1596 do_range: /* add all non-deleted in a range */ 1597 proc (); 1598 1599 declare idx fixed bin; 1600 1601 if last_val > value then call ssu_$abort_line (ssu_ptr, forum_et_$null_range_spec, arg); 1602 blank = "0"b; 1603 do tidx = last_val repeat idx while (tidx <= value); 1604 call get_tri (tidx, "1"b, 1, idx); 1605 if check () then 1606 if ^(initial & pref ^= 0) then call allocate_num (tidx); 1607 end; 1608 return; 1609 end do_range; 1610 1611 /* This routine matches usernames and regexps */ 1612 select: 1613 proc (L_trans_num) returns (bit (1)); 1614 1615 declare L_trans_num fixed bin; 1616 1617 call forum_trans_util_$read_trans (passport_info_ptr, forum_idx, L_trans_num, forum_user_trans_ptr, (0)); 1618 if forum_user_trans_ptr = null () then return ("0"b); 1619 1620 if trans_specs.id_given then 1621 if trans_specs.person_id ^= forum_user_trans.person_id then return ("0"b); 1622 1623 if trans_specs.date_given then do; 1624 if trans_specs.low_date >= forum_user_trans.time then return ("0"b); 1625 if trans_specs.high_date ^= 0 & trans_specs.high_date <= forum_user_trans.time then return ("0"b); 1626 end; 1627 1628 if trans_specs.regexp_given then do; 1629 if ^trans_specs.no_match_sj then do; 1630 call search_file_$silent (addr (trans_specs.regexp), 1, trans_specs.regexp_len, 1631 addr (forum_user_trans.subject), 1, (forum_user_trans.subject_length), (0), (0), match_code); 1632 if match_code = 0 then return ("1"b); 1633 else if match_code ^= error_table_$nomatch then 1634 call ssu_$abort_line (ssu_ptr, match_code, """^a""", trans_specs.regexp); 1635 end; 1636 1637 if trans_specs.no_match_text then return ("0"b); 1638 call search_file_$silent (addr (trans_specs.regexp), 1, trans_specs.regexp_len, 1639 addr (forum_user_trans.text), 1, (forum_user_trans.text_length), (0), (0), match_code); 1640 if match_code ^= 0 then 1641 if match_code = error_table_$nomatch then 1642 return ("0"b); 1643 else call ssu_$abort_line (ssu_ptr, match_code, """^a""", trans_specs.regexp); 1644 end; 1645 1646 return ("1"b); 1647 end select; 1648 1649 end forum_trans_specs_$parse_specs; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/28/92 1714.3 forum_trans_specs_.pl1 >spec>inst>1020>forum_trans_specs_.pl1 262 1 04/27/92 1104.7 forum_trans_list.incl.pl1 >ldd>incl>forum_trans_list.incl.pl1 264 2 10/31/84 1215.4 forum_user_trans.incl.pl1 >ldd>incl>forum_user_trans.incl.pl1 266 3 08/16/86 1638.0 forum_passport.incl.pl1 >ldd>incl>forum_passport.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. AFTER constant fixed bin(17,0) initial dcl 174 set ref 331* 332* 336* 340* 796 ALL 000461 constant fixed bin(17,0) initial dcl 131 set ref 544* 678 1088 ANY 000646 automatic bit(36) initial dcl 1-53 set ref 1-53* ANYTHING constant fixed bin(17,0) initial dcl 167 ref 298 301 370 AREF 000462 constant fixed bin(17,0) initial dcl 131 set ref 524* 674 1094 BEFORE constant fixed bin(17,0) initial dcl 174 set ref 333* 334* 341* 794 BREF 000444 constant fixed bin(17,0) initial dcl 131 set ref 534* 676 1104 CMSG constant fixed bin(17,0) initial dcl 131 ref 1109 1465 CURRENT 000532 constant fixed bin(17,0) initial dcl 131 set ref 499* 682 1127 DATE constant fixed bin(17,0) initial dcl 174 set ref 343* DIGITS 000405 constant char(10) initial packed unaligned dcl 110 ref 301 908 910 1043 1044 1045 DISALLOW_BYCHAIN constant bit(18) initial dcl 1-54 ref 623 DISALLOW_CMSG constant bit(18) initial dcl 1-54 ref 623 DISALLOW_INITIAL constant bit(18) initial dcl 1-54 ref 623 DISALLOW_MTG constant bit(18) initial dcl 1-54 ref 623 DISALLOW_REV constant bit(18) initial dcl 1-54 ref 623 DISALLOW_UNPROC constant bit(18) initial dcl 1-54 ref 626 DONT_READ constant bit(18) initial dcl 1-54 ref 623 FIRST 000517 constant fixed bin(17,0) initial dcl 131 set ref 479* 692 1138 FIRST_SEEN 000455 constant fixed bin(17,0) initial dcl 131 set ref 559* 700 1147 FIRST_UNSEEN 000450 constant fixed bin(17,0) initial dcl 131 set ref 564* 701 1152 FREF 000531 constant fixed bin(17,0) initial dcl 131 set ref 504* 696 1142 INCLUDE_DELETED constant fixed bin(17,0) initial dcl 2-24 ref 290 316 643 LAST 000524 constant fixed bin(17,0) initial dcl 131 set ref 484* 693 1139 LAST_SEEN 000452 constant fixed bin(17,0) initial dcl 131 set ref 589* 663 706 1082 1150 LAST_UNSEEN 000445 constant fixed bin(17,0) initial dcl 131 set ref 594* 707 1155 LC_ALPHA 000351 constant char(26) initial packed unaligned dcl 110 ref 865 LETTERS 000367 constant char(53) initial packed unaligned dcl 110 ref 959 961 1055 1057 LREF 000527 constant fixed bin(17,0) initial dcl 131 set ref 509* 697 1143 L_trans_num parameter fixed bin(17,0) dcl 1615 set ref 1612 1617* MULTIPLE 000012 constant bit(26) initial packed unaligned dcl 160 ref 1066 MUST_BE_ARITH constant fixed bin(17,0) initial dcl 167 ref 904 999 MUST_BE_REGEXP constant fixed bin(17,0) initial dcl 167 ref 350 355 889 MUST_BE_USERID constant fixed bin(17,0) initial dcl 167 ref 346 892 NEED_CURRENT 000014 constant bit(26) initial packed unaligned dcl 160 ref 669 1071 NEED_LIMITS 000013 constant bit(26) initial packed unaligned dcl 160 ref 651 1074 NEW 000460 constant fixed bin(17,0) initial dcl 131 set ref 539* 677 1089 NEXT 000520 constant fixed bin(17,0) initial dcl 131 set ref 494* 695 1141 NEXT_SEEN 000454 constant fixed bin(17,0) initial dcl 131 set ref 569* 702 1148 NEXT_UNSEEN 000447 constant fixed bin(17,0) initial dcl 131 set ref 574* 703 1153 NREF 000534 constant fixed bin(17,0) initial dcl 131 set ref 519* 698 1144 ONE_DAY_MINUS_A_MICROSECOND 000000 constant fixed bin(71,0) initial dcl 776 ref 795 799 ONLY_DELETED constant fixed bin(17,0) initial dcl 2-24 ref 289 318 644 1400 1477 ONLY_ONE constant bit(18) initial dcl 1-54 ref 623 ONLY_UNDELETED constant fixed bin(17,0) initial dcl 2-24 ref 291 320 616 645 1400 1469 ON_OR_BEFORE constant fixed bin(17,0) initial dcl 174 set ref 337* 795 PREF 000525 constant fixed bin(17,0) initial dcl 131 set ref 514* 635 699 1145 PREVIOUS 000522 constant fixed bin(17,0) initial dcl 131 set ref 489* 694 1140 PREV_SEEN 000453 constant fixed bin(17,0) initial dcl 131 set ref 579* 704 1149 PREV_UNSEEN 000446 constant fixed bin(17,0) initial dcl 131 set ref 584* 705 1154 P_all parameter bit(1) dcl 1571 ref 1568 1573 P_arg_idx parameter fixed bin(17,0) dcl 723 set ref 720 725* P_ctl_arg_entry parameter entry variable dcl 61 ref 42 358 360 972 1004 P_first_arg parameter fixed bin(17,0) dcl 61 ref 42 299 405 P_forum_dir parameter char packed unaligned dcl 61 set ref 42 470* P_forum_idx parameter fixed bin(17,0) dcl 61 set ref 42 271* 468* P_forum_name parameter char packed unaligned dcl 61 set ref 42 469* P_forum_trans_list_ptr parameter pointer dcl 61 set ref 42 472* P_parse_flags parameter bit(36) dcl 61 ref 42 272 P_passport_info_ptr parameter pointer dcl 61 ref 42 268 476 481 486 491 496 501 506 511 516 521 526 531 536 541 546 551 556 561 566 571 576 581 586 591 606 P_ssu_ptr parameter pointer dcl 61 ref 476 481 486 491 496 501 506 511 516 521 526 531 536 541 546 551 556 561 566 571 576 581 586 591 605 P_type parameter fixed bin(17,0) dcl 602 ref 599 607 RREF 000457 constant fixed bin(17,0) initial dcl 131 set ref 529* 675 1099 SEEN 000456 constant fixed bin(17,0) initial dcl 131 set ref 549* 657 679 1076 1146 THERE_IS_NO 000002 constant char(32) initial packed unaligned dcl 181 set ref 1394* 1416* UC_ALPHA 000360 constant char(26) initial packed unaligned dcl 110 ref 865 UNPROC constant fixed bin(17,0) initial dcl 131 ref 439 995 1120 1465 UNPROC_OK 017636 constant bit(26) initial packed unaligned dcl 160 ref 626 632 UNSEEN 000451 constant fixed bin(17,0) initial dcl 131 set ref 554* 680 1151 active_function 000117 automatic bit(1) dcl 73 set ref 293* 618* 715 747 addr builtin function dcl 200 ref 289 290 303 316 318 320 323 325 327 328 329 330 382 429 430 431 433 433 918 969 985 1001 1110 1121 1468 1482 1630 1630 1630 1630 1638 1638 1638 1638 after builtin function dcl 200 ref 416 416 all 000100 automatic bit(1) dcl 1571 set ref 1573* 1585* 1591 alloc_argmap_size 000144 automatic fixed bin(17,0) dcl 73 set ref 295* 296 296 364 406 456 456 736 736 956 971 991 1003 alloc_trans_list_size 000644 automatic fixed bin(17,0) dcl 1-16 set ref 390* 399 399 1514* 1528 1528 1531 allow_deleted 0(02) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 290 allow_inhibit_error 0(14) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 323 325 allow_spec parameter bit(1) dcl 602 ref 599 622 646 648 area 000626 stack reference condition dcl 202 ref 392 403 1521 1529 area_ptr 74 based pointer level 2 dcl 3-14 ref 296 399 659 1078 1223 1528 arg based char packed unaligned dcl 104 set ref 301 301 303 303 305* 309* 310* 316 316 318 318 320 320 323 323 325 325 327 328 329 329 331 331 332 332 333 333 334 334 335 335 339 339 343 343 344 344 348 348 353 353 365 365 365* 380* 409 411* 414 414 416 416 419* 642 643 643 644 644 645 645 646* 726* 785* 786* 883* 975* 976 976* 981* 983* 985* 989 1023* 1066* 1343* 1356* 1601* arg_count 000417 automatic fixed bin(17,0) dcl 73 set ref 293* 295 299 305 345 349 354 405 618* 622 640 782 arg_len 000136 automatic fixed bin(21,0) dcl 73 set ref 300* 301 301 303 303 305 305 308* 309 309 310 310 316 316 318 318 320 320 323 323 325 325 327 328 329 329 331 331 332 332 333 333 334 334 335 335 339 339 343 343 344 344 348 348 353 353 365 365 365 365 380 380 407* 409 411 411 411 414 414 416 416 419 419 641* 642 643 643 644 644 645 645 646 646 725* 726 726 784* 785 785 786 786 883 883 975 975 976 976 976 981 981 983 983 985 985 989 1023 1023 1066 1066 1343 1343 1356 1356 1601 1601 arg_ptr 000140 automatic pointer dcl 73 set ref 300* 301 301 303 303 305 308* 309 310 316 316 318 318 320 320 323 323 325 325 327 328 329 329 331 331 332 332 333 333 334 334 335 335 339 339 343 343 344 344 348 348 353 353 365 365 365 380 407* 409 411 414 414 416 416 419 641* 642 643 643 644 644 645 645 646 725* 726 784* 785 786 883 975 976 976 981 983 985 989 1023 1066 1343 1356 1601 argmap based bit packed unaligned dcl 107 set ref 296 364* 406 456 736 956* 971* 991* 1003* argmap_ptr 000142 automatic pointer dcl 73 set ref 277* 296* 364 406 456 456 615* 736 736 956 971 991 1003 backward_sw 000100 automatic bit(1) packed unaligned dcl 1194 set ref 1197* 1206* 1212* 1229* 1240* 1247* 1254* 1261* 1268* 1280 1291* 1310 before builtin function dcl 200 ref 414 414 bit_map based bit dcl 104 set ref 455 659 660* 735 1078 1079* 1181 1223 1224* 1283 1313 1321 bit_map_len 000145 automatic fixed bin(17,0) dcl 73 set ref 455 455 658* 659 659 660 660 735 735 1077* 1078 1078 1079 1079 1180 1181 1184 1222* 1223 1223 1224 1224 1283 1313 1321 bit_map_ptr 000146 automatic pointer dcl 73 set ref 277* 455 455 615* 659* 660 735 735 1076 1078* 1079 1181 1221 1223* 1224 1236 1283 1313 1321 blank 000125 automatic bit(1) initial packed unaligned dcl 73 set ref 73* 424 1178* 1464* 1550* 1602* by_chain 000104 automatic bit(1) initial dcl 73 set ref 73* 328* 374 463 cache 000121 automatic bit(1) dcl 73 set ref 279* 313* call_on_non_ctl_arg 0(15) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 969 1001 char builtin function dcl 200 ref 709 747 754 cleanup 000634 stack reference condition dcl 202 ref 281 620 1516 code 000150 automatic fixed bin(35,0) dcl 73 set ref 278* 309* 310 310* 652* 653 653* 660* 661 661 666* 762* 763 763* 785* 786 786* 812* 813 813 813* 818 819 834* 835 835 838* 850* 851 851 854* 1079* 1080 1080 1085* 1113* 1114 1114* 1224* 1225 1225* 1432* 1433 1433* 1473 1474* convert_date_to_binary_ 000114 constant entry external dcl 204 ref 785 create_unproc 0(17) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 433 current 000400 automatic fixed bin(17,0) dcl 73 set ref 274* 275 444 444 445 448* 450 451* 452* 610* 611 630* 631 634* 635* 635 669 683 683 684 687* 690 766* 1035 1128 1128 1130 1133* 1136 1277 1342* 1352 1352 1355* 1367 1376 1387 1409 1574 1582* 1591 current_trans 66 based fixed bin(17,0) level 2 dcl 3-14 set ref 274 447* 610 686* 1132* date_given 0(05) 000510 automatic bit(1) level 3 packed packed unaligned dcl 183 set ref 428 793* 1431 1623 day 000671 automatic fixed bin(17,0) dcl 776 set ref 789* 790* decode_clock_value_ 000116 constant entry external dcl 204 ref 789 default_to_all 0(10) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 431 default_to_none 0(16) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 430 default_to_unproc 0(11) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 382 433 deleted 5 based bit(1) array level 4 in structure "forum_trans_list" packed packed unaligned dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 1500* deleted 000122 automatic bit(1) dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 438* 812* 1116* 1124* 1400 1400 1469 1477 1500 direction parameter fixed bin(17,0) dcl 808 ref 805 819 820 821 disallow_by_chain 0(13) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 328 disallow_cmsg 0(12) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 1110 disallow_idl 0(07) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 316 318 320 disallow_initial 0(09) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 327 disallow_meeting 0(05) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 303 disallow_reverse 0(06) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 329 disallow_unproc 0(04) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 1121 dont_read 0(08) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 330 918 985 1482 empty 000124 automatic bit(1) initial packed unaligned dcl 73 set ref 73* 363* 382 encode_clock_value_ 000120 constant entry external dcl 204 ref 790 error_table_$badopt 000176 external static fixed bin(35,0) dcl 238 set ref 646* 726* error_table_$inconsistent 000200 external static fixed bin(35,0) dcl 238 set ref 374* error_table_$noarg 000202 external static fixed bin(35,0) dcl 238 set ref 305* error_table_$nomatch 000204 external static fixed bin(35,0) dcl 238 ref 1633 1640 expunged 000114 automatic bit(1) initial dcl 73 set ref 73* 818* 1400 first 000403 automatic fixed bin(17,0) dcl 73 set ref 652* 654 692 762* 764 1138 1275 1282 1298 1299 1437 first_char 000127 automatic char(1) packed unaligned dcl 73 set ref 887* 889 897 897 902* 908 917 959 1030* 1031 1039* 1043 1044 1055 fixed builtin function dcl 200 ref 1051 flags 5 based structure array level 3 in structure "forum_trans_list" packed packed unaligned dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 1499* flags 000510 automatic structure level 2 in structure "trans_specs" dcl 183 in procedure "forum_trans_specs_$parse_specs" set ref 283* forum_$check_user 000144 constant entry external dcl 204 ref 981 forum_$close_forum 000146 constant entry external dcl 204 ref 737 forum_$forum_limits 000130 constant entry external dcl 204 ref 652 762 forum_$get_message 000150 constant entry external dcl 204 ref 1113 forum_$get_transaction_map_idx 000132 constant entry external dcl 204 ref 660 1079 1224 forum_$next_transaction 000134 constant entry external dcl 204 ref 834 forum_$previous_transaction 000136 constant entry external dcl 204 ref 850 forum_$trans_ref_info 000140 constant entry external dcl 204 ref 812 forum_$trans_time_info 000142 constant entry external dcl 204 ref 1432 forum_area based area(1024) dcl 3-46 ref 296 399 659 1078 1223 1528 forum_dir 000152 automatic char(168) packed unaligned dcl 73 set ref 309* 470 forum_et_$bad_trans_spec 000206 external static fixed bin(35,0) dcl 238 set ref 376* 889* 898* 904* 905* 918* 921* 924* 948* 975* 976* 985* 1007* 1023* 1041* 1063* 1160* forum_et_$invalid_trans_idx 000246 external static fixed bin(35,0) dcl 238 set ref 1050* 1465* forum_et_$key_not_allowed 000226 external static fixed bin(35,0) dcl 238 set ref 1066* forum_et_$missing_spec 000216 external static fixed bin(35,0) dcl 238 set ref 429* forum_et_$no_current 000212 external static fixed bin(35,0) dcl 238 set ref 450* 669* 690* 1071* 1136* forum_et_$no_forum 000210 external static fixed bin(35,0) dcl 238 set ref 386* 609* forum_et_$no_trans_for_user 000230 external static fixed bin(35,0) dcl 238 set ref 380* forum_et_$no_transactions 000232 external static fixed bin(35,0) dcl 238 set ref 424* 458* 654* 713* 764* 835 851 forum_et_$null_range_spec 000244 external static fixed bin(35,0) dcl 238 set ref 883* 1601* forum_et_$old_format 000214 external static fixed bin(35,0) dcl 238 ref 661 1080 forum_et_$too_many_personids 000224 external static fixed bin(35,0) dcl 238 set ref 983* forum_et_$too_many_regexps 000222 external static fixed bin(35,0) dcl 238 set ref 922* forum_et_$too_many_trans 000220 external static fixed bin(35,0) dcl 238 set ref 1468* forum_et_$trans_deleted 000234 external static fixed bin(35,0) dcl 238 set ref 1470* forum_et_$trans_not_deleted 000240 external static fixed bin(35,0) dcl 238 set ref 1478* forum_et_$trans_reaped 000236 external static fixed bin(35,0) dcl 238 ref 813 1473 forum_et_$unproc_not_allowed 000242 external static fixed bin(35,0) dcl 238 set ref 1121* forum_idx 000151 automatic fixed bin(17,0) dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 273* 309* 313 386 463* 468 608* 609 652* 660* 737* 762* 812* 832 834* 848 850* 981* 1079* 1113* 1224* 1432* 1559* 1617* forum_idx 1 based fixed bin(17,0) level 2 in structure "passport" dcl 3-14 in procedure "forum_trans_specs_$parse_specs" ref 273 313 608 forum_name 000224 automatic char(32) packed unaligned dcl 73 set ref 309* 469 forum_requests_$open_forum 000152 constant entry external dcl 204 ref 309 forum_trans_list based structure level 1 dcl 1-18 set ref 399 637 734 1539 forum_trans_list_ptr 000642 automatic pointer dcl 1-15 set ref 277* 399* 400 401 401 461 461* 463* 472 615* 628* 630 637 734 734 1484 1484 1488 1488 1489 1489 1490 1490 1492 1492 1493 1493 1496 1496 1497 1497 1499 1499 1500 1500 1514 1532 1533 1536 1539 1540* forum_trans_util_$clear_cache 000154 constant entry external dcl 204 ref 395 1524 forum_trans_util_$read_trans 000156 constant entry external dcl 204 ref 1559 1617 forum_trans_util_$reverse 000160 constant entry external dcl 204 ref 461 forum_trans_util_$sort_by_chain 000162 constant entry external dcl 204 ref 463 forum_user_trans based structure level 1 dcl 2-7 forum_user_trans_ptr 000650 automatic pointer dcl 2-5 set ref 1484 1559* 1560 1617* 1618 1620 1624 1625 1630 1630 1630 1638 1638 1638 have_limits 000116 automatic bit(1) initial dcl 73 set ref 73* 770* 1074 1220 1428 hbound builtin function dcl 200 ref 867 high 000101 automatic fixed bin(17,0) dcl 1423 set ref 1432* 1434 1438* 1441 high_date 4 000510 automatic fixed bin(71,0) level 2 dcl 183 set ref 284* 376 376 794* 795* 799* 1432* 1625 1625 i 000112 automatic fixed bin(17,0) dcl 1308 set ref 1313* 1314 1314 1315* 1315 1316 1321* 1322 1322 1323* 1323 1324 id_given 0(04) 000510 automatic bit(1) level 3 packed packed unaligned dcl 183 set ref 380 428 983 988* 1620 idl_given 000110 automatic bit(1) initial dcl 73 set ref 73* idx 000100 automatic fixed bin(17,0) dcl 1407 in procedure "get_next" set ref 1410* 1415 idx 000100 automatic fixed bin(17,0) dcl 1174 in procedure "get_seen" set ref 1181* 1182 1183 1185* 1187 idx 000714 automatic fixed bin(17,0) dcl 1599 in procedure "do_range" set ref 1604* 1607 idx parameter fixed bin(17,0) dcl 846 in procedure "find_previous" set ref 843 848 850* 854* idx 000100 automatic fixed bin(17,0) dcl 1509 in procedure "expand_list" set ref 1535* 1536 1536* idx 000410 automatic fixed bin(17,0) dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 299* 300* 304* 304 305 308* 345 349 354 358* 360* 364* 405* 406 407* 640* 641* 782 783* 783 784* 956 971 972* 991 1003 1004* idx parameter fixed bin(17,0) dcl 808 in procedure "get_tri" set ref 805 811 812* 813* 819 820* 821* 823 idx 000100 automatic fixed bin(17,0) dcl 1548 in procedure "add_new" set ref 1557* 1563 idx 000100 automatic fixed bin(17,0) dcl 1385 in procedure "get_prev" set ref 1388* 1393 idx parameter fixed bin(17,0) dcl 830 in procedure "find_next" set ref 827 832 834* 838* idx 000100 automatic fixed bin(17,0) dcl 862 in procedure "lookup_word" set ref 867* 868 868* idx 000102 automatic fixed bin(17,0) dcl 1423 in procedure "get_all" set ref 1442* 1444 ignore_reaped parameter bit(1) dcl 808 ref 805 813 in_expr 000120 automatic bit(1) dcl 73 set ref 884* 901* 921 1026* 1037* 1066 1112 1122 in_range 000123 automatic bit(1) dcl 73 set ref 408* 413* 1066 1090* 1095* 1100* 1105* 1112 1115* 1122 1123* 1165 1177* 1430* 1470 1474 1478 index builtin function dcl 200 ref 301 365 365 409 642 908 929 959 976 1023 1031 1043 1044 1055 1181 1313 1321 inhibit_error 000115 automatic bit(1) initial dcl 73 set ref 73* 323* 325* 380 424 430* 435* 458 initial 000112 automatic bit(1) initial dcl 73 set ref 73* 327* 452 1167 1452 1591 1605 ioa_ 000122 constant entry external dcl 204 ref 717 751 jdx 000411 automatic fixed bin(17,0) dcl 73 set ref 409* 410 411 411 893* 910* 911 911* 913* 913 914 923* 924 929 931 934 937* 937 943 954 961* 962 962* 964* 964 966 966 997 1044* 1045* 1046 1046* 1048* 1048 1050 1051 1052 1057* 1058 1058* 1060* 1060 1062 1062 1063 1063 1066 1066 1157 kdx 000412 automatic fixed bin(17,0) dcl 73 set ref 439* 929* 930 931 931 934 934 936 937 942 943 944 954 966* 967 995 1031* 1033 1038 1062* 1063 1066 1071 1074 1076 1082 1088 1089 1094 1099 1104 1109 1120 1127 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1465 1465 key_val 000421 automatic fixed bin(17,0) initial array dcl 126 set ref 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 126* 868 keywords 000015 constant char(16) initial array packed unaligned dcl 117 ref 867 868 last 000404 automatic fixed bin(17,0) dcl 73 set ref 387* 652* 658 693 762* 1077 1139 1222 1280 1320 1409 1438 1556 last_seen 000405 automatic fixed bin(17,0) dcl 73 set ref 652* 669 762* 766 1237 1275 1552 1554 last_sent 000407 automatic fixed bin(17,0) dcl 73 set ref 380 981* last_tri 000406 automatic fixed bin(17,0) dcl 73 set ref 278* 614* 811 823* last_val 000103 automatic fixed bin(17,0) dcl 73 set ref 415* 1601 1603 length builtin function dcl 200 ref 750 882 950 1021 1484 list 3 based structure array level 2 in structure "forum_trans_list" dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 1536 list 3 based structure array level 2 in structure "new_list" dcl 1509 in procedure "expand_list" set ref 1536* list 000105 automatic bit(1) initial dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 73* 612* 1343 1356 1451 low 000100 automatic fixed bin(17,0) dcl 1423 set ref 1432* 1434 1434* 1437* 1441 low_date 2 000510 automatic fixed bin(71,0) level 2 dcl 183 set ref 284* 376 796* 798* 1432* 1624 ltrim builtin function dcl 200 ref 709 747 754 match_code 000420 automatic fixed bin(35,0) dcl 73 set ref 1630* 1632 1633 1633* 1638* 1640 1640 1643* max builtin function dcl 200 ref 1484 max_personid_len 2 based fixed bin(17,0) level 2 in structure "forum_trans_list" dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 401* 1484* 1484 1533 max_personid_len 2 based fixed bin(17,0) level 2 in structure "new_list" dcl 1509 in procedure "expand_list" set ref 1533* max_size based fixed bin(17,0) level 2 in structure "new_list" dcl 1509 in procedure "expand_list" set ref 1531* max_size based fixed bin(17,0) level 2 in structure "forum_trans_list" dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 399* 400* 637 734 1488 1514 1518 1528* 1539 me 000130 automatic char(22) packed unaligned dcl 73 set ref 1551* 1560 message 000234 automatic char(256) packed unaligned dcl 73 set ref 1113* min builtin function dcl 200 ref 966 966 1062 1062 1063 1063 1066 1066 month 000670 automatic fixed bin(17,0) dcl 776 set ref 789* 790* must_be_deleted 0(03) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 289 new_list based structure level 1 dcl 1509 set ref 1518 1528 new_list_ptr 000102 automatic pointer dcl 1509 set ref 1513* 1518 1518 1528* 1531 1532 1533 1535 1536 1540 next 000100 automatic fixed bin(17,0) dcl 830 in procedure "find_next" set ref 834* 835* 839 next parameter fixed bin(17,0) dcl 808 in procedure "get_tri" set ref 805 819* 820* 821* next_sw 000102 automatic bit(1) packed unaligned dcl 1194 set ref 1199* 1207* 1214* 1231* 1242* 1249* 1256* 1263* 1270* 1273 1291 no_current 000106 automatic bit(1) initial dcl 73 set ref 73* 275* 611* 767* 1071 no_match_sj 0(02) 000510 automatic bit(1) level 3 packed packed unaligned dcl 183 set ref 356* 1629 no_match_text 0(03) 000510 automatic bit(1) level 3 packed packed unaligned dcl 183 set ref 351* 1637 non_null based bit(1) level 2 packed packed unaligned dcl 1-32 ref 429 nref 000401 automatic fixed bin(17,0) dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 812* 1343 1345 1369 1370 1496 1583 1584 1591 1591 1592 nref 4 based fixed bin(17,0) array level 3 in structure "forum_trans_list" packed packed unaligned dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 1492* 1496* null builtin function dcl 200 ref 277 293 384 433 435 455 456 615 734 735 736 1076 1221 1236 1513 1518 1618 number parameter fixed bin(17,0) dcl 744 ref 741 747 754 only_one 0(01) based bit(1) level 2 packed packed unaligned dcl 1-32 ref 1468 only_unproc 000126 automatic bit(1) initial packed unaligned dcl 73 set ref 73* 368* 382* 382 384* 384 386 387 909* 955* 990* 995* parse_flags based structure level 1 dcl 1-32 parse_flags_word 000645 automatic bit(36) dcl 1-30 set ref 272* 289 290 303 316 318 320 323 325 327 328 329 330 382 429 430 431 433 433 623* 626* 626 628* 918 969 985 1001 1110 1121 1468 1482 passport based structure level 1 dcl 3-14 passport_info_ptr 000652 automatic pointer dcl 3-12 set ref 268* 269 273 274 296 313 384 395* 399 433 435 447 461* 463* 606* 608 610 628* 634 659 686 1078 1132 1223 1524* 1528 1559* 1617* person_id 107 000510 automatic char(22) level 2 in structure "trans_specs" dcl 183 in procedure "forum_trans_specs_$parse_specs" set ref 287* 989* 1620 person_id 1 based char(22) level 2 in structure "forum_user_trans" dcl 2-7 in procedure "forum_trans_specs_$parse_specs" ref 1484 1560 1620 pos 000100 automatic fixed bin(17,0) initial dcl 1018 in procedure "pass2" set ref 1018* 1028 1030 1034* 1034 1035 1039 1041 1045 1046 1051 1052* 1052 1057 1058 1062 1062 1063 1063 1066 1066 1157* 1157 pos 000704 automatic fixed bin(17,0) initial dcl 879 in procedure "pass1" set ref 879* 886 887 893 898 900* 900 902 905 910 911 914* 914 923 954* 961 962 966 966 997* 997 pref 000402 automatic fixed bin(17,0) dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 452 812* 1167 1356 1359 1378 1379 1452 1497 1576 1577 1605 pref 4(18) based fixed bin(17,0) array level 3 in structure "forum_trans_list" packed packed unaligned dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 1493* 1497* previous 000100 automatic fixed bin(17,0) dcl 846 set ref 850* 851* 855 regexp 7 000510 automatic char(256) level 2 dcl 183 set ref 285* 934* 943* 945 951* 1630 1630 1633* 1638 1638 1643* regexp_given 0(01) 000510 automatic bit(1) level 3 packed packed unaligned dcl 183 set ref 428 922 941* 1628 regexp_len 6 000510 automatic fixed bin(21,0) level 2 dcl 183 set ref 286* 934 936* 936 943 944* 944 950* 1630* 1638* request_name 000334 automatic char(32) packed unaligned dcl 73 set ref 617* 648* reset_current 000113 automatic bit(1) initial dcl 73 set ref 73* 1228* 1294 1300* ret_len 000344 automatic fixed bin(21,0) dcl 73 set ref 618* 715 747 ret_ptr 000346 automatic pointer dcl 73 set ref 618* 715 715 747 747 ret_string 000350 automatic varying char(80) initial dcl 73 set ref 73* 709* 715 717* 750 751* 752* 754* 754 ret_val based varying char dcl 106 set ref 715* 715 747* 747 reverse builtin function dcl 200 ref 1313 reverse_sw 000107 automatic bit(1) initial dcl 73 set ref 73* 329* 374 461 rtrim builtin function dcl 200 ref 950 1484 saved_regexp 000010 internal static varying char(256) initial dcl 198 set ref 945* 948 950 951 search_file_$silent 000126 constant entry external dcl 204 ref 1630 1638 seen parameter bit(1) dcl 1174 ref 1171 1181 select_type 000415 automatic fixed bin(17,0) dcl 73 set ref 289* 290* 291* 316* 318* 320* 463* 616* 643* 644* 645* 652* 762* 812* 1400 1400 1469 1477 selected 000510 automatic bit(1) level 3 packed packed unaligned dcl 183 set ref 423 458 708* 713 746* 1468 1502* sign 000414 automatic fixed bin(17,0) dcl 73 set ref 1025* 1038* 1161 1162* size 1 based fixed bin(17,0) level 2 in structure "forum_trans_list" dcl 1-18 in procedure "forum_trans_specs_$parse_specs" set ref 401* 461 1488 1489* 1489 1490 1492 1493 1496 1497 1499 1500 1532 size 1 based fixed bin(17,0) level 2 in structure "new_list" dcl 1509 in procedure "expand_list" set ref 1532* 1535 spec parameter char packed unaligned dcl 1017 in procedure "pass2" set ref 1014 1021 1023 1030 1039 1041* 1045 1050* 1051 1057 1062 1062 1063 1063 1066 1066 1160* spec parameter char packed unaligned dcl 878 in procedure "pass1" set ref 875 882 887 902 904* 905* 910 921* 922* 924* 929 931 934 943 961 966 966 1007* spec_len 000705 automatic fixed bin(17,0) dcl 880 in procedure "pass1" set ref 882* 883 886 893 898 911 924 962 spec_len 000101 automatic fixed bin(17,0) dcl 1019 in procedure "pass2" set ref 1021* 1028 1046 1058 ssu_$abort_line 000164 constant entry external dcl 204 ref 305 310 374 376 380 386 411 424 429 450 458 609 632 646 648 653 654 663 666 669 690 713 726 763 764 786 813 838 854 883 889 898 904 905 918 921 922 924 948 975 976 983 985 1007 1023 1041 1050 1063 1066 1071 1082 1085 1110 1114 1121 1136 1160 1225 1291 1294 1343 1356 1394 1416 1433 1465 1468 1583 1601 1633 1643 ssu_$arg_ptr 000166 constant entry external dcl 204 ref 300 308 407 641 725 784 ssu_$get_request_name 000170 constant entry external dcl 204 ref 617 ssu_$print_message 000172 constant entry external dcl 204 ref 1470 1474 1478 ssu_$return_arg 000174 constant entry external dcl 204 ref 293 618 ssu_ptr 170 based pointer level 2 in structure "passport" dcl 3-14 in procedure "forum_trans_specs_$parse_specs" ref 269 ssu_ptr 000376 automatic pointer dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 269* 293* 300* 305* 308* 310* 374* 376* 380* 386* 407* 411* 424* 429* 450* 458* 605* 609* 617* 618* 632* 641* 646* 648* 653* 654* 663* 666* 669* 690* 713* 725* 726* 763* 764* 784* 786* 813* 838* 854* 883* 889* 898* 904* 905* 918* 921* 922* 924* 948* 975* 976* 983* 985* 1007* 1023* 1041* 1050* 1063* 1066* 1071* 1082* 1085* 1110* 1114* 1121* 1136* 1160* 1225* 1291* 1294* 1343* 1356* 1394* 1416* 1433* 1465* 1468* 1470* 1474* 1478* 1583* 1601* 1633* 1643* state 000102 automatic fixed bin(17,0) dcl 73 set ref 298* 301 346* 350* 355* 370* 889 892 904 999* string builtin function dcl 200 set ref 283* 1499* subject 25 based char level 2 packed packed unaligned dcl 2-7 set ref 1630 1630 subject_length 22 based fixed bin(21,0) level 2 dcl 2-7 ref 1630 1630 1630 1638 1638 substr builtin function dcl 200 set ref 301 301 364* 406 626 632 651 669 887 902 910 929 931 934* 934 943* 943 956* 961 966 966 971* 991* 1003* 1030 1039 1045 1051 1057 1062 1062 1063 1063 1066 1066 1066 1071 1074 1181 1283 1313 1321 temp_forum 000111 automatic bit(1) initial dcl 73 set ref 73* 312* 388 467 613* 737 765 text based char level 2 packed packed unaligned dcl 2-7 set ref 1638 1638 text_length 23 based fixed bin(21,0) level 2 dcl 2-7 ref 1638 1638 1638 this_val 000101 automatic fixed bin(17,0) dcl 73 set ref 444* 447 448 683* 686 687 692* 693* 709 1029* 1051* 1128* 1132 1133 1138* 1139* 1161 1237* 1275* 1277* 1280* 1282* 1283 1289* 1290 1299* 1311* 1311* 1312 1313 1315 1319* 1319* 1320 1321 1323 1332* 1345* 1352* 1359* 1367* 1368* 1376* 1377* 1390* 1412* tidx 000413 automatic fixed bin(17,0) dcl 73 set ref 1179* 1180 1181 1183* 1183 1184 1185* 1187* 1387* 1387* 1388* 1390* 1409* 1409* 1410* 1412* 1441* 1441* 1442* 1451* 1452* 1552* 1554* 1556* 1556 1556* 1557* 1559* 1574* 1575* 1584* 1587* 1587* 1589* 1603* 1603* 1604* 1605* time 12 based fixed bin(71,0) level 2 dcl 2-7 ref 1624 1625 time_stamp 000674 automatic fixed bin(71,0) dcl 776 set ref 785* 789* 790* 794 795 796 798 799 tnum parameter fixed bin(17,0) dcl 1462 set ref 1459 1465 1465 1465 1465* 1470* 1474* 1478* 1482 1483* 1490 1491 trans_num 3 based fixed bin(17,0) array level 3 dcl 1-18 set ref 630 1490* trans_specs 000510 automatic structure level 1 dcl 183 set ref 672* translate builtin function dcl 200 ref 865 truncate parameter bit(1) dcl 776 ref 773 788 type parameter fixed bin(17,0) dcl 776 in procedure "get_date" ref 773 794 795 796 type 000416 automatic fixed bin(17,0) dcl 73 in procedure "forum_trans_specs_$parse_specs" set ref 607* 626 632 635 651 657 663 669 674 675 676 677 678 679 680 682 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 unprocessed_reply_trans 104 based fixed bin(17,0) level 2 dcl 3-14 ref 634 unprocessed_trans_ptr 102 based pointer level 2 dcl 3-14 ref 384 433 435 unspec builtin function dcl 200 set ref 672* user_info_$whoami 000124 constant entry external dcl 204 ref 1551 value 000100 automatic fixed bin(17,0) dcl 73 set ref 415 1024* 1035 1035* 1161* 1161 1166* 1167* 1601 1603 verify builtin function dcl 200 ref 910 961 1045 1057 which_seen 000101 automatic bit(1) packed unaligned dcl 1194 set ref 1198* 1205* 1213* 1230* 1241* 1248* 1255* 1262* 1269* 1283 1291 1294* 1313 1321 word parameter char packed unaligned dcl 862 set ref 859 865* 865 868 year 000672 automatic fixed bin(17,0) dcl 776 set ref 789* 790* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ALLOW_DELETED internal static bit(18) initial dcl 1-54 ALLOW_IHE internal static bit(18) initial dcl 1-54 CALL_ON_BAD_ARGS internal static bit(18) initial dcl 1-54 CREATE_UNPROC internal static bit(18) initial dcl 1-54 DEFAULT_TO_ALL internal static bit(18) initial dcl 1-54 DEFAULT_TO_NONE internal static bit(18) initial dcl 1-54 DEFAULT_TO_UNPROC internal static bit(18) initial dcl 1-54 DISALLOW_IDL internal static bit(18) initial dcl 1-54 MUST_BE_DELETED internal static bit(18) initial dcl 1-54 NON_NULL internal static bit(18) initial dcl 1-54 TFMT_more internal static fixed bin(17,0) initial dcl 3-54 TFMT_none internal static fixed bin(17,0) initial dcl 3-54 TFMT_number internal static fixed bin(17,0) initial dcl 3-54 TFMT_reference internal static fixed bin(17,0) initial dcl 3-54 alloc_subject_length automatic fixed bin(21,0) dcl 2-4 alloc_text_length automatic fixed bin(21,0) dcl 2-3 forum_data_$central_directory external static char(168) packed unaligned dcl 3-49 forum_data_$info_directory external static char(168) packed unaligned dcl 3-49 forum_data_$version_string external static char(8) packed unaligned dcl 3-49 message_type internal static fixed bin(17,0) initial dcl 2-22 no_suffix_name based char packed unaligned dcl 3-46 passport_version_2 internal static fixed bin(17,0) initial dcl 3-44 user_trans_type internal static fixed bin(17,0) initial dcl 2-21 NAMES DECLARED BY EXPLICIT CONTEXT. BAD_REGEXP 010473 constant label dcl 924 ref 930 BAD_WORD 012050 constant label dcl 1066 ref 1112 1122 BEGIN_CHAIN 016235 constant label dcl 1587 ref 1576 END_LOOP 013073 constant label dcl 1157 in procedure "pass2" END_LOOP 011301 constant label dcl 997 in procedure "pass1" ref 992 GOT_WORD 011276 constant label dcl 995 ref 967 MAIN_RETURN 004751 constant label dcl 596 set ref 718 NOARG 002030 constant label dcl 305 ref 345 349 354 782 REGEXP_LOOP 010470 constant label dcl 924 ref 938 RETRY 015632 constant label dcl 1521 ref 1525 RETRY_ATL 003076 constant label dcl 392 ref 396 USERID 011075 constant label dcl 976 ref 894 add_aref 016103 constant entry internal dcl 1568 ref 674 676 1096 1106 add_from_multiple 015144 constant entry internal dcl 1448 ref 1186 1443 1560 1590 add_new 015743 constant entry internal dcl 1545 ref 677 1091 add_rref 016151 constant entry internal dcl 1579 ref 675 1101 add_to_string 006612 constant entry internal dcl 741 ref 1451 all_request 004372 constant entry external dcl 541 allocate_num 015200 constant entry internal dcl 1459 ref 440 452 1117 1125 1167 1452 1605 aref_request 004242 constant entry external dcl 521 bref_request 004316 constant entry external dcl 531 check 014620 constant entry internal dcl 1397 ref 1186 1333 1389 1411 1443 1558 1590 1605 cleanup_handler 006531 constant entry internal dcl 731 ref 281 620 711 common 004753 constant entry internal dcl 599 ref 479 484 489 494 499 504 509 514 519 524 529 534 539 544 549 554 559 564 569 574 579 584 589 594 current_request 004064 constant entry external dcl 496 do_range 016315 constant entry internal dcl 1596 ref 417 dummy 006450 constant entry internal dcl 720 ref 628 628 expand_list 015570 constant entry internal dcl 1506 ref 1488 expungedp 014124 constant entry internal dcl 1329 ref 1283 1303 find_next 007523 constant entry internal dcl 827 ref 820 1319 find_previous 007651 constant entry internal dcl 843 ref 821 1311 first_request 003734 constant entry external dcl 476 first_seen_request 004474 constant entry external dcl 556 first_unseen_request 004522 constant entry external dcl 561 forum_trans_specs_$parse_specs 001552 constant entry external dcl 42 ref 628 fref_request 004112 constant entry external dcl 501 get_all 014771 constant entry internal dcl 1420 ref 428 431 678 1088 get_common 013617 constant label dcl 1273 ref 1200 1208 1215 1232 1243 1250 1257 1264 1271 get_date 007115 constant entry internal dcl 773 ref 331 332 333 334 336 337 340 341 343 get_first_seen 013320 constant entry internal dcl 1192 ref 700 1147 get_first_unseen 013333 constant entry internal dcl 1203 ref 701 1152 get_fref 014445 constant entry internal dcl 1373 ref 696 1142 get_last_seen 013511 constant entry internal dcl 1234 ref 706 1150 get_last_unseen 013346 constant entry internal dcl 1210 ref 707 1155 get_limits 007007 constant entry internal dcl 759 ref 388 1074 1220 1428 get_lref 014403 constant entry internal dcl 1364 ref 697 1143 get_next 014656 constant entry internal dcl 1404 ref 695 1141 get_next_seen 013535 constant entry internal dcl 1245 ref 702 1148 get_next_unseen 013552 constant entry internal dcl 1252 ref 703 1153 get_nref 014172 constant entry internal dcl 1339 ref 698 1144 get_pref 014274 constant entry internal dcl 1349 ref 699 1145 get_prev 014507 constant entry internal dcl 1382 ref 694 1140 get_prev_seen 013566 constant entry internal dcl 1259 ref 704 1149 get_prev_unseen 013603 constant entry internal dcl 1266 ref 705 1154 get_seen 013204 constant entry internal dcl 1171 ref 679 680 1146 1151 get_tri 007352 constant entry internal dcl 805 ref 451 1166 1185 1332 1342 1355 1368 1377 1388 1410 1442 1557 1575 1582 1589 1604 last_request 003762 constant entry external dcl 481 last_seen_request 004700 constant entry external dcl 586 last_unseen_request 004726 constant entry external dcl 591 lookup_word 007752 constant entry internal dcl 859 ref 966 1062 lref_request 004140 constant entry external dcl 506 new_request 004344 constant entry external dcl 536 next_request 004036 constant entry external dcl 491 next_seen_request 004550 constant entry external dcl 566 next_unseen_request 004576 constant entry external dcl 571 nref_request 004214 constant entry external dcl 516 pass1 010031 constant entry internal dcl 875 ref 365 pass2 011362 constant entry internal dcl 1014 ref 414 416 419 pref_request 004166 constant entry external dcl 511 prev_seen_request 004624 constant entry external dcl 576 prev_unseen_request 004652 constant entry external dcl 581 previous_request 004010 constant entry external dcl 486 rref_request 004270 constant entry external dcl 526 seen_request 004420 constant entry external dcl 546 select 016422 constant entry internal dcl 1612 ref 1483 set_current 013362 constant entry internal dcl 1217 ref 446 685 1131 skip_some 014003 constant entry internal dcl 1306 ref 1289 unseen_request 004446 constant entry external dcl 551 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 21274 21544 17646 21304 Length 22344 17646 250 564 1426 102 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME forum_trans_specs_$parse_specs 650 external procedure is an external procedure. on unit on line 281 64 on unit on unit on line 392 68 on unit common 134 internal procedure is assigned to an entry variable, and enables or reverts conditions. on unit on line 620 64 on unit cleanup_handler 72 internal procedure is called by several nonquick procedures. add_to_string internal procedure shares stack frame of internal procedure add_from_multiple. get_limits 84 internal procedure is called by several nonquick procedures. get_date internal procedure shares stack frame of external procedure forum_trans_specs_$parse_spec get_tri 98 internal procedure is called by several nonquick procedures. find_next 126 internal procedure is called by several nonquick procedures. find_previous 94 internal procedure is called by several nonquick procedures. lookup_word 67 internal procedure is called during a stack extension. pass1 internal procedure shares stack frame of external procedure forum_trans_specs_$parse_spec pass2 248 internal procedure is called during a stack extension. get_seen 80 internal procedure is called by several nonquick procedures. get_first_seen 162 internal procedure is called by several nonquick procedures. skip_some internal procedure shares stack frame of internal procedure get_first_seen. expungedp internal procedure shares stack frame of internal procedure get_first_seen. get_nref 116 internal procedure is called by several nonquick procedures. get_pref 116 internal procedure is called by several nonquick procedures. get_lref 80 internal procedure is called by several nonquick procedures. get_fref 80 internal procedure is called by several nonquick procedures. get_prev 100 internal procedure is called by several nonquick procedures. check 66 internal procedure is called by several nonquick procedures. get_next 98 internal procedure is called by several nonquick procedures. get_all 83 internal procedure is called by several nonquick procedures. add_from_multiple 90 internal procedure is called by several nonquick procedures. allocate_num 150 internal procedure is called by several nonquick procedures. expand_list 82 internal procedure enables or reverts conditions. on unit on line 1516 64 on unit on unit on line 1521 68 on unit add_new 82 internal procedure is called by several nonquick procedures. add_aref 94 internal procedure is called by several nonquick procedures. do_range internal procedure shares stack frame of external procedure forum_trans_specs_$parse_spec select internal procedure shares stack frame of internal procedure allocate_num. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 saved_regexp forum_trans_specs_$parse_specs STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME add_aref 000100 all add_aref add_new 000100 idx add_new expand_list 000100 idx expand_list 000102 new_list_ptr expand_list find_next 000100 next find_next find_previous 000100 previous find_previous forum_trans_specs_$parse_specs 000100 value forum_trans_specs_$parse_specs 000101 this_val forum_trans_specs_$parse_specs 000102 state forum_trans_specs_$parse_specs 000103 last_val forum_trans_specs_$parse_specs 000104 by_chain forum_trans_specs_$parse_specs 000105 list forum_trans_specs_$parse_specs 000106 no_current forum_trans_specs_$parse_specs 000107 reverse_sw forum_trans_specs_$parse_specs 000110 idl_given forum_trans_specs_$parse_specs 000111 temp_forum forum_trans_specs_$parse_specs 000112 initial forum_trans_specs_$parse_specs 000113 reset_current forum_trans_specs_$parse_specs 000114 expunged forum_trans_specs_$parse_specs 000115 inhibit_error forum_trans_specs_$parse_specs 000116 have_limits forum_trans_specs_$parse_specs 000117 active_function forum_trans_specs_$parse_specs 000120 in_expr forum_trans_specs_$parse_specs 000121 cache forum_trans_specs_$parse_specs 000122 deleted forum_trans_specs_$parse_specs 000123 in_range forum_trans_specs_$parse_specs 000124 empty forum_trans_specs_$parse_specs 000125 blank forum_trans_specs_$parse_specs 000126 only_unproc forum_trans_specs_$parse_specs 000127 first_char forum_trans_specs_$parse_specs 000130 me forum_trans_specs_$parse_specs 000136 arg_len forum_trans_specs_$parse_specs 000140 arg_ptr forum_trans_specs_$parse_specs 000142 argmap_ptr forum_trans_specs_$parse_specs 000144 alloc_argmap_size forum_trans_specs_$parse_specs 000145 bit_map_len forum_trans_specs_$parse_specs 000146 bit_map_ptr forum_trans_specs_$parse_specs 000150 code forum_trans_specs_$parse_specs 000151 forum_idx forum_trans_specs_$parse_specs 000152 forum_dir forum_trans_specs_$parse_specs 000224 forum_name forum_trans_specs_$parse_specs 000234 message forum_trans_specs_$parse_specs 000334 request_name forum_trans_specs_$parse_specs 000344 ret_len forum_trans_specs_$parse_specs 000346 ret_ptr forum_trans_specs_$parse_specs 000350 ret_string forum_trans_specs_$parse_specs 000376 ssu_ptr forum_trans_specs_$parse_specs 000400 current forum_trans_specs_$parse_specs 000401 nref forum_trans_specs_$parse_specs 000402 pref forum_trans_specs_$parse_specs 000403 first forum_trans_specs_$parse_specs 000404 last forum_trans_specs_$parse_specs 000405 last_seen forum_trans_specs_$parse_specs 000406 last_tri forum_trans_specs_$parse_specs 000407 last_sent forum_trans_specs_$parse_specs 000410 idx forum_trans_specs_$parse_specs 000411 jdx forum_trans_specs_$parse_specs 000412 kdx forum_trans_specs_$parse_specs 000413 tidx forum_trans_specs_$parse_specs 000414 sign forum_trans_specs_$parse_specs 000415 select_type forum_trans_specs_$parse_specs 000416 type forum_trans_specs_$parse_specs 000417 arg_count forum_trans_specs_$parse_specs 000420 match_code forum_trans_specs_$parse_specs 000421 key_val forum_trans_specs_$parse_specs 000510 trans_specs forum_trans_specs_$parse_specs 000642 forum_trans_list_ptr forum_trans_specs_$parse_specs 000644 alloc_trans_list_size forum_trans_specs_$parse_specs 000645 parse_flags_word forum_trans_specs_$parse_specs 000646 ANY forum_trans_specs_$parse_specs 000650 forum_user_trans_ptr forum_trans_specs_$parse_specs 000652 passport_info_ptr forum_trans_specs_$parse_specs 000670 month get_date 000671 day get_date 000672 year get_date 000674 time_stamp get_date 000704 pos pass1 000705 spec_len pass1 000714 idx do_range get_all 000100 low get_all 000101 high get_all 000102 idx get_all get_first_seen 000100 backward_sw get_first_seen 000101 which_seen get_first_seen 000102 next_sw get_first_seen 000112 i skip_some get_next 000100 idx get_next get_prev 000100 idx get_prev get_seen 000100 idx get_seen lookup_word 000100 idx lookup_word pass2 000100 pos pass2 000101 spec_len pass2 THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as alloc_char_temp cat_realloc_chars call_ent_var call_ext_in_desc call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac move_label_var make_label_var tra_ext_1 enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc reverse_bs set_bits_eis index_bits_eis index_bs_1_eis any_to_any_truncate_op_alloc_ op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. convert_date_to_binary_ decimal_exp_ decode_clock_value_ encode_clock_value_ forum_$check_user forum_$close_forum forum_$forum_limits forum_$get_message forum_$get_transaction_map_idx forum_$next_transaction forum_$previous_transaction forum_$trans_ref_info forum_$trans_time_info forum_requests_$open_forum forum_trans_util_$clear_cache forum_trans_util_$read_trans forum_trans_util_$reverse forum_trans_util_$sort_by_chain ioa_ search_file_$silent ssu_$abort_line ssu_$arg_ptr ssu_$get_request_name ssu_$print_message ssu_$return_arg user_info_$whoami THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badopt error_table_$inconsistent error_table_$noarg error_table_$nomatch forum_et_$bad_trans_spec forum_et_$invalid_trans_idx forum_et_$key_not_allowed forum_et_$missing_spec forum_et_$no_current forum_et_$no_forum forum_et_$no_trans_for_user forum_et_$no_transactions forum_et_$null_range_spec forum_et_$old_format forum_et_$too_many_personids forum_et_$too_many_regexps forum_et_$too_many_trans forum_et_$trans_deleted forum_et_$trans_not_deleted forum_et_$trans_reaped forum_et_$unproc_not_allowed LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 73 001220 126 001240 1 53 001540 42 001543 268 001576 269 001601 271 001603 272 001605 273 001607 274 001611 275 001613 277 001616 278 001622 279 001624 281 001626 283 001650 284 001651 285 001654 286 001657 287 001660 289 001663 290 001673 291 001701 293 001703 295 001725 296 001727 298 001737 299 001741 300 001751 301 001766 303 002006 304 002024 305 002025 308 002064 309 002101 310 002135 312 002172 313 002174 314 002201 316 002202 318 002224 320 002242 323 002260 325 002301 327 002316 328 002331 329 002344 330 002363 331 002366 332 002404 333 002421 334 002436 335 002453 336 002463 337 002467 338 002473 339 002474 340 002504 341 002510 342 002514 343 002515 344 002532 345 002542 346 002545 347 002547 348 002550 349 002560 350 002563 351 002565 352 002567 353 002570 354 002600 355 002603 356 002605 357 002607 358 002610 359 002617 360 002620 361 002627 363 002630 364 002631 365 002636 368 002675 370 002676 372 002700 374 002702 376 002732 380 002763 382 003024 384 003033 386 003041 387 003062 388 003066 390 003074 392 003076 395 003112 396 003121 399 003124 400 003136 401 003140 403 003142 405 003143 406 003153 407 003160 408 003175 409 003176 410 003211 411 003212 413 003252 414 003254 415 003302 416 003305 417 003341 418 003343 419 003344 421 003357 423 003361 424 003364 427 003405 428 003406 429 003416 430 003441 431 003447 433 003457 435 003472 438 003502 439 003503 440 003505 442 003514 444 003515 445 003521 446 003522 447 003526 448 003531 450 003532 451 003550 452 003570 455 003602 456 003613 458 003624 461 003646 463 003666 467 003705 468 003707 469 003712 470 003717 472 003724 473 003727 476 003730 479 003745 481 003757 484 003773 486 004005 489 004021 491 004033 494 004047 496 004061 499 004075 501 004107 504 004123 506 004135 509 004151 511 004163 514 004177 516 004211 519 004225 521 004237 524 004253 526 004265 529 004301 531 004313 534 004327 536 004341 539 004355 541 004367 544 004403 546 004415 549 004431 551 004443 554 004457 556 004471 559 004505 561 004517 564 004533 566 004545 569 004561 571 004573 574 004607 576 004621 579 004635 581 004647 584 004663 586 004675 589 004711 591 004723 594 004737 596 004751 599 004752 605 004760 606 004765 607 004770 608 004773 609 004775 610 005012 611 005016 612 005021 613 005023 614 005024 615 005025 616 005031 617 005033 618 005044 620 005064 622 005106 623 005115 626 005125 628 005135 630 005206 631 005212 632 005213 634 005246 635 005252 637 005257 640 005264 641 005276 642 005313 643 005330 644 005343 645 005356 646 005371 647 005427 648 005430 649 005465 651 005470 652 005475 653 005525 654 005554 657 005574 658 005600 659 005602 660 005614 661 005644 663 005652 665 005701 666 005702 669 005725 672 005754 674 005760 675 005775 676 006005 677 006021 678 006031 679 006041 680 006055 682 006071 683 006073 684 006077 685 006100 686 006105 687 006111 690 006113 691 006132 692 006133 693 006140 694 006145 695 006155 696 006165 697 006175 698 006205 699 006215 700 006225 701 006235 702 006245 703 006255 704 006265 705 006275 706 006305 707 006315 708 006324 709 006327 711 006357 713 006364 715 006405 717 006425 718 006444 720 006447 725 006455 726 006474 727 006527 731 006530 734 006536 735 006550 736 006562 737 006574 738 006611 741 006612 746 006614 747 006617 749 006705 750 006706 751 006711 752 006722 754 006724 755 007004 756 007005 759 007006 762 007014 763 007044 764 007064 765 007104 766 007107 767 007111 770 007112 771 007114 773 007115 782 007117 783 007122 784 007123 785 007140 786 007164 788 007220 789 007224 790 007254 793 007320 794 007322 795 007331 796 007337 798 007344 799 007346 802 007350 805 007351 811 007357 812 007364 813 007406 818 007451 819 007455 820 007464 821 007502 823 007515 824 007521 827 007522 832 007530 834 007540 835 007555 838 007613 839 007644 843 007650 848 007656 850 007666 851 007703 854 007714 855 007745 859 007751 865 007765 867 007777 868 010005 869 010024 871 010026 875 010031 879 010042 882 010044 883 010046 884 010101 886 010102 887 010105 889 010113 892 010145 893 010150 894 010154 897 010155 898 010162 900 010214 901 010215 902 010217 903 010226 904 010227 905 010255 908 010311 909 010322 910 010323 911 010345 913 010353 914 010355 915 010357 917 010360 918 010363 921 010412 922 010437 923 010465 924 010470 929 010525 930 010546 931 010547 934 010557 936 010602 937 010607 938 010611 941 010612 942 010614 943 010617 944 010630 945 010634 946 010642 948 010643 950 010674 951 010710 954 010714 955 010717 956 010720 957 010725 959 010726 961 010737 962 010761 964 010767 966 010771 967 011020 969 011023 971 011026 972 011033 973 011042 975 011043 976 011075 981 011143 983 011173 985 011222 988 011260 989 011262 990 011267 991 011270 992 011275 995 011276 997 011301 999 011303 1000 011305 1001 011306 1003 011311 1004 011316 1005 011325 1007 011326 1009 011357 1011 011360 1014 011361 1018 011375 1021 011377 1023 011401 1024 011446 1025 011450 1026 011452 1028 011453 1029 011457 1030 011461 1031 011467 1033 011500 1034 011501 1035 011502 1037 011511 1038 011513 1039 011516 1040 011523 1041 011524 1043 011557 1044 011572 1045 011573 1046 011615 1048 011623 1050 011625 1051 011652 1052 011674 1053 011676 1055 011677 1057 011710 1058 011732 1060 011740 1062 011742 1063 011772 1066 012035 1071 012127 1074 012155 1076 012172 1077 012202 1078 012204 1079 012216 1080 012246 1082 012254 1084 012303 1085 012304 1088 012327 1089 012341 1090 012343 1091 012345 1092 012352 1094 012353 1095 012355 1096 012357 1097 012367 1099 012370 1100 012372 1101 012374 1102 012401 1104 012402 1105 012404 1106 012406 1107 012417 1109 012420 1110 012422 1112 012452 1113 012457 1114 012500 1115 012527 1116 012532 1117 012533 1118 012544 1120 012545 1121 012547 1122 012567 1123 012574 1124 012576 1125 012577 1126 012607 1127 012610 1128 012612 1130 012616 1131 012617 1132 012624 1133 012630 1136 012632 1137 012651 1138 012652 1139 012657 1140 012664 1141 012674 1142 012704 1143 012714 1144 012724 1145 012734 1146 012744 1147 012760 1148 012770 1149 013000 1150 013010 1151 013020 1152 013034 1153 013044 1154 013054 1155 013064 1157 013073 1159 013076 1160 013077 1161 013130 1162 013137 1163 013141 1165 013142 1166 013145 1167 013166 1169 013202 1171 013203 1177 013211 1178 013214 1179 013215 1180 013217 1181 013224 1182 013244 1183 013245 1184 013250 1185 013252 1186 013273 1187 013312 1189 013315 1190 013316 1192 013317 1197 013325 1198 013326 1199 013330 1200 013331 1203 013332 1205 013340 1206 013342 1207 013343 1208 013344 1210 013345 1212 013353 1213 013355 1214 013357 1215 013360 1217 013361 1220 013367 1221 013377 1222 013404 1223 013406 1224 013420 1225 013450 1228 013477 1229 013502 1230 013504 1231 013506 1232 013507 1234 013510 1236 013516 1237 013523 1238 013525 1240 013526 1241 013530 1242 013532 1243 013533 1245 013534 1247 013542 1248 013544 1249 013546 1250 013550 1252 013551 1254 013557 1255 013561 1256 013562 1257 013564 1259 013565 1261 013573 1262 013575 1263 013577 1264 013601 1266 013602 1268 013610 1269 013612 1270 013614 1271 013616 1273 013617 1275 013621 1277 013627 1278 013631 1280 013632 1282 013641 1283 013644 1289 013656 1290 013665 1291 013670 1294 013734 1298 013770 1299 013772 1300 013773 1303 013774 1304 014001 1337 014002 1306 014003 1310 014005 1311 014010 1312 014021 1313 014027 1314 014036 1315 014044 1316 014050 1319 014053 1320 014064 1321 014073 1322 014112 1323 014116 1324 014121 1329 014124 1332 014126 1333 014150 1339 014171 1342 014177 1343 014221 1345 014267 1346 014272 1349 014273 1352 014301 1355 014307 1356 014330 1359 014376 1361 014401 1364 014402 1367 014410 1368 014414 1369 014436 1370 014441 1371 014443 1373 014444 1376 014452 1377 014456 1378 014500 1379 014503 1380 014505 1382 014506 1387 014514 1388 014523 1389 014544 1390 014556 1391 014561 1393 014562 1394 014566 1395 014616 1397 014617 1400 014625 1404 014655 1409 014663 1410 014674 1411 014715 1412 014727 1413 014732 1415 014733 1416 014737 1417 014767 1420 014770 1428 014776 1430 015006 1431 015011 1432 015014 1433 015035 1434 015055 1435 015062 1437 015063 1438 015065 1441 015067 1442 015076 1443 015117 1444 015136 1445 015142 1448 015143 1451 015151 1452 015163 1454 015176 1459 015177 1464 015205 1465 015207 1468 015254 1469 015300 1470 015306 1471 015342 1473 015343 1474 015347 1475 015402 1477 015403 1478 015410 1479 015443 1482 015444 1483 015453 1484 015466 1488 015506 1489 015517 1490 015522 1491 015530 1492 015532 1493 015537 1494 015542 1496 015543 1497 015552 1499 015555 1500 015560 1502 015564 1503 015566 1506 015567 1513 015575 1514 015577 1516 015603 1518 015617 1519 015631 1521 015632 1524 015646 1525 015656 1528 015661 1529 015675 1531 015676 1532 015677 1533 015702 1535 015704 1536 015713 1537 015726 1539 015730 1540 015736 1541 015741 1545 015742 1550 015750 1551 015752 1552 015771 1554 015777 1556 016001 1557 016006 1558 016027 1559 016041 1560 016062 1563 016075 1564 016101 1568 016102 1573 016110 1574 016114 1575 016120 1576 016142 1577 016145 1579 016147 1582 016156 1583 016200 1584 016230 1585 016233 1587 016235 1589 016240 1590 016262 1591 016301 1592 016312 1593 016314 1596 016315 1601 016316 1602 016345 1603 016346 1604 016353 1605 016373 1607 016416 1608 016421 1612 016422 1617 016424 1618 016446 1620 016461 1623 016477 1624 016502 1625 016514 1628 016526 1629 016531 1630 016534 1632 016600 1633 016611 1637 016642 1638 016654 1640 016721 1643 016735 1646 016763 ----------------------------------------------------------- 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