COMPILATION LISTING OF SEGMENT rdm_msg_requests_ Compiled by: Multics PL/I Compiler, Release 33d, of April 24, 1992 Compiled at: ACTC Technologies Inc. Compiled on: 92-04-24_1626.73_Fri_mdt Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1989 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(85-12-19,Herbst), approve(86-03-25,MCR7367), 16* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 17* Added $switch_on_request and $switch_off_request. 18* 2) change(86-02-27,Herbst), approve(86-03-25,MCR7367), 19* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 20* Changed print request to turn on message's seen switch. 21* 3) change(86-03-25,Herbst), approve(86-03-25,MCR7367), 22* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 23* Changed switch_type from fixed bin to char (4) aligned. 24* 4) change(86-04-01,Herbst), approve(86-04-01,MCR7367), 25* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 26* Moved request entry points here from rdm_message_mark_mgr_. 27* 5) change(86-04-04,Herbst), approve(86-04-04,MCR7367), 28* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 29* Fixed to print a blank line for "new" request if no new messages. 30* 6) change(86-04-28,Herbst), approve(86-04-28,MCR7367), 31* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 32* Changed error message for invalid request arguments. 33* 7) change(89-04-03,Lee), approve(89-05-10,MCR8104), 34* audit(89-07-18,LZimmerman), install(89-10-02,MR12.3-1079): 35* phx20589, Mail 502 - added test in perform_list_request to prevent the 36* current message from being changed if called as an active function. 37* 8) change(89-04-03,Lee), approve(89-05-10,MCR8104), 38* audit(89-07-18,LZimmerman), install(89-10-02,MR12.3-1079): 39* phx19118, Mail 459 - corrected direction of comparison in "-btt" test for 40* valid date/time range. 41* 9) change(89-04-07,Lee), approve(89-05-10,MCR8104), 42* audit(89-07-18,LZimmerman), install(89-10-02,MR12.3-1079): 43* phx19099, phx15783, Mail 457 - added message_type parameter to call to 44* rdm_message_mark_mgr_$mark_current_message to catch use of "-odl" with 45* the current message. 46* 10) change(89-04-11,Lee), approve(89-05-10,MCR8104), 47* audit(89-07-18,LZimmerman), install(89-10-02,MR12.3-1079): 48* phx18564, phx17540, phx17353, Mail 446 - the new entry set_new_current_msg 49* in rdm_mailbox_interface_ is now called when the current message is 50* changed to guarantee that the new current message is never a deleted 51* message; reformatting. 52* 11) change(91-12-17,Huen), approve(91-12-17,MCR8239), 53* audit(92-02-13,Zimmerman), install(92-04-24,MR12.5-1013): 54* Fix mail_362 - check for new messages after every request line. 55* END HISTORY COMMENTS */ 56 57 58 /* format: off */ 59 60 /* read_mail message handling requests: list, print, print_header, delete, retrieve 61* send_mail original message handling requests: list_original, print_original, print_original_header 62* forward original message handling sub-requests: print_original */ 63 64 /* Created: Late 1978 by W. Olin Sibert */ 65 /* Recoded: 30 December 1979 by W. Olin Sibert to add extended selection control arguments */ 66 /* Modified: 1 January 1980 by W. Olin Sibert to fix more bugs in setting the current message */ 67 /* Modified: 1 June 1980 by G. Palter address the following entries on the mail system error list -- 68* #0263: current message in read_mail should be set to the message being processed - thus, if an error occurs, the 69* current message will remain on which the error occured; 70* #0186: there should be a "print_original" request in send_mail which prints the message being replied to when 71* invoked by read_mail's "reply" request */ 72 /* Modified: 4 June 1980 by G. Palter address the following entries on the mail system error list -- 73* #0293: read_mail's "print" request accepts the "-delete" control argument, but doesn't honor it; 74* #0219: listing by "-redistributed_to" or "-recipient" faults because of the organization of forwarding fields */ 75 /* Modified: 3 November 1981 by W. Olin Sibert to fix bug #0219, again */ 76 /* Modified: 30 March 1982 by G. Palter to address the following entries on the mail system error list -- 77* #0299: the "-brief", "-long", and "-mseg_info" control arguments of the "list" request are not implemented; and 78* #0283: add "-line_length" and "-no_line_length" control arguments to the "list" request */ 79 /* Modified: 24 September 1982 by G. Palter to use the same control arguments to specify case sensitivity as the new 80* sort_seg command */ 81 /* Modified: 8 October 1982 by G. Palter to not reference sys_info$time_correction_constant */ 82 /* Modified: 28 October 1982 by G. Palter to make case insensitive searching work and to make the "-recipient" control 83* argument properly recognize regular expression matching */ 84 /* Modified: October 1983 by G. Palter as part of the conversion to the new mail system interface */ 85 86 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen */ 87 88 89 rdm_msg_requests_: 90 procedure (P_sci_ptr, P_rdm_invocation_ptr); 91 92 return; /* not an entry */ 93 94 95 /* Parameters */ 96 97 dcl P_sci_ptr pointer parameter; 98 dcl P_rdm_invocation_ptr pointer parameter; 99 100 101 /* Remaining declarations */ 102 103 dcl is_original_request bit (1) aligned; /* ON => invoked from send_mail or forward sub-request loop */ 104 dcl saved_rdm_sci_ptr pointer; 105 106 dcl msg_spec_array (msg_spec_array_size) fixed binary based (msg_spec_array_ptr); 107 dcl (msg_spec_array_size, msg_spec_count) fixed binary; 108 dcl msg_spec_array_ptr pointer; 109 110 dcl 1 class_sw aligned, /* which types of selection control arguments are given */ 111 2 time bit (1) unaligned, 112 2 subject bit (1) unaligned, 113 2 sender bit (1) unaligned, 114 2 recipient bit (1) unaligned; 115 dcl class_count (4) fixed binary; /* count of each class of selection */ 116 117 dcl 1 sel aligned based (sel_ptr), 118 2 class fixed binary, /* class of selection -- time, text, sender, recipient */ 119 2 type fixed binary, /* which header field for all but time selections */ 120 2 time_1 fixed binary (71), /* for date/time selections ... */ 121 2 time_2 fixed binary (71), /* ... */ 122 2 string, /* for string matching */ 123 3 regexp_sw bit (1) aligned, /* ON => string is a regular expression */ 124 3 str_lth fixed binary (21), 125 3 str_ptr pointer, 126 2 address_ptr pointer; /* -> address for address matching */ 127 dcl sel_ptr pointer; 128 129 dcl 1 selection_array aligned based (selection_array_ptr), 130 2 array (n_selections) like sel; 131 dcl selection_array_ptr pointer; 132 dcl n_selections fixed binary; 133 134 dcl 1 local_fmo aligned like format_message_options; 135 dcl formatting_mode fixed binary; 136 137 dcl (request, other_keyword_type) fixed binary; 138 dcl active_request bit (1) aligned; 139 dcl switch_type char (4) aligned; 140 dcl (argument_idx, first_argument, n_arguments) fixed binary; 141 dcl message_number_string char (8) varying; 142 dcl output_buffer char (256) varying; 143 dcl output_line_length fixed bin; 144 145 dcl return_value character (return_value_max_lth) varying based (return_value_ptr); 146 dcl return_value_ptr pointer; 147 dcl return_value_max_lth fixed binary (21); 148 149 dcl (argument, control_argument) character (argument_lth) based (argument_ptr); 150 dcl argument1 character (argument1_lth) based (argument1_ptr); 151 dcl argument2 character (argument2_lth) based (argument2_ptr); 152 dcl (argument_ptr, argument1_ptr, argument2_ptr) pointer; 153 dcl (argument_lth, argument1_lth, argument2_lth) fixed binary (21); 154 155 dcl msg_type fixed binary; 156 157 dcl (listing_header_sw, force_sw, delete_sw, reverse_sw, dl_rt_sw, case_independence_sw) bit (1) aligned; 158 dcl listing_line_length fixed binary; 159 160 dcl (first_message_idx, last_message_idx, message_idx_increment, message_idx, message_number) fixed binary; 161 dcl idx fixed binary; 162 163 dcl code fixed binary (35); 164 165 dcl iox_$user_output pointer external; 166 167 /* format: off */ 168 dcl (error_table_$badarg, error_table_$badopt, error_table_$noarg, error_table_$nomatch, 169 mlsys_et_$null_search_string, ssu_et_$unimplemented_request) 170 fixed binary (35) external; 171 172 dcl (LIST_REQUEST initial (1), 173 PRINT_REQUEST initial (2), 174 PRINT_HEADER_REQUEST initial (3), 175 DELETE_REQUEST initial (4), 176 RETRIEVE_REQUEST initial (5), 177 SWITCH_OFF_REQUEST initial (6), 178 SWITCH_ON_REQUEST initial (7), 179 OTHER_REQUEST initial (8)) 180 fixed binary static options (constant); 181 182 dcl (LIST_INFO initial ("1"b), 183 JUST_LIST_NUMBERS initial ("0"b)) 184 bit (1) aligned static options (constant); 185 186 dcl (SUBJECT_CLASS initial (1), 187 TIME_CLASS initial (2), 188 SENDER_CLASS initial (3), 189 RECIPIENT_CLASS initial (4)) 190 fixed binary static options (constant); 191 192 dcl (ONE_DAY initial (86399999999), /* one microsecond less than 1 day */ 193 BEGINNING_OF_TIME initial (86400000000), /* 1 January 1901 midnight GMT */ 194 END_OF_TIME initial (3122064000000000)) /* 1 January 1999 midnight GMT */ 195 fixed binary (71) static options (constant); 196 197 dcl (LOWERCASE initial ("abcdefghijklmnopqrstuvwxyz"), 198 UPPERCASE initial ("ABCDEFGHIJKLMNOPQRSTUVWXYZ")) 199 character (26) static options (constant); 200 /* format: on */ 201 202 dcl NULL_STRING character (1) static options (constant) initial (""); 203 dcl SLASH character (1) static options (constant) initial ("/"); 204 205 dcl convert_date_to_binary_ entry (character (*), fixed binary (71), fixed binary (35)); 206 dcl cu_$grow_stack_frame entry (fixed binary (19), pointer, fixed binary (35)); 207 dcl cv_dec_check_ entry (character (*), fixed binary (35)) returns (fixed binary (35)); 208 dcl decode_clock_value_$date_time 209 entry (fixed binary (71), fixed binary, fixed binary, fixed binary, fixed binary, fixed binary, fixed binary, 210 fixed binary (71), fixed binary, character (3), fixed binary (35)); 211 dcl encode_clock_value_ 212 entry (fixed binary, fixed binary, fixed binary, fixed binary, fixed binary, fixed binary, fixed binary (71), 213 fixed binary, character (3), fixed binary (71), fixed binary (35)); 214 dcl get_line_length_$switch entry (ptr, fixed bin (35)) returns (fixed bin); 215 dcl ioa_ entry () options (variable); 216 dcl iox_$control entry (pointer, character (*), pointer, fixed binary (35)); 217 dcl mail_system_$compare_addresses entry (pointer, pointer, fixed binary (35)) returns (bit (1) aligned); 218 dcl mail_system_$free_address entry (pointer, fixed binary (35)); 219 dcl mail_system_$set_message_switch entry (ptr, char (4) aligned, bit (1) aligned, fixed bin (35)); 220 dcl mlsys_utils_$parse_address_control_args entry (pointer, fixed binary, pointer, pointer, fixed binary (35)); 221 dcl mlsys_utils_$print_message entry (pointer, pointer, pointer, fixed binary (35)); 222 dcl mlsys_utils_$print_message_summary 223 entry (pointer, fixed binary, bit (1) aligned, fixed binary, pointer, fixed binary (35)); 224 dcl mlsys_utils_$print_message_summary_header entry (fixed binary, pointer, fixed binary (35)); 225 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 226 dcl rdm_mailbox_interface_$delete_messages entry (pointer, bit (1) aligned); 227 dcl rdm_mailbox_interface_$mark_processed entry (pointer, fixed binary); 228 dcl rdm_mailbox_interface_$mark_processed_and_acknowledge entry (pointer, fixed binary); 229 dcl rdm_mailbox_interface_$read_message entry (pointer, fixed binary, pointer, fixed binary (35)); 230 dcl rdm_mailbox_interface_$retrieve_messages entry (pointer); 231 dcl rdm_mailbox_interface_$set_new_current_msg entry (ptr, fixed binary, fixed binary); 232 dcl rdm_message_mark_mgr_$clear_marked_messages entry (pointer); 233 dcl rdm_message_mark_mgr_$do_request entry (ptr, ptr, fixed bin, fixed bin, bit (1) aligned); 234 dcl rdm_message_mark_mgr_$mark_all_messages entry (pointer, fixed binary); 235 dcl rdm_message_mark_mgr_$mark_current_message entry (pointer, fixed binary); 236 dcl rdm_message_mark_mgr_$mark_messages 237 entry (pointer, pointer, fixed binary (21), fixed binary, bit (*), fixed binary (35)); 238 dcl rdm_message_mark_mgr_$remark_original_messages entry (pointer); 239 dcl rdm_search_utils_$prepare_address_list_field_for_search 240 entry (pointer, fixed binary, character (*) varying, pointer, pointer, fixed binary (21)); 241 dcl rdm_search_utils_$prepare_message_references_field_for_search 242 entry (pointer, fixed binary, character (*) varying, pointer, pointer, fixed binary (21)); 243 dcl requote_string_ entry (char (*)) returns (char (*)); 244 dcl search_file_$silent 245 entry (pointer, fixed binary (21), fixed binary (21), pointer, fixed binary (21), fixed binary (21), 246 fixed binary (21), fixed binary (21), fixed binary (35)); 247 dcl ssu_$abort_line entry () options (variable); 248 dcl ssu_$arg_count entry (pointer, fixed binary); 249 dcl ssu_$arg_ptr entry (pointer, fixed binary, pointer, fixed binary (21)); 250 dcl ssu_$return_arg entry (pointer, fixed binary, bit (1) aligned, pointer, fixed binary (21)); 251 252 dcl cleanup condition; 253 254 dcl (addcharno, addr, convert, currentsize, divide, index, length, ltrim) builtin; 255 dcl (maxlength, min, null, rtrim, string, substr, translate, unspec, verify) builtin; 256 257 /* The "list" and "list_original" requests: displays a one line summary of the selected messages */ 258 259 list_request: 260 entry (P_sci_ptr, P_rdm_invocation_ptr); 261 262 request = LIST_REQUEST; 263 go to COMMON; 264 265 266 267 /* The "print" and "print_original" request: prints the specified messages. Control arguments are provided to select 268* several different levels of detail for the information displayed from the message header */ 269 270 print_request: 271 entry (P_sci_ptr, P_rdm_invocation_ptr); 272 273 request = PRINT_REQUEST; 274 go to COMMON; 275 276 277 /* The "print_header" and "print_original_header" requests: prints the message header of the specified messages. Control 278* arguments are provided to control the level of detail to be displayed */ 279 280 print_header_request: 281 entry (P_sci_ptr, P_rdm_invocation_ptr); 282 283 request = PRINT_HEADER_REQUEST; 284 go to COMMON; 285 286 287 /* The "delete" request: marks the specified messages for deletion when upon exit from read_mail */ 288 289 delete_request: 290 entry (P_sci_ptr, P_rdm_invocation_ptr); 291 292 request = DELETE_REQUEST; 293 go to COMMON; 294 295 296 /* The "retrieve" request: unmarks the specified messages so they will not be deleted upon exit from read_mail */ 297 298 retrieve_request: 299 entry (P_sci_ptr, P_rdm_invocation_ptr); 300 301 request = RETRIEVE_REQUEST; 302 go to COMMON; 303 304 305 /* The "switch_off" request: turns off a specified per-message switch */ 306 307 switch_off_request: 308 entry (P_sci_ptr, P_rdm_invocation_ptr); 309 310 request = SWITCH_OFF_REQUEST; 311 go to COMMON; 312 313 314 /* The "switch_on" request: turns on a specified per-message switch */ 315 316 switch_on_request: 317 entry (P_sci_ptr, P_rdm_invocation_ptr); 318 319 request = SWITCH_ON_REQUEST; 320 go to COMMON; 321 322 all_request: 323 entry (P_sci_ptr, P_rdm_invocation_ptr); 324 325 request = OTHER_REQUEST; 326 other_keyword_type = ALL_KEYWORD; 327 go to COMMON; 328 329 first_request: 330 entry (P_sci_ptr, P_rdm_invocation_ptr); 331 332 request = OTHER_REQUEST; 333 other_keyword_type = FIRST_KEYWORD; 334 go to COMMON; 335 336 last_request: 337 entry (P_sci_ptr, P_rdm_invocation_ptr); 338 339 request = OTHER_REQUEST; 340 other_keyword_type = LAST_KEYWORD; 341 go to COMMON; 342 343 previous_request: 344 entry (P_sci_ptr, P_rdm_invocation_ptr); 345 346 request = OTHER_REQUEST; 347 other_keyword_type = PREVIOUS_KEYWORD; 348 go to COMMON; 349 350 next_request: 351 entry (P_sci_ptr, P_rdm_invocation_ptr); 352 353 request = OTHER_REQUEST; 354 other_keyword_type = NEXT_KEYWORD; 355 go to COMMON; 356 357 current_request: 358 entry (P_sci_ptr, P_rdm_invocation_ptr); 359 360 request = OTHER_REQUEST; 361 other_keyword_type = CURRENT_KEYWORD; 362 go to COMMON; 363 364 seen_request: 365 entry (P_sci_ptr, P_rdm_invocation_ptr); 366 367 request = OTHER_REQUEST; 368 other_keyword_type = SEEN_KEYWORD; 369 go to COMMON; 370 371 unseen_request: 372 entry (P_sci_ptr, P_rdm_invocation_ptr); 373 374 request = OTHER_REQUEST; 375 other_keyword_type = UNSEEN_KEYWORD; 376 go to COMMON; 377 378 new_request: 379 entry (P_sci_ptr, P_rdm_invocation_ptr); 380 381 request = OTHER_REQUEST; 382 other_keyword_type = NEW_KEYWORD; 383 go to COMMON; 384 385 first_seen_request: 386 entry (P_sci_ptr, P_rdm_invocation_ptr); 387 388 request = OTHER_REQUEST; 389 other_keyword_type = FIRST_SEEN_KEYWORD; 390 go to COMMON; 391 392 first_unseen_request: 393 entry (P_sci_ptr, P_rdm_invocation_ptr); 394 395 request = OTHER_REQUEST; 396 other_keyword_type = FIRST_UNSEEN_KEYWORD; 397 go to COMMON; 398 399 last_seen_request: 400 entry (P_sci_ptr, P_rdm_invocation_ptr); 401 402 request = OTHER_REQUEST; 403 other_keyword_type = LAST_SEEN_KEYWORD; 404 go to COMMON; 405 406 last_unseen_request: 407 entry (P_sci_ptr, P_rdm_invocation_ptr); 408 409 request = OTHER_REQUEST; 410 other_keyword_type = LAST_UNSEEN_KEYWORD; 411 go to COMMON; 412 413 previous_seen_request: 414 entry (P_sci_ptr, P_rdm_invocation_ptr); 415 416 request = OTHER_REQUEST; 417 other_keyword_type = PREVIOUS_SEEN_KEYWORD; 418 go to COMMON; 419 420 previous_unseen_request: 421 entry (P_sci_ptr, P_rdm_invocation_ptr); 422 423 request = OTHER_REQUEST; 424 other_keyword_type = PREVIOUS_UNSEEN_KEYWORD; 425 go to COMMON; 426 427 next_seen_request: 428 entry (P_sci_ptr, P_rdm_invocation_ptr); 429 430 request = OTHER_REQUEST; 431 other_keyword_type = NEXT_SEEN_KEYWORD; 432 go to COMMON; 433 434 next_unseen_request: 435 entry (P_sci_ptr, P_rdm_invocation_ptr); 436 437 request = OTHER_REQUEST; 438 other_keyword_type = NEXT_UNSEEN_KEYWORD; 439 go to COMMON; 440 441 COMMON: 442 call setup_request (); /* set up common defaults */ 443 444 on condition (cleanup) call cleanup_request (); 445 446 rdm_invocation.sci_ptr = P_sci_ptr; /* avoids aborting the entire reply/forward accidently */ 447 448 if request = RETRIEVE_REQUEST then /* retrieve request operates on deleted messages only */ 449 msg_type = ONLY_DELETED_MESSAGES; 450 else msg_type = NON_DELETED_MESSAGES; 451 452 dl_rt_sw = (request = DELETE_REQUEST) | (request = RETRIEVE_REQUEST); 453 /* delete and retrieve don't accept -idl/-odl/-ondl */ 454 455 if (request = PRINT_REQUEST) | (request = PRINT_HEADER_REQUEST) then do; 456 local_fmo.version = FORMAT_MESSAGE_OPTIONS_VERSION_1; 457 local_fmo.line_length = 0; /* ... use the terminal's line length */ 458 if request = PRINT_REQUEST then do; /* ... print: use default format specified to read_mail */ 459 formatting_mode = rdm_invocation.print_options.formatting_mode; 460 local_fmo.include_body = "1"b; 461 end; 462 else do; /* ... print_header: use default format by default */ 463 formatting_mode = DEFAULT_FORMATTING_MODE; 464 local_fmo.include_body = "0"b; 465 end; 466 end; 467 468 else if (request = LIST_REQUEST) then do; 469 listing_header_sw = "1"b; /* default is to print header line */ 470 listing_line_length = 0; /* ... and to use the terminal's line length */ 471 end; 472 473 /* Mail 362: Should not check for new messages before list and print request */ 474 475 /* Scan the request's arguments */ 476 477 if request = SWITCH_OFF_REQUEST | request = SWITCH_ON_REQUEST then do; 478 if n_arguments < 1 then call ssu_$abort_line (P_sci_ptr, error_table_$noarg, "No switch type specified."); 479 call ssu_$arg_ptr (P_sci_ptr, 1, argument_ptr, argument_lth); 480 if (argument = "seen") then 481 switch_type = PER_MESSAGE_SEEN_SWITCH_TYPE; 482 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, "Invalid switch type ^a", argument); 483 first_argument = 2; 484 end; 485 else first_argument = 1; 486 487 call process_arguments (); 488 489 class_sw.time = (class_count (TIME_CLASS) ^= 0); /* determine which selection control arguments were used */ 490 class_sw.subject = (class_count (SUBJECT_CLASS) ^= 0); 491 class_sw.sender = (class_count (SENDER_CLASS) ^= 0); 492 class_sw.recipient = (class_count (RECIPIENT_CLASS) ^= 0); 493 494 495 /* Determine which messages are selected: If there are message specifiers, process them to get the initial set of 496* eligible messages and then apply the selection control arguments, if any. If there are no message specifiers but there 497* are selection control arguments, mark all messages as eligible and apply the control arguments. If there are no 498* message specifiers and no selection control arguments, the list request defaults to all messages, the *_original 499* requests default to those messages being processed by the reply/forward request, and the retrieve request aborts as it 500* requires some specifier */ 501 502 if msg_spec_count = 0 then /* no message specifiers */ 503 if is_original_request & (string (class_sw) = ""b) then 504 call rdm_message_mark_mgr_$remark_original_messages (rdm_invocation_ptr); 505 506 else if request = LIST_REQUEST then 507 call rdm_message_mark_mgr_$mark_all_messages (rdm_invocation_ptr, msg_type); 508 509 else if request = RETRIEVE_REQUEST then /* must have some type of specification ... */ 510 if string (class_sw) = ""b then /* ... and no selection control arguments */ 511 call ssu_$abort_line (P_sci_ptr, error_table_$noarg, 512 "At least one message specifier is required for this request."); 513 else call rdm_message_mark_mgr_$mark_all_messages (rdm_invocation_ptr, msg_type); 514 515 else if request = OTHER_REQUEST then /* all, first, seen, first_seen, etc. */ 516 call rdm_message_mark_mgr_$do_request (P_sci_ptr, rdm_invocation_ptr, other_keyword_type, msg_type, 517 reverse_sw); 518 519 else do; /* all other requests ... */ 520 if string (class_sw) = ""b then 521 call rdm_message_mark_mgr_$mark_current_message (rdm_invocation_ptr, msg_type); 522 /* phx19099 RL - usage of "-odl" with current will be caught during marking */ 523 else call rdm_message_mark_mgr_$mark_all_messages (rdm_invocation_ptr, msg_type); 524 end; 525 526 else call process_msg_specs (); /* process the message specifiers */ 527 528 if (string (class_sw) ^= ""b) & case_independence_sw then call make_lowercase_select_strings (); 529 /* user wants case independence: use lower-case */ 530 531 if string (class_sw) ^= ""b then /* there are other selections to be performed */ 532 call process_selections (marked_chain.n_messages); 533 534 if marked_chain.n_messages = 0 & request ^= OTHER_REQUEST then 535 call ssu_$abort_line (P_sci_ptr, 0, "No messages selected."); 536 537 538 /* Perform the actual request */ 539 540 if reverse_sw then do; /* process them in the opposite of the order marked */ 541 first_message_idx = marked_chain.n_messages; 542 last_message_idx = 1; 543 message_idx_increment = -1; 544 end; 545 else do; /* process them in the order makred */ 546 first_message_idx = 1; 547 last_message_idx = marked_chain.n_messages; 548 message_idx_increment = 1; 549 end; 550 551 if request = LIST_REQUEST then call perform_list_request (LIST_INFO); 552 553 else if (request = PRINT_REQUEST) | (request = PRINT_HEADER_REQUEST) then do; 554 call perform_printing_request (); 555 if delete_sw then /* ... delete them after printing */ 556 call rdm_mailbox_interface_$delete_messages (rdm_invocation_ptr, "0"b); 557 end; 558 559 else if request = DELETE_REQUEST then 560 call rdm_mailbox_interface_$delete_messages (rdm_invocation_ptr, force_sw); 561 562 else if request = RETRIEVE_REQUEST then call rdm_mailbox_interface_$retrieve_messages (rdm_invocation_ptr); 563 564 else if request = SWITCH_OFF_REQUEST | request = SWITCH_ON_REQUEST then call set_switch (P_sci_ptr); 565 566 else if request = OTHER_REQUEST then call perform_list_request (JUST_LIST_NUMBERS); 567 568 call cleanup_request (); 569 570 return; 571 572 /* The "mailbox" request: returns/prints the pathname of the mailbox being examined by read_mail */ 573 574 mailbox_request: 575 entry (P_sci_ptr, P_rdm_invocation_ptr); 576 577 rdm_invocation_ptr = P_rdm_invocation_ptr; 578 579 call ssu_$return_arg (P_sci_ptr, n_arguments, active_request, return_value_ptr, return_value_max_lth); 580 581 if n_arguments > 0 then call ssu_$abort_line (P_sci_ptr, 0, "No arguments are allowed."); 582 583 mailbox_ptr = rdm_invocation.mailbox_ptr; 584 585 if active_request then /* requote it in case it contains spaces */ 586 return_value = requote_string_ (rtrim (pathname_ (mailbox.mailbox_dirname, mailbox.mailbox_ename))); 587 else call ioa_ ("Reading: ^a", pathname_ (mailbox.mailbox_dirname, mailbox.mailbox_ename)); 588 589 return; 590 591 /* Prepares to execute the request */ 592 593 setup_request: 594 procedure (); 595 596 rdm_invocation_ptr = P_rdm_invocation_ptr; 597 598 if rdm_invocation.type = SDM_INVOCATION then do; 599 /*** Invoked from send_mail during a reply ... */ 600 sdm_invocation_ptr = rdm_invocation_ptr; 601 if (request ^= LIST_REQUEST) & (request ^= PRINT_REQUEST) & (request ^= PRINT_HEADER_REQUEST) then 602 call ssu_$abort_line (P_sci_ptr, ssu_et_$unimplemented_request); 603 else if sdm_invocation.rdm_invocation_ptr = null () then 604 call ssu_$abort_line (P_sci_ptr, 0, "This request is valid only during a ""reply"" request."); 605 is_original_request = "1"b; 606 rdm_invocation_ptr = sdm_invocation.rdm_invocation_ptr; 607 end; 608 609 else if rdm_invocation.type = RDM_FORWARD_INVOCATION then do; 610 /*** Invoked from the forward request sub-loop ... */ 611 rdm_forward_invocation_ptr = rdm_invocation_ptr; 612 if request ^= PRINT_REQUEST then /* ... only print_original for forward */ 613 call ssu_$abort_line (P_sci_ptr, ssu_et_$unimplemented_request); 614 is_original_request = "1"b; 615 rdm_invocation_ptr = rdm_forward_invocation.rdm_invocation_ptr; 616 end; 617 618 else is_original_request = "0"b; /* normal read_mailish usage */ 619 620 if request = LIST_REQUEST | request = OTHER_REQUEST then 621 /* only one of these which can be an active request */ 622 call ssu_$return_arg (P_sci_ptr, n_arguments, active_request, return_value_ptr, return_value_max_lth); 623 else do; 624 call ssu_$arg_count (P_sci_ptr, n_arguments); 625 active_request = "0"b; /* ... won't hurt */ 626 end; 627 628 call rdm_message_mark_mgr_$clear_marked_messages (rdm_invocation_ptr); 629 630 msg_spec_count = 0; 631 msg_type = NON_DELETED_MESSAGES; /* default value */ 632 633 msg_spec_array_size = n_arguments; /* setup the array of message specifier argument indeces */ 634 msg_spec_array_ptr = stack_allocate (currentsize (msg_spec_array)); 635 636 n_selections = n_arguments; /* setup the array of selection specifications */ 637 selection_array_ptr = stack_allocate (currentsize (selection_array)); 638 639 saved_rdm_sci_ptr = rdm_invocation.sci_ptr; /* for cleanup handler */ 640 selection_array.array (*).address_ptr = null (); /* ... */ 641 642 n_selections = 0; /* haven't seen any selection control arguments yet */ 643 644 class_count (*) = 0; 645 646 case_independence_sw, delete_sw, force_sw, listing_header_sw, reverse_sw = "0"b; 647 648 return; 649 650 end setup_request; 651 652 /* Cleans up after the execution of one of these requests */ 653 654 cleanup_request: 655 procedure (); 656 657 dcl idx fixed binary; 658 659 do idx = 1 to n_selections; 660 sel_ptr = addr (selection_array.array (idx)); 661 if sel.address_ptr ^= null () then call mail_system_$free_address (sel.address_ptr, (0)); 662 end; 663 664 rdm_invocation.sci_ptr = saved_rdm_sci_ptr; 665 666 return; 667 668 end cleanup_request; 669 670 671 672 /* Allocates an object by extending its caller's stack frame */ 673 674 stack_allocate: 675 procedure (p_size) returns (pointer) /* options (quick) */; 676 677 dcl p_size fixed binary (19) parameter; 678 dcl obj_ptr pointer; 679 dcl code fixed binary (35); 680 681 call cu_$grow_stack_frame (p_size, obj_ptr, code); 682 if code ^= 0 then 683 call ssu_$abort_line (P_sci_ptr, code, "Unable to allocate ^d words of stack frame space.", p_size); 684 685 return (obj_ptr); 686 687 end stack_allocate; 688 689 /* Process the request line arguments */ 690 691 process_arguments: 692 procedure (); 693 694 do argument_idx = first_argument to n_arguments; 695 696 call ssu_$arg_ptr (P_sci_ptr, argument_idx, argument_ptr, argument_lth); 697 698 if index (argument, "-") ^= 1 & request ^= OTHER_REQUEST then do; 699 /* a message specifier ... */ 700 msg_spec_count = msg_spec_count + 1; /* ... record its position for later */ 701 msg_spec_array (msg_spec_count) = argument_idx; 702 end; 703 704 else if request = SWITCH_OFF_REQUEST | request = SWITCH_ON_REQUEST then 705 call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 706 707 else if ^dl_rt_sw & ((argument = "-reverse") | (argument = "-rv")) then reverse_sw = "1"b; 708 else if ^dl_rt_sw & ((argument = "-no_reverse") | (argument = "-nrv")) then reverse_sw = "0"b; 709 710 else if ^dl_rt_sw & ((argument = "-include_deleted") | (argument = "-idl")) then msg_type = ALL_MESSAGES; 711 else if ^dl_rt_sw & ((argument = "-only_deleted") | (argument = "-odl")) then 712 msg_type = ONLY_DELETED_MESSAGES; 713 else if ^dl_rt_sw & ((argument = "-only_non_deleted") | (argument = "-ondl")) then 714 msg_type = NON_DELETED_MESSAGES; 715 716 else if request = OTHER_REQUEST then 717 if index (argument, "-") ^= 1 then 718 call ssu_$abort_line (P_sci_ptr, error_table_$badarg, 719 "This request accepts only control arguments."); 720 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 721 722 /*** obsolete control arguments: remove support in MR11 */ 723 else if ^dl_rt_sw & ((argument = "-all") | (argument = "-a")) then msg_type = ALL_MESSAGES; 724 725 else if (argument = "-non_case_sensitive") | (argument = "-ncs") then case_independence_sw = "1"b; 726 else if (argument = "-case_sensitive") | (argument = "-cs") then case_independence_sw = "0"b; 727 728 else if (argument = "-subject") | (argument = "-sj") then do; 729 call get_next_one_argument ("A string or a regular expression"); 730 call get_selection (SUBJECT_CLASS); 731 sel.type = SUBJECT_FIELD; /* which field to scan */ 732 call add_string_or_regexp (argument1); 733 end; 734 735 else if (argument = "-in_reply_to") | (argument = "-irt") then do; 736 call get_next_one_argument ("A string or a regular expression"); 737 call get_selection (SUBJECT_CLASS); 738 sel.type = IN_REPLY_TO_FIELD; /* which field to scan */ 739 call add_string_or_regexp (argument1); 740 end; 741 742 else if (argument = "-between") | (argument = "-bt") then do; 743 call get_next_two_arguments ("Two date/times"); 744 call get_selection (TIME_CLASS); /* sel.type is irrelevant for TIME class */ 745 sel.time_1 = convert_time (argument1, "1"b); 746 sel.time_2 = convert_time (argument2, "1"b) + ONE_DAY; 747 if sel.time_1 >= sel.time_2 then do; 748 BETWEEN_TIMES_IN_WRONG_ORDER: 749 call ssu_$abort_line (P_sci_ptr, 0, "The range of ^a ""^a"" ""^a"" is empty or backwards.", 750 control_argument, argument1, argument2); 751 end; 752 end; 753 754 else if (argument = "-between_times") | (argument = "-between_time") | (argument = "-btt") then do; 755 call get_next_two_arguments ("Two date/times"); 756 call get_selection (TIME_CLASS); /* sel.type is irrelevant for TIME class */ 757 sel.time_1 = convert_time (argument1, "0"b); 758 sel.time_2 = convert_time (argument2, "0"b); 759 /* phx19118 RL - corrected direction of time comparison */ 760 if sel.time_1 > sel.time_2 then go to BETWEEN_TIMES_IN_WRONG_ORDER; 761 end; 762 763 else if (argument = "-after") | (argument = "-af") then do; 764 call get_next_one_argument ("A date/time"); 765 call get_selection (TIME_CLASS); 766 sel.time_1 = convert_time (argument1, "1"b); 767 sel.time_2 = END_OF_TIME; 768 end; 769 770 else if (argument = "-after_time") | (argument = "-aft") then do; 771 call get_next_one_argument ("A date/time"); 772 call get_selection (TIME_CLASS); 773 sel.time_1 = convert_time (argument1, "0"b); 774 sel.time_2 = END_OF_TIME; 775 end; 776 777 else if (argument = "-before") | (argument = "-be") then do; 778 call get_next_one_argument ("A date/time"); 779 call get_selection (TIME_CLASS); 780 sel.time_1 = BEGINNING_OF_TIME; 781 sel.time_2 = convert_time (argument1, "1"b); 782 end; 783 784 else if (argument = "-before_time") | (argument = "-bet") then do; 785 call get_next_one_argument ("A date/time"); 786 call get_selection (TIME_CLASS); 787 sel.time_1 = BEGINNING_OF_TIME; 788 sel.time_2 = convert_time (argument1, "0"b); 789 end; 790 791 else if (argument = "-date") | (argument = "-dt") then do; 792 call get_next_one_argument ("A date/time"); 793 call get_selection (TIME_CLASS); 794 sel.time_1 = convert_time (argument1, "1"b); 795 sel.time_2 = sel.time_1 + ONE_DAY; 796 end; 797 798 else if (argument = "-from") | (argument = "-fm") then do; 799 call get_next_one_argument ("An address or a regular expression"); 800 call get_selection (SENDER_CLASS); 801 sel.type = FROM_FIELD; 802 if index (argument1, SLASH) = 1 then 803 call add_string_or_regexp (argument1); 804 else call add_address (); 805 end; 806 807 else if (argument = "-reply_to") | (argument = "-rpt") then do; 808 call get_next_one_argument ("An address or a regular expression"); 809 call get_selection (SENDER_CLASS); 810 sel.type = REPLY_TO_FIELD; 811 if index (argument1, SLASH) = 1 then 812 call add_string_or_regexp (argument1); 813 else call add_address (); 814 end; 815 816 else if argument = "-to" then do; 817 call get_next_one_argument ("An address or a regular expression"); 818 call get_selection (RECIPIENT_CLASS); 819 sel.type = TO_FIELD; 820 if index (argument1, SLASH) = 1 then 821 call add_string_or_regexp (argument1); 822 else call add_address (); 823 end; 824 825 else if argument = "-cc" then do; 826 call get_next_one_argument ("An address or a regular expression"); 827 call get_selection (RECIPIENT_CLASS); 828 sel.type = CC_FIELD; 829 if index (argument1, SLASH) = 1 then 830 call add_string_or_regexp (argument1); 831 else call add_address (); 832 end; 833 834 else if argument = "-bcc" then do; 835 call get_next_one_argument ("An address or a regular expression"); 836 call get_selection (RECIPIENT_CLASS); 837 sel.type = BCC_FIELD; 838 if index (argument1, SLASH) = 1 then 839 call add_string_or_regexp (argument1); 840 else call add_address (); 841 end; 842 843 else if (argument = "-forwarded_to") | (argument = "-fwdt") then do; 844 call get_next_one_argument ("An address or a regular expression"); 845 call get_selection (RECIPIENT_CLASS); 846 sel.type = TO_FIELD + REDISTRIBUTED_FIELDS_BASE; 847 if index (argument1, SLASH) = 1 then 848 call add_string_or_regexp (argument1); 849 else call add_address (); 850 end; 851 852 else if (argument = "-recipient") | (argument = "-rcp") then do; 853 call get_next_one_argument ("An address or a regular expression"); 854 call get_selection (RECIPIENT_CLASS); 855 sel.type = -1; /* special -- indicates all recipient fields */ 856 if index (argument1, SLASH) = 1 then 857 call add_string_or_regexp (argument1); 858 else call add_address (); 859 end; 860 861 else if request = PRINT_REQUEST then do; 862 if ((argument = "-delete") | (argument = "-dl")) & ^is_original_request then delete_sw = "1"b; 863 else if ((argument = "-no_delete") | (argument = "-ndl")) & ^is_original_request then 864 delete_sw = "0"b; 865 else if (argument = "-long_header") | (argument = "-lghe") then 866 formatting_mode = LONG_FORMATTING_MODE; 867 else if (argument = "-header") | (argument = "-he") then formatting_mode = DEFAULT_FORMATTING_MODE; 868 else if (argument = "-brief_header") | (argument = "-bfhe") then 869 formatting_mode = BRIEF_FORMATTING_MODE; 870 else if (argument = "-no_header") | (argument = "-nhe") then formatting_mode = NONE_FORMATTING_MODE; 871 /*** obsolete control arguments: delete in MR11 */ 872 else if ((argument = "-header_only") | (argument = "-ho")) then do; 873 formatting_mode = DEFAULT_FORMATTING_MODE; 874 local_fmo.include_body = "0"b; 875 end; 876 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 877 end; 878 879 else if request = PRINT_HEADER_REQUEST then do; 880 if ((argument = "-delete") | (argument = "-dl")) & ^is_original_request then delete_sw = "1"b; 881 else if ((argument = "-no_delete") | (argument = "-ndl")) & ^is_original_request then 882 delete_sw = "0"b; 883 else if (argument = "-long") | (argument = "-lg") then formatting_mode = LONG_FORMATTING_MODE; 884 else if (argument = "-default") | (argument = "-dft") then formatting_mode = DEFAULT_FORMATTING_MODE; 885 else if (argument = "-brief") | (argument = "-bf") then formatting_mode = BRIEF_FORMATTING_MODE; 886 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 887 end; 888 889 else if request = LIST_REQUEST then do; 890 if (argument = "-header") | (argument = "-he") then listing_header_sw = "1"b; 891 else if (argument = "-no_header") | (argument = "-nhe") then listing_header_sw = "0"b; 892 else if (argument = "-line_length") | (argument = "-ll") then do; 893 call get_next_one_argument ("A number"); 894 listing_line_length = cv_dec_check_ (argument1, code); 895 if code ^= 0 then 896 INVALID_LINE_LENGTH_SPECIFICATION: 897 call ssu_$abort_line (P_sci_ptr, 0, 898 "Line length must be a number not less than 60; not ""^a"".", argument1); 899 if listing_line_length < 60 then go to INVALID_LINE_LENGTH_SPECIFICATION; 900 end; 901 else if (argument = "-no_line_length") | (argument = "-nll") then listing_line_length = -1; 902 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 903 end; 904 905 else if request = DELETE_REQUEST then do; 906 if (argument = "-force") | (argument = "-fc") then force_sw = "1"b; 907 else if (argument = "-no_force") | (argument = "-nfc") then force_sw = "0"b; 908 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 909 end; 910 911 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 912 end; 913 914 return; 915 916 /* Internal to process_arugments: fetches the next argument and complains if it's not there */ 917 918 get_next_one_argument: 919 procedure (p_expected); 920 921 dcl p_expected character (*) parameter; 922 923 if (argument_idx + 1) > n_arguments then 924 call ssu_$abort_line (P_sci_ptr, error_table_$noarg, "^a after ""^a"".", p_expected, control_argument) 925 ; 926 927 argument_idx = argument_idx + 1; 928 call ssu_$arg_ptr (P_sci_ptr, argument_idx, argument1_ptr, argument1_lth); 929 930 return; 931 932 end get_next_one_argument; 933 934 935 936 /* Inernal to process_arguments: fetches the next two arguments and complains if either is not there */ 937 938 get_next_two_arguments: 939 procedure (p_expected); 940 941 dcl p_expected character (*) parameter; 942 943 if (argument_idx + 2) > n_arguments then 944 call ssu_$abort_line (P_sci_ptr, error_table_$noarg, "^a after ""^a"".", p_expected, control_argument) 945 ; 946 947 argument_idx = argument_idx + 1; 948 call ssu_$arg_ptr (P_sci_ptr, argument_idx, argument1_ptr, argument1_lth); 949 950 argument_idx = argument_idx + 1; 951 call ssu_$arg_ptr (P_sci_ptr, argument_idx, argument2_ptr, argument2_lth); 952 953 return; 954 955 end get_next_two_arguments; 956 957 /* Internal to process_arguments: gets the next selection_array entry: initializes it, increments the per-class counter, 958* and sets sel_ptr */ 959 960 get_selection: 961 procedure (p_class); 962 963 dcl p_class fixed binary parameter; 964 965 n_selections = n_selections + 1; 966 sel_ptr = addr (selection_array.array (n_selections)); 967 968 unspec (sel) = ""b; 969 sel.class = p_class; 970 sel.str_ptr = null (); 971 sel.address_ptr = null (); 972 973 class_count (p_class) = class_count (p_class) + 1; 974 975 return; 976 977 end get_selection; 978 979 /* Internal to process_arguments: makes the current selection a string or regular expression selection based on the 980* whether the first character of the string is not or is a slash (/), respectively */ 981 982 add_string_or_regexp: 983 procedure (p_string); 984 985 dcl p_string character (*) parameter; 986 dcl search_string character (sel.str_lth) unaligned based (sel.str_ptr); 987 988 sel.regexp_sw = (index (p_string, SLASH) = 1); 989 990 if sel.regexp_sw then do; /* a regular expression */ 991 if substr (p_string, length (p_string), 1) ^= SLASH then 992 call ssu_$abort_line (P_sci_ptr, 0, "Missing regular expression delimiter. ^a ""^a""", 993 control_argument, p_string); 994 sel.str_ptr = addcharno (addr (p_string), 1); 995 sel.str_lth = length (p_string) - 2; /* ... excluding the slashes */ 996 end; 997 998 else do; /* a string to be matched exactly */ 999 sel.str_ptr = addr (p_string); 1000 sel.str_lth = length (p_string); 1001 end; 1002 1003 if verify (search_string, WHITESPACE) = 0 then 1004 /* can't be empty */ 1005 call ssu_$abort_line (P_sci_ptr, mlsys_et_$null_search_string, "After ""^a"".", control_argument); 1006 1007 if sel.regexp_sw then do; /* insure that it has proper syntax */ 1008 call search_file_$silent (sel.str_ptr, 1, sel.str_lth, addr (NULL_STRING), 1, 0, (0), (0), code); 1009 if code = error_table_$nomatch then /* ... can only get this if the expression's syntax is OK */ 1010 code = 0; 1011 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a ""^a""", control_argument, p_string); 1012 end; 1013 1014 return; 1015 1016 end add_string_or_regexp; 1017 1018 /* Internal to process_arguments: converts a date/time string and optionally truncates to midnight */ 1019 1020 convert_time: 1021 procedure (p_time, p_adjust_sw) returns (fixed binary (71)); 1022 1023 dcl p_time character (*) parameter; 1024 dcl p_adjust_sw bit (1) aligned parameter; 1025 1026 dcl clock_value fixed binary (71); 1027 dcl (month, day_of_month, year) fixed binary; 1028 dcl time_zone character (3); 1029 dcl code fixed binary (35); 1030 1031 call convert_date_to_binary_ (p_time, clock_value, code); 1032 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a ""^a""", control_argument, p_time); 1033 1034 if p_adjust_sw then do; /* truncate to the previous midnight */ 1035 time_zone = ""; /* must be initialized */ 1036 call decode_clock_value_$date_time (clock_value, month, day_of_month, year, (0), (0), (0), (0), (0), 1037 time_zone, (0)); 1038 call encode_clock_value_ (month, day_of_month, year, 0, 0, 0, 0, 0, time_zone, clock_value, (0)); 1039 end; 1040 1041 return (clock_value); 1042 1043 end convert_time; 1044 1045 /* Internal to process_arguments: collects a single address from the argument list */ 1046 1047 add_address: 1048 procedure (); 1049 1050 dcl 1 local_pcao aligned like parse_ca_options; 1051 dcl code fixed binary (35); 1052 1053 local_pcao.version = PARSE_CA_OPTIONS_VERSION_1; 1054 local_pcao.logbox_creation_mode, local_pcao.savebox_creation_mode = DONT_CREATE_MAILBOX; 1055 local_pcao.abort_on_errors = "1"b; 1056 local_pcao.validate_addresses = "0"b; 1057 local_pcao.mbz = ""b; 1058 1059 call mlsys_utils_$parse_address_control_args (P_sci_ptr, argument_idx, addr (local_pcao), sel.address_ptr, 1060 code); 1061 if code ^= 0 then /* ... only fatal errors will get here */ 1062 call ssu_$abort_line (P_sci_ptr, code, "Parsing control arguments."); 1063 1064 argument_idx = argument_idx - 1; /* do loop will increment this again ... */ 1065 1066 return; 1067 1068 end add_address; 1069 1070 end process_arguments; 1071 1072 /* Marks the messages selected by the message specifiers */ 1073 1074 process_msg_specs: 1075 procedure (); 1076 1077 dcl idx fixed binary; 1078 1079 do idx = 1 to msg_spec_count; 1080 call ssu_$arg_ptr (P_sci_ptr, msg_spec_array (idx), argument_ptr, argument_lth); 1081 1082 call rdm_message_mark_mgr_$mark_messages (rdm_invocation_ptr, argument_ptr, argument_lth, msg_type, ""b, 1083 code); 1084 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code); 1085 end; 1086 1087 return; 1088 1089 end process_msg_specs; 1090 1091 /* Converts all selection strings to lowercase for case independent searching: The lowercase version of the strings are 1092* allocated on our caller's stack */ 1093 1094 make_lowercase_select_strings: 1095 procedure () /* options (quick) */; 1096 1097 dcl sel_str character (sel.str_lth) based (sel.str_ptr); 1098 1099 dcl copy_str character (copy_str_lth) based (copy_str_ptr); 1100 dcl copy_str_lth fixed binary (21); 1101 dcl copy_str_ptr pointer; 1102 1103 dcl idx fixed binary; 1104 1105 do idx = 1 to n_selections; 1106 sel_ptr = addr (selection_array.array (idx)); 1107 if sel.str_ptr ^= null () then do; /* there's a string */ 1108 copy_str_lth = sel.str_lth; 1109 copy_str_ptr = stack_allocate (divide ((copy_str_lth + 3), 4, 18, 0)); 1110 copy_str = translate (sel_str, LOWERCASE, UPPERCASE); 1111 sel.str_ptr = copy_str_ptr; /* ... replace it by the all lowercase copy */ 1112 end; 1113 end; 1114 1115 return; 1116 1117 end make_lowercase_select_strings; 1118 1119 /* Processes the message selection control arguments */ 1120 1121 process_selections: 1122 procedure (p_message_count) options (non_quick); 1123 1124 dcl p_message_count fixed binary parameter; 1125 1126 dcl time_bits (p_message_count) bit (1) unaligned automatic; 1127 dcl subject_bits (p_message_count) bit (1) unaligned automatic; 1128 dcl sender_bits (p_message_count) bit (1) unaligned automatic; 1129 dcl recipient_bits (p_message_count) bit (1) unaligned automatic; 1130 dcl new_marked_bits (p_message_count) bit (1) unaligned automatic; 1131 1132 dcl 1 buffer aligned based, /* used for following like clauses */ 1133 2 text_ptr pointer, 1134 2 text_lth fixed binary (21); 1135 1136 dcl 1 message_field_buffers aligned, /* used to reduce # of calls to mlsys_utils_$format... */ 1137 2 in_reply_to like buffer, 1138 2 from like buffer, 1139 2 reply_to like buffer, 1140 2 to like buffer, 1141 2 cc like buffer, 1142 2 bcc like buffer; 1143 1144 dcl 1 matched_sw aligned like class_sw; /* for determining when we may stop looking at selections */ 1145 1146 dcl 1 saved_last_search_buffer aligned like rdm_invocation.last_search_buffer; 1147 1148 dcl code fixed binary (35); 1149 dcl (message_idx, message_number, selection_idx, idx) fixed binary; 1150 1151 1152 new_marked_bits (*) = "1"b; /* assume everything matches */ 1153 1154 if class_sw.time then string (time_bits) = ""b; 1155 if class_sw.subject then string (subject_bits) = ""b; 1156 if class_sw.sender then string (sender_bits) = ""b; 1157 if class_sw.recipient then string (recipient_bits) = ""b; 1158 1159 saved_last_search_buffer = rdm_invocation.last_search_buffer; 1160 1161 on condition (cleanup) 1162 begin; 1163 if saved_last_search_buffer.buffer_ptr = rdm_invocation.last_search_buffer.buffer_ptr then 1164 rdm_invocation.last_search_buffer = saved_last_search_buffer; 1165 end; 1166 1167 1168 /* Process the selections: a message is selected if it matches all classes with non-zero selection specifications; only 1169* one specification in a class must match to say that message matches the class */ 1170 1171 do message_idx = 1 to marked_chain.n_messages; 1172 message_number = marked_chain.messages (message_idx); 1173 1174 call rdm_mailbox_interface_$read_message (rdm_invocation_ptr, message_number, message_ptr, code); 1175 if code ^= 0 then 1176 call ssu_$abort_line (P_sci_ptr, code, "Reading message #^d from ^a.", message_number, 1177 rdm_invocation.mailbox_name); 1178 1179 message_field_buffers.in_reply_to.text_ptr, /* haven't contructed any printed representations yet */ 1180 message_field_buffers.from.text_ptr, message_field_buffers.reply_to.text_ptr, 1181 message_field_buffers.to.text_ptr, message_field_buffers.cc.text_ptr, 1182 message_field_buffers.bcc.text_ptr = null (); 1183 1184 string (matched_sw) = ""b; /* not matched yet */ 1185 1186 do selection_idx = 1 to n_selections; 1187 sel_ptr = addr (selection_array.array (selection_idx)); 1188 if sel.class = TIME_CLASS then call process_time_selection (); 1189 else if sel.class = SUBJECT_CLASS then call process_subject_selection (); 1190 else if sel.class = SENDER_CLASS then call process_sender_selection (); 1191 else if sel.class = RECIPIENT_CLASS then call process_recipient_selection (); 1192 end; 1193 1194 CHECK_NEXT_MESSAGE: /* control transfers here if message matches completely */ 1195 if saved_last_search_buffer.buffer_ptr = rdm_invocation.last_search_buffer.buffer_ptr then 1196 rdm_invocation.last_search_buffer = saved_last_search_buffer; 1197 end; 1198 1199 if class_sw.time then string (new_marked_bits) = string (new_marked_bits) & string (time_bits); 1200 if class_sw.subject then string (new_marked_bits) = string (new_marked_bits) & string (subject_bits); 1201 if class_sw.sender then string (new_marked_bits) = string (new_marked_bits) & string (sender_bits); 1202 if class_sw.recipient then string (new_marked_bits) = string (new_marked_bits) & string (recipient_bits); 1203 1204 1205 /* Remove all those messages from the marked chain which did not match the selection criteria */ 1206 1207 do message_idx = marked_chain.n_messages to 1 by -1; 1208 if ^new_marked_bits (message_idx) then do; /* delete this one */ 1209 do idx = (message_idx + 1) to marked_chain.n_messages; 1210 marked_chain.messages (idx - 1) = marked_chain.messages (idx); 1211 end; 1212 marked_chain.n_messages = marked_chain.n_messages - 1; 1213 end; 1214 end; 1215 1216 return; 1217 1218 /* Internal to process_selections: processes a single time selection for the current message */ 1219 1220 process_time_selection: 1221 procedure (); 1222 1223 if matched_sw.time then return; /* already matched one of the time criteria */ 1224 1225 if (message.date_time_created >= sel.time_1) & (message.date_time_created <= sel.time_2) then do; 1226 time_bits (message_idx) = "1"b; /* it matches */ 1227 matched_sw.time = "1"b; 1228 end; 1229 1230 if string (matched_sw) = string (class_sw) then go to CHECK_NEXT_MESSAGE; 1231 /* stop when all criteria are met */ 1232 1233 return; 1234 1235 end process_time_selection; 1236 1237 /* Internal to process_selections: processes a single text field (Subject/In-Reply-To) selection: either substring or 1238* regular expression match */ 1239 1240 process_subject_selection: 1241 procedure (); 1242 1243 if matched_sw.subject then return; /* already matched a subject criteria */ 1244 1245 if sel.type = SUBJECT_FIELD then /* check the message subject */ 1246 if match_sel_on_string (message.subject.text_ptr, message.subject.text_lth) then do; 1247 subject_bits (message_idx) = "1"b; /* ... it matches */ 1248 matched_sw.subject = "1"b; 1249 end; 1250 else ; 1251 1252 else /*** if sel.type = IN_REPLY_TO_FIELD then */ 1253 /*** don't bother if there's no In-Reply-To field */ 1254 if message.n_reply_references > 0 then do; 1255 if message_field_buffers.in_reply_to.text_ptr = null () then 1256 call rdm_search_utils_$prepare_message_references_field_for_search (rdm_invocation_ptr, 1257 message_number, REPLY_REFERENCES_FIELDNAME, message.reply_references, 1258 message_field_buffers.in_reply_to.text_ptr, message_field_buffers.in_reply_to.text_lth); 1259 if match_sel_on_string (message_field_buffers.in_reply_to.text_ptr, 1260 message_field_buffers.in_reply_to.text_lth) then do; 1261 subject_bits (message_idx) = "1"b; 1262 matched_sw.subject = "1"b; 1263 end; 1264 end; 1265 1266 if string (matched_sw) = string (class_sw) then go to CHECK_NEXT_MESSAGE; 1267 1268 return; 1269 1270 end process_subject_selection; 1271 1272 /* Internal to process_selections: processes a single sender field (From/Reply-To) selection: either a regular expression 1273* or an address match */ 1274 1275 process_sender_selection: 1276 procedure (); 1277 1278 if matched_sw.sender then return; /* already satisfied a sender selection */ 1279 1280 if sel.type = FROM_FIELD then 1281 call process_address_list_selection (FROM_FIELDNAME, message.from, message_field_buffers.from, 1282 sender_bits, matched_sw.sender); 1283 1284 else /*** if sel.type = REPLY_TO_FIELD then */ 1285 call process_address_list_selection (REPLY_TO_FIELDNAME, message.reply_to, 1286 message_field_buffers.reply_to, sender_bits, matched_sw.sender); 1287 1288 return; 1289 1290 end process_sender_selection; 1291 1292 /* Internal to process_selections: processes a single recipient field (To/cc/bcc/Redistributed-To) selection: either a 1293* regular expression or an address match */ 1294 1295 process_recipient_selection: 1296 procedure (); 1297 1298 if matched_sw.recipient then return; /* already matched a recipient selection */ 1299 1300 if sel.type = -1 then do; /* special case: all recipients */ 1301 call process_single_recipient_selection (TO_FIELD); 1302 call process_single_recipient_selection (CC_FIELD); 1303 call process_single_recipient_selection (BCC_FIELD); 1304 call process_single_recipient_selection ((TO_FIELD + REDISTRIBUTED_FIELDS_BASE)); 1305 end; 1306 1307 else call process_single_recipient_selection (sel.type); 1308 1309 return; 1310 1311 1312 1313 /* Internal to process_recipients_selection: actually processes the selection */ 1314 1315 process_single_recipient_selection: 1316 procedure (p_field_type); 1317 1318 dcl p_field_type fixed binary parameter; 1319 1320 dcl 1 redistributed_buffer aligned like buffer; 1321 dcl redistributed_fieldname character (64) varying; 1322 dcl idx fixed binary; 1323 1324 if p_field_type = TO_FIELD then 1325 call process_address_list_selection (TO_FIELDNAME, message.to, message_field_buffers.to, 1326 recipient_bits, matched_sw.recipient); 1327 1328 if p_field_type = CC_FIELD then 1329 call process_address_list_selection (CC_FIELDNAME, message.cc, message_field_buffers.cc, 1330 recipient_bits, matched_sw.recipient); 1331 1332 if p_field_type = BCC_FIELD then 1333 call process_address_list_selection (BCC_FIELDNAME, message.bcc, message_field_buffers.bcc, 1334 recipient_bits, matched_sw.recipient); 1335 1336 else /*** if p_field_type = (TO_FIELD + REDISTRIBUTED_FIELDS_BASE) then */ 1337 if message.n_redistributions > 0 then do; 1338 redistributed_fieldname = REDISTRIBUTED_PREFIX || TO_FIELDNAME; 1339 do idx = 1 to message.n_redistributions; 1340 redistributed_buffer.text_ptr = null (); 1341 call process_address_list_selection (redistributed_fieldname, 1342 message_redistributions_list.redistributions (idx).to, redistributed_buffer, 1343 recipient_bits, matched_sw.recipient); 1344 end; 1345 end; 1346 1347 return; 1348 1349 end process_single_recipient_selection; 1350 1351 end process_recipient_selection; 1352 1353 /* Internal to process_selections: performs a selection over the given address list */ 1354 1355 process_address_list_selection: 1356 procedure (p_fieldname, p_address_list_ptr, p_list_buffer, p_matched_bits_array, p_matched_type_sw); 1357 1358 dcl p_fieldname character (*) varying parameter; 1359 dcl p_address_list_ptr pointer parameter; 1360 dcl 1 p_list_buffer aligned parameter like buffer; 1361 dcl p_matched_bits_array (*) bit (1) unaligned parameter; 1362 dcl p_matched_type_sw bit (1) unaligned parameter; 1363 1364 dcl address_idx fixed binary; 1365 1366 if is_empty_list (p_address_list_ptr) then 1367 ; /* don't bother if it's emtpy */ 1368 1369 else do; 1370 if sel.regexp_sw then do; /* match against the printed representation */ 1371 if p_list_buffer.text_ptr = null () then 1372 call rdm_search_utils_$prepare_address_list_field_for_search (rdm_invocation_ptr, 1373 message_number, p_fieldname, p_address_list_ptr, p_list_buffer.text_ptr, 1374 p_list_buffer.text_lth); 1375 if match_sel_on_string (p_list_buffer.text_ptr, p_list_buffer.text_lth) then 1376 go to FOUND_MATCHING_ADDRESS; 1377 end; 1378 1379 else do; /* compare individual addresses */ 1380 do address_idx = 1 to p_address_list_ptr -> address_list.n_addresses; 1381 if mail_system_$compare_addresses (sel.address_ptr, 1382 p_address_list_ptr -> address_list.addresses (address_idx), (0)) then 1383 go to FOUND_MATCHING_ADDRESS; 1384 end; 1385 end; 1386 end; 1387 1388 return; /* control reaches here iff there's no match */ 1389 1390 1391 /* Control arrives here iff a match was found in the address list */ 1392 1393 FOUND_MATCHING_ADDRESS: 1394 p_matched_bits_array (message_idx) = "1"b; 1395 p_matched_type_sw = "1"b; 1396 1397 if string (matched_sw) = string (class_sw) then go to CHECK_NEXT_MESSAGE; 1398 1399 return; 1400 1401 end process_address_list_selection; 1402 1403 /* Internal to process_selections: matches the string either against a substring or a regular expression */ 1404 1405 match_sel_on_string: 1406 procedure (p_str_ptr, p_str_lth) returns (bit (1) aligned); 1407 1408 dcl p_str_ptr pointer parameter; 1409 dcl p_str_lth fixed binary (21) parameter; 1410 1411 dcl sel_str character (sel.str_lth) unaligned based (sel.str_ptr); 1412 1413 dcl match_str character (match_str_lth) based (match_str_ptr); 1414 dcl match_str_lth fixed binary (21); 1415 dcl match_str_ptr pointer; 1416 1417 dcl match_sw bit (1) aligned; 1418 dcl code fixed binary (35); 1419 1420 1421 match_str_ptr = p_str_ptr; 1422 match_str_lth = p_str_lth; 1423 1424 1425 /* If case independence is requested, copy the string onto the stack and convert it to lower case */ 1426 1427 if case_independence_sw then 1428 begin options (non_quick); 1429 1430 dcl copied_str character (match_str_lth) automatic; 1431 1432 copied_str = translate (match_str, LOWERCASE, UPPERCASE); 1433 if sel.regexp_sw then do; 1434 call search_file_$silent (sel.str_ptr, 1, sel.str_lth, addr (copied_str), 1, match_str_lth, (0), 1435 (0), code); 1436 match_sw = (code = 0); 1437 end; 1438 else match_sw = (index (copied_str, sel_str) ^= 0); 1439 end; 1440 1441 1442 /* Normal case sensitive check */ 1443 1444 else do; 1445 if sel.regexp_sw then do; 1446 call search_file_$silent (sel.str_ptr, 1, sel.str_lth, match_str_ptr, 1, match_str_lth, (0), (0), 1447 code); 1448 match_sw = (code = 0); 1449 end; 1450 else match_sw = (index (match_str, sel_str) ^= 0); 1451 end; 1452 1453 return (match_sw); 1454 1455 end match_sel_on_string; 1456 1457 end process_selections; 1458 1459 /* Lists the selected messages */ 1460 1461 perform_list_request: 1462 procedure (P_list_sw); 1463 1464 dcl P_list_sw bit (1) aligned; 1465 dcl (is_non_deleted, return_one_sw, seen_old_current_message) bit (1) aligned; 1466 dcl (old_current_message, new_current_message) fixed binary; 1467 dcl message_number_picture picture "(8)z9"; 1468 1469 1470 if active_request then 1471 return_value = ""; /* initialize output */ 1472 else do; /* displaying on the terminal ... */ 1473 if P_list_sw = JUST_LIST_NUMBERS then do; 1474 output_line_length = min (maxlength (output_buffer), get_line_length_$switch (iox_$user_output, (0))); 1475 output_buffer = ""; 1476 end; 1477 else if listing_header_sw then do; 1478 call mlsys_utils_$print_message_summary_header (listing_line_length, iox_$user_output, code); 1479 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "Printing listing header line."); 1480 end; 1481 end; 1482 1483 seen_old_current_message = "0"b; /* assume current message isn't going to be listed */ 1484 old_current_message = rdm_invocation.current_message; 1485 new_current_message = 0; 1486 1487 1488 /* Determine which message will be "current" after the list request completes: if the current message is listed, it will 1489* remain the current message; otherwise, the first non-deleted message will become current */ 1490 1491 do message_idx = first_message_idx to last_message_idx by message_idx_increment; 1492 message_number = marked_chain.messages (message_idx); 1493 is_non_deleted = "1"b; /* ... examine the deleted chain */ 1494 do idx = 1 to deleted_chain.n_messages while (is_non_deleted); 1495 if deleted_chain.messages (idx) = message_number then is_non_deleted = "0"b; 1496 end; 1497 if is_non_deleted then /* ... it's not been deleted */ 1498 if new_current_message = 0 then new_current_message = message_number; 1499 if message_number = old_current_message then seen_old_current_message = "1"b; 1500 end; 1501 1502 if seen_old_current_message then /* present current message is in the list: it stays current */ 1503 new_current_message = old_current_message; 1504 else /* present current message isn't being listed ... */ 1505 if new_current_message = 0 then /* ... but all the listed messages are deleted: status quo */ 1506 new_current_message = old_current_message; 1507 1508 1509 /* Actually list the messages */ 1510 1511 do message_idx = first_message_idx to last_message_idx by message_idx_increment; 1512 message_number = marked_chain.messages (message_idx); 1513 1514 if active_request then do; /* just return the message number */ 1515 if length (return_value) > 0 then return_value = return_value || " "; 1516 return_value = return_value || ltrim (convert (message_number_picture, message_number)); 1517 end; 1518 else if P_list_sw = JUST_LIST_NUMBERS then do; 1519 /* just print the message numbers (seen, etc.) */ 1520 message_number_string = ltrim (convert (message_number_picture, message_number)); 1521 if (length (output_buffer) + length (message_number_string) + 1) > output_line_length then do; 1522 call ioa_ ("^a", output_buffer); 1523 output_buffer = ""; 1524 end; 1525 if output_buffer ^= "" then output_buffer = output_buffer || " "; 1526 output_buffer = output_buffer || message_number_string; 1527 end; 1528 else call list_single_message (); /* display the summary */ 1529 end; 1530 1531 if P_list_sw = JUST_LIST_NUMBERS then do; 1532 return_one_sw = 1533 (request = OTHER_REQUEST & other_keyword_type ^= ALL_KEYWORD & other_keyword_type ^= SEEN_KEYWORD 1534 & other_keyword_type ^= UNSEEN_KEYWORD & other_keyword_type ^= NEW_KEYWORD); 1535 if active_request then do; 1536 if return_value = "" & return_one_sw then return_value = "0"; 1537 /* default for "first", etc. if no message */ 1538 end; 1539 else do; 1540 if output_buffer = "" & return_one_sw then output_buffer = "0"; 1541 if ^active_request then call ioa_ ("^a", output_buffer); 1542 end; 1543 end; 1544 1545 /* phx20589 RL - change current message only if not active request; */ 1546 /* also check that set_new_current_msg is called with a non-zero new */ 1547 /* current message since we don't want to change the current message */ 1548 /* if it's zero and the call to set_new_current_msg may do that */ 1549 if ^active_request & new_current_message ^= 0 then 1550 call rdm_mailbox_interface_$set_new_current_msg (rdm_invocation_ptr, new_current_message, 1551 rdm_invocation.current_message); 1552 1553 return; 1554 1555 1556 1557 /* Internal to perform_list_request: lists a single message */ 1558 1559 list_single_message: 1560 procedure (); 1561 1562 call rdm_mailbox_interface_$read_message (rdm_invocation_ptr, message_number, message_ptr, code); 1563 if code ^= 0 then 1564 call ssu_$abort_line (P_sci_ptr, code, "Reading message #^d from ^a.", message_number, 1565 rdm_invocation.mailbox_name); 1566 1567 call mlsys_utils_$print_message_summary (message_ptr, message_number, 1568 (message_number = new_current_message), listing_line_length, iox_$user_output, code); 1569 if code ^= 0 then 1570 call ssu_$abort_line (P_sci_ptr, code, "Printing listing of message #^d.", message_number); 1571 1572 call rdm_mailbox_interface_$mark_processed (rdm_invocation_ptr, message_number); 1573 1574 return; 1575 1576 end list_single_message; 1577 1578 end perform_list_request; 1579 1580 /* Prints the selected messages: implements the guts of the print and print_header requests */ 1581 1582 perform_printing_request: 1583 procedure (); 1584 1585 if formatting_mode = BRIEF_FORMATTING_MODE then 1586 local_fmo.envelope_formatting_mode = NONE_FORMATTING_MODE; 1587 else local_fmo.envelope_formatting_mode = formatting_mode; 1588 1589 local_fmo.header_formatting_mode, local_fmo.redistributions_list_formatting_mode = formatting_mode; 1590 1591 do message_idx = first_message_idx to last_message_idx by message_idx_increment; 1592 message_number = marked_chain.messages (message_idx); 1593 1594 call rdm_mailbox_interface_$read_message (rdm_invocation_ptr, message_number, message_ptr, code); 1595 if code ^= 0 then 1596 call ssu_$abort_line (P_sci_ptr, code, "Reading message #^d from ^a.", message_number, 1597 rdm_invocation.mailbox_name); 1598 1599 /* phx18564 RL - set current message to message_number only if it is not a deleted message; 1600* otherwise current set to next non-deleted message after message_number */ 1601 call rdm_mailbox_interface_$set_new_current_msg (rdm_invocation_ptr, message_number, 1602 rdm_invocation.current_message); 1603 1604 /* it's current while we're printing it */ 1605 1606 /*** following ioa_ call is OK until messages appear with sections that aren't preformatted */ 1607 call ioa_ ("^/ #^d^[ (^d line^[s^] in body)^]:", message_number, (message.total_lines ^= -1), 1608 message.total_lines, (message.total_lines ^= 1)); 1609 call mlsys_utils_$print_message (message_ptr, addr (local_fmo), iox_$user_output, code); 1610 if code ^= 0 then 1611 call ssu_$abort_line (P_sci_ptr, code, "Attempting to print message #^d.", message_number); 1612 call ioa_ (" ---(^d)---", message_number); 1613 call iox_$control (iox_$user_output, "reset_more", null (), (0)); 1614 1615 call rdm_mailbox_interface_$mark_processed_and_acknowledge (rdm_invocation_ptr, message_number); 1616 1617 if request = PRINT_REQUEST then 1618 call mail_system_$set_message_switch (message_ptr, PER_MESSAGE_SEEN_SWITCH_TYPE, "1"b, (0)); 1619 end; 1620 1621 return; 1622 1623 end perform_printing_request; 1624 1625 1626 set_switch: 1627 proc (P_sci_ptr); 1628 1629 dcl P_sci_ptr ptr; 1630 dcl switch_value bit (1) aligned; 1631 1632 if request = SWITCH_OFF_REQUEST then 1633 switch_value = "0"b; 1634 else switch_value = "1"b; 1635 1636 do message_idx = first_message_idx to last_message_idx by message_idx_increment; 1637 message_number = marked_chain.messages (message_idx); 1638 1639 call rdm_mailbox_interface_$read_message (rdm_invocation_ptr, message_number, message_ptr, code); 1640 if code ^= 0 then 1641 call ssu_$abort_line (P_sci_ptr, code, "Reading message #^d from ^a.", message_number, 1642 rdm_invocation.mailbox_name); 1643 1644 call mail_system_$set_message_switch (message_ptr, switch_type, switch_value, code); 1645 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "Setting switch on message ^d", message_number); 1646 end; 1647 1648 return; 1649 1650 end set_switch; 1651 1652 /* Determines if the supplied address list is empty */ 1653 1654 is_empty_list: 1655 procedure (p_address_list_ptr) returns (bit (1) aligned); 1656 1657 dcl p_address_list_ptr pointer parameter; 1658 1659 if p_address_list_ptr = null () then /* no data at all */ 1660 return ("1"b); 1661 1662 else return ((p_address_list_ptr -> address_list.n_addresses = 0)); 1663 1664 end is_empty_list; 1665 1 1 /* BEGIN INCLUDE FILE ... rdm_invocation.incl.pl1 */ 1 2 /* Created: September 1983 by G. Palter from portions of emf_info.incl.pl1 */ 1 3 1 4 /* Definition of a single invocation of read_mail */ 1 5 1 6 dcl 1 rdm_invocation aligned based (rdm_invocation_ptr), 1 7 2 type character (8), /* defines this structure as a read_mail invocation */ 1 8 2 sci_ptr pointer, /* -> subsystem utilities invocation data */ 1 9 2 area_ptr pointer, /* -> area to be used by the subsystem */ 1 10 1 11 2 mailbox_info, 1 12 3 mailbox_ptr pointer, /* -> mailbox structure being examined by this invocation */ 1 13 3 message_list_ptr pointer, /* -> list of read_mail specific information retained for each 1 14* message (eg: the "processed" flag) */ 1 15 3 message_chains, /*the various message chains ... */ 1 16 4 all pointer, /* ... all unexpunged messages */ 1 17 4 undeleted pointer, /* ... all undeleted messages */ 1 18 4 deleted pointer, /* ... all deleted messages */ 1 19 4 marked pointer, /* ... messages to be processed by the current request */ 1 20 4 marked_as_original pointer, /* ... messages being processed by a reply/forward request */ 1 21 3 mailbox_name character (168) varying, /* name of the mailbox (your mailbox/logbox/pathname) */ 1 22 1 23 2 current_message fixed binary, /* index of the current message; 0 => no current message */ 1 24 1 25 2 last_search_buffer, /* describes the buffer where read_mail constructs the ... */ 1 26 3 buffer_ptr pointer, /* ... the printed representation of messages in order ... */ 1 27 3 buffer_used fixed binary (21), /* ... to speed up regular expression searching */ 1 28 1 29 2 global_options, /* command line options affecting all of read_mail ... */ 1 30 3 flags, 1 31 4 acknowledge bit (1) unaligned, /* ... ON => acknowledge messages after printing */ 1 32 4 brief bit (1) unaligned, /* ... ON => shorten some messages and omit others */ 1 33 4 debug_mode bit (1) unaligned, /* ... ON => enable debugging features */ 1 34 4 pad bit (33) unaligned, 1 35 1 36 2 print_options, /* command line options affecting the print request ... */ 1 37 3 formatting_mode fixed binary, /* ... output mode for the message header, etc. */ 1 38 1 39 2 reply_options, /* command line options affecting the reply request ... */ 1 40 3 line_length fixed binary, /* ... line length to be used by send_mail for filling */ 1 41 3 indentation fixed binary, /* ... amount to indent original text when included */ 1 42 3 flags, 1 43 4 include_original bit (1) unaligned, /* ... ON => include original message text in the reply */ 1 44 4 include_authors bit (1) unaligned, /* ... ON => include original authors as recipients */ 1 45 4 include_recipients bit (1) unaligned, /* ... ON => include original recipients as recipients */ 1 46 4 include_self bit (2) unaligned, /* ... ON => include this user as a recipient of the reply if 1 47* selected by include_authors/include_recipients */ 1 48 4 fill_control bit (2) unaligned, /* ... controls message filling by send_mail */ 1 49 4 pad bit (29) unaligned; 1 50 1 51 dcl RDM_INVOCATION character (8) static options (constant) initial ("rdm_0009"); 1 52 1 53 dcl rdm_invocation_ptr pointer; 1 54 1 55 dcl rdm_area area based (rdm_invocation.area_ptr); 1 56 1 57 1 58 /* Defined settings for reply_options.include_self */ 1 59 1 60 dcl (DEFAULT_INCLUDE_SELF initial ("00"b), /* neither -include_self nor -no_include_self given */ 1 61 NO_INCLUDE_SELF initial ("01"b), /* -no_include_self explicitly given */ 1 62 INCLUDE_SELF initial ("10"b)) /* -include_self explicitly given */ 1 63 bit (2) aligned static options (constant); 1 64 1 65 /* END INCLUDE FILE ... rdm_invocation.incl.pl1 */ 1666 1667 2 1 /* BEGIN INCLUDE FILE ... rdm_message_list.incl.pl1 */ 2 2 /* Created: September 1983 by G. Palter */ 2 3 2 4 /* Definition of per-message data maintained by read_mail: This list is maintined in parallel to the mailbox structure by 2 5* read_mail's interface to the mail_system_ mailbox manager (rdm_mailbox_interface_). It serves two purposes: 2 6* (1) It provides a place to store read_mail-specific per-message data (ie: the processed flag). 2 7* (2) It provides the ability to provide arbitrary mappings between read_mail message numbers and the actual indeces 2 8* within the mailbox structure. This mapping allows read_mail to preserve its message numbers for an invocation 2 9* even if messages are expunged which causes them to disappear from the mailbox structure (NB: the "expunge" 2 10* request is not yet implemented). This mapping also allows read_mail to present the messages in the mailbox to 2 11* the user in a different order than they actually appear in the mailbox (eg: sorted by date/time created) */ 2 12 2 13 dcl 1 message_list aligned based (rdm_invocation.message_list_ptr), 2 14 2 n_messages fixed binary, /* # of messages known to read_mail at present */ 2 15 2 pad bit (36), 2 16 2 messages (message_list_n_messages refer (message_list.n_messages)), 2 17 3 message_idx fixed binary, /* index of this message in the mailbox structure */ 2 18 3 flags, 2 19 4 processed bit (1) unaligned, /* ON => this message may be deleted without query */ 2 20 4 pad bit (35) unaligned, 2 21 3 search_text, /* describes copy of messages used for regexp searches */ 2 22 4 search_text_ptr pointer, /* ... -> the saved printed represetnation */ 2 23 4 search_text_lth fixed binary (21); /* ... length of said representation in characters */ 2 24 2 25 dcl message_list_n_messages fixed binary; 2 26 2 27 /* END INCLUDE FILE ... rdm_message_list.incl.pl1 */ 1668 1669 3 1 /* BEGIN INCLUDE FILE ... rdm_message_chains.incl.pl1 */ 3 2 /* Created: September 1983 by G. Palter */ 3 3 3 4 3 5 /* Definition of a read_mail message chain */ 3 6 3 7 dcl 1 message_chain aligned based (message_chain_ptr), 3 8 2 n_messages fixed binary, /* # of messages in the chain */ 3 9 2 messages (message_list.n_messages) fixed binary; /* read_mail message numbers of the messages in the chain */ 3 10 3 11 dcl message_chain_ptr pointer; 3 12 3 13 3 14 /* Message chains maintained by read_mail's interface to the mail_system_ mailbox manager (rdm_mailbox_interface_) -- 3 15* (1) The first chain is a list of all messages in the mailbox which have not yet been expunged and consists of all 3 16* messages whether or not they have been marked for deletion. 3 17* (2) The second chain is a list of all messages in the mailbox which have not been marked for later deletion. 3 18* (3) The third chain is a list of all messages which have been marked for later deletion. 3 19* The message specifier parser uses one of these three chains as the basis for selecting the messages to be processed by 3 20* a request based on the use of "-include_deleted", "-only_non_deleted", or "-only_deleted", respectively; in this way, 3 21* the amount of code in the parser which must distinguish between these three types of selections is minimized */ 3 22 3 23 dcl 1 all_chain aligned based (rdm_invocation.message_chains.all) like message_chain; 3 24 dcl 1 undeleted_chain aligned based (rdm_invocation.message_chains.undeleted) like message_chain; 3 25 dcl 1 deleted_chain aligned based (rdm_invocation.message_chains.deleted) like message_chain; 3 26 3 27 3 28 /* The marked chain is the list of messages that are to be processed by the current request */ 3 29 3 30 dcl 1 marked_chain aligned based (rdm_invocation.message_chains.marked) like message_chain; 3 31 3 32 3 33 /* The marked as original chain is the list of messages that are being processed by a reply or forward request: This 3 34* chain is used to define the default set of messages to be processed by the various send_mail "original" requests and 3 35* forward "original" sub-requests */ 3 36 3 37 dcl 1 marked_as_original_chain aligned based (rdm_invocation.message_chains.marked_as_original) like message_chain; 3 38 3 39 3 40 /* Definition of the acceptable message selection criteria */ 3 41 3 42 dcl (ALL_MESSAGES initial (1), /* all messages: -include_deleted */ 3 43 NON_DELETED_MESSAGES initial (2), /* only undeleted messages: -only_non_deleted (default) */ 3 44 ONLY_DELETED_MESSAGES initial (3)) /* only deleted messages: -only_deleted */ 3 45 fixed binary static options (constant); 3 46 3 47 /* END INCLUDE FILE ... rdm_message_chains.incl.pl1 */ 1670 1671 4 1 /* BEGIN INCLUDE FILE: rdm_msg_spec_keywords.incl.pl1 */ 4 2 4 3 4 4 /****^ HISTORY COMMENTS: 4 5* 1) change(86-04-01,Herbst), approve(86-04-01,MCR7367), 4 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 4 7* New file. 4 8* END HISTORY COMMENTS */ 4 9 4 10 /* These constants are used by rdm_msg_requests_ and rdm_message_mark_mgr_ to identify requests and msg specs */ 4 11 4 12 dcl KEYWORDS (17, 3) character (16) varying static options (constant) initial ( 4 13 "all", "a", "", 4 14 "first", "f", "", 4 15 "last", "l", "", 4 16 "previous", "p", "", 4 17 "next", "n", "", 4 18 "current", "c", ".", 4 19 "seen", "", "", 4 20 "unseen", "", "", 4 21 "new", "", "", 4 22 "first_seen", "fs", "", 4 23 "first_unseen", "fu", "", 4 24 "last_seen", "", "", 4 25 "last_unseen", "lu", "", 4 26 "previous_seen", "ps", "", 4 27 "previous_unseen", "pu", "", 4 28 "next_seen", "ns", "", 4 29 "next_unseen", "nu", ""); 4 30 4 31 dcl (ALL_KEYWORD initial (1), /* used in processing specifiers */ 4 32 FIRST_KEYWORD initial (2), 4 33 LAST_KEYWORD initial (3), 4 34 PREVIOUS_KEYWORD initial (4), 4 35 NEXT_KEYWORD initial (5), 4 36 CURRENT_KEYWORD initial (6), 4 37 SEEN_KEYWORD initial (7), 4 38 UNSEEN_KEYWORD initial (8), 4 39 NEW_KEYWORD initial (9), 4 40 FIRST_SEEN_KEYWORD initial (10), 4 41 FIRST_UNSEEN_KEYWORD initial (11), 4 42 LAST_SEEN_KEYWORD initial (12), 4 43 LAST_UNSEEN_KEYWORD initial (13), 4 44 PREVIOUS_SEEN_KEYWORD initial (14), 4 45 PREVIOUS_UNSEEN_KEYWORD initial (15), 4 46 NEXT_SEEN_KEYWORD initial (16), 4 47 NEXT_UNSEEN_KEYWORD initial (17)) 4 48 fixed binary static options (constant); 4 49 4 50 /* END INCLUDE FILE: rdm_msg_spec_keywords.incl.pl1 */ 1672 1673 5 1 /* BEGIN INCLUDE FILE ... rdm_switch_types.incl.pl1 */ 5 2 5 3 5 4 /****^ HISTORY COMMENTS: 5 5* 1) change(86-03-25,Herbst), approve(86-03-25,MCR7367), 5 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 5 7* New file. 5 8* END HISTORY COMMENTS */ 5 9 5 10 /* Constants for telling rdm_mailbox_interface_$set_message_switch which switch to set */ 5 11 5 12 dcl PER_MESSAGE_SEEN_SWITCH_TYPE char (4) aligned int static options (constant) init ("SEEN"); 5 13 5 14 /* END INCLUDE FILE ... rdm_switch_types.incl.pl1 */ 1674 1675 6 1 /* BEGIN INCLUDE FILE ... sdm_invocation.incl.pl1 */ 6 2 /* Created: August 1983 by G. Palter from portions of emf_info.incl.pl1 */ 6 3 6 4 /* Definition of a single invocation of send_mail */ 6 5 6 6 dcl 1 sdm_invocation aligned based (sdm_invocation_ptr), 6 7 2 type character (8), /* defines this structure as a send_mail invocation */ 6 8 2 sci_ptr pointer, /* -> subsystem utilities invocation data */ 6 9 2 area_ptr pointer, /* -> area to be used by the subsystem */ 6 10 6 11 2 message_info, /* information about the message being constructed */ 6 12 3 message_ptr pointer, /* ... -> the actual message */ 6 13 3 message_state fixed binary, /* ... unprocessed/modified/processed: controls quit query */ 6 14 3 date_time_body_modified fixed binary (71), /* ... last date/time the message body was changed: used to 6 15* display Date/Message-ID fields before transmission */ 6 16 6 17 2 fill_width fixed binary, /* default line length for message filling */ 6 18 2 flags, 6 19 3 brief bit (1) unaligned, /* ON => suppress "Mail delivered..." messages */ 6 20 3 acknowledge bit (1) unaligned, /* ON => user wants acknowledgement from recipients */ 6 21 3 notify bit (1) unaligned, /* ON => send each recipient a notification of delivery */ 6 22 3 fill bit (1) unaligned, /* ON => fill message body whenever modified */ 6 23 3 debug_mode bit (1) unaligned, /* ON => debugging features enabled */ 6 24 3 auto_write bit (1) unaligned, 6 25 3 pad bit (30) unaligned, /* ON => qedx request automatically rewrites on quit (sigh) */ 6 26 6 27 2 rdm_invocation_ptr pointer, /* -> description of read_mail invocation whose reply request 6 28* created this send_mail invocation */ 6 29 6 30 2 original_messages_ptr pointer, /* -> current list of original messages from which the 6 31* In-Reply-To field is to be regenerated after use of 6 32* qedx/apply -header */ 6 33 6 34 2 abort_code fixed binary (35); /* indicates whether send_mail exited with unsent message */ 6 35 6 36 dcl SDM_INVOCATION character (8) static options (constant) initial ("sdm_0008"); 6 37 6 38 dcl sdm_invocation_ptr pointer; 6 39 6 40 dcl sdm_area area based (sdm_invocation.area_ptr); 6 41 6 42 6 43 /* Possible message states: indicate whether the message has been modified in some way since it was last successfully 6 44* transmitted, logged, saved, or writen. This state is used by the quit request to control whether it should query the 6 45* user for permission to exit send_mail */ 6 46 6 47 dcl (UNPROCESSED_MESSAGE initial (-1), /* message has never been transmitted/logged/saved/written */ 6 48 6 49 MODIFIED_MESSAGE initial (1), /* message was transmitted/logged/saved/written but has been 6 50* modified since the last such operation */ 6 51 6 52 PROCESSED_MESSAGE initial (0)) /* message was transmitted/logged/saved/written and hasn't 6 53* been modified since that operation: OK to quit without 6 54* having to ask for the user's permission */ 6 55 fixed binary static options (constant); 6 56 6 57 /* END INCLUDE FILE ... sdm_invocation.incl.pl1 */ 1676 1677 7 1 /* START OF: rdm_forward_invocation.incl.pl1 * * * * * * * * * * * * * * * * */ 7 2 7 3 /* Structure used internally by the read_mail forward sub-request-loop */ 7 4 7 5 /* Written: 07 Oct 1983 by B. Margolin */ 7 6 7 7 dcl 1 rdm_forward_invocation aligned based (rdm_forward_invocation_ptr), 7 8 2 type char (8), 7 9 2 sci_ptr ptr, 7 10 2 rfso_ptr ptr, /* -> rdm_forward_subsystem_options */ 7 11 2 rdm_invocation_ptr ptr, /* for the read_mail that created this forwarding invocation */ 7 12 2 area_ptr ptr, 7 13 2 text_buffer, 7 14 3 buffer_ptr ptr, 7 15 3 buffer_used fixed bin (21), 7 16 2 flags, 7 17 3 debug_mode bit (1) unaligned, 7 18 3 fill bit (1) unaligned, 7 19 3 enter_request_loop bit (1) unaligned, 7 20 3 auto_write bit (1) unaligned, 7 21 3 pad bit (31) unaligned, 7 22 2 fill_width fixed bin, 7 23 2 temp_seg_ptr ptr, 7 24 2 abort_code fixed bin (35); 7 25 7 26 dcl rdm_forward_invocation_ptr ptr; 7 27 dcl RDM_FORWARD_INVOCATION char (8) int static options (constant) init ("rdmfwdin"); 7 28 7 29 /* END OF: rdm_forward_invocation.incl.pl1 * * * * * * * * * * * * * * * * */ 1678 1679 8 1 /* BEGIN INCLUDE FILE ... mlsys_format_options.incl.pl1 */ 8 2 /* Created: June 1983 by G. Palter */ 8 3 8 4 /* Options for the mlsys_utils_$format_message and mlsys_utils_$print_message entrypoints */ 8 5 8 6 dcl 1 format_message_options aligned based (format_message_options_ptr), 8 7 2 version character (8) unaligned, 8 8 2 line_length fixed binary, /* line length to be used to format/print the message */ 8 9 2 envelope_formatting_mode fixed binary, /* level of detail to be displayed for the envelope ... */ 8 10 2 header_formatting_mode fixed binary, /* ... for the message ... */ 8 11 2 redistributions_list_formatting_mode fixed binary, /* ... and for the redistributions list ... */ 8 12 2 include_body bit (1) aligned; /* ON => include message body when formatting/printing; 8 13* OFF => exclude the message body */ 8 14 8 15 dcl FORMAT_MESSAGE_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlsfmo01"); 8 16 8 17 dcl format_message_options_ptr pointer; 8 18 8 19 8 20 /* Defined formatting modes */ 8 21 8 22 dcl (NONE_FORMATTING_MODE initial (0), /* exclude this part of the message */ 8 23 BRIEF_FORMATTING_MODE initial (1), /* include only minimal information from this part of the 8 24* message; not valid for the envelope */ 8 25 DEFAULT_FORMATTING_MODE initial (2), /* include default amount of information from this part */ 8 26 LONG_FORMATTING_MODE initial (3)) /* include all information from this part of the message */ 8 27 fixed binary static options (constant); 8 28 8 29 /* END INCLUDE FILE ... mlsys_format_options.incl.pl1 */ 1680 1681 9 1 /* BEGIN INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 9 2 /* Created: June 1983 by G. Palter */ 9 3 /* Modified: March 1984 by G. Palter to remove ignore_log_save option */ 9 4 9 5 /* Options for the mlsys_utils_$parse_address_control_arguments, mlsys_utils_$parse_address_list_control_arguments, and 9 6* mlsys_utils_$parse_mailbox_control_arguments entrypoints */ 9 7 9 8 dcl 1 parse_ca_options aligned based (parse_ca_options_ptr), 9 9 2 version character (8) unaligned, 9 10 2 logbox_creation_mode fixed binary, /* specifies the action to be taken if the address/mailbox is 9 11* the user's logbox, address/mailbox validation is requested, 9 12* and the logbox does not exist */ 9 13 2 savebox_creation_mode fixed binary, /* ... same as above but for any savebox */ 9 14 2 flags, 9 15 3 abort_on_errors bit (1) unaligned, /* ON => use ssu_$abort_line to report errors (ie: abort on 9 16* the first error); OFF => use ssu_$print_message */ 9 17 3 validate_addresses bit (1) unaligned, /* ON => validate the existence of the address/mailbox; 9 18* OFF => only validate the command/request line syntax */ 9 19 3 mbz bit (34) unaligned; /* must be set to ""b by the caller */ 9 20 9 21 dcl PARSE_CA_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlspca01"); 9 22 9 23 dcl parse_ca_options_ptr pointer; 9 24 9 25 9 26 /* Defined logbox/savebox creation modes */ 9 27 9 28 dcl (DONT_CREATE_MAILBOX initial (0), /* do not create the mailbox and issue an error message */ 9 29 QUERY_TO_CREATE_MAILBOX initial (1), /* ask the user for permission to create the mailbox */ 9 30 CREATE_AND_ANNOUNCE_MAILBOX initial (2), /* create the mailbox and inform the user of this action */ 9 31 SILENTLY_CREATE_MAILBOX initial (3)) /* create the mailbox but don't inform the user */ 9 32 fixed binary static options (constant); 9 33 9 34 /* END INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 1682 1683 10 1 /* BEGIN INCLUDE FILE ... mlsys_field_names.incl.pl1 */ 10 2 /* Created: June 1983 by G. Palter */ 10 3 10 4 /* Standard names for all message envelope, header, and redistributions list fields supported by the mail system */ 10 5 10 6 dcl (ACCESS_CLASS_FIELDNAME initial ("Access-Class"), 10 7 ACKNOWLEDGE_TO_FIELDNAME initial ("Acknowledge-To"), 10 8 BCC_FIELDNAME initial ("bcc"), 10 9 CC_FIELDNAME initial ("cc"), 10 10 DATE_TIME_CREATED_FIELDNAME initial ("Date"), 10 11 DATE_TIME_DELIVERED_FIELDNAME initial ("Delivery-Date"), 10 12 DATE_TIME_MAILED_FIELDNAME initial ("Posted-Date"), 10 13 DELIVERED_BY_FIELDNAME initial ("Delivery-By"), 10 14 FROM_FIELDNAME initial ("From"), 10 15 IMPLICIT_ROUTE_FIELDNAME initial ("Route"), 10 16 MESSAGE_ID_FIELDNAME initial ("Message-ID"), 10 17 RELAY_FIELDNAME initial ("Relayed"), 10 18 REPLY_REFERENCES_FIELDNAME initial ("In-Reply-To"), 10 19 REPLY_TO_FIELDNAME initial ("Reply-To"), 10 20 SENDER_FIELDNAME initial ("Sender"), 10 21 SUBJECT_FIELDNAME initial ("Subject"), 10 22 TO_FIELDNAME initial ("To"), 10 23 10 24 10 25 /* Prefix to apply to a field name to produce the field name of the equivalent field in the redistributions list. Ie: 10 26* 10 27* call mlsys_utils_$print_address_field 10 28* (REDISTRIBUTED_PREFIX || FROM_FIELDNAME, ...) */ 10 29 10 30 REDISTRIBUTED_PREFIX initial ("Redistributed-"), 10 31 10 32 10 33 /* Fields in a redistribution which do not have a corresponding non-redistributed field */ 10 34 10 35 REDISTRIBUTED_COMMENT_FIELDNAME initial ("Redistributed-Comment")) 10 36 10 37 character (32) varying static options (constant); 10 38 10 39 10 40 /* END INCLUDE FILE ... mlsys_field_names.incl.pl1 */ 1684 1685 11 1 /* BEGIN INCLUDE FILE ... mlsys_mailbox.incl.pl1 */ 11 2 /* Created: April 1983 by G. Palter */ 11 3 11 4 /* Definition of a mailbox as used by the Multics Mail System */ 11 5 11 6 dcl 1 mailbox aligned based (mailbox_ptr), 11 7 2 version character (8) unaligned, 11 8 2 reserved bit (144), /* for exclusive use of the mail system */ 11 9 2 mailbox_address pointer, /* mail system address of this mailbox */ 11 10 2 mailbox_dirname character (168) unaligned, /* directory containing this mailbox */ 11 11 2 mailbox_ename character (32) unaligned, /* entry name of this mailbox (includes ".mbx") */ 11 12 2 mailbox_type fixed binary, /* type of mailbox (see below) */ 11 13 2 mode bit (36), /* user's effective extended access to this mailbox */ 11 14 2 flags, 11 15 3 salvaged bit (1) unaligned, /* ON => this mailbox has been salvaged since last open */ 11 16 3 reserved bit (35) unaligned, /* for exclusive use of the mail system */ 11 17 2 message_selection_mode fixed binary, /* types of messages read: all/ordinary/interactive */ 11 18 2 sender_selection_mode fixed binary, /* whose messages were read: all/own/not-own */ 11 19 2 message_reading_level fixed binary, /* how much of each message read: keys/messages */ 11 20 2 n_messages fixed binary, /* total # of messages in this mailbox structure */ 11 21 2 n_ordinary_messages fixed binary, /* ... # of ordinary messages here */ 11 22 2 n_interactive_messages fixed binary, /* ... # of interactive messages here */ 11 23 2 n_deleted_messages fixed binary, /* ... # of messages here marked for later deletion */ 11 24 2 messages (mailbox_n_messages refer (mailbox.n_messages)), 11 25 3 key bit (72), /* unique key to read this message if not already read */ 11 26 3 message_ptr pointer; /* -> the message structure */ 11 27 11 28 dcl MAILBOX_VERSION_2 character (8) static options (constant) initial ("mlsmbx02"); 11 29 11 30 dcl mailbox_ptr pointer; 11 31 11 32 dcl mailbox_n_messages fixed binary; /* for exclusive use of the mail system */ 11 33 11 34 11 35 /* Types of mailboxes distinguished by the mail system */ 11 36 11 37 dcl (USER_DEFAULT_MAILBOX initial (1), /* the user's default mailbox for receiving mail */ 11 38 USER_LOGBOX initial (2), /* the user's logbox */ 11 39 SAVEBOX initial (3), /* a savebox */ 11 40 OTHER_MAILBOX initial (4)) /* any other type of mailbox */ 11 41 fixed binary static options (constant); 11 42 11 43 /* END INCLUDE FILE ... mlsys_mailbox.incl.pl1 */ 1686 1687 12 1 /* BEGIN INCLUDE FILE ... mlsys_field_types.incl.pl1 */ 12 2 /* Created: July 1983 by G. Palter */ 12 3 12 4 /* Defined field types */ 12 5 12 6 dcl (USER_DEFINED_FIELD initial ( 0), /* user-defined field */ 12 7 ACCESS_CLASS_FIELD initial (16), ACKNOWLEDGE_TO_FIELD initial ( 7), 12 8 BCC_FIELD initial (14), CC_FIELD initial (13), 12 9 DATE_FIELD initial ( 8), DELIVERY_DATE_FIELD initial ( 5), 12 10 POSTED_DATE_FIELD initial ( 1), DELIVERY_BY_FIELD initial ( 6), 12 11 FROM_FIELD initial ( 9), ROUTE_FIELD initial ( 3), 12 12 MESSAGE_ID_FIELD initial (18), RELAYED_FIELD initial ( 4), 12 13 IN_REPLY_TO_FIELD initial (15), REPLY_TO_FIELD initial (11), 12 14 SENDER_FIELD initial ( 2), SUBJECT_FIELD initial (10), 12 15 TO_FIELD initial (12), COMMENT_FIELD initial (17), 12 16 12 17 N_ORDINARY_FIELDS initial (18)) /* # of defined field types */ 12 18 fixed binary static options (constant); 12 19 12 20 12 21 /* Defined classes of header fields */ 12 22 12 23 dcl (ORDINARY_FIELDS_BASE initial ( 0), 12 24 REDISTRIBUTED_FIELDS_BASE initial (100), /* fields in a redistribution */ 12 25 COMMENT_FIELDS_BASE initial (200)) /* fields in a comment */ 12 26 fixed binary static options (constant); 12 27 12 28 /* END INCLUDE FILE ... mlsys_field_types.incl.pl1 */ 1688 1689 13 1 /* BEGIN INCLUDE FILE ... mlsys_message.incl.pl1 */ 13 2 13 3 13 4 /****^ HISTORY COMMENTS: 13 5* 1) change(85-12-19,Herbst), approve(86-03-25,MCR7367), 13 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 13 7* Added seen switch to message. 13 8* END HISTORY COMMENTS */ 13 9 13 10 13 11 /* Created: June 1983 by G. Palter */ 13 12 13 13 /* Definition of a message as used by the Multics Mail System */ 13 14 13 15 dcl 1 message aligned based (message_ptr), 13 16 2 version character (8) unaligned, 13 17 2 reserved bit (144), /* for exclusive use of the mail system */ 13 18 2 n_reply_references fixed binary, /* # of messages for which this is a reply */ 13 19 2 n_user_fields fixed binary, /* # of non-standard header fields in this message */ 13 20 2 n_redistributions fixed binary, /* # of times this message has been forwarded */ 13 21 2 n_body_sections fixed binary, /* # of sections in the body */ 13 22 2 flags, 13 23 3 interactive bit (1) unaligned, /* ON => this is an interactive message */ 13 24 3 can_be_deleted bit (1) unaligned, /* ON => the user can delete this message if desired */ 13 25 3 marked_for_deletion bit (1) unaligned, /* ON => message will be deleted when mailbox is closed */ 13 26 3 must_be_acknowledged bit (1) unaligned, /* ON => an ACK should be generated when message is read */ 13 27 3 seen bit (1) unaligned, /* ON => user has printed message at least once */ 13 28 3 reserved bit (31) unaligned, /* for use by the mail system */ 13 29 2 pad bit (36), 13 30 2 envelope like message_envelope, /* who/when/how the message was mailed & delivered */ 13 31 2 header, 13 32 3 message_id bit (72), /* ID of this message (same value for all copies) */ 13 33 3 access_class bit (72), /* AIM access class of this message */ 13 34 3 date_time_created fixed binary (71), /* date/time this message was composed */ 13 35 3 from pointer, /* -> address list of author(s) of the message */ 13 36 3 reply_to pointer, /* -> address list of recipients for reply (if not authors) */ 13 37 3 to pointer, /* -> address list of primary recipients */ 13 38 3 cc pointer, /* -> address list of secondary recipients */ 13 39 3 bcc pointer, /* -> address list of blind recipients */ 13 40 3 subject like message_text_field, /* subject of the message */ 13 41 3 reply_references pointer, /* -> list of messages for which this message is a reply */ 13 42 3 user_fields_list pointer, /* -> list of user-defined fields in this message */ 13 43 2 redistributions_list pointer, /* -> redistributions list for this message */ 13 44 2 body, 13 45 3 total_lines fixed binary (21), /* total # of lines in the body or -1 if indeterminate */ 13 46 3 pad bit (36), 13 47 3 body_sections (message_n_body_sections refer (message.n_body_sections)) like message_body_section; 13 48 13 49 dcl MESSAGE_VERSION_2 character (8) static options (constant) initial ("mlsmsg02"); 13 50 13 51 dcl message_subject character (message.header.subject.text_lth) unaligned based (message.header.subject.text_ptr); 13 52 13 53 dcl message_ptr pointer; 13 54 13 55 dcl (message_n_body_sections, message_trace_n_relays, message_n_redistributions, message_n_user_fields, 13 56 message_references_list_n_references) 13 57 fixed binary; /* for exclusive use of the mail system */ 13 58 13 59 /* Definition of a message envelope: describes when, by whom, and by what route the message was mailed */ 13 60 13 61 dcl 1 message_envelope aligned based (message_envelope_ptr), 13 62 2 date_time_mailed fixed binary (71), /* date/time this message was entered into the mail system */ 13 63 2 sender pointer, /* -> address of entity that mailed the message */ 13 64 2 trace pointer, /* -> message_trace describing how it got here */ 13 65 2 date_time_delivered fixed binary (71), /* date/time this message was delivered */ 13 66 2 delivered_by pointer, /* -> address of entity that delivered the message */ 13 67 2 acknowledge_to pointer; /* -> address of entity to receive ACK when message is read */ 13 68 13 69 dcl message_envelope_ptr pointer; 13 70 13 71 13 72 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the message envelope */ 13 73 13 74 dcl 1 message_envelope_parameter aligned based (message_envelope_parameter_ptr), 13 75 2 pad pointer, /* forces even word alignment */ 13 76 2 version character (8) unaligned, 13 77 2 envelope like message_envelope; 13 78 13 79 dcl MESSAGE_ENVELOPE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsenv02"); 13 80 13 81 dcl message_envelope_parameter_ptr pointer; 13 82 13 83 13 84 /* Definition of a message trace: describes the route and each relay operation by which a message was passed through the 13 85* networks to reach this recipient */ 13 86 13 87 dcl 1 message_trace aligned based (message_trace_ptr), 13 88 2 version character (8) unaligned, 13 89 2 reserved bit (144), /* ... exclusively for use by the mail system */ 13 90 2 implicit_route pointer, /* -> an address_route which defines the route it took */ 13 91 2 pad bit (36), 13 92 2 n_relays fixed binary, /* # of relay operations required to reach this site */ 13 93 2 relays (message_trace_n_relays refer (message_trace.n_relays)), 13 94 3 date_time_relayed fixed binary (71), /* ... when this relay operation took place */ 13 95 3 sending_host character (256) varying, /* ... the host which relayed the message */ 13 96 3 receiving_host character (256) varying, /* ... the host which received it */ 13 97 3 communications_media character (32) unaligned, /* ... medium over which relay took place (ARPA, Tymnet) */ 13 98 3 communications_protocol character (32) unaligned,/* ... low-level protocol used (TCP, X.25) */ 13 99 3 mail_protocol character (32) unaligned, /* ... mailer protocol used (SMTP, NBS) */ 13 100 3 relay_id bit (72), /* ... unique ID assigned by receiving system or ""b */ 13 101 3 relay_recipient pointer; /* ... -> address of recipient as given by sending system */ 13 102 13 103 dcl MESSAGE_TRACE_VERSION_2 character (8) static options (constant) initial ("mlstrc02"); 13 104 13 105 dcl message_trace_ptr pointer; 13 106 13 107 /* Definition of a message's redistributions list */ 13 108 13 109 dcl 1 message_redistributions_list aligned based (message.redistributions_list), 13 110 2 version character (8) unaligned, 13 111 2 reserved bit (144), /* ... exclusively for use by the mail system */ 13 112 2 pad bit (36), 13 113 2 n_redistributions fixed binary, /* # of redistributions */ 13 114 2 redistributions (message_n_redistributions refer (message_redistributions_list.n_redistributions)) 13 115 like message_redistribution; /* the redistributions: oldest first */ 13 116 13 117 dcl MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsrl002"); 13 118 13 119 13 120 /* Definition of a single redistribution (forwarding) of a message */ 13 121 13 122 dcl 1 message_redistribution aligned based (message_redistribution_ptr), 13 123 2 envelope like message_envelope, 13 124 2 header, 13 125 3 message_id bit (72), /* ID of this redistribution (same for all copies) */ 13 126 3 date_time_created fixed binary (71), /* date/time when this redistribution was made */ 13 127 3 from pointer, /* -> address list of authors of this redistribution */ 13 128 3 to pointer, /* -> address list of recipients of the redistribution */ 13 129 3 comment like message_text_field; /* optional comment associated with the redistribution */ 13 130 13 131 dcl message_redistribution_comment character (message_redistribution.comment.text_lth) unaligned 13 132 based (message_redistribution.comment.text_ptr); 13 133 13 134 dcl message_redistribution_ptr pointer; 13 135 13 136 13 137 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the redistributions of a message */ 13 138 13 139 dcl 1 message_redistribution_parameter aligned based (message_redistribution_parameter_ptr), 13 140 2 pad pointer, /* forces even word alignment */ 13 141 2 version character (8) unaligned, 13 142 2 redistribution like message_redistribution; 13 143 13 144 dcl MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsdist2"); 13 145 13 146 dcl message_redistribution_parameter_ptr pointer; 13 147 13 148 /* Definition of the list of user-defined fields in a message */ 13 149 13 150 dcl 1 message_user_fields_list aligned based (message.user_fields_list), 13 151 2 version character (8) unaligned, 13 152 2 reserved bit (144), /* ... exclusively for use by the mail system */ 13 153 2 pad bit (36), 13 154 2 n_user_fields fixed binary, /* # of user-defined fields in the message */ 13 155 2 user_fields (message_n_user_fields refer (message_user_fields_list.n_user_fields)) 13 156 like message_user_field; /* the actual user-defined fields */ 13 157 13 158 dcl MESSAGE_USER_FIELDS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsufl02"); 13 159 13 160 13 161 /* Definition of a user defined message header field */ 13 162 13 163 dcl 1 message_user_field aligned based (message_user_field_ptr), 13 164 2 header, 13 165 3 field_id bit (36) aligned, /* identifies the purpose of this field */ 13 166 3 field_type fixed binary, /* type of data contained in this field */ 13 167 2 field_type_variable bit (144); /* the actual data (see below) */ 13 168 13 169 dcl message_user_field_ptr pointer; 13 170 13 171 13 172 /* Defined types of user defined fields */ 13 173 13 174 dcl (MESSAGE_TEXT_USER_FIELD initial (1), /* content of the field is a text string */ 13 175 MESSAGE_ADDRESS_LIST_USER_FIELD initial (2), /* content of the field is an address list */ 13 176 MESSAGE_DATE_USER_FIELD initial (3), /* content of the field is a date/time */ 13 177 MESSAGE_INTEGER_USER_FIELD initial (4)) /* content of the filed is a fixed binary value */ 13 178 fixed binary static options (constant); 13 179 13 180 13 181 /* Structures used to access the data for the different types of user defined fields */ 13 182 13 183 dcl 1 message_text_user_field aligned based (message_user_field_ptr), 13 184 2 header like message_user_field.header, 13 185 2 text like message_text_field; /* the message text */ 13 186 13 187 dcl message_text_user_field_text character (message_text_user_field.text.text_lth) unaligned 13 188 based (message_text_user_field.text.text_ptr); 13 189 13 190 dcl 1 message_address_list_user_field aligned based (message_user_field_ptr), 13 191 2 header like message_user_field.header, 13 192 2 address_list_ptr pointer, /* -> the address list */ 13 193 2 pad bit (72); 13 194 13 195 dcl 1 message_date_user_field aligned based (message_user_field_ptr), 13 196 2 header like message_user_field.header, 13 197 2 date_time fixed binary (71), /* the clock reading */ 13 198 2 pad bit (72); 13 199 13 200 dcl 1 message_integer_user_field aligned based (message_user_field_ptr), 13 201 2 header like message_user_field.header, 13 202 2 value fixed binary (35), /* the integer value */ 13 203 2 pad bit (108); 13 204 13 205 13 206 /* Structure used in calls to mail_system_ entrypoints which manipulate the user-defined fields of a message */ 13 207 13 208 dcl 1 message_user_field_parameter aligned based (message_user_field_parameter_ptr), 13 209 2 pad pointer, /* forces even word alignment */ 13 210 2 version character (8) unaligned, 13 211 2 user_field like message_user_field; 13 212 13 213 dcl MESSAGE_USER_FIELD_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsudf02"); 13 214 13 215 dcl message_user_field_parameter_ptr pointer; 13 216 13 217 /* Definition of a list of message references used as the value of message header fields (eg: In-Reply-To) */ 13 218 13 219 dcl 1 message_references_list aligned based (message_references_list_ptr), 13 220 2 version character (8) unaligned, 13 221 2 reserved bit (144), /* ... exclusively for use by the mail system */ 13 222 2 pad bit (36), 13 223 2 n_references fixed binary, /* # of references in this list */ 13 224 2 references (message_references_list_n_references refer (message_references_list.n_references)) 13 225 like message_reference; /* the references themselves */ 13 226 13 227 dcl MESSAGE_REFERENCES_LIST_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 13 228 13 229 dcl message_references_list_ptr pointer; 13 230 13 231 13 232 /* Definition of a reference to another message */ 13 233 13 234 dcl 1 message_reference aligned based (message_reference_ptr), 13 235 2 message_id bit (72), /* ID of the other message */ 13 236 2 date_time_created fixed binary (71), /* date/time the other message was created */ 13 237 2 from pointer, /* -> address list of authors of the other message */ 13 238 2 subject like message_text_field; /* subject of the other message */ 13 239 13 240 dcl message_reference_subject character (message_reference.subject.text_lth) unaligned 13 241 based (message_reference.subject.text_ptr); 13 242 13 243 dcl message_reference_ptr pointer; 13 244 13 245 13 246 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate message references */ 13 247 13 248 dcl 1 message_reference_parameter aligned based (message_reference_parameter_ptr), 13 249 2 pad pointer, /* forces even word alignment */ 13 250 2 version character (8) unaligned, 13 251 2 reference like message_reference; 13 252 13 253 dcl MESSAGE_REFERENCE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 13 254 13 255 dcl message_reference_parameter_ptr pointer; 13 256 13 257 13 258 /* Definition of a text field in a message (Subject, Comment, or a user defined field) */ 13 259 13 260 dcl 1 message_text_field aligned based (message_text_field_ptr), 13 261 2 text_ptr pointer, /* -> the actual text */ 13 262 2 text_lth fixed binary (21), /* length of said text */ 13 263 2 flags, 13 264 3 multiline_text bit (1) unaligned, /* ON => the text of this field may span multiple lines; 13 265* OFF => the text will always be a single line */ 13 266 3 reserved bit (35) unaligned; /* for exclusive use of the mail system */ 13 267 13 268 dcl message_text_field_text character (message_text_field.text_lth) unaligned based (message_text_field.text_ptr); 13 269 13 270 dcl message_text_field_ptr pointer; 13 271 13 272 /* Definition of a section of the body of a message */ 13 273 13 274 dcl 1 message_body_section aligned based (message_body_section_ptr), 13 275 2 header, 13 276 3 section_type fixed binary, /* type of "text" stored in this section */ 13 277 3 section_n_lines fixed binary (21), /* # of lines in this section or -1 if indeterminate */ 13 278 2 section_type_variable bit (144); /* the actual data (see below) */ 13 279 13 280 dcl message_body_section_ptr pointer; 13 281 13 282 13 283 /* Defined types of message body sections */ 13 284 13 285 dcl (MESSAGE_PREFORMATTED_BODY_SECTION initial (1), /* text formatted by the authors/sender */ 13 286 MESSAGE_BIT_STRING_BODY_SECTION initial (2)) /* arbitrary bit string */ 13 287 fixed binary static options (constant); 13 288 13 289 13 290 /* Structures used to access the data for the different types of message body sections */ 13 291 13 292 dcl 1 message_preformatted_body_section aligned based (message_body_section_ptr), 13 293 2 header like message_body_section.header, 13 294 2 text_ptr pointer, /* -> the text */ 13 295 2 text_lth fixed binary (21), /* length of said text in characters */ 13 296 2 reserved bit (36); /* for exclusive use of the mail system */ 13 297 13 298 dcl message_preformatted_body_section_text character (message_preformatted_body_section.text_lth) unaligned 13 299 based (message_preformatted_body_section.text_ptr); 13 300 13 301 dcl 1 message_bit_string_body_section aligned based (message_body_section_ptr), 13 302 2 header like message_body_section.header, 13 303 2 bit_string_ptr pointer, /* -> the bit string */ 13 304 2 bit_string_lth fixed binary (24), /* length of said bit string in bits (obviously) */ 13 305 2 reserved bit (36); /* for exclusive use of the mail system */ 13 306 13 307 dcl message_bit_string_body_section_bit_string bit (message_bit_string_body_section.bit_string_lth) unaligned 13 308 based (message_bit_string_body_section.bit_string_ptr); 13 309 13 310 13 311 /* Structure used in calls to mail_system_ entrypoints which manipulate the sections of a message's body */ 13 312 13 313 dcl 1 message_body_section_parameter aligned based (message_body_section_parameter_ptr), 13 314 2 pad pointer, /* forces even word alignment */ 13 315 2 version character (8) unaligned, 13 316 2 section like message_body_section; 13 317 13 318 dcl MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsmbs02"); 13 319 13 320 dcl message_body_section_parameter_ptr pointer; 13 321 13 322 /* END INCLUDE FILE ... mlsys_message.incl.pl1 */ 1690 1691 14 1 /* BEGIN INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 14 2 /* Created: June 1983 by G. Palter */ 14 3 14 4 /* Definition of an address list -- a collection of addresses used as the value of certain message fields, etc. */ 14 5 14 6 dcl 1 address_list aligned based (address_list_ptr), 14 7 2 version character (8) unaligned, 14 8 2 reserved bit (144), /* ... exclusively for use by the mail system */ 14 9 2 n_addresses fixed binary, /* # of address in this list */ 14 10 2 addresses (address_list_n_addresses refer (address_list.n_addresses)) pointer; 14 11 14 12 dcl ADDRESS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsals02"); 14 13 14 14 dcl address_list_ptr pointer; 14 15 14 16 dcl address_list_n_addresses fixed binary; /* reserved exclusively for use by the mail system */ 14 17 14 18 /* END INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 1692 1693 1694 /* The standard definition of whitespace on Multics */ 1695 1696 dcl WHITESPACE character (5) static options (constant) initial (" 1697 "); /* SP HT NL VT FF */ 1698 1699 end rdm_msg_requests_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/24/92 1626.7 rdm_msg_requests_.pl1 >spec>install>1013>rdm_msg_requests_.pl1 1666 1 10/27/83 2204.3 rdm_invocation.incl.pl1 >ldd>incl>rdm_invocation.incl.pl1 1668 2 10/27/83 2204.3 rdm_message_list.incl.pl1 >ldd>incl>rdm_message_list.incl.pl1 1670 3 10/27/83 2204.3 rdm_message_chains.incl.pl1 >ldd>incl>rdm_message_chains.incl.pl1 1672 4 05/22/86 1325.8 rdm_msg_spec_keywords.incl.pl1 >ldd>incl>rdm_msg_spec_keywords.incl.pl1 1674 5 05/22/86 1325.8 rdm_switch_types.incl.pl1 >ldd>incl>rdm_switch_types.incl.pl1 1676 6 10/27/83 2204.2 sdm_invocation.incl.pl1 >ldd>incl>sdm_invocation.incl.pl1 1678 7 10/27/83 2204.3 rdm_fwd_invocation.incl.pl1 >ldd>incl>rdm_fwd_invocation.incl.pl1 1680 8 10/27/83 2204.2 mlsys_format_options.incl.pl1 >ldd>incl>mlsys_format_options.incl.pl1 1682 9 06/18/84 1424.1 mlsys_parse_ca_options.incl.pl1 >ldd>incl>mlsys_parse_ca_options.incl.pl1 1684 10 10/27/83 2204.2 mlsys_field_names.incl.pl1 >ldd>incl>mlsys_field_names.incl.pl1 1686 11 10/27/83 2204.2 mlsys_mailbox.incl.pl1 >ldd>incl>mlsys_mailbox.incl.pl1 1688 12 10/27/83 2204.2 mlsys_field_types.incl.pl1 >ldd>incl>mlsys_field_types.incl.pl1 1690 13 05/22/86 1325.8 mlsys_message.incl.pl1 >ldd>incl>mlsys_message.incl.pl1 1692 14 10/27/83 2204.2 mlsys_address_list.incl.pl1 >ldd>incl>mlsys_address_list.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. ALL_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 326 1532 ALL_MESSAGES constant fixed bin(17,0) initial dcl 3-42 ref 710 723 BCC_FIELD constant fixed bin(17,0) initial dcl 12-6 set ref 837 1303* 1332 BCC_FIELDNAME 000070 constant varying char(32) initial dcl 10-6 set ref 1332* BEGINNING_OF_TIME 000134 constant fixed bin(71,0) initial dcl 192 ref 780 787 BRIEF_FORMATTING_MODE constant fixed bin(17,0) initial dcl 8-22 ref 868 885 1585 CC_FIELD constant fixed bin(17,0) initial dcl 12-6 set ref 828 1302* 1328 CC_FIELDNAME 000057 constant varying char(32) initial dcl 10-6 set ref 1328* CURRENT_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 361 DEFAULT_FORMATTING_MODE constant fixed bin(17,0) initial dcl 8-22 ref 463 867 873 884 DELETE_REQUEST constant fixed bin(17,0) initial dcl 172 ref 292 452 559 905 DONT_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 9-28 ref 1054 END_OF_TIME 000132 constant fixed bin(71,0) initial dcl 192 ref 767 774 FIRST_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 333 FIRST_SEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 389 FIRST_UNSEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 396 FORMAT_MESSAGE_OPTIONS_VERSION_1 000104 constant char(8) initial packed unaligned dcl 8-15 ref 456 FROM_FIELD constant fixed bin(17,0) initial dcl 12-6 ref 801 1280 FROM_FIELDNAME 000046 constant varying char(32) initial dcl 10-6 set ref 1280* IN_REPLY_TO_FIELD constant fixed bin(17,0) initial dcl 12-6 ref 738 JUST_LIST_NUMBERS constant bit(1) initial dcl 182 set ref 566* 1473 1518 1531 LAST_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 340 LAST_SEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 403 LAST_UNSEEN_KEYWORD 000113 constant fixed bin(17,0) initial dcl 4-31 ref 410 LIST_INFO constant bit(1) initial dcl 182 set ref 551* LIST_REQUEST constant fixed bin(17,0) initial dcl 172 ref 262 468 506 551 601 620 889 LONG_FORMATTING_MODE constant fixed bin(17,0) initial dcl 8-22 ref 865 883 LOWERCASE 000123 constant char(26) initial packed unaligned dcl 197 ref 1110 1432 NEW_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 382 1532 NEXT_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 354 NEXT_SEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 431 NEXT_UNSEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 438 NONE_FORMATTING_MODE constant fixed bin(17,0) initial dcl 8-22 ref 870 1585 NON_DELETED_MESSAGES constant fixed bin(17,0) initial dcl 3-42 ref 450 631 713 NULL_STRING 000243 constant char(1) initial packed unaligned dcl 202 set ref 1008 1008 ONE_DAY 000136 constant fixed bin(71,0) initial dcl 192 ref 746 795 ONLY_DELETED_MESSAGES constant fixed bin(17,0) initial dcl 3-42 ref 448 711 OTHER_REQUEST constant fixed bin(17,0) initial dcl 172 ref 325 332 339 346 353 360 367 374 381 388 395 402 409 416 423 430 437 515 534 566 620 698 716 1532 PARSE_CA_OPTIONS_VERSION_1 000102 constant char(8) initial packed unaligned dcl 9-21 ref 1053 PER_MESSAGE_SEEN_SWITCH_TYPE 000112 constant char(4) initial dcl 5-12 set ref 480 1617* PREVIOUS_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 347 PREVIOUS_SEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 417 PREVIOUS_UNSEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 424 PRINT_HEADER_REQUEST constant fixed bin(17,0) initial dcl 172 ref 283 455 553 601 879 PRINT_REQUEST constant fixed bin(17,0) initial dcl 172 ref 273 455 458 553 601 612 861 1617 P_list_sw parameter bit(1) dcl 1464 ref 1461 1473 1518 1531 P_rdm_invocation_ptr parameter pointer dcl 98 ref 89 259 270 280 289 298 307 316 322 329 336 343 350 357 364 371 378 385 392 399 406 413 420 427 434 574 577 596 P_sci_ptr parameter pointer dcl 97 in procedure "rdm_msg_requests_" set ref 89 259 270 280 289 298 307 316 322 329 336 343 350 357 364 371 378 385 392 399 406 413 420 427 434 446 478* 479* 482* 509* 515* 534* 564* 574 579* 581* 601* 603* 612* 620* 624* 682* 696* 704* 716* 720* 748* 876* 886* 895* 902* 908* 911* 923* 928* 943* 948* 951* 991* 1003* 1011* 1032* 1059* 1061* 1080* 1084* 1175* 1479* 1563* 1569* 1595* 1610* P_sci_ptr parameter pointer dcl 1629 in procedure "set_switch" set ref 1626 1640* 1645* RDM_FORWARD_INVOCATION 000106 constant char(8) initial packed unaligned dcl 7-27 ref 609 RECIPIENT_CLASS constant fixed bin(17,0) initial dcl 186 set ref 492 818* 827* 836* 845* 854* 1191 REDISTRIBUTED_FIELDS_BASE constant fixed bin(17,0) initial dcl 12-23 ref 846 1304 REDISTRIBUTED_PREFIX 000002 constant varying char(32) initial dcl 10-6 ref 1338 REPLY_REFERENCES_FIELDNAME 000035 constant varying char(32) initial dcl 10-6 set ref 1255* REPLY_TO_FIELD constant fixed bin(17,0) initial dcl 12-6 ref 810 REPLY_TO_FIELDNAME 000024 constant varying char(32) initial dcl 10-6 set ref 1284* RETRIEVE_REQUEST constant fixed bin(17,0) initial dcl 172 ref 301 448 452 509 562 SDM_INVOCATION 000110 constant char(8) initial packed unaligned dcl 6-36 ref 598 SEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 368 1532 SENDER_CLASS constant fixed bin(17,0) initial dcl 186 set ref 491 800* 809* 1190 SLASH 013532 constant char(1) initial packed unaligned dcl 203 ref 802 811 820 829 838 847 856 988 991 SUBJECT_CLASS constant fixed bin(17,0) initial dcl 186 set ref 490 730* 737* 1189 SUBJECT_FIELD constant fixed bin(17,0) initial dcl 12-6 ref 731 1245 SWITCH_OFF_REQUEST constant fixed bin(17,0) initial dcl 172 ref 310 477 564 704 1632 SWITCH_ON_REQUEST constant fixed bin(17,0) initial dcl 172 ref 319 477 564 704 TIME_CLASS constant fixed bin(17,0) initial dcl 186 set ref 489 744* 756* 765* 772* 779* 786* 793* 1188 TO_FIELD constant fixed bin(17,0) initial dcl 12-6 set ref 819 846 1301* 1304 1324 TO_FIELDNAME 000013 constant varying char(32) initial dcl 10-6 set ref 1324* 1338 UNSEEN_KEYWORD constant fixed bin(17,0) initial dcl 4-31 ref 375 1532 UPPERCASE 000114 constant char(26) initial packed unaligned dcl 197 ref 1110 1432 WHITESPACE 000000 constant char(5) initial packed unaligned dcl 1696 ref 1003 abort_on_errors 4 000432 automatic bit(1) level 3 packed packed unaligned dcl 1050 set ref 1055* active_request 000135 automatic bit(1) dcl 138 set ref 579* 585 620* 625* 1470 1514 1535 1541 1549 addcharno builtin function dcl 254 ref 994 addr builtin function dcl 254 ref 660 966 994 999 1008 1008 1059 1059 1106 1187 1434 1434 1609 1609 address_idx 000320 automatic fixed bin(17,0) dcl 1364 set ref 1380* 1381* address_list based structure level 1 dcl 14-6 address_ptr 12 based pointer array level 3 in structure "selection_array" dcl 129 in procedure "rdm_msg_requests_" set ref 640* address_ptr 12 based pointer level 2 in structure "sel" dcl 117 in procedure "rdm_msg_requests_" set ref 661 661* 971* 1059* 1381* addresses 10 based pointer array level 2 dcl 14-6 set ref 1381* argument based char packed unaligned dcl 149 set ref 480 482* 698 704* 707 707 708 708 710 710 711 711 713 713 716 720* 723 723 725 725 726 726 728 728 735 735 742 742 754 754 754 763 763 770 770 777 777 784 784 791 791 798 798 807 807 816 825 834 843 843 852 852 862 862 863 863 865 865 867 867 868 868 870 870 872 872 876* 880 880 881 881 883 883 884 884 885 885 886* 890 890 891 891 892 892 901 901 902* 906 906 907 907 908* 911* argument1 based char packed unaligned dcl 150 set ref 732* 739* 745* 748* 757* 766* 773* 781* 788* 794* 802 802* 811 811* 820 820* 829 829* 838 838* 847 847* 856 856* 894* 895* argument1_lth 000263 automatic fixed bin(21,0) dcl 153 set ref 732 732 739 739 745 745 748 748 757 757 766 766 773 773 781 781 788 788 794 794 802 802 802 811 811 811 820 820 820 829 829 829 838 838 838 847 847 847 856 856 856 894 894 895 895 928* 948* argument1_ptr 000256 automatic pointer dcl 152 set ref 732 739 745 748 757 766 773 781 788 794 802 802 811 811 820 820 829 829 838 838 847 847 856 856 894 895 928* 948* argument2 based char packed unaligned dcl 151 set ref 746* 748* 758* argument2_lth 000264 automatic fixed bin(21,0) dcl 153 set ref 746 746 748 748 758 758 951* argument2_ptr 000260 automatic pointer dcl 152 set ref 746 748 758 951* argument_idx 000137 automatic fixed bin(17,0) dcl 140 set ref 694* 696* 701* 923 927* 927 928* 943 947* 947 948* 950* 950 951* 1059* 1064* 1064 argument_lth 000262 automatic fixed bin(21,0) dcl 153 set ref 479* 480 482 482 696* 698 704 704 707 707 708 708 710 710 711 711 713 713 716 720 720 723 723 725 725 726 726 728 728 735 735 742 742 748 748 754 754 754 763 763 770 770 777 777 784 784 791 791 798 798 807 807 816 825 834 843 843 852 852 862 862 863 863 865 865 867 867 868 868 870 870 872 872 876 876 880 880 881 881 883 883 884 884 885 885 886 886 890 890 891 891 892 892 901 901 902 902 906 906 907 907 908 908 911 911 923 923 943 943 991 991 1003 1003 1011 1011 1032 1032 1080* 1082* argument_ptr 000254 automatic pointer dcl 152 set ref 479* 480 482 696* 698 704 707 707 708 708 710 710 711 711 713 713 716 720 723 723 725 725 726 726 728 728 735 735 742 742 748 754 754 754 763 763 770 770 777 777 784 784 791 791 798 798 807 807 816 825 834 843 843 852 852 862 862 863 863 865 865 867 867 868 868 870 870 872 872 876 880 880 881 881 883 883 884 884 885 885 886 890 890 891 891 892 892 901 901 902 906 906 907 907 908 911 923 943 991 1003 1011 1032 1080* 1082* array based structure array level 2 dcl 129 set ref 660 966 1106 1187 bcc 24 000100 automatic structure level 2 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1332* bcc 46 based pointer level 3 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" set ref 1332* body 62 based structure level 2 dcl 13-15 buffer based structure level 1 dcl 1132 buffer_ptr 000130 automatic pointer level 2 in structure "saved_last_search_buffer" dcl 1146 in procedure "process_selections" set ref 1163 1194 buffer_ptr 100 based pointer level 3 in structure "rdm_invocation" dcl 1-6 in procedure "rdm_msg_requests_" set ref 1163 1194 case_independence_sw 000273 automatic bit(1) dcl 157 set ref 528 646* 725* 726* 1427 cc 44 based pointer level 3 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" set ref 1328* cc 20 000100 automatic structure level 2 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1328* class based fixed bin(17,0) level 2 dcl 117 set ref 969* 1188 1189 1190 1191 class_count 000111 automatic fixed bin(17,0) array dcl 115 set ref 489 490 491 492 644* 973* 973 class_sw 000110 automatic structure level 1 dcl 110 set ref 502 509 520 528 531 1230 1266 1397 cleanup 000304 stack reference condition dcl 252 ref 444 1161 clock_value 000414 automatic fixed bin(71,0) dcl 1026 set ref 1031* 1036* 1038* 1041 code 000335 automatic fixed bin(35,0) dcl 1418 in procedure "match_sel_on_string" set ref 1434* 1436 1446* 1448 code 000437 automatic fixed bin(35,0) dcl 1051 in procedure "add_address" set ref 1059* 1061 1061* code 000344 automatic fixed bin(35,0) dcl 679 in procedure "stack_allocate" set ref 681* 682 682* code 000303 automatic fixed bin(35,0) dcl 163 in procedure "rdm_msg_requests_" set ref 894* 895 1008* 1009 1009* 1011 1011* 1082* 1084 1084* 1478* 1479 1479* 1562* 1563 1563* 1567* 1569 1569* 1594* 1595 1595* 1609* 1610 1610* 1639* 1640 1640* 1644* 1645 1645* code 000422 automatic fixed bin(35,0) dcl 1029 in procedure "convert_time" set ref 1031* 1032 1032* code 000133 automatic fixed bin(35,0) dcl 1148 in procedure "process_selections" set ref 1174* 1175 1175* control_argument based char packed unaligned dcl 149 set ref 748* 923* 943* 991* 1003* 1011* 1032* convert builtin function dcl 254 ref 1516 1520 convert_date_to_binary_ 000026 constant entry external dcl 205 ref 1031 copied_str 000100 automatic char packed unaligned dcl 1430 set ref 1432* 1434 1434 1438 copy_str based char packed unaligned dcl 1099 set ref 1110* copy_str_lth 000456 automatic fixed bin(21,0) dcl 1100 set ref 1108* 1109 1109 1110 copy_str_ptr 000460 automatic pointer dcl 1101 set ref 1109* 1110 1111 cu_$grow_stack_frame 000030 constant entry external dcl 206 ref 681 current_message 77 based fixed bin(17,0) level 2 dcl 1-6 set ref 1484 1549* 1601* currentsize builtin function dcl 254 ref 634 634 637 637 cv_dec_check_ 000032 constant entry external dcl 207 ref 894 date_time_created 34 based fixed bin(71,0) level 3 dcl 13-15 ref 1225 1225 day_of_month 000417 automatic fixed bin(17,0) dcl 1027 set ref 1036* 1038* decode_clock_value_$date_time 000034 constant entry external dcl 208 ref 1036 delete_sw 000270 automatic bit(1) dcl 157 set ref 555 646* 862* 863* 880* 881* deleted 16 based pointer level 4 dcl 1-6 ref 1494 1495 deleted_chain based structure level 1 dcl 3-25 divide builtin function dcl 254 ref 1109 1109 dl_rt_sw 000272 automatic bit(1) dcl 157 set ref 452* 707 708 710 711 713 723 encode_clock_value_ 000036 constant entry external dcl 211 ref 1038 envelope_formatting_mode 3 000123 automatic fixed bin(17,0) level 2 dcl 134 set ref 1585* 1587* error_table_$badarg 000012 external static fixed bin(35,0) dcl 168 set ref 716* error_table_$badopt 000014 external static fixed bin(35,0) dcl 168 set ref 482* 704* 720* 876* 886* 902* 908* 911* error_table_$noarg 000016 external static fixed bin(35,0) dcl 168 set ref 478* 509* 923* 943* error_table_$nomatch 000020 external static fixed bin(35,0) dcl 168 ref 1009 first_argument 000140 automatic fixed bin(17,0) dcl 140 set ref 483* 485* 694 first_message_idx 000275 automatic fixed bin(17,0) dcl 160 set ref 541* 546* 1491 1511 1591 1636 flags 4 000432 automatic structure level 2 dcl 1050 force_sw 000267 automatic bit(1) dcl 157 set ref 559* 646* 906* 907* format_message_options based structure level 1 dcl 8-6 formatting_mode 000132 automatic fixed bin(17,0) dcl 135 in procedure "rdm_msg_requests_" set ref 459* 463* 865* 867* 868* 870* 873* 883* 884* 885* 1585 1587 1589 formatting_mode 104 based fixed bin(17,0) level 3 in structure "rdm_invocation" dcl 1-6 in procedure "rdm_msg_requests_" ref 459 from 36 based pointer level 3 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" set ref 1280* from 4 000100 automatic structure level 2 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1280* get_line_length_$switch 000040 constant entry external dcl 214 ref 1474 header 30 based structure level 2 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" header based structure level 2 in structure "message_body_section" dcl 13-274 in procedure "rdm_msg_requests_" header 24 based structure array level 3 in structure "message_redistributions_list" dcl 13-109 in procedure "rdm_msg_requests_" header 64 based structure array level 4 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" header 4 based structure level 3 in structure "message_user_field_parameter" dcl 13-208 in procedure "rdm_msg_requests_" header based structure level 2 in structure "message_user_field" dcl 13-163 in procedure "rdm_msg_requests_" header 4 based structure level 3 in structure "message_body_section_parameter" dcl 13-313 in procedure "rdm_msg_requests_" header 10 based structure array level 3 in structure "message_user_fields_list" dcl 13-150 in procedure "rdm_msg_requests_" header_formatting_mode 4 000123 automatic fixed bin(17,0) level 2 dcl 134 set ref 1589* idx 000137 automatic fixed bin(17,0) dcl 1149 in procedure "process_selections" set ref 1209* 1210 1210* idx 000100 automatic fixed bin(17,0) dcl 657 in procedure "cleanup_request" set ref 659* 660* idx 000446 automatic fixed bin(17,0) dcl 1077 in procedure "process_msg_specs" set ref 1079* 1080* idx 000462 automatic fixed bin(17,0) dcl 1103 in procedure "make_lowercase_select_strings" set ref 1105* 1106* idx 000302 automatic fixed bin(17,0) dcl 161 in procedure "rdm_msg_requests_" set ref 1494* 1495* idx 000310 automatic fixed bin(17,0) dcl 1322 in procedure "process_single_recipient_selection" set ref 1339* 1341* in_reply_to 000100 automatic structure level 2 dcl 1136 include_body 6 000123 automatic bit(1) level 2 dcl 134 set ref 460* 464* 874* index builtin function dcl 254 ref 698 716 802 811 820 829 838 847 856 988 1438 1450 ioa_ 000042 constant entry external dcl 215 ref 587 1522 1541 1607 1612 iox_$control 000044 constant entry external dcl 216 ref 1613 iox_$user_output 000010 external static pointer dcl 165 set ref 1474* 1478* 1567* 1609* 1613* is_non_deleted 000472 automatic bit(1) dcl 1465 set ref 1493* 1494 1495* 1497 is_original_request 000100 automatic bit(1) dcl 103 set ref 502 605* 614* 618* 862 863 880 881 last_message_idx 000276 automatic fixed bin(17,0) dcl 160 set ref 542* 547* 1491 1511 1591 1636 last_search_buffer 100 based structure level 2 dcl 1-6 set ref 1159 1163* 1194* length builtin function dcl 254 ref 991 995 1000 1515 1521 1521 line_length 2 000123 automatic fixed bin(17,0) level 2 dcl 134 set ref 457* listing_header_sw 000266 automatic bit(1) dcl 157 set ref 469* 646* 890* 891* 1477 listing_line_length 000274 automatic fixed bin(17,0) dcl 158 set ref 470* 894* 899 901* 1478* 1567* local_fmo 000123 automatic structure level 1 dcl 134 set ref 1609 1609 local_pcao 000432 automatic structure level 1 dcl 1050 set ref 1059 1059 logbox_creation_mode 2 000432 automatic fixed bin(17,0) level 2 dcl 1050 set ref 1054* ltrim builtin function dcl 254 ref 1516 1520 mail_system_$compare_addresses 000046 constant entry external dcl 217 ref 1381 mail_system_$free_address 000050 constant entry external dcl 218 ref 661 mail_system_$set_message_switch 000052 constant entry external dcl 219 ref 1617 1644 mailbox based structure level 1 dcl 11-6 mailbox_dirname 10 based char(168) level 2 packed packed unaligned dcl 11-6 set ref 585* 585* 587* 587* mailbox_ename 62 based char(32) level 2 packed packed unaligned dcl 11-6 set ref 585* 585* 587* 587* mailbox_info 6 based structure level 2 dcl 1-6 mailbox_name 24 based varying char(168) level 3 dcl 1-6 set ref 1175* 1563* 1595* 1640* mailbox_ptr 6 based pointer level 3 in structure "rdm_invocation" dcl 1-6 in procedure "rdm_msg_requests_" ref 583 mailbox_ptr 000320 automatic pointer dcl 11-30 in procedure "rdm_msg_requests_" set ref 583* 585 585 585 585 587 587 587 587 marked 20 based pointer level 4 dcl 1-6 ref 531 534 541 547 1171 1172 1207 1209 1210 1210 1212 1212 1492 1512 1592 1637 marked_chain based structure level 1 dcl 3-30 match_str based char packed unaligned dcl 1413 ref 1432 1450 match_str_lth 000330 automatic fixed bin(21,0) dcl 1414 set ref 1422* 1430 1432 1434* 1446* 1450 match_str_ptr 000332 automatic pointer dcl 1415 set ref 1421* 1432 1446* 1450 match_sw 000334 automatic bit(1) dcl 1417 set ref 1436* 1438* 1448* 1450* 1453 matched_sw 000127 automatic structure level 1 dcl 1144 set ref 1184* 1230 1266 1397 maxlength builtin function dcl 255 ref 1474 mbz 4(02) 000432 automatic bit(34) level 3 packed packed unaligned dcl 1050 set ref 1057* message based structure level 1 dcl 13-15 message_body_section based structure level 1 dcl 13-274 message_chain based structure level 1 dcl 3-7 message_chains 12 based structure level 3 dcl 1-6 message_envelope based structure level 1 dcl 13-61 message_field_buffers 000100 automatic structure level 1 dcl 1136 message_idx 000300 automatic fixed bin(17,0) dcl 160 in procedure "rdm_msg_requests_" set ref 1491* 1492* 1511* 1512* 1591* 1592* 1636* 1637* message_idx 000134 automatic fixed bin(17,0) dcl 1149 in procedure "process_selections" set ref 1171* 1172* 1207* 1208 1209* 1226 1247 1261 1393 message_idx_increment 000277 automatic fixed bin(17,0) dcl 160 set ref 543* 548* 1491 1511 1591 1636 message_number 000301 automatic fixed bin(17,0) dcl 160 in procedure "rdm_msg_requests_" set ref 1492* 1495 1497 1499 1512* 1516 1520 1562* 1563* 1567* 1567 1569* 1572* 1592* 1594* 1595* 1601* 1607* 1610* 1612* 1615* 1637* 1639* 1640* 1645* message_number 000135 automatic fixed bin(17,0) dcl 1149 in procedure "process_selections" set ref 1172* 1174* 1175* 1255* 1371* message_number_picture automatic picture(9) packed unaligned dcl 1467 ref 1516 1520 message_number_string 000142 automatic varying char(8) dcl 141 set ref 1520* 1521 1526 message_ptr 000322 automatic pointer dcl 13-53 set ref 1174* 1225 1225 1245 1245 1252 1255 1280 1284 1324 1328 1332 1336 1339 1341 1562* 1567* 1594* 1607 1607 1607 1609* 1617* 1639* 1644* message_redistribution based structure level 1 dcl 13-122 message_redistributions_list based structure level 1 dcl 13-109 message_reference based structure level 1 dcl 13-234 message_text_field based structure level 1 dcl 13-260 message_user_field based structure level 1 dcl 13-163 messages 1 based fixed bin(17,0) array level 2 in structure "deleted_chain" dcl 3-25 in procedure "rdm_msg_requests_" ref 1495 messages 1 based fixed bin(17,0) array level 2 in structure "marked_chain" dcl 3-30 in procedure "rdm_msg_requests_" set ref 1172 1210* 1210 1492 1512 1592 1637 min builtin function dcl 255 ref 1474 mlsys_et_$null_search_string 000022 external static fixed bin(35,0) dcl 168 set ref 1003* mlsys_utils_$parse_address_control_args 000054 constant entry external dcl 220 ref 1059 mlsys_utils_$print_message 000056 constant entry external dcl 221 ref 1609 mlsys_utils_$print_message_summary 000060 constant entry external dcl 222 ref 1567 mlsys_utils_$print_message_summary_header 000062 constant entry external dcl 224 ref 1478 month 000416 automatic fixed bin(17,0) dcl 1027 set ref 1036* 1038* msg_spec_array based fixed bin(17,0) array dcl 106 set ref 634 634 701* 1080* msg_spec_array_ptr 000106 automatic pointer dcl 108 set ref 634* 634 634 701 1080 msg_spec_array_size 000104 automatic fixed bin(17,0) dcl 107 set ref 633* 634 634 msg_spec_count 000105 automatic fixed bin(17,0) dcl 107 set ref 502 630* 700* 700 701 1079 msg_type 000265 automatic fixed bin(17,0) dcl 155 set ref 448* 450* 506* 513* 515* 520* 523* 631* 710* 711* 713* 723* 1082* n_addresses 6 based fixed bin(17,0) level 2 dcl 14-6 ref 1380 1662 n_arguments 000141 automatic fixed bin(17,0) dcl 140 set ref 478 579* 581 620* 624* 633 636 694 923 943 n_messages based fixed bin(17,0) level 2 in structure "deleted_chain" dcl 3-25 in procedure "rdm_msg_requests_" ref 1494 n_messages based fixed bin(17,0) level 2 in structure "marked_chain" dcl 3-30 in procedure "rdm_msg_requests_" set ref 531* 534 541 547 1171 1207 1209 1212* 1212 n_redistributions 10 based fixed bin(17,0) level 2 dcl 13-15 ref 1336 1339 n_reply_references 6 based fixed bin(17,0) level 2 dcl 13-15 ref 1252 n_selections 000122 automatic fixed bin(17,0) dcl 132 set ref 636* 637 637 640 642* 659 965* 965 966 1105 1186 new_current_message 000476 automatic fixed bin(17,0) dcl 1466 set ref 1485* 1497 1497* 1502* 1504 1504* 1549 1549* 1567 new_marked_bits 000100 automatic bit(1) array packed unaligned dcl 1130 set ref 1152* 1199* 1199 1200* 1200 1201* 1201 1202* 1202 1208 null builtin function dcl 255 ref 603 640 661 970 971 1107 1179 1255 1340 1371 1613 1613 1659 obj_ptr 000342 automatic pointer dcl 678 set ref 681* 685 old_current_message 000475 automatic fixed bin(17,0) dcl 1466 set ref 1484* 1499 1502 1504 other_keyword_type 000134 automatic fixed bin(17,0) dcl 137 set ref 326* 333* 340* 347* 354* 361* 368* 375* 382* 389* 396* 403* 410* 417* 424* 431* 438* 515* 1532 1532 1532 1532 output_buffer 000145 automatic varying char(256) dcl 142 set ref 1474 1475* 1521 1522* 1523* 1525 1525* 1525 1526* 1526 1540 1540* 1541* output_line_length 000246 automatic fixed bin(17,0) dcl 143 set ref 1474* 1521 p_address_list_ptr parameter pointer dcl 1657 in procedure "is_empty_list" ref 1654 1659 1662 p_address_list_ptr parameter pointer dcl 1359 in procedure "process_address_list_selection" set ref 1355 1366* 1371* 1380 1381 p_adjust_sw parameter bit(1) dcl 1024 ref 1020 1034 p_class parameter fixed bin(17,0) dcl 963 ref 960 969 973 973 p_expected parameter char packed unaligned dcl 921 in procedure "get_next_one_argument" set ref 918 923* p_expected parameter char packed unaligned dcl 941 in procedure "get_next_two_arguments" set ref 938 943* p_field_type parameter fixed bin(17,0) dcl 1318 ref 1315 1324 1328 1332 p_fieldname parameter varying char dcl 1358 set ref 1355 1371* p_list_buffer parameter structure level 1 dcl 1360 set ref 1355 p_matched_bits_array parameter bit(1) array packed unaligned dcl 1361 set ref 1355 1393* p_matched_type_sw parameter bit(1) packed unaligned dcl 1362 set ref 1355 1395* p_message_count parameter fixed bin(17,0) dcl 1124 ref 1121 1126 1127 1128 1129 1130 p_size parameter fixed bin(19,0) dcl 677 set ref 674 681* 682* p_str_lth parameter fixed bin(21,0) dcl 1409 ref 1405 1422 p_str_ptr parameter pointer dcl 1408 ref 1405 1421 p_string parameter char packed unaligned dcl 985 set ref 982 988 991 991 991* 994 995 999 1000 1011* p_time parameter char packed unaligned dcl 1023 set ref 1020 1031* 1032* parse_ca_options based structure level 1 dcl 9-8 pathname_ 000064 constant entry external dcl 225 ref 585 585 587 587 print_options 104 based structure level 2 dcl 1-6 rdm_forward_invocation based structure level 1 dcl 7-7 rdm_forward_invocation_ptr 000316 automatic pointer dcl 7-26 set ref 611* 615 rdm_invocation based structure level 1 dcl 1-6 rdm_invocation_ptr 16 based pointer level 2 in structure "sdm_invocation" dcl 6-6 in procedure "rdm_msg_requests_" ref 603 606 rdm_invocation_ptr 6 based pointer level 2 in structure "rdm_forward_invocation" dcl 7-7 in procedure "rdm_msg_requests_" ref 615 rdm_invocation_ptr 000312 automatic pointer dcl 1-53 in procedure "rdm_msg_requests_" set ref 446 459 502* 506* 513* 515* 520* 523* 531 534 541 547 555* 559* 562* 577* 583 596* 598 600 606* 609 611 615* 628* 639 664 1082* 1159 1163 1163 1171 1172 1174* 1175 1194 1194 1207 1209 1210 1210 1212 1212 1255* 1371* 1484 1492 1494 1495 1512 1549* 1549 1562* 1563 1572* 1592 1594* 1595 1601* 1601 1615* 1637 1639* 1640 rdm_mailbox_interface_$delete_messages 000066 constant entry external dcl 226 ref 555 559 rdm_mailbox_interface_$mark_processed 000070 constant entry external dcl 227 ref 1572 rdm_mailbox_interface_$mark_processed_and_acknowledge 000072 constant entry external dcl 228 ref 1615 rdm_mailbox_interface_$read_message 000074 constant entry external dcl 229 ref 1174 1562 1594 1639 rdm_mailbox_interface_$retrieve_messages 000076 constant entry external dcl 230 ref 562 rdm_mailbox_interface_$set_new_current_msg 000100 constant entry external dcl 231 ref 1549 1601 rdm_message_mark_mgr_$clear_marked_messages 000102 constant entry external dcl 232 ref 628 rdm_message_mark_mgr_$do_request 000104 constant entry external dcl 233 ref 515 rdm_message_mark_mgr_$mark_all_messages 000106 constant entry external dcl 234 ref 506 513 523 rdm_message_mark_mgr_$mark_current_message 000110 constant entry external dcl 235 ref 520 rdm_message_mark_mgr_$mark_messages 000112 constant entry external dcl 236 ref 1082 rdm_message_mark_mgr_$remark_original_messages 000114 constant entry external dcl 238 ref 502 rdm_search_utils_$prepare_address_list_field_for_search 000116 constant entry external dcl 239 ref 1371 rdm_search_utils_$prepare_message_references_field_for_search 000120 constant entry external dcl 241 ref 1255 recipient 0(03) 000110 automatic bit(1) level 2 in structure "class_sw" packed packed unaligned dcl 110 in procedure "rdm_msg_requests_" set ref 492* 1157 1202 recipient 0(03) 000127 automatic bit(1) level 2 in structure "matched_sw" packed packed unaligned dcl 1144 in procedure "process_selections" set ref 1298 1324* 1328* 1332* 1341* recipient_bits 000100 automatic bit(1) array packed unaligned dcl 1129 set ref 1157* 1202 1324* 1328* 1332* 1341* redistributed_buffer 000264 automatic structure level 1 dcl 1320 set ref 1341* redistributed_fieldname 000267 automatic varying char(64) dcl 1321 set ref 1338* 1341* redistributions 10 based structure array level 2 dcl 13-109 redistributions_list 60 based pointer level 2 dcl 13-15 ref 1341 redistributions_list_formatting_mode 5 000123 automatic fixed bin(17,0) level 2 dcl 134 set ref 1589* regexp_sw 6 based bit(1) level 3 dcl 117 set ref 988* 990 1007 1370 1433 1445 reply_references 54 based pointer level 3 dcl 13-15 set ref 1255* reply_to 10 000100 automatic structure level 2 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1284* reply_to 40 based pointer level 3 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" set ref 1284* request 000133 automatic fixed bin(17,0) dcl 137 set ref 262* 273* 283* 292* 301* 310* 319* 325* 332* 339* 346* 353* 360* 367* 374* 381* 388* 395* 402* 409* 416* 423* 430* 437* 448 452 452 455 455 458 468 477 477 506 509 515 534 551 553 553 559 562 564 564 566 601 601 601 612 620 620 698 704 704 716 861 879 889 905 1532 1617 1632 requote_string_ 000122 constant entry external dcl 243 ref 585 return_one_sw 000473 automatic bit(1) dcl 1465 set ref 1532* 1536 1540 return_value based varying char dcl 145 set ref 585* 1470* 1515 1515* 1515 1516* 1516 1536 1536* return_value_max_lth 000252 automatic fixed bin(21,0) dcl 147 set ref 579* 585 620* 1470 1515 1516 1536 return_value_ptr 000250 automatic pointer dcl 146 set ref 579* 585 620* 1470 1515 1515 1515 1516 1516 1536 1536 reverse_sw 000271 automatic bit(1) dcl 157 set ref 515* 540 646* 707* 708* rtrim builtin function dcl 255 ref 585 585 savebox_creation_mode 3 000432 automatic fixed bin(17,0) level 2 dcl 1050 set ref 1054* saved_last_search_buffer 000130 automatic structure level 1 dcl 1146 set ref 1159* 1163 1194 saved_rdm_sci_ptr 000102 automatic pointer dcl 104 set ref 639* 664 sci_ptr 2 based pointer level 2 dcl 1-6 set ref 446* 639 664* sdm_invocation based structure level 1 dcl 6-6 sdm_invocation_ptr 000314 automatic pointer dcl 6-38 set ref 600* 603 606 search_file_$silent 000124 constant entry external dcl 244 ref 1008 1434 1446 search_string based char packed unaligned dcl 986 ref 1003 seen_old_current_message 000474 automatic bit(1) dcl 1465 set ref 1483* 1499* 1502 sel based structure level 1 dcl 117 set ref 968* sel_ptr 000116 automatic pointer dcl 127 set ref 660* 661 661 731 738 745 746 747 747 757 758 760 760 766 767 773 774 780 781 787 788 794 795 795 801 810 819 828 837 846 855 966* 968 969 970 971 988 990 994 995 999 1000 1003 1003 1007 1008 1008 1059 1106* 1107 1108 1110 1110 1111 1187* 1188 1189 1190 1191 1225 1225 1245 1280 1300 1307 1370 1381 1433 1434 1434 1438 1438 1445 1446 1446 1450 1450 sel_str based char packed unaligned dcl 1411 in procedure "match_sel_on_string" ref 1438 1450 sel_str based char packed unaligned dcl 1097 in procedure "make_lowercase_select_strings" ref 1110 selection_array based structure level 1 dcl 129 set ref 637 637 selection_array_ptr 000120 automatic pointer dcl 131 set ref 637* 637 637 640 660 966 1106 1187 selection_idx 000136 automatic fixed bin(17,0) dcl 1149 set ref 1186* 1187* sender 0(02) 000127 automatic bit(1) level 2 in structure "matched_sw" packed packed unaligned dcl 1144 in procedure "process_selections" set ref 1278 1280* 1284* sender 0(02) 000110 automatic bit(1) level 2 in structure "class_sw" packed packed unaligned dcl 110 in procedure "rdm_msg_requests_" set ref 491* 1156 1201 sender_bits 000100 automatic bit(1) array packed unaligned dcl 1128 set ref 1156* 1201 1280* 1284* ssu_$abort_line 000126 constant entry external dcl 247 ref 478 482 509 534 581 601 603 612 682 704 716 720 748 876 886 895 902 908 911 923 943 991 1003 1011 1032 1061 1084 1175 1479 1563 1569 1595 1610 1640 1645 ssu_$arg_count 000130 constant entry external dcl 248 ref 624 ssu_$arg_ptr 000132 constant entry external dcl 249 ref 479 696 928 948 951 1080 ssu_$return_arg 000134 constant entry external dcl 250 ref 579 620 ssu_et_$unimplemented_request 000024 external static fixed bin(35,0) dcl 168 set ref 601* 612* str_lth 7 based fixed bin(21,0) level 3 dcl 117 set ref 995* 1000* 1003 1008* 1108 1110 1434* 1438 1446* 1450 str_ptr 10 based pointer level 3 dcl 117 set ref 970* 994* 999* 1003 1008* 1107 1110 1111* 1434* 1438 1446* 1450 string 6 based structure level 2 in structure "sel" dcl 117 in procedure "rdm_msg_requests_" string builtin function dcl 255 in procedure "rdm_msg_requests_" set ref 502 509 520 528 531 1154* 1155* 1156* 1157* 1184* 1199* 1199 1199 1200* 1200 1200 1201* 1201 1201 1202* 1202 1202 1230 1230 1266 1266 1397 1397 subject 50 based structure level 3 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" subject 0(01) 000127 automatic bit(1) level 2 in structure "matched_sw" packed packed unaligned dcl 1144 in procedure "process_selections" set ref 1243 1248* 1262* subject 0(01) 000110 automatic bit(1) level 2 in structure "class_sw" packed packed unaligned dcl 110 in procedure "rdm_msg_requests_" set ref 490* 1155 1200 subject_bits 000100 automatic bit(1) array packed unaligned dcl 1127 set ref 1155* 1200 1247* 1261* substr builtin function dcl 255 ref 991 switch_type 000136 automatic char(4) dcl 139 set ref 480* 1644* switch_value 000530 automatic bit(1) dcl 1630 set ref 1632* 1634* 1644* text_lth 2 000100 automatic fixed bin(21,0) level 3 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1255* 1259* text_lth 52 based fixed bin(21,0) level 4 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" set ref 1245* text_lth 2 parameter fixed bin(21,0) level 2 in structure "p_list_buffer" dcl 1360 in procedure "process_address_list_selection" set ref 1371* 1375* text_ptr 50 based pointer level 4 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" set ref 1245* text_ptr parameter pointer level 2 in structure "p_list_buffer" dcl 1360 in procedure "process_address_list_selection" set ref 1371 1371* 1375* text_ptr 20 000100 automatic pointer level 3 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1179* text_ptr 000264 automatic pointer level 2 in structure "redistributed_buffer" dcl 1320 in procedure "process_single_recipient_selection" set ref 1340* text_ptr 24 000100 automatic pointer level 3 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1179* text_ptr 000100 automatic pointer level 3 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1179* 1255 1255* 1259* text_ptr 14 000100 automatic pointer level 3 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1179* text_ptr 10 000100 automatic pointer level 3 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1179* text_ptr 4 000100 automatic pointer level 3 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1179* time 000110 automatic bit(1) level 2 in structure "class_sw" packed packed unaligned dcl 110 in procedure "rdm_msg_requests_" set ref 489* 1154 1199 time 000127 automatic bit(1) level 2 in structure "matched_sw" packed packed unaligned dcl 1144 in procedure "process_selections" set ref 1223 1227* time_1 2 based fixed bin(71,0) level 2 dcl 117 set ref 745* 747 757* 760 766* 773* 780* 787* 794* 795 1225 time_2 4 based fixed bin(71,0) level 2 dcl 117 set ref 746* 747 758* 760 767* 774* 781* 788* 795* 1225 time_bits 000100 automatic bit(1) array packed unaligned dcl 1126 set ref 1154* 1199 1226* time_zone 000421 automatic char(3) packed unaligned dcl 1028 set ref 1035* 1036* 1038* to 42 based pointer level 3 in structure "message" dcl 13-15 in procedure "rdm_msg_requests_" set ref 1324* to 32 based pointer array level 4 in structure "message_redistributions_list" dcl 13-109 in procedure "rdm_msg_requests_" set ref 1341* to 14 000100 automatic structure level 2 in structure "message_field_buffers" dcl 1136 in procedure "process_selections" set ref 1324* total_lines 62 based fixed bin(21,0) level 3 dcl 13-15 set ref 1607 1607* 1607 translate builtin function dcl 255 ref 1110 1432 type 1 based fixed bin(17,0) level 2 in structure "sel" dcl 117 in procedure "rdm_msg_requests_" set ref 731* 738* 801* 810* 819* 828* 837* 846* 855* 1245 1280 1300 1307* type based char(8) level 2 in structure "rdm_invocation" dcl 1-6 in procedure "rdm_msg_requests_" ref 598 609 unspec builtin function dcl 255 set ref 968* validate_addresses 4(01) 000432 automatic bit(1) level 3 packed packed unaligned dcl 1050 set ref 1056* verify builtin function dcl 255 ref 1003 version 000432 automatic char(8) level 2 in structure "local_pcao" packed packed unaligned dcl 1050 in procedure "add_address" set ref 1053* version 000123 automatic char(8) level 2 in structure "local_fmo" packed packed unaligned dcl 134 in procedure "rdm_msg_requests_" set ref 456* year 000420 automatic fixed bin(17,0) dcl 1027 set ref 1036* 1038* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACCESS_CLASS_FIELD internal static fixed bin(17,0) initial dcl 12-6 ACCESS_CLASS_FIELDNAME internal static varying char(32) initial dcl 10-6 ACKNOWLEDGE_TO_FIELD internal static fixed bin(17,0) initial dcl 12-6 ACKNOWLEDGE_TO_FIELDNAME internal static varying char(32) initial dcl 10-6 ADDRESS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 14-12 COMMENT_FIELD internal static fixed bin(17,0) initial dcl 12-6 COMMENT_FIELDS_BASE internal static fixed bin(17,0) initial dcl 12-23 CREATE_AND_ANNOUNCE_MAILBOX internal static fixed bin(17,0) initial dcl 9-28 DATE_FIELD internal static fixed bin(17,0) initial dcl 12-6 DATE_TIME_CREATED_FIELDNAME internal static varying char(32) initial dcl 10-6 DATE_TIME_DELIVERED_FIELDNAME internal static varying char(32) initial dcl 10-6 DATE_TIME_MAILED_FIELDNAME internal static varying char(32) initial dcl 10-6 DEFAULT_INCLUDE_SELF internal static bit(2) initial dcl 1-60 DELIVERED_BY_FIELDNAME internal static varying char(32) initial dcl 10-6 DELIVERY_BY_FIELD internal static fixed bin(17,0) initial dcl 12-6 DELIVERY_DATE_FIELD internal static fixed bin(17,0) initial dcl 12-6 IMPLICIT_ROUTE_FIELDNAME internal static varying char(32) initial dcl 10-6 INCLUDE_SELF internal static bit(2) initial dcl 1-60 KEYWORDS internal static varying char(16) initial array dcl 4-12 MAILBOX_VERSION_2 internal static char(8) initial packed unaligned dcl 11-28 MESSAGE_ADDRESS_LIST_USER_FIELD internal static fixed bin(17,0) initial dcl 13-174 MESSAGE_BIT_STRING_BODY_SECTION internal static fixed bin(17,0) initial dcl 13-285 MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 13-318 MESSAGE_DATE_USER_FIELD internal static fixed bin(17,0) initial dcl 13-174 MESSAGE_ENVELOPE_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 13-79 MESSAGE_ID_FIELD internal static fixed bin(17,0) initial dcl 12-6 MESSAGE_ID_FIELDNAME internal static varying char(32) initial dcl 10-6 MESSAGE_INTEGER_USER_FIELD internal static fixed bin(17,0) initial dcl 13-174 MESSAGE_PREFORMATTED_BODY_SECTION internal static fixed bin(17,0) initial dcl 13-285 MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 13-117 MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 13-144 MESSAGE_REFERENCES_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 13-227 MESSAGE_REFERENCE_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 13-253 MESSAGE_TEXT_USER_FIELD internal static fixed bin(17,0) initial dcl 13-174 MESSAGE_TRACE_VERSION_2 internal static char(8) initial packed unaligned dcl 13-103 MESSAGE_USER_FIELDS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 13-158 MESSAGE_USER_FIELD_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 13-213 MESSAGE_VERSION_2 internal static char(8) initial packed unaligned dcl 13-49 MODIFIED_MESSAGE internal static fixed bin(17,0) initial dcl 6-47 NO_INCLUDE_SELF internal static bit(2) initial dcl 1-60 N_ORDINARY_FIELDS internal static fixed bin(17,0) initial dcl 12-6 ORDINARY_FIELDS_BASE internal static fixed bin(17,0) initial dcl 12-23 OTHER_MAILBOX internal static fixed bin(17,0) initial dcl 11-37 POSTED_DATE_FIELD internal static fixed bin(17,0) initial dcl 12-6 PROCESSED_MESSAGE internal static fixed bin(17,0) initial dcl 6-47 QUERY_TO_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 9-28 RDM_INVOCATION internal static char(8) initial packed unaligned dcl 1-51 REDISTRIBUTED_COMMENT_FIELDNAME internal static varying char(32) initial dcl 10-6 RELAYED_FIELD internal static fixed bin(17,0) initial dcl 12-6 RELAY_FIELDNAME internal static varying char(32) initial dcl 10-6 ROUTE_FIELD internal static fixed bin(17,0) initial dcl 12-6 SAVEBOX internal static fixed bin(17,0) initial dcl 11-37 SENDER_FIELD internal static fixed bin(17,0) initial dcl 12-6 SENDER_FIELDNAME internal static varying char(32) initial dcl 10-6 SILENTLY_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 9-28 SUBJECT_FIELDNAME internal static varying char(32) initial dcl 10-6 UNPROCESSED_MESSAGE internal static fixed bin(17,0) initial dcl 6-47 USER_DEFAULT_MAILBOX internal static fixed bin(17,0) initial dcl 11-37 USER_DEFINED_FIELD internal static fixed bin(17,0) initial dcl 12-6 USER_LOGBOX internal static fixed bin(17,0) initial dcl 11-37 address_list_n_addresses automatic fixed bin(17,0) dcl 14-16 address_list_ptr automatic pointer dcl 14-14 all_chain based structure level 1 dcl 3-23 format_message_options_ptr automatic pointer dcl 8-17 mailbox_n_messages automatic fixed bin(17,0) dcl 11-32 marked_as_original_chain based structure level 1 dcl 3-37 message_address_list_user_field based structure level 1 dcl 13-190 message_bit_string_body_section based structure level 1 dcl 13-301 message_bit_string_body_section_bit_string based bit packed unaligned dcl 13-307 message_body_section_parameter based structure level 1 dcl 13-313 message_body_section_parameter_ptr automatic pointer dcl 13-320 message_body_section_ptr automatic pointer dcl 13-280 message_chain_ptr automatic pointer dcl 3-11 message_date_user_field based structure level 1 dcl 13-195 message_envelope_parameter based structure level 1 dcl 13-74 message_envelope_parameter_ptr automatic pointer dcl 13-81 message_envelope_ptr automatic pointer dcl 13-69 message_integer_user_field based structure level 1 dcl 13-200 message_list based structure level 1 dcl 2-13 message_list_n_messages automatic fixed bin(17,0) dcl 2-25 message_n_body_sections automatic fixed bin(17,0) dcl 13-55 message_n_redistributions automatic fixed bin(17,0) dcl 13-55 message_n_user_fields automatic fixed bin(17,0) dcl 13-55 message_preformatted_body_section based structure level 1 dcl 13-292 message_preformatted_body_section_text based char packed unaligned dcl 13-298 message_redistribution_comment based char packed unaligned dcl 13-131 message_redistribution_parameter based structure level 1 dcl 13-139 message_redistribution_parameter_ptr automatic pointer dcl 13-146 message_redistribution_ptr automatic pointer dcl 13-134 message_reference_parameter based structure level 1 dcl 13-248 message_reference_parameter_ptr automatic pointer dcl 13-255 message_reference_ptr automatic pointer dcl 13-243 message_reference_subject based char packed unaligned dcl 13-240 message_references_list based structure level 1 dcl 13-219 message_references_list_n_references automatic fixed bin(17,0) dcl 13-55 message_references_list_ptr automatic pointer dcl 13-229 message_subject based char packed unaligned dcl 13-51 message_text_field_ptr automatic pointer dcl 13-270 message_text_field_text based char packed unaligned dcl 13-268 message_text_user_field based structure level 1 dcl 13-183 message_text_user_field_text based char packed unaligned dcl 13-187 message_trace based structure level 1 dcl 13-87 message_trace_n_relays automatic fixed bin(17,0) dcl 13-55 message_trace_ptr automatic pointer dcl 13-105 message_user_field_parameter based structure level 1 dcl 13-208 message_user_field_parameter_ptr automatic pointer dcl 13-215 message_user_field_ptr automatic pointer dcl 13-169 message_user_fields_list based structure level 1 dcl 13-150 parse_ca_options_ptr automatic pointer dcl 9-23 rdm_area based area(1024) dcl 1-55 sdm_area based area(1024) dcl 6-40 undeleted_chain based structure level 1 dcl 3-24 NAMES DECLARED BY EXPLICIT CONTEXT. BETWEEN_TIMES_IN_WRONG_ORDER 003735 constant label dcl 748 ref 760 CHECK_NEXT_MESSAGE 007625 constant label dcl 1194 ref 1230 1266 1397 COMMON 001447 constant label dcl 441 ref 263 274 284 293 302 311 320 327 334 341 348 355 362 369 376 383 390 397 404 411 418 425 432 439 FOUND_MATCHING_ADDRESS 011025 constant label dcl 1393 ref 1375 1381 INVALID_LINE_LENGTH_SPECIFICATION 005534 constant label dcl 895 ref 899 add_address 006746 constant entry internal dcl 1047 ref 804 813 822 831 840 849 858 add_string_or_regexp 006227 constant entry internal dcl 982 ref 732 739 802 811 820 829 838 847 856 all_request 001135 constant entry external dcl 322 cleanup_request 003025 constant entry internal dcl 654 ref 444 568 convert_time 006531 constant entry internal dcl 1020 ref 745 746 757 758 766 773 781 788 794 current_request 001231 constant entry external dcl 357 delete_request 001065 constant entry external dcl 289 first_request 001151 constant entry external dcl 329 first_seen_request 001311 constant entry external dcl 385 first_unseen_request 001325 constant entry external dcl 392 get_next_one_argument 005765 constant entry internal dcl 918 ref 729 736 764 771 778 785 792 799 808 817 826 835 844 853 893 get_next_two_arguments 006065 constant entry internal dcl 938 ref 743 755 get_selection 006204 constant entry internal dcl 960 ref 730 737 744 756 765 772 779 786 793 800 809 818 827 836 845 854 is_empty_list 012757 constant entry internal dcl 1654 ref 1366 last_request 001165 constant entry external dcl 336 last_seen_request 001341 constant entry external dcl 399 last_unseen_request 001355 constant entry external dcl 406 list_request 001027 constant entry external dcl 259 list_single_message 012037 constant entry internal dcl 1559 ref 1528 mailbox_request 002320 constant entry external dcl 574 make_lowercase_select_strings 007145 constant entry internal dcl 1094 ref 528 match_sel_on_string 011057 constant entry internal dcl 1405 ref 1245 1259 1375 new_request 001275 constant entry external dcl 378 next_request 001215 constant entry external dcl 350 next_seen_request 001421 constant entry external dcl 427 next_unseen_request 001435 constant entry external dcl 434 perform_list_request 011261 constant entry internal dcl 1461 ref 551 566 perform_printing_request 012207 constant entry internal dcl 1582 ref 554 previous_request 001201 constant entry external dcl 343 previous_seen_request 001371 constant entry external dcl 413 previous_unseen_request 001405 constant entry external dcl 420 print_header_request 001053 constant entry external dcl 280 print_request 001041 constant entry external dcl 270 process_address_list_selection 010643 constant entry internal dcl 1355 ref 1280 1284 1324 1328 1332 1341 process_arguments 003154 constant entry internal dcl 691 ref 487 process_msg_specs 007037 constant entry internal dcl 1074 ref 526 process_recipient_selection 010342 constant entry internal dcl 1295 ref 1191 process_selections 007217 constant entry internal dcl 1121 ref 531 process_sender_selection 010240 constant entry internal dcl 1275 ref 1190 process_single_recipient_selection 010376 constant entry internal dcl 1315 ref 1301 1302 1303 1304 1307 process_subject_selection 010101 constant entry internal dcl 1240 ref 1189 process_time_selection 010045 constant entry internal dcl 1220 ref 1188 rdm_msg_requests_ 001017 constant entry external dcl 89 retrieve_request 001077 constant entry external dcl 298 seen_request 001245 constant entry external dcl 364 set_switch 012571 constant entry internal dcl 1626 ref 564 setup_request 002545 constant entry internal dcl 593 ref 441 stack_allocate 003077 constant entry internal dcl 674 ref 634 637 1109 switch_off_request 001111 constant entry external dcl 307 switch_on_request 001123 constant entry external dcl 316 unseen_request 001261 constant entry external dcl 371 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 14704 15042 13536 14714 Length 15744 13536 136 665 1145 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rdm_msg_requests_ 950 external procedure is an external procedure. on unit on line 444 64 on unit setup_request internal procedure shares stack frame of external procedure rdm_msg_requests_. cleanup_request 74 internal procedure is called by several nonquick procedures. stack_allocate internal procedure shares stack frame of external procedure rdm_msg_requests_. process_arguments internal procedure shares stack frame of external procedure rdm_msg_requests_. get_next_one_argument internal procedure shares stack frame of external procedure rdm_msg_requests_. get_next_two_arguments internal procedure shares stack frame of external procedure rdm_msg_requests_. get_selection internal procedure shares stack frame of external procedure rdm_msg_requests_. add_string_or_regexp internal procedure shares stack frame of external procedure rdm_msg_requests_. convert_time internal procedure shares stack frame of external procedure rdm_msg_requests_. add_address internal procedure shares stack frame of external procedure rdm_msg_requests_. process_msg_specs internal procedure shares stack frame of external procedure rdm_msg_requests_. make_lowercase_select_strings internal procedure shares stack frame of external procedure rdm_msg_requests_. process_selections 418 internal procedure uses auto adjustable storage, enables or reverts conditions, and is declared options(non_quick). on unit on line 1161 64 on unit process_time_selection internal procedure shares stack frame of internal procedure process_selections. process_subject_selection internal procedure shares stack frame of internal procedure process_selections. process_sender_selection internal procedure shares stack frame of internal procedure process_selections. process_recipient_selection internal procedure shares stack frame of internal procedure process_selections. process_single_recipient_selection internal procedure shares stack frame of internal procedure process_selections. process_address_list_selection internal procedure shares stack frame of internal procedure process_selections. match_sel_on_string internal procedure shares stack frame of internal procedure process_selections. begin block on line 1427 94 begin block uses auto adjustable storage, and is declared options(non_quick). perform_list_request internal procedure shares stack frame of external procedure rdm_msg_requests_. list_single_message internal procedure shares stack frame of external procedure rdm_msg_requests_. perform_printing_request internal procedure shares stack frame of external procedure rdm_msg_requests_. set_switch internal procedure shares stack frame of external procedure rdm_msg_requests_. is_empty_list internal procedure shares stack frame of internal procedure process_selections. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 1427 000100 copied_str begin block on line 1427 cleanup_request 000100 idx cleanup_request process_selections 000100 recipient_bits process_selections 000100 message_field_buffers process_selections 000100 time_bits process_selections 000100 new_marked_bits process_selections 000100 subject_bits process_selections 000100 sender_bits process_selections 000127 matched_sw process_selections 000130 saved_last_search_buffer process_selections 000133 code process_selections 000134 message_idx process_selections 000135 message_number process_selections 000136 selection_idx process_selections 000137 idx process_selections 000264 redistributed_buffer process_single_recipient_selection 000267 redistributed_fieldname process_single_recipient_selection 000310 idx process_single_recipient_selection 000320 address_idx process_address_list_selection 000330 match_str_lth match_sel_on_string 000332 match_str_ptr match_sel_on_string 000334 match_sw match_sel_on_string 000335 code match_sel_on_string rdm_msg_requests_ 000100 is_original_request rdm_msg_requests_ 000102 saved_rdm_sci_ptr rdm_msg_requests_ 000104 msg_spec_array_size rdm_msg_requests_ 000105 msg_spec_count rdm_msg_requests_ 000106 msg_spec_array_ptr rdm_msg_requests_ 000110 class_sw rdm_msg_requests_ 000111 class_count rdm_msg_requests_ 000116 sel_ptr rdm_msg_requests_ 000120 selection_array_ptr rdm_msg_requests_ 000122 n_selections rdm_msg_requests_ 000123 local_fmo rdm_msg_requests_ 000132 formatting_mode rdm_msg_requests_ 000133 request rdm_msg_requests_ 000134 other_keyword_type rdm_msg_requests_ 000135 active_request rdm_msg_requests_ 000136 switch_type rdm_msg_requests_ 000137 argument_idx rdm_msg_requests_ 000140 first_argument rdm_msg_requests_ 000141 n_arguments rdm_msg_requests_ 000142 message_number_string rdm_msg_requests_ 000145 output_buffer rdm_msg_requests_ 000246 output_line_length rdm_msg_requests_ 000250 return_value_ptr rdm_msg_requests_ 000252 return_value_max_lth rdm_msg_requests_ 000254 argument_ptr rdm_msg_requests_ 000256 argument1_ptr rdm_msg_requests_ 000260 argument2_ptr rdm_msg_requests_ 000262 argument_lth rdm_msg_requests_ 000263 argument1_lth rdm_msg_requests_ 000264 argument2_lth rdm_msg_requests_ 000265 msg_type rdm_msg_requests_ 000266 listing_header_sw rdm_msg_requests_ 000267 force_sw rdm_msg_requests_ 000270 delete_sw rdm_msg_requests_ 000271 reverse_sw rdm_msg_requests_ 000272 dl_rt_sw rdm_msg_requests_ 000273 case_independence_sw rdm_msg_requests_ 000274 listing_line_length rdm_msg_requests_ 000275 first_message_idx rdm_msg_requests_ 000276 last_message_idx rdm_msg_requests_ 000277 message_idx_increment rdm_msg_requests_ 000300 message_idx rdm_msg_requests_ 000301 message_number rdm_msg_requests_ 000302 idx rdm_msg_requests_ 000303 code rdm_msg_requests_ 000312 rdm_invocation_ptr rdm_msg_requests_ 000314 sdm_invocation_ptr rdm_msg_requests_ 000316 rdm_forward_invocation_ptr rdm_msg_requests_ 000320 mailbox_ptr rdm_msg_requests_ 000322 message_ptr rdm_msg_requests_ 000342 obj_ptr stack_allocate 000344 code stack_allocate 000414 clock_value convert_time 000416 month convert_time 000417 day_of_month convert_time 000420 year convert_time 000421 time_zone convert_time 000422 code convert_time 000432 local_pcao add_address 000437 code add_address 000446 idx process_msg_specs 000456 copy_str_lth make_lowercase_select_strings 000460 copy_str_ptr make_lowercase_select_strings 000462 idx make_lowercase_select_strings 000472 is_non_deleted perform_list_request 000473 return_one_sw perform_list_request 000474 seen_old_current_message perform_list_request 000475 old_current_message perform_list_request 000476 new_current_message perform_list_request 000530 switch_value set_switch THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as r_ne_as alloc_char_temp alloc_bit_temp enter_begin_block leave_begin_block call_ext_out_desc call_ext_out call_int_this call_int_other return_mac alloc_auto_adj enable_op shorten_stack ext_entry int_entry set_chars_eis index_chars_eis THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. convert_date_to_binary_ cu_$grow_stack_frame cv_dec_check_ decode_clock_value_$date_time encode_clock_value_ get_line_length_$switch ioa_ iox_$control mail_system_$compare_addresses mail_system_$free_address mail_system_$set_message_switch mlsys_utils_$parse_address_control_args mlsys_utils_$print_message mlsys_utils_$print_message_summary mlsys_utils_$print_message_summary_header pathname_ rdm_mailbox_interface_$delete_messages rdm_mailbox_interface_$mark_processed rdm_mailbox_interface_$mark_processed_and_acknowledge rdm_mailbox_interface_$read_message rdm_mailbox_interface_$retrieve_messages rdm_mailbox_interface_$set_new_current_msg rdm_message_mark_mgr_$clear_marked_messages rdm_message_mark_mgr_$do_request rdm_message_mark_mgr_$mark_all_messages rdm_message_mark_mgr_$mark_current_message rdm_message_mark_mgr_$mark_messages rdm_message_mark_mgr_$remark_original_messages rdm_search_utils_$prepare_address_list_field_for_search rdm_search_utils_$prepare_message_references_field_for_search requote_string_ search_file_$silent ssu_$abort_line ssu_$arg_count ssu_$arg_ptr ssu_$return_arg THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$badarg error_table_$badopt error_table_$noarg error_table_$nomatch iox_$user_output mlsys_et_$null_search_string ssu_et_$unimplemented_request LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 89 001013 92 001024 259 001025 262 001034 263 001036 270 001037 273 001046 274 001050 280 001051 283 001060 284 001062 289 001063 292 001072 293 001074 298 001075 301 001104 302 001106 307 001107 310 001116 311 001120 316 001121 319 001130 320 001132 322 001133 325 001142 326 001144 327 001146 329 001147 332 001156 333 001160 334 001162 336 001163 339 001172 340 001174 341 001176 343 001177 346 001206 347 001210 348 001212 350 001213 353 001222 354 001224 355 001226 357 001227 360 001236 361 001240 362 001242 364 001243 367 001252 368 001254 369 001256 371 001257 374 001266 375 001270 376 001272 378 001273 381 001302 382 001304 383 001306 385 001307 388 001316 389 001320 390 001322 392 001323 395 001332 396 001334 397 001336 399 001337 402 001346 403 001350 404 001352 406 001353 409 001362 410 001364 411 001366 413 001367 416 001376 417 001400 418 001402 420 001403 423 001412 424 001414 425 001416 427 001417 430 001426 431 001430 432 001432 434 001433 437 001442 438 001444 439 001446 441 001447 444 001450 446 001472 448 001477 450 001505 452 001507 455 001517 456 001523 457 001526 458 001527 459 001532 460 001534 461 001536 463 001537 464 001541 466 001542 468 001543 469 001545 470 001547 477 001550 478 001555 479 001604 480 001624 482 001635 483 001674 484 001676 485 001677 487 001701 489 001702 490 001710 491 001717 492 001726 502 001735 506 001756 509 001773 513 002025 515 002037 520 002062 523 002076 524 002107 526 002110 528 002111 531 002117 534 002131 540 002170 541 002173 542 002176 543 002200 544 002202 546 002203 547 002205 548 002210 551 002212 553 002220 554 002224 555 002225 557 002242 559 002243 562 002257 564 002271 566 002305 568 002311 570 002315 574 002316 577 002325 579 002331 581 002350 583 002400 585 002403 587 002501 589 002544 593 002545 596 002546 598 002552 600 002556 601 002557 603 002604 605 002636 606 002640 607 002643 609 002644 611 002646 612 002647 614 002667 615 002671 616 002674 618 002675 620 002676 624 002724 625 002736 628 002737 630 002746 631 002747 633 002751 634 002753 636 002756 637 002760 639 002764 640 002767 642 003004 644 003005 646 003016 648 003023 654 003024 659 003032 660 003043 661 003051 662 003067 664 003071 666 003076 674 003077 681 003101 682 003114 685 003150 691 003154 694 003155 696 003165 698 003203 700 003223 701 003224 702 003230 704 003231 707 003272 708 003312 710 003327 711 003345 713 003363 716 003401 720 003435 723 003471 725 003507 726 003523 728 003535 729 003545 730 003553 731 003555 732 003560 733 003573 735 003574 736 003604 737 003612 738 003614 739 003617 740 003632 742 003633 743 003643 744 003652 745 003654 746 003702 747 003733 748 003735 752 004010 754 004011 755 004025 756 004034 757 004036 758 004064 760 004112 761 004116 763 004117 764 004127 765 004136 766 004140 767 004166 768 004171 770 004172 771 004202 772 004211 773 004213 774 004241 775 004244 777 004245 778 004255 779 004264 780 004266 781 004271 782 004316 784 004317 785 004327 786 004336 787 004340 788 004343 789 004370 791 004371 792 004401 793 004410 794 004412 795 004440 796 004444 798 004445 799 004455 800 004463 801 004465 802 004470 804 004520 805 004521 807 004522 808 004532 809 004540 810 004542 811 004545 813 004575 814 004576 816 004577 817 004603 818 004611 819 004613 820 004616 822 004646 823 004647 825 004650 826 004654 827 004662 828 004664 829 004667 831 004717 832 004720 834 004721 835 004725 836 004733 837 004735 838 004740 840 004770 841 004771 843 004772 844 005002 845 005010 846 005012 847 005015 849 005045 850 005046 852 005047 853 005057 854 005065 855 005067 856 005072 858 005122 859 005123 861 005124 862 005126 863 005146 865 005163 867 005176 868 005211 870 005224 872 005237 873 005247 874 005251 875 005252 876 005253 877 005305 879 005306 880 005310 881 005330 883 005345 884 005360 885 005373 886 005406 887 005440 889 005441 890 005443 891 005456 892 005470 893 005500 894 005505 895 005532 899 005571 900 005574 901 005575 902 005610 903 005643 905 005644 906 005646 907 005661 908 005673 909 005726 911 005727 912 005762 914 005764 918 005765 923 005776 927 006045 928 006046 930 006064 938 006065 943 006076 947 006145 948 006146 950 006164 951 006165 953 006203 960 006204 965 006206 966 006207 968 006214 969 006217 970 006221 971 006223 973 006224 975 006226 982 006227 988 006240 990 006256 991 006257 994 006326 995 006335 996 006340 999 006341 1000 006343 1003 006345 1007 006417 1008 006422 1009 006461 1011 006466 1014 006530 1020 006531 1031 006542 1032 006565 1034 006630 1035 006634 1036 006636 1038 006700 1041 006742 1047 006746 1053 006747 1054 006751 1055 006754 1056 006756 1057 006760 1059 006762 1061 007005 1064 007034 1066 007036 1074 007037 1079 007040 1080 007047 1082 007066 1084 007122 1085 007142 1087 007144 1094 007145 1105 007146 1106 007155 1107 007161 1108 007165 1109 007167 1110 007174 1111 007211 1113 007213 1115 007215 1121 007216 1126 007224 1127 007234 1128 007243 1129 007252 1130 007261 1280 007270 1284 007300 1324 007310 1328 007320 1332 007330 1341 007340 1152 007350 1154 007363 1155 007374 1156 007404 1157 007414 1159 007424 1161 007431 1163 007445 1165 007460 1171 007461 1172 007473 1174 007477 1175 007514 1179 007555 1184 007564 1186 007565 1187 007575 1188 007603 1189 007610 1190 007614 1191 007620 1192 007623 1194 007625 1197 007637 1199 007641 1200 007670 1201 007717 1202 007746 1207 007775 1208 010005 1209 010012 1210 010025 1211 010033 1212 010035 1214 010041 1216 010044 1220 010045 1223 010046 1225 010052 1226 010062 1227 010067 1230 010071 1233 010100 1240 010101 1243 010102 1245 010106 1247 010131 1248 010136 1250 010140 1252 010141 1255 010144 1259 010203 1261 010220 1262 010225 1266 010227 1268 010237 1275 010240 1278 010241 1280 010245 1284 010306 1288 010341 1295 010342 1298 010343 1300 010347 1301 010354 1302 010356 1303 010360 1304 010362 1305 010366 1307 010367 1309 010375 1315 010376 1324 010400 1328 010437 1332 010477 1336 010540 1338 010544 1339 010565 1340 010575 1341 010577 1344 010640 1347 010642 1355 010643 1366 010654 1370 010671 1371 010675 1375 010740 1377 010757 1380 010760 1381 010773 1384 011022 1388 011024 1393 011025 1395 011042 1397 011046 1399 011056 1405 011057 1421 011061 1422 011064 1427 011066 1430 011074 1432 011104 1433 011120 1434 011125 1436 011164 1437 011170 1438 011171 1439 011201 1427 011202 1445 011203 1446 011206 1448 011242 1449 011245 1450 011246 1453 011255 1461 011261 1470 011263 1473 011270 1474 011273 1475 011314 1476 011315 1477 011316 1478 011320 1479 011333 1483 011362 1484 011363 1485 011366 1491 011367 1492 011410 1493 011414 1494 011416 1495 011427 1496 011434 1497 011436 1499 011444 1500 011451 1502 011454 1504 011461 1511 011465 1512 011506 1514 011512 1515 011515 1516 011527 1517 011566 1518 011567 1520 011573 1521 011623 1522 011630 1523 011647 1525 011650 1526 011664 1527 011676 1528 011677 1529 011700 1531 011703 1532 011707 1535 011734 1536 011737 1538 011757 1540 011760 1541 011773 1549 012015 1553 012036 1559 012037 1562 012040 1563 012055 1567 012115 1569 012142 1572 012175 1574 012206 1582 012207 1585 012210 1587 012216 1589 012217 1591 012222 1592 012242 1594 012246 1595 012263 1601 012323 1607 012337 1609 012402 1610 012421 1612 012454 1613 012476 1615 012531 1617 012542 1619 012565 1621 012570 1626 012571 1632 012573 1634 012600 1636 012602 1637 012622 1639 012626 1640 012643 1644 012703 1645 012720 1646 012753 1648 012756 1654 012757 1659 012761 1662 012770 ----------------------------------------------------------- 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