COMPILATION LISTING OF SEGMENT sdm_header_requests_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 05/22/86 1043.4 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: off */ 11 12 /* The send_mail from, reply_to, to, cc, bcc, subject, message_id, and remove requests */ 13 14 /* Created: January 1979 by G. Palter */ 15 /* Modified: 15 January 1979 by G. Palter to fix bug in adding to From field */ 16 /* Modified: 27 January 1979 by G. Palter to accept -log and -save in the cc and remove requests */ 17 /* Modified: 16 March 1979 by G. Palter to always abort the remove request if any errors are detected */ 18 /* Modified: 25 December 1979 by W. Olin Sibert to update for new emf_info */ 19 /* Modified: September 1983 by G. Palter as part of the conversion to the new mail system interface -- the in_reply_to 20* request was converted into an original request and moved to sdm_original_requests_ and the bcc request was added */ 21 /* Modified: April 1984 by G. Palter to fix the following mail system errors: 22* #0433 -- the send_mail command and all send_mail and read_mail requests which accept multiple addresses as arguments 23* do not properly parse "-log -at HOST" 24* #0438 -- the primitives which allow a user to replace the address list portions of a message 25* (eg: mail_system_$replace_from, mail_system_$replace_user_field) should not make the user's copy of the address 26* list read-only. Instead, they should copy the user's list to allow the user to continue to modify the list if 27* desired for later additional use */ 28 29 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen */ 30 31 32 sdm_header_requests_: 33 procedure (P_sci_ptr, P_sdm_invocation_ptr); 34 35 return; /* not an entrypoint */ 36 37 38 /* Parameters */ 39 40 dcl P_sci_ptr pointer parameter; 41 dcl P_sdm_invocation_ptr pointer parameter; 42 43 44 /* Local copies of parameters */ 45 46 dcl sci_ptr pointer; 47 48 49 /* Remaining declarations */ 50 51 dcl active_request bit (1) aligned; 52 53 dcl argument character (argument_lth) unaligned based (argument_ptr); 54 dcl next_argument character (next_argument_lth) unaligned based (next_argument_ptr); 55 dcl (argument_ptr, next_argument_ptr) pointer; 56 dcl (argument_lth, next_argument_lth) fixed binary (21); 57 dcl (n_arguments, argument_idx) fixed binary; 58 59 dcl return_value character (return_value_max_lth) varying based (return_value_ptr); 60 dcl return_value_ptr pointer; 61 dcl return_value_max_lth fixed binary (21); 62 63 dcl new_subject character (new_subject_lth) unaligned based (new_subject_ptr); 64 dcl new_subject_ptr pointer; 65 dcl (new_subject_lth, new_subject_used) fixed binary (21); 66 67 dcl current_address_list_ptr pointer based (current_address_list_ptr_ptr); 68 dcl current_address_list_ptr_ptr pointer; 69 70 dcl 1 local_pcao aligned like parse_ca_options; 71 72 dcl 1 lists aligned, /* lists of addresses to be deleted */ 73 2 recipients pointer, /* ... equivalent to the To, cc, and bcc fields */ 74 2 from pointer, 75 2 reply_to pointer, 76 2 to pointer, 77 2 cc pointer, 78 2 bcc pointer; 79 80 dcl 1 all aligned, /* ON => remove all addresses from the specified field */ 81 2 recipients bit (1) aligned, /* ... equivalent to the To, cc, and bcc fields */ 82 2 from bit (1) aligned, 83 2 reply_to bit (1) aligned, 84 2 to bit (1) aligned, 85 2 cc bit (1) aligned, 86 2 bcc bit (1) aligned; 87 88 dcl remove_subject bit (1) aligned; /* ON => flush the message subject */ 89 dcl remove_in_reply_to bit (1) aligned; /* ON => flush the list of reply references */ 90 91 dcl fieldname character (32) varying; /* name of the address list field being updated */ 92 dcl address_list_field_value pointer; /* -> address list field which is to be updated */ 93 dcl replace_field entry (pointer, pointer, fixed binary (35)) variable; 94 95 dcl abort bit (1) aligned; /* ON => do not add any addresses if some are invalid */ 96 dcl found_invalid_address bit (1) aligned; /* ON => at least one address on the request line is bad */ 97 98 dcl new_addresses_ptr pointer; /* -> list of addresses to add to the field */ 99 dcl savebox_addresses_ptr pointer; /* -> list of saveboxes to add to the bcc field */ 100 101 dcl errors_detected bit (1) aligned; /* ON => abort request line containing this remove request */ 102 103 dcl (new_address_list_field_value, new_to_field_value, new_cc_field_value, new_bcc_field_value, the_address) pointer; 104 dcl (replace_to_field, replace_cc_field, replace_bcc_field, address_deleted) bit (1) aligned; 105 dcl (address_idx, idx) fixed binary; 106 107 dcl code fixed binary (35); 108 109 dcl STACK_EXTENSION fixed binary (18) static options (constant) initial (128); 110 111 dcl iox_$error_output pointer external; 112 dcl iox_$user_output pointer external; 113 114 /* format: off */ 115 dcl (emf_et_$address_not_found, emf_et_$empty_address_list_field, error_table_$bad_arg, error_table_$badopt, 116 error_table_$inconsistent, error_table_$noarg, error_table_$smallarg, error_table_$too_many_args, 117 mlsys_et_$ca_parse_failed, mlsys_et_$no_recipients) 118 fixed binary (35) external; 119 /* format: on */ 120 121 dcl cu_$arg_list_ptr entry () returns (pointer); 122 dcl cu_$cl entry (bit (36) aligned); 123 dcl cu_$generate_call entry (entry, pointer); 124 dcl cu_$grow_stack_frame entry (fixed binary (18), pointer, fixed binary (35)); 125 dcl ioa_ entry () options (variable); 126 dcl ioa_$ioa_switch entry () options (variable); 127 dcl mail_system_$compare_addresses entry (pointer, pointer, fixed binary (35)) returns (bit (1) aligned); 128 dcl mail_system_$copy_address_list entry (pointer, pointer, fixed binary (35)); 129 dcl mail_system_$delete_address entry (pointer, fixed binary, fixed binary (35)); 130 dcl mail_system_$delete_reply_reference entry (pointer, fixed binary, fixed binary (35)); 131 dcl mail_system_$free_address_list entry (pointer, fixed binary (35)); 132 dcl mail_system_$merge_address_lists entry (pointer, pointer, bit (1) aligned, pointer, fixed binary (35)); 133 dcl mail_system_$replace_bcc entry (pointer, pointer, fixed binary (35)); 134 dcl mail_system_$replace_cc entry (pointer, pointer, fixed binary (35)); 135 dcl mail_system_$replace_from entry (pointer, pointer, fixed binary (35)); 136 dcl mail_system_$replace_reply_to entry (pointer, pointer, fixed binary (35)); 137 dcl mail_system_$replace_subject entry (pointer, character (*), fixed binary (35)); 138 dcl mail_system_$replace_to entry (pointer, pointer, fixed binary (35)); 139 dcl mlsys_utils_$parse_address_list_control_args 140 entry (pointer, fixed binary, pointer, character (8), pointer, pointer, fixed binary (35)); 141 dcl mlsys_utils_$print_address_list_field 142 entry (character (*) varying, pointer, fixed binary, pointer, fixed binary (35)); 143 dcl mlsys_utils_$print_message_id_field 144 entry (character (*) varying, bit (72) aligned, fixed binary, pointer, fixed binary (35)); 145 dcl mlsys_utils_$print_text_field 146 entry (character (*) varying, character (*), bit (1) aligned, fixed binary, pointer, fixed binary (35)); 147 dcl mlsys_utils_$summarize_address entry (pointer, bit (1) aligned, character (*) varying, fixed binary (35)); 148 dcl requote_string_ entry (character (*)) returns (character (*)); 149 dcl ssu_$abort_line entry () options (variable); 150 dcl ssu_$arg_count entry (pointer, fixed binary); 151 dcl ssu_$arg_ptr entry (pointer, fixed binary, pointer, fixed binary (21)); 152 dcl ssu_$get_temp_segment entry (pointer, character (*), pointer); 153 dcl ssu_$print_message entry () options (variable); 154 dcl ssu_$release_temp_segment entry (pointer, pointer); 155 dcl ssu_$return_arg entry (pointer, fixed binary, bit (1) aligned, pointer, fixed binary (21)); 156 157 dcl cleanup condition; 158 159 dcl (addr, baseno, index, length, null, stackframeptr, string, unspec) builtin; 160 161 /* The "from", "reply_to", "to", "cc", and "bcc" requests: When given no arguments, these requests print the specified 162* field; when given arguments, these requests add the supplied addresses to the specified field */ 163 164 from_request: 165 entry (P_sci_ptr, P_sdm_invocation_ptr); 166 167 call setup_request ("0"b); 168 address_list_field_value = message.from; 169 fieldname = FROM_FIELDNAME; 170 replace_field = mail_system_$replace_from; 171 go to PROCESS_ADDRESS_LIST_FIELD_REQUEST; 172 173 174 reply_to_request: 175 entry (P_sci_ptr, P_sdm_invocation_ptr); 176 177 call setup_request ("0"b); 178 address_list_field_value = message.reply_to; 179 fieldname = REPLY_TO_FIELDNAME; 180 replace_field = mail_system_$replace_reply_to; 181 go to PROCESS_ADDRESS_LIST_FIELD_REQUEST; 182 183 184 to_request: 185 entry (P_sci_ptr, P_sdm_invocation_ptr); 186 187 call setup_request ("0"b); 188 address_list_field_value = message.to; 189 fieldname = TO_FIELDNAME; 190 replace_field = mail_system_$replace_to; 191 go to PROCESS_ADDRESS_LIST_FIELD_REQUEST; 192 193 194 cc_request: 195 entry (P_sci_ptr, P_sdm_invocation_ptr); 196 197 call setup_request ("0"b); 198 address_list_field_value = message.cc; 199 fieldname = CC_FIELDNAME; 200 replace_field = mail_system_$replace_cc; 201 go to PROCESS_ADDRESS_LIST_FIELD_REQUEST; 202 203 204 bcc_request: 205 entry (P_sci_ptr, P_sdm_invocation_ptr); 206 207 call setup_request ("0"b); 208 address_list_field_value = message.bcc; 209 fieldname = BCC_FIELDNAME; 210 replace_field = mail_system_$replace_bcc; 211 go to PROCESS_ADDRESS_LIST_FIELD_REQUEST; 212 213 214 /* Process the request */ 215 216 PROCESS_ADDRESS_LIST_FIELD_REQUEST: 217 if n_arguments = 0 then do; 218 219 /* No arguments: display the present content of the field */ 220 221 if is_empty_list (address_list_field_value) then 222 /*** Special display format if the list is empty ... */ 223 if fieldname = FROM_FIELDNAME then do; /* ... except for the From field which has a default */ 224 call mlsys_utils_$print_address_list_field (FROM_FIELDNAME, sdm_data_$default_from_field, 0, 225 iox_$user_output, code); 226 if code ^= 0 then 227 call ssu_$abort_line (sci_ptr, code, "Attempting to display the default From field."); 228 end; 229 230 else call ioa_ ("^a: ", fieldname); 231 232 else do; /* there are addresses in it */ 233 call mlsys_utils_$print_address_list_field (fieldname, address_list_field_value, 0, iox_$user_output, 234 code); 235 if code ^= 0 then 236 call ssu_$abort_line (sci_ptr, code, "Attempting to display the ^a field.", fieldname); 237 end; 238 end; 239 240 241 else do; 242 243 /* Arguments supplied: add the given addresses to the field */ 244 245 local_pcao.version = PARSE_CA_OPTIONS_VERSION_1; 246 local_pcao.logbox_creation_mode = CREATE_AND_ANNOUNCE_MAILBOX; 247 local_pcao.savebox_creation_mode = QUERY_TO_CREATE_MAILBOX; 248 local_pcao.abort_on_errors = "0"b; /* in case -no_abort is used */ 249 local_pcao.validate_addresses = "1"b; 250 local_pcao.mbz = ""b; 251 252 abort = "1"b; /* do not add any addresses if some are invalid */ 253 found_invalid_address = "0"b; /* assume everthing's OK */ 254 255 new_addresses_ptr, /* for cleanup handler */ 256 savebox_addresses_ptr = null (); 257 258 on condition (cleanup) call release_address_list_request_data (); 259 260 argument_idx = 1; /* start at the beginning */ 261 262 do while (argument_idx <= n_arguments); 263 264 call mlsys_utils_$parse_address_list_control_args (sci_ptr, argument_idx, addr (local_pcao), 265 ADDRESS_LIST_VERSION_2, new_addresses_ptr, savebox_addresses_ptr, code); 266 267 if (code ^= 0) & (code ^= mlsys_et_$ca_parse_failed) then 268 call ssu_$abort_line (sci_ptr, code, "Parsing control arguments."); 269 270 found_invalid_address = found_invalid_address | (code = mlsys_et_$ca_parse_failed); 271 272 if argument_idx <= n_arguments then do; 273 274 /*** An argument not recognized by the mail system: must be one of ours */ 275 call ssu_$arg_ptr (sci_ptr, argument_idx, argument_ptr, argument_lth); 276 277 if index (argument, "-") = 1 then /* a control argument */ 278 if argument = "-abort" then abort = "1"b; 279 else if argument = "-no_abort" then abort = "0"b; 280 281 else call ssu_$abort_line (sci_ptr, error_table_$badopt, """^a""", argument); 282 283 else call ssu_$abort_line (sci_ptr, error_table_$bad_arg, """^a""", argument); 284 285 argument_idx = argument_idx + 1; /* continue with next argument (if any) */ 286 end; 287 end; 288 289 if is_empty_list (new_addresses_ptr) & is_empty_list (savebox_addresses_ptr) then 290 call ssu_$abort_line (sci_ptr, error_table_$noarg, "New addresses for the ^a field.", fieldname); 291 292 /*** Abort now if there are invalid addresses unless -no_abort was specified */ 293 if abort & found_invalid_address then /* ... all appropriate messages were already printed */ 294 call ssu_$abort_line (sci_ptr, 0); 295 296 /*** Add the new addresses to the field */ 297 if ^is_empty_list (new_addresses_ptr) then do; 298 call mail_system_$merge_address_lists (address_list_field_value, new_addresses_ptr, "0"b, 299 new_addresses_ptr, code); 300 if code ^= 0 then 301 call ssu_$abort_line (sci_ptr, code, "Adding the new addresses to the ^a field.", fieldname); 302 call replace_field (message_ptr, new_addresses_ptr, code); 303 if code ^= 0 then 304 call ssu_$abort_line (sci_ptr, code, "Adding the new addresses to the ^a field.", fieldname); 305 end; 306 307 /*** Add any logbox/savebox addresses to the bcc field */ 308 if ^is_empty_list (savebox_addresses_ptr) then do; 309 call mail_system_$merge_address_lists (message.bcc, savebox_addresses_ptr, "0"b, 310 savebox_addresses_ptr, code); 311 if code ^= 0 then 312 call ssu_$abort_line (sci_ptr, code, "Adding the savebox addresses to the ^a field.", 313 BCC_FIELDNAME); 314 call mail_system_$replace_bcc (message_ptr, savebox_addresses_ptr, code); 315 if code ^= 0 then 316 call ssu_$abort_line (sci_ptr, code, "Adding logbox and/or savebox addresses to the ^a field.", 317 BCC_FIELDNAME); 318 end; 319 320 if sdm_invocation.message_state = PROCESSED_MESSAGE then sdm_invocation.message_state = MODIFIED_MESSAGE; 321 322 /*** Cleanup */ 323 call release_address_list_request_data (); 324 end; 325 326 return; 327 328 329 330 /* Frees any address lists or addresses used by these requests which have not already been released */ 331 332 release_address_list_request_data: 333 procedure (); 334 335 if savebox_addresses_ptr ^= null () then call mail_system_$free_address_list (savebox_addresses_ptr, (0)); 336 337 if new_addresses_ptr ^= null () then call mail_system_$free_address_list (new_addresses_ptr, (0)); 338 339 return; 340 341 end release_address_list_request_data; 342 343 /* The "subject" request: When given no arguments, this request displays the current subject; when given arguments, this 344* request replaces the subject. As an active request, it returns the current subject */ 345 346 subject_request: 347 entry (P_sci_ptr, P_sdm_invocation_ptr); 348 349 call setup_request ("1"b); 350 351 352 if active_request then do; 353 354 /* Active request: return the current subject */ 355 356 if n_arguments = 0 then 357 if message.subject.text_lth = 0 then 358 /*** No subject: return "" to hold our place on the request line */ 359 return_value = """"""; 360 361 else return_value = requote_string_ (message_subject); 362 363 else call ssu_$abort_line (sci_ptr, error_table_$too_many_args, 364 "No arguments are permitted when used as an active request."); 365 end; 366 367 368 else if n_arguments = 0 then do; 369 370 /* Command request with no arguments: print the subject */ 371 372 if message.subject.text_lth = 0 then 373 call ioa_ ("^a: ", SUBJECT_FIELDNAME); 374 375 else do; 376 call mlsys_utils_$print_text_field (SUBJECT_FIELDNAME, message_subject, "0"b /* single-line field */, 377 0, iox_$user_output, code); 378 if code ^= 0 then call ssu_$abort_line (sci_ptr, code, "Attempting to display the message subject."); 379 end; 380 end; 381 382 383 else do; 384 385 /* Command request with arguments supplied: change the subject */ 386 387 new_subject_ptr = null (); /* for cleanup handler */ 388 on condition (cleanup) 389 begin; 390 if new_subject_ptr ^= null () then 391 if baseno (new_subject_ptr) ^= baseno (stackframeptr ()) then 392 call ssu_$release_temp_segment (sci_ptr, new_subject_ptr); 393 end; 394 395 /*** Compute the length of the new subject */ 396 new_subject_lth = n_arguments - 1; /* ... spaces between the words */ 397 do argument_idx = 1 to n_arguments; 398 call ssu_$arg_ptr (sci_ptr, argument_idx, argument_ptr, argument_lth); 399 new_subject_lth = new_subject_lth + argument_lth; 400 end; 401 402 /*** Use the stack if the new subject is short enough; otherwise, build it in a temporary segment */ 403 if new_subject_lth <= (4 * STACK_EXTENSION) then 404 call cu_$grow_stack_frame (STACK_EXTENSION, new_subject_ptr, (0)); 405 else call ssu_$get_temp_segment (sci_ptr, "subject-text", new_subject_ptr); 406 407 /*** Build the new subject */ 408 new_subject_used = 0; 409 do argument_idx = 1 to n_arguments; 410 call ssu_$arg_ptr (sci_ptr, argument_idx, argument_ptr, argument_lth); 411 begin; 412 dcl inserted_text character (argument_lth) unaligned defined (new_subject) position (new_subject_used + 1); 413 inserted_text = argument; 414 end; 415 new_subject_used = new_subject_used + argument_lth; 416 if argument_idx < n_arguments then do; 417 begin; 418 dcl inserted_space character (1) unaligned defined (new_subject) position (new_subject_used + 1); 419 inserted_space = " "; 420 end; 421 new_subject_used = new_subject_used + 1; 422 end; 423 end; 424 425 /*** Replace the subject in the message */ 426 call mail_system_$replace_subject (message_ptr, new_subject, code); 427 if code ^= 0 then call ssu_$abort_line (sci_ptr, code, "Replacing the message subject."); 428 if sdm_invocation.message_state = PROCESSED_MESSAGE then sdm_invocation.message_state = MODIFIED_MESSAGE; 429 430 /*** Cleanup */ 431 if new_subject_ptr ^= null () then 432 if baseno (new_subject_ptr) ^= baseno (stackframeptr ()) then 433 call ssu_$release_temp_segment (sci_ptr, new_subject_ptr); 434 end; 435 436 return; 437 438 /* The "message_id" requests: prints the unique identifier associated with the message. This request has knowledge of the 439* internal format of message identifiers used by the mail system and mail fail if said format changes */ 440 441 message_id_request: 442 entry (P_sci_ptr, P_sdm_invocation_ptr); 443 444 call setup_request ("0"b); 445 446 if n_arguments > 0 then 447 call ssu_$abort_line (sci_ptr, error_table_$too_many_args, "No arguments are permitted."); 448 449 call mlsys_utils_$print_message_id_field (MESSAGE_ID_FIELDNAME, unspec (sdm_invocation.date_time_body_modified), 450 0, iox_$user_output, code); 451 if code ^= 0 then 452 call ssu_$abort_line (sci_ptr, code, "Attempting to print the ^a field.", MESSAGE_ID_FIELDNAME); 453 454 return; 455 456 /* The "remove" request: Deletes the specified addresses from the approriate header fields; any addresses given before 457* the use of a field selection control argument (-from, etc.) will be deleted from all of the recipient fields (To, cc, 458* bcc). Control arguments to delete the message subject and list of reply references are also accepted */ 459 460 remove_request: 461 entry (P_sci_ptr, P_sdm_invocation_ptr); 462 463 call setup_request ("0"b); 464 465 if n_arguments = 0 then call ssu_$abort_line (sci_ptr, 0, "Usage: remove {addresses} {-control_args}"); 466 467 468 /* Argument processing */ 469 470 local_pcao.version = PARSE_CA_OPTIONS_VERSION_1; 471 local_pcao.logbox_creation_mode, local_pcao.savebox_creation_mode = DONT_CREATE_MAILBOX; 472 local_pcao.abort_on_errors = "1"b; /* stop immediately on syntax errors */ 473 local_pcao.validate_addresses = "0"b; /* have to be able to delete non-existant addresses */ 474 local_pcao.mbz = ""b; 475 476 current_address_list_ptr_ptr = addr (lists.recipients); 477 /* start by deleting recipients */ 478 479 lists = null (); /* no addresses to be deleted yet */ 480 481 string (all) = ""b; /* haven't yet been asked to flush all addresses in a field */ 482 remove_subject, remove_in_reply_to = "0"b; 483 484 new_address_list_field_value, /* for cleanup handler */ 485 new_to_field_value, new_cc_field_value, new_bcc_field_value = null (); 486 487 on condition (cleanup) call release_remove_request_data (); 488 489 argument_idx = 1; /* start at the beginning */ 490 491 do while (argument_idx <= n_arguments); 492 493 call mlsys_utils_$parse_address_list_control_args (sci_ptr, argument_idx, addr (local_pcao), 494 ADDRESS_LIST_VERSION_2, current_address_list_ptr, lists.bcc, code); 495 496 if (code ^= 0) & (code ^= mlsys_et_$ca_parse_failed) then 497 call ssu_$abort_line (sci_ptr, code, "Parsing control arguments."); 498 499 if argument_idx <= n_arguments then do; 500 501 /*** An argument not recognized by the mail system: must be one of ours */ 502 call ssu_$arg_ptr (sci_ptr, argument_idx, argument_ptr, argument_lth); 503 504 if index (argument, "-") = 1 then /* a control argument */ 505 if (argument = "-all") | (argument = "-a") then 506 if current_address_list_ptr_ptr = addr (lists.recipients) then 507 all.recipients = "1"b; 508 else call ssu_$abort_line (sci_ptr, 0, 509 """-all"" must appear immediately after ""-from"", etc."); 510 511 else if (argument = "-subject") | (argument = "-sj") then remove_subject = "1"b; 512 513 else if (argument = "-in_reply_to") | (argument = "-irt") then remove_in_reply_to = "1"b; 514 515 /*** Following control argument is no longer valid: delete in MR11.0 */ 516 else if (argument = "-message_id") | (argument = "-mid") then ; 517 518 else if argument = "-from" then do; 519 if argument_idx = n_arguments then 520 call ssu_$abort_line (sci_ptr, error_table_$noarg, 521 "Addresses or ""-all"" after ""-from""."); 522 call ssu_$arg_ptr (sci_ptr, (argument_idx + 1), next_argument_ptr, next_argument_lth); 523 if (next_argument = "-all") | (next_argument = "-a") then do; 524 all.from = "1"b; /* ... delete the entire field's content */ 525 argument_idx = argument_idx + 1; 526 end; 527 else current_address_list_ptr_ptr = addr (lists.from); 528 end; 529 530 else if (argument = "-reply_to") | (argument = "-rpt") then do; 531 if argument_idx = n_arguments then 532 call ssu_$abort_line (sci_ptr, error_table_$noarg, 533 "Addresses or ""-all"" after ""-reply_to""."); 534 call ssu_$arg_ptr (sci_ptr, (argument_idx + 1), next_argument_ptr, next_argument_lth); 535 if (next_argument = "-all") | (next_argument = "-a") then do; 536 all.reply_to = "1"b; /* ... delete the entire field's content */ 537 argument_idx = argument_idx + 1; 538 end; 539 else current_address_list_ptr_ptr = addr (lists.reply_to); 540 end; 541 542 else if argument = "-to" then do; 543 if argument_idx = n_arguments then 544 call ssu_$abort_line (sci_ptr, error_table_$noarg, 545 "Addresses or ""-all"" after ""-to""."); 546 call ssu_$arg_ptr (sci_ptr, (argument_idx + 1), next_argument_ptr, next_argument_lth); 547 if (next_argument = "-all") | (next_argument = "-a") then do; 548 all.to = "1"b; /* ... delete the entire field's content */ 549 argument_idx = argument_idx + 1; 550 end; 551 else current_address_list_ptr_ptr = addr (lists.to); 552 end; 553 554 else if argument = "-cc" then do; 555 if argument_idx = n_arguments then 556 call ssu_$abort_line (sci_ptr, error_table_$noarg, 557 "Addresses or ""-all"" after ""-cc""."); 558 call ssu_$arg_ptr (sci_ptr, (argument_idx + 1), next_argument_ptr, next_argument_lth); 559 if (next_argument = "-all") | (next_argument = "-a") then do; 560 all.cc = "1"b; /* ... delete the entire field's content */ 561 argument_idx = argument_idx + 1; 562 end; 563 else current_address_list_ptr_ptr = addr (lists.cc); 564 end; 565 566 else if argument = "-bcc" then do; 567 if argument_idx = n_arguments then 568 call ssu_$abort_line (sci_ptr, error_table_$noarg, 569 "Addresses or ""-all"" after ""-bcc""."); 570 call ssu_$arg_ptr (sci_ptr, (argument_idx + 1), next_argument_ptr, next_argument_lth); 571 if (next_argument = "-all") | (next_argument = "-a") then do; 572 all.bcc = "1"b; /* ... delete the entire field's content */ 573 argument_idx = argument_idx + 1; 574 end; 575 else current_address_list_ptr_ptr = addr (lists.bcc); 576 end; 577 578 else call ssu_$abort_line (sci_ptr, error_table_$badopt, """^a""", argument); 579 580 else call ssu_$abort_line (sci_ptr, error_table_$bad_arg, """^a""", argument); 581 582 argument_idx = argument_idx + 1; /* continue with next argument (if any) */ 583 end; 584 end; 585 586 if all.recipients & ^is_empty_list (lists.recipients) then 587 call ssu_$abort_line (sci_ptr, error_table_$inconsistent, "Addresses and ""-all""."); 588 589 if all.from & ^is_empty_list (lists.from) then 590 call ssu_$abort_line (sci_ptr, error_table_$inconsistent, "Addresses and ""-all"" after ""-from""."); 591 592 if all.reply_to & ^is_empty_list (lists.reply_to) then 593 call ssu_$abort_line (sci_ptr, error_table_$inconsistent, "Addresses and ""-all"" after ""-reply_to""."); 594 595 if all.to & ^is_empty_list (lists.to) then 596 call ssu_$abort_line (sci_ptr, error_table_$inconsistent, "Addresses and ""-all"" after ""-to""."); 597 598 if all.cc & ^is_empty_list (lists.cc) then 599 call ssu_$abort_line (sci_ptr, error_table_$inconsistent, "Addresses and ""-all"" after ""-cc""."); 600 601 if all.bcc & ^is_empty_list (lists.bcc) then 602 call ssu_$abort_line (sci_ptr, error_table_$inconsistent, "Addresses and ""-all"" after ""-bcc""."); 603 604 605 /* Process the non-address list fields */ 606 607 errors_detected = "0"b; /* remember if anything ever goes wrong */ 608 609 if remove_subject then do; 610 call mail_system_$replace_subject (message_ptr, "", code); 611 if code = 0 then /* ... success */ 612 if sdm_invocation.message_state = PROCESSED_MESSAGE then 613 sdm_invocation.message_state = MODIFIED_MESSAGE; 614 else ; 615 else call report_error (sci_ptr, code, "Deleting the ^a field.", SUBJECT_FIELDNAME); 616 end; 617 618 if remove_in_reply_to then do; /* remove all reply references */ 619 code = 0; /* ... need do until */ 620 do idx = message.n_reply_references to 1 by -1 while (code = 0); 621 call mail_system_$delete_reply_reference (message_ptr, idx, code); 622 if code ^= 0 then 623 call report_error (sci_ptr, code, "Deleting the ^a field.", REPLY_REFERENCES_FIELDNAME); 624 end; 625 sdm_invocation.original_messages_ptr = null (); 626 if sdm_invocation.message_state = PROCESSED_MESSAGE then sdm_invocation.message_state = MODIFIED_MESSAGE; 627 end; 628 629 630 /* Delete the requested recipients from the To, cc, and bcc fields */ 631 632 if all.recipients then do; 633 /*** Delete all recipients */ 634 call mail_system_$replace_to (message_ptr, null (), code); 635 if code = 0 then 636 if sdm_invocation.message_state = PROCESSED_MESSAGE then 637 sdm_invocation.message_state = MODIFIED_MESSAGE; 638 else ; 639 else call report_error (sci_ptr, code, "Deleting the contents of the ^a field.", TO_FIELDNAME); 640 call mail_system_$replace_cc (message_ptr, null (), code); 641 if code = 0 then 642 if sdm_invocation.message_state = PROCESSED_MESSAGE then 643 sdm_invocation.message_state = MODIFIED_MESSAGE; 644 else ; 645 else call report_error (sci_ptr, code, "Deleting the contents of the ^a field.", CC_FIELDNAME); 646 call mail_system_$replace_bcc (message_ptr, null (), code); 647 if code = 0 then 648 if sdm_invocation.message_state = PROCESSED_MESSAGE then 649 sdm_invocation.message_state = MODIFIED_MESSAGE; 650 else ; 651 else call report_error (sci_ptr, code, "Deleting the contents of the ^a field.", BCC_FIELDNAME); 652 end; 653 654 else if ^is_empty_list (lists.recipients) then do; 655 /*** Delete only the specified recipients */ 656 if is_empty_list (message.to) & is_empty_list (message.cc) & is_empty_list (message.bcc) then 657 call report_error (sci_ptr, mlsys_et_$no_recipients); 658 else do; 659 replace_to_field, replace_cc_field, replace_bcc_field = "0"b; 660 call mail_system_$copy_address_list (message.to, new_to_field_value, (0)); 661 call mail_system_$copy_address_list (message.cc, new_cc_field_value, (0)); 662 call mail_system_$copy_address_list (message.bcc, new_bcc_field_value, (0)); 663 do address_idx = 1 to lists.recipients -> address_list.n_addresses; 664 the_address = lists.recipients -> address_list.addresses (address_idx); 665 address_deleted = "0"b; 666 /*** Delete it from the To field ... */ 667 idx = 1; 668 do while (idx <= new_to_field_value -> address_list.n_addresses); 669 if mail_system_$compare_addresses (the_address, 670 new_to_field_value -> address_list.addresses (idx), (0)) then do; 671 replace_to_field, address_deleted = "1"b; 672 call mail_system_$delete_address (new_to_field_value, idx, code); 673 if code ^= 0 then 674 call report_error (sci_ptr, code, 675 "Attempting to delete an address from the ^a field.", TO_FIELDNAME); 676 end; 677 else idx = idx + 1; /* ... no match: proceeed to next candidate */ 678 end; 679 /*** Delete it from the cc field ... */ 680 idx = 1; 681 do while (idx <= new_cc_field_value -> address_list.n_addresses); 682 if mail_system_$compare_addresses (the_address, 683 new_cc_field_value -> address_list.addresses (idx), (0)) then do; 684 replace_cc_field, address_deleted = "1"b; 685 call mail_system_$delete_address (new_cc_field_value, idx, code); 686 if code ^= 0 then 687 call report_error (sci_ptr, code, 688 "Attempting to delete an address from the ^a field.", CC_FIELDNAME); 689 end; 690 else idx = idx + 1; /* ... no match: proceeed to next candidate */ 691 end; 692 /*** Delete it from the bcc field ... */ 693 idx = 1; 694 do while (idx <= new_bcc_field_value -> address_list.n_addresses); 695 if mail_system_$compare_addresses (the_address, 696 new_bcc_field_value -> address_list.addresses (idx), (0)) then do; 697 replace_bcc_field, address_deleted = "1"b; 698 call mail_system_$delete_address (new_bcc_field_value, idx, code); 699 if code ^= 0 then 700 call report_error (sci_ptr, code, 701 "Attempting to delete an address from the ^a field.", BCC_FIELDNAME); 702 end; 703 else idx = idx + 1; /* ... no match: proceeed to next candidate */ 704 end; 705 if ^address_deleted then call report_address_not_deleted (""); 706 end; 707 /*** Update the recipient fields as appropriate ... */ 708 if replace_to_field then do; /* we've changed the To field */ 709 call mail_system_$replace_to (message_ptr, new_to_field_value, code); 710 if code = 0 then 711 if sdm_invocation.message_state = PROCESSED_MESSAGE then 712 sdm_invocation.message_state = MODIFIED_MESSAGE; 713 else ; 714 else call report_error (sci_ptr, code, "Replacing the ^a field.", TO_FIELDNAME); 715 end; 716 if replace_cc_field then do; /* we've changed the cc field */ 717 call mail_system_$replace_cc (message_ptr, new_cc_field_value, code); 718 if code = 0 then 719 if sdm_invocation.message_state = PROCESSED_MESSAGE then 720 sdm_invocation.message_state = MODIFIED_MESSAGE; 721 else ; 722 else call report_error (sci_ptr, code, "Replacing the ^a field.", CC_FIELDNAME); 723 end; 724 if replace_bcc_field then do; /* we've changed the bcc field */ 725 call mail_system_$replace_bcc (message_ptr, new_bcc_field_value, code); 726 if code = 0 then 727 if sdm_invocation.message_state = PROCESSED_MESSAGE then 728 sdm_invocation.message_state = MODIFIED_MESSAGE; 729 else ; 730 else call report_error (sci_ptr, code, "Replacing the ^a field.", BCC_FIELDNAME); 731 end; 732 if new_to_field_value ^= null () then call mail_system_$free_address_list (new_to_field_value, (0)); 733 if new_cc_field_value ^= null () then call mail_system_$free_address_list (new_cc_field_value, (0)); 734 if new_bcc_field_value ^= null () then call mail_system_$free_address_list (new_bcc_field_value, (0)); 735 end; 736 end; 737 738 739 /* Process the individual address lists */ 740 741 call process_remove_for_field (FROM_FIELDNAME, message.from, mail_system_$replace_from, lists.from, all.from); 742 743 call process_remove_for_field (REPLY_TO_FIELDNAME, message.reply_to, mail_system_$replace_reply_to, 744 lists.reply_to, all.reply_to); 745 746 call process_remove_for_field (TO_FIELDNAME, message.to, mail_system_$replace_to, lists.to, all.to); 747 748 call process_remove_for_field (CC_FIELDNAME, message.cc, mail_system_$replace_cc, lists.cc, all.cc); 749 750 call process_remove_for_field (BCC_FIELDNAME, message.bcc, mail_system_$replace_bcc, lists.bcc, all.bcc); 751 752 753 /* Clean up */ 754 755 call release_remove_request_data (); 756 757 if errors_detected then call ssu_$abort_line (sci_ptr, 0); 758 759 return; 760 761 762 763 /* Deletes either the entire contents of the specified address list field or all occurences of the supplied addresses */ 764 765 process_remove_for_field: 766 procedure (p_fieldname, p_field_value, p_replace_field, p_addresses_to_remove, p_remove_all_addresses); 767 768 dcl p_fieldname character (*) varying parameter; 769 dcl p_field_value pointer parameter; 770 dcl p_replace_field entry (pointer, pointer, fixed binary (35)) variable parameter; 771 dcl p_addresses_to_remove pointer parameter; 772 dcl p_remove_all_addresses bit (1) aligned parameter; 773 774 dcl (replace_the_field, address_deleted) bit (1) aligned; 775 dcl (address_idx, idx) fixed binary; 776 777 if p_remove_all_addresses then do; 778 /*** Delete the entire field's content */ 779 call p_replace_field (message_ptr, null (), code); 780 if code = 0 then /* ... we've changed the message */ 781 if sdm_invocation.message_state = PROCESSED_MESSAGE then 782 sdm_invocation.message_state = MODIFIED_MESSAGE; 783 else ; 784 else call report_error (sci_ptr, code, "Deleting the contents of the ^a field.", p_fieldname); 785 end; 786 787 else if ^is_empty_list (p_addresses_to_remove) then do; 788 /*** Delete the specified addresses from the field */ 789 if is_empty_list (p_field_value) then 790 call report_error (sci_ptr, emf_et_$empty_address_list_field, 791 "Can not remove any addresses from the ^a field.", p_fieldname); 792 else do; 793 replace_the_field = "0"b; /* until we've actually changed it */ 794 call mail_system_$copy_address_list (p_field_value, new_address_list_field_value, (0)); 795 do address_idx = 1 to p_addresses_to_remove -> address_list.n_addresses; 796 the_address = p_addresses_to_remove -> address_list.addresses (address_idx); 797 address_deleted = "0"b; 798 idx = 1; 799 do while (idx <= new_address_list_field_value -> address_list.n_addresses); 800 if mail_system_$compare_addresses (the_address, 801 new_address_list_field_value -> address_list.addresses (idx), (0)) then do; 802 address_deleted = "1"b; /* ... don't report that it wasn't found */ 803 call mail_system_$delete_address (new_address_list_field_value, idx, code); 804 if code ^= 0 then 805 call report_error (sci_ptr, code, 806 "Attempting to delete an address from the ^a field.", p_fieldname); 807 end; 808 else idx = idx + 1; /* ... no match: proceeed to next candidate */ 809 end; 810 if address_deleted then 811 replace_the_field = "1"b; 812 else call report_address_not_deleted (p_fieldname); 813 end; 814 if replace_the_field then do; /* we've made some changes */ 815 call p_replace_field (message_ptr, new_address_list_field_value, code); 816 if code = 0 then 817 if sdm_invocation.message_state = PROCESSED_MESSAGE then 818 sdm_invocation.message_state = MODIFIED_MESSAGE; 819 else ; 820 else call report_error (sci_ptr, code, "Replacing the ^a field.", p_fieldname); 821 end; 822 if new_address_list_field_value ^= null () then 823 call mail_system_$free_address_list (new_address_list_field_value, (0)); 824 end; 825 end; 826 827 return; 828 829 end process_remove_for_field; 830 831 832 833 /* Reports that the given address was not found in the specified address list field */ 834 835 report_address_not_deleted: 836 procedure (p_fieldname) options (non_quick); 837 838 dcl p_fieldname character (*) varying parameter; 839 840 dcl address_summary character (address_summary_max_lth) varying based (address_summary_ptr); 841 dcl address_summary_ptr pointer; 842 dcl address_summary_max_lth fixed binary (21); 843 844 call cu_$grow_stack_frame (STACK_EXTENSION, address_summary_ptr, (0)); 845 address_summary_max_lth = 4 * (STACK_EXTENSION - 1); 846 code = error_table_$smallarg; /* need do until ... */ 847 do while (code = error_table_$smallarg); /* ... until the buffer's large enough to hold it */ 848 call mlsys_utils_$summarize_address (the_address, "1"b /* beginning of sentence */, address_summary, code); 849 if code = error_table_$smallarg then do; 850 call cu_$grow_stack_frame (STACK_EXTENSION, (null ()), (0)); 851 address_summary_max_lth = address_summary_max_lth + (4 * STACK_EXTENSION); 852 end; 853 end; 854 855 if length (p_fieldname) = 0 then 856 call report_error (sci_ptr, emf_et_$address_not_found, "^a in the To, cc, or bcc fields.", address_summary) 857 ; 858 else call report_error (sci_ptr, emf_et_$address_not_found, "^a in the ^a field.", address_summary, p_fieldname) 859 ; 860 861 return; 862 863 end report_address_not_deleted; 864 865 866 867 /* Reports an error by calling ssu_$print_message: The global flag indicating that an error was detected is set in order 868* to insure that the request line is aborted after processing of this remove request is completed */ 869 870 report_error: 871 procedure () options (variable); 872 873 call cu_$generate_call (ssu_$print_message, cu_$arg_list_ptr ()); 874 errors_detected = "1"b; 875 876 if sdm_invocation.debug_mode then do; /* simulate the actions of ssu_$abort_line */ 877 call ioa_$ioa_switch (iox_$error_output, "ssu_error_: Debug mode set; calling cu_$cl."); 878 call cu_$cl (""b); 879 end; 880 881 return; 882 883 end report_error; 884 885 886 887 /* Releases the temporary address lists used by the remove request */ 888 889 release_remove_request_data: 890 procedure (); 891 892 if new_bcc_field_value ^= null () then call mail_system_$free_address_list (new_bcc_field_value, (0)); 893 894 if new_cc_field_value ^= null () then call mail_system_$free_address_list (new_cc_field_value, (0)); 895 896 if new_to_field_value ^= null () then call mail_system_$free_address_list (new_to_field_value, (0)); 897 898 if new_address_list_field_value ^= null () then 899 call mail_system_$free_address_list (new_address_list_field_value, (0)); 900 901 if lists.recipients ^= null () then call mail_system_$free_address_list (lists.recipients, (0)); 902 903 if lists.from ^= null () then call mail_system_$free_address_list (lists.from, (0)); 904 905 if lists.reply_to ^= null () then call mail_system_$free_address_list (lists.reply_to, (0)); 906 907 if lists.to ^= null () then call mail_system_$free_address_list (lists.to, (0)); 908 909 if lists.cc ^= null () then call mail_system_$free_address_list (lists.cc, (0)); 910 911 if lists.bcc ^= null () then call mail_system_$free_address_list (lists.bcc, (0)); 912 913 return; 914 915 end release_remove_request_data; 916 917 /* Performs initialization common to all requests */ 918 919 setup_request: 920 procedure (p_allow_active_request); 921 922 dcl p_allow_active_request bit (1) aligned; 923 924 sci_ptr = P_sci_ptr; 925 926 if p_allow_active_request then /* use appropriate mechanism to get argument count, etc. */ 927 call ssu_$return_arg (sci_ptr, n_arguments, active_request, return_value_ptr, return_value_max_lth); 928 else call ssu_$arg_count (sci_ptr, n_arguments); 929 930 sdm_invocation_ptr = P_sdm_invocation_ptr; 931 message_ptr = sdm_invocation.message_ptr; 932 933 return; 934 935 end setup_request; 936 937 938 939 /* Determines if the given address list is empty */ 940 941 is_empty_list: 942 procedure (p_address_list_ptr) returns (bit (1) aligned); 943 944 dcl p_address_list_ptr pointer parameter; 945 946 if p_address_list_ptr = null () then /* if there's no data at all, it's empty */ 947 return ("1"b); 948 949 else return ((p_address_list_ptr -> address_list.n_addresses = 0)); 950 951 end is_empty_list; 952 1 1 /* BEGIN INCLUDE FILE ... sdm_invocation.incl.pl1 */ 1 2 /* Created: August 1983 by G. Palter from portions of emf_info.incl.pl1 */ 1 3 1 4 /* Definition of a single invocation of send_mail */ 1 5 1 6 dcl 1 sdm_invocation aligned based (sdm_invocation_ptr), 1 7 2 type character (8), /* defines this structure as a send_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 message_info, /* information about the message being constructed */ 1 12 3 message_ptr pointer, /* ... -> the actual message */ 1 13 3 message_state fixed binary, /* ... unprocessed/modified/processed: controls quit query */ 1 14 3 date_time_body_modified fixed binary (71), /* ... last date/time the message body was changed: used to 1 15* display Date/Message-ID fields before transmission */ 1 16 1 17 2 fill_width fixed binary, /* default line length for message filling */ 1 18 2 flags, 1 19 3 brief bit (1) unaligned, /* ON => suppress "Mail delivered..." messages */ 1 20 3 acknowledge bit (1) unaligned, /* ON => user wants acknowledgement from recipients */ 1 21 3 notify bit (1) unaligned, /* ON => send each recipient a notification of delivery */ 1 22 3 fill bit (1) unaligned, /* ON => fill message body whenever modified */ 1 23 3 debug_mode bit (1) unaligned, /* ON => debugging features enabled */ 1 24 3 auto_write bit (1) unaligned, 1 25 3 pad bit (30) unaligned, /* ON => qedx request automatically rewrites on quit (sigh) */ 1 26 1 27 2 rdm_invocation_ptr pointer, /* -> description of read_mail invocation whose reply request 1 28* created this send_mail invocation */ 1 29 1 30 2 original_messages_ptr pointer, /* -> current list of original messages from which the 1 31* In-Reply-To field is to be regenerated after use of 1 32* qedx/apply -header */ 1 33 1 34 2 abort_code fixed binary (35); /* indicates whether send_mail exited with unsent message */ 1 35 1 36 dcl SDM_INVOCATION character (8) static options (constant) initial ("sdm_0008"); 1 37 1 38 dcl sdm_invocation_ptr pointer; 1 39 1 40 dcl sdm_area area based (sdm_invocation.area_ptr); 1 41 1 42 1 43 /* Possible message states: indicate whether the message has been modified in some way since it was last successfully 1 44* transmitted, logged, saved, or writen. This state is used by the quit request to control whether it should query the 1 45* user for permission to exit send_mail */ 1 46 1 47 dcl (UNPROCESSED_MESSAGE initial (-1), /* message has never been transmitted/logged/saved/written */ 1 48 1 49 MODIFIED_MESSAGE initial (1), /* message was transmitted/logged/saved/written but has been 1 50* modified since the last such operation */ 1 51 1 52 PROCESSED_MESSAGE initial (0)) /* message was transmitted/logged/saved/written and hasn't 1 53* been modified since that operation: OK to quit without 1 54* having to ask for the user's permission */ 1 55 fixed binary static options (constant); 1 56 1 57 /* END INCLUDE FILE ... sdm_invocation.incl.pl1 */ 953 954 2 1 /* BEGIN INCLUDE FILE ... sdm_data.incl.pl1 */ 2 2 /* Created: 20 December 1978 by G. Palter */ 2 3 /* Modified: 17 September 1982 by G. Palter to add sdm_data_$ec_suffix and sdm_data_$ec_search_list */ 2 4 /* Modified: August 1983 by G. Palter as part of send_mail conversion */ 2 5 2 6 2 7 /* Constant data used by the send_mail subsystem */ 2 8 2 9 dcl sdm_data_$version character (32) varying external; /* current version of the subsystem */ 2 10 2 11 dcl sdm_data_$info_directory character (168) external; /* directory containing self-documenation */ 2 12 2 13 dcl sdm_data_$special_message character (256) varying external; 2 14 /* message to print on each invocation if not null */ 2 15 2 16 dcl sdm_data_$ec_suffix character (32) external; /* exec_com suffix for send_mail */ 2 17 dcl sdm_data_$ec_search_list character (32) external; /* exec_com search list */ 2 18 2 19 dcl 1 sdm_data_$default_options like send_mail_options aligned external; 2 20 /* default options to control send_mail */ 2 21 2 22 2 23 /* Static data used by the send_mail subsystem */ 2 24 2 25 dcl sdm_data_$first_invocation bit (1) aligned external; /* ON => this is the first invocation in this process */ 2 26 2 27 dcl sdm_data_$default_from_field pointer external; /* -> an address list to be used when asked to display the 2 28* From field and it has not been explicitly set by the user: 2 29* this list contains exactly 1 address -- the user's mail 2 30* table address (or default mailbox address if anonymous) */ 2 31 2 32 /* END INCLUDE FILE ... sdm_data.incl.pl1 */ 955 956 3 1 /* BEGIN INCLUDE FILE ... send_mail_options.incl.pl1 */ 3 2 /* Created: 28 December 1978 by G. Palter */ 3 3 /* Modified: 25 April 1980 by G. Palter for version 2 -- abbrev processing */ 3 4 /* Modified: 27 January 1981 by G. Palter for version 3 -- increased prompt string length */ 3 5 /* Modified: 16 February 1982 by G. Palter for version 4 -- default profile in addition to current profile */ 3 6 /* Modified: 17 September 1982 by G. Palter for version 5 -- new definition of -fill, -debug, and making -fill/-rql 3 7* dependent on mode of message input (terminal/file) */ 3 8 /* Modified: August 1983 by G. Palter for version 6 -- elimination of -header and -message_id (always ON), elimination of 3 9* -no_abort as the command line -abort/-no_abort no longer sets the default for the send request control argument, 3 10* addition of -auto_write/-no_auto_write as required by the MCR boards, and addition of options pertaining to 3 11* treatment of the original message(s) text when invoked by a reply request */ 3 12 3 13 /* User settable options of the send_mail subsystem */ 3 14 3 15 dcl 1 send_mail_options aligned based (send_mail_options_ptr), 3 16 2 version character (8) unaligned, 3 17 3 18 2 fill_width fixed binary, /* default width for filling */ 3 19 3 20 2 prompt_control aligned, /* controls how send_mail prompts */ 3 21 3 prompt_string character (64) varying, /* ... user-supplied string */ 3 22 3 flags aligned, 3 23 4 prompt_control bit (2) unaligned, /* ... default prompt/use above string/don't prompt */ 3 24 4 pad bit (34) unaligned, 3 25 3 26 2 default_profile_ptr pointer, /* -> default profile to be used if flags.abbrev is ON */ 3 27 2 profile_ptr pointer, /* -> profile to be used if flags.abbrev is ON */ 3 28 3 29 2 original_text_control aligned, /* controls send_mail's treatment of original message text */ 3 30 3 original_text_indentation fixed binary, /* ... # of columns to indent the text if requested */ 3 31 3 flags, 3 32 4 include_original_text bit (1) unaligned, /* ... ON => text from message(s) being answered is to be 3 33* included in the reply before the actual answer */ 3 34 4 indent_original_text bit (1) unaligned, /* ... ON => the original text is to be indented */ 3 35 4 fill_original_text bit (1) unaligned, /* ... ON => the original text is to be re-filled */ 3 36 4 pad bit (33) unaligned, 3 37 3 38 2 flags aligned, 3 39 3 acknowledge bit (1) unaligned, /* ON => user wants acknowledgement from recipients */ 3 40 3 brief bit (1) unaligned, /* ON => suppress "Mail delivered..." messages */ 3 41 3 notify bit (1) unaligned, /* ON => send each recipient a wakeup */ 3 42 3 abbrev bit (1) unaligned, /* ON => use abbrev processing in this invocation */ 3 43 3 debug bit (1) unaligned, /* ON => enable debugging features */ 3 44 3 auto_write bit (1) unaligned, /* ON => qedx request automatically rewrites on quit (sigh) */ 3 45 3 fill_control bit (2) unaligned, /* default/explicit -fill/explicit -no_fill */ 3 46 3 request_loop_control bit (2) unaligned, /* default/explicit -rql/explicit -nrql */ 3 47 3 pad bit (26) unaligned; 3 48 3 49 dcl send_mail_options_ptr pointer; 3 50 3 51 dcl SEND_MAIL_OPTIONS_VERSION_6 character (8) static options (constant) initial ("sdmopt06"); 3 52 3 53 3 54 /* Prompt control options */ 3 55 3 56 dcl (DEFAULT_PROMPT initial ("00"b), /* use default subsystem prompt */ 3 57 USE_PROMPT_STRING initial ("01"b), /* use prompt string supplied by user (via -prompt STR) */ 3 58 NO_PROMPT initial ("10"b)) /* disable subsystem prompt */ 3 59 bit (2) static options (constant); 3 60 3 61 3 62 /* Fill control options */ 3 63 3 64 dcl (DEFAULT_FILL initial ("00"b), /* fill if terminal input; do not fill if file input */ 3 65 FILL initial ("01"b), /* user specified -fill */ 3 66 NO_FILL initial ("10"b)) /* user specified -no_fill */ 3 67 bit (2) static options (constant); 3 68 3 69 3 70 /* Request loop control options */ 3 71 3 72 dcl (DEFAULT_REQUEST_LOOP initial ("00"b), /* enter loop if file input; do not enter if terminal input */ 3 73 REQUEST_LOOP initial ("01"b), /* user specified -request_loop */ 3 74 NO_REQUEST_LOOP initial ("10"b)) /* user specified -no_request_loop */ 3 75 bit (2) static options (constant); 3 76 3 77 /* END INCLUDE FILE ... send_mail_options.incl.pl1 */ 957 958 4 1 /* BEGIN INCLUDE FILE ... mlsys_message.incl.pl1 */ 4 2 4 3 4 4 /****^ HISTORY COMMENTS: 4 5* 1) change(85-12-19,Herbst), approve(86-03-25,MCR7367), 4 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 4 7* Added seen switch to message. 4 8* END HISTORY COMMENTS */ 4 9 4 10 4 11 /* Created: June 1983 by G. Palter */ 4 12 4 13 /* Definition of a message as used by the Multics Mail System */ 4 14 4 15 dcl 1 message aligned based (message_ptr), 4 16 2 version character (8) unaligned, 4 17 2 reserved bit (144), /* for exclusive use of the mail system */ 4 18 2 n_reply_references fixed binary, /* # of messages for which this is a reply */ 4 19 2 n_user_fields fixed binary, /* # of non-standard header fields in this message */ 4 20 2 n_redistributions fixed binary, /* # of times this message has been forwarded */ 4 21 2 n_body_sections fixed binary, /* # of sections in the body */ 4 22 2 flags, 4 23 3 interactive bit (1) unaligned, /* ON => this is an interactive message */ 4 24 3 can_be_deleted bit (1) unaligned, /* ON => the user can delete this message if desired */ 4 25 3 marked_for_deletion bit (1) unaligned, /* ON => message will be deleted when mailbox is closed */ 4 26 3 must_be_acknowledged bit (1) unaligned, /* ON => an ACK should be generated when message is read */ 4 27 3 seen bit (1) unaligned, /* ON => user has printed message at least once */ 4 28 3 reserved bit (31) unaligned, /* for use by the mail system */ 4 29 2 pad bit (36), 4 30 2 envelope like message_envelope, /* who/when/how the message was mailed & delivered */ 4 31 2 header, 4 32 3 message_id bit (72), /* ID of this message (same value for all copies) */ 4 33 3 access_class bit (72), /* AIM access class of this message */ 4 34 3 date_time_created fixed binary (71), /* date/time this message was composed */ 4 35 3 from pointer, /* -> address list of author(s) of the message */ 4 36 3 reply_to pointer, /* -> address list of recipients for reply (if not authors) */ 4 37 3 to pointer, /* -> address list of primary recipients */ 4 38 3 cc pointer, /* -> address list of secondary recipients */ 4 39 3 bcc pointer, /* -> address list of blind recipients */ 4 40 3 subject like message_text_field, /* subject of the message */ 4 41 3 reply_references pointer, /* -> list of messages for which this message is a reply */ 4 42 3 user_fields_list pointer, /* -> list of user-defined fields in this message */ 4 43 2 redistributions_list pointer, /* -> redistributions list for this message */ 4 44 2 body, 4 45 3 total_lines fixed binary (21), /* total # of lines in the body or -1 if indeterminate */ 4 46 3 pad bit (36), 4 47 3 body_sections (message_n_body_sections refer (message.n_body_sections)) like message_body_section; 4 48 4 49 dcl MESSAGE_VERSION_2 character (8) static options (constant) initial ("mlsmsg02"); 4 50 4 51 dcl message_subject character (message.header.subject.text_lth) unaligned based (message.header.subject.text_ptr); 4 52 4 53 dcl message_ptr pointer; 4 54 4 55 dcl (message_n_body_sections, message_trace_n_relays, message_n_redistributions, message_n_user_fields, 4 56 message_references_list_n_references) 4 57 fixed binary; /* for exclusive use of the mail system */ 4 58 4 59 /* Definition of a message envelope: describes when, by whom, and by what route the message was mailed */ 4 60 4 61 dcl 1 message_envelope aligned based (message_envelope_ptr), 4 62 2 date_time_mailed fixed binary (71), /* date/time this message was entered into the mail system */ 4 63 2 sender pointer, /* -> address of entity that mailed the message */ 4 64 2 trace pointer, /* -> message_trace describing how it got here */ 4 65 2 date_time_delivered fixed binary (71), /* date/time this message was delivered */ 4 66 2 delivered_by pointer, /* -> address of entity that delivered the message */ 4 67 2 acknowledge_to pointer; /* -> address of entity to receive ACK when message is read */ 4 68 4 69 dcl message_envelope_ptr pointer; 4 70 4 71 4 72 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the message envelope */ 4 73 4 74 dcl 1 message_envelope_parameter aligned based (message_envelope_parameter_ptr), 4 75 2 pad pointer, /* forces even word alignment */ 4 76 2 version character (8) unaligned, 4 77 2 envelope like message_envelope; 4 78 4 79 dcl MESSAGE_ENVELOPE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsenv02"); 4 80 4 81 dcl message_envelope_parameter_ptr pointer; 4 82 4 83 4 84 /* Definition of a message trace: describes the route and each relay operation by which a message was passed through the 4 85* networks to reach this recipient */ 4 86 4 87 dcl 1 message_trace aligned based (message_trace_ptr), 4 88 2 version character (8) unaligned, 4 89 2 reserved bit (144), /* ... exclusively for use by the mail system */ 4 90 2 implicit_route pointer, /* -> an address_route which defines the route it took */ 4 91 2 pad bit (36), 4 92 2 n_relays fixed binary, /* # of relay operations required to reach this site */ 4 93 2 relays (message_trace_n_relays refer (message_trace.n_relays)), 4 94 3 date_time_relayed fixed binary (71), /* ... when this relay operation took place */ 4 95 3 sending_host character (256) varying, /* ... the host which relayed the message */ 4 96 3 receiving_host character (256) varying, /* ... the host which received it */ 4 97 3 communications_media character (32) unaligned, /* ... medium over which relay took place (ARPA, Tymnet) */ 4 98 3 communications_protocol character (32) unaligned,/* ... low-level protocol used (TCP, X.25) */ 4 99 3 mail_protocol character (32) unaligned, /* ... mailer protocol used (SMTP, NBS) */ 4 100 3 relay_id bit (72), /* ... unique ID assigned by receiving system or ""b */ 4 101 3 relay_recipient pointer; /* ... -> address of recipient as given by sending system */ 4 102 4 103 dcl MESSAGE_TRACE_VERSION_2 character (8) static options (constant) initial ("mlstrc02"); 4 104 4 105 dcl message_trace_ptr pointer; 4 106 4 107 /* Definition of a message's redistributions list */ 4 108 4 109 dcl 1 message_redistributions_list aligned based (message.redistributions_list), 4 110 2 version character (8) unaligned, 4 111 2 reserved bit (144), /* ... exclusively for use by the mail system */ 4 112 2 pad bit (36), 4 113 2 n_redistributions fixed binary, /* # of redistributions */ 4 114 2 redistributions (message_n_redistributions refer (message_redistributions_list.n_redistributions)) 4 115 like message_redistribution; /* the redistributions: oldest first */ 4 116 4 117 dcl MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsrl002"); 4 118 4 119 4 120 /* Definition of a single redistribution (forwarding) of a message */ 4 121 4 122 dcl 1 message_redistribution aligned based (message_redistribution_ptr), 4 123 2 envelope like message_envelope, 4 124 2 header, 4 125 3 message_id bit (72), /* ID of this redistribution (same for all copies) */ 4 126 3 date_time_created fixed binary (71), /* date/time when this redistribution was made */ 4 127 3 from pointer, /* -> address list of authors of this redistribution */ 4 128 3 to pointer, /* -> address list of recipients of the redistribution */ 4 129 3 comment like message_text_field; /* optional comment associated with the redistribution */ 4 130 4 131 dcl message_redistribution_comment character (message_redistribution.comment.text_lth) unaligned 4 132 based (message_redistribution.comment.text_ptr); 4 133 4 134 dcl message_redistribution_ptr pointer; 4 135 4 136 4 137 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the redistributions of a message */ 4 138 4 139 dcl 1 message_redistribution_parameter aligned based (message_redistribution_parameter_ptr), 4 140 2 pad pointer, /* forces even word alignment */ 4 141 2 version character (8) unaligned, 4 142 2 redistribution like message_redistribution; 4 143 4 144 dcl MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsdist2"); 4 145 4 146 dcl message_redistribution_parameter_ptr pointer; 4 147 4 148 /* Definition of the list of user-defined fields in a message */ 4 149 4 150 dcl 1 message_user_fields_list aligned based (message.user_fields_list), 4 151 2 version character (8) unaligned, 4 152 2 reserved bit (144), /* ... exclusively for use by the mail system */ 4 153 2 pad bit (36), 4 154 2 n_user_fields fixed binary, /* # of user-defined fields in the message */ 4 155 2 user_fields (message_n_user_fields refer (message_user_fields_list.n_user_fields)) 4 156 like message_user_field; /* the actual user-defined fields */ 4 157 4 158 dcl MESSAGE_USER_FIELDS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsufl02"); 4 159 4 160 4 161 /* Definition of a user defined message header field */ 4 162 4 163 dcl 1 message_user_field aligned based (message_user_field_ptr), 4 164 2 header, 4 165 3 field_id bit (36) aligned, /* identifies the purpose of this field */ 4 166 3 field_type fixed binary, /* type of data contained in this field */ 4 167 2 field_type_variable bit (144); /* the actual data (see below) */ 4 168 4 169 dcl message_user_field_ptr pointer; 4 170 4 171 4 172 /* Defined types of user defined fields */ 4 173 4 174 dcl (MESSAGE_TEXT_USER_FIELD initial (1), /* content of the field is a text string */ 4 175 MESSAGE_ADDRESS_LIST_USER_FIELD initial (2), /* content of the field is an address list */ 4 176 MESSAGE_DATE_USER_FIELD initial (3), /* content of the field is a date/time */ 4 177 MESSAGE_INTEGER_USER_FIELD initial (4)) /* content of the filed is a fixed binary value */ 4 178 fixed binary static options (constant); 4 179 4 180 4 181 /* Structures used to access the data for the different types of user defined fields */ 4 182 4 183 dcl 1 message_text_user_field aligned based (message_user_field_ptr), 4 184 2 header like message_user_field.header, 4 185 2 text like message_text_field; /* the message text */ 4 186 4 187 dcl message_text_user_field_text character (message_text_user_field.text.text_lth) unaligned 4 188 based (message_text_user_field.text.text_ptr); 4 189 4 190 dcl 1 message_address_list_user_field aligned based (message_user_field_ptr), 4 191 2 header like message_user_field.header, 4 192 2 address_list_ptr pointer, /* -> the address list */ 4 193 2 pad bit (72); 4 194 4 195 dcl 1 message_date_user_field aligned based (message_user_field_ptr), 4 196 2 header like message_user_field.header, 4 197 2 date_time fixed binary (71), /* the clock reading */ 4 198 2 pad bit (72); 4 199 4 200 dcl 1 message_integer_user_field aligned based (message_user_field_ptr), 4 201 2 header like message_user_field.header, 4 202 2 value fixed binary (35), /* the integer value */ 4 203 2 pad bit (108); 4 204 4 205 4 206 /* Structure used in calls to mail_system_ entrypoints which manipulate the user-defined fields of a message */ 4 207 4 208 dcl 1 message_user_field_parameter aligned based (message_user_field_parameter_ptr), 4 209 2 pad pointer, /* forces even word alignment */ 4 210 2 version character (8) unaligned, 4 211 2 user_field like message_user_field; 4 212 4 213 dcl MESSAGE_USER_FIELD_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsudf02"); 4 214 4 215 dcl message_user_field_parameter_ptr pointer; 4 216 4 217 /* Definition of a list of message references used as the value of message header fields (eg: In-Reply-To) */ 4 218 4 219 dcl 1 message_references_list aligned based (message_references_list_ptr), 4 220 2 version character (8) unaligned, 4 221 2 reserved bit (144), /* ... exclusively for use by the mail system */ 4 222 2 pad bit (36), 4 223 2 n_references fixed binary, /* # of references in this list */ 4 224 2 references (message_references_list_n_references refer (message_references_list.n_references)) 4 225 like message_reference; /* the references themselves */ 4 226 4 227 dcl MESSAGE_REFERENCES_LIST_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 4 228 4 229 dcl message_references_list_ptr pointer; 4 230 4 231 4 232 /* Definition of a reference to another message */ 4 233 4 234 dcl 1 message_reference aligned based (message_reference_ptr), 4 235 2 message_id bit (72), /* ID of the other message */ 4 236 2 date_time_created fixed binary (71), /* date/time the other message was created */ 4 237 2 from pointer, /* -> address list of authors of the other message */ 4 238 2 subject like message_text_field; /* subject of the other message */ 4 239 4 240 dcl message_reference_subject character (message_reference.subject.text_lth) unaligned 4 241 based (message_reference.subject.text_ptr); 4 242 4 243 dcl message_reference_ptr pointer; 4 244 4 245 4 246 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate message references */ 4 247 4 248 dcl 1 message_reference_parameter aligned based (message_reference_parameter_ptr), 4 249 2 pad pointer, /* forces even word alignment */ 4 250 2 version character (8) unaligned, 4 251 2 reference like message_reference; 4 252 4 253 dcl MESSAGE_REFERENCE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 4 254 4 255 dcl message_reference_parameter_ptr pointer; 4 256 4 257 4 258 /* Definition of a text field in a message (Subject, Comment, or a user defined field) */ 4 259 4 260 dcl 1 message_text_field aligned based (message_text_field_ptr), 4 261 2 text_ptr pointer, /* -> the actual text */ 4 262 2 text_lth fixed binary (21), /* length of said text */ 4 263 2 flags, 4 264 3 multiline_text bit (1) unaligned, /* ON => the text of this field may span multiple lines; 4 265* OFF => the text will always be a single line */ 4 266 3 reserved bit (35) unaligned; /* for exclusive use of the mail system */ 4 267 4 268 dcl message_text_field_text character (message_text_field.text_lth) unaligned based (message_text_field.text_ptr); 4 269 4 270 dcl message_text_field_ptr pointer; 4 271 4 272 /* Definition of a section of the body of a message */ 4 273 4 274 dcl 1 message_body_section aligned based (message_body_section_ptr), 4 275 2 header, 4 276 3 section_type fixed binary, /* type of "text" stored in this section */ 4 277 3 section_n_lines fixed binary (21), /* # of lines in this section or -1 if indeterminate */ 4 278 2 section_type_variable bit (144); /* the actual data (see below) */ 4 279 4 280 dcl message_body_section_ptr pointer; 4 281 4 282 4 283 /* Defined types of message body sections */ 4 284 4 285 dcl (MESSAGE_PREFORMATTED_BODY_SECTION initial (1), /* text formatted by the authors/sender */ 4 286 MESSAGE_BIT_STRING_BODY_SECTION initial (2)) /* arbitrary bit string */ 4 287 fixed binary static options (constant); 4 288 4 289 4 290 /* Structures used to access the data for the different types of message body sections */ 4 291 4 292 dcl 1 message_preformatted_body_section aligned based (message_body_section_ptr), 4 293 2 header like message_body_section.header, 4 294 2 text_ptr pointer, /* -> the text */ 4 295 2 text_lth fixed binary (21), /* length of said text in characters */ 4 296 2 reserved bit (36); /* for exclusive use of the mail system */ 4 297 4 298 dcl message_preformatted_body_section_text character (message_preformatted_body_section.text_lth) unaligned 4 299 based (message_preformatted_body_section.text_ptr); 4 300 4 301 dcl 1 message_bit_string_body_section aligned based (message_body_section_ptr), 4 302 2 header like message_body_section.header, 4 303 2 bit_string_ptr pointer, /* -> the bit string */ 4 304 2 bit_string_lth fixed binary (24), /* length of said bit string in bits (obviously) */ 4 305 2 reserved bit (36); /* for exclusive use of the mail system */ 4 306 4 307 dcl message_bit_string_body_section_bit_string bit (message_bit_string_body_section.bit_string_lth) unaligned 4 308 based (message_bit_string_body_section.bit_string_ptr); 4 309 4 310 4 311 /* Structure used in calls to mail_system_ entrypoints which manipulate the sections of a message's body */ 4 312 4 313 dcl 1 message_body_section_parameter aligned based (message_body_section_parameter_ptr), 4 314 2 pad pointer, /* forces even word alignment */ 4 315 2 version character (8) unaligned, 4 316 2 section like message_body_section; 4 317 4 318 dcl MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsmbs02"); 4 319 4 320 dcl message_body_section_parameter_ptr pointer; 4 321 4 322 /* END INCLUDE FILE ... mlsys_message.incl.pl1 */ 959 960 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 */ 961 962 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 */ 963 964 7 1 /* BEGIN INCLUDE FILE ... mlsys_field_names.incl.pl1 */ 7 2 /* Created: June 1983 by G. Palter */ 7 3 7 4 /* Standard names for all message envelope, header, and redistributions list fields supported by the mail system */ 7 5 7 6 dcl (ACCESS_CLASS_FIELDNAME initial ("Access-Class"), 7 7 ACKNOWLEDGE_TO_FIELDNAME initial ("Acknowledge-To"), 7 8 BCC_FIELDNAME initial ("bcc"), 7 9 CC_FIELDNAME initial ("cc"), 7 10 DATE_TIME_CREATED_FIELDNAME initial ("Date"), 7 11 DATE_TIME_DELIVERED_FIELDNAME initial ("Delivery-Date"), 7 12 DATE_TIME_MAILED_FIELDNAME initial ("Posted-Date"), 7 13 DELIVERED_BY_FIELDNAME initial ("Delivery-By"), 7 14 FROM_FIELDNAME initial ("From"), 7 15 IMPLICIT_ROUTE_FIELDNAME initial ("Route"), 7 16 MESSAGE_ID_FIELDNAME initial ("Message-ID"), 7 17 RELAY_FIELDNAME initial ("Relayed"), 7 18 REPLY_REFERENCES_FIELDNAME initial ("In-Reply-To"), 7 19 REPLY_TO_FIELDNAME initial ("Reply-To"), 7 20 SENDER_FIELDNAME initial ("Sender"), 7 21 SUBJECT_FIELDNAME initial ("Subject"), 7 22 TO_FIELDNAME initial ("To"), 7 23 7 24 7 25 /* Prefix to apply to a field name to produce the field name of the equivalent field in the redistributions list. Ie: 7 26* 7 27* call mlsys_utils_$print_address_field 7 28* (REDISTRIBUTED_PREFIX || FROM_FIELDNAME, ...) */ 7 29 7 30 REDISTRIBUTED_PREFIX initial ("Redistributed-"), 7 31 7 32 7 33 /* Fields in a redistribution which do not have a corresponding non-redistributed field */ 7 34 7 35 REDISTRIBUTED_COMMENT_FIELDNAME initial ("Redistributed-Comment")) 7 36 7 37 character (32) varying static options (constant); 7 38 7 39 7 40 /* END INCLUDE FILE ... mlsys_field_names.incl.pl1 */ 965 966 967 end sdm_header_requests_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/22/86 1010.8 sdm_header_requests_.pl1 >spec>install>1059>sdm_header_requests_.pl1 953 1 10/27/83 2104.2 sdm_invocation.incl.pl1 >ldd>include>sdm_invocation.incl.pl1 955 2 10/27/83 2104.3 sdm_data.incl.pl1 >ldd>include>sdm_data.incl.pl1 957 3 10/27/83 2104.2 send_mail_options.incl.pl1 >ldd>include>send_mail_options.incl.pl1 959 4 05/22/86 1005.9 mlsys_message.incl.pl1 >spec>install>1059>mlsys_message.incl.pl1 961 5 10/27/83 2104.2 mlsys_address_list.incl.pl1 >ldd>include>mlsys_address_list.incl.pl1 963 6 06/18/84 1324.1 mlsys_parse_ca_options.incl.pl1 >ldd>include>mlsys_parse_ca_options.incl.pl1 965 7 10/27/83 2104.2 mlsys_field_names.incl.pl1 >ldd>include>mlsys_field_names.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 000112 constant char(8) initial unaligned dcl 5-12 set ref 264* 493* BCC_FIELDNAME 000077 constant varying char(32) initial dcl 7-6 set ref 209 311* 315* 651* 699* 730* 750* CC_FIELDNAME 000066 constant varying char(32) initial dcl 7-6 set ref 199 645* 686* 722* 748* CREATE_AND_ANNOUNCE_MAILBOX constant fixed bin(17,0) initial dcl 6-28 ref 246 DONT_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 6-28 ref 471 FROM_FIELDNAME 000055 constant varying char(32) initial dcl 7-6 set ref 169 221 224* 741* MESSAGE_ID_FIELDNAME 000044 constant varying char(32) initial dcl 7-6 set ref 449* 451* MODIFIED_MESSAGE constant fixed bin(17,0) initial dcl 1-47 ref 320 428 611 626 635 641 647 710 718 726 780 816 PARSE_CA_OPTIONS_VERSION_1 000110 constant char(8) initial unaligned dcl 6-21 ref 245 470 PROCESSED_MESSAGE constant fixed bin(17,0) initial dcl 1-47 ref 320 428 611 626 635 641 647 710 718 726 780 816 P_sci_ptr parameter pointer dcl 40 ref 32 164 174 184 194 204 346 441 460 924 P_sdm_invocation_ptr parameter pointer dcl 41 ref 32 164 174 184 194 204 346 441 460 930 QUERY_TO_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 6-28 ref 247 REPLY_REFERENCES_FIELDNAME 000033 constant varying char(32) initial dcl 7-6 set ref 622* REPLY_TO_FIELDNAME 000022 constant varying char(32) initial dcl 7-6 set ref 179 743* STACK_EXTENSION 000114 constant fixed bin(18,0) initial dcl 109 set ref 403 403* 844* 845 850* 851 SUBJECT_FIELDNAME 000011 constant varying char(32) initial dcl 7-6 set ref 372* 376* 615* TO_FIELDNAME 000000 constant varying char(32) initial dcl 7-6 set ref 189 639* 673* 714* 746* abort 000200 automatic bit(1) dcl 95 set ref 252* 277* 279* 293 abort_on_errors 4 000126 automatic bit(1) level 3 packed unaligned dcl 70 set ref 248* 472* active_request 000102 automatic bit(1) dcl 51 set ref 352 926* addr builtin function dcl 159 ref 264 264 476 493 493 504 527 539 551 563 575 address_deleted 000257 automatic bit(1) dcl 774 in procedure "process_remove_for_field" set ref 797* 802* 810 address_deleted 000225 automatic bit(1) dcl 104 in procedure "sdm_header_requests_" set ref 665* 671* 684* 697* 705 address_idx 000226 automatic fixed bin(17,0) dcl 105 in procedure "sdm_header_requests_" set ref 663* 664* address_idx 000260 automatic fixed bin(17,0) dcl 775 in procedure "process_remove_for_field" set ref 795* 796* address_list based structure level 1 dcl 5-6 address_list_field_value 000172 automatic pointer dcl 92 set ref 168* 178* 188* 198* 208* 221* 233* 298* address_summary based varying char dcl 840 set ref 848* 855* 858* address_summary_max_lth 000102 automatic fixed bin(21,0) dcl 842 set ref 845* 848 851* 851 855 858 address_summary_ptr 000100 automatic pointer dcl 841 set ref 844* 848 855 858 addresses 10 based pointer array level 2 dcl 5-6 set ref 664 669* 682* 695* 796 800* all 000150 automatic structure level 1 dcl 80 set ref 481* argument based char unaligned dcl 53 set ref 277 277 279 281* 283* 413 504 504 504 511 511 513 513 516 516 518 530 530 542 554 566 578* 580* argument_idx 000113 automatic fixed bin(17,0) dcl 57 set ref 260* 262 264* 272 275* 285* 285 397* 398* 409* 410* 416* 489* 491 493* 499 502* 519 522 525* 525 531 534 537* 537 543 546 549* 549 555 558 561* 561 567 570 573* 573 582* 582 argument_lth 000110 automatic fixed bin(21,0) dcl 56 set ref 275* 277 277 279 281 281 283 283 398* 399 410* 412 413 415 502* 504 504 504 511 511 513 513 516 516 518 530 530 542 554 566 578 578 580 580 argument_ptr 000104 automatic pointer dcl 55 set ref 275* 277 277 279 281 283 398* 410* 413 502* 504 504 504 511 511 513 513 516 516 518 530 530 542 554 566 578 580 baseno builtin function dcl 159 ref 390 390 431 431 bcc 5 000150 automatic bit(1) level 2 in structure "all" dcl 80 in procedure "sdm_header_requests_" set ref 572* 601 750* bcc 46 based pointer level 3 in structure "message" dcl 4-15 in procedure "sdm_header_requests_" set ref 208 309* 656* 662* 750* bcc 12 000134 automatic pointer level 2 in structure "lists" dcl 72 in procedure "sdm_header_requests_" set ref 493* 575 601* 750* 911 911* cc 4 000150 automatic bit(1) level 2 in structure "all" dcl 80 in procedure "sdm_header_requests_" set ref 560* 598 748* cc 10 000134 automatic pointer level 2 in structure "lists" dcl 72 in procedure "sdm_header_requests_" set ref 563 598* 748* 909 909* cc 44 based pointer level 3 in structure "message" dcl 4-15 in procedure "sdm_header_requests_" set ref 198 656* 661* 748* cleanup 000232 stack reference condition dcl 157 ref 258 388 487 code 000230 automatic fixed bin(35,0) dcl 107 set ref 224* 226 226* 233* 235 235* 264* 267 267 267* 270 298* 300 300* 302* 303 303* 309* 311 311* 314* 315 315* 376* 378 378* 426* 427 427* 449* 451 451* 493* 496 496 496* 610* 611 615* 619* 620 621* 622 622* 634* 635 639* 640* 641 645* 646* 647 651* 672* 673 673* 685* 686 686* 698* 699 699* 709* 710 714* 717* 718 722* 725* 726 730* 779* 780 784* 803* 804 804* 815* 816 820* 846* 847 848* 849 cu_$arg_list_ptr 000040 constant entry external dcl 121 ref 873 873 cu_$cl 000042 constant entry external dcl 122 ref 878 cu_$generate_call 000044 constant entry external dcl 123 ref 873 cu_$grow_stack_frame 000046 constant entry external dcl 124 ref 403 844 850 current_address_list_ptr based pointer dcl 67 set ref 493* current_address_list_ptr_ptr 000124 automatic pointer dcl 68 set ref 476* 493 504 527* 539* 551* 563* 575* date_time_body_modified 12 based fixed bin(71,0) level 3 dcl 1-6 ref 449 449 debug_mode 15(04) based bit(1) level 3 packed unaligned dcl 1-6 ref 876 emf_et_$address_not_found 000014 external static fixed bin(35,0) dcl 115 set ref 855* 858* emf_et_$empty_address_list_field 000016 external static fixed bin(35,0) dcl 115 set ref 789* error_table_$bad_arg 000020 external static fixed bin(35,0) dcl 115 set ref 283* 580* error_table_$badopt 000022 external static fixed bin(35,0) dcl 115 set ref 281* 578* error_table_$inconsistent 000024 external static fixed bin(35,0) dcl 115 set ref 586* 589* 592* 595* 598* 601* error_table_$noarg 000026 external static fixed bin(35,0) dcl 115 set ref 289* 519* 531* 543* 555* 567* error_table_$smallarg 000030 external static fixed bin(35,0) dcl 115 ref 846 847 849 error_table_$too_many_args 000032 external static fixed bin(35,0) dcl 115 set ref 363* 446* errors_detected 000206 automatic bit(1) dcl 101 set ref 607* 757 874* fieldname 000160 automatic varying char(32) dcl 91 set ref 169* 179* 189* 199* 209* 221 230* 233* 235* 289* 300* 303* flags 4 000126 automatic structure level 2 in structure "local_pcao" dcl 70 in procedure "sdm_header_requests_" flags 15 based structure level 2 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_header_requests_" found_invalid_address 000201 automatic bit(1) dcl 96 set ref 253* 270* 270 293 from 1 000150 automatic bit(1) level 2 in structure "all" dcl 80 in procedure "sdm_header_requests_" set ref 524* 589 741* from 36 based pointer level 3 in structure "message" dcl 4-15 in procedure "sdm_header_requests_" set ref 168 741* from 2 000134 automatic pointer level 2 in structure "lists" dcl 72 in procedure "sdm_header_requests_" set ref 527 589* 741* 903 903* header 64 based structure array level 4 in structure "message" dcl 4-15 in procedure "sdm_header_requests_" header based structure level 2 in structure "message_body_section" dcl 4-274 in procedure "sdm_header_requests_" header 30 based structure level 2 in structure "message" dcl 4-15 in procedure "sdm_header_requests_" header based structure level 2 in structure "message_user_field" dcl 4-163 in procedure "sdm_header_requests_" header 4 based structure level 3 in structure "message_user_field_parameter" dcl 4-208 in procedure "sdm_header_requests_" header 10 based structure array level 3 in structure "message_user_fields_list" dcl 4-150 in procedure "sdm_header_requests_" header 4 based structure level 3 in structure "message_body_section_parameter" dcl 4-313 in procedure "sdm_header_requests_" idx 000227 automatic fixed bin(17,0) dcl 105 in procedure "sdm_header_requests_" set ref 620* 621* 667* 668 669 672* 677* 677 680* 681 682 685* 690* 690 693* 694 695 698* 703* 703 idx 000261 automatic fixed bin(17,0) dcl 775 in procedure "process_remove_for_field" set ref 798* 799 800 803* 808* 808 index builtin function dcl 159 ref 277 504 inserted_space defined char(1) unaligned dcl 418 set ref 419* inserted_text defined char unaligned dcl 412 set ref 413* ioa_ 000050 constant entry external dcl 125 ref 230 372 ioa_$ioa_switch 000052 constant entry external dcl 126 ref 877 iox_$error_output 000010 external static pointer dcl 111 set ref 877* iox_$user_output 000012 external static pointer dcl 112 set ref 224* 233* 376* 449* length builtin function dcl 159 ref 855 lists 000134 automatic structure level 1 dcl 72 set ref 479* local_pcao 000126 automatic structure level 1 dcl 70 set ref 264 264 493 493 logbox_creation_mode 2 000126 automatic fixed bin(17,0) level 2 dcl 70 set ref 246* 471* mail_system_$compare_addresses 000054 constant entry external dcl 127 ref 669 682 695 800 mail_system_$copy_address_list 000056 constant entry external dcl 128 ref 660 661 662 794 mail_system_$delete_address 000060 constant entry external dcl 129 ref 672 685 698 803 mail_system_$delete_reply_reference 000062 constant entry external dcl 130 ref 621 mail_system_$free_address_list 000064 constant entry external dcl 131 ref 335 337 732 733 734 822 892 894 896 898 901 903 905 907 909 911 mail_system_$merge_address_lists 000066 constant entry external dcl 132 ref 298 309 mail_system_$replace_bcc 000070 constant entry external dcl 133 ref 210 314 646 725 750 750 mail_system_$replace_cc 000072 constant entry external dcl 134 ref 200 640 717 748 748 mail_system_$replace_from 000074 constant entry external dcl 135 ref 170 741 741 mail_system_$replace_reply_to 000076 constant entry external dcl 136 ref 180 743 743 mail_system_$replace_subject 000100 constant entry external dcl 137 ref 426 610 mail_system_$replace_to 000102 constant entry external dcl 138 ref 190 634 709 746 746 mbz 4(02) 000126 automatic bit(34) level 3 packed unaligned dcl 70 set ref 250* 474* message based structure level 1 dcl 4-15 message_body_section based structure level 1 dcl 4-274 message_envelope based structure level 1 dcl 4-61 message_info 6 based structure level 2 dcl 1-6 message_ptr 000242 automatic pointer dcl 4-53 in procedure "sdm_header_requests_" set ref 168 178 188 198 208 302* 309 314* 356 361 361 361 372 376 376 376 426* 610* 620 621* 634* 640* 646* 656 656 656 660 661 662 709* 717* 725* 741 743 746 748 750 779* 815* 931* message_ptr 6 based pointer level 3 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_header_requests_" ref 931 message_redistribution based structure level 1 dcl 4-122 message_reference based structure level 1 dcl 4-234 message_state 10 based fixed bin(17,0) level 3 dcl 1-6 set ref 320 320* 428 428* 611 611* 626 626* 635 635* 641 641* 647 647* 710 710* 718 718* 726 726* 780 780* 816 816* message_subject based char unaligned dcl 4-51 set ref 361* 376* message_text_field based structure level 1 dcl 4-260 message_user_field based structure level 1 dcl 4-163 mlsys_et_$ca_parse_failed 000034 external static fixed bin(35,0) dcl 115 ref 267 270 496 mlsys_et_$no_recipients 000036 external static fixed bin(35,0) dcl 115 set ref 656* mlsys_utils_$parse_address_list_control_args 000104 constant entry external dcl 139 ref 264 493 mlsys_utils_$print_address_list_field 000106 constant entry external dcl 141 ref 224 233 mlsys_utils_$print_message_id_field 000110 constant entry external dcl 143 ref 449 mlsys_utils_$print_text_field 000112 constant entry external dcl 145 ref 376 mlsys_utils_$summarize_address 000114 constant entry external dcl 147 ref 848 n_addresses 6 based fixed bin(17,0) level 2 dcl 5-6 ref 663 668 681 694 795 799 949 n_arguments 000112 automatic fixed bin(17,0) dcl 57 set ref 216 262 272 356 368 396 397 409 416 446 465 491 499 519 531 543 555 567 926* 928* n_reply_references 6 based fixed bin(17,0) level 2 dcl 4-15 ref 620 new_address_list_field_value 000210 automatic pointer dcl 103 set ref 484* 794* 799 800 803* 815* 822 822* 898 898* new_addresses_ptr 000202 automatic pointer dcl 98 set ref 255* 264* 289* 297* 298* 298* 302* 337 337* new_bcc_field_value 000216 automatic pointer dcl 103 set ref 484* 662* 694 695 698* 725* 734 734* 892 892* new_cc_field_value 000214 automatic pointer dcl 103 set ref 484* 661* 681 682 685* 717* 733 733* 894 894* new_subject based char unaligned dcl 63 set ref 413* 413 419* 419 426* new_subject_lth 000122 automatic fixed bin(21,0) dcl 65 set ref 396* 399* 399 403 413 419 426 426 new_subject_ptr 000120 automatic pointer dcl 64 set ref 387* 390 390 390* 403* 405* 413 419 426 431 431 431* new_subject_used 000123 automatic fixed bin(21,0) dcl 65 set ref 408* 413 415* 415 419 421* 421 new_to_field_value 000212 automatic pointer dcl 103 set ref 484* 660* 668 669 672* 709* 732 732* 896 896* next_argument based char unaligned dcl 54 ref 523 523 535 535 547 547 559 559 571 571 next_argument_lth 000111 automatic fixed bin(21,0) dcl 56 set ref 522* 523 523 534* 535 535 546* 547 547 558* 559 559 570* 571 571 next_argument_ptr 000106 automatic pointer dcl 55 set ref 522* 523 523 534* 535 535 546* 547 547 558* 559 559 570* 571 571 null builtin function dcl 159 ref 255 335 337 387 390 431 479 484 625 634 634 640 640 646 646 732 733 734 779 779 822 850 892 894 896 898 901 903 905 907 909 911 946 original_messages_ptr 20 based pointer level 2 dcl 1-6 set ref 625* p_address_list_ptr parameter pointer dcl 944 ref 941 946 949 p_addresses_to_remove parameter pointer dcl 771 set ref 765 787* 795 796 p_allow_active_request parameter bit(1) dcl 922 ref 919 926 p_field_value parameter pointer dcl 769 set ref 765 789* 794* p_fieldname parameter varying char dcl 838 in procedure "report_address_not_deleted" set ref 835 855 858* p_fieldname parameter varying char dcl 768 in procedure "process_remove_for_field" set ref 765 784* 789* 804* 812* 820* p_remove_all_addresses parameter bit(1) dcl 772 ref 765 777 p_replace_field parameter entry variable dcl 770 ref 765 779 815 parse_ca_options based structure level 1 dcl 6-8 recipients 000134 automatic pointer level 2 in structure "lists" dcl 72 in procedure "sdm_header_requests_" set ref 476 504 586* 654* 663 664 901 901* recipients 000150 automatic bit(1) level 2 in structure "all" dcl 80 in procedure "sdm_header_requests_" set ref 504* 586 632 remove_in_reply_to 000157 automatic bit(1) dcl 89 set ref 482* 513* 618 remove_subject 000156 automatic bit(1) dcl 88 set ref 482* 511* 609 replace_bcc_field 000224 automatic bit(1) dcl 104 set ref 659* 697* 724 replace_cc_field 000223 automatic bit(1) dcl 104 set ref 659* 684* 716 replace_field 000174 automatic entry variable dcl 93 set ref 170* 180* 190* 200* 210* 302 replace_the_field 000256 automatic bit(1) dcl 774 set ref 793* 810* 814 replace_to_field 000222 automatic bit(1) dcl 104 set ref 659* 671* 708 reply_to 4 000134 automatic pointer level 2 in structure "lists" dcl 72 in procedure "sdm_header_requests_" set ref 539 592* 743* 905 905* reply_to 2 000150 automatic bit(1) level 2 in structure "all" dcl 80 in procedure "sdm_header_requests_" set ref 536* 592 743* reply_to 40 based pointer level 3 in structure "message" dcl 4-15 in procedure "sdm_header_requests_" set ref 178 743* requote_string_ 000116 constant entry external dcl 148 ref 361 return_value based varying char dcl 59 set ref 356* 361* return_value_max_lth 000116 automatic fixed bin(21,0) dcl 61 set ref 356 361 926* return_value_ptr 000114 automatic pointer dcl 60 set ref 356 361 926* savebox_addresses_ptr 000204 automatic pointer dcl 99 set ref 255* 264* 289* 308* 309* 309* 314* 335 335* savebox_creation_mode 3 000126 automatic fixed bin(17,0) level 2 dcl 70 set ref 247* 471* sci_ptr 000100 automatic pointer dcl 46 set ref 226* 235* 264* 267* 275* 281* 283* 289* 293* 300* 303* 311* 315* 363* 378* 390* 398* 405* 410* 427* 431* 446* 451* 465* 493* 496* 502* 508* 519* 522* 531* 534* 543* 546* 555* 558* 567* 570* 578* 580* 586* 589* 592* 595* 598* 601* 615* 622* 639* 645* 651* 656* 673* 686* 699* 714* 722* 730* 757* 784* 789* 804* 820* 855* 858* 924* 926* 928* sdm_data_$default_from_field 000136 external static pointer dcl 2-27 set ref 224* sdm_invocation based structure level 1 dcl 1-6 sdm_invocation_ptr 000240 automatic pointer dcl 1-38 set ref 320 320 428 428 449 449 611 611 625 626 626 635 635 641 641 647 647 710 710 718 718 726 726 780 780 816 816 876 930* 931 send_mail_options based structure level 1 dcl 3-15 ssu_$abort_line 000120 constant entry external dcl 149 ref 226 235 267 281 283 289 293 300 303 311 315 363 378 427 446 451 465 496 508 519 531 543 555 567 578 580 586 589 592 595 598 601 757 ssu_$arg_count 000122 constant entry external dcl 150 ref 928 ssu_$arg_ptr 000124 constant entry external dcl 151 ref 275 398 410 502 522 534 546 558 570 ssu_$get_temp_segment 000126 constant entry external dcl 152 ref 405 ssu_$print_message 000130 constant entry external dcl 153 ref 873 873 ssu_$release_temp_segment 000132 constant entry external dcl 154 ref 390 431 ssu_$return_arg 000134 constant entry external dcl 155 ref 926 stackframeptr builtin function dcl 159 ref 390 431 string builtin function dcl 159 set ref 481* subject 50 based structure level 3 dcl 4-15 text_lth 52 based fixed bin(21,0) level 4 dcl 4-15 ref 356 361 361 372 376 376 text_ptr 50 based pointer level 4 dcl 4-15 ref 361 376 the_address 000220 automatic pointer dcl 103 set ref 664* 669* 682* 695* 796* 800* 848* to 42 based pointer level 3 in structure "message" dcl 4-15 in procedure "sdm_header_requests_" set ref 188 656* 660* 746* to 3 000150 automatic bit(1) level 2 in structure "all" dcl 80 in procedure "sdm_header_requests_" set ref 548* 595 746* to 6 000134 automatic pointer level 2 in structure "lists" dcl 72 in procedure "sdm_header_requests_" set ref 551 595* 746* 907 907* unspec builtin function dcl 159 ref 449 449 validate_addresses 4(01) 000126 automatic bit(1) level 3 packed unaligned dcl 70 set ref 249* 473* version 000126 automatic char(8) level 2 packed unaligned dcl 70 set ref 245* 470* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACCESS_CLASS_FIELDNAME internal static varying char(32) initial dcl 7-6 ACKNOWLEDGE_TO_FIELDNAME internal static varying char(32) initial dcl 7-6 DATE_TIME_CREATED_FIELDNAME internal static varying char(32) initial dcl 7-6 DATE_TIME_DELIVERED_FIELDNAME internal static varying char(32) initial dcl 7-6 DATE_TIME_MAILED_FIELDNAME internal static varying char(32) initial dcl 7-6 DEFAULT_FILL internal static bit(2) initial unaligned dcl 3-64 DEFAULT_PROMPT internal static bit(2) initial unaligned dcl 3-56 DEFAULT_REQUEST_LOOP internal static bit(2) initial unaligned dcl 3-72 DELIVERED_BY_FIELDNAME internal static varying char(32) initial dcl 7-6 FILL internal static bit(2) initial unaligned dcl 3-64 IMPLICIT_ROUTE_FIELDNAME internal static varying char(32) initial dcl 7-6 MESSAGE_ADDRESS_LIST_USER_FIELD internal static fixed bin(17,0) initial dcl 4-174 MESSAGE_BIT_STRING_BODY_SECTION internal static fixed bin(17,0) initial dcl 4-285 MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 4-318 MESSAGE_DATE_USER_FIELD internal static fixed bin(17,0) initial dcl 4-174 MESSAGE_ENVELOPE_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 4-79 MESSAGE_INTEGER_USER_FIELD internal static fixed bin(17,0) initial dcl 4-174 MESSAGE_PREFORMATTED_BODY_SECTION internal static fixed bin(17,0) initial dcl 4-285 MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 internal static char(8) initial unaligned dcl 4-117 MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 4-144 MESSAGE_REFERENCES_LIST_VERSION_2 internal static char(8) initial unaligned dcl 4-227 MESSAGE_REFERENCE_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 4-253 MESSAGE_TEXT_USER_FIELD internal static fixed bin(17,0) initial dcl 4-174 MESSAGE_TRACE_VERSION_2 internal static char(8) initial unaligned dcl 4-103 MESSAGE_USER_FIELDS_LIST_VERSION_2 internal static char(8) initial unaligned dcl 4-158 MESSAGE_USER_FIELD_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 4-213 MESSAGE_VERSION_2 internal static char(8) initial unaligned dcl 4-49 NO_FILL internal static bit(2) initial unaligned dcl 3-64 NO_PROMPT internal static bit(2) initial unaligned dcl 3-56 NO_REQUEST_LOOP internal static bit(2) initial unaligned dcl 3-72 REDISTRIBUTED_COMMENT_FIELDNAME internal static varying char(32) initial dcl 7-6 REDISTRIBUTED_PREFIX internal static varying char(32) initial dcl 7-6 RELAY_FIELDNAME internal static varying char(32) initial dcl 7-6 REQUEST_LOOP internal static bit(2) initial unaligned dcl 3-72 SDM_INVOCATION internal static char(8) initial unaligned dcl 1-36 SENDER_FIELDNAME internal static varying char(32) initial dcl 7-6 SEND_MAIL_OPTIONS_VERSION_6 internal static char(8) initial unaligned dcl 3-51 SILENTLY_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 6-28 UNPROCESSED_MESSAGE internal static fixed bin(17,0) initial dcl 1-47 USE_PROMPT_STRING internal static bit(2) initial unaligned dcl 3-56 address_list_n_addresses automatic fixed bin(17,0) dcl 5-16 address_list_ptr automatic pointer dcl 5-14 message_address_list_user_field based structure level 1 dcl 4-190 message_bit_string_body_section based structure level 1 dcl 4-301 message_bit_string_body_section_bit_string based bit unaligned dcl 4-307 message_body_section_parameter based structure level 1 dcl 4-313 message_body_section_parameter_ptr automatic pointer dcl 4-320 message_body_section_ptr automatic pointer dcl 4-280 message_date_user_field based structure level 1 dcl 4-195 message_envelope_parameter based structure level 1 dcl 4-74 message_envelope_parameter_ptr automatic pointer dcl 4-81 message_envelope_ptr automatic pointer dcl 4-69 message_integer_user_field based structure level 1 dcl 4-200 message_n_body_sections automatic fixed bin(17,0) dcl 4-55 message_n_redistributions automatic fixed bin(17,0) dcl 4-55 message_n_user_fields automatic fixed bin(17,0) dcl 4-55 message_preformatted_body_section based structure level 1 dcl 4-292 message_preformatted_body_section_text based char unaligned dcl 4-298 message_redistribution_comment based char unaligned dcl 4-131 message_redistribution_parameter based structure level 1 dcl 4-139 message_redistribution_parameter_ptr automatic pointer dcl 4-146 message_redistribution_ptr automatic pointer dcl 4-134 message_redistributions_list based structure level 1 dcl 4-109 message_reference_parameter based structure level 1 dcl 4-248 message_reference_parameter_ptr automatic pointer dcl 4-255 message_reference_ptr automatic pointer dcl 4-243 message_reference_subject based char unaligned dcl 4-240 message_references_list based structure level 1 dcl 4-219 message_references_list_n_references automatic fixed bin(17,0) dcl 4-55 message_references_list_ptr automatic pointer dcl 4-229 message_text_field_ptr automatic pointer dcl 4-270 message_text_field_text based char unaligned dcl 4-268 message_text_user_field based structure level 1 dcl 4-183 message_text_user_field_text based char unaligned dcl 4-187 message_trace based structure level 1 dcl 4-87 message_trace_n_relays automatic fixed bin(17,0) dcl 4-55 message_trace_ptr automatic pointer dcl 4-105 message_user_field_parameter based structure level 1 dcl 4-208 message_user_field_parameter_ptr automatic pointer dcl 4-215 message_user_field_ptr automatic pointer dcl 4-169 message_user_fields_list based structure level 1 dcl 4-150 parse_ca_options_ptr automatic pointer dcl 6-23 sdm_area based area(1024) dcl 1-40 sdm_data_$default_options external static structure level 1 dcl 2-19 sdm_data_$ec_search_list external static char(32) unaligned dcl 2-17 sdm_data_$ec_suffix external static char(32) unaligned dcl 2-16 sdm_data_$first_invocation external static bit(1) dcl 2-25 sdm_data_$info_directory external static char(168) unaligned dcl 2-11 sdm_data_$special_message external static varying char(256) dcl 2-13 sdm_data_$version external static varying char(32) dcl 2-9 send_mail_options_ptr automatic pointer dcl 3-49 NAMES DECLARED BY EXPLICIT CONTEXT. PROCESS_ADDRESS_LIST_FIELD_REQUEST 001136 constant label dcl 216 ref 171 181 191 201 211 bcc_request 001107 constant entry external dcl 204 cc_request 001056 constant entry external dcl 194 from_request 000743 constant entry external dcl 164 is_empty_list 007711 constant entry internal dcl 941 ref 221 289 289 297 308 586 589 592 595 598 601 654 656 656 656 787 789 message_id_request 002772 constant entry external dcl 441 process_remove_for_field 006422 constant entry internal dcl 765 ref 741 743 746 748 750 release_address_list_request_data 006357 constant entry internal dcl 332 ref 258 323 release_remove_request_data 007405 constant entry internal dcl 889 ref 487 755 remove_request 003124 constant entry external dcl 460 reply_to_request 000774 constant entry external dcl 174 report_address_not_deleted 007063 constant entry internal dcl 835 ref 705 812 report_error 007313 constant entry internal dcl 870 ref 615 622 639 645 651 656 673 686 699 714 722 730 784 789 804 820 855 858 sdm_header_requests_ 000733 constant entry external dcl 32 setup_request 007640 constant entry internal dcl 919 ref 167 177 187 197 207 349 444 463 subject_request 002205 constant entry external dcl 346 to_request 001025 constant entry external dcl 184 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 10772 11132 10040 11002 Length 11666 10040 140 520 731 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sdm_header_requests_ 332 external procedure is an external procedure. on unit on line 258 64 on unit release_address_list_request_data 72 internal procedure is called by several nonquick procedures. on unit on line 388 74 on unit begin block on line 411 begin block shares stack frame of external procedure sdm_header_requests_. begin block on line 417 begin block shares stack frame of external procedure sdm_header_requests_. on unit on line 487 64 on unit process_remove_for_field internal procedure shares stack frame of external procedure sdm_header_requests_. report_address_not_deleted 142 internal procedure is declared options(non_quick). report_error 102 internal procedure is declared options(variable). release_remove_request_data 72 internal procedure is called by several nonquick procedures. setup_request internal procedure shares stack frame of external procedure sdm_header_requests_. is_empty_list internal procedure shares stack frame of external procedure sdm_header_requests_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME report_address_not_deleted 000100 address_summary_ptr report_address_not_deleted 000102 address_summary_max_lth report_address_not_deleted sdm_header_requests_ 000100 sci_ptr sdm_header_requests_ 000102 active_request sdm_header_requests_ 000104 argument_ptr sdm_header_requests_ 000106 next_argument_ptr sdm_header_requests_ 000110 argument_lth sdm_header_requests_ 000111 next_argument_lth sdm_header_requests_ 000112 n_arguments sdm_header_requests_ 000113 argument_idx sdm_header_requests_ 000114 return_value_ptr sdm_header_requests_ 000116 return_value_max_lth sdm_header_requests_ 000120 new_subject_ptr sdm_header_requests_ 000122 new_subject_lth sdm_header_requests_ 000123 new_subject_used sdm_header_requests_ 000124 current_address_list_ptr_ptr sdm_header_requests_ 000126 local_pcao sdm_header_requests_ 000134 lists sdm_header_requests_ 000150 all sdm_header_requests_ 000156 remove_subject sdm_header_requests_ 000157 remove_in_reply_to sdm_header_requests_ 000160 fieldname sdm_header_requests_ 000172 address_list_field_value sdm_header_requests_ 000174 replace_field sdm_header_requests_ 000200 abort sdm_header_requests_ 000201 found_invalid_address sdm_header_requests_ 000202 new_addresses_ptr sdm_header_requests_ 000204 savebox_addresses_ptr sdm_header_requests_ 000206 errors_detected sdm_header_requests_ 000210 new_address_list_field_value sdm_header_requests_ 000212 new_to_field_value sdm_header_requests_ 000214 new_cc_field_value sdm_header_requests_ 000216 new_bcc_field_value sdm_header_requests_ 000220 the_address sdm_header_requests_ 000222 replace_to_field sdm_header_requests_ 000223 replace_cc_field sdm_header_requests_ 000224 replace_bcc_field sdm_header_requests_ 000225 address_deleted sdm_header_requests_ 000226 address_idx sdm_header_requests_ 000227 idx sdm_header_requests_ 000230 code sdm_header_requests_ 000240 sdm_invocation_ptr sdm_header_requests_ 000242 message_ptr sdm_header_requests_ 000256 replace_the_field process_remove_for_field 000257 address_deleted process_remove_for_field 000260 address_idx process_remove_for_field 000261 idx process_remove_for_field THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_var call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return enable shorten_stack ext_entry int_entry int_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$arg_list_ptr cu_$cl cu_$generate_call cu_$grow_stack_frame ioa_ ioa_$ioa_switch mail_system_$compare_addresses mail_system_$copy_address_list mail_system_$delete_address mail_system_$delete_reply_reference mail_system_$free_address_list mail_system_$merge_address_lists mail_system_$replace_bcc mail_system_$replace_cc mail_system_$replace_from mail_system_$replace_reply_to mail_system_$replace_subject mail_system_$replace_to mlsys_utils_$parse_address_list_control_args mlsys_utils_$print_address_list_field mlsys_utils_$print_message_id_field mlsys_utils_$print_text_field mlsys_utils_$summarize_address requote_string_ ssu_$abort_line ssu_$arg_count ssu_$arg_ptr ssu_$get_temp_segment ssu_$print_message ssu_$release_temp_segment ssu_$return_arg THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. emf_et_$address_not_found emf_et_$empty_address_list_field error_table_$bad_arg error_table_$badopt error_table_$inconsistent error_table_$noarg error_table_$smallarg error_table_$too_many_args iox_$error_output iox_$user_output mlsys_et_$ca_parse_failed mlsys_et_$no_recipients sdm_data_$default_from_field LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 32 000727 35 000740 164 000741 167 000750 168 000754 169 000757 170 000764 171 000771 174 000772 177 001001 178 001005 179 001010 180 001015 181 001022 184 001023 187 001032 188 001036 189 001041 190 001046 191 001053 194 001054 197 001063 198 001067 199 001072 200 001077 201 001104 204 001105 207 001114 208 001120 209 001123 210 001130 211 001135 216 001136 221 001140 224 001153 226 001204 228 001232 230 001233 233 001254 235 001305 238 001337 245 001340 246 001342 247 001344 248 001346 249 001350 250 001352 252 001354 253 001356 255 001357 258 001362 260 001404 262 001406 264 001411 267 001436 270 001466 272 001473 275 001476 277 001512 279 001535 281 001543 283 001576 285 001630 287 001631 289 001632 293 001675 297 001717 298 001724 300 001745 302 001777 303 002011 308 002043 309 002050 311 002072 314 002124 315 002137 320 002171 323 002176 326 002202 346 002203 349 002212 352 002216 356 002221 361 002240 363 002275 365 002322 368 002323 372 002325 376 002352 378 002414 380 002442 387 002443 388 002445 390 002461 393 002507 396 002510 397 002513 398 002523 399 002540 400 002542 403 002544 405 002564 408 002611 409 002612 410 002621 412 002636 413 002640 415 002646 416 002647 419 002652 421 002657 423 002660 426 002662 427 002706 428 002734 431 002741 436 002767 441 002770 444 002777 446 003003 449 003031 451 003067 454 003121 460 003122 463 003131 465 003135 470 003164 471 003166 472 003171 473 003173 474 003175 476 003177 479 003201 481 003210 482 003213 484 003215 487 003222 489 003244 491 003246 493 003251 496 003276 499 003326 502 003331 504 003346 508 003403 511 003431 513 003444 516 003457 518 003470 519 003474 522 003523 523 003543 524 003555 525 003557 526 003560 527 003561 528 003563 530 003564 531 003574 534 003623 535 003643 536 003655 537 003657 538 003660 539 003661 540 003663 542 003664 543 003670 546 003717 547 003737 548 003751 549 003753 550 003754 551 003755 552 003757 554 003760 555 003764 558 004013 559 004033 560 004045 561 004047 562 004050 563 004051 564 004053 566 004054 567 004060 570 004107 571 004127 572 004141 573 004143 574 004144 575 004145 576 004147 578 004150 580 004203 582 004235 584 004236 586 004237 589 004275 592 004333 595 004371 598 004427 601 004465 607 004523 609 004524 610 004526 611 004547 614 004556 615 004557 618 004611 619 004613 620 004614 621 004625 622 004640 624 004674 625 004677 626 004702 632 004706 634 004710 635 004725 638 004734 639 004735 640 004764 641 005001 644 005010 645 005011 646 005040 647 005055 650 005064 651 005065 652 005114 654 005115 656 005122 659 005206 660 005211 661 005226 662 005243 663 005260 664 005271 665 005275 667 005276 668 005300 669 005304 671 005326 672 005331 673 005344 676 005375 677 005376 678 005377 680 005400 681 005402 682 005406 684 005430 685 005433 686 005446 689 005477 690 005500 691 005501 693 005502 694 005504 695 005510 697 005532 698 005535 699 005550 702 005601 703 005602 704 005603 705 005604 706 005617 708 005621 709 005623 710 005636 713 005645 714 005646 716 005700 717 005702 718 005715 721 005724 722 005725 724 005757 725 005761 726 005774 729 006003 730 006004 732 006036 733 006054 734 006072 741 006110 743 006145 746 006202 748 006237 750 006274 755 006331 757 006335 759 006355 332 006356 335 006364 337 006402 339 006421 765 006422 777 006433 779 006437 780 006453 783 006462 784 006463 785 006514 787 006515 789 006530 793 006577 794 006600 795 006615 796 006627 797 006635 798 006636 799 006640 800 006644 802 006666 803 006670 804 006703 807 006736 808 006737 809 006740 810 006741 812 006746 813 006760 814 006762 815 006764 816 006777 819 007006 820 007007 822 007043 827 007061 835 007062 844 007076 845 007111 846 007113 847 007117 848 007125 849 007157 850 007164 851 007201 853 007203 855 007204 858 007245 861 007311 870 007312 873 007320 874 007343 876 007346 877 007352 878 007372 881 007403 889 007404 892 007412 894 007430 896 007447 898 007466 901 007505 903 007524 905 007543 907 007562 909 007601 911 007620 913 007637 919 007640 924 007642 926 007646 928 007671 930 007702 931 007706 933 007710 941 007711 946 007713 949 007722 ----------------------------------------------------------- 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