COMPILATION LISTING OF SEGMENT xforum_validate_trans_spec_ Compiled by: Multics PL/I Compiler, Release 29, of July 28, 1986 Compiled at: Honeywell Bull, Phx. Az., Sys-M Compiled on: 08/06/87 1021.9 mst Thu Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 10 11 /****^ HISTORY COMMENTS: 12* 1) change(85-01-24,Davids), approve(86-02-04,MCR7350), 13* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 14* Added the set_specified internal proc and its call. 15* 16* 85-02-13 Davids: Changed calling sequence of 17* xforum_help_line_$change and $push to include the new F3_message 18* argument. 19* 2) change(86-02-07,LJAdams), approve(86-02-18,MCR7350), 20* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 21* Added the lastref "lref" and restref "rref" options. 22* 3) change(87-04-15,LJAdams), approve(87-04-22,MCR7684), 23* audit(87-07-30,Blair), install(87-08-06,MR12.1-1065): 24* Changed to allow command_processor_ escapes. 25* END HISTORY COMMENTS */ 26 27 28 xforum_validate_trans_spec_: proc (P_xforum_meeting_info_ptr, P_spy_ptr, P_trans_spec, P_code); 29 30 /* 31* BEGIN DESCRIPTION 32* 33* function: 34* This procedure validates the transaction specifier supplied and either 35* returns a standard error code or updates the xforum_meeting_info 36* structure appropriately 37* 38* description of entry points: 39* xforum_validate_trans_spec: transaction validation occurs in phases. 40* First the specifier is checked to see if its the keyword "search" or "s" 41* if it is the search_for_string procedure is called. If not the specifier 42* is checked to see if it is nothing but numbers and spaces and there is 43* at least 1 space, if so its a set and the set_specified procedure is 44* called. These two types of specifiers where added to the code and it 45* was decided that this was the simplest approach instead of trying to 46* update the keyword tables. If the above two checks fail then 47* the characters are checked to be sure that there are only legal 48* characters. These are made up of the set of numerals, +, -, :, and the 49* letters that make up the (rest of the) keywords. 50* Next, the input spec is checked to see if an initial substring matches 51* any of the keywords that must appear alone, and if so a check is made to 52* be sure that the keyword does indeed appear alone. The trans spec is then 53* processed by setting the appropriate values and flags in the 54* xforum_meeting_info structure. 55* If the trans spec is not a keyword that must appear alone it is either 56* a range or an individual transaction. A subspecification is formed by 57* taking the characters before the ":" character and after the ":" 58* character. The internal proc verify_spec_string is called to verify these 59* subspecifications. 60* If the second subspec is null then the original spec did not include 61* the ":" character and did not specify a range. If a range is specified 62* a final check is made to be sure that the second subspec specifies a 63* higher transaction than the first subspec. 64* 65* description of internal procs: 66* verify_spec_string: This internal proc checks to be sure that the 67* subspecification of a range end point or of a single transaction is 68* valid. A subspec may be a number, keyword or a number,keyword+-number. 69* the subspec is first checked to see if its just a number. After the 70* transaction number identified by the subspec is determined a call to 71* forum_ is made to read the transaction. The purpose is to verify that the 72* transaction exits. If the transaction does not exist a call to com_err_ 73* is made with the error code returned by forum_. The error code is global 74* to verify_spec_string so that it can be tested when the reoutine returns. 75* 76* search_for_string: this procedure prompts the user to enter a string. 77* If all the flags are set to zero then there is only 1 comment selected. 78* If only 1 comment is selected then all the comments in the meeting will 79* be searched. This is done by saving the current comment index and setting 80* the all flag. If there are multiple comments (one of the flags is non 81* zero) then only those comments are serached. Messages are output 82* telling the user what comments are being searched and what string is 83* being looked for. A temp segment is obtained and the set_array structure 84* overlaid on it. Each comment that is found to contain the search string 85* is added to the set_array. If after all comments have been searched no 86* comments arte found then a message to that effect is output and the 87* currently selected comments does not change. This requires that if there 88* was originally only 1 comment selected the all flag be turned off and the 89* current value reset. If the old_current value is non-zero it means that 90* there was originally one one comment selected. If only 1 comment was 91* found with the search string it is treated as if the user specified 92* the comment directly, all the flags are turned off and the current 93* field set to that the located comment. If multiple comments were found 94* the temporary set array is copied over into the meeting_info set array. 95* A quit handler is set up to restore the original selected comments and 96* record that the user hit quit. The temp segment is release and the help 97* line restored right before the return - which the quit handler goes to. 98* 99* set_specified: this procedure pulls apart a sequence of comment numbers 100* separated by spaces. It tests to be sure that the comment exists and 101* records the number in a set_array. It also builds a string to be 102* displayed for the current comments:.If the indicated transaction does no 103* exist or has been deleted a message to that effect is output and the 104* index not put in the set_array. The rest of the indices are processed. If 105* no comments are selected a message to that effect is output. If only 1 106* comment is selected it is treated as if the user entered only the 107* number for the comment instead of a set. 108* 109* convert_to_number: This procedure is used to convert a string 110* representing a comment index into a number. The size condition is 111* trapped so that if the number is too large a meaningful error is output 112* instead of the size condition message. The number is converted into a 113* fixed bin (17,0) because that is what the transaction index parameter 114* in forum_$read_trans is declared as. The message indicates that the 115* input comment index does not exist. 116* 117* report_error: this procedure is used to report errors back to the user. 118* It first clears the bottom window so that the user will not get a more 119* prompt before the error message and so that the error message stands out. 120* Also for the forum error codes invalid_trans_idx, trans_deleted, 121* trans_reaped, and bad_trans_spec a standard message is output instead of 122* the message associated with the error code. This makes sure that the 123* word transaction does not appear and also that the message is a sentance. 124* 125* collect_spy_data: this procedure is used to collect information about the 126* users response to the prompt and about his use of the quit key. 127* 128* error: this procedure is used to singal xforum_fatal_error, It is called 129* only if there is some problem in getting the users response to the 130* prompt. There should never be a problem with this. 131* 132* known bugs: 133* 134* notes: 135* 84-12-13 Davids: The description of internal procs and entry points 136* probably needs to be updated. 137* history: 138* 139* 83-12-?? DBarker: original coded. 140* 141* 84-09-06 Davids: Added standard header. 142* 143* 84-09-11 Davids: Added check to be sure that the P_trans_spec is longer 144* than KETTAB1(i) before the substr on P_trans_spec is done. 145* 146* 84-10-25 Davids: Added code to free the forum_user_trans structure after 147* every call to xforum_trans. By not freeing the structures it is possible 148* to expand the system area so much that a RQO in the pdir occurs. 149* Modified the way that the last transaction is set. The code use to loop 150* from the current transaction to the next transaction until the call to 151* next failed. The last transaction found was the last transaction. It now 152* makes a call to forum_$forum_limits to get the upto date last_trans 153* and uses that. It also updates the info in the meeting_list structure. 154* 155* 84-10-29 Davids: Removed a free in the current section of 156* verify_spec_string that I added on 84-10-25. Since it is current there 157* was no call to xforum_trans to allocate a forum_user_trans structure 158* that has to be freed. 159* 160* 84-11-06 Davids: Added the internal procedure convert_to_number. Also 161* changed the internal automatic comment indices from fixed bin (35) to 162* fixed bin since this is what is needed by xforum_trans and ultimately 163* forum_. Changed error handling so that if the user specifies an 164* index that does not exist the message "Comment does not exist" 165* is output instead of "Specified transaction does not exist ". 166* 167* 84-11-15 Davids: Auditing changes: 1) Simplified the if-then-else 168* statements that handle the keywords to remove duplicated code. 2) Added 169* the "in clause" to the free statements. 3) Corrected messages to end in 170* puncuation. 4) Replaced numbers determining which key words were used 171* with named constants. 5) Corrected check for overlapping range spec so 172* that i:i will NOT kick out as an error. Other changes: 1) Replaced 173* transaction with comment in messages. 2) Put dcls in the standard format. 174* 175* 84-12-13 Davids: Added the procedure report_error. Changed all calls to 176* ioa_ and com_err_ to call report_error instead. 177* 178* 85-01-15 Davids: Added ltrim's to all occurences of char (sub1) so that 179* leading spaces are removed. 180* END DESCRIPTION 181**/ 182 183 /* PARAMETERS */ 184 185 dcl P_xforum_meeting_info_ptr ptr; 186 dcl P_spy_ptr ptr; 187 dcl P_trans_spec char (*); 188 dcl P_code fixed bin (35); 189 190 /* EXTERNAL STATIC */ 191 192 dcl iox_$user_io ptr ext static; 193 dcl forum_error_table_$bad_trans_spec fixed bin (35) ext static; 194 dcl forum_error_table_$invalid_trans_idx fixed bin (35) ext static; 195 dcl forum_error_table_$trans_deleted fixed bin (35) ext static; 196 dcl forum_error_table_$trans_reaped fixed bin (35) ext static; 197 198 /* ENTRIES */ 199 200 dcl com_err_$suppress_name entry () options (variable); 201 dcl cv_dec_ entry (char (*)) returns (fixed bin (35)); 202 dcl ioa_ entry () options (variable); 203 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 204 dcl release_temp_segment_ entry (char (*), ptr, fixed bin (35)); 205 dcl signal_ entry () options (variable); 206 dcl timer_manager_$sleep entry (fixed bin (71), bit (2)); 207 dcl window_$clear_window entry (ptr, fixed bin (35)); 208 dcl xforum_get_selected_trans$first entry (ptr, ptr, fixed bin (35)); 209 dcl xforum_get_selected_trans$next entry (ptr, ptr, fixed bin (35)); 210 dcl xforum_get_str_ entry (char(*) var, ptr, char(*), char(*), char(*) var, fixed bin(35)); 211 dcl xforum_help_line_$change entry (bit(8), char(*), char(*), char(*)); 212 dcl xforum_help_line_$pop entry options (variable); 213 dcl xforum_help_line_$push entry (bit(8), char(*), char(*), char(*)); 214 dcl xforum_trans_$read entry (fixed bin, ptr, fixed bin (35)); 215 dcl xforum_trans_$first_ref entry (fixed bin, ptr, fixed bin (35)); 216 dcl xforum_trans_$first_trans entry (ptr, fixed bin (35)); 217 dcl xforum_trans_$next_ref entry (fixed bin, ptr, fixed bin (35)); 218 dcl xforum_trans_$next_trans entry (fixed bin, ptr, fixed bin (35)); 219 dcl xforum_trans_$prev_ref entry (fixed bin, ptr, fixed bin (35)); 220 dcl xforum_trans_$last_ref entry (fixed bin, ptr, fixed bin (35)); 221 dcl xforum_trans_$prev_trans entry (fixed bin, ptr, fixed bin (35)); 222 dcl xforum_window_mgr$check_window_status entry options (variable); 223 224 /* CONDITIONS */ 225 226 dcl quit condition; 227 228 /* INTERNAL AUTOMATIC */ 229 230 dcl (sub1, sub2) char (40); 231 dcl (sub1n, sub2n) fixed bin; 232 dcl i fixed bin; 233 dcl range_specified bit (1) aligned; 234 dcl code fixed bin (35); 235 236 237 /* INTERNAL STATIC */ 238 239 dcl 01 xvts_xforum_error_info like xforum_error_info internal static; 240 241 /* CONSTANTS */ 242 243 dcl ( 244 ON bit (1) init ("1"b), 245 OFF bit (1) init ("0"b), 246 KEYTAB1 (15) char (8) var /* keywords that must appear alone */ 247 init ("allref", "aref", "firstref", "fref", "nextref", 248 "nref", "prevref", "pref", "lastref", "lref", "restref", "rref", "all", "a", "new"), 249 KEYTAB2 (10) char (7) var /* keywords that needn't appear alone */ 250 init ("first", "f", "prev", "p", "current", "c", 251 "next", "n", "last", "l"), 252 ALLREF fixed bin init (1), 253 AREF fixed bin init (2), 254 FIRSTREF fixed bin init (3), 255 FREF fixed bin init (4), 256 NEXTREF fixed bin init (5), 257 NREF fixed bin init (6), 258 PREVREF fixed bin init (7), 259 PREF fixed bin init (8), 260 LASTREF fixed bin init (9), 261 LREF fixed bin init (10), 262 RESTREF fixed bin init (11), 263 RREF fixed bin init (12), 264 ALL fixed bin init (13), 265 A fixed bin init (14), 266 NEW fixed bin init (15), 267 FIRST fixed bin init (1), 268 F fixed bin init (2), 269 PREV fixed bin init (3), 270 P fixed bin init (4), 271 CURRENT fixed bin init (5), 272 C fixed bin init (6), 273 LAST fixed bin init (9), 274 L fixed bin init (10) 275 ) internal static options (constant); 276 277 /* BUILTINS */ 278 279 dcl ( 280 addr, 281 after, 282 before, 283 char, 284 hbound, 285 index, 286 length, 287 ltrim, 288 null, 289 rtrim, 290 search, 291 string, 292 substr, 293 unspec, 294 verify 295 ) builtin; 296 297 /* BASED */ 298 299 dcl TRUE bit (1) based (addr (ON)); 300 dcl xforum_system_area area based (xforum_system_area_ptr); 301 302 303 /* INCLUDE FILES */ 304 1 1 /* START OF: forum_dcls.incl.pl1 * * * * * */ 1 2 1 3 dcl forum_$close_forum entry (fixed bin, fixed bin (35)); 1 4 dcl forum_$enter_trans entry (fixed bin, char (*), fixed bin, char (*), 1 5 bit (1) aligned, fixed bin, 1 6 fixed bin (35)); 1 7 dcl forum_$forum_info entry (char (*), char (*), char (*), 1 8 fixed bin (71), ptr, fixed bin (35)); 1 9 dcl forum_$forum_limits entry (fixed bin, fixed bin, fixed bin, 1 10 fixed bin, fixed bin, fixed bin, 1 11 bit(36) aligned, fixed bin (35)); 1 12 dcl forum_$get_forum_path entry (char (*), char (*), char (*), char (*), 1 13 fixed bin (35)); 1 14 dcl forum_$get_forum_path_idx entry (fixed bin, char (*), char (*), 1 15 fixed bin (35)); 1 16 dcl forum_$get_message entry (fixed bin, char (*), fixed bin (35)); 1 17 dcl forum_$get_transaction_map_idx entry (fixed bin, char (*), bit (*), fixed bin (35)); 1 18 dcl forum_$list_users_idx entry (fixed bin, ptr, ptr, fixed bin (35)); 1 19 dcl forum_$open_forum entry (char(*), char(*), fixed bin, 1 20 fixed bin (35)); 1 21 dcl forum_$read_trans entry (fixed bin, fixed bin, ptr, ptr, 1 22 fixed bin (35)); 1 23 dcl forum_$set_last_seen_idx entry (fixed bin, fixed bin, bit (1) aligned, 1 24 fixed bin (35)); 1 25 dcl forum_$set_seen_switch entry (fixed bin, char (*), fixed bin, 1 26 bit (1) aligned, fixed bin (35)); 1 27 dcl forum_$set_message entry (fixed bin, char (*), fixed bin (35)); 1 28 dcl forum_$set_switch entry (char (*), char (*), char (*), char (*), 1 29 bit (1) aligned, fixed bin (35)); 1 30 dcl forum_$set_switch_idx entry (fixed bin, char (*), char (*), 1 31 bit (1) aligned, fixed bin (35)); 1 32 dcl forum_$trans_ref_info entry (fixed bin, fixed bin, fixed bin, 1 33 fixed bin, fixed bin, bit (1) aligned, 1 34 fixed bin (35)); 1 35 1 36 /* END OF: forum_dcls.incl.pl1 * * * * * */ 305 306 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 */ 307 308 3 1 /* BEGIN INCLUDE FILE xforum_error_info 84-06-19 Davids */ 3 2 3 3 dcl 01 xforum_error_info based, 3 4 02 name char (32), 3 5 02 entry char (32), 3 6 02 doing char (100), 3 7 02 code fixed bin (35), 3 8 02 reason char (512); 3 9 3 10 /* END INCLUDE FILE xforum_error_info */ 309 310 4 1 /* START OF: xforum_meeting_info.incl.pl1 * * * * * */ 4 2 4 3 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(84-05-03,Davids), approve(84-05-03,MCR7350), 4 7* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 4 8* Changed the length of name from 20 characters to 32 characters. 4 9* Version 2 forum names can be 26 characters long (forum suffix) - 4 10* and a little extra incase version 3 uses a shorter suffix yet. 4 11* 4 12* 84-10-03 Davids: added the unread_count, next_unread, and 4 13* seen_map_ptr elements. Also the declaration for the 4 14* seen_map_string and seen_map. 4 15* 4 16* 85-01-24 Davids: added the set_array_ptr to the 4 17* xforum_meeting_info structure and the set_array structure and 4 18* SET_ARRAY_SPEC_LEN variable. 4 19* 2) change(86-02-17,LJAdams), approve(86-02-17,MCR7350), 4 20* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 4 21* Added restref flag. 4 22* END HISTORY COMMENTS */ 4 23 4 24 declare 1 xforum_meeting_info based (xforum_meeting_info_ptr), 4 25 2 name char (32), 4 26 2 lidx fixed bin, 4 27 2 idx fixed bin, 4 28 2 current fixed bin, 4 29 2 last_seen fixed bin, 4 30 2 first_trans fixed bin, 4 31 2 last_trans fixed bin, 4 32 2 new_trans fixed bin, 4 33 2 flags unal, 4 34 3 all bit (1), 4 35 3 allref bit (1), 4 36 3 restref bit (1), 4 37 3 new bit (1), 4 38 3 range bit (1), 4 39 3 set bit (1), 4 40 2 current_ref fixed bin, 4 41 2 low fixed bin, 4 42 2 high fixed bin, 4 43 2 trans_struct_ptr ptr, 4 44 2 next_unread fixed bin, 4 45 2 unread_count fixed bin, 4 46 2 seen_map_ptr ptr, 4 47 2 set_array_ptr ptr; 4 48 4 49 dcl seen_map_string bit (1000000) based; 4 50 dcl seen_map (1000000) bit (1) unaligned based; 4 51 4 52 dcl 01 set_array based (xforum_meeting_info.set_array_ptr), 4 53 02 number fixed bin, 4 54 02 spec char (80) varying, 4 55 02 index (100000); 4 56 4 57 dcl SET_ARRAY_SPEC_LEN fixed bin init (80) internal static options (constant); 4 58 4 59 /* END OF: xforum_meeting_info.incl.pl1 * * * * * */ 311 312 5 1 /* START OF: xforum_ptr_struct_.incl.pl1 * * * * * */ 5 2 5 3 declare 1 xforum_ptr_struct_ external static, 5 4 2 xforum_meeting_list_ptr ptr, 5 5 2 xforum_meeting_info_ptr ptr, 5 6 2 xforum_trans_array_ptr ptr, 5 7 2 xforum_system_area_ptr ptr; 5 8 5 9 /* END OF: xforum_ptr_struct_.incl.pl1 * * * * * */ 313 314 6 1 /* BEGIN INCLUDE FILE xforum_spy 84-06-19 NSDavids */ 6 2 6 3 6 4 6 5 /****^ HISTORY COMMENTS: 6 6* 1) change(85-01-01,Davids), approve(85-01-01,MCR7350), 6 7* audit(86-04-24,Gilcrease), install(86-04-24,MR12.0-1048): 6 8* Modified to include personalization and subject selection. 6 9* END HISTORY COMMENTS */ 6 10 6 11 6 12 dcl 01 spy based (spy_ptr), 6 13 02 version char (8), 6 14 02 user_name char (32), 6 15 02 date_time char (32), 6 16 02 args char (80), 6 17 02 eligible fixed bin, 6 18 02 attending fixed bin, 6 19 02 changed fixed bin, 6 20 02 count fixed bin, 6 21 02 choices (0 refer (count)), 6 22 03 at fixed bin, 6 23 03 choice char (10); 6 24 6 25 6 26 dcl spy_ptr ptr; 6 27 dcl SPY_VERSION_1 char (8) init ("spy_0001"); 6 28 6 29 dcl SPY_AT_1 fixed bin init (1) internal static options (constant); 6 30 /* At Executive Forum Main menu */ 6 31 dcl SPY_AT_2 fixed bin init (2) internal static options (constant); 6 32 /* Requesting Help */ 6 33 dcl SPY_AT_3 fixed bin init (3) internal static options (constant); 6 34 /* At General Help menu */ 6 35 dcl SPY_AT_4 fixed bin init (4) internal static options (constant); 6 36 /* At query for a meeting name to goto */ 6 37 dcl SPY_AT_5 fixed bin init (5) internal static options (constant); 6 38 /* At menu of meeting names */ 6 39 dcl SPY_AT_6 fixed bin init (6) internal static options (constant); 6 40 /* At query for a meeting name to resign from */ 6 41 dcl SPY_AT_7 fixed bin init (7) internal static options (constant); 6 42 /* At Attending Meeting menu */ 6 43 dcl SPY_AT_8 fixed bin init (8) internal static options (constant); 6 44 /* At replying to a transaction */ 6 45 dcl SPY_AT_9 fixed bin init (9) internal static options (constant); 6 46 /* At entering a new transaction */ 6 47 dcl SPY_AT_10 fixed bin init (10) internal static options (constant); 6 48 /* At query for a transaction specifier */ 6 49 dcl SPY_AT_11 fixed bin init (11) internal static options (constant); 6 50 /* At query to check for changed meetings */ 6 51 dcl SPY_AT_12 fixed bin init (12) internal static options (constant); 6 52 /* At Getting Started menu */ 6 53 dcl SPY_AT_13 fixed bin init (13) internal static options (constant); 6 54 /* Meeting list update query, change in number of search paths */ 6 55 dcl SPY_AT_14 fixed bin init (14) internal static options (constant); 6 56 /* Meeting list update query, change in search paths listed */ 6 57 dcl SPY_AT_15 fixed bin init (15) internal static options (constant); 6 58 /* Copy Comments file name query */ 6 59 dcl SPY_AT_16 fixed bin init (16) internal static options (constant); 6 60 /* At Personalization menu */ 6 61 dcl SPY_AT_17 fixed bin init (17) internal static options (constant); 6 62 /* Personalizing an item prompt */ 6 63 dcl SPY_AT_18 fixed bin init (18) internal static options (constant); 6 64 /* string search prompt for comment selection */ 6 65 dcl SPY_AT_19 fixed bin init (19) internal static options (constant); 6 66 /* subject selection */ 6 67 6 68 dcl SPY_LOCATION (19) char (20) varying init ( 6 69 "XForum Main menu", 6 70 "Requesting Help", 6 71 "General Help menu", 6 72 "Meeting to goto?", 6 73 "Meeting names menu", 6 74 "Meeting to resign?", 6 75 "Meeting menu", 6 76 "Repling", 6 77 "Talking", 6 78 "Trans. spec?", 6 79 "Check changed mtgs", 6 80 "Getting Started", 6 81 "List update, num", 6 82 "List update, list", 6 83 "Copy to file name", 6 84 "Personalizing menu", 6 85 "Personalizing prompt", 6 86 "String search prompt", 6 87 "Subject selection") internal static options (constant); 6 88 6 89 /* END INCLUDE FILE xforum_spy */ 315 316 7 1 /* START OF: xforum_windows.incl.pl1 * * * * * */ 7 2 7 3 /* structures for windows used by xforum - Deryk Barker January 1984 */ 7 4 7 5 dcl 1 xforum_windows aligned external static, 7 6 2 (status, menu, bottom, orig_user_io, help_line) aligned like xforum_window_info; 7 7 7 8 dcl 1 xforum_window_info, 7 9 2 iocb ptr, 7 10 2 position aligned like window_position_info; 7 11 8 1 /* BEGIN INCLUDE FILE ... window_control_info.incl.pl1 JRD */ 8 2 /* format: style3 */ 8 3 8 4 /* Modified 26 January 1982 by William York to add the set_more_handler 8 5* and reset_more_handler control orders. */ 8 6 /* Modified October 1982 by WMY to add set and get_token_characters, 8 7* set and get_more_prompt. */ 8 8 /* Modified February 1983 by WMY to add the line_editor_key_binding_info 8 9* structure. */ 8 10 /* Modified 30 September 1983 by Jon A. Rochlis to add the origin.column for 8 11* partial screen width windows. */ 8 12 /* Modified 9 October 1983 by JR to add version 1 window_edit_line_info. 8 13* This should be removed when window_info.incl.pl1 is created. */ 8 14 /* Modified 29 February 1984 by Barmar to add version 1 8 15* get_editor_key_bindings_info. */ 8 16 /* Modified 1 March 1984 by Barmar to add version 1 8 17* set_editor_key_bindings_info. */ 8 18 /* Modified 2 March 1984 by Barmar to upgrade to version 3 8 19* line_editor_key_bindings_info, which includes the name, description, and 8 20* info path */ 8 21 8 22 /* structure for the set_window_info and get_window_info 8 23* control orders. */ 8 24 8 25 dcl 1 window_position_info 8 26 based (window_position_info_ptr), 8 27 2 version fixed bin, 8 28 2 origin, 8 29 3 column fixed bin, 8 30 3 line fixed bin, 8 31 2 extent, 8 32 3 width fixed bin, 8 33 3 height fixed bin; 8 34 8 35 dcl (window_position_info_version, window_position_info_version_1) 8 36 fixed bin internal static init (1) options (constant); 8 37 dcl window_position_info_ptr 8 38 pointer; 8 39 8 40 /* structure for the set_window_status and get_window_status 8 41* control orders */ 8 42 8 43 declare window_status_info_ptr 8 44 pointer; 8 45 declare 1 window_status_info 8 46 aligned based (window_status_info_ptr), 8 47 2 version fixed bin, 8 48 2 status_string bit (36) aligned; /* string (window_status) */ 8 49 /* see window_status.incl.pl1 for the contents of this string */ 8 50 8 51 8 52 declare (window_status_version, window_status_version_1) 8 53 fixed bin internal static init (1) options (constant); 8 54 8 55 /* info structure for the set_more_responses and get_more_responses control 8 56* orders */ 8 57 8 58 8 59 dcl 1 more_responses_info 8 60 aligned based (more_responses_info_ptr), 8 61 2 version fixed bin, 8 62 2 n_yeses fixed bin, /* how many valid characters in the strings below */ 8 63 2 n_noes fixed bin, 8 64 2 yeses char (32) unaligned, 8 65 2 noes char (32) unaligned; 8 66 8 67 dcl (more_responses_info_version_1, more_responses_version) 8 68 fixed bin internal static init (1) options (constant); 8 69 dcl more_responses_info_ptr 8 70 pointer; 8 71 8 72 /* structure for the set_break_table and get_break_table 8 73* control orders */ 8 74 8 75 declare break_table_ptr pointer; 8 76 declare 1 break_table_info aligned based (break_table_ptr), 8 77 2 version fixed bin, 8 78 2 breaks (0:127) bit (1) unaligned; 8 79 8 80 declare (break_table_info_version, break_table_info_version_1) 8 81 fixed bin init (1) internal static options (constant); 8 82 8 83 declare 1 more_handler_info aligned based (more_handler_info_ptr), 8 84 2 version fixed bin, 8 85 2 flags unaligned, 8 86 3 old_handler_valid 8 87 bit(1), 8 88 3 pad bit(35), 8 89 2 more_handler entry (pointer, bit(1) aligned), 8 90 2 old_more_handler entry (pointer, bit(1) aligned); 8 91 8 92 declare more_handler_info_ptr pointer; 8 93 8 94 declare (more_handler_info_version, more_handler_info_version_3) 8 95 fixed bin internal static options (constant) init (3); 8 96 8 97 declare 1 token_characters_info aligned based (token_characters_info_ptr), 8 98 2 version char(8), 8 99 2 token_character_count 8 100 fixed bin, 8 101 2 token_characters 8 102 char (128) unaligned; 8 103 8 104 declare token_characters_info_ptr pointer; 8 105 8 106 declare token_characters_info_version_1 char(8) internal static options (constant) init ("wtci0001"); 8 107 8 108 declare 1 more_prompt_info aligned based (more_prompt_info_ptr), 8 109 2 version char(8), 8 110 2 more_prompt char(80); 8 111 8 112 declare more_prompt_info_ptr pointer; 8 113 8 114 declare more_prompt_info_version_1 char(8) static options (constant) init ("wsmp0001"); 8 115 8 116 /* Line editor stuff ... */ 8 117 8 118 dcl line_editor_key_binding_info_ptr 8 119 pointer; 8 120 8 121 dcl line_editor_binding_count 8 122 fixed bin; 8 123 dcl line_editor_longest_sequence 8 124 fixed bin; 8 125 /* For each binding, action defines what to do for that sequence. Constants 8 126* are defined in window_editor_values.incl.pl1. Only if action is set to 8 127* EXTERNAL_ROUTINE does the editor_routine entry variable get examined. */ 8 128 8 129 dcl 1 line_editor_key_binding_info 8 130 aligned based (line_editor_key_binding_info_ptr), 8 131 2 version char(8), 8 132 2 binding_count fixed bin, 8 133 2 longest_sequence fixed bin, 8 134 2 bindings (line_editor_binding_count refer 8 135 (line_editor_key_binding_info.binding_count)), 8 136 3 sequence char(line_editor_longest_sequence refer 8 137 (line_editor_key_binding_info.longest_sequence)) varying, 8 138 3 action fixed bin, 8 139 3 numarg_action fixed binary, 8 140 3 editor_routine entry (pointer, fixed bin(35)), 8 141 3 name char (64) varying unaligned, 8 142 3 description char (256) varying unaligned, 8 143 3 info_path unaligned, 8 144 4 info_dir char (168), 8 145 4 info_entry char (32); 8 146 8 147 8 148 dcl line_editor_key_binding_info_version_3 8 149 char(8) static options (constant) init ("lekbi003"); 8 150 8 151 dcl 1 get_editor_key_bindings_info aligned based (get_editor_key_bindings_info_ptr), 8 152 2 version char (8), 8 153 2 flags, 8 154 3 entire_state bit (1) unaligned, 8 155 3 mbz bit (35) unaligned, 8 156 2 key_binding_info_ptr ptr, 8 157 2 entire_state_ptr ptr; 8 158 8 159 dcl get_editor_key_bindings_info_ptr ptr; 8 160 dcl get_editor_key_bindings_info_version_1 char (8) int static options (constant) init ("gekbi_01"); 8 161 8 162 dcl 1 set_editor_key_bindings_info aligned 8 163 based (set_editor_key_bindings_info_ptr), 8 164 2 version char (8), 8 165 2 flags, 8 166 3 replace bit (1) unaligned, 8 167 3 update bit (1) unaligned, 8 168 3 mbz bit (34) unaligned, 8 169 2 key_binding_info_ptr ptr; 8 170 8 171 dcl set_editor_key_bindings_info_ptr ptr; 8 172 dcl set_editor_key_bindings_info_version_1 char (8) int static options (constant) init ("sekbi_01"); 8 173 8 174 /* This should be moved to window_info.incl.pl1 when that include file is 8 175* created. JR 2/1/84 */ 8 176 8 177 dcl 1 window_edit_line_info 8 178 based (window_edit_line_info_ptr), 8 179 2 version char (8), 8 180 2 line_ptr ptr, 8 181 2 line_length fixed bin (21); /* later we will hack initial cursor position, key bindings, etc. */ 8 182 8 183 dcl window_edit_line_info_version_1 8 184 char (8) static options (constant) init ("wedl0001"); 8 185 8 186 dcl window_edit_line_info_ptr 8 187 ptr; 8 188 8 189 /* END INCLUDE FILE window_control_info.incl.pl1 */ 7 12 7 13 7 14 /* END OF: xforum_windows.incl.pl1 * * * * * */ 317 318 9 1 /* BEGIN INCLUDE FILE xforum_prompts.incl.pl1 */ 9 2 9 3 9 4 /****^ HISTORY COMMENTS: 9 5* 1) change(87-04-13,LJAdams), approve(87-07-24,MCR7684), 9 6* audit(87-07-24,Blair), install(87-08-06,MR12.1-1065): 9 7* Created. 9 8* END HISTORY COMMENTS */ 9 9 9 10 dcl (BREAK_PROMPT char (34) init ("Press BREAK to return to the menu."), 9 11 COMMENTS_PROMPT char (40) init ("Which comment(s) do you wish to select? "), 9 12 COMMENT_PROMPT char (37) init ("Which comment do you wish to select? "), 9 13 FILE_PROMPT char (28) init ("Enter the name of the file: "), 9 14 FIRST_PROMPT char (80) init ("Enter the command and press RETURN (to return to Xforum just press RETURN):"), 9 15 RETURN_PROMPT char (46) init (" Press to continue"), 9 16 TEXT_PROMPT char (31) init ("Enter text to be searched for: ")) 9 17 internal static options (constant); 9 18 9 19 9 20 /* END INCLUDE FILE xforum_prompts.incl.pl1 */ 320 321 10 1 /* BEGIN INCLUDE FILE xforum_answers.incl.pl1 */ 10 2 10 3 10 4 /****^ HISTORY COMMENTS: 10 5* 1) change(87-04-13,LJAdams), approve(87-04-30,MCR7684), 10 6* audit(87-07-30,Blair), install(87-08-06,MR12.1-1065): 10 7* Created. 10 8* END HISTORY COMMENTS */ 10 9 10 10 dcl 1 answer_array, 10 11 2 N fixed bin, /* Number of acceptable answers; 0 = all */ 10 12 2 max_length fixed bin, /* max length user reply can be */ 10 13 2 answer (10) char (80) varying; 10 14 10 15 10 16 dcl ZERO fixed bin internal static options (constant) init (0), 10 17 ONE fixed bin internal static options (constant) init (1), 10 18 FOUR fixed bin internal static options (constant) init (4); 10 19 10 20 10 21 /* END INCLUDE FILE xforum_answers .incl.pl1 */ 322 323 324 11 1 /* BEGIN INCLUDE FILE xforum_help_infos.incl.pl1 */ 11 2 11 3 11 4 /****^ HISTORY COMMENTS: 11 5* 1) change(87-04-13,LJAdams), approve(87-07-24,MCR7684), 11 6* audit(87-07-24,Blair), install(87-08-06,MR12.1-1065): 11 7* Created. 11 8* END HISTORY COMMENTS */ 11 9 11 10 dcl (GETTING_STARTED_HELP char (27) init ("xforum_getting_started.info"), 11 11 PROMPT_HELP char (18) init ("xforum_prompt"), 11 12 FUNCTION_KEY_HELP char (25) init ("xforum_function_keys.info"), 11 13 MENU_OPTION_HELP char (23) init ("xforum_menu_option.info")) 11 14 internal static options (constant); 11 15 11 16 11 17 /* END INCLUDE FILE xforum_help_infos.incl.pl1 */ 325 326 327 328 P_code = 0; 329 forum_user_trans_ptr = null (); 330 331 if P_trans_spec = "search" | P_trans_spec = "s" 332 then do; 333 call search_for_string; 334 goto exit_xforum_validate_trans_spec; 335 end; 336 337 if ((verify (P_trans_spec, "0123456789 ") = 0) & (index (P_trans_spec, " ") ^= 0)) 338 then do; 339 call set_specified (P_trans_spec); 340 goto exit_xforum_validate_trans_spec; 341 end; 342 343 if verify (P_trans_spec, "0123456789+-:acefilnprstuvwx") ^= 0 344 then goto bad_trans_spec; 345 346 /* characters are alright at least */ 347 do i = 1 to hbound (KEYTAB1, 1); 348 if length (P_trans_spec) >= length (KEYTAB1 (i)) 349 then do; 350 if KEYTAB1 (i) = substr (P_trans_spec, 1, length (KEYTAB1 (i))) 351 then goto found_in_tab1; 352 end; 353 end; 354 355 goto not_in_tab1; 356 357 found_in_tab1: 358 if length (P_trans_spec) ^= length (KEYTAB1 (i)) 359 then goto bad_trans_spec; /* these kws must be alone */ 360 361 362 if i = ALLREF | i = AREF 363 then do; 364 if xforum_meeting_info.current = 0 365 then do; 366 P_code = forum_error_table_$bad_trans_spec; 367 call report_error (0, "^a incompatible with current comment specifier.", P_trans_spec); 368 goto exit_xforum_validate_trans_spec; 369 end; 370 unspec (xforum_meeting_info.flags) = "0"b; 371 xforum_meeting_info.allref = TRUE; 372 xforum_meeting_info.current_ref = xforum_meeting_info.current; 373 goto exit_xforum_validate_trans_spec; 374 end; 375 else 376 if i = RESTREF | i = RREF 377 then do; 378 if xforum_meeting_info.current = 0 379 then do; 380 P_code = forum_error_table_$bad_trans_spec; 381 call report_error (0, "^a incompatible with current comment specifier.", P_trans_spec); 382 goto exit_xforum_validate_trans_spec; 383 end; 384 unspec (xforum_meeting_info.flags) = "0"b; 385 xforum_meeting_info.restref = TRUE; 386 xforum_meeting_info.current_ref = xforum_meeting_info.current; 387 goto exit_xforum_validate_trans_spec; 388 end; 389 390 else 391 if i = ALL | i = A 392 then do; 393 unspec (xforum_meeting_info.flags) = "0"b; 394 xforum_meeting_info.all = TRUE; 395 goto exit_xforum_validate_trans_spec; 396 end; 397 else 398 if i = NEW 399 then do; 400 if xforum_meeting_info.last_seen ^< xforum_meeting_info.last_trans 401 then do; 402 P_code = forum_error_table_$bad_trans_spec; 403 call report_error (0, "There are no new comments.", ""); 404 goto exit_xforum_validate_trans_spec; 405 end; 406 unspec (xforum_meeting_info.flags) = "0"b; 407 xforum_meeting_info.new = TRUE; 408 goto exit_xforum_validate_trans_spec; 409 end; 410 else do; /* firstref | fref | nextref | nref | prevref | pref */ 411 /* lastref | lref */ 412 if xforum_meeting_info.current = 0 413 then do; 414 P_code = forum_error_table_$bad_trans_spec; 415 call report_error (0, "^a incompatible with current comment specifier.", P_trans_spec); 416 goto exit_xforum_validate_trans_spec; 417 end; 418 419 if i = FIRSTREF | i = FREF 420 then call xforum_trans_$first_ref (xforum_meeting_info.current, 421 forum_user_trans_ptr, code); 422 else 423 if i = NEXTREF | i = NREF 424 then call xforum_trans_$next_ref (xforum_meeting_info.current, 425 forum_user_trans_ptr, code); 426 else 427 if i = PREVREF | i = PREF 428 then call xforum_trans_$prev_ref (xforum_meeting_info.current, 429 forum_user_trans_ptr, code); 430 else 431 if i = LASTREF | i = LREF 432 then call xforum_trans_$last_ref (xforum_meeting_info.current, 433 forum_user_trans_ptr, code); 434 435 if code ^= 0 436 then do; 437 P_code = code; 438 call report_error (P_code, "^a", P_trans_spec); 439 goto exit_xforum_validate_trans_spec; 440 end; 441 unspec (xforum_meeting_info.flags) = "0"b; 442 xforum_meeting_info.current = forum_user_trans.trans_no; 443 free forum_user_trans in (xforum_system_area); 444 goto exit_xforum_validate_trans_spec; 445 end; 446 447 not_in_tab1: /* let's make some better checks */ 448 sub1 = before (P_trans_spec, ":"); 449 450 call verify_spec_string (sub1, sub1n); 451 if code ^= 0 then do; 452 P_code = code; 453 goto exit_xforum_validate_trans_spec; /* error messages printed by subr */ 454 end; 455 456 sub2 = after (P_trans_spec, ":"); 457 458 if sub2 = "" then 459 range_specified = OFF; 460 else do; 461 range_specified = ON; 462 463 call verify_spec_string (sub2, sub2n); 464 if code ^= 0 then do; 465 P_code = code; 466 goto exit_xforum_validate_trans_spec; 467 end; 468 end; 469 470 if range_specified 471 then do; /* check range validity */ 472 if sub2n < sub1n 473 then do; 474 P_code = forum_error_table_$bad_trans_spec; 475 call report_error (0, "Range specification overlaps ^a.", P_trans_spec); 476 goto exit_xforum_validate_trans_spec; 477 end; 478 479 unspec (xforum_meeting_info.flags) = "0"b; 480 481 xforum_meeting_info.flags.range = ON; 482 483 xforum_meeting_info.low = sub1n; 484 485 xforum_meeting_info.high = sub2n; 486 487 xforum_meeting_info.current = 0; 488 end; 489 else do; /* not range */ 490 unspec (xforum_meeting_info.flags) = "0"b; 491 492 xforum_meeting_info.current = sub1n; 493 end; 494 495 exit_xforum_validate_trans_spec: 496 return; 497 498 bad_trans_spec: 499 P_code = forum_error_table_$bad_trans_spec; 500 call report_error (0, "Invalid comment specification.", ""); 501 return; 502 503 verify_spec_string: proc (str, num); 504 505 dcl str char (*); 506 dcl num fixed bin; 507 508 dcl (sub1, sub2) char (40); 509 dcl (sub1n, sub2n) fixed bin; 510 dcl c char (1); 511 dcl vss_last_trans fixed bin; 512 dcl unused1 bit (36) aligned; 513 dcl vss_i fixed bin; 514 515 if verify (rtrim (str), "0123456789") = 0 then do; 516 /* numeric anyway */ 517 sub1 = str; 518 519 sub1n = convert_to_number (str); 520 521 call xforum_trans_$read (sub1n, forum_user_trans_ptr, code); 522 if code ^= 0 523 then do; 524 call report_error (code, "^a", str); 525 goto exit_verify_spec_string; 526 end; 527 else do; 528 num = sub1n; 529 free forum_user_trans in (xforum_system_area); 530 goto exit_verify_spec_string; 531 end; 532 end; /* not numeric - must be +|- */ 533 if search (str, "+-") ^= 0 534 then do; 535 c = substr (str, search (str, "+-"), 1); 536 sub1 = before (str, c); 537 sub2 = after (str, c); 538 end; 539 else do; 540 sub1 = str; 541 sub2 = ""; 542 end; 543 544 if verify (rtrim (sub2), "0123456789") ^= 0 then do; 545 code = forum_error_table_$bad_trans_spec; 546 call report_error (0, "Comment offsets must be numeric ^a.", str); 547 goto exit_verify_spec_string; 548 end; 549 550 sub2n = convert_to_number (sub2); 551 552 if verify (rtrim (sub1), "0123456789") = 0 then 553 sub1n = convert_to_number (sub1); 554 else do; /* need to find in KEYTAB2 */ 555 do i = 1 to hbound (KEYTAB2, 1); 556 if KEYTAB2 (i) = rtrim (sub1) then 557 goto found_in_tab2; 558 end; 559 560 goto bad_trans_spec; /* slightly naughty */ 561 562 found_in_tab2: 563 if i = FIRST | i = F 564 then do; 565 call xforum_trans_$first_trans (forum_user_trans_ptr, 566 code); 567 if code ^= 0 then do; 568 call report_error (code, "^a", ltrim (char (sub1))); 569 goto exit_verify_spec_string; 570 end; 571 572 sub1n = forum_user_trans.trans_no; 573 free forum_user_trans in (xforum_system_area); 574 end; 575 else 576 if i = CURRENT | i = C 577 then do; 578 if xforum_meeting_info.current = 0 then do; 579 code = forum_error_table_$bad_trans_spec; 580 call report_error (0, "^a incompatible with current comment specifier.", ltrim (char (sub1))); 581 goto exit_verify_spec_string; 582 end; 583 sub1n = xforum_meeting_info.current; 584 end; 585 else 586 if i = LAST | i = L 587 then do; 588 call forum_$forum_limits (xforum_meeting_info.idx, 589 ONLY_UNDELETED, 590 xforum_meeting_info.last_seen, 591 xforum_meeting_info.first_trans, 592 vss_last_trans, 593 xforum_meeting_info.new_trans, unused1, (0)); 594 595 if vss_last_trans > xforum_meeting_info.last_trans 596 then do; 597 do vss_i = xforum_meeting_info.last_trans + 1 to vss_last_trans; 598 xforum_meeting_info.seen_map_ptr -> seen_map (vss_i) = "0"b; 599 xforum_meeting_info.unread_count = xforum_meeting_info.unread_count + 1; 600 end; 601 if xforum_meeting_info.next_unread = -1 602 then xforum_meeting_info.next_unread = xforum_meeting_info.last_trans + 1; 603 xforum_meeting_info.last_trans = vss_last_trans; 604 end; 605 606 sub1n = vss_last_trans; 607 end; 608 else do; /* previous or next */ 609 if xforum_meeting_info.current = 0 610 then do; 611 if ^xforum_meeting_info.range 612 then do; /* range is ok */ 613 code = forum_error_table_$bad_trans_spec; 614 call report_error (0, "^a incompatible with current comment specifier.", ltrim (char (sub1))); 615 goto exit_verify_spec_string; 616 end; 617 end; 618 619 if i = PREV | i = P 620 then do; 621 if xforum_meeting_info.range 622 then call xforum_trans_$prev_trans (xforum_meeting_info.low, 623 forum_user_trans_ptr, code); 624 else call xforum_trans_$prev_trans (xforum_meeting_info.current, 625 forum_user_trans_ptr, code); 626 end; 627 else do; /* next */ 628 if xforum_meeting_info.range 629 then call xforum_trans_$next_trans (xforum_meeting_info.high, 630 forum_user_trans_ptr, code); 631 else call xforum_trans_$next_trans (xforum_meeting_info.current, 632 forum_user_trans_ptr, code); 633 end; 634 635 if code ^= 0 636 then do; 637 call report_error (code, "^a", ltrim (char (sub1))); 638 goto exit_verify_spec_string; 639 end; 640 641 sub1n = forum_user_trans.trans_no; 642 free forum_user_trans in (xforum_system_area); 643 end; 644 end; 645 646 if c = "+" then 647 num = sub1n + sub2n; 648 else num = sub1n - sub2n; 649 650 if num < 1 651 then do; /* can't have that */ 652 code = forum_error_table_$invalid_trans_idx; 653 call report_error (code, "", str); 654 goto exit_verify_spec_string; 655 end; 656 657 call xforum_trans_$read (num, forum_user_trans_ptr, code); 658 if code = 0 659 then free forum_user_trans in (xforum_system_area); 660 else call report_error (code, "^a", str); 661 662 exit_verify_spec_string: 663 return; 664 665 end verify_spec_string; 666 667 search_for_string: proc; 668 669 /* AUTOMATIC */ 670 671 dcl sfs_code fixed bin (35); 672 dcl sfs_old_current_comment fixed bin; 673 dcl sfs_reply char (256) varying; 674 dcl sfs_satisfies_search_ptr ptr; 675 dcl prompt char (256); 676 677 /* CONSTANT */ 678 679 dcl MAX_LEN fixed bin init (256) internal static options (constant); 680 681 /* EXTERNAL ENTRY */ 682 683 dcl error_table_$long_record 684 fixed bin(35) ext static; 685 686 687 xforum_meeting_info_ptr = P_xforum_meeting_info_ptr; 688 spy_ptr = P_spy_ptr; 689 sfs_old_current_comment = 0; 690 answer_array.N = 0; 691 answer_array.max_length = MAX_LEN; 692 693 on quit 694 begin; 695 call xforum_window_mgr$check_window_status; 696 call window_$clear_window (iox_$user_io, (0)); 697 call collect_spy_data (SPY_AT_18, "QUIT"); 698 if sfs_old_current_comment ^= 0 699 then do; 700 xforum_meeting_info.current = sfs_old_current_comment; 701 string (xforum_meeting_info.flags) = "0"b; 702 end; 703 goto exit_search_for_string; 704 end; 705 706 call window_$clear_window (iox_$user_io, (0)); 707 708 call xforum_help_line_$push ("0"b, "", "", "Press ? and RETURN:help BREAK:To leave current comments unchanged"); 709 710 prompt = TEXT_PROMPT; 711 get_search_string: 712 call xforum_get_str_ ((prompt), addr(answer_array), PROMPT_HELP, "search_spec", sfs_reply, sfs_code); 713 714 if sfs_code = error_table_$long_record 715 then do; 716 call ioa_ ("The search text can only be ^d characters - please reenter^/ (or press BREAK to return to menu).", MAX_LEN); 717 goto get_search_string; 718 end; 719 720 if length(sfs_reply) = 0 721 then do; 722 call collect_spy_data (SPY_AT_18, "RETURN"); 723 prompt = BREAK_PROMPT; 724 goto get_search_string; 725 end; 726 727 if string (xforum_meeting_info.flags) = "0"b 728 then do; 729 sfs_old_current_comment = xforum_meeting_info.current; 730 xforum_meeting_info.flags.all = "1"b; 731 end; 732 else sfs_old_current_comment = 0; 733 734 if xforum_meeting_info.flags.all 735 then call ioa_ ("^/Searching all comments in this meeting for the text ^a,^/ this may take a while", sfs_reply); 736 else call ioa_ ("^/Searching the currently selected comments for the text ^a,^/ this may take a while", sfs_reply); 737 738 call xforum_help_line_$change ("0"b, "", "To abort search and leave current comments unchanged", ""); 739 740 call get_temp_segment_ ("xforum_validate_trans_spec", sfs_satisfies_search_ptr, sfs_code); 741 if sfs_code ^= 0 742 then call error (sfs_code, "Could not get temp segment to hold comment indicies that satisfiy text search."); 743 744 sfs_satisfies_search_ptr -> set_array.number = 0; 745 sfs_satisfies_search_ptr -> set_array.spec = sfs_reply; 746 747 call xforum_get_selected_trans$first (xforum_meeting_info_ptr, forum_user_trans_ptr, sfs_code); 748 do while (sfs_code ^= forum_error_table_$invalid_trans_idx); 749 if sfs_code = 0 750 then do; 751 if index (forum_user_trans_ptr -> forum_user_trans.text, sfs_satisfies_search_ptr -> set_array.spec) ^= 0 752 then do; 753 sfs_satisfies_search_ptr -> set_array.number = sfs_satisfies_search_ptr -> set_array.number + 1; 754 sfs_satisfies_search_ptr -> set_array.index (sfs_satisfies_search_ptr -> set_array.number) = forum_user_trans_ptr -> forum_user_trans.trans_no; 755 end; 756 end; 757 call xforum_get_selected_trans$next (xforum_meeting_info_ptr, forum_user_trans_ptr, sfs_code); 758 end; 759 760 if sfs_satisfies_search_ptr -> set_array.number = 0 761 then do; 762 call ioa_ ("^/No comments contained the text ^a", sfs_reply); 763 P_code = forum_error_table_$bad_trans_spec; 764 if sfs_old_current_comment ^= 0 765 then do; 766 xforum_meeting_info.current = sfs_old_current_comment; 767 string (xforum_meeting_info.flags) = "0"b; 768 end; 769 end; 770 else if sfs_satisfies_search_ptr -> set_array.number = 1 771 then do; 772 xforum_meeting_info.current = sfs_satisfies_search_ptr -> set_array.index (1); 773 string (xforum_meeting_info.flags) = "0"b; 774 end; 775 else do; 776 string (xforum_meeting_info.flags) = "0"b; 777 xforum_meeting_info.flags.set = "1"b; 778 xforum_meeting_info.set_array_ptr -> set_array.number = sfs_satisfies_search_ptr -> set_array.number; 779 xforum_meeting_info.set_array_ptr -> set_array = sfs_satisfies_search_ptr -> set_array; 780 end; 781 782 exit_search_for_string: 783 call release_temp_segment_ ("xforum_validate_trans_spec", sfs_satisfies_search_ptr, (0)); 784 call xforum_help_line_$pop; 785 786 return; 787 788 end search_for_string; 789 790 set_specified: proc (ss_trans_spec); 791 792 /* PARAMETERS */ 793 794 dcl ss_trans_spec char (*); 795 796 /* AUTOMATIC */ 797 798 dcl ss_code fixed bin (35); 799 dcl ss_index fixed bin; 800 dcl ss_index_string char (10) varying; 801 dcl ss_trans_spec_temp char (500) varying; 802 803 804 805 806 807 set_array.number = 0; 808 set_array.spec = ""; 809 ss_trans_spec_temp = ltrim (rtrim (ss_trans_spec)); 810 do while (length (ss_trans_spec_temp) > 0); 811 ss_index_string = before (ss_trans_spec_temp, " "); 812 ss_trans_spec_temp = ltrim (after (ss_trans_spec_temp, " ")); 813 ss_index = convert_to_number ((ss_index_string)); 814 call xforum_trans_$read (ss_index, forum_user_trans_ptr, ss_code); 815 if ss_code = 0 816 then do; 817 free forum_user_trans in (xforum_system_area); 818 set_array.number = set_array.number + 1; 819 set_array.index (set_array.number) = ss_index; 820 if length (set_array.spec) + length (ss_index_string) + 1 <= SET_ARRAY_SPEC_LEN 821 then do; 822 set_array.spec = set_array.spec || ss_index_string; 823 set_array.spec = set_array.spec || " "; 824 end; 825 end; 826 else do; 827 if ss_code = forum_error_table_$trans_deleted | ss_code = forum_error_table_$trans_reaped 828 then call ioa_ ("Comment ^i has been deleted and will not be included in the set.", ss_index); 829 else call ioa_ ("Comment ^i does not exist and will not be included in the set.", ss_index); 830 call timer_manager_$sleep (3, "11"b); 831 end; 832 end; 833 834 if set_array.number = 0 835 then do; 836 call ioa_ ("^/No comments were selected."); 837 P_code = forum_error_table_$bad_trans_spec; 838 end; 839 else 840 if set_array.number = 1 841 then do; 842 string (xforum_meeting_info.flags) = "0"b; 843 xforum_meeting_info.current = set_array.index (1); 844 end; 845 else do; 846 string (xforum_meeting_info.flags) = "0"b; 847 xforum_meeting_info.flags.set = "1"b; 848 xforum_meeting_info.current = 0; 849 end; 850 851 return; 852 853 end set_specified; 854 855 (size): convert_to_number: proc (ctn_str) returns (fixed bin); 856 857 /* PARAMETERS */ 858 859 dcl ctn_str char (*); 860 861 /* AUTOMATIC */ 862 863 dcl ctn_i fixed bin; 864 865 /* CONDITIONS */ 866 867 dcl size condition; 868 869 on size 870 begin; 871 P_code = forum_error_table_$invalid_trans_idx; 872 call report_error (P_code, "", ctn_str); 873 goto exit_xforum_validate_trans_spec; 874 end; 875 876 ctn_i = cv_dec_ (ctn_str); 877 878 return (ctn_i); 879 880 end convert_to_number; 881 882 report_error: proc (re_code, re_message, re_data); 883 884 dcl re_code fixed bin (35); 885 dcl re_message char (*); 886 dcl re_data char (*); 887 888 call window_$clear_window (xforum_windows.bottom.iocb, (0)); 889 890 if re_code = forum_error_table_$invalid_trans_idx 891 then call ioa_ ("Comment ^a does not exist.", re_data); 892 else 893 if re_code = forum_error_table_$trans_deleted | re_code = forum_error_table_$trans_reaped 894 then call ioa_ ("Comment ^a has been deleted.", re_data); 895 else 896 if re_code = forum_error_table_$bad_trans_spec 897 then call ioa_ ("^a is not a valid comment specifier", re_data); 898 else 899 if re_code = 0 900 then call ioa_ (re_message, re_data); 901 else call com_err_$suppress_name (re_code, "", re_message, re_data); 902 903 return; 904 905 end report_error; 906 907 collect_spy_data: proc (csd_where, csd_response); 908 909 /* PARAMETERS */ 910 911 dcl csd_where fixed bin; 912 dcl csd_response char (*); 913 914 spy.count = spy.count + 1; 915 spy.choices (count).at = csd_where; 916 spy.choices (count).choice = csd_response; 917 918 return; 919 920 end collect_spy_data; 921 922 error: proc (e_code, e_reason); 923 924 /* PARAMETERS */ 925 926 dcl e_code fixed bin (35); 927 dcl e_reason char (*); 928 929 xvts_xforum_error_info.name = "xforum_validate_trans_spec_"; 930 xvts_xforum_error_info.entry = ""; 931 xvts_xforum_error_info.doing = ""; 932 xvts_xforum_error_info.code = e_code; 933 xvts_xforum_error_info.reason = e_reason; 934 935 call signal_ ("xforum_fatal_error", null (), addr (xvts_xforum_error_info), null ()); 936 937 end error; 938 939 end xforum_validate_trans_spec_; 940 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/06/87 1014.2 xforum_validate_trans_spec_.pl1 >special_ldd>install>MR12.1-1065>xforum_validate_trans_spec_.pl1 305 1 12/03/84 1241.4 forum_dcls.incl.pl1 >ldd>include>forum_dcls.incl.pl1 307 2 10/31/84 1115.4 forum_user_trans.incl.pl1 >ldd>include>forum_user_trans.incl.pl1 309 3 12/03/84 1241.6 xforum_error_info.incl.pl1 >ldd>include>xforum_error_info.incl.pl1 311 4 04/25/86 0859.6 xforum_meeting_info.incl.pl1 >ldd>include>xforum_meeting_info.incl.pl1 313 5 12/03/84 1241.6 xforum_ptr_struct_.incl.pl1 >ldd>include>xforum_ptr_struct_.incl.pl1 315 6 04/25/86 0859.6 xforum_spy.incl.pl1 >ldd>include>xforum_spy.incl.pl1 317 7 12/03/84 1241.6 xforum_windows.incl.pl1 >ldd>include>xforum_windows.incl.pl1 7-12 8 09/12/84 0916.7 window_control_info.incl.pl1 >ldd>include>window_control_info.incl.pl1 319 9 08/06/87 1007.2 xforum_prompts.incl.pl1 >special_ldd>install>MR12.1-1065>xforum_prompts.incl.pl1 322 10 08/06/87 1007.2 xforum_answers.incl.pl1 >special_ldd>install>MR12.1-1065>xforum_answers.incl.pl1 325 11 08/06/87 1007.2 xforum_help_infos.incl.pl1 >special_ldd>install>MR12.1-1065>xforum_help_infos.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. A constant fixed bin(17,0) initial dcl 243 ref 390 ALL constant fixed bin(17,0) initial dcl 243 ref 390 ALLREF constant fixed bin(17,0) initial dcl 243 ref 362 AREF constant fixed bin(17,0) initial dcl 243 ref 362 BREAK_PROMPT 000016 constant char(34) initial unaligned dcl 9-10 ref 723 C constant fixed bin(17,0) initial dcl 243 ref 575 CURRENT constant fixed bin(17,0) initial dcl 243 ref 575 F constant fixed bin(17,0) initial dcl 243 ref 562 FIRST constant fixed bin(17,0) initial dcl 243 ref 562 FIRSTREF constant fixed bin(17,0) initial dcl 243 ref 419 FREF constant fixed bin(17,0) initial dcl 243 ref 419 KEYTAB1 000066 constant varying char(8) initial array dcl 243 ref 347 348 350 350 357 KEYTAB2 000030 constant varying char(7) initial array dcl 243 ref 555 556 L constant fixed bin(17,0) initial dcl 243 ref 585 LAST constant fixed bin(17,0) initial dcl 243 ref 585 LASTREF constant fixed bin(17,0) initial dcl 243 ref 430 LREF constant fixed bin(17,0) initial dcl 243 ref 430 MAX_LEN 000000 constant fixed bin(17,0) initial dcl 679 set ref 691 716* N 000147 automatic fixed bin(17,0) level 2 dcl 10-10 set ref 690* NEW constant fixed bin(17,0) initial dcl 243 ref 397 NEXTREF constant fixed bin(17,0) initial dcl 243 ref 422 NREF constant fixed bin(17,0) initial dcl 243 ref 422 OFF constant bit(1) initial unaligned dcl 243 ref 458 ON constant bit(1) initial unaligned dcl 243 set ref 371 385 394 407 461 481 ONLY_UNDELETED 000176 constant fixed bin(17,0) initial dcl 2-24 set ref 588* P constant fixed bin(17,0) initial dcl 243 ref 619 PREF constant fixed bin(17,0) initial dcl 243 ref 426 PREV constant fixed bin(17,0) initial dcl 243 ref 619 PREVREF constant fixed bin(17,0) initial dcl 243 ref 426 PROMPT_HELP 000001 constant char(18) initial unaligned dcl 11-10 set ref 711* P_code parameter fixed bin(35,0) dcl 188 set ref 28 328* 366* 380* 402* 414* 437* 438* 452* 465* 474* 498* 763* 837* 871* 872* P_spy_ptr parameter pointer dcl 186 ref 28 688 P_trans_spec parameter char unaligned dcl 187 set ref 28 331 331 337 337 339* 343 348 350 357 367* 381* 415* 438* 447 456 475* P_xforum_meeting_info_ptr parameter pointer dcl 185 ref 28 687 RESTREF constant fixed bin(17,0) initial dcl 243 ref 375 RREF constant fixed bin(17,0) initial dcl 243 ref 375 SET_ARRAY_SPEC_LEN constant fixed bin(17,0) initial dcl 4-57 ref 820 SPY_AT_18 000027 constant fixed bin(17,0) initial dcl 6-63 set ref 697* 722* SPY_VERSION_1 000136 automatic char(8) initial unaligned dcl 6-27 set ref 6-27* TEXT_PROMPT 000006 constant char(31) initial unaligned dcl 9-10 ref 710 TRUE based bit(1) unaligned dcl 299 ref 371 385 394 407 addr builtin function dcl 279 ref 371 385 394 407 711 711 935 935 after builtin function dcl 279 ref 456 537 812 all 17 based bit(1) level 3 packed unaligned dcl 4-24 set ref 394* 730* 734 allref 17(01) based bit(1) level 3 packed unaligned dcl 4-24 set ref 371* answer_array 000147 automatic structure level 1 unaligned dcl 10-10 set ref 711 711 at 52 based fixed bin(17,0) array level 3 dcl 6-12 set ref 915* before builtin function dcl 279 ref 447 536 811 bottom 20 000356 external static structure level 2 dcl 7-5 c 000530 automatic char(1) unaligned dcl 510 set ref 535* 536 537 646 char builtin function dcl 279 ref 568 568 580 580 614 614 637 637 choice 53 based char(10) array level 3 packed unaligned dcl 6-12 set ref 916* choices 52 based structure array level 2 unaligned dcl 6-12 code 000130 automatic fixed bin(35,0) dcl 234 in procedure "xforum_validate_trans_spec_" set ref 419* 422* 426* 430* 435 437 451 452 464 465 521* 522 524* 545* 565* 567 568* 579* 613* 621* 624* 628* 631* 635 637* 652* 653* 657* 658 660* code 51 000010 internal static fixed bin(35,0) level 2 in structure "xvts_xforum_error_info" dcl 239 in procedure "xforum_validate_trans_spec_" set ref 932* com_err_$suppress_name 000274 constant entry external dcl 200 ref 901 count 51 based fixed bin(17,0) level 2 dcl 6-12 set ref 914* 914 915 916 csd_response parameter char unaligned dcl 912 ref 907 916 csd_where parameter fixed bin(17,0) dcl 911 ref 907 915 ctn_i 000100 automatic fixed bin(17,0) dcl 863 set ref 876* 878 ctn_str parameter char unaligned dcl 859 set ref 855 872* 876* current 12 based fixed bin(17,0) level 2 dcl 4-24 set ref 364 372 378 386 412 419* 422* 426* 430* 442* 487* 492* 578 583 609 624* 631* 700* 729 766* 772* 843* 848* current_ref 20 based fixed bin(17,0) level 2 dcl 4-24 set ref 372* 386* cv_dec_ 000276 constant entry external dcl 201 ref 876 doing 20 000010 internal static char(100) level 2 packed unaligned dcl 239 set ref 931* e_code parameter fixed bin(35,0) dcl 926 ref 922 932 e_reason parameter char unaligned dcl 927 ref 922 933 entry 10 000010 internal static char(32) level 2 packed unaligned dcl 239 set ref 930* error_table_$long_record 000360 external static fixed bin(35,0) dcl 683 ref 714 first_trans 14 based fixed bin(17,0) level 2 dcl 4-24 set ref 588* flags 17 based structure level 2 packed unaligned dcl 4-24 set ref 370* 384* 393* 406* 441* 479* 490* 701* 727 767* 773* 776* 842* 846* forum_$forum_limits 000352 constant entry external dcl 1-9 ref 588 forum_error_table_$bad_trans_spec 000264 external static fixed bin(35,0) dcl 193 ref 366 380 402 414 474 498 545 579 613 763 837 895 forum_error_table_$invalid_trans_idx 000266 external static fixed bin(35,0) dcl 194 ref 652 748 871 890 forum_error_table_$trans_deleted 000270 external static fixed bin(35,0) dcl 195 ref 827 892 forum_error_table_$trans_reaped 000272 external static fixed bin(35,0) dcl 196 ref 827 892 forum_user_trans based structure level 1 dcl 2-7 ref 443 529 573 642 658 817 forum_user_trans_ptr 000132 automatic pointer dcl 2-5 set ref 329* 419* 422* 426* 430* 442 443 521* 529 565* 572 573 621* 624* 628* 631* 641 642 657* 658 747* 751 754 757* 814* 817 get_temp_segment_ 000302 constant entry external dcl 203 ref 740 hbound builtin function dcl 279 ref 347 555 high 22 based fixed bin(17,0) level 2 dcl 4-24 set ref 485* 628* i 000126 automatic fixed bin(17,0) dcl 232 set ref 347* 348 350 350* 357 362 362 375 375 390 390 397 419 419 422 422 426 426 430 430 555* 556* 562 562 575 575 585 585 619 619 idx 11 based fixed bin(17,0) level 2 dcl 4-24 set ref 588* index builtin function dcl 279 in procedure "xforum_validate_trans_spec_" ref 337 751 index 26 based fixed bin(17,0) array level 2 in structure "set_array" dcl 4-52 in procedure "xforum_validate_trans_spec_" set ref 754* 772 819* 843 ioa_ 000300 constant entry external dcl 202 ref 716 734 736 762 827 829 836 890 892 895 898 iocb 20 000356 external static pointer level 3 dcl 7-5 set ref 888* iox_$user_io 000262 external static pointer dcl 192 set ref 696* 706* last_seen 13 based fixed bin(17,0) level 2 dcl 4-24 set ref 400 588* last_trans 15 based fixed bin(17,0) level 2 dcl 4-24 set ref 400 595 597 601 603* length builtin function dcl 279 ref 348 348 350 357 357 720 810 820 820 low 21 based fixed bin(17,0) level 2 dcl 4-24 set ref 483* 621* ltrim builtin function dcl 279 ref 568 568 580 580 614 614 637 637 809 812 max_length 1 000147 automatic fixed bin(17,0) level 2 dcl 10-10 set ref 691* name 000010 internal static char(32) level 2 packed unaligned dcl 239 set ref 929* new 17(03) based bit(1) level 3 packed unaligned dcl 4-24 set ref 407* new_trans 16 based fixed bin(17,0) level 2 dcl 4-24 set ref 588* next_unread 26 based fixed bin(17,0) level 2 dcl 4-24 set ref 601 601* null builtin function dcl 279 ref 329 935 935 935 935 num parameter fixed bin(17,0) dcl 506 set ref 503 528* 646* 648* 650 657* number based fixed bin(17,0) level 2 dcl 4-52 set ref 744* 753* 753 754 760 770 778* 778 807* 818* 818 819 834 839 prompt 000206 automatic char(256) unaligned dcl 675 set ref 710* 711 723* quit 000000 stack reference condition dcl 226 ref 693 range 17(04) based bit(1) level 3 packed unaligned dcl 4-24 set ref 481* 611 621 628 range_specified 000127 automatic bit(1) dcl 233 set ref 458* 461* 470 re_code parameter fixed bin(35,0) dcl 884 set ref 882 890 892 892 895 898 901* re_data parameter char unaligned dcl 886 set ref 882 890* 892* 895* 898* 901* re_message parameter char unaligned dcl 885 set ref 882 898* 901* reason 52 000010 internal static char(512) level 2 packed unaligned dcl 239 set ref 933* release_temp_segment_ 000304 constant entry external dcl 204 ref 782 restref 17(02) based bit(1) level 3 packed unaligned dcl 4-24 set ref 385* rtrim builtin function dcl 279 ref 515 544 552 556 809 search builtin function dcl 279 ref 533 535 seen_map based bit(1) array unaligned dcl 4-50 set ref 598* seen_map_ptr 30 based pointer level 2 dcl 4-24 ref 598 set 17(05) based bit(1) level 3 packed unaligned dcl 4-24 set ref 777* 847* set_array based structure level 1 unaligned dcl 4-52 set ref 779* 779 set_array_ptr 32 based pointer level 2 dcl 4-24 ref 778 779 807 808 818 818 819 819 820 822 822 823 823 834 839 843 sfs_code 000100 automatic fixed bin(35,0) dcl 671 set ref 711* 714 740* 741 741* 747* 748 749 757* sfs_old_current_comment 000101 automatic fixed bin(17,0) dcl 672 set ref 689* 698 700 729* 732* 764 766 sfs_reply 000102 automatic varying char(256) dcl 673 set ref 711* 720 734* 736* 745 762* sfs_satisfies_search_ptr 000204 automatic pointer dcl 674 set ref 740* 744 745 751 753 753 754 754 760 770 772 778 779 782* signal_ 000306 constant entry external dcl 205 ref 935 size 000102 stack reference condition dcl 867 ref 869 spec 1 based varying char(80) level 2 dcl 4-52 set ref 745* 751 808* 820 822* 822 823* 823 spy based structure level 1 unaligned dcl 6-12 spy_ptr 000134 automatic pointer dcl 6-26 set ref 688* 914 914 915 915 916 916 ss_code 000544 automatic fixed bin(35,0) dcl 798 set ref 814* 815 827 827 ss_index 000545 automatic fixed bin(17,0) dcl 799 set ref 813* 814* 819 827* 829* ss_index_string 000546 automatic varying char(10) dcl 800 set ref 811* 813 820 822 ss_trans_spec parameter char unaligned dcl 794 ref 790 809 ss_trans_spec_temp 000552 automatic varying char(500) dcl 801 set ref 809* 810 811 812* 812 str parameter char unaligned dcl 505 set ref 503 515 517 519* 524* 533 535 535 536 537 540 546* 653* 660* string builtin function dcl 279 set ref 701* 727 767* 773* 776* 842* 846* sub1 000502 automatic char(40) unaligned dcl 508 in procedure "verify_spec_string" set ref 517* 536* 540* 552 552* 556 568 568 580 580 614 614 637 637 sub1 000100 automatic char(40) unaligned dcl 230 in procedure "xforum_validate_trans_spec_" set ref 447* 450* sub1n 000526 automatic fixed bin(17,0) dcl 509 in procedure "verify_spec_string" set ref 519* 521* 528 552* 572* 583* 606* 641* 646 648 sub1n 000124 automatic fixed bin(17,0) dcl 231 in procedure "xforum_validate_trans_spec_" set ref 450* 472 483 492 sub2 000112 automatic char(40) unaligned dcl 230 in procedure "xforum_validate_trans_spec_" set ref 456* 458 463* sub2 000514 automatic char(40) unaligned dcl 508 in procedure "verify_spec_string" set ref 537* 541* 544 550* sub2n 000527 automatic fixed bin(17,0) dcl 509 in procedure "verify_spec_string" set ref 550* 646 648 sub2n 000125 automatic fixed bin(17,0) dcl 231 in procedure "xforum_validate_trans_spec_" set ref 463* 472 485 subject_length 22 based fixed bin(21,0) level 2 dcl 2-7 ref 443 529 573 642 658 751 817 substr builtin function dcl 279 ref 350 535 text based char level 2 packed unaligned dcl 2-7 ref 751 text_length 23 based fixed bin(21,0) level 2 dcl 2-7 ref 443 529 573 642 658 751 817 timer_manager_$sleep 000310 constant entry external dcl 206 ref 830 trans_no 14 based fixed bin(17,0) level 2 dcl 2-7 ref 442 572 641 754 unread_count 27 based fixed bin(17,0) level 2 dcl 4-24 set ref 599* 599 unspec builtin function dcl 279 set ref 370* 384* 393* 406* 441* 479* 490* unused1 000532 automatic bit(36) dcl 512 set ref 588* verify builtin function dcl 279 ref 337 343 515 544 552 vss_i 000533 automatic fixed bin(17,0) dcl 513 set ref 597* 598* vss_last_trans 000531 automatic fixed bin(17,0) dcl 511 set ref 588* 595 597 603 606 window_$clear_window 000312 constant entry external dcl 207 ref 696 706 888 window_position_info based structure level 1 unaligned dcl 8-25 xforum_error_info based structure level 1 unaligned dcl 3-3 xforum_get_selected_trans$first 000314 constant entry external dcl 208 ref 747 xforum_get_selected_trans$next 000316 constant entry external dcl 209 ref 757 xforum_get_str_ 000320 constant entry external dcl 210 ref 711 xforum_help_line_$change 000322 constant entry external dcl 211 ref 738 xforum_help_line_$pop 000324 constant entry external dcl 212 ref 784 xforum_help_line_$push 000326 constant entry external dcl 213 ref 708 xforum_meeting_info based structure level 1 unaligned dcl 4-24 xforum_meeting_info_ptr 2 000354 external static pointer level 2 dcl 5-3 set ref 364 370 371 372 372 378 384 385 386 386 393 394 400 400 406 407 412 419 422 426 430 441 442 479 481 483 485 487 490 492 578 583 588 588 588 588 595 597 598 599 599 601 601 601 603 609 611 621 621 624 628 628 631 687* 700 701 727 729 730 734 747* 757* 766 767 772 773 776 777 778 779 807 808 818 818 819 819 820 822 822 823 823 834 839 842 843 843 846 847 848 xforum_ptr_struct_ 000354 external static structure level 1 unaligned dcl 5-3 xforum_system_area based area(1024) dcl 300 ref 443 529 573 642 658 817 xforum_system_area_ptr 6 000354 external static pointer level 2 dcl 5-3 ref 443 529 573 642 658 817 xforum_trans_$first_ref 000332 constant entry external dcl 215 ref 419 xforum_trans_$first_trans 000334 constant entry external dcl 216 ref 565 xforum_trans_$last_ref 000344 constant entry external dcl 220 ref 430 xforum_trans_$next_ref 000336 constant entry external dcl 217 ref 422 xforum_trans_$next_trans 000340 constant entry external dcl 218 ref 628 631 xforum_trans_$prev_ref 000342 constant entry external dcl 219 ref 426 xforum_trans_$prev_trans 000346 constant entry external dcl 221 ref 621 624 xforum_trans_$read 000330 constant entry external dcl 214 ref 521 657 814 xforum_window_info 000140 automatic structure level 1 unaligned dcl 7-8 xforum_window_mgr$check_window_status 000350 constant entry external dcl 222 ref 695 xforum_windows 000356 external static structure level 1 dcl 7-5 xvts_xforum_error_info 000010 internal static structure level 1 unaligned dcl 239 set ref 935 935 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. COMMENTS_PROMPT internal static char(40) initial unaligned dcl 9-10 COMMENT_PROMPT internal static char(37) initial unaligned dcl 9-10 FILE_PROMPT internal static char(28) initial unaligned dcl 9-10 FIRST_PROMPT internal static char(80) initial unaligned dcl 9-10 FOUR internal static fixed bin(17,0) initial dcl 10-16 FUNCTION_KEY_HELP internal static char(25) initial unaligned dcl 11-10 GETTING_STARTED_HELP internal static char(27) initial unaligned dcl 11-10 INCLUDE_DELETED internal static fixed bin(17,0) initial dcl 2-24 MENU_OPTION_HELP internal static char(23) initial unaligned dcl 11-10 ONE internal static fixed bin(17,0) initial dcl 10-16 ONLY_DELETED internal static fixed bin(17,0) initial dcl 2-24 RETURN_PROMPT internal static char(46) initial unaligned dcl 9-10 SPY_AT_1 internal static fixed bin(17,0) initial dcl 6-29 SPY_AT_10 internal static fixed bin(17,0) initial dcl 6-47 SPY_AT_11 internal static fixed bin(17,0) initial dcl 6-49 SPY_AT_12 internal static fixed bin(17,0) initial dcl 6-51 SPY_AT_13 internal static fixed bin(17,0) initial dcl 6-53 SPY_AT_14 internal static fixed bin(17,0) initial dcl 6-55 SPY_AT_15 internal static fixed bin(17,0) initial dcl 6-57 SPY_AT_16 internal static fixed bin(17,0) initial dcl 6-59 SPY_AT_17 internal static fixed bin(17,0) initial dcl 6-61 SPY_AT_19 internal static fixed bin(17,0) initial dcl 6-65 SPY_AT_2 internal static fixed bin(17,0) initial dcl 6-31 SPY_AT_3 internal static fixed bin(17,0) initial dcl 6-33 SPY_AT_4 internal static fixed bin(17,0) initial dcl 6-35 SPY_AT_5 internal static fixed bin(17,0) initial dcl 6-37 SPY_AT_6 internal static fixed bin(17,0) initial dcl 6-39 SPY_AT_7 internal static fixed bin(17,0) initial dcl 6-41 SPY_AT_8 internal static fixed bin(17,0) initial dcl 6-43 SPY_AT_9 internal static fixed bin(17,0) initial dcl 6-45 SPY_LOCATION internal static varying char(20) initial array dcl 6-68 ZERO internal static fixed bin(17,0) initial dcl 10-16 alloc_subject_length automatic fixed bin(21,0) dcl 2-4 alloc_text_length automatic fixed bin(21,0) dcl 2-3 break_table_info based structure level 1 dcl 8-76 break_table_info_version internal static fixed bin(17,0) initial dcl 8-80 break_table_info_version_1 internal static fixed bin(17,0) initial dcl 8-80 break_table_ptr automatic pointer dcl 8-75 forum_$close_forum 000000 constant entry external dcl 1-3 forum_$enter_trans 000000 constant entry external dcl 1-4 forum_$forum_info 000000 constant entry external dcl 1-7 forum_$get_forum_path 000000 constant entry external dcl 1-12 forum_$get_forum_path_idx 000000 constant entry external dcl 1-14 forum_$get_message 000000 constant entry external dcl 1-16 forum_$get_transaction_map_idx 000000 constant entry external dcl 1-17 forum_$list_users_idx 000000 constant entry external dcl 1-18 forum_$open_forum 000000 constant entry external dcl 1-19 forum_$read_trans 000000 constant entry external dcl 1-21 forum_$set_last_seen_idx 000000 constant entry external dcl 1-23 forum_$set_message 000000 constant entry external dcl 1-27 forum_$set_seen_switch 000000 constant entry external dcl 1-25 forum_$set_switch 000000 constant entry external dcl 1-28 forum_$set_switch_idx 000000 constant entry external dcl 1-30 forum_$trans_ref_info 000000 constant entry external dcl 1-32 get_editor_key_bindings_info based structure level 1 dcl 8-151 get_editor_key_bindings_info_ptr automatic pointer dcl 8-159 get_editor_key_bindings_info_version_1 internal static char(8) initial unaligned dcl 8-160 line_editor_binding_count automatic fixed bin(17,0) dcl 8-121 line_editor_key_binding_info based structure level 1 dcl 8-129 line_editor_key_binding_info_ptr automatic pointer dcl 8-118 line_editor_key_binding_info_version_3 internal static char(8) initial unaligned dcl 8-148 line_editor_longest_sequence automatic fixed bin(17,0) dcl 8-123 message_type internal static fixed bin(17,0) initial dcl 2-22 more_handler_info based structure level 1 dcl 8-83 more_handler_info_ptr automatic pointer dcl 8-92 more_handler_info_version internal static fixed bin(17,0) initial dcl 8-94 more_handler_info_version_3 internal static fixed bin(17,0) initial dcl 8-94 more_prompt_info based structure level 1 dcl 8-108 more_prompt_info_ptr automatic pointer dcl 8-112 more_prompt_info_version_1 internal static char(8) initial unaligned dcl 8-114 more_responses_info based structure level 1 dcl 8-59 more_responses_info_ptr automatic pointer dcl 8-69 more_responses_info_version_1 internal static fixed bin(17,0) initial dcl 8-67 more_responses_version internal static fixed bin(17,0) initial dcl 8-67 seen_map_string based bit(1000000) unaligned dcl 4-49 set_editor_key_bindings_info based structure level 1 dcl 8-162 set_editor_key_bindings_info_ptr automatic pointer dcl 8-171 set_editor_key_bindings_info_version_1 internal static char(8) initial unaligned dcl 8-172 token_characters_info based structure level 1 dcl 8-97 token_characters_info_ptr automatic pointer dcl 8-104 token_characters_info_version_1 internal static char(8) initial unaligned dcl 8-106 user_trans_type internal static fixed bin(17,0) initial dcl 2-21 window_edit_line_info based structure level 1 unaligned dcl 8-177 window_edit_line_info_ptr automatic pointer dcl 8-186 window_edit_line_info_version_1 internal static char(8) initial unaligned dcl 8-183 window_position_info_ptr automatic pointer dcl 8-37 window_position_info_version internal static fixed bin(17,0) initial dcl 8-35 window_position_info_version_1 internal static fixed bin(17,0) initial dcl 8-35 window_status_info based structure level 1 dcl 8-45 window_status_info_ptr automatic pointer dcl 8-43 window_status_version internal static fixed bin(17,0) initial dcl 8-52 window_status_version_1 internal static fixed bin(17,0) initial dcl 8-52 NAMES DECLARED BY EXPLICIT CONTEXT. bad_trans_spec 001560 constant label dcl 498 ref 343 357 560 collect_spy_data 004630 constant entry internal dcl 907 ref 697 722 convert_to_number 004314 constant entry internal dcl 855 ref 519 550 552 813 error 004665 constant entry internal dcl 922 ref 741 exit_search_for_string 003662 constant label dcl 782 ref 703 exit_verify_spec_string 003040 constant label dcl 662 ref 525 530 547 569 581 615 638 654 exit_xforum_validate_trans_spec 001557 constant label dcl 495 set ref 334 340 368 373 382 387 395 404 408 416 439 444 453 466 476 873 found_in_tab1 000773 constant label dcl 357 ref 350 found_in_tab2 002205 constant label dcl 562 ref 556 get_search_string 003217 constant label dcl 711 ref 717 724 not_in_tab1 001410 constant label dcl 447 ref 355 report_error 004431 constant entry internal dcl 882 ref 367 381 403 415 438 475 500 524 546 568 580 614 637 653 660 872 search_for_string 003042 constant entry internal dcl 667 ref 333 set_specified 003715 constant entry internal dcl 790 ref 339 verify_spec_string 001611 constant entry internal dcl 503 ref 450 463 xforum_validate_trans_spec_ 000636 constant entry external dcl 28 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6506 7070 6016 6516 Length 7646 6016 362 542 470 252 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME xforum_validate_trans_spec_ 614 external procedure is an external procedure. verify_spec_string internal procedure shares stack frame of external procedure xforum_validate_trans_spec_. search_for_string 382 internal procedure enables or reverts conditions. on unit on line 693 84 on unit set_specified internal procedure shares stack frame of external procedure xforum_validate_trans_spec_. convert_to_number 84 internal procedure is called during a stack extension, and enables or reverts conditions. on unit on line 869 82 on unit report_error 120 internal procedure is called during a stack extension. collect_spy_data 66 internal procedure is called by several nonquick procedures. error internal procedure shares stack frame of internal procedure search_for_string. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 xvts_xforum_error_info xforum_validate_trans_spec_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME convert_to_number 000100 ctn_i convert_to_number search_for_string 000100 sfs_code search_for_string 000101 sfs_old_current_comment search_for_string 000102 sfs_reply search_for_string 000204 sfs_satisfies_search_ptr search_for_string 000206 prompt search_for_string xforum_validate_trans_spec_ 000100 sub1 xforum_validate_trans_spec_ 000112 sub2 xforum_validate_trans_spec_ 000124 sub1n xforum_validate_trans_spec_ 000125 sub2n xforum_validate_trans_spec_ 000126 i xforum_validate_trans_spec_ 000127 range_specified xforum_validate_trans_spec_ 000130 code xforum_validate_trans_spec_ 000132 forum_user_trans_ptr xforum_validate_trans_spec_ 000134 spy_ptr xforum_validate_trans_spec_ 000136 SPY_VERSION_1 xforum_validate_trans_spec_ 000140 xforum_window_info xforum_validate_trans_spec_ 000147 answer_array xforum_validate_trans_spec_ 000502 sub1 verify_spec_string 000514 sub2 verify_spec_string 000526 sub1n verify_spec_string 000527 sub2n verify_spec_string 000530 c verify_spec_string 000531 vss_last_trans verify_spec_string 000532 unused1 verify_spec_string 000533 vss_i verify_spec_string 000544 ss_code set_specified 000545 ss_index set_specified 000546 ss_index_string set_specified 000552 ss_trans_spec_temp set_specified THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc return_mac tra_ext_1 enable_op shorten_stack ext_entry_desc int_entry int_entry_desc size_check_fx1 set_chars_eis index_chars_eis op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_$suppress_name cv_dec_ forum_$forum_limits get_temp_segment_ ioa_ release_temp_segment_ signal_ timer_manager_$sleep window_$clear_window xforum_get_selected_trans$first xforum_get_selected_trans$next xforum_get_str_ xforum_help_line_$change xforum_help_line_$pop xforum_help_line_$push xforum_trans_$first_ref xforum_trans_$first_trans xforum_trans_$last_ref xforum_trans_$next_ref xforum_trans_$next_trans xforum_trans_$prev_ref xforum_trans_$prev_trans xforum_trans_$read xforum_window_mgr$check_window_status THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$long_record forum_error_table_$bad_trans_spec forum_error_table_$invalid_trans_idx forum_error_table_$trans_deleted forum_error_table_$trans_reaped iox_$user_io xforum_ptr_struct_ xforum_windows LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 28 000631 6 27 000651 328 000653 329 000655 331 000657 333 000671 334 000675 337 000676 339 000721 340 000731 343 000732 347 000744 348 000751 350 000757 353 000770 355 000772 357 000773 362 000775 364 001002 366 001007 367 001011 368 001036 370 001037 371 001041 372 001046 373 001047 375 001050 378 001054 380 001061 381 001063 382 001110 384 001111 385 001113 386 001120 387 001121 390 001122 393 001126 394 001133 395 001137 397 001140 400 001142 402 001150 403 001152 404 001176 406 001177 407 001201 408 001206 412 001207 414 001214 415 001216 416 001243 419 001244 422 001264 426 001303 430 001322 435 001340 437 001342 438 001344 439 001367 441 001370 442 001375 443 001400 444 001407 447 001410 450 001423 451 001426 452 001430 453 001432 456 001433 458 001454 461 001462 463 001464 464 001467 465 001471 466 001473 470 001474 472 001476 474 001501 475 001505 476 001532 479 001533 481 001540 483 001542 485 001544 487 001546 488 001547 490 001550 492 001555 495 001557 498 001560 500 001564 501 001610 503 001611 515 001622 517 001647 519 001653 521 001670 522 001703 524 001705 525 001731 528 001732 529 001735 530 001745 533 001746 535 001762 536 001766 537 001776 538 002014 540 002015 541 002020 544 002023 545 002046 546 002051 547 002076 550 002077 552 002113 555 002153 556 002161 558 002202 560 002204 562 002205 565 002212 567 002223 568 002225 569 002270 572 002272 573 002275 574 002304 575 002305 578 002311 579 002316 580 002320 581 002365 583 002367 584 002370 585 002371 588 002375 595 002425 597 002433 598 002443 599 002452 600 002453 601 002455 603 002466 606 002470 607 002471 609 002472 611 002477 613 002502 614 002504 615 002551 619 002553 621 002560 624 002576 626 002610 628 002611 631 002627 635 002641 637 002643 638 002706 641 002710 642 002713 646 002722 648 002732 650 002736 652 002741 653 002744 654 002765 657 002766 658 003001 660 003014 662 003040 667 003041 687 003047 688 003055 689 003060 690 003061 691 003062 693 003064 695 003100 696 003104 697 003116 698 003135 700 003140 701 003144 703 003146 706 003151 708 003163 710 003214 711 003217 714 003267 716 003273 717 003312 720 003313 722 003315 723 003334 724 003337 727 003340 729 003345 730 003347 731 003351 732 003352 734 003353 736 003376 738 003415 740 003446 741 003472 744 003502 745 003503 747 003514 748 003531 749 003536 751 003540 753 003554 754 003555 757 003560 758 003574 760 003575 762 003577 763 003616 764 003623 766 003625 767 003630 769 003632 770 003633 772 003635 773 003642 774 003644 776 003645 777 003651 778 003653 779 003654 782 003662 784 003707 786 003714 790 003715 807 003726 808 003732 809 003734 810 003771 811 003774 812 004011 813 004054 814 004100 815 004114 817 004116 818 004126 819 004132 820 004136 822 004144 823 004156 825 004165 827 004166 829 004213 830 004232 832 004247 834 004250 836 004255 837 004270 838 004274 839 004275 842 004277 843 004301 844 004304 846 004305 847 004307 848 004311 851 004312 855 004313 869 004327 871 004343 872 004352 873 004376 876 004401 878 004424 882 004430 888 004451 890 004463 892 004511 895 004536 898 004561 901 004601 903 004626 907 004627 914 004643 915 004646 916 004654 918 004664 922 004665 929 004676 930 004702 931 004705 932 004710 933 004713 935 004720 937 004752 ----------------------------------------------------------- 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