COMPILATION LISTING OF SEGMENT rdm_forward_request_ Compiled by: Multics PL/I Compiler, Release 32e, of September 22, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 10/02/89 0822.6 mst Mon 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(89-04-07,Lee), approve(89-05-10,MCR8104), 16* audit(89-07-18,LZimmerman), install(89-10-02,MR12.3-1079): 17* phx19099, phx15783, Mail 457 - added additional msg_type to call to 18* rdm_message_mark_mgr_$mark_current_message to catch use of "-odl" with the 19* current message. 20* 2) change(89-04-11,Lee), approve(89-05-10,MCR8104), 21* audit(89-07-18,LZimmerman), install(89-10-02,MR12.3-1079): 22* phx18564, phx17540, phx17353, Mail 446 - the new entry set_new_current_msg 23* in rdm_mailbox_interface_ is now called when the current message is 24* changed to guarantee that the new current message is never a deleted 25* message; reformatting. 26* END HISTORY COMMENTS */ 27 28 29 /* format: off */ 30 31 /* The read_mail forward request */ 32 33 /* Created: 1978 by W. Olin Sibert */ 34 /* Modified: 3 June 1980 by G. Palter to implement suggestion #0263 -- the current message in read_mail should be set to 35* the message being processed; thus, if an error occurs, the current message will remain on which the error occured */ 36 /* Modified: 28 September 1982 by G. Palter to add appropriate negative control arguments */ 37 /* Modified: 20 December 1982 by G. Palter to fix the following entries on the mail_system error list: 38* #0364 -- when given with no arguments, the forward request does not print a usefull error message; and 39* #0408 -- the forward request does not recognize "-include_deleted", "-only_deleted", and "-only_non_deleted" */ 40 /* Modified: October 1983 by G. Palter as part of the conversion to the new mail system interface. The capability to add 41* a set of comments to the message(s) being forwarded was also implemented */ 42 /* Modified: April 1984 by G. Palter to fix mail system error #0433 -- the send_mail command and all send_mail and 43* read_mail requests which accept multiple addresses as arguments do not properly parse "-log -at HOST" */ 44 45 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen */ 46 47 48 rdm_forward_request_: 49 procedure (P_sci_ptr, P_rdm_invocation_ptr); 50 51 return; /* not an entrypoint */ 52 53 54 dcl P_sci_ptr pointer parameter; 55 dcl P_rdm_invocation_ptr pointer parameter; 56 57 dcl argument character (argument_lth) unaligned based (argument_ptr); 58 dcl argument_ptr pointer; 59 dcl argument_lth fixed binary (21); 60 dcl (n_arguments, argument_idx) fixed binary; 61 62 dcl msg_spec_array (msg_spec_array_size) fixed binary based (msg_spec_array_ptr); 63 dcl msg_spec_array_ptr pointer; 64 dcl (msg_spec_array_size, msg_spec_count, msg_type) fixed binary; 65 66 dcl comment_buffer character (4 * sys_info$max_seg_size) unaligned based (comment_buffer_ptr); 67 dcl comment_text character (comment_text_lth) unaligned based (comment_buffer_ptr); 68 dcl comment_buffer_ptr pointer; 69 dcl comment_text_lth fixed binary (21); 70 71 dcl input_filename character (input_filename_lth) unaligned based (input_filename_ptr); 72 dcl input_file_dirname character (168); 73 dcl input_file_ename character (32); 74 dcl input_filename_ptr pointer; 75 dcl input_file_bitcount fixed binary (24); 76 dcl input_filename_lth fixed binary (21); 77 78 dcl profile_pathname character (profile_pathname_lth) unaligned based (profile_pathname_ptr); 79 dcl profile_dirname character (168); 80 dcl profile_ename character (32); 81 dcl profile_pathname_ptr pointer; 82 dcl profile_pathname_lth fixed binary (21); 83 dcl (profile_pathname_given, abbrev_ca_given) bit (1) aligned; 84 85 dcl 1 local_rfso aligned like rdm_forward_subsystem_options; 86 87 dcl 1 local_pcao aligned like parse_ca_options; 88 89 dcl 1 local_ri aligned, 90 2 header like recipients_info.header, 91 2 forwarding like recipients_info.lists; 92 dcl 1 local_do aligned like deliver_options; 93 94 dcl clear_original_message_chain bit (1) aligned; /* ON => we've marked the original messages */ 95 dcl saved_current_message fixed binary; /* current message number before invoking forward subsystem */ 96 97 dcl (first_message_idx, last_message_idx, message_idx_increment, message_idx, message_number) fixed binary; 98 dcl message_ptr pointer; 99 100 dcl (add_comments, reverse_sw, delete_sw, brief_sw) bit (1) aligned; 101 102 dcl code fixed binary (35); 103 104 dcl NULL_STRING character (1) static options (constant) initial (""); 105 106 dcl sys_info$max_seg_size fixed binary (19) external; 107 108 /* format: off */ 109 dcl (emf_et_$forwarding_aborted, error_table_$bad_arg, error_table_$bad_conversion, error_table_$badopt, 110 error_table_$noarg, mlsys_et_$message_not_sent, mlsys_et_$message_partially_sent) 111 fixed binary (35) external; 112 /* format: on */ 113 114 dcl cu_$grow_stack_frame entry (fixed binary (19), pointer, fixed binary (35)); 115 dcl cv_dec_check_ entry (character (*), fixed binary (35)) returns (fixed binary (35)); 116 dcl expand_pathname_ entry (character (*), character (*), character (*), fixed binary (35)); 117 dcl expand_pathname_$add_suffix entry (character (*), character (*), character (*), character (*), fixed binary (35)); 118 dcl get_system_free_area_ entry () returns (pointer); 119 dcl hcs_$fs_get_path_name entry (pointer, character (*), fixed binary, character (*), fixed binary (35)); 120 dcl initiate_file_ entry (character (*), character (*), bit (*), pointer, fixed binary (24), fixed binary (35)); 121 dcl mail_system_$free_address_list entry (pointer, fixed binary (35)); 122 dcl mail_system_$redistribute_message entry (pointer, character (*), pointer, pointer, fixed binary (35)); 123 dcl mlsys_utils_$free_delivery_results entry (pointer, fixed binary (35)); 124 dcl mlsys_utils_$parse_address_list_control_args 125 entry (pointer, fixed binary, pointer, character (8), pointer, pointer, fixed binary (35)); 126 dcl mlsys_utils_$print_delivery_results entry (pointer, bit (1) aligned, pointer, fixed binary (35)); 127 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 128 dcl rdm_forward_subsystem_ entry (pointer, pointer, pointer, fixed binary (21), fixed binary (21), fixed binary (35)); 129 dcl rdm_mailbox_interface_$delete_messages entry (pointer, bit (1) aligned); 130 dcl rdm_mailbox_interface_$mark_processed_and_acknowledge entry (pointer, fixed binary); 131 dcl rdm_mailbox_interface_$read_message entry (pointer, fixed binary, pointer, fixed binary (35)); 132 dcl rdm_mailbox_interface_$set_new_current_msg entry (ptr, fixed binary, fixed binary); 133 dcl rdm_message_mark_mgr_$clear_marked_messages entry (pointer); 134 dcl rdm_message_mark_mgr_$clear_original_messages entry (pointer); 135 dcl rdm_message_mark_mgr_$mark_current_message entry (pointer, fixed binary); 136 dcl rdm_message_mark_mgr_$mark_messages 137 entry (pointer, pointer, fixed binary (21), fixed binary, bit (*), fixed binary (35)); 138 dcl rdm_message_mark_mgr_$mark_original_messages entry (pointer); 139 dcl rdm_message_mark_mgr_$validate_message_specifier 140 entry (pointer, pointer, fixed binary (21), fixed binary, bit (*), fixed binary (35)); 141 dcl ssu_$abort_line entry () options (variable); 142 dcl ssu_$arg_count entry (pointer, fixed binary); 143 dcl ssu_$arg_ptr entry (pointer, fixed binary, pointer, fixed binary (21)); 144 dcl ssu_$get_abbrev_info entry (pointer, pointer, pointer, bit (1) aligned); 145 dcl ssu_$get_request_name entry (pointer) returns (character (32)); 146 dcl ssu_$get_temp_segment entry (pointer, character (*), pointer); 147 dcl ssu_$release_temp_segment entry (pointer, pointer); 148 dcl terminate_file_ entry (pointer, fixed binary (24), bit (*), fixed binary (35)); 149 150 dcl cleanup condition; 151 152 dcl (addr, currentsize, divide, hbound, index, length, null) builtin; 153 154 forward_request: 155 entry (P_sci_ptr, P_rdm_invocation_ptr); 156 157 rdm_invocation_ptr = P_rdm_invocation_ptr; 158 159 call ssu_$arg_count (P_sci_ptr, n_arguments); 160 161 if n_arguments = 0 then /* must at least supply an address */ 162 NO_FORWARDING_ADDRESSES: 163 call ssu_$abort_line (P_sci_ptr, 0, "Usage: ^a {message_specifier} {addresses} {-control_args}", 164 ssu_$get_request_name (P_sci_ptr)); 165 166 call rdm_message_mark_mgr_$clear_marked_messages (rdm_invocation_ptr); 167 168 msg_spec_array_size = n_arguments; /* set up the message specifier indeces array */ 169 call cu_$grow_stack_frame (currentsize (msg_spec_array), msg_spec_array_ptr, code); 170 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "Too many message specifiers in request line."); 171 172 msg_spec_count = 0; /* haven't seen any message specifiers yet */ 173 174 local_rfso.input_file_ptr, /* for cleanup handler */ 175 comment_buffer_ptr, local_ri.expanded_recipients_result_list_ptr, local_ri.forwarding = null (); 176 clear_original_message_chain = "0"b; 177 178 on condition (cleanup) call cleanup_after_forward_request (); 179 180 181 /* Setup default options */ 182 183 msg_type = NON_DELETED_MESSAGES; /* default value */ 184 185 reverse_sw, delete_sw = "0"b; 186 brief_sw = rdm_invocation.brief; 187 188 add_comments = "0"b; /* do not add comments to the message */ 189 190 local_rfso.version = RDM_FORWARD_SUBSYSTEM_OPTIONS_VERSION_1; 191 192 local_rfso.input_type = TERMINAL_INPUT; 193 194 local_rfso.initial_requests_ptr = null (); 195 local_rfso.initial_requests_lth = 0; 196 local_rfso.enter_request_loop = DEFAULT_REQUEST_LOOP; 197 198 local_rfso.fill_width = 62; /* comments are indented by 10 spaces */ 199 local_rfso.enable_filling = DEFAULT_FILL; 200 201 local_rfso.enable_prompt = DEFAULT_PROMPT; 202 203 local_rfso.default_profile_ptr, local_rfso.profile_ptr = null (); 204 abbrev_ca_given = "0"b; /* haven't seen -ab/-nab: use read_mail abbrev state */ 205 profile_pathname_given = "0"b; /* no -profile yet */ 206 207 local_rfso.auto_write = "0"b; /* -no_auto_write (good) */ 208 local_rfso.pad = ""b; 209 210 local_ri.area_ptr = get_system_free_area_ (); 211 local_ri.n_lists = 1; 212 local_ri.version = RECIPIENTS_INFO_VERSION_2; 213 214 local_do.version = DELIVER_OPTIONS_VERSION_2; 215 local_do.delivery_mode = ORDINARY_DELIVERY; /* forwarding is always ordinary mail */ 216 local_do.queueing_mode = ALWAYS_QUEUE_FOREIGN; /* always queue foreign addresses & local when needed */ 217 local_do.queued_notification_mode = NOTIFY_ON_ERROR; 218 local_do.abort = "1"b; /* don't send it unless all recipients are OK */ 219 local_do.send_if_empty = "1"b; /* let user forward anything they want to */ 220 local_do.recipient_notification = "1"b; /* default is -notify */ 221 local_do.acknowledge = "0"b; /* default is -no_acknowledge */ 222 local_do.queue_mailing_lists = "0"b; 223 local_do.mbz = ""b; 224 225 local_pcao.version = PARSE_CA_OPTIONS_VERSION_1; 226 local_pcao.logbox_creation_mode = CREATE_AND_ANNOUNCE_MAILBOX; 227 local_pcao.savebox_creation_mode = QUERY_TO_CREATE_MAILBOX; 228 local_pcao.abort_on_errors = "1"b; /* stop immediately on an invalid address */ 229 local_pcao.validate_addresses = "1"b; /* insure that we can send the mail */ 230 local_pcao.mbz = ""b; 231 232 233 /* Process arguments: check if first argument is a valid message specifier; otherwise, try using it as an address */ 234 235 call ssu_$arg_ptr (P_sci_ptr, 1, argument_ptr, argument_lth); 236 237 call rdm_message_mark_mgr_$validate_message_specifier (rdm_invocation_ptr, argument_ptr, argument_lth, 238 ALL_MESSAGES, ""b, code); 239 240 if code = 0 then do; /* seems to be a message specifier all right */ 241 argument_idx = 1; /* ... neede by process_argument_as_spec */ 242 call process_argument_as_spec (); 243 argument_idx = 2; /* ... so addresses start with the 2nd argument */ 244 end; 245 else argument_idx = 1; /* not a message specifier: must be an address */ 246 247 248 /* Process remaining arguments */ 249 250 do while (argument_idx <= n_arguments); 251 252 call mlsys_utils_$parse_address_list_control_args (P_sci_ptr, argument_idx, addr (local_pcao), 253 ADDRESS_LIST_VERSION_2, local_ri.forwarding.address_list_ptr, local_ri.forwarding.address_list_ptr, 254 code); 255 if code ^= 0 then /* only severly fatal errors will get here */ 256 call ssu_$abort_line (P_sci_ptr, code, "Parsing control arguments."); 257 258 if argument_idx <= n_arguments then do; 259 260 /*** An argument not recognized by the mail system: must be one of ours */ 261 call ssu_$arg_ptr (P_sci_ptr, argument_idx, argument_ptr, argument_lth); 262 263 if index (argument, "-") = 1 then /* a control argument */ 264 if (argument = "-add_comments") | (argument = "-add_comment") then add_comments = "1"b; 265 else if (argument = "-no_add_comments") | (argument = "-no_add_comment") then 266 add_comments = "0"b; 267 268 else if (argument = "-acknowledge") | (argument = "-ack") then local_do.acknowledge = "1"b; 269 else if (argument = "-no_acknowledge") | (argument = "-nack") then local_do.acknowledge = "0"b; 270 271 else if (argument = "-brief") | (argument = "-bf") then brief_sw = "1"b; 272 else if (argument = "-long") | (argument = "-lg") then brief_sw = "0"b; 273 274 else if (argument = "-include_deleted") | (argument = "-idl") then msg_type = ALL_MESSAGES; 275 else if (argument = "-only_deleted") | (argument = "-odl") then msg_type = ONLY_DELETED_MESSAGES; 276 else if (argument = "-only_non_deleted") | (argument = "-ondl") then 277 msg_type = NON_DELETED_MESSAGES; 278 279 else if (argument = "-notify") | (argument = "-nt") then local_do.recipient_notification = "1"b; 280 else if (argument = "-no_notify") | (argument = "-nnt") then 281 local_do.recipient_notification = "0"b; 282 283 else if (argument = "-reverse") | (argument = "-rv") then reverse_sw = "1"b; 284 else if (argument = "-no_reverse") | (argument = "-nrv") then reverse_sw = "0"b; 285 286 else if (argument = "-delete") | (argument = "-dl") then delete_sw = "1"b; 287 else if (argument = "-no_delete") | (argument = "-ndl") then delete_sw = "0"b; 288 289 else if (argument = "-message") | (argument = "-msg") then do; 290 if argument_idx = n_arguments then 291 call ssu_$abort_line (P_sci_ptr, error_table_$noarg, 292 "A message specifier must follow ""^a"".", argument); 293 argument_idx = argument_idx + 1; 294 call process_argument_as_spec (); 295 end; 296 297 /*** Control arguments related to adding comments ... */ 298 else if (argument = "-terminal_input") | (argument = "-ti") then 299 local_rfso.input_type = TERMINAL_INPUT; 300 else if (argument = "-input_file") | (argument = "-if") then do; 301 call get_next_argument ("A pathname"); 302 local_rfso.input_type = FILE_INPUT; 303 input_filename_ptr = argument_ptr; 304 input_filename_lth = argument_lth; 305 end; /* save it for later processing */ 306 307 else if (argument = "-fill") | (argument = "-fi") then local_rfso.enable_filling = FILL; 308 else if (argument = "-no_fill") | (argument = "-nfi") then local_rfso.enable_filling = NO_FILL; 309 else if (argument = "-line_length") | (argument = "-ll") then do; 310 call get_next_argument ("A number"); 311 local_rfso.fill_width = cv_dec_check_ (argument, code); 312 if code ^= 0 then 313 call ssu_$abort_line (P_sci_ptr, error_table_$bad_conversion, "-line_length ""^a""", 314 argument); 315 if local_rfso.fill_width < 21 then 316 call ssu_$abort_line (P_sci_ptr, 0, "Line length must be greater than 20."); 317 end; 318 319 /*** Control arguments required by the MCR boards despite the furious objections of the author */ 320 else if argument = "-auto_write" then local_rfso.auto_write = "1"b; 321 else if argument = "-no_auto_write" then local_rfso.auto_write = "0"b; 322 323 /*** Standard subsystem control arguments */ 324 else if (argument = "-abbrev") | (argument = "-ab") then 325 local_rfso.enable_abbrev, abbrev_ca_given = "1"b; 326 else if (argument = "-no_abbrev") | (argument = "-nab") then do; 327 local_rfso.enable_abbrev = "0"b; 328 abbrev_ca_given = "1"b; 329 end; 330 else if (argument = "-profile") | (argument = "-pf") then do; 331 call get_next_argument ("A pathname"); 332 profile_pathname_given = "1"b; 333 profile_pathname_ptr = argument_ptr; 334 profile_pathname_lth = argument_lth; 335 end; /* save for later processing */ 336 337 else if (argument = "-prompt") | (argument = "-pmt") then do; 338 call get_next_argument ("A string"); 339 if argument_lth = 0 then /* same as -no_prompt */ 340 local_rfso.enable_prompt = NO_PROMPT; 341 else do; 342 local_rfso.enable_prompt = USE_PROMPT_STRING; 343 local_rfso.prompt_string = argument; 344 end; 345 end; 346 else if (argument = "-no_prompt") | (argument = "-npmt") then 347 local_rfso.enable_prompt = NO_PROMPT; 348 349 else if (argument = "-request") | (argument = "-rq") then do; 350 call get_next_argument ("A string"); 351 local_rfso.initial_requests_ptr = argument_ptr; 352 local_rfso.initial_requests_lth = argument_lth; 353 end; 354 355 else if (argument = "-request_loop") | (argument = "-rql") then 356 local_rfso.enter_request_loop = REQUEST_LOOP; 357 else if (argument = "-no_request_loop") | (argument = "-nrql") then 358 local_rfso.enter_request_loop = NO_REQUEST_LOOP; 359 360 /*** following control arguments are obsolete: remove them in MR11 */ 361 else if (argument = "-all") | (argument = "-a") then msg_type = ALL_MESSAGES; 362 363 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 364 365 else call ssu_$abort_line (P_sci_ptr, error_table_$bad_arg, """^a""", argument); 366 367 argument_idx = argument_idx + 1; /* skip over argument we processed */ 368 end; 369 end; 370 371 if is_empty_list (local_ri.forwarding.address_list_ptr) then go to NO_FORWARDING_ADDRESSES; 372 373 if msg_spec_count = 0 then /* defaults to the current message */ 374 call rdm_message_mark_mgr_$mark_current_message (rdm_invocation_ptr, msg_type); 375 /* phx19099 RL - use of "-odl" with current message will be caught during marking */ 376 else call process_msg_specs (); 377 378 379 if add_comments then do; 380 381 /* Get the user's comment by invoking our sub-subsystem */ 382 383 call ssu_$get_temp_segment (P_sci_ptr, "comment-buffer", comment_buffer_ptr); 384 385 if local_rfso.input_type = FILE_INPUT then do; 386 /*** Find the specified input file ... */ 387 call expand_pathname_ (input_filename, input_file_dirname, input_file_ename, code); 388 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "-input_file ""^a""", input_filename); 389 call initiate_file_ (input_file_dirname, input_file_ename, R_ACCESS, local_rfso.input_file_ptr, 390 input_file_bitcount, code); 391 if code ^= 0 then 392 call ssu_$abort_line (P_sci_ptr, code, "-input_file ""^a""", 393 pathname_ (input_file_dirname, input_file_ename)); 394 local_rfso.input_file_lth = divide ((input_file_bitcount + 8), 9, 21, 0); 395 end; 396 397 if profile_pathname_given then do; 398 /*** Initiate the subsystem profile requested by the user */ 399 call expand_pathname_$add_suffix (profile_pathname, "profile", profile_dirname, profile_ename, code); 400 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "-profile ""^a""", profile_pathname); 401 call initiate_file_ (profile_dirname, profile_ename, R_ACCESS, local_rfso.default_profile_ptr, (0), 402 code); 403 if code ^= 0 then 404 call ssu_$abort_line (P_sci_ptr, code, "-profile ""^a""", 405 pathname_ (profile_dirname, profile_ename)); 406 if ^abbrev_ca_given then /* -profile implies -abbrev unless explicit -ab/-nab given */ 407 local_rfso.enable_abbrev = "1"b; 408 abbrev_ca_given = "1"b; /* do not copy read_mail's abbreviation processing state */ 409 end; 410 411 if ^abbrev_ca_given then do; 412 /*** User did not give any abbrev control arguments: use read_mail's state of abbreviation processing */ 413 call ssu_$get_abbrev_info (P_sci_ptr, local_rfso.default_profile_ptr, local_rfso.profile_ptr, 414 local_rfso.enable_abbrev); 415 if local_rfso.default_profile_ptr ^= null () then 416 call add_null_refname (local_rfso.default_profile_ptr); 417 if (local_rfso.profile_ptr ^= null ()) & (local_rfso.profile_ptr ^= local_rfso.default_profile_ptr) 418 then 419 call add_null_refname (local_rfso.profile_ptr); 420 end; /* ssu_ never terminiates same profile twice */ 421 422 /*** Invoke the subsystem to actually do the work */ 423 424 call rdm_message_mark_mgr_$mark_original_messages (rdm_invocation_ptr); 425 saved_current_message = rdm_invocation.current_message; 426 clear_original_message_chain = "1"b; 427 428 call rdm_forward_subsystem_ (rdm_invocation_ptr, addr (local_rfso), addr (comment_buffer), 429 length (comment_buffer), comment_text_lth, code); 430 431 clear_original_message_chain = "0"b; 432 rdm_invocation.current_message = saved_current_message; 433 call rdm_message_mark_mgr_$clear_original_messages (rdm_invocation_ptr); 434 435 if code ^= 0 then 436 if code = emf_et_$forwarding_aborted then 437 if brief_sw then 438 call ssu_$abort_line (P_sci_ptr, 0); 439 else call ssu_$abort_line (P_sci_ptr, 0, "No messages forwarded."); 440 else call ssu_$abort_line (P_sci_ptr, code, "Invoking forward sub-subsystem."); 441 end; 442 443 444 else do; 445 446 /* User does not want to add a comment */ 447 448 comment_buffer_ptr = addr (NULL_STRING); /* prevents faults */ 449 comment_text_lth = 0; 450 end; 451 452 453 /* Forward the messages one at a time */ 454 455 if reverse_sw then do; /* process messages in the reverse of the order marked */ 456 first_message_idx = marked_chain.n_messages; 457 last_message_idx = 1; 458 message_idx_increment = -1; 459 end; 460 else do; /* process messages in the order marked */ 461 first_message_idx = 1; 462 last_message_idx = marked_chain.n_messages; 463 message_idx_increment = 1; 464 end; 465 466 do message_idx = first_message_idx to last_message_idx by message_idx_increment; 467 message_number = marked_chain.messages (message_idx); 468 469 /* phx18564 RL - set current message to message_number and guarantee that it's not deleted */ 470 call rdm_mailbox_interface_$set_new_current_msg (rdm_invocation_ptr, message_number, 471 rdm_invocation.current_message); /* each message is current as it's processed */ 472 473 call rdm_mailbox_interface_$read_message (rdm_invocation_ptr, message_number, message_ptr, code); 474 if code ^= 0 then 475 call ssu_$abort_line (P_sci_ptr, code, "Reading message #^d from ^a.", message_number, 476 rdm_invocation.mailbox_name); 477 478 call mail_system_$redistribute_message (message_ptr, comment_text, addr (local_ri), addr (local_do), code); 479 if (code ^= 0) & (code ^= mlsys_et_$message_not_sent) & (code ^= mlsys_et_$message_partially_sent) then 480 call ssu_$abort_line (P_sci_ptr, code, "Attempting to forward message #^d.", message_number); 481 482 call mlsys_utils_$print_delivery_results (P_sci_ptr, brief_sw, addr (local_ri), (0)); 483 call mlsys_utils_$free_delivery_results (addr (local_ri), (0)); 484 485 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "Message #^d.", message_number); 486 487 call rdm_mailbox_interface_$mark_processed_and_acknowledge (rdm_invocation_ptr, message_number); 488 end; 489 490 491 /* Clean up */ 492 493 if delete_sw then /* delete messages if requested */ 494 call rdm_mailbox_interface_$delete_messages (rdm_invocation_ptr, "0"b); 495 496 call cleanup_after_forward_request (); 497 498 return; 499 500 /* Cleans up after execution of the request */ 501 502 cleanup_after_forward_request: 503 procedure (); 504 505 if clear_original_message_chain then do; 506 rdm_invocation.current_message = saved_current_message; 507 call rdm_message_mark_mgr_$clear_original_messages (rdm_invocation_ptr); 508 clear_original_message_chain = "0"b; 509 end; 510 511 call mlsys_utils_$free_delivery_results (addr (local_ri), (0)); 512 513 if local_ri.forwarding.address_list_ptr ^= null () then 514 call mail_system_$free_address_list (local_ri.forwarding.address_list_ptr, (0)); 515 516 if (comment_buffer_ptr ^= null ()) & (comment_buffer_ptr ^= addr (NULL_STRING)) then 517 call ssu_$release_temp_segment (P_sci_ptr, comment_buffer_ptr); 518 519 if local_rfso.input_file_ptr ^= null () then 520 call terminate_file_ (local_rfso.input_file_ptr, 0, TERM_FILE_TERM, (0)); 521 522 return; 523 524 end cleanup_after_forward_request; 525 526 527 528 /* Fetches the value expected after the given control argument */ 529 530 get_next_argument: 531 procedure (p_argument_type); 532 533 dcl p_argument_type character (*) parameter; 534 535 if argument_idx = n_arguments then 536 call ssu_$abort_line (P_sci_ptr, error_table_$noarg, "^a after ""^a"".", p_argument_type, argument); 537 538 argument_idx = argument_idx + 1; 539 call ssu_$arg_ptr (P_sci_ptr, argument_idx, argument_ptr, argument_lth); 540 541 return; 542 543 end get_next_argument; 544 545 /* Marks the current argument as a message specifier */ 546 547 process_argument_as_spec: 548 procedure (); 549 550 if msg_spec_count >= hbound (msg_spec_array, 1) then 551 call ssu_$abort_line (P_sci_ptr, 0, "Too many message specifiers in request."); 552 /* can't ever happen */ 553 554 msg_spec_count = msg_spec_count + 1; 555 msg_spec_array (msg_spec_count) = argument_idx; 556 557 return; 558 559 end process_argument_as_spec; 560 561 562 563 /* Process the message specifiers on the request line */ 564 565 process_msg_specs: 566 procedure (); 567 568 dcl idx fixed binary; 569 570 do idx = 1 to msg_spec_count; 571 call ssu_$arg_ptr (P_sci_ptr, msg_spec_array (idx), argument_ptr, argument_lth); 572 573 call rdm_message_mark_mgr_$mark_messages (rdm_invocation_ptr, argument_ptr, argument_lth, msg_type, "0"b, 574 code); 575 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code); 576 end; 577 578 return; 579 580 end process_msg_specs; 581 582 /* Adds a null reference name to the supplied profile: ssu_ will terminate a null refname when the forward sub-subsystem 583* invocation is destroyed but read_mail will still try to reference the profile; adding an extra null refname here makes 584* everything work properly */ 585 586 add_null_refname: 587 procedure (p_profile_ptr); 588 589 dcl p_profile_ptr pointer parameter; 590 dcl new_profile_ptr pointer; 591 dcl profile_dirname character (168); 592 dcl profile_ename character (32); 593 594 call hcs_$fs_get_path_name (p_profile_ptr, profile_dirname, (0), profile_ename, code); 595 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "Copying state of read_mail abbrev processing."); 596 597 call initiate_file_ (profile_dirname, profile_ename, R_ACCESS, new_profile_ptr, (0), code); 598 if p_profile_ptr ^= new_profile_ptr then 599 call ssu_$abort_line (P_sci_ptr, code, "Copying state of read_mail abbrev processing."); 600 601 return; 602 603 end add_null_refname; 604 605 606 607 /* Determines if the supplied address list is empty */ 608 609 is_empty_list: 610 procedure (p_address_list_ptr) returns (bit (1) aligned); 611 612 dcl p_address_list_ptr pointer parameter; 613 614 if p_address_list_ptr = null () then /* nothing there at all */ 615 return ("1"b); 616 617 else return ((p_address_list_ptr -> address_list.n_addresses = 0)); 618 619 end is_empty_list; 620 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 */ 621 622 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 */ 623 624 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 */ 625 626 4 1 /* START OF: rdm_fwd_subsystem_opts.incl.pl1 * * * * * * * * * * * * * * * * */ 4 2 4 3 /* Option structure for the read_mail forwarding subsystem. */ 4 4 4 5 /* Written: 10/3/83 by B. Margolin */ 4 6 4 7 dcl 1 rdm_forward_subsystem_options aligned based (rdm_forward_subsystem_options_ptr), 4 8 2 version char (8), 4 9 2 input_type char (4), /* terminal/file */ 4 10 2 input_file, 4 11 3 input_file_ptr ptr, 4 12 3 input_file_lth fixed bin (21), 4 13 2 request_loop_control, 4 14 3 initial_requests_ptr ptr, 4 15 3 initial_requests_lth fixed bin (21), 4 16 3 enter_request_loop bit (2) aligned, /* default/-rql/-nrql */ 4 17 2 fill_control, 4 18 3 fill_width fixed bin, /* default 62 (caller should set) */ 4 19 3 enable_filling bit (2) aligned, /* default/-fill/-no_fill */ 4 20 2 prompt_control, 4 21 3 prompt_string char (64) var, 4 22 3 enable_prompt bit (2) aligned, /* default/-prompt prompt_string/-no_prompt */ 4 23 2 abbrev_control, 4 24 3 default_profile_ptr ptr, 4 25 3 profile_ptr ptr, 4 26 3 enable_abbrev bit (1) aligned, 4 27 2 flags, 4 28 3 auto_write bit (1) unaligned, 4 29 3 pad bit (35) unaligned; 4 30 4 31 dcl rdm_forward_subsystem_options_ptr ptr; 4 32 dcl RDM_FORWARD_SUBSYSTEM_OPTIONS_VERSION_1 4 33 char (8) int static options (constant) init ("rfso_001"); 4 34 4 35 dcl (DEFAULT_PROMPT init ("00"b), 4 36 USE_PROMPT_STRING init ("01"b), 4 37 NO_PROMPT init ("10"b), 4 38 4 39 DEFAULT_FILL init ("00"b), 4 40 FILL init ("01"b), 4 41 NO_FILL init ("10"b), 4 42 4 43 DEFAULT_REQUEST_LOOP init ("00"b), 4 44 REQUEST_LOOP init ("01"b), 4 45 NO_REQUEST_LOOP init ("10"b)) 4 46 bit (2) aligned int static options (constant); 4 47 4 48 dcl (TERMINAL_INPUT init ("term"), 4 49 FILE_INPUT init ("file")) 4 50 char (4) int static options (constant); 4 51 4 52 /* END OF: rdm_fwd_subsystem_opts.incl.pl1 * * * * * * * * * * * * * * * * */ 627 628 5 1 /* BEGIN INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 5 2 /* Created: June 1983 by G. Palter */ 5 3 5 4 /* Definition of an address list -- a collection of addresses used as the value of certain message fields, etc. */ 5 5 5 6 dcl 1 address_list aligned based (address_list_ptr), 5 7 2 version character (8) unaligned, 5 8 2 reserved bit (144), /* ... exclusively for use by the mail system */ 5 9 2 n_addresses fixed binary, /* # of address in this list */ 5 10 2 addresses (address_list_n_addresses refer (address_list.n_addresses)) pointer; 5 11 5 12 dcl ADDRESS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsals02"); 5 13 5 14 dcl address_list_ptr pointer; 5 15 5 16 dcl address_list_n_addresses fixed binary; /* reserved exclusively for use by the mail system */ 5 17 5 18 /* END INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 629 630 6 1 /* BEGIN INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 6 2 /* Created: June 1983 by G. Palter */ 6 3 /* Modified: March 1984 by G. Palter to remove ignore_log_save option */ 6 4 6 5 /* Options for the mlsys_utils_$parse_address_control_arguments, mlsys_utils_$parse_address_list_control_arguments, and 6 6* mlsys_utils_$parse_mailbox_control_arguments entrypoints */ 6 7 6 8 dcl 1 parse_ca_options aligned based (parse_ca_options_ptr), 6 9 2 version character (8) unaligned, 6 10 2 logbox_creation_mode fixed binary, /* specifies the action to be taken if the address/mailbox is 6 11* the user's logbox, address/mailbox validation is requested, 6 12* and the logbox does not exist */ 6 13 2 savebox_creation_mode fixed binary, /* ... same as above but for any savebox */ 6 14 2 flags, 6 15 3 abort_on_errors bit (1) unaligned, /* ON => use ssu_$abort_line to report errors (ie: abort on 6 16* the first error); OFF => use ssu_$print_message */ 6 17 3 validate_addresses bit (1) unaligned, /* ON => validate the existence of the address/mailbox; 6 18* OFF => only validate the command/request line syntax */ 6 19 3 mbz bit (34) unaligned; /* must be set to ""b by the caller */ 6 20 6 21 dcl PARSE_CA_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlspca01"); 6 22 6 23 dcl parse_ca_options_ptr pointer; 6 24 6 25 6 26 /* Defined logbox/savebox creation modes */ 6 27 6 28 dcl (DONT_CREATE_MAILBOX initial (0), /* do not create the mailbox and issue an error message */ 6 29 QUERY_TO_CREATE_MAILBOX initial (1), /* ask the user for permission to create the mailbox */ 6 30 CREATE_AND_ANNOUNCE_MAILBOX initial (2), /* create the mailbox and inform the user of this action */ 6 31 SILENTLY_CREATE_MAILBOX initial (3)) /* create the mailbox but don't inform the user */ 6 32 fixed binary static options (constant); 6 33 6 34 /* END INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 631 632 7 1 /* BEGIN INCLUDE FILE ... mlsys_deliver_info.incl.pl1 */ 7 2 /* Created: June 1983 by G. Palter */ 7 3 7 4 /* Options for the mail_system_$deliver_message and mail_system_$redistribute_message entrypoints */ 7 5 7 6 dcl 1 deliver_options aligned based (deliver_options_ptr), 7 7 2 version character (8) unaligned, 7 8 2 delivery_mode fixed binary, /* deliver as an ordinary/interactive/express message */ 7 9 2 queueing_mode fixed binary, /* when to queue the message */ 7 10 2 queued_notification_mode fixed binary, /* when to notify sender about queued mail success/failure */ 7 11 2 flags, 7 12 3 abort bit (1) unaligned, /* ON => don't send it if any fatal errors are detected */ 7 13 3 send_if_empty bit (1) unaligned, /* ON => send the message even if its body is empty */ 7 14 3 recipient_notification bit (1) unaligned, /* ON => send "You have mail." notification */ 7 15 3 acknowledge bit (1) unaligned, /* ON => request ACK message when recipients read it */ 7 16 3 queue_mailing_lists bit (1) unaligned, /* ON => always queue the message for mailing lists */ 7 17 3 mbz bit (31) unaligned; /* must be set to ""b by the caller */ 7 18 7 19 dcl DELIVER_OPTIONS_VERSION_2 character (8) static options (constant) initial ("mlsdlo02"); 7 20 7 21 dcl deliver_options_ptr pointer; 7 22 7 23 /* Defined modes of delivery */ 7 24 7 25 dcl (ORDINARY_DELIVERY initial (1), /* send as an ordinary message */ 7 26 INTERACTIVE_DELIVERY initial (2), /* send as an interactive message */ 7 27 EXPRESS_DELIVERY initial (3)) /* send as an express interactive message; ie: deliver the 7 28* message only if the user is logged in */ 7 29 fixed binary static options (constant); 7 30 7 31 /* Defined modes for queuing mail on transient errors */ 7 32 7 33 dcl (NEVER_QUEUE initial (1), /* never queue: convert into a fatal error */ 7 34 QUEUE_FOREIGN_WHEN_NEEDED initial (2), /* never queue local mail; queue foreign mail on error */ 7 35 QUEUE_WHEN_NEEDED initial (3), /* queue all mail on any transient error */ 7 36 ALWAYS_QUEUE_FOREIGN initial (4), /* queue local mail on error; always queue foreign mail */ 7 37 ALWAYS_QUEUE initial (5)) /* always queue all mail */ 7 38 fixed binary static options (constant); 7 39 7 40 /* Defined modes of notification of success/failure to deliver queued mail */ 7 41 7 42 dcl (NEVER_NOTIFY initial (1), /* never notify the sender */ 7 43 NOTIFY_ON_ERROR initial (2), /* notify the sender only if it can not be delivered */ 7 44 ALWAYS_NOTIFY initial (3)) /* always notify the sender */ 7 45 fixed binary static options (constant); 7 46 7 47 /* Definition of the recipients of a message and the results of the attempted transmission */ 7 48 7 49 dcl 1 recipients_info aligned based (recipients_info_ptr), 7 50 2 header, 7 51 3 version character (8) unaligned, 7 52 3 area_ptr pointer, /* -> area for following structures; null => system free */ 7 53 3 expanded_recipients_result_list_ptr pointer, /* set -> expanded_recipients_result_list (if any) */ 7 54 3 n_recipients fixed binary, /* set to total # of recipients after expanding lists */ 7 55 3 n_unique_recipients fixed binary, /* set to total # of unique recipients */ 7 56 3 n_failed_recipients fixed binary, /* set to # of recipients that failed or would fail */ 7 57 3 n_lists fixed binary, /* # of address lists of recipients */ 7 58 2 lists (recipients_info_n_lists refer (recipients_info.n_lists)), 7 59 3 address_list_ptr pointer, /* -> an address list containing recipients */ 7 60 3 recipients_result_list_ptr pointer; /* set -> recipients_result_list for this address list */ 7 61 7 62 dcl RECIPIENTS_INFO_VERSION_2 character (8) static options (constant) initial ("mlsrcpt2"); 7 63 7 64 dcl (recipients_info_ptr, recipients_result_list_ptr, expanded_recipients_result_list_ptr) pointer; 7 65 7 66 dcl (recipients_info_n_lists, recipients_result_list_n_addresses, expanded_recipients_result_list_n_entries) 7 67 fixed binary; /* used to allocate these structures */ 7 68 7 69 7 70 /* Data structure returned by the mail system recording the results of the mailing for one of the input address lists */ 7 71 7 72 dcl 1 recipients_result_list aligned based (recipients_result_list_ptr), 7 73 2 n_addresses fixed binary, /* set to # of address in corresponding address list */ 7 74 2 pad bit (36), 7 75 2 results (recipients_result_list_n_addresses refer (recipients_result_list.n_addresses)), 7 76 3 code fixed binary (35), /* set to describe results of attempted delivery */ 7 77 3 expanded_list_info, /* set to identify any failing addresses found in the 7 78* expansion of this address ... */ 7 79 4 first_entry_idx fixed binary (18) unaligned unsigned, 7 80 /* ... index of first such address in structure below ... */ 7 81 4 n_entries fixed binary (18) unaligned unsigned,/* ... # of such addresses there for this address */ 7 82 3 duplicate_info, /* set to identify the prior address (if any) for which this 7 83* is a duplicate ... */ 7 84 4 list_idx fixed binary (18) unaligned unsigned, /* ... in which list ... */ 7 85 4 address_idx fixed binary (18) unaligned unsigned, /* ... and which address in that list */ 7 86 3 explanation character (128) varying; /* explanation associated with a fatal error or the message 7 87* being queued due to a transient error */ 7 88 7 89 7 90 /* Describes fatal or transient errors for those recipients which are part of mailing lists of named groups in one of the 7 91* caller's address lists */ 7 92 7 93 dcl 1 expanded_recipients_result_list aligned based (expanded_recipients_result_list_ptr), 7 94 2 n_entries fixed binary, /* set to # of failing expanded recipients */ 7 95 2 pad bit (36), 7 96 2 entries (expanded_recipients_result_list_n_entries refer (expanded_recipients_result_list.n_entries)), 7 97 3 address_ptr pointer, /* -> the failing address from the list/group */ 7 98 3 code fixed binary (35), /* set to describe why delivery failed */ 7 99 3 parent_address, /* set to identify the original recipient of whose expansion 7 100* this address is a part ... */ 7 101 4 list_idx fixed binary (18) unaligned unsigned, /* ... in which list ... */ 7 102 4 address_idx fixed binary (18) unaligned unsigned, /* ... and which address in that list */ 7 103 3 explanation character (128) varying; /* explanation associated with a fatal error or the message 7 104* being queued due to a transient error */ 7 105 7 106 /* END INCLUDE FILE ... mlsys_deliver_info.incl.pl1 */ 633 634 8 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 8 2* 8 3* Values for the "access mode" argument so often used in hardcore 8 4* James R. Davis 26 Jan 81 MCR 4844 8 5* Added constants for SM access 4/28/82 Jay Pattin 8 6* Added text strings 03/19/85 Chris Jones 8 7**/ 8 8 8 9 8 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 8 11 dcl ( 8 12 N_ACCESS init ("000"b), 8 13 R_ACCESS init ("100"b), 8 14 E_ACCESS init ("010"b), 8 15 W_ACCESS init ("001"b), 8 16 RE_ACCESS init ("110"b), 8 17 REW_ACCESS init ("111"b), 8 18 RW_ACCESS init ("101"b), 8 19 S_ACCESS init ("100"b), 8 20 M_ACCESS init ("010"b), 8 21 A_ACCESS init ("001"b), 8 22 SA_ACCESS init ("101"b), 8 23 SM_ACCESS init ("110"b), 8 24 SMA_ACCESS init ("111"b) 8 25 ) bit (3) internal static options (constant); 8 26 8 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 8 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 8 29 8 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 8 31 static options (constant); 8 32 8 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 8 34 static options (constant); 8 35 8 36 dcl ( 8 37 N_ACCESS_BIN init (00000b), 8 38 R_ACCESS_BIN init (01000b), 8 39 E_ACCESS_BIN init (00100b), 8 40 W_ACCESS_BIN init (00010b), 8 41 RW_ACCESS_BIN init (01010b), 8 42 RE_ACCESS_BIN init (01100b), 8 43 REW_ACCESS_BIN init (01110b), 8 44 S_ACCESS_BIN init (01000b), 8 45 M_ACCESS_BIN init (00010b), 8 46 A_ACCESS_BIN init (00001b), 8 47 SA_ACCESS_BIN init (01001b), 8 48 SM_ACCESS_BIN init (01010b), 8 49 SMA_ACCESS_BIN init (01011b) 8 50 ) fixed bin (5) internal static options (constant); 8 51 8 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 635 636 9 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 9 2 /* format: style2,^inddcls,idind32 */ 9 3 9 4 declare 1 terminate_file_switches based, 9 5 2 truncate bit (1) unaligned, 9 6 2 set_bc bit (1) unaligned, 9 7 2 terminate bit (1) unaligned, 9 8 2 force_write bit (1) unaligned, 9 9 2 delete bit (1) unaligned; 9 10 9 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 9 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 9 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 9 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 9 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 9 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 9 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 9 18 9 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 637 638 639 end rdm_forward_request_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/02/89 0815.0 rdm_forward_request_.pl1 >spec>install>1079>rdm_forward_request_.pl1 621 1 10/27/83 2104.3 rdm_invocation.incl.pl1 >ldd>include>rdm_invocation.incl.pl1 623 2 10/27/83 2104.3 rdm_message_list.incl.pl1 >ldd>include>rdm_message_list.incl.pl1 625 3 10/27/83 2104.3 rdm_message_chains.incl.pl1 >ldd>include>rdm_message_chains.incl.pl1 627 4 10/27/83 2104.3 rdm_fwd_subsystem_opts.incl.pl1 >ldd>include>rdm_fwd_subsystem_opts.incl.pl1 629 5 10/27/83 2104.2 mlsys_address_list.incl.pl1 >ldd>include>mlsys_address_list.incl.pl1 631 6 06/18/84 1324.1 mlsys_parse_ca_options.incl.pl1 >ldd>include>mlsys_parse_ca_options.incl.pl1 633 7 10/27/83 2104.2 mlsys_deliver_info.incl.pl1 >ldd>include>mlsys_deliver_info.incl.pl1 635 8 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 637 9 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.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. ADDRESS_LIST_VERSION_2 000010 constant char(8) initial packed unaligned dcl 5-12 set ref 252* ALL_MESSAGES 000113 constant fixed bin(17,0) initial dcl 3-42 set ref 237* 274 361 ALWAYS_QUEUE_FOREIGN constant fixed bin(17,0) initial dcl 7-33 ref 216 CREATE_AND_ANNOUNCE_MAILBOX constant fixed bin(17,0) initial dcl 6-28 ref 226 DEFAULT_FILL constant bit(2) initial dcl 4-35 ref 199 DEFAULT_PROMPT constant bit(2) initial dcl 4-35 ref 201 DEFAULT_REQUEST_LOOP constant bit(2) initial dcl 4-35 ref 196 DELIVER_OPTIONS_VERSION_2 000004 constant char(8) initial packed unaligned dcl 7-19 ref 214 FILE_INPUT 000012 constant char(4) initial packed unaligned dcl 4-48 ref 302 385 FILL constant bit(2) initial dcl 4-35 ref 307 NON_DELETED_MESSAGES constant fixed bin(17,0) initial dcl 3-42 ref 183 276 NOTIFY_ON_ERROR constant fixed bin(17,0) initial dcl 7-42 ref 217 NO_FILL constant bit(2) initial dcl 4-35 ref 308 NO_PROMPT constant bit(2) initial dcl 4-35 ref 339 346 NO_REQUEST_LOOP constant bit(2) initial dcl 4-35 ref 357 NULL_STRING 000016 constant char(1) initial packed unaligned dcl 104 set ref 448 516 ONLY_DELETED_MESSAGES constant fixed bin(17,0) initial dcl 3-42 ref 275 ORDINARY_DELIVERY constant fixed bin(17,0) initial dcl 7-25 ref 215 PARSE_CA_OPTIONS_VERSION_1 000006 constant char(8) initial packed unaligned dcl 6-21 ref 225 P_rdm_invocation_ptr parameter pointer dcl 55 ref 48 154 157 P_sci_ptr parameter pointer dcl 54 set ref 48 154 159* 161* 161* 161* 170* 235* 252* 255* 261* 290* 312* 315* 363* 365* 383* 388* 391* 400* 403* 413* 435* 439* 440* 474* 479* 482* 485* 516* 535* 539* 550* 571* 575* 595* 598* QUERY_TO_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 6-28 ref 227 RDM_FORWARD_SUBSYSTEM_OPTIONS_VERSION_1 000014 constant char(8) initial packed unaligned dcl 4-32 ref 190 RECIPIENTS_INFO_VERSION_2 000002 constant char(8) initial packed unaligned dcl 7-62 ref 212 REQUEST_LOOP constant bit(2) initial dcl 4-35 ref 355 R_ACCESS 000102 constant bit(3) initial packed unaligned dcl 8-11 set ref 389* 401* 597* TERMINAL_INPUT 000013 constant char(4) initial packed unaligned dcl 4-48 ref 192 298 TERM_FILE_TERM 000000 constant bit(3) initial packed unaligned dcl 9-14 set ref 519* USE_PROMPT_STRING constant bit(2) initial dcl 4-35 ref 342 abbrev_ca_given 000274 automatic bit(1) dcl 83 set ref 204* 324* 328* 406 408* 411 abbrev_control 40 000276 automatic structure level 2 dcl 85 abort 5 000370 automatic bit(1) level 3 packed packed unaligned dcl 92 set ref 218* abort_on_errors 4 000344 automatic bit(1) level 3 packed packed unaligned dcl 87 set ref 228* acknowledge 5(03) 000370 automatic bit(1) level 3 packed packed unaligned dcl 92 set ref 221* 268* 269* add_comments 000410 automatic bit(1) dcl 100 set ref 188* 263* 265* 379 addr builtin function dcl 152 ref 252 252 428 428 428 428 448 478 478 478 478 482 482 483 483 511 511 516 address_list based structure level 1 dcl 5-6 address_list_ptr 12 000352 automatic pointer level 3 dcl 89 set ref 252* 252* 371* 513 513* area_ptr 2 000352 automatic pointer level 3 dcl 89 set ref 210* argument based char packed unaligned dcl 57 set ref 263 263 263 265 265 268 268 269 269 271 271 272 272 274 274 275 275 276 276 279 279 280 280 283 283 284 284 286 286 287 287 289 289 290* 298 298 300 300 307 307 308 308 309 309 311* 312* 320 321 324 324 326 326 330 330 337 337 343 346 346 349 349 355 355 357 357 361 361 363* 365* 535* argument_idx 000104 automatic fixed bin(17,0) dcl 60 set ref 241* 243* 245* 250 252* 258 261* 290 293* 293 367* 367 535 538* 538 539* 555 argument_lth 000102 automatic fixed bin(21,0) dcl 59 set ref 235* 237* 261* 263 263 263 265 265 268 268 269 269 271 271 272 272 274 274 275 275 276 276 279 279 280 280 283 283 284 284 286 286 287 287 289 289 290 290 298 298 300 300 304 307 307 308 308 309 309 311 311 312 312 320 321 324 324 326 326 330 330 334 337 337 339 343 346 346 349 349 352 355 355 357 357 361 361 363 363 365 365 535 535 539* 571* 573* argument_ptr 000100 automatic pointer dcl 58 set ref 235* 237* 261* 263 263 263 265 265 268 268 269 269 271 271 272 272 274 274 275 275 276 276 279 279 280 280 283 283 284 284 286 286 287 287 289 289 290 298 298 300 300 303 307 307 308 308 309 309 311 312 320 321 324 324 326 326 330 330 333 337 337 343 346 346 349 349 351 355 355 357 357 361 361 363 365 535 539* 571* 573* auto_write 45 000276 automatic bit(1) level 3 packed packed unaligned dcl 85 set ref 207* 320* 321* brief 103(01) based bit(1) level 4 packed packed unaligned dcl 1-6 ref 186 brief_sw 000413 automatic bit(1) dcl 100 set ref 186* 271* 272* 435 482* cleanup 000416 stack reference condition dcl 150 ref 178 clear_original_message_chain 000376 automatic bit(1) dcl 94 set ref 176* 426* 431* 505 508* code 000414 automatic fixed bin(35,0) dcl 102 set ref 169* 170 170* 237* 240 252* 255 255* 311* 312 387* 388 388* 389* 391 391* 399* 400 400* 401* 403 403* 428* 435 435 440* 473* 474 474* 478* 479 479 479 479* 485 485* 573* 575 575* 594* 595 595* 597* 598* comment_buffer based char packed unaligned dcl 66 set ref 428 428 428 428 comment_buffer_ptr 000114 automatic pointer dcl 68 set ref 174* 383* 428 428 428 428 448* 478 516 516 516* comment_text based char packed unaligned dcl 67 set ref 478* comment_text_lth 000116 automatic fixed bin(21,0) dcl 69 set ref 428* 449* 478 478 cu_$grow_stack_frame 000030 constant entry external dcl 114 ref 169 current_message 77 based fixed bin(17,0) level 2 dcl 1-6 set ref 425 432* 470* 506* currentsize builtin function dcl 152 ref 169 169 cv_dec_check_ 000032 constant entry external dcl 115 ref 311 default_profile_ptr 40 000276 automatic pointer level 3 dcl 85 set ref 203* 401* 413* 415 415* 417 delete_sw 000412 automatic bit(1) dcl 100 set ref 185* 286* 287* 493 deliver_options based structure level 1 dcl 7-6 delivery_mode 2 000370 automatic fixed bin(17,0) level 2 dcl 92 set ref 215* divide builtin function dcl 152 ref 394 emf_et_$forwarding_aborted 000012 external static fixed bin(35,0) dcl 109 ref 435 enable_abbrev 44 000276 automatic bit(1) level 3 dcl 85 set ref 324* 327* 406* 413* enable_filling 15 000276 automatic bit(2) level 3 dcl 85 set ref 199* 307* 308* enable_prompt 37 000276 automatic bit(2) level 3 dcl 85 set ref 201* 339* 342* 346* enter_request_loop 13 000276 automatic bit(2) level 3 dcl 85 set ref 196* 355* 357* error_table_$bad_arg 000014 external static fixed bin(35,0) dcl 109 set ref 365* error_table_$bad_conversion 000016 external static fixed bin(35,0) dcl 109 set ref 312* error_table_$badopt 000020 external static fixed bin(35,0) dcl 109 set ref 363* error_table_$noarg 000022 external static fixed bin(35,0) dcl 109 set ref 290* 535* expand_pathname_ 000034 constant entry external dcl 116 ref 387 expand_pathname_$add_suffix 000036 constant entry external dcl 117 ref 399 expanded_recipients_result_list_ptr 4 000352 automatic pointer level 3 dcl 89 set ref 174* fill_control 14 000276 automatic structure level 2 dcl 85 fill_width 14 000276 automatic fixed bin(17,0) level 3 dcl 85 set ref 198* 311* 315 first_message_idx 000400 automatic fixed bin(17,0) dcl 97 set ref 456* 461* 466 flags 4 000344 automatic structure level 2 in structure "local_pcao" dcl 87 in procedure "rdm_forward_request_" flags 103 based structure level 3 in structure "rdm_invocation" dcl 1-6 in procedure "rdm_forward_request_" flags 5 000370 automatic structure level 2 in structure "local_do" dcl 92 in procedure "rdm_forward_request_" flags 45 000276 automatic structure level 2 in structure "local_rfso" dcl 85 in procedure "rdm_forward_request_" forwarding 12 000352 automatic structure level 2 dcl 89 set ref 174* get_system_free_area_ 000040 constant entry external dcl 118 ref 210 global_options 103 based structure level 2 dcl 1-6 hbound builtin function dcl 152 ref 550 hcs_$fs_get_path_name 000042 constant entry external dcl 119 ref 594 header based structure level 2 in structure "recipients_info" dcl 7-49 in procedure "rdm_forward_request_" header 000352 automatic structure level 2 in structure "local_ri" dcl 89 in procedure "rdm_forward_request_" idx 000452 automatic fixed bin(17,0) dcl 568 set ref 570* 571* index builtin function dcl 152 ref 263 initial_requests_lth 12 000276 automatic fixed bin(21,0) level 3 dcl 85 set ref 195* 352* initial_requests_ptr 10 000276 automatic pointer level 3 dcl 85 set ref 194* 351* initiate_file_ 000044 constant entry external dcl 120 ref 389 401 597 input_file 4 000276 automatic structure level 2 dcl 85 input_file_bitcount 000204 automatic fixed bin(24,0) dcl 75 set ref 389* 394 input_file_dirname 000117 automatic char(168) packed unaligned dcl 72 set ref 387* 389* 391* 391* input_file_ename 000171 automatic char(32) packed unaligned dcl 73 set ref 387* 389* 391* 391* input_file_lth 6 000276 automatic fixed bin(21,0) level 3 dcl 85 set ref 394* input_file_ptr 4 000276 automatic pointer level 3 dcl 85 set ref 174* 389* 519 519* input_filename based char packed unaligned dcl 71 set ref 387* 388* input_filename_lth 000205 automatic fixed bin(21,0) dcl 76 set ref 304* 387 387 388 388 input_filename_ptr 000202 automatic pointer dcl 74 set ref 303* 387 388 input_type 2 000276 automatic char(4) level 2 dcl 85 set ref 192* 298* 302* 385 last_message_idx 000401 automatic fixed bin(17,0) dcl 97 set ref 457* 462* 466 length builtin function dcl 152 ref 428 428 lists 12 based structure array level 2 dcl 7-49 local_do 000370 automatic structure level 1 dcl 92 set ref 478 478 local_pcao 000344 automatic structure level 1 dcl 87 set ref 252 252 local_rfso 000276 automatic structure level 1 dcl 85 set ref 428 428 local_ri 000352 automatic structure level 1 dcl 89 set ref 478 478 482 482 483 483 511 511 logbox_creation_mode 2 000344 automatic fixed bin(17,0) level 2 dcl 87 set ref 226* mail_system_$free_address_list 000046 constant entry external dcl 121 ref 513 mail_system_$redistribute_message 000050 constant entry external dcl 122 ref 478 mailbox_info 6 based structure level 2 dcl 1-6 mailbox_name 24 based varying char(168) level 3 dcl 1-6 set ref 474* marked 20 based pointer level 4 dcl 1-6 ref 456 462 467 marked_chain based structure level 1 dcl 3-30 mbz 5(05) 000370 automatic bit(31) level 3 in structure "local_do" packed packed unaligned dcl 92 in procedure "rdm_forward_request_" set ref 223* mbz 4(02) 000344 automatic bit(34) level 3 in structure "local_pcao" packed packed unaligned dcl 87 in procedure "rdm_forward_request_" set ref 230* message_chain based structure level 1 dcl 3-7 message_chains 12 based structure level 3 dcl 1-6 message_idx 000403 automatic fixed bin(17,0) dcl 97 set ref 466* 467* message_idx_increment 000402 automatic fixed bin(17,0) dcl 97 set ref 458* 463* 466 message_number 000404 automatic fixed bin(17,0) dcl 97 set ref 467* 470* 473* 474* 479* 485* 487* message_ptr 000406 automatic pointer dcl 98 set ref 473* 478* messages 1 based fixed bin(17,0) array level 2 dcl 3-30 ref 467 mlsys_et_$message_not_sent 000024 external static fixed bin(35,0) dcl 109 ref 479 mlsys_et_$message_partially_sent 000026 external static fixed bin(35,0) dcl 109 ref 479 mlsys_utils_$free_delivery_results 000052 constant entry external dcl 123 ref 483 511 mlsys_utils_$parse_address_list_control_args 000054 constant entry external dcl 124 ref 252 mlsys_utils_$print_delivery_results 000056 constant entry external dcl 126 ref 482 msg_spec_array based fixed bin(17,0) array dcl 62 set ref 169 169 550 555* 571* msg_spec_array_ptr 000106 automatic pointer dcl 63 set ref 169 169 169* 550 555 571 msg_spec_array_size 000110 automatic fixed bin(17,0) dcl 64 set ref 168* 169 169 550 msg_spec_count 000111 automatic fixed bin(17,0) dcl 64 set ref 172* 373 550 554* 554 555 570 msg_type 000112 automatic fixed bin(17,0) dcl 64 set ref 183* 274* 275* 276* 361* 373* 573* n_addresses 6 based fixed bin(17,0) level 2 dcl 5-6 ref 617 n_arguments 000103 automatic fixed bin(17,0) dcl 60 set ref 159* 161 168 250 258 290 535 n_lists 11 000352 automatic fixed bin(17,0) level 3 dcl 89 set ref 211* n_messages based fixed bin(17,0) level 2 dcl 3-30 ref 456 462 new_profile_ptr 000462 automatic pointer dcl 590 set ref 597* 598 null builtin function dcl 152 ref 174 194 203 415 417 513 516 519 614 p_address_list_ptr parameter pointer dcl 612 ref 609 614 617 p_argument_type parameter char packed unaligned dcl 533 set ref 530 535* p_profile_ptr parameter pointer dcl 589 set ref 586 594* 598 pad 45(01) 000276 automatic bit(35) level 3 packed packed unaligned dcl 85 set ref 208* parse_ca_options based structure level 1 dcl 6-8 pathname_ 000060 constant entry external dcl 127 ref 391 391 403 403 profile_dirname 000206 automatic char(168) packed unaligned dcl 79 in procedure "rdm_forward_request_" set ref 399* 401* 403* 403* profile_dirname 000464 automatic char(168) packed unaligned dcl 591 in procedure "add_null_refname" set ref 594* 597* profile_ename 000536 automatic char(32) packed unaligned dcl 592 in procedure "add_null_refname" set ref 594* 597* profile_ename 000260 automatic char(32) packed unaligned dcl 80 in procedure "rdm_forward_request_" set ref 399* 401* 403* 403* profile_pathname based char packed unaligned dcl 78 set ref 399* 400* profile_pathname_given 000273 automatic bit(1) dcl 83 set ref 205* 332* 397 profile_pathname_lth 000272 automatic fixed bin(21,0) dcl 82 set ref 334* 399 399 400 400 profile_pathname_ptr 000270 automatic pointer dcl 81 set ref 333* 399 400 profile_ptr 42 000276 automatic pointer level 3 dcl 85 set ref 203* 413* 417 417 417* prompt_control 16 000276 automatic structure level 2 dcl 85 prompt_string 16 000276 automatic varying char(64) level 3 dcl 85 set ref 343* queue_mailing_lists 5(04) 000370 automatic bit(1) level 3 packed packed unaligned dcl 92 set ref 222* queued_notification_mode 4 000370 automatic fixed bin(17,0) level 2 dcl 92 set ref 217* queueing_mode 3 000370 automatic fixed bin(17,0) level 2 dcl 92 set ref 216* rdm_forward_subsystem_ 000062 constant entry external dcl 128 ref 428 rdm_forward_subsystem_options based structure level 1 dcl 4-7 rdm_invocation based structure level 1 dcl 1-6 rdm_invocation_ptr 000424 automatic pointer dcl 1-53 set ref 157* 166* 186 237* 373* 424* 425 428* 432 433* 456 462 467 470* 470 473* 474 487* 493* 506 507* 573* rdm_mailbox_interface_$delete_messages 000064 constant entry external dcl 129 ref 493 rdm_mailbox_interface_$mark_processed_and_acknowledge 000066 constant entry external dcl 130 ref 487 rdm_mailbox_interface_$read_message 000070 constant entry external dcl 131 ref 473 rdm_mailbox_interface_$set_new_current_msg 000072 constant entry external dcl 132 ref 470 rdm_message_mark_mgr_$clear_marked_messages 000074 constant entry external dcl 133 ref 166 rdm_message_mark_mgr_$clear_original_messages 000076 constant entry external dcl 134 ref 433 507 rdm_message_mark_mgr_$mark_current_message 000100 constant entry external dcl 135 ref 373 rdm_message_mark_mgr_$mark_messages 000102 constant entry external dcl 136 ref 573 rdm_message_mark_mgr_$mark_original_messages 000104 constant entry external dcl 138 ref 424 rdm_message_mark_mgr_$validate_message_specifier 000106 constant entry external dcl 139 ref 237 recipient_notification 5(02) 000370 automatic bit(1) level 3 packed packed unaligned dcl 92 set ref 220* 279* 280* recipients_info based structure level 1 dcl 7-49 request_loop_control 10 000276 automatic structure level 2 dcl 85 reverse_sw 000411 automatic bit(1) dcl 100 set ref 185* 283* 284* 455 savebox_creation_mode 3 000344 automatic fixed bin(17,0) level 2 dcl 87 set ref 227* saved_current_message 000377 automatic fixed bin(17,0) dcl 95 set ref 425* 432 506 send_if_empty 5(01) 000370 automatic bit(1) level 3 packed packed unaligned dcl 92 set ref 219* ssu_$abort_line 000110 constant entry external dcl 141 ref 161 170 255 290 312 315 363 365 388 391 400 403 435 439 440 474 479 485 535 550 575 595 598 ssu_$arg_count 000112 constant entry external dcl 142 ref 159 ssu_$arg_ptr 000114 constant entry external dcl 143 ref 235 261 539 571 ssu_$get_abbrev_info 000116 constant entry external dcl 144 ref 413 ssu_$get_request_name 000120 constant entry external dcl 145 ref 161 161 ssu_$get_temp_segment 000122 constant entry external dcl 146 ref 383 ssu_$release_temp_segment 000124 constant entry external dcl 147 ref 516 sys_info$max_seg_size 000010 external static fixed bin(19,0) dcl 106 ref 428 428 428 428 terminate_file_ 000126 constant entry external dcl 148 ref 519 validate_addresses 4(01) 000344 automatic bit(1) level 3 packed packed unaligned dcl 87 set ref 229* version 000352 automatic char(8) level 3 in structure "local_ri" packed packed unaligned dcl 89 in procedure "rdm_forward_request_" set ref 212* version 000344 automatic char(8) level 2 in structure "local_pcao" packed packed unaligned dcl 87 in procedure "rdm_forward_request_" set ref 225* version 000276 automatic char(8) level 2 in structure "local_rfso" dcl 85 in procedure "rdm_forward_request_" set ref 190* version 000370 automatic char(8) level 2 in structure "local_do" packed packed unaligned dcl 92 in procedure "rdm_forward_request_" set ref 214* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ALWAYS_NOTIFY internal static fixed bin(17,0) initial dcl 7-42 ALWAYS_QUEUE internal static fixed bin(17,0) initial dcl 7-33 A_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 DEFAULT_INCLUDE_SELF internal static bit(2) initial dcl 1-60 DIR_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 8-33 DONT_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 6-28 EXPRESS_DELIVERY internal static fixed bin(17,0) initial dcl 7-25 E_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 INCLUDE_SELF internal static bit(2) initial dcl 1-60 INTERACTIVE_DELIVERY internal static fixed bin(17,0) initial dcl 7-25 M_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 NEVER_NOTIFY internal static fixed bin(17,0) initial dcl 7-42 NEVER_QUEUE internal static fixed bin(17,0) initial dcl 7-33 NO_INCLUDE_SELF internal static bit(2) initial dcl 1-60 N_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 QUEUE_FOREIGN_WHEN_NEEDED internal static fixed bin(17,0) initial dcl 7-33 QUEUE_WHEN_NEEDED internal static fixed bin(17,0) initial dcl 7-33 RDM_INVOCATION internal static char(8) initial packed unaligned dcl 1-51 REW_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 RE_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 RW_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 SA_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 8-30 SILENTLY_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 6-28 SMA_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 SM_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 S_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 TERM_FILE_BC internal static bit(2) initial packed unaligned dcl 9-12 TERM_FILE_DELETE internal static bit(5) initial packed unaligned dcl 9-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial packed unaligned dcl 9-16 TERM_FILE_TRUNC internal static bit(1) initial packed unaligned dcl 9-11 TERM_FILE_TRUNC_BC internal static bit(2) initial packed unaligned dcl 9-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial packed unaligned dcl 9-15 W_ACCESS internal static bit(3) initial packed unaligned dcl 8-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 8-36 address_list_n_addresses automatic fixed bin(17,0) dcl 5-16 address_list_ptr automatic pointer dcl 5-14 all_chain based structure level 1 dcl 3-23 deleted_chain based structure level 1 dcl 3-25 deliver_options_ptr automatic pointer dcl 7-21 expanded_recipients_result_list based structure level 1 dcl 7-93 expanded_recipients_result_list_n_entries automatic fixed bin(17,0) dcl 7-66 expanded_recipients_result_list_ptr automatic pointer dcl 7-64 marked_as_original_chain based structure level 1 dcl 3-37 message_chain_ptr automatic pointer dcl 3-11 message_list based structure level 1 dcl 2-13 message_list_n_messages automatic fixed bin(17,0) dcl 2-25 parse_ca_options_ptr automatic pointer dcl 6-23 rdm_area based area(1024) dcl 1-55 rdm_forward_subsystem_options_ptr automatic pointer dcl 4-31 recipients_info_n_lists automatic fixed bin(17,0) dcl 7-66 recipients_info_ptr automatic pointer dcl 7-64 recipients_result_list based structure level 1 dcl 7-72 recipients_result_list_n_addresses automatic fixed bin(17,0) dcl 7-66 recipients_result_list_ptr automatic pointer dcl 7-64 terminate_file_switches based structure level 1 packed packed unaligned dcl 9-4 undeleted_chain based structure level 1 dcl 3-24 NAMES DECLARED BY EXPLICIT CONTEXT. NO_FORWARDING_ADDRESSES 000543 constant label dcl 161 ref 371 add_null_refname 004241 constant entry internal dcl 586 ref 415 417 cleanup_after_forward_request 003627 constant entry internal dcl 502 ref 178 496 forward_request 000517 constant entry external dcl 154 get_next_argument 003767 constant entry internal dcl 530 ref 301 310 331 338 350 is_empty_list 004415 constant entry internal dcl 609 ref 371 process_argument_as_spec 004070 constant entry internal dcl 547 ref 242 294 process_msg_specs 004130 constant entry internal dcl 565 ref 376 rdm_forward_request_ 000507 constant entry external dcl 48 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5306 5436 4473 5316 Length 6132 4473 130 460 612 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rdm_forward_request_ 642 external procedure is an external procedure. on unit on line 178 64 on unit cleanup_after_forward_request 96 internal procedure is called by several nonquick procedures. get_next_argument internal procedure shares stack frame of external procedure rdm_forward_request_. process_argument_as_spec internal procedure shares stack frame of external procedure rdm_forward_request_. process_msg_specs internal procedure shares stack frame of external procedure rdm_forward_request_. add_null_refname internal procedure shares stack frame of external procedure rdm_forward_request_. is_empty_list internal procedure shares stack frame of external procedure rdm_forward_request_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME rdm_forward_request_ 000100 argument_ptr rdm_forward_request_ 000102 argument_lth rdm_forward_request_ 000103 n_arguments rdm_forward_request_ 000104 argument_idx rdm_forward_request_ 000106 msg_spec_array_ptr rdm_forward_request_ 000110 msg_spec_array_size rdm_forward_request_ 000111 msg_spec_count rdm_forward_request_ 000112 msg_type rdm_forward_request_ 000114 comment_buffer_ptr rdm_forward_request_ 000116 comment_text_lth rdm_forward_request_ 000117 input_file_dirname rdm_forward_request_ 000171 input_file_ename rdm_forward_request_ 000202 input_filename_ptr rdm_forward_request_ 000204 input_file_bitcount rdm_forward_request_ 000205 input_filename_lth rdm_forward_request_ 000206 profile_dirname rdm_forward_request_ 000260 profile_ename rdm_forward_request_ 000270 profile_pathname_ptr rdm_forward_request_ 000272 profile_pathname_lth rdm_forward_request_ 000273 profile_pathname_given rdm_forward_request_ 000274 abbrev_ca_given rdm_forward_request_ 000276 local_rfso rdm_forward_request_ 000344 local_pcao rdm_forward_request_ 000352 local_ri rdm_forward_request_ 000370 local_do rdm_forward_request_ 000376 clear_original_message_chain rdm_forward_request_ 000377 saved_current_message rdm_forward_request_ 000400 first_message_idx rdm_forward_request_ 000401 last_message_idx rdm_forward_request_ 000402 message_idx_increment rdm_forward_request_ 000403 message_idx rdm_forward_request_ 000404 message_number rdm_forward_request_ 000406 message_ptr rdm_forward_request_ 000410 add_comments rdm_forward_request_ 000411 reverse_sw rdm_forward_request_ 000412 delete_sw rdm_forward_request_ 000413 brief_sw rdm_forward_request_ 000414 code rdm_forward_request_ 000424 rdm_invocation_ptr rdm_forward_request_ 000452 idx process_msg_specs 000462 new_profile_ptr add_null_refname 000464 profile_dirname add_null_refname 000536 profile_ename add_null_refname THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$grow_stack_frame cv_dec_check_ expand_pathname_ expand_pathname_$add_suffix get_system_free_area_ hcs_$fs_get_path_name initiate_file_ mail_system_$free_address_list mail_system_$redistribute_message mlsys_utils_$free_delivery_results mlsys_utils_$parse_address_list_control_args mlsys_utils_$print_delivery_results pathname_ rdm_forward_subsystem_ rdm_mailbox_interface_$delete_messages rdm_mailbox_interface_$mark_processed_and_acknowledge rdm_mailbox_interface_$read_message rdm_mailbox_interface_$set_new_current_msg rdm_message_mark_mgr_$clear_marked_messages rdm_message_mark_mgr_$clear_original_messages rdm_message_mark_mgr_$mark_current_message rdm_message_mark_mgr_$mark_messages rdm_message_mark_mgr_$mark_original_messages rdm_message_mark_mgr_$validate_message_specifier ssu_$abort_line ssu_$arg_count ssu_$arg_ptr ssu_$get_abbrev_info ssu_$get_request_name ssu_$get_temp_segment ssu_$release_temp_segment terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. emf_et_$forwarding_aborted error_table_$bad_arg error_table_$bad_conversion error_table_$badopt error_table_$noarg mlsys_et_$message_not_sent mlsys_et_$message_partially_sent sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 48 000503 51 000514 154 000515 157 000524 159 000530 161 000541 166 000607 168 000616 169 000620 170 000634 172 000663 174 000664 176 000672 178 000673 183 000715 185 000717 186 000721 188 000726 190 000727 192 000731 194 000733 195 000735 196 000736 198 000737 199 000741 201 000742 203 000743 204 000746 205 000747 207 000750 208 000752 210 000754 211 000763 212 000765 214 000767 215 000771 216 000773 217 000775 218 000777 219 001001 220 001003 221 001005 222 001007 223 001011 225 001013 226 001015 227 001017 228 001021 229 001023 230 001025 235 001027 237 001047 240 001103 241 001105 242 001107 243 001110 244 001112 245 001113 250 001115 252 001121 255 001146 258 001175 261 001200 263 001216 265 001245 268 001257 269 001272 271 001305 272 001320 274 001332 275 001345 276 001360 279 001373 280 001406 283 001421 284 001434 286 001446 287 001461 289 001473 290 001503 293 001542 294 001543 295 001544 298 001545 300 001560 301 001570 302 001600 303 001602 304 001604 305 001606 307 001607 308 001622 309 001635 310 001645 311 001652 312 001677 315 001735 317 001766 320 001767 321 001776 324 002005 326 002021 327 002031 328 002032 329 002034 330 002035 331 002045 332 002055 333 002057 334 002061 335 002063 337 002064 338 002074 339 002101 342 002106 343 002110 345 002120 346 002121 349 002134 350 002144 351 002151 352 002153 353 002155 355 002156 357 002171 361 002204 363 002217 365 002253 367 002306 369 002307 371 002310 373 002315 376 002331 379 002332 383 002334 385 002363 387 002366 388 002416 389 002457 391 002514 394 002572 397 002576 399 002600 400 002636 401 002677 403 002735 406 003013 408 003017 411 003021 413 003023 415 003041 417 003047 424 003061 425 003070 426 003073 428 003075 431 003125 432 003126 433 003131 435 003140 439 003167 440 003215 441 003241 448 003242 449 003244 455 003245 456 003247 457 003252 458 003254 459 003256 461 003257 462 003261 463 003264 466 003266 467 003306 470 003312 473 003325 474 003342 478 003402 479 003440 482 003477 483 003520 485 003534 487 003570 488 003601 493 003604 496 003621 498 003625 502 003626 505 003634 506 003637 507 003642 508 003650 511 003652 513 003666 516 003705 519 003732 522 003766 530 003767 535 004000 538 004050 539 004051 541 004067 547 004070 550 004071 554 004122 555 004123 557 004127 565 004130 570 004131 571 004141 573 004160 575 004216 576 004236 578 004240 586 004241 594 004243 595 004275 597 004324 598 004362 601 004414 609 004415 614 004417 617 004426 ----------------------------------------------------------- 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