COMPILATION LISTING OF SEGMENT mlsys_transmit_ Compiled by: Multics PL/I Compiler, Release 33d, of April 24, 1992 Compiled at: ACTC Technologies Inc. Compiled on: 92-09-24_2236.62_Thu_mdt Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1989 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 6* * * 7* *********************************************************** */ 8 9 10 11 /****^ HISTORY COMMENTS: 12* 1) change(86-06-03,Herbst), approve(86-06-03,MCR7432), audit(86-06-30,Wong), 13* install(86-06-30,MR12.0-1080): 14* Fixed to zero unused fields of mail_format structures. 15* 2) change(89-08-11,Lee), approve(89-08-29,MCR8130), 16* audit(89-09-25,LZimmerman), install(89-10-02,MR12.3-1079): 17* phx18036 (Mail 450) - modified the deliver_message/redistribute_message 18* entries to set mailing list delivery codes to indicate non-delivery 19* rather than successful delivery if the delivery got aborted; reformatting. 20* 3) change(91-10-25,Schroth), approve(91-11-28,MECR0015), 21* audit(91-11-25,WAAnderson), install(91-11-28,MR12.5-1001): 22* Correct MR12.4 source code corruption. 23* 4) change(92-05-14,Schroth), approve(91-11-25,MCR8251), 24* audit(92-09-22,WAAnderson), install(92-09-24,MR12.5-1016): 25* Replace MECR0015: Correct MR12.4 source code corruption. 26* END HISTORY COMMENTS */ 27 28 29 /* format: off */ 30 31 /* Mail System Primitives which transmit a message to one or more recipients */ 32 33 /* Created: July 1981 by G. Palter */ 34 /* Modified: 7 September 1982 by G. Palter to correctly reference error_table_$rqover and to fix the bug which causes 35* validate_address to return mlsys_et_$no_mailbox rather than mlsys_et_$no_a_permission if you have null access on a 36* mailbox */ 37 /* Recoded: August 1983 by G. Palter to convert to new specification which includes adding separate entrypoints for each 38* of the transmission primitives (deliver, redistribute, copy, log, and save) */ 39 /* Modified: September 1983 by G. Palter to use the interim inter-system mailer (mlsys_mailer_) */ 40 /* Modified: March 1984 by G. Palter to fix the following mail system errors: 41* #0419 -- when the queue_mailing_lists delivery option is used, the mail system will ignore any mailing lists 42* specified rather than queuing the message for later delivery to said lists 43* #0420 -- when processing mailing lists, the mail system does not translate error_table_$no_component into 44* mlsys_et_$no_mailing_list 45* #0436 -- if a forum meeting is not found in the "forum" search list, the mail system will treat it as a version 1 46* forum in the working directory 47* #0438 -- the primitives which allow a user to replace the address list portions of a message 48* (eg: mail_system_$replace_from, mail_system_$replace_user_field) should not make the user's copy of the address 49* list read-only. Instead, they should copy the user's list to allow the user to continue to modify the list if 50* desired for later additional use */ 51 52 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen,^indcomtxt */ 53 54 55 mlsys_transmit_: 56 procedure (); 57 58 return; /* not an entrypoint */ 59 60 61 /* Parameters */ 62 63 dcl P_code fixed binary (35) parameter; 64 65 dcl P_message_ptr pointer parameter; /* deliver_message: -> the new message to be delivered; 66* redistribute_message: -> the in-mailbox message to be 67* redistributed (with optional comment); 68* copy_message, log_message, save_message: -> the 69* new/in-mailbox message to be copied/logged/saved */ 70 71 dcl P_recipients_info_ptr pointer parameter; /* deliver_message, redistribute_message: -> the structure 72* containing the lists of recipients for this 73* operation; the results of the operation are also 74* conveyed through this structure */ 75 dcl P_deliver_options_ptr pointer parameter; /* deliver_message, redistribute_message: -> the structure 76* defining the options which control this operation (eg: 77* delivery mode, queueing mode, etc.) */ 78 79 dcl P_redistribution_comment character (*) parameter; /* redistribute_message: an optional comment to be added to 80* the message as it is redistributed */ 81 82 dcl P_address_lists (*) pointer parameter; /* eliminate_duplicate_addrs_*: -> the address lists from 83* which all duplicate addresses are to be removed */ 84 85 dcl P_mailbox_dirname character (*) parameter; /* copy_message, save_message: absolute pathname of directory 86* containing the target mailbox/savebox */ 87 dcl P_mailbox_ename character (*) parameter; /* copy_message, save_message: entryname of the 88* mailbox/savebox; the caller need not supply the 89* appropriate suffix */ 90 91 dcl P_create_if_not_found bit (1) aligned parameter; /* log_message, save_message: ON => try to create the 92* logbox/savebox if it doesn't exist */ 93 94 dcl P_address_ptr pointer parameter; /* validate_address: -> the address to be validated */ 95 dcl P_validate_mls_contents bit (1) aligned parameter; /* validate_address: ON => cvalidate the contents of any 96* mailing lists; OFF => simply validate the existence of 97* the mailing list */ 98 /**** format: indcomtxt */ 99 100 101 /* Local copies of parameters */ 102 103 dcl code fixed binary (35); 104 105 dcl users_area area based (users_area_ptr); 106 dcl users_area_ptr pointer; 107 108 dcl mailbox_dirname character (168); 109 dcl mailbox_ename character (32); 110 dcl create_if_not_found bit (1) aligned; 111 112 /* Mail notification, allocated once */ 113 114 dcl notification_initialized_sw bit (1) int static init ("0"b); 115 dcl 1 NOTIFICATION_MAIL_FORMAT aligned like mail_format based (NOTIFICATION_MAIL_FORMAT_PTR); 116 dcl NOTIFICATION_MAIL_FORMAT_PTR ptr int static init (null); 117 dcl based_area area based (get_system_free_area_ ()); 118 dcl NOTIFICATION_TEXT char (14) int static options (constant) init ("You have mail."); 119 120 /* Definition of the saved message state */ 121 122 dcl added_from_field bit (1) aligned; /* ON => we added an address to an empty From field */ 123 dcl added_reply_to_field bit (1) aligned; /* ON => we added an address to an empty Reply-To field */ 124 dcl added_envelope bit (1) aligned; /* ON => we added a envelope to the message */ 125 dcl added_redistribution bit (1) aligned; /* ON => we added a redistribution to the message */ 126 127 dcl deleted_last_delivery_fields bit (1) aligned; /* ON => we deleted the last Delivery-Date and ... */ 128 dcl last_date_time_delivered fixed binary (71); /* ... Delivery-By fields from the message */ 129 dcl last_delivered_by pointer; 130 131 dcl 1 saved_message_data aligned, /* data saved/restored directly from the message structure */ 132 2 flags like message.flags, 133 2 header, 134 3 message_id bit (72), 135 3 access_class bit (72), 136 3 date_time_created fixed binary (71), 137 3 bcc pointer; 138 139 140 /* Definition of a single recipient of a message */ 141 142 dcl 1 recipient aligned based (recipient_ptr), 143 2 address_ptr pointer, /* -> the actual address */ 144 2 type fixed binary, /* type of recipient (mailbox/forum/network) */ 145 2 flags, 146 3 top_level bit (1) unaligned, /* ... ON => only recipient corresponding to an input addr */ 147 3 duplicate bit (1) unaligned, /* ... ON => this recipient duplicates a previous entry */ 148 3 free_address bit (1) unaligned, /* ... ON => free above address on cleanup */ 149 3 to_queue bit (1) unaligned, /* ... ON => queue the message for this recipient */ 150 3 no_acknowledge bit (1) unaligned, /* ... ON => don't ask this recipient for acknowledgement */ 151 3 use_copy_without_bcc bit (1) unaligned, /* ... ON => ommit bcc field when sending to this recipient */ 152 3 fatal_error bit (1) unaligned, /* ... ON => a fatal error was detected for this recipient */ 153 3 transient_error bit (1) unaligned, /* ... ON => a transient error was detected */ 154 3 warning bit (1) unaligned, /* ... ON => a warning is associated with this recipient */ 155 3 pad bit (27) unaligned, 156 2 code fixed binary (35), /* results of validation or transmission */ 157 2 explanation character (128) varying, /* reason why message had to be queued */ 158 2 top_level_info, /* identifies the input address that generated this ... */ 159 3 list_idx fixed binary, /* ... recipient */ 160 3 address_idx fixed binary, 161 2 duplicate_idx fixed binary, /* identifies the recipient for which this is a duplicate */ 162 2 local_info, /* used if the recipient is local */ 163 3 mailbox_idx fixed binary, /* ... identifies the mailbox (if a mailbox recipient) */ 164 3 forum_idx fixed binary, /* ... identifies the forum (if a forum recipient) */ 165 2 foreign_info, /* used if the recipient is on another computer */ 166 /*** ... lengths of the following strings are the maximum accepted by the interim inter-system mailer */ 167 3 foreign_address character (128) varying, /* ... actual foreign address to be given to mlsys_mailer_ */ 168 3 foreign_system character (40) varying; /* ... actual foreign system to be given to mlsys_mailer_ */ 169 170 dcl recipient_ptr pointer; 171 172 173 /* Definition of the types of recipients */ 174 175 /* format: off */ 176 dcl (UNKNOWN_RECIPIENT initial (0), /* ... used for recipients with fatal errors */ 177 MAILBOX_RECIPIENT initial (1), /* ... to a mailbox */ 178 FORUM_RECIPIENT initial (2), /* ... to a forum meeting */ 179 NETWORK_RECIPIENT initial (3)) /* ... to a recipient somewhere on the network */ 180 fixed binary static options (constant); 181 /* format: on */ 182 183 184 /* List of all recipients for a delivery/redistribution operation */ 185 186 dcl 1 recipients_list aligned based (recipients_list_ptr), 187 2 recipients (n_recipients) like recipient; 188 189 dcl ism_recipient_idxs (n_recipients) fixed binary based (ism_recipient_idxs_ptr); 190 191 dcl (recipients_list_ptr, ism_recipient_idxs_ptr, initial_stack_extension, stack_truncation_ptr) pointer; 192 dcl (n_recipients_allocated, n_recipients, n_unique_recipients, n_failed_recipients, recipient_idx) fixed binary; 193 dcl recipient_size fixed binary; /* size of a single recipient structure */ 194 195 196 /* List of mailing lists currently being expanded */ 197 198 dcl 1 mailing_list_data aligned based (mailing_list_data_ptr), 199 2 mls_ptr pointer, /* -> the actual mailing list */ 200 2 previous_data_ptr pointer; /* -> the previous entry in the list */ 201 202 dcl (current_mailing_list_data_ptr, mailing_list_data_ptr) pointer; 203 204 205 /* Mailbox cache: In order to improve the performance of callers of the log_message, save_message, and copy_message 206* entrypoints, these entrypoints never actually close their target mailboxes. Instead, they maintain a cache of the most 207* recently used mailboxes in order to avoid the expense of opening/closing a mailbox. Mailboxes are only closed by these 208* entrypoints when the cache is full and a mailbox not in the cache is referenced */ 209 210 dcl 1 transmit_cache aligned based (mlsys_data_$transmit_cache_ptr), 211 2 entries (0:15), 212 3 uid bit (36) aligned, /* UID of the mailbox in this slot of the cache */ 213 3 index fixed binary, /* ring-1 identifier of the mailbox */ 214 3 usage fixed binary, /* used to find the least recently used entry in the cache */ 215 3 pad bit (36); 216 217 218 /* Remaining declarations */ 219 220 dcl 1 local_mep aligned like message_envelope_parameter; 221 dcl 1 local_mrp aligned like message_redistribution_parameter; 222 223 dcl 1 result aligned based (result_ptr) like recipients_result_list.results; 224 dcl result_ptr pointer; 225 226 dcl 1 user_privileges aligned, 227 2 privileges unaligned like aim_template.privileges, 228 2 pad bit (18) unaligned; 229 230 dcl date_time_message_created fixed binary (71); 231 232 dcl (suppress_bcc_field_when_necessary, make_copies_with_bcc, make_copies_without_bcc) bit (1) aligned; 233 dcl (need_mailbox_message, need_forum_message, need_network_message) bit (1) aligned; 234 235 dcl (never_transmitted, have_result_code, part_of_this_address, partially_delivered, partially_queued) bit (1) aligned; 236 dcl delivery_aborted bit (1) aligned; /* phx18036 RL: flag aborted deliveries */ 237 238 dcl message_buffers (6) pointer; /* -> the possible local encodings of the message */ 239 dcl n_message_buffers_used fixed binary; 240 241 dcl last_temp_segment_ptr pointer; /* -> last temporary segment grabbed by this module */ 242 dcl last_temp_segment_used fixed binary (18); /* # of words occupied in that segment */ 243 244 dcl (mailbox_message_with_bcc_ptr, mailbox_message_without_bcc_ptr, forum_message_with_bcc_ptr, 245 forum_message_without_bcc_ptr, network_message_with_bcc_ptr, network_message_without_bcc_ptr) pointer; 246 dcl (mailbox_message_with_bcc_lth, mailbox_message_without_bcc_lth) fixed binary (24); 247 dcl (forum_message_with_bcc_lth, forum_message_without_bcc_lth, network_message_with_bcc_lth, 248 network_message_without_bcc_lth) fixed binary (21); 249 250 dcl (the_list_idx, the_address_idx, idx) fixed binary; 251 252 dcl 1 other_recipient aligned based (other_recipient_ptr) like recipient; 253 dcl other_recipient_ptr pointer; 254 dcl (delete_this_address, continue) bit (1) aligned; 255 dcl (first_recipient_idx, other_recipient_idx) fixed binary; 256 257 dcl (mailbox_idx, target_mailbox_idx, forum_idx) fixed binary; 258 dcl mailbox_mode bit (36) aligned; 259 dcl address_pathname character (200); 260 dcl address_dirname character (168); 261 dcl (address_ename, address_component) character (32); 262 dcl address_route_ptr pointer; 263 264 dcl 1 local_do aligned like deliver_options; /* for copy/log/save ... */ 265 dcl create_the_mailbox entry (character (*), character (*), fixed binary (35)) variable; 266 dcl (preserve_message_type, preserve_access_class, created) bit (1) aligned; 267 dcl (no_mailbox_code, mailbox_created_code) fixed binary (35); 268 269 /* format: off */ 270 dcl (FULL_FORMATTING initial (1), /* use the standard formatting procedure */ 271 COPY_FORMATTING initial (2), /* copy the in-mailbox canoncial text directly */ 272 REDISTRIBUTION_FORMATTING initial (3)) /* just format the redistribution */ 273 fixed binary static options (constant); 274 /* format: on */ 275 276 dcl STACK_EXTENSION fixed binary (18) static options (constant) initial (1024); 277 278 dcl sys_info$max_seg_size fixed binary (19) external; 279 280 /* format: off */ 281 dcl (error_table_$action_not_performed, error_table_$ai_restricted, error_table_$bad_subr_arg, error_table_$bigarg, 282 error_table_$entlong, error_table_$lock_wait_time_exceeded, error_table_$logical_volume_not_connected, 283 error_table_$logical_volume_not_defined, error_table_$messages_deferred, error_table_$messages_off, 284 error_table_$moderr, error_table_$no_append, error_table_$no_component, error_table_$no_info, error_table_$noentry, 285 error_table_$notalloc, error_table_$rqover, error_table_$smallarg, error_table_$unimplemented_version, 286 error_table_$wakeup_denied, forum_error_table_$meeting_bloat, forum_error_table_$not_in_search_list, 287 forum_error_table_$read_only, forum_error_table_$rqo, mlsys_et_$address_pathname_too_long_to_q, 288 mlsys_et_$cant_compute_route, mlsys_et_$cant_queue_mls_in_archive, mlsys_et_$duplicate_address, 289 mlsys_et_$empty_mailing_list, mlsys_et_$empty_message, mlsys_et_$errors_in_list_address, 290 mlsys_et_$foreign_address_too_long, mlsys_et_$forum_not_available, mlsys_et_$invalid_address, 291 mlsys_et_$ism_not_available, mlsys_et_$list_address_is_all_duplicates, mlsys_et_$logbox_created, 292 mlsys_et_$mailbox_full, mlsys_et_$message_delivered, mlsys_et_$message_not_sent, mlsys_et_$message_partially_sent, 293 mlsys_et_$message_queued, mlsys_et_$message_queued_and_delivered, mlsys_et_$message_too_large, 294 mlsys_et_$no_a_permission, mlsys_et_$no_forum_this_ring, mlsys_et_$no_logbox, mlsys_et_$no_mailbox, 295 mlsys_et_$no_mailing_list, mlsys_et_$no_recipients, mlsys_et_$no_savebox, mlsys_et_$rejected_by_foreign_system, 296 mlsys_et_$route_out_of_service, mlsys_et_$savebox_created, mlsys_et_$too_many_recipients, 297 mlsys_et_$unable_to_queue_mail, mlsys_et_$unknown_delivery_mode, mlsys_et_$unknown_queued_notify_mode, 298 mlsys_et_$unknown_queueing_mode) 299 fixed binary (35) external; 300 /* format: on */ 301 302 dcl aim_check_$equal entry (bit (72) aligned, bit (72) aligned) returns (bit (1) aligned); 303 dcl aim_check_$greater_or_equal entry (bit (72) aligned, bit (72) aligned) returns (bit (1) aligned); 304 dcl cu_$grow_stack_frame entry (fixed binary (18), pointer, fixed binary (35)); 305 dcl cu_$shrink_stack_frame entry (pointer, fixed binary (35)); 306 dcl forum_$close_forum entry (fixed binary, fixed binary (35)); 307 dcl forum_$enter_trans 308 entry (fixed binary, character (*), fixed binary, character (*), bit (1) aligned, fixed binary, 309 fixed binary (35)); 310 dcl forum_$open_forum entry (character (*), character (*), fixed binary, fixed binary (35)); 311 dcl forum_$real_forum_limits 312 entry (fixed binary, fixed binary, fixed binary, fixed binary, fixed binary, fixed binary, bit (36) aligned, 313 fixed binary (35)); 314 dcl get_authorization_ entry () returns (bit (72) aligned); 315 dcl get_privileges_ entry () returns (bit (36) aligned); 316 dcl get_ring_ entry () returns (fixed binary (3)); 317 dcl get_system_free_area_ entry () returns (ptr); 318 dcl initiate_file_$component 319 entry (character (*), character (*), character (*), bit (*), pointer, fixed binary (24), fixed binary (35)); 320 dcl mailbox_$close entry (fixed binary, fixed binary (35)); 321 dcl mailbox_$get_mode_file entry (character (*), character (*), bit (36) aligned, fixed binary (35)); 322 dcl mailbox_$get_mode_index entry (fixed binary, bit (36) aligned, fixed binary (35)); 323 dcl mailbox_$get_uid_file entry (character (*), character (*), bit (36) aligned, fixed binary (35)); 324 dcl mailbox_$get_uid_index entry (fixed binary, bit (36) aligned, fixed binary (35)); 325 dcl mailbox_$open entry (character (*), character (*), fixed binary, fixed binary (35)); 326 dcl mailbox_$wakeup_aim_add_index 327 entry (fixed binary, pointer, fixed binary (24), bit (36) aligned, bit (72) aligned, bit (72) aligned, 328 fixed binary (35)); 329 dcl mlsys_address_list_mgr_$add_address entry (pointer, pointer, character (8), fixed binary (35)); 330 dcl mlsys_address_list_mgr_$create_read_only_address_list entry (character (8), pointer, fixed binary (35)); 331 dcl mlsys_address_list_mgr_$delete_address entry (pointer, fixed binary, fixed binary (35)); 332 dcl mlsys_address_list_mgr_$free_address_list entry (pointer, fixed binary (35)); 333 dcl mlsys_address_list_mgr_$increment_reference_count entry (pointer); 334 dcl mlsys_address_list_mgr_$merge_address_lists entry (pointer, pointer, bit (1) aligned, pointer, fixed binary (35)); 335 dcl mlsys_address_list_mgr_$verify_address_list entry (pointer, fixed binary (35)) returns (bit (1) aligned); 336 dcl mlsys_address_list_mgr_$verify_writeable_address_list entry (pointer, fixed binary (35)) returns (bit (1) aligned); 337 dcl mlsys_address_mgr_$check_if_actually_local entry (pointer); 338 dcl mlsys_address_mgr_$compare_addresses entry (pointer, pointer, fixed binary (35)) returns (bit (1) aligned); 339 dcl mlsys_address_mgr_$decrement_reference_count entry (pointer); 340 dcl mlsys_address_mgr_$decrement_reference_count_no_free entry (pointer); 341 dcl mlsys_address_mgr_$expand_list_address entry (pointer, character (8), pointer, fixed binary (35)); 342 dcl mlsys_address_mgr_$free_address entry (pointer, fixed binary (35)); 343 dcl mlsys_address_mgr_$get_address_pathname 344 entry (pointer, character (*), character (*), character (*), fixed binary (35)); 345 dcl mlsys_address_mgr_$get_address_string entry (pointer, character (*) varying, fixed binary (35)); 346 dcl mlsys_address_mgr_$get_address_type entry (pointer, fixed binary, fixed binary (35)); 347 dcl mlsys_address_mgr_$get_mail_table_address entry (pointer, pointer, fixed binary (35)); 348 dcl mlsys_address_mgr_$increment_reference_count entry (pointer); 349 dcl mlsys_address_mgr_$verify_address entry (pointer, fixed binary (35)) returns (bit (1) aligned); 350 dcl mlsys_address_route_mgr_$compute_route entry (pointer, pointer, fixed binary (35)); 351 dcl mlsys_address_route_mgr_$free_address_route entry (pointer); 352 dcl mlsys_format_$format_address_for_ism 353 entry (character (*) varying, pointer, character (*) varying, character (*) varying, fixed binary (35)); 354 dcl mlsys_format_$format_canon_redistributed_msg 355 entry (pointer, pointer, pointer, pointer, fixed binary (19), fixed binary (19), fixed binary (35)); 356 dcl mlsys_format_$format_message_for_forum 357 entry (pointer, pointer, fixed binary (21), fixed binary (21), fixed binary (35)); 358 dcl mlsys_format_$format_message_for_mailbox 359 entry (pointer, pointer, fixed binary (19), fixed binary (19), fixed binary (35)); 360 dcl mlsys_format_$format_message_for_rfc822_network 361 entry (pointer, pointer, fixed binary (21), fixed binary (21), fixed binary (35)); 362 dcl mlsys_mailbox_mgr_$get_message_mf_if_canonical entry (pointer, pointer, pointer, fixed binary (35)); 363 dcl mlsys_mailbox_utils_$create_logbox entry (fixed binary (35)); 364 dcl mlsys_mailbox_utils_$create_savebox entry (character (*), character (*), fixed binary (35)); 365 dcl mlsys_mailer_ entry (pointer, pointer, fixed binary (21)); 366 dcl mlsys_message_id_mgr_$encode_local_id entry (fixed binary (71), bit (72) aligned); 367 dcl mlsys_message_mgr_$add_redistribution entry (pointer, pointer, fixed binary, fixed binary (35)); 368 dcl mlsys_message_mgr_$delete_redistribution entry (pointer, fixed binary, fixed binary (35)); 369 dcl mlsys_message_mgr_$replace_message_envelope entry (pointer, pointer, fixed binary (35)); 370 dcl mlsys_message_mgr_$verify_im_message entry (pointer, pointer, fixed binary (35)) returns (bit (1) aligned); 371 dcl mlsys_message_mgr_$verify_message entry (pointer, fixed binary (71), fixed binary (35)) returns (bit (1) aligned); 372 dcl mlsys_message_mgr_$verify_new_message entry (pointer, fixed binary (71), fixed binary (35)) 373 returns (bit (1) aligned); 374 dcl mlsys_misc_utils_$free_delivery_results entry (pointer, fixed binary (35)); 375 dcl mlsys_psp_$forum_not_available entry () returns (bit (1) aligned); 376 dcl mlsys_psp_$ism_not_available entry () returns (bit (1) aligned); 377 dcl mlsys_storage_mgr_$get_temp_segment entry (pointer, fixed binary (35)); 378 dcl mlsys_storage_mgr_$release_temp_segment entry (pointer, fixed binary (35)); 379 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 380 dcl terminate_file_ entry (pointer, fixed binary (24), bit (*), fixed binary (35)); 381 382 dcl (area, cleanup, record_quota_overflow) condition; 383 384 dcl (addr, addwordno, baseno, clock, currentsize, dimension, divide, hbound, index, lbound, length, mod, null, reverse, 385 rtrim, size, stackframeptr, string, substr, verify, wordno, unspec) builtin; 386 387 /* Transmits a new message to the specified list of recipients */ 388 389 deliver_message: 390 entry (P_message_ptr, P_recipients_info_ptr, P_deliver_options_ptr, P_code); 391 392 if ^mlsys_message_mgr_$verify_new_message (P_message_ptr, date_time_message_created, P_code) then return; 393 message_ptr = copy_ptr (P_message_ptr); 394 395 call verify_recipients_info_and_deliver_options (P_code); 396 if P_code ^= 0 then return; 397 398 call initialize_message_delivery ("1"b); /* for cleanup handler ... */ 399 400 on condition (cleanup) 401 begin; 402 call cleanup_message_delivery (); 403 call mlsys_misc_utils_$free_delivery_results (recipients_info_ptr, (0)); 404 end; 405 406 call complete_new_message (); /* supply values for all necessary fields */ 407 408 suppress_bcc_field_when_necessary = ^is_empty_list (saved_message_data.bcc); 409 /* no bcc field in copy to primary/secondary recipients */ 410 411 go to TRANSMIT_MESSAGE; /* get the work done */ 412 413 414 /* Redistributes an in-mailbox message to the specified list of recipients while optionally adding a comment */ 415 416 redistribute_message: 417 entry (P_message_ptr, P_redistribution_comment, P_recipients_info_ptr, P_deliver_options_ptr, P_code); 418 419 if ^mlsys_message_mgr_$verify_im_message (P_message_ptr, (null ()), P_code) then return; 420 message_ptr = copy_ptr (P_message_ptr); 421 422 call verify_recipients_info_and_deliver_options (P_code); 423 if P_code ^= 0 then return; 424 425 call initialize_message_delivery ("1"b); /* for cleanup handler ... */ 426 427 on condition (cleanup) 428 begin; 429 call cleanup_message_delivery (); 430 call mlsys_misc_utils_$free_delivery_results (recipients_info_ptr, (0)); 431 end; 432 433 message.access_class = get_authorization_ (); /* redistribution changes the access class */ 434 435 call add_redistribution (); /* add a redistribution to the message */ 436 437 suppress_bcc_field_when_necessary = "0"b; /* always include the message's bcc field */ 438 439 /* Common code for the deliver and redistribute operations */ 440 441 TRANSMIT_MESSAGE: 442 if ^aim_check_$greater_or_equal (message.access_class, get_authorization_ ()) then do; 443 /*** Need ring-1 system privilege to send messages "down" */ 444 string (user_privileges) = get_privileges_ (); 445 if ^user_privileges.ring1 then do; /* ... all deliveries would fail so make it a global error */ 446 P_code = error_table_$ai_restricted; 447 go to RETURN_FROM_TRANSMIT_WITH_FATAL_ERROR; 448 end; 449 end; 450 451 452 /* Build the list of recipients for this message and verify that mail can be delivered/queued for each recipient */ 453 454 delivery_aborted = "1"b; /* until proven otherwise */ 455 never_transmitted = "1"b; /* until proven otherwise */ 456 457 need_mailbox_message, /* haven't spotted any of these type of recipients yet */ 458 need_forum_message, need_network_message = "0"b; 459 make_copies_with_bcc, /* haven't seen blind recipients yet */ 460 make_copies_without_bcc = "0"b; /* also have't seen primary/secondary recipients yet */ 461 462 do the_list_idx = 1 to recipients_info.n_lists; 463 if ^is_empty_list (recipients_info.lists (the_list_idx).address_list_ptr) then do; 464 address_list_ptr = recipients_info.lists (the_list_idx).address_list_ptr; 465 do the_address_idx = 1 to address_list.n_addresses; 466 call validate_or_expand_address (address_list.addresses (the_address_idx), "1"b, "0"b, "1"b, 467 "0"b); 468 end; 469 end; 470 end; 471 472 if n_recipients = 0 then do; /* all lists were empty or nothing but circular lists */ 473 P_code = mlsys_et_$no_recipients; 474 go to RETURN_FROM_TRANSMIT_WITH_FATAL_ERROR; 475 end; 476 477 if baseno (recipients_list_ptr) = baseno (stackframeptr ()) then do; 478 stack_truncation_ptr = /* ... release the unused part of the stack extension */ 479 addwordno (initial_stack_extension, 480 ((n_recipients * recipient_size) + 16 - mod ((n_recipients * recipient_size), 16))); 481 call cu_$shrink_stack_frame (stack_truncation_ptr, (0)); 482 end; 483 else call cu_$shrink_stack_frame (initial_stack_extension, (0)); 484 /* not enough room on the stack: free up the space */ 485 486 487 /* Mark duplicate recipients and then count the number of unique and/or failing recipients: The number of failing 488* recipients may be increased later by transient errors which are transformed into fatal errors */ 489 490 call mark_duplicate_recipients (); 491 492 n_unique_recipients, n_failed_recipients = 0; 493 494 do recipient_idx = 1 to n_recipients; 495 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 496 if ^recipient.duplicate then do; /* a unique recipient ... */ 497 n_unique_recipients = n_unique_recipients + 1; 498 if recipient.fatal_error then n_failed_recipients = n_failed_recipients + 1; 499 end; /* ... don't count fatal errors more than once */ 500 end; 501 502 if deliver_options.abort & (n_failed_recipients > 0) then go to SETUP_RESULTS_LISTS; 503 /* "stop" here if caller wants to abort on fatal errors */ 504 505 /* Prepare whatever copies of the message will be needed for delivery */ 506 507 if need_mailbox_message & make_copies_with_bcc then do; 508 /*** Need a copy for transmision to mailboxes */ 509 call prepare_message_for_mailbox ("1"b, mailbox_message_with_bcc_ptr, mailbox_message_with_bcc_lth, code); 510 if code ^= 0 then do; 511 /*** Couldn't construct the message: mark this as a fatal error for all appropriate recipients */ 512 do recipient_idx = 1 to n_recipients; 513 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 514 if ^recipient.duplicate & ^recipient.fatal_error & (recipient.type = MAILBOX_RECIPIENT) 515 & ^recipient.use_copy_without_bcc then do; 516 n_failed_recipients = n_failed_recipients + 1; 517 recipient.fatal_error = "1"b; 518 recipient.code = code; 519 if recipient.mailbox_idx ^= 0 then do; 520 call mailbox_$close (recipient.mailbox_idx, (0)); 521 recipient.mailbox_idx = 0; 522 end; 523 end; 524 end; 525 end; 526 end; 527 528 if need_mailbox_message & make_copies_without_bcc then 529 if is_empty_list (saved_message_data.bcc) & make_copies_with_bcc then do; 530 /*** No bcc field: both copies are identical */ 531 mailbox_message_without_bcc_ptr = mailbox_message_with_bcc_ptr; 532 mailbox_message_without_bcc_lth = mailbox_message_with_bcc_lth; 533 end; 534 else do; 535 /*** Need a copy without the bcc field for transmission to primary and secondary recipients */ 536 call prepare_message_for_mailbox ("0"b, mailbox_message_without_bcc_ptr, 537 mailbox_message_without_bcc_lth, code); 538 if code ^= 0 then do; 539 do recipient_idx = 1 to n_recipients; 540 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 541 if ^recipient.duplicate & ^recipient.fatal_error & (recipient.type = MAILBOX_RECIPIENT) 542 & recipient.use_copy_without_bcc then do; 543 n_failed_recipients = n_failed_recipients + 1; 544 recipient.fatal_error = "1"b; 545 recipient.code = code; 546 if recipient.mailbox_idx ^= 0 then do; 547 call mailbox_$close (recipient.mailbox_idx, (0)); 548 recipient.mailbox_idx = 0; 549 end; 550 end; 551 end; 552 end; 553 end; 554 555 if need_forum_message & make_copies_with_bcc then do; 556 /*** Need a copy for transmission to forum meetings */ 557 call prepare_message_for_forum ("1"b, forum_message_with_bcc_ptr, forum_message_with_bcc_lth, code); 558 if code ^= 0 then do; 559 do recipient_idx = 1 to n_recipients; 560 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 561 if ^recipient.duplicate & ^recipient.fatal_error & (recipient.type = FORUM_RECIPIENT) 562 & ^recipient.use_copy_without_bcc then do; 563 n_failed_recipients = n_failed_recipients + 1; 564 recipient.fatal_error = "1"b; 565 recipient.code = code; 566 if recipient.forum_idx ^= 0 then do; 567 call forum_$close_forum (recipient.forum_idx, (0)); 568 recipient.forum_idx = 0; 569 end; 570 end; 571 end; 572 end; 573 end; 574 575 if need_forum_message & make_copies_without_bcc then 576 if is_empty_list (saved_message_data.bcc) & make_copies_with_bcc then do; 577 /*** No bcc field: both copies are identical */ 578 forum_message_without_bcc_ptr = forum_message_with_bcc_ptr; 579 forum_message_without_bcc_lth = forum_message_with_bcc_lth; 580 end; 581 else do; 582 /*** Need a copy without the bcc field for transmission to primary and secondary recipients */ 583 call prepare_message_for_forum ("0"b, forum_message_without_bcc_ptr, forum_message_without_bcc_lth, 584 code); 585 if code ^= 0 then do; 586 do recipient_idx = 1 to n_recipients; 587 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 588 if ^recipient.duplicate & ^recipient.fatal_error & (recipient.type = FORUM_RECIPIENT) 589 & recipient.use_copy_without_bcc then do; 590 n_failed_recipients = n_failed_recipients + 1; 591 recipient.fatal_error = "1"b; 592 recipient.code = code; 593 if recipient.forum_idx ^= 0 then do; 594 call forum_$close_forum (recipient.forum_idx, (0)); 595 recipient.forum_idx = 0; 596 end; 597 end; 598 end; 599 end; 600 end; 601 602 if need_network_message & make_copies_with_bcc then do; 603 /*** Need a copy for transmission to one or more networks */ 604 call prepare_message_for_network ("1"b, network_message_with_bcc_ptr, network_message_with_bcc_lth, code); 605 if code ^= 0 then do; 606 do recipient_idx = 1 to n_recipients; 607 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 608 if ^recipient.duplicate & ^recipient.fatal_error & (recipient.type = NETWORK_RECIPIENT) 609 & ^recipient.use_copy_without_bcc then do; 610 n_failed_recipients = n_failed_recipients + 1; 611 recipient.fatal_error = "1"b; 612 recipient.code = code; 613 end; 614 end; 615 end; 616 end; 617 618 if need_network_message & make_copies_without_bcc then 619 if is_empty_list (saved_message_data.bcc) & make_copies_with_bcc then do; 620 /*** No bcc field: both copies are identical */ 621 network_message_without_bcc_ptr = network_message_with_bcc_ptr; 622 network_message_without_bcc_lth = network_message_with_bcc_lth; 623 end; 624 else do; 625 /*** Need a copy without the bcc field for transmission to primary and secondary recipients */ 626 call prepare_message_for_network ("0"b, network_message_without_bcc_ptr, 627 network_message_without_bcc_lth, code); 628 if code ^= 0 then do; 629 do recipient_idx = 1 to n_recipients; 630 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 631 if ^recipient.duplicate & ^recipient.fatal_error & (recipient.type = NETWORK_RECIPIENT) 632 & recipient.use_copy_without_bcc then do; 633 n_failed_recipients = n_failed_recipients + 1; 634 recipient.fatal_error = "1"b; 635 recipient.code = code; 636 end; 637 end; 638 end; 639 end; 640 641 if deliver_options.abort & (n_failed_recipients > 0) then go to SETUP_RESULTS_LISTS; 642 /* "stop" here if caller wants to abort on fatal errors */ 643 644 delivery_aborted = "0"b; /* wasn't aborted, attempting delivery now */ 645 646 /* All pre-delivery checks have been made: attempt local deliveries and convert transient errors into queuing requests if 647* appropriate */ 648 649 do recipient_idx = 1 to n_recipients; 650 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 651 652 if ^recipient.duplicate & ^recipient.fatal_error & ^recipient.to_queue then do; 653 654 if recipient.mailbox_idx ^= 0 then do; 655 /*** Recipient goes to a mailbox */ 656 if recipient.use_copy_without_bcc then 657 call add_message_to_mailbox (recipient.mailbox_idx, mailbox_message_without_bcc_ptr, 658 mailbox_message_without_bcc_lth, recipient.no_acknowledge, recipient.code); 659 else call add_message_to_mailbox (recipient.mailbox_idx, mailbox_message_with_bcc_ptr, 660 mailbox_message_with_bcc_lth, recipient.no_acknowledge, recipient.code); 661 if recipient.code = 0 then /* success */ 662 recipient.code = mlsys_et_$message_delivered; 663 else do; /* some form of failure */ 664 recipient.fatal_error, recipient.transient_error, recipient.warning = "0"b; 665 if (recipient.code = error_table_$lock_wait_time_exceeded) 666 | (recipient.code = error_table_$rqover) | (recipient.code = mlsys_et_$mailbox_full) 667 | (recipient.code = error_table_$logical_volume_not_defined) 668 | (recipient.code = error_table_$logical_volume_not_connected) then 669 recipient.transient_error = "1"b; 670 else if (deliver_options.delivery_mode = INTERACTIVE_DELIVERY) 671 & ((recipient.code = error_table_$messages_off) 672 | (recipient.code = error_table_$messages_deferred) 673 | (recipient.code = error_table_$wakeup_denied) 674 | (recipient.code = error_table_$no_info)) then 675 recipient.warning = "1"b; 676 else do; 677 recipient.fatal_error = "1"b; 678 n_failed_recipients = n_failed_recipients + 1; 679 end; 680 end; 681 end; 682 683 else if recipient.forum_idx ^= 0 then do; 684 /*** Recipient goes to a forum meeting */ 685 if recipient.use_copy_without_bcc then 686 call add_message_to_forum (recipient.forum_idx, forum_message_without_bcc_ptr, 687 forum_message_without_bcc_lth, recipient.code); 688 else call add_message_to_forum (recipient.forum_idx, forum_message_with_bcc_ptr, 689 forum_message_with_bcc_lth, recipient.code); 690 if recipient.code = 0 then /* success */ 691 recipient.code = mlsys_et_$message_delivered; 692 else do; /* some form of failure */ 693 recipient.fatal_error, recipient.transient_error, recipient.warning = "0"b; 694 if (recipient.code = error_table_$rqover) 695 | (recipient.code = error_table_$logical_volume_not_defined) 696 | (recipient.code = error_table_$logical_volume_not_connected) 697 | (recipient.code = forum_error_table_$meeting_bloat) then 698 recipient.transient_error = "1"b; 699 else do; 700 recipient.fatal_error = "1"b; 701 n_failed_recipients = n_failed_recipients + 1; 702 end; 703 end; 704 end; 705 706 if recipient.transient_error then do; 707 /*** A transient error occured ... */ 708 recipient.transient_error = "0"b; 709 if mlsys_psp_$ism_not_available () then go to TREAT_TRANSIENT_LOCAL_ERROR_AS_FATAL; 710 /* no inter-system mailer to queue it: it's fatal, period */ 711 712 else if deliver_options.queueing_mode >= QUEUE_WHEN_NEEDED then do; 713 /*** ... and caller requests that they be queued instead of failing */ 714 call mlsys_address_mgr_$get_address_pathname (recipient.address_ptr, address_dirname, 715 address_ename, address_component, (0)); 716 if address_component ^= "" then go to TREAT_TRANSIENT_LOCAL_ERROR_AS_FATAL; 717 address_pathname = pathname_ (address_dirname, address_ename); 718 recipient.foreign_address = rtrim (address_pathname); 719 if recipient.foreign_address ^= address_pathname then 720 go to TREAT_TRANSIENT_LOCAL_ERROR_AS_FATAL; 721 recipient.to_queue = "1"b; 722 if recipient.code = error_table_$lock_wait_time_exceeded then 723 recipient.explanation = "the mailbox is temporarily locked"; 724 else if recipient.code = mlsys_et_$mailbox_full then 725 recipient.explanation = "the mailbox is temporarily full"; 726 else if recipient.code = error_table_$rqover then 727 recipient.explanation = "of record quota overflow"; 728 else if recipient.code = error_table_$logical_volume_not_defined then 729 recipient.explanation = "its logical volume is not mounted"; 730 else if recipient.code = error_table_$logical_volume_not_connected then 731 recipient.explanation = "its logical volume is not attached"; 732 else /*** if recipient.code = forum_error_table_$meeting_bloat then */ 733 recipient.explanation = "the meeting is temporarily full"; 734 recipient.code = 0; /* ... will be trying again shortly */ 735 end; 736 737 else do; 738 /*** ... and caller requests that they be considered fatal */ 739 TREAT_TRANSIENT_LOCAL_ERROR_AS_FATAL: 740 recipient.fatal_error = "1"b; 741 n_failed_recipients = n_failed_recipients + 1; 742 end; 743 end; 744 745 if ^recipient.fatal_error & (length (recipient.explanation) = 0) then never_transmitted = "0"b; 746 end; /* record if it's been sent */ 747 end; 748 749 750 /* Setup data required for use of the interim inter-system mailer */ 751 752 mlsys_mailer_data_n_recipients = n_recipients; 753 if size (mlsys_mailer_data) <= STACK_EXTENSION then 754 call cu_$grow_stack_frame (STACK_EXTENSION, mlsys_mailer_data_ptr, (0)); 755 else do; /* need a temporary segment */ 756 call mlsys_storage_mgr_$get_temp_segment (mlsys_mailer_data_ptr, code); 757 if code ^= 0 then do; 758 UNABLE_TO_GET_ISM_TEMP_SPACE: 759 do recipient_idx = 1 to n_recipients; 760 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 761 if ^recipient.duplicate then /* ... don't count it twice ... */ 762 if recipient.code = 0 then do;/* ... not processed yet => it needed the mailer */ 763 recipient.fatal_error = "1"b; 764 recipient.code = code; 765 n_failed_recipients = n_failed_recipients + 1; 766 end; 767 end; 768 go to SETUP_RESULTS_LISTS; 769 end; 770 end; 771 772 if size (ism_recipient_idxs) <= STACK_EXTENSION then 773 call cu_$grow_stack_frame (STACK_EXTENSION, ism_recipient_idxs_ptr, (0)); 774 else do; /* need a temporary segment */ 775 call mlsys_storage_mgr_$get_temp_segment (ism_recipient_idxs_ptr, code); 776 if code ^= 0 then go to UNABLE_TO_GET_ISM_TEMP_SPACE; 777 end; 778 779 780 /* Attempt immediate foreign deliveries and convert transient errors into queueing requests if appropriate */ 781 782 if need_network_message then do; /* ... only if there are some foreign addresses */ 783 if make_copies_with_bcc then 784 call deliver_by_ism ("0"b, network_message_with_bcc_ptr, network_message_with_bcc_lth); 785 if make_copies_without_bcc then 786 call deliver_by_ism ("1"b, network_message_without_bcc_ptr, network_message_without_bcc_lth); 787 end; 788 789 790 /* Queue all appropriate recipients */ 791 792 if need_mailbox_message then do; /* mailbox recipients ... */ 793 if make_copies_with_bcc then 794 call queue_via_ism (MAILBOX_RECIPIENT, "0"b, addr (mailbox_message_with_bcc_ptr -> mail_format.text), 795 length (mailbox_message_with_bcc_ptr -> mail_format.text)); 796 if make_copies_without_bcc then 797 call queue_via_ism (MAILBOX_RECIPIENT, "1"b, 798 addr (mailbox_message_without_bcc_ptr -> mail_format.text), 799 length (mailbox_message_without_bcc_ptr -> mail_format.text)); 800 end; 801 802 if need_forum_message then do; /* forum recipients ... */ 803 if make_copies_with_bcc then 804 call queue_via_ism (FORUM_RECIPIENT, "0"b, forum_message_with_bcc_ptr, forum_message_with_bcc_lth); 805 if make_copies_without_bcc then 806 call queue_via_ism (FORUM_RECIPIENT, "1"b, forum_message_without_bcc_ptr, 807 forum_message_without_bcc_lth); 808 end; 809 810 if need_network_message then do; /* foreign recipients ... */ 811 if make_copies_with_bcc then 812 call queue_via_ism (NETWORK_RECIPIENT, "0"b, network_message_with_bcc_ptr, 813 network_message_with_bcc_lth); 814 if make_copies_without_bcc then 815 call queue_via_ism (NETWORK_RECIPIENT, "1"b, network_message_without_bcc_ptr, 816 network_message_without_bcc_lth); 817 end; 818 819 820 /* All deliveries and queueings have been completed: create the lists of results and fill them in */ 821 822 SETUP_RESULTS_LISTS: 823 recipients_info.n_recipients = n_recipients; /* return global information */ 824 recipients_info.n_unique_recipients = n_unique_recipients; 825 recipients_info.n_failed_recipients = n_failed_recipients; 826 827 on condition (area) 828 begin; /* can't allocate all the result lists: non-fatal error */ 829 go to RETURN_FROM_TRANSMIT; 830 end; 831 832 833 expanded_recipients_result_list_n_entries = 0; /* no need to create this list yet */ 834 835 do the_list_idx = 1 to recipients_info.n_lists; 836 837 if ^is_empty_list (recipients_info.lists (the_list_idx).address_list_ptr) then do; 838 address_list_ptr = recipients_info.lists (the_list_idx).address_list_ptr; 839 840 recipients_result_list_n_addresses = address_list.n_addresses; 841 allocate recipients_result_list in (users_area) set (recipients_result_list_ptr); 842 recipients_info.lists (the_list_idx).recipients_result_list_ptr = recipients_result_list_ptr; 843 844 do the_address_idx = 1 to address_list.n_addresses; 845 846 result_ptr = addr (recipients_result_list.results (the_address_idx)); 847 result.code, result.expanded_list_info, result.duplicate_info = 0; 848 result.explanation = ""; 849 have_result_code = "0"b; 850 851 /*** Check out all recipients until we've determined the result for this address */ 852 do recipient_idx = 1 to n_recipients while (^have_result_code); 853 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 854 855 if (recipient.list_idx = the_list_idx) & (recipient.address_idx = the_address_idx) then do; 856 have_result_code = "1"b; /* ... stop the outer loop */ 857 858 if recipient.top_level then 859 /*** Address corresponds directly to this recipient: copy the result */ 860 if recipient.duplicate then do; 861 /*** ... it's a duplicate of a prior recipient */ 862 result.code = mlsys_et_$duplicate_address; 863 result.list_idx = 864 recipients_list.recipients (recipient.duplicate_idx).list_idx; 865 result.address_idx = 866 recipients_list.recipients (recipient.duplicate_idx).address_idx; 867 end; 868 else do; 869 /*** ... not a duplicate: get the actual result data */ 870 result.code = recipient.code; 871 result.explanation = recipient.explanation; 872 end; 873 874 else do; 875 /*** Address corresponds to several recipients */ 876 if recipient.duplicate then 877 result.code = mlsys_et_$list_address_is_all_duplicates; 878 part_of_this_address = "1"b; 879 partially_delivered, partially_queued = "0"b; 880 do while (part_of_this_address & (recipient_idx <= n_recipients)); 881 if ^recipient.duplicate then do; 882 if result.code = mlsys_et_$list_address_is_all_duplicates then 883 result.code = 0; 884 if recipient.fatal_error then 885 result.code = mlsys_et_$errors_in_list_address; 886 else if recipient.code = mlsys_et_$message_queued then 887 partially_queued = "1"b; 888 else partially_delivered = "1"b; 889 if recipient.fatal_error | recipient.warning 890 | (length (recipient.explanation) > 0) then do; 891 expanded_recipients_result_list_n_entries = 892 expanded_recipients_result_list_n_entries + 1; 893 if result.first_entry_idx = 0 then 894 result.first_entry_idx = 895 expanded_recipients_result_list_n_entries; 896 result.n_entries = result.n_entries + 1; 897 end; 898 end; 899 recipient_idx = recipient_idx + 1; 900 if recipient_idx <= n_recipients then do; 901 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 902 part_of_this_address = 903 (recipient.list_idx = the_list_idx) 904 & (recipient.address_idx = the_address_idx); 905 end; 906 end; 907 908 if result.code = 0 then 909 if delivery_aborted then result.code = mlsys_et_$message_not_sent; 910 /* phx18036 RL: indicate delivery aborted */ 911 else if partially_delivered & partially_queued then 912 result.code = mlsys_et_$message_queued_and_delivered; 913 else if partially_delivered then result.code = mlsys_et_$message_delivered; 914 else /*** if partially_queued then */ 915 result.code = mlsys_et_$message_queued; 916 end; 917 end; 918 end; 919 end; 920 end; 921 end; 922 923 924 /* Construct the expanded recipients result list to contain details on any warning, fatal errors, or transient errors 925* resulting in queueing for all recipients which are the expansion of supplied list addresses */ 926 927 if expanded_recipients_result_list_n_entries > 0 then do; 928 929 allocate expanded_recipients_result_list in (users_area) set (expanded_recipients_result_list_ptr); 930 recipients_info.expanded_recipients_result_list_ptr = expanded_recipients_result_list_ptr; 931 932 idx = 0; /* haven't put anything in the list yet */ 933 934 do recipient_idx = 1 to n_recipients; 935 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 936 937 if ^recipient.top_level then /* a candidate */ 938 if recipient.warning | recipient.fatal_error | (length (recipient.explanation) > 0) then do; 939 idx = idx + 1; 940 expanded_recipients_result_list.entries (idx).address_ptr = recipient.address_ptr; 941 expanded_recipients_result_list.entries (idx).code = recipient.code; 942 expanded_recipients_result_list.entries (idx).list_idx = recipient.list_idx; 943 expanded_recipients_result_list.entries (idx).address_idx = recipient.address_idx; 944 expanded_recipients_result_list.entries (idx).explanation = recipient.explanation; 945 call mlsys_address_mgr_$decrement_reference_count_no_free (recipient.address_ptr); 946 end; /* ... prevent the address from being freed prematurely */ 947 end; 948 end; 949 950 951 /* Control arrives here after successfull (or almost successfull) transmission */ 952 953 RETURN_FROM_TRANSMIT: 954 call cleanup_message_delivery (); /* flush temporaries and restore original message state */ 955 956 if recipients_info.n_failed_recipients = 0 then /* complete success */ 957 P_code = 0; 958 959 else if never_transmitted then /* never attempted a transmission */ 960 P_code = mlsys_et_$message_not_sent; 961 962 else P_code = mlsys_et_$message_partially_sent; 963 964 return; 965 966 967 /* Control arrives here iff an error fatal to the entire transmission process is detected while validating/expanding 968* addresses: The validate_or_expand_address internal procedure has already set P_code */ 969 970 RETURN_FROM_TRANSMIT_WITH_FATAL_ERROR: 971 call cleanup_message_delivery (); 972 if recipients_info_ptr ^= null () then call mlsys_misc_utils_$free_delivery_results (recipients_info_ptr, (0)); 973 974 return; 975 976 /* Eliminates all duplicate addresses from the given address lists: This function is implemented here rather than in 977* mlsys_address_list_mgr_ as this module is designed to open all mailboxes/forums in a given set of address lists only 978* once. Thus, while it is still necessary to do O(N^2) comparisons (where N is the total number of addresses in the 979* lists), only O(N) mailbox/forum openings and closings are done; as the open/close operations are the majority of the 980* expense of address comparison, this reduction from O(N^2) to O(N) openings/closing represents a substantial performance 981* improvement over the previous version of this function in the mail system */ 982 983 eliminate_duplicate_addrs: /* ... any types of address lists */ 984 entry (P_address_lists, P_code); 985 986 do the_list_idx = lbound (P_address_lists, 1) to hbound (P_address_lists, 1); 987 if P_address_lists (the_list_idx) ^= null () then 988 if ^mlsys_address_list_mgr_$verify_address_list (P_address_lists (the_list_idx), P_code) then return; 989 end; 990 991 go to ELIMINATE_DUPLICATE_ADDRS_COMMON; 992 993 994 eliminate_duplicate_addrs_write: /* ... writeable by the user: target of the user-ring gate */ 995 entry (P_address_lists, P_code); 996 997 do the_list_idx = lbound (P_address_lists, 1) to hbound (P_address_lists, 1); 998 if P_address_lists (the_list_idx) ^= null () then 999 if ^mlsys_address_list_mgr_$verify_writeable_address_list (P_address_lists (the_list_idx), P_code) 1000 then 1001 return; 1002 end; 1003 1004 1005 ELIMINATE_DUPLICATE_ADDRS_COMMON: 1006 message_ptr = null (); /* no message here */ 1007 1008 call initialize_message_delivery ("1"b); /* for cleanup handler ... */ 1009 recipients_info_ptr = null (); /* ... in case validate_or_expand_address gets fatal errors */ 1010 1011 on condition (cleanup) call cleanup_message_delivery (); 1012 1013 deliver_options_ptr = addr (local_do); /* for validate_or_expand_address */ 1014 local_do.delivery_mode = ORDINARY_DELIVERY; /* ... don't want to check if we can send wakeups */ 1015 local_do.queueing_mode = NEVER_QUEUE; /* ... insures we determine address routes immediately */ 1016 string (local_do.flags) = ""b; 1017 1018 suppress_bcc_field_when_necessary = "0"b; /* no need to go to that extra overhead */ 1019 1020 1021 /* Build the list of all addresses in the input address lists, open all referenced mailboxes/forums, and mark the 1022* duplicate addresses for deletion */ 1023 1024 do the_list_idx = lbound (P_address_lists, 1) to hbound (P_address_lists, 1); 1025 if ^is_empty_list (P_address_lists (the_list_idx)) then do; 1026 address_list_ptr = P_address_lists (the_list_idx); 1027 do the_address_idx = 1 to address_list.n_addresses; 1028 call validate_or_expand_address (address_list.addresses (the_address_idx), "1"b, "0"b, "0"b, 1029 "0"b); 1030 end; /* don't need expansion of mailing lists ... */ 1031 end; /* ... in order to eliminate duplicates */ 1032 end; 1033 1034 if baseno (recipients_list_ptr) = baseno (stackframeptr ()) then do; 1035 stack_truncation_ptr = /* ... release the unused part of the stack extension */ 1036 addwordno (initial_stack_extension, 1037 ((n_recipients * recipient_size) + 16 - mod ((n_recipients * recipient_size), 16))); 1038 call cu_$shrink_stack_frame (stack_truncation_ptr, (0)); 1039 end; 1040 else call cu_$shrink_stack_frame (initial_stack_extension, (0)); 1041 /* not enough room on the stack: free up the space */ 1042 1043 call mark_duplicate_recipients (); 1044 1045 1046 /* Eliminate the duplicate addresses from the input lists: This operation is done while scanning the recipients_list 1047* structure backwards because said structure contains the indeces of the addresses within the original lists. If scanned 1048* forward, as addresses were deleted, the subsequent indeces for that list would become invalid; by scanning backwards, 1049* addresses are deleted from the end first and no indeces are invalidated */ 1050 1051 do recipient_idx = n_recipients to 1 by -1; 1052 1053 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 1054 1055 if recipient.duplicate then 1056 if recipient.top_level then /* input address is a duplicate */ 1057 call mlsys_address_list_mgr_$delete_address (P_address_lists (recipient.list_idx), 1058 recipient.address_idx, (0)); 1059 1060 else do; 1061 /*** Input address is a named group with at least one duplicate ... */ 1062 first_recipient_idx = 0; /* find the first recipient in this list ... */ 1063 do other_recipient_idx = (recipient_idx - 1) to 1 by -1 while (first_recipient_idx = 0); 1064 other_recipient_ptr = addr (recipients_list.recipients (other_recipient_idx)); 1065 if (other_recipient.list_idx ^= recipient.list_idx) 1066 | (other_recipient.address_idx ^= recipient.address_idx) then 1067 first_recipient_idx = other_recipient_idx + 1; 1068 end; 1069 if first_recipient_idx = 0 then /* ... the named group is the very first address */ 1070 first_recipient_idx = 1; 1071 delete_this_address = "1"b; /* assume it's OK to delete it ... */ 1072 continue = "1"b; /* need do until ... */ 1073 do other_recipient_idx = first_recipient_idx to n_recipients 1074 while (delete_this_address & continue); 1075 other_recipient_ptr = addr (recipients_list.recipients (other_recipient_idx)); 1076 if (other_recipient.list_idx = recipient.list_idx) 1077 & (other_recipient.address_idx = recipient.address_idx) then 1078 delete_this_address = other_recipient.duplicate; 1079 else continue = "0"b; /* ... reached first recipient not from this address */ 1080 end; 1081 if delete_this_address then 1082 call mlsys_address_list_mgr_$delete_address (P_address_lists (recipient.list_idx), 1083 recipient.address_idx, (0)); 1084 recipient_idx = first_recipient_idx + 1; 1085 end; /* continue with first recipient before this list */ 1086 end; 1087 1088 1089 /* Cleanup */ 1090 1091 call cleanup_message_delivery (); 1092 1093 P_code = 0; /* success */ 1094 1095 return; 1096 1097 /* Places a copy of the supplied message into the specified mailbox */ 1098 1099 copy_message: 1100 entry (P_message_ptr, P_mailbox_dirname, P_mailbox_ename, P_code); 1101 1102 mailbox_dirname = P_mailbox_dirname; 1103 call add_suffix (P_mailbox_ename, "mbx", mailbox_ename, P_code); 1104 if P_code ^= 0 then return; 1105 1106 preserve_message_type = "1"b; /* don't convert interactive messages into ordinary mail */ 1107 preserve_access_class = "1"b; /* don't change the access class if possible */ 1108 1109 create_if_not_found = "0"b; /* the mailbox must exist */ 1110 no_mailbox_code = mlsys_et_$no_mailbox; 1111 1112 go to COPY_LOG_OR_SAVE_MESSAGE; 1113 1114 1115 /* Places a copy of the supplied message into the user's logbox which may optionally be created */ 1116 1117 log_message: 1118 entry (P_message_ptr, P_create_if_not_found, P_code); 1119 1120 call mlsys_address_mgr_$get_address_pathname (mlsys_data_$user_logbox_address, mailbox_dirname, mailbox_ename, 1121 ((32)" "), (0)); 1122 1123 preserve_message_type = "0"b; /* no interactive messages in the logbox, please */ 1124 preserve_access_class = "0"b; /* always change the message's access class */ 1125 1126 create_if_not_found = P_create_if_not_found; 1127 create_the_mailbox = mlsys_mailbox_utils_$create_logbox; 1128 no_mailbox_code = mlsys_et_$no_logbox; 1129 mailbox_created_code = mlsys_et_$logbox_created; 1130 1131 go to COPY_LOG_OR_SAVE_MESSAGE; 1132 1133 1134 /* Places a copy of the supplied message into the specified savebox which may optionally be created */ 1135 1136 save_message: 1137 entry (P_message_ptr, P_mailbox_dirname, P_mailbox_ename, P_create_if_not_found, P_code); 1138 1139 mailbox_dirname = P_mailbox_dirname; 1140 if index (reverse (rtrim (P_mailbox_ename)), reverse (".sv")) = 1 then 1141 mailbox_ename = substr (P_mailbox_ename, 1, (length (rtrim (P_mailbox_ename)) - length (".sv"))); 1142 else mailbox_ename = P_mailbox_ename; /* already has right suffix or will be added shortly */ 1143 call add_suffix (mailbox_ename, "sv.mbx", mailbox_ename, P_code); 1144 if P_code ^= 0 then return; /* can't create proper pathname */ 1145 1146 preserve_message_type = "0"b; /* no interactive messages in the savebox, please */ 1147 preserve_access_class = "0"b; /* always change the message's access class */ 1148 1149 create_if_not_found = P_create_if_not_found; 1150 create_the_mailbox = mlsys_mailbox_utils_$create_savebox; 1151 no_mailbox_code = mlsys_et_$no_savebox; 1152 mailbox_created_code = mlsys_et_$savebox_created; 1153 1154 /* Common code for the copy, log, and save operations */ 1155 1156 COPY_LOG_OR_SAVE_MESSAGE: 1157 if ^mlsys_message_mgr_$verify_message (P_message_ptr, date_time_message_created, P_code) then return; 1158 1159 message_ptr = copy_ptr (P_message_ptr); 1160 1161 deliver_options_ptr = addr (local_do); /* for add_message_to_mailbox ... */ 1162 local_do.recipient_notification = "0"b; 1163 local_do.acknowledge = "0"b; 1164 1165 call initialize_message_delivery ("0"b); /* for cleanup handler ... */ 1166 1167 on condition (cleanup) call cleanup_message_delivery (); 1168 1169 if preserve_access_class then /* don't change the message's access class if possible */ 1170 if aim_check_$greater_or_equal (message.access_class, get_authorization_ ()) then 1171 ; /* ... we can preserve it without privilege */ 1172 else do; /* ... check for ring-1 privilege */ 1173 string (user_privileges) = get_privileges_ (); 1174 if user_privileges.ring1 then 1175 ; /* ... we can preserve it because of ring-1 privilege */ 1176 else message.access_class = get_authorization_ (); 1177 end; 1178 else message.access_class = get_authorization_ (); 1179 1180 if message.date_time_created = 0 then /* a new message must be complete ... */ 1181 call complete_new_message (); 1182 else call delete_last_delivery_fields (); /* an in-mailbox message is about to be redelivered */ 1183 1184 if preserve_message_type then /* don't convert interactive to ordinary ... */ 1185 if message.interactive then /* ... so be sure prepare_message sets the correct flags */ 1186 local_do.delivery_mode = INTERACTIVE_DELIVERY; 1187 else local_do.delivery_mode = ORDINARY_DELIVERY; 1188 else local_do.delivery_mode = ORDINARY_DELIVERY; 1189 1190 call prepare_message_for_mailbox ("1"b, mailbox_message_with_bcc_ptr, mailbox_message_with_bcc_lth, code); 1191 if code ^= 0 then go to RETURN_FROM_COPY_LOG_OR_SAVE_MESSAGE; 1192 1193 local_do.delivery_mode = ORDINARY_DELIVERY; /* don't accidently send a wakeup if it's interactive */ 1194 1195 created = "0"b; /* until proven otherwise */ 1196 1197 call lookup_or_open_mailbox (mailbox_dirname, mailbox_ename, target_mailbox_idx, code); 1198 1199 if code = error_table_$noentry then /* not there: try to create it if requested ... */ 1200 if create_if_not_found then do; 1201 if create_the_mailbox = mlsys_mailbox_utils_$create_logbox then 1202 call mlsys_mailbox_utils_$create_logbox (code); 1203 else call create_the_mailbox (mailbox_dirname, mailbox_ename, code); 1204 if code = 0 then do; /* ... success */ 1205 created = "1"b; 1206 call lookup_or_open_mailbox (mailbox_dirname, mailbox_ename, target_mailbox_idx, code); 1207 end; /* ... this open shouldn't fail, but you never know */ 1208 end; 1209 1210 if code ^= 0 then do; /* couldn't open it ... */ 1211 if code = error_table_$noentry then /* ... map this code into one from mlsys_et_ */ 1212 code = no_mailbox_code; 1213 go to RETURN_FROM_COPY_LOG_OR_SAVE_MESSAGE; 1214 end; 1215 1216 call mailbox_$get_mode_index (target_mailbox_idx, mailbox_mode, code); 1217 if code ^= 0 then go to RETURN_FROM_COPY_LOG_OR_SAVE_MESSAGE; 1218 /* shouldn't happen if we were able to open it */ 1219 1220 if (mailbox_mode & A_MBX_ACCESS) ^= A_MBX_ACCESS then do; 1221 code = mlsys_et_$no_a_permission; /* don't have access to add messsages */ 1222 go to RETURN_FROM_COPY_LOG_OR_SAVE_MESSAGE; 1223 end; 1224 1225 call add_message_to_mailbox (target_mailbox_idx, mailbox_message_with_bcc_ptr, mailbox_message_with_bcc_lth, 1226 "1"b, code); /* internal procedure handles locking problems, etc. */ 1227 1228 1229 RETURN_FROM_COPY_LOG_OR_SAVE_MESSAGE: 1230 call cleanup_message_delivery (); /* release temporaries and put message back as we found it */ 1231 1232 if code = 0 then /* check if we should inform use of message creation */ 1233 if created then code = mailbox_created_code; 1234 1235 P_code = code; /* let caller know what happened */ 1236 1237 return; 1238 1239 /* Determines if mail can be successfully delivered to the supplied address */ 1240 1241 validate_address: 1242 entry (P_address_ptr, P_validate_mls_contents, P_code); 1243 1244 if ^mlsys_address_mgr_$verify_address (P_address_ptr, P_code) then return; 1245 1246 message_ptr = null (); /* no message here */ 1247 1248 call initialize_message_delivery ("1"b); /* for cleanup handler ... */ 1249 recipients_info_ptr = null (); /* ... in case validate_or_expand_address gets fatal errors */ 1250 1251 on condition (cleanup) call cleanup_message_delivery (); 1252 1253 deliver_options_ptr = addr (local_do); /* for validate_or_expand_address */ 1254 local_do.delivery_mode = ORDINARY_DELIVERY; /* ... don't want to check if we can send wakeups */ 1255 local_do.queueing_mode = NEVER_QUEUE; /* ... insures we determine address routes immediately */ 1256 string (local_do.flags) = ""b; 1257 1258 suppress_bcc_field_when_necessary = "0"b; /* always include the message's bcc field */ 1259 1260 call validate_or_expand_address (P_address_ptr, "1"b, "0"b, P_validate_mls_contents, "1"b); 1261 1262 if n_recipients = 0 then /* no corresponding recipients */ 1263 P_code = mlsys_et_$no_recipients; 1264 else if n_recipients = 1 then do; /* single recipient */ 1265 recipient_ptr = addr (recipients_list.recipients (1)); 1266 if recipient.fatal_error then 1267 P_code = recipient.code; 1268 else P_code = 0; /* ... ignore warnings */ 1269 end; 1270 else do; /* multiple recipients: check for at least one fatal error */ 1271 P_code = 0; 1272 do recipient_idx = 1 to n_recipients while (P_code = 0); 1273 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 1274 if recipient.fatal_error then P_code = mlsys_et_$errors_in_list_address; 1275 end; 1276 end; 1277 1278 call cleanup_message_delivery (); 1279 1280 return; 1281 1282 /* Initialize the cache of recently used mailboxes */ 1283 1284 initialize_cache: 1285 entry (); 1286 1287 allocate transmit_cache in (mlsys_area) set (mlsys_data_$transmit_cache_ptr); 1288 unspec (transmit_cache) = ""b; 1289 1290 return; 1291 1292 1293 1294 /* Searches the cache to see if the given mailbox is already open and, if not, opens it and places it in the cache */ 1295 1296 lookup_or_open_mailbox: 1297 procedure (p_mailbox_dirname, p_mailbox_ename, p_mailbox_idx, p_code); 1298 1299 dcl (p_mailbox_dirname, p_mailbox_ename) character (*) parameter; 1300 dcl p_mailbox_idx fixed binary parameter; 1301 dcl p_code fixed binary (35) parameter; 1302 1303 dcl (mailbox_uid, cached_uid) bit (36) aligned; 1304 dcl code fixed binary (35); 1305 dcl (mailbox_idx, lru_usage, lru_idx, other_cache_idx, idx) fixed binary; 1306 1307 1308 call mailbox_$get_uid_file (p_mailbox_dirname, p_mailbox_ename, mailbox_uid, code); 1309 if code ^= 0 then call return_from_lookup (code); /* we won't be able to open it if we can't get the UID */ 1310 1311 1312 /* Search the cache of recently used mailboxes for a match */ 1313 1314 lru_usage = hbound (transmit_cache.entries, 1) + 1; 1315 1316 do idx = lbound (transmit_cache.entries, 1) to hbound (transmit_cache.entries, 1); 1317 1318 if transmit_cache.entries (idx).uid = mailbox_uid then do; 1319 /*** UIDs match: if the cache entry is still valid, we've found it */ 1320 call mailbox_$get_uid_index (transmit_cache.entries (idx).index, cached_uid, code); 1321 if code ^= 0 then do; /* ... cache slot is no longer valid */ 1322 INVALIDATE_CACHE_ENTRY_AND_REOPEN: 1323 unspec (transmit_cache.entries (idx)) = ""b; 1324 lru_idx = idx; /* ... we'll use this slot */ 1325 go to OPEN_THE_MAILBOX; 1326 end; 1327 if cached_uid ^= transmit_cache.entries (idx).uid then go to INVALIDATE_CACHE_ENTRY_AND_REOPEN; 1328 /*** Control arrives here iff we have a good match */ 1329 transmit_cache.entries (idx).usage = dimension (transmit_cache.entries, 1); 1330 do other_cache_idx = (idx + 1) to hbound (transmit_cache.entries, 1); 1331 transmit_cache.entries (other_cache_idx).usage = 1332 transmit_cache.entries (other_cache_idx).usage - 1; 1333 end; 1334 p_mailbox_idx = transmit_cache.entries (idx).index; 1335 call return_from_lookup (0); /* success */ 1336 end; 1337 1338 transmit_cache.entries (idx).usage = transmit_cache.entries (idx).usage - 1; 1339 /* doesn't match: decrement the usage */ 1340 1341 if transmit_cache.entries (idx).usage < lru_usage then do; 1342 lru_idx = idx; /* least recently used that's been seen so far */ 1343 lru_usage = transmit_cache.entries (idx).usage; 1344 end; 1345 end; 1346 1347 1348 /* Control arrives here iff we didn't find the mailbox in the cache: open it and add it to the cache */ 1349 1350 OPEN_THE_MAILBOX: 1351 call mailbox_$open (p_mailbox_dirname, p_mailbox_ename, mailbox_idx, code); 1352 if code = error_table_$moderr then code = mlsys_et_$no_a_permission; 1353 if code ^= 0 then call return_from_lookup (code); /* failure */ 1354 1355 if transmit_cache.entries (lru_idx).uid ^= ""b then do; 1356 /*** Close the mailbox that was in this slot */ 1357 call mailbox_$get_uid_index (transmit_cache.entries (lru_idx).index, cached_uid, code); 1358 if code = 0 then /* ... but only if it's still the mailbox we think it is */ 1359 if cached_uid = transmit_cache.entries (lru_idx).uid then 1360 call mailbox_$close (transmit_cache.entries (lru_idx).index, (0)); 1361 end; 1362 1363 transmit_cache.entries (lru_idx).uid = mailbox_uid; 1364 transmit_cache.entries (lru_idx).index = mailbox_idx; 1365 transmit_cache.entries (lru_idx).usage = dimension (transmit_cache.entries, 1); 1366 1367 do other_cache_idx = (idx + 1) to hbound (transmit_cache.entries, 1); 1368 transmit_cache.entries (other_cache_idx).usage = transmit_cache.entries (other_cache_idx).usage - 1; 1369 end; /* decrement any reference counts missed above */ 1370 1371 p_mailbox_idx = mailbox_idx; 1372 p_code = 0; /* success */ 1373 1374 RETURN_FROM_LOOKUP_OR_OPEN_MAILBOX: 1375 return; 1376 1377 1378 1379 /* Internal to lookup_or_open_mailbox: returns with the given error code */ 1380 1381 return_from_lookup: 1382 procedure (p_return_code); 1383 1384 dcl p_return_code fixed binary (35) parameter; 1385 1386 p_code = p_return_code; /* set the output of lookup... */ 1387 go to RETURN_FROM_LOOKUP_OR_OPEN_MAILBOX; 1388 1389 end return_from_lookup; 1390 1391 end lookup_or_open_mailbox; 1392 1393 /* Verify that the supplied recipients_info_list and deliver_options structures are valid */ 1394 1395 verify_recipients_info_and_deliver_options: 1396 procedure (p_code); 1397 1398 dcl p_code fixed binary (35) parameter; 1399 dcl (ignore, is_empty_message) bit (1) aligned; 1400 dcl idx fixed binary; 1401 1402 recipients_info_ptr = P_recipients_info_ptr; 1403 deliver_options_ptr = P_deliver_options_ptr; 1404 1405 if (recipients_info.version ^= RECIPIENTS_INFO_VERSION_2) 1406 | (deliver_options.version ^= DELIVER_OPTIONS_VERSION_2) then do; 1407 p_code = error_table_$unimplemented_version; 1408 return; 1409 end; 1410 1411 if recipients_info.area_ptr = null () then do; /* can't get system_free_area pointer of caller's ring */ 1412 p_code = error_table_$bad_subr_arg; 1413 return; 1414 end; 1415 1416 users_area_ptr = recipients_info.area_ptr; 1417 1418 if recipients_info.n_lists = 0 then do; /* there have to be some recipients */ 1419 p_code = error_table_$bad_subr_arg; 1420 return; 1421 end; 1422 1423 p_code = 0; 1424 do idx = 1 to recipients_info.n_lists while (p_code = 0); 1425 if recipients_info.lists (idx).address_list_ptr ^= null () then 1426 ignore = 1427 mlsys_address_list_mgr_$verify_address_list (recipients_info.lists (idx).address_list_ptr, 1428 p_code); 1429 end; 1430 if p_code ^= 0 then return; /* one of the lists of recipients is bad */ 1431 1432 if (deliver_options.delivery_mode < ORDINARY_DELIVERY) | (deliver_options.delivery_mode > EXPRESS_DELIVERY) 1433 then do; 1434 p_code = mlsys_et_$unknown_delivery_mode; 1435 return; 1436 end; 1437 1438 if (deliver_options.queueing_mode < NEVER_QUEUE) | (deliver_options.queueing_mode > ALWAYS_QUEUE) then do; 1439 p_code = mlsys_et_$unknown_queueing_mode; 1440 return; 1441 end; 1442 1443 if (deliver_options.queued_notification_mode < NEVER_NOTIFY) 1444 | (deliver_options.queued_notification_mode > ALWAYS_NOTIFY) then do; 1445 p_code = mlsys_et_$unknown_queued_notify_mode; 1446 return; 1447 end; 1448 1449 if deliver_options.mbz ^= ""b then do; 1450 p_code = error_table_$bad_subr_arg; 1451 return; 1452 end; 1453 1454 if ^deliver_options.send_if_empty then do; /* check that there's a body */ 1455 is_empty_message = "1"b; /* ... assume it's empty 'till proven otherwise */ 1456 do idx = 1 to message.n_body_sections while (is_empty_message); 1457 message_body_section_ptr = addr (message.body.body_sections (idx)); 1458 if message_body_section.section_type = MESSAGE_PREFORMATTED_BODY_SECTION then 1459 is_empty_message = (verify (message_preformatted_body_section_text, WHITESPACE) = 0); 1460 else /*** if message_body_section.section_type = MESSAGE_BIT_STRING_BODY_SECTION then */ 1461 is_empty_message = (message_bit_string_body_section.bit_string_lth = 0); 1462 end; 1463 if is_empty_message then do; /* the body is emtpy */ 1464 p_code = mlsys_et_$empty_message; 1465 return; 1466 end; 1467 end; 1468 1469 if mlsys_psp_$ism_not_available () then /* no inter-system mailer ... */ 1470 if deliver_options.queueing_mode = ALWAYS_QUEUE then do; 1471 p_code = mlsys_et_$ism_not_available; /* caller only wants queueing which isn't possible */ 1472 return; 1473 end; 1474 else do; /* caller only wants queueing if needed: so never queue */ 1475 local_do = deliver_options; /* ... caller's options are considered read-only */ 1476 local_do.queueing_mode = NEVER_QUEUE; 1477 local_do.queue_mailing_lists = "0"b; 1478 deliver_options_ptr = addr (local_do); /* ... switch to our modified options */ 1479 end; 1480 1481 recipients_info.n_recipients, recipients_info.n_unique_recipients, recipients_info.n_failed_recipients = 0; 1482 1483 recipients_info.expanded_recipients_result_list_ptr, recipients_info.lists (*).recipients_result_list_ptr = 1484 null (); 1485 1486 p_code = 0; /* everything's OK */ 1487 1488 return; 1489 1490 end verify_recipients_info_and_deliver_options; 1491 1492 /* Initializes the various data structures used to deliver a message */ 1493 1494 initialize_message_delivery: 1495 procedure (p_start_recipients_list); 1496 1497 dcl p_start_recipients_list bit (1) aligned parameter; 1498 1499 call save_message_state (); /* so that we can restore the message later */ 1500 1501 if p_start_recipients_list then do; /* caller needs a list of recipients: try using the stack */ 1502 call cu_$grow_stack_frame (STACK_EXTENSION, initial_stack_extension, (0)); 1503 recipients_list_ptr = initial_stack_extension; 1504 recipient_size = size (recipient) + mod (size (recipient), 2); 1505 n_recipients_allocated = divide (STACK_EXTENSION, recipient_size, 17, 0); 1506 n_recipients = 0; 1507 end; 1508 else recipients_list_ptr = null (); 1509 1510 current_mailing_list_data_ptr = null (); /* not in the process of expanding a mailing list */ 1511 1512 mlsys_mailer_data_ptr, /* not processing inter-system mail yet */ 1513 ism_recipient_idxs_ptr = null (); 1514 1515 n_message_buffers_used = 0; /* no copies of the message yet */ 1516 last_temp_segment_ptr, message_buffers (*) = null (); 1517 1518 mailbox_idx = 0; /* no mailbox open at this time */ 1519 forum_idx = 0; /* no forum meeting either */ 1520 1521 address_route_ptr = null (); /* no address route from checking a foreign address */ 1522 1523 return; 1524 1525 end initialize_message_delivery; 1526 1527 /* Releases interim data structures created during message delivery */ 1528 1529 cleanup_message_delivery: 1530 procedure (); 1531 1532 dcl idx fixed binary; 1533 1534 if address_route_ptr ^= null () then call mlsys_address_route_mgr_$free_address_route (address_route_ptr); 1535 1536 if forum_idx ^= 0 then /* close whatever's opened */ 1537 call forum_$close_forum (forum_idx, (0)); 1538 forum_idx = 0; 1539 1540 if mailbox_idx ^= 0 then call mailbox_$close (mailbox_idx, (0)); 1541 mailbox_idx = 0; 1542 1543 if n_message_buffers_used > 0 then do; /* get rid of any temporary segments */ 1544 do idx = 1 to n_message_buffers_used; 1545 if message_buffers (idx) ^= null () then 1546 if baseno (message_buffers (idx)) ^= baseno (stackframeptr ()) then 1547 if wordno (message_buffers (idx)) = 0 then 1548 call mlsys_storage_mgr_$release_temp_segment (message_buffers (idx), (0)); 1549 message_buffers (idx) = null (); 1550 end; 1551 end; 1552 n_message_buffers_used = 0; 1553 1554 if mlsys_mailer_data_ptr ^= null () then 1555 if baseno (mlsys_mailer_data_ptr) ^= baseno (stackframeptr ()) then 1556 call mlsys_storage_mgr_$release_temp_segment (mlsys_mailer_data_ptr, (0)); 1557 mlsys_mailer_data_ptr = null (); 1558 1559 if ism_recipient_idxs_ptr ^= null () then 1560 if baseno (ism_recipient_idxs_ptr) ^= baseno (stackframeptr ()) then 1561 call mlsys_storage_mgr_$release_temp_segment (ism_recipient_idxs_ptr, (0)); 1562 ism_recipient_idxs_ptr = null (); 1563 1564 if current_mailing_list_data_ptr ^= null () then do; 1565 do mailing_list_data_ptr = current_mailing_list_data_ptr repeat (mailing_list_data.previous_data_ptr) 1566 while (mailing_list_data_ptr ^= null ()); 1567 if mailing_list_data.mls_ptr ^= null () then 1568 call terminate_file_ (mailing_list_data.mls_ptr, 0, TERM_FILE_TERM, (0)); 1569 end; 1570 end; 1571 current_mailing_list_data_ptr = null (); 1572 1573 if recipients_list_ptr ^= null () then do; 1574 do idx = 1 to n_recipients; /* close any mailboxes/forums ... */ 1575 recipient_ptr = addr (recipients_list.recipients (idx)); 1576 if (recipient.address_ptr ^= null ()) & recipient.free_address then 1577 call mlsys_address_mgr_$decrement_reference_count (recipient.address_ptr); 1578 if recipient.local_info.forum_idx ^= 0 then 1579 call forum_$close_forum (recipient.local_info.forum_idx, (0)); 1580 if recipient.local_info.mailbox_idx ^= 0 then 1581 call mailbox_$close (recipient.local_info.mailbox_idx, (0)); 1582 recipient.local_info.mailbox_idx, recipient.local_info.forum_idx = 0; 1583 end; 1584 if baseno (recipients_list_ptr) ^= baseno (stackframeptr ()) then 1585 call mlsys_storage_mgr_$release_temp_segment (recipients_list_ptr, (0)); 1586 end; /* ... flush the list of recipients itself if needed */ 1587 recipients_list_ptr = null (); 1588 1589 call restore_message_state (); /* restore the message to its state on entry to this module */ 1590 1591 end cleanup_message_delivery; 1592 1593 /* Saves the state of the message on entry to this module so that it can be restored on exit or cleanup */ 1594 1595 save_message_state: 1596 procedure (); 1597 1598 if message_ptr = null () then return; 1599 1600 saved_message_data = message, by name; /* copy data which we might have to change */ 1601 1602 added_from_field, /* we haven't added anything yet */ 1603 added_reply_to_field, added_envelope, added_redistribution = "0"b; 1604 deleted_last_delivery_fields = "0"b; /* we haven't deleted anything either */ 1605 1606 return; 1607 1608 end save_message_state; 1609 1610 1611 1612 /* Restores the state of the message to what it was on entry to this module */ 1613 1614 restore_message_state: 1615 procedure (); 1616 1617 if message_ptr = null () then return; 1618 1619 message = saved_message_data, by name; /* restore the data added by a simple copy */ 1620 1621 if added_from_field then /* From field was empty: we added a single address ... */ 1622 call mlsys_address_list_mgr_$delete_address (message.from, 1, (0)); 1623 added_from_field = "0"b; /* don't do it again */ 1624 1625 if added_reply_to_field then /* From field was empty and we added a single address ... */ 1626 call mlsys_address_list_mgr_$delete_address (message.reply_to, 1, (0)); 1627 added_reply_to_field = "0"b; 1628 1629 if added_envelope then do; /* we had to add an envelope (new message only) ... */ 1630 local_mep.version = MESSAGE_ENVELOPE_PARAMETER_VERSION_2; 1631 local_mep.date_time_mailed, local_mep.date_time_delivered = 0; 1632 local_mep.sender, local_mep.trace, local_mep.delivered_by, local_mep.acknowledge_to = null (); 1633 call mlsys_message_mgr_$replace_message_envelope (message_ptr, addr (local_mep), (0)); 1634 end; 1635 added_envelope = "0"b; 1636 1637 if added_redistribution then /* we added the last redistribution to the message */ 1638 call mlsys_message_mgr_$delete_redistribution (message_ptr, message.n_redistributions, (0)); 1639 added_redistribution = "0"b; 1640 1641 if deleted_last_delivery_fields then /* we deleted the last Delivery-Date and Delivery-By fields */ 1642 call add_last_delivery_fields (); 1643 1644 return; 1645 1646 end restore_message_state; 1647 1648 /* Supplies appropriate values for those fields of a new message which may not have been set by the user (or which cannot 1649* be set by the user (eg: Date)) */ 1650 1651 complete_new_message: 1652 procedure (); 1653 1654 dcl users_address pointer; 1655 dcl all_invalid bit (1) aligned; 1656 dcl code fixed binary (35); 1657 dcl (address_type, idx) fixed binary; 1658 1659 call mlsys_address_mgr_$get_address_type (mlsys_data_$user_mail_table_address, address_type, (0)); 1660 if address_type ^= MAIL_TABLE_ADDRESS then /* ... mail table address isn't usable: anonymous user(?) */ 1661 users_address = mlsys_data_$user_default_mailbox_address; 1662 else do; /* ... make sure mail table address can receive mail */ 1663 call validate_address (mlsys_data_$user_mail_table_address, "0"b, code); 1664 if code = 0 then /* ... and it can */ 1665 users_address = mlsys_data_$user_mail_table_address; 1666 else users_address = mlsys_data_$user_default_mailbox_address; 1667 end; 1668 1669 message.date_time_created = date_time_message_created; 1670 /* set date/time created to time the body was last updated */ 1671 1672 call mlsys_message_id_mgr_$encode_local_id (message.date_time_created, message.message_id); 1673 1674 if is_empty_list (message.from) then do; /* no From field: default to the user ... */ 1675 if message.from = null () then do; 1676 call mlsys_address_list_mgr_$create_read_only_address_list (ADDRESS_LIST_VERSION_2, message.from, (0)) 1677 ; 1678 call mlsys_address_list_mgr_$increment_reference_count (message.from); 1679 end; 1680 call mlsys_address_list_mgr_$add_address (message.from, users_address, ADDRESS_LIST_VERSION_2, (0)); 1681 added_from_field = "1"b; 1682 end; 1683 1684 else /* From field supplied by the user ... */ 1685 if is_empty_list (message.reply_to) then do; /* ... but no Reply-To field ... */ 1686 all_invalid = "1"b; /* ... so add one if all From addresses are invalid */ 1687 do idx = 1 to message.from -> address_list.n_addresses while (all_invalid); 1688 call validate_address (message.from -> address_list.addresses (idx), "0"b, code); 1689 all_invalid = (code ^= 0); /* ... stops at first valid address */ 1690 end; 1691 if all_invalid then do; 1692 if message.reply_to = null () then do; 1693 call mlsys_address_list_mgr_$create_read_only_address_list (ADDRESS_LIST_VERSION_2, 1694 message.reply_to, (0)); 1695 call mlsys_address_list_mgr_$increment_reference_count (message.reply_to); 1696 end; 1697 call mlsys_address_list_mgr_$add_address (message.reply_to, users_address, ADDRESS_LIST_VERSION_2, 1698 (0)); 1699 added_reply_to_field = "1"b; 1700 end; 1701 end; 1702 1703 local_mep.version = MESSAGE_ENVELOPE_PARAMETER_VERSION_2; 1704 local_mep.date_time_mailed = clock (); /* Posted-Date is now */ 1705 local_mep.sender = users_address; /* Sender is this user (formatting eliminates redundancies) */ 1706 local_mep.trace = null (); /* local origin: no trace */ 1707 local_mep.date_time_delivered = 0; /* Delivery-Date is set by receiving system ... */ 1708 local_mep.delivered_by = null (); /* ... and the same goes for Delivery-By */ 1709 if deliver_options.acknowledge then /* caller wants an acknowledgment ... */ 1710 local_mep.acknowledge_to = users_address; /* ... but can not yet specify to whom */ 1711 else local_mep.acknowledge_to = null (); 1712 call mlsys_message_mgr_$replace_message_envelope (message_ptr, addr (local_mep), (0)); 1713 added_envelope = "1"b; /* don't forget to get rid of it when we're done */ 1714 1715 return; 1716 1717 end complete_new_message; 1718 1719 /* Adds the description of this redistribution to the message */ 1720 1721 add_redistribution: 1722 procedure (); 1723 1724 dcl users_address pointer; 1725 dcl (address_type, idx) fixed binary; 1726 1727 call mlsys_address_mgr_$get_address_type (mlsys_data_$user_mail_table_address, address_type, (0)); 1728 if address_type ^= MAIL_TABLE_ADDRESS then /* ... mail table address isn't usable: anonymous user(?) */ 1729 users_address = mlsys_data_$user_default_mailbox_address; 1730 else do; /* ... make sure mail table address can receive mail */ 1731 call validate_address (mlsys_data_$user_mail_table_address, "0"b, code); 1732 if code = 0 then /* ... and it can */ 1733 users_address = mlsys_data_$user_mail_table_address; 1734 else users_address = mlsys_data_$user_default_mailbox_address; 1735 end; 1736 1737 local_mrp.version = MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2; 1738 1739 local_mrp.date_time_created = clock (); /* Redistributed-Date is now */ 1740 call mlsys_message_id_mgr_$encode_local_id (local_mrp.date_time_created, local_mrp.message_id); 1741 1742 call mlsys_address_list_mgr_$create_read_only_address_list (ADDRESS_LIST_VERSION_2, local_mrp.from, (0)); 1743 call mlsys_address_list_mgr_$add_address (local_mrp.from, users_address, ADDRESS_LIST_VERSION_2, (0)); 1744 /* Redistributed-From is this user */ 1745 1746 call mlsys_address_list_mgr_$create_read_only_address_list (ADDRESS_LIST_VERSION_2, local_mrp.to, (0)); 1747 do idx = 1 to recipients_info.n_lists; 1748 call mlsys_address_list_mgr_$merge_address_lists (recipients_info.lists (idx).address_list_ptr, 1749 local_mrp.to, "1"b, local_mrp.to, (0)); 1750 end; 1751 1752 local_mrp.envelope.date_time_mailed = local_mrp.date_time_created; 1753 /* Redistributed-Posted-Date is the same as above */ 1754 local_mrp.envelope.sender = null (); /* Redistributed-Sender is the same as Redistributed-From */ 1755 1756 local_mrp.envelope.trace = null (); /* local origin: no trace */ 1757 1758 local_mrp.date_time_delivered = 0; /* Redistributed-Delivery-Date is set by receiving system */ 1759 local_mrp.delivered_by = null (); /* ... and the same goes for Redistributed-Delivery-By */ 1760 1761 if deliver_options.acknowledge then /* caller wants an acknowledgment ... */ 1762 local_mrp.acknowledge_to = users_address; /* ... but can not yet specify to whom */ 1763 else local_mrp.acknowledge_to = null (); 1764 1765 if P_redistribution_comment ^= "" then do; /* caller supplied a Redistributed-Comment field */ 1766 local_mrp.comment.text_ptr = addr (P_redistribution_comment); 1767 local_mrp.comment.text_lth = length (P_redistribution_comment); 1768 end; 1769 else do; /* no comment */ 1770 local_mrp.comment.text_ptr = null (); 1771 local_mrp.comment.text_lth = 0; 1772 end; 1773 local_mrp.comment.multiline_text = "1"b; /* don't really need to set this ... */ 1774 1775 call mlsys_message_mgr_$add_redistribution (message_ptr, addr (local_mrp), (-1), (0)); 1776 call mlsys_address_list_mgr_$free_address_list (local_mrp.from, (0)); 1777 call mlsys_address_list_mgr_$free_address_list (local_mrp.to, (0)); 1778 1779 added_redistribution = "1"b; /* get rid of it when we're done */ 1780 1781 return; 1782 1783 end add_redistribution; 1784 1785 /* Deletes the last Delivery-Date and Delivery-By fields from an in-mailbox message which is about to be logged, saved, or 1786* copied: These fields must be deleted as they will be overidden by the values obtained from the ring-1 mailbox 1787* primitives after the message is retransmitted */ 1788 1789 delete_last_delivery_fields: 1790 procedure (); 1791 1792 if message.n_redistributions = 0 then /* last fields are in the envelope */ 1793 message_envelope_ptr = addr (message.envelope); 1794 else do; /* last fields are in the last redistribution */ 1795 message_redistribution_ptr = 1796 addr (message_redistributions_list.redistributions (message.n_redistributions)); 1797 message_envelope_ptr = addr (message_redistribution.envelope); 1798 end; 1799 1800 last_delivered_by = message_envelope.delivered_by;/* save the current values ... */ 1801 last_date_time_delivered = message_envelope.date_time_delivered; 1802 1803 deleted_last_delivery_fields = "1"b; /* now OK to restore in the cleanup handler */ 1804 1805 message_envelope.delivered_by = null (); /* delete the fields ... */ 1806 message_envelope.date_time_delivered = 0; 1807 1808 return; 1809 1810 end delete_last_delivery_fields; 1811 1812 1813 1814 /* Adds the last Delivery-Date and Delivery-By fields back into the message */ 1815 1816 add_last_delivery_fields: 1817 procedure (); 1818 1819 if message.n_redistributions = 0 then /* last fields are in the envelope */ 1820 message_envelope_ptr = addr (message.envelope); 1821 else do; /* last fields are in the last redistribution */ 1822 message_redistribution_ptr = 1823 addr (message_redistributions_list.redistributions (message.n_redistributions)); 1824 message_envelope_ptr = addr (message_redistribution.envelope); 1825 end; 1826 1827 message_envelope.delivered_by = last_delivered_by;/* restore the saved values ... */ 1828 message_envelope.date_time_delivered = last_date_time_delivered; 1829 1830 deleted_last_delivery_fields = "0"b; /* no need to do it twice */ 1831 1832 return; 1833 1834 end add_last_delivery_fields; 1835 1836 /* Validates that mail can be sent to the given address: If the address is a mailing list or named group, the list will 1837* be expanded and each address in the list will be validated/expanded */ 1838 1839 validate_or_expand_address: 1840 procedure (p_address_ptr, p_top_level_address, p_exclude_bcc_field, p_expand_mailing_lists, p_validate_only); 1841 1842 dcl p_address_ptr pointer parameter; 1843 dcl p_top_level_address bit (1) aligned parameter; 1844 dcl p_exclude_bcc_field bit (1) aligned parameter; 1845 dcl p_expand_mailing_lists bit (1) aligned parameter; 1846 dcl p_validate_only bit (1) aligned parameter; 1847 1848 dcl 1 local_mld aligned like mailing_list_data; 1849 1850 dcl (address_ptr, list_expansion_ptr, new_recipients_list_ptr) pointer; 1851 dcl address_pathname character (200); 1852 dcl address_dirname character (168); 1853 dcl address_string character (128) varying; 1854 dcl (address_ename, address_component) character (32); 1855 dcl (mail_table_expansion, use_copy_without_bcc) bit (1) aligned; 1856 dcl code fixed binary (35); 1857 dcl (address_type, n_recipients_before_expansion, idx) fixed binary; 1858 1859 1860 use_copy_without_bcc = "0"b; /* only gets used before actual setting if invalid address */ 1861 mail_table_expansion = "0"b; /* until proven otherwise */ 1862 1863 1864 /* Get the type of address: insures that all local addresses are properly recognized and resolves mail table addresses to 1865* the actual value in the mail table */ 1866 1867 call mlsys_address_mgr_$check_if_actually_local (p_address_ptr); 1868 1869 call mlsys_address_mgr_$get_address_type (p_address_ptr, address_type, (0)); 1870 1871 if address_type = MAIL_TABLE_ADDRESS then do; /* look it up in the mail table right now */ 1872 call mlsys_address_mgr_$get_mail_table_address (p_address_ptr, address_ptr, code); 1873 if code = 0 then do; /* ... found it: get the actual address type */ 1874 call mlsys_address_mgr_$get_address_type (address_ptr, address_type, (0)); 1875 mail_table_expansion = "1"b; /* ... and be sure the address gets freed on cleanup */ 1876 end; 1877 else do; /* ... couldn't find it */ 1878 call add_recipient (p_address_ptr, UNKNOWN_RECIPIENT); 1879 recipient.fatal_error = "1"b; /* ... record the exact problem (mte_not_found) */ 1880 recipient.code = code; 1881 return; 1882 end; 1883 end; 1884 1885 else address_ptr = p_address_ptr; 1886 1887 on condition (cleanup) 1888 begin; 1889 if mail_table_expansion & (address_ptr ^= null ()) then 1890 call mlsys_address_mgr_$free_address (address_ptr, (0)); 1891 end; 1892 1893 /* If this is one of the addresses supplied by the caller and the bcc field should be suppressed for primary/secondary 1894* recipients, determine whether this address or its expansion should have the bcc field suppressed */ 1895 1896 if p_top_level_address & suppress_bcc_field_when_necessary then do; 1897 if ^is_empty_list (message.to) then do; 1898 do idx = 1 to message.to -> address_list.n_addresses while (^use_copy_without_bcc); 1899 if mlsys_address_mgr_$compare_addresses (address_ptr, message.to -> address_list.addresses (idx), 1900 (0)) then 1901 use_copy_without_bcc = "1"b; 1902 end; 1903 end; 1904 if ^use_copy_without_bcc & ^is_empty_list (message.cc) then do; 1905 do idx = 1 to message.cc -> address_list.n_addresses while (^use_copy_without_bcc); 1906 if mlsys_address_mgr_$compare_addresses (address_ptr, message.cc -> address_list.addresses (idx), 1907 (0)) then 1908 use_copy_without_bcc = "1"b; 1909 end; 1910 end; 1911 make_copies_with_bcc = make_copies_with_bcc | ^use_copy_without_bcc; 1912 make_copies_without_bcc = make_copies_without_bcc | use_copy_without_bcc; 1913 end; 1914 1915 else if p_top_level_address then /* always include the bcc field */ 1916 make_copies_with_bcc = "1"b; 1917 1918 else use_copy_without_bcc = p_exclude_bcc_field; 1919 1920 1921 /* Now validate or expand the address as appropriate */ 1922 1923 go to VALIDATE_OR_EXPAND_ADDRESS (address_type); 1924 1925 1926 1927 /* Invalid address */ 1928 1929 VALIDATE_OR_EXPAND_ADDRESS (0): 1930 call add_recipient (address_ptr, UNKNOWN_RECIPIENT); 1931 recipient.fatal_error = "1"b; 1932 recipient.code = mlsys_et_$invalid_address; 1933 return; 1934 1935 /* Addresses which resolve to a mailbox */ 1936 1937 VALIDATE_OR_EXPAND_ADDRESS (1): /* user mailbox address */ 1938 VALIDATE_OR_EXPAND_ADDRESS (2): /* logbox address */ 1939 VALIDATE_OR_EXPAND_ADDRESS (3): /* savebox address */ 1940 VALIDATE_OR_EXPAND_ADDRESS (4): /* mailbox address */ 1941 call add_recipient (address_ptr, MAILBOX_RECIPIENT); 1942 1943 if deliver_options.acknowledge then /* never ask for an ACK is sending to ourself */ 1944 if (address_type = LOGBOX_ADDRESS) | (address_type = SAVEBOX_ADDRESS) then 1945 recipient.no_acknowledge = "1"b; 1946 else do; 1947 recipient.no_acknowledge = 1948 mlsys_address_mgr_$compare_addresses (address_ptr, mlsys_data_$user_default_mailbox_address, (0)) 1949 ; 1950 if ^recipient.no_acknowledge then 1951 recipient.no_acknowledge = 1952 mlsys_address_mgr_$compare_addresses (address_ptr, mlsys_data_$user_mail_table_address, (0)) 1953 ; 1954 end; 1955 1956 call mlsys_address_mgr_$get_address_pathname (address_ptr, address_dirname, address_ename, ((32)" "), (0)); 1957 /* this call has to work */ 1958 1959 if p_validate_only then do; 1960 /*** validate_address: Don't bother opening the mailbox; just check the user's access */ 1961 call mailbox_$get_mode_file (address_dirname, address_ename, mailbox_mode, code); 1962 if code = error_table_$noentry then code = mlsys_et_$no_mailbox; 1963 if code = 0 then /* ... got the access */ 1964 if (mailbox_mode & A_MBX_ACCESS) = A_MBX_ACCESS then 1965 ; /* ... and it's OK */ 1966 else do; /* ... can't append messages */ 1967 recipient.fatal_error = "1"b; 1968 recipient.code = mlsys_et_$no_a_permission; 1969 end; 1970 else if (code = error_table_$logical_volume_not_defined) 1971 | (code = error_table_$logical_volume_not_connected) then 1972 ; /* ... mailbox temporarily unavailable: assume it's OK */ 1973 else do; /* ... can't get the user's access */ 1974 recipient.fatal_error = "1"b; 1975 recipient.code = code; 1976 end; 1977 return; 1978 end; 1979 1980 call mailbox_$open (address_dirname, address_ename, mailbox_idx, code); 1981 if code = error_table_$moderr then code = mlsys_et_$no_a_permission; 1982 if code = error_table_$noentry then code = mlsys_et_$no_mailbox; 1983 1984 if code = 0 then do; 1985 /*** Mailbox exists and we have non-null access */ 1986 call mailbox_$get_mode_index (mailbox_idx, mailbox_mode, (0)); 1987 1988 if (mailbox_mode & A_MBX_ACCESS) ^= A_MBX_ACCESS then do; 1989 /*** ... but we don't have append permission */ 1990 recipient.fatal_error = "1"b; 1991 recipient.code = mlsys_et_$no_a_permission; 1992 call mailbox_$close (mailbox_idx, (0)); 1993 mailbox_idx = 0; 1994 end; 1995 1996 else if deliver_options.delivery_mode = ORDINARY_DELIVERY then 1997 /*** ... all we need for ordinary delivery is append permission */ 1998 recipient.local_info.mailbox_idx = mailbox_idx; 1999 2000 else do; 2001 /*** ... interactive/express delivery: check for appropriate access */ 2002 call send_test_message (mailbox_idx, code); 2003 if code = 0 then /* ... we can send the interactive message */ 2004 recipient.local_info.mailbox_idx = mailbox_idx; 2005 else do; /* ... either fatal or a warning */ 2006 recipient.code = code; 2007 if code = error_table_$ai_restricted then do; 2008 /*** Only happens for writing "down" without privileges: fatal to entire operation */ 2009 P_code = error_table_$ai_restricted; 2010 go to RETURN_FROM_TRANSMIT_WITH_FATAL_ERROR; 2011 end; /* ... we should have got this sooner, but ... */ 2012 if deliver_options.delivery_mode = INTERACTIVE_DELIVERY then 2013 if (code = error_table_$messages_off) | (code = error_table_$messages_deferred) 2014 | (code = error_table_$wakeup_denied) then 2015 recipient.warning = "1"b; 2016 else recipient.fatal_error = "1"b; 2017 else /*** if deliver_options.delivery_mode = EXPRESS_DELIVERY then */ 2018 recipient.fatal_error = "1"b; 2019 if recipient.fatal_error then do; /* ... it was fatal: close the mailbox */ 2020 call mailbox_$close (mailbox_idx, (0)); 2021 mailbox_idx = 0; 2022 end; 2023 else recipient.local_info.mailbox_idx = mailbox_idx; 2024 end; 2025 end; 2026 end; 2027 2028 else if (code = error_table_$logical_volume_not_defined) | (code = error_table_$logical_volume_not_connected) 2029 then do; 2030 /*** Mailbox is on a logical volume which isn't available right now: a transient error */ 2031 if deliver_options.queueing_mode = ALWAYS_QUEUE then go to QUEUE_THE_MAILBOX; 2032 recipient.transient_error = "1"b; 2033 recipient.code = code; 2034 end; 2035 2036 else do; 2037 /*** Mailbox doesn't exist or we have only null access */ 2038 recipient.fatal_error = "1"b; 2039 recipient.code = code; 2040 end; 2041 2042 mailbox_idx = 0; /* don't let cleanup handler near it */ 2043 2044 if (deliver_options.queueing_mode = ALWAYS_QUEUE) & (recipient.local_info.mailbox_idx ^= 0) then do; 2045 call mailbox_$close (recipient.local_info.mailbox_idx, (0)); 2046 recipient.local_info.mailbox_idx = 0; /* don't keep the mailbox open if we're going to queue it */ 2047 QUEUE_THE_MAILBOX: /* ... control arrives here from LV not being available */ 2048 address_pathname = pathname_ (address_dirname, address_ename); 2049 recipient.foreign_address = rtrim (address_pathname); 2050 if recipient.foreign_address = address_pathname then 2051 recipient.to_queue = "1"b; /* ... pathname isn't too long for mlsys_mailer_ */ 2052 else do; /* ... sigh */ 2053 recipient.fatal_error = "1"b; 2054 recipient.code = mlsys_et_$address_pathname_too_long_to_q; 2055 end; 2056 end; 2057 2058 need_mailbox_message = need_mailbox_message | ^recipient.fatal_error; 2059 2060 return; 2061 2062 /* Forum meeting address */ 2063 2064 VALIDATE_OR_EXPAND_ADDRESS (5): 2065 call add_recipient (address_ptr, FORUM_RECIPIENT); 2066 recipient.no_acknowledge = "1"b; /* ... not that we'll even try */ 2067 2068 if mlsys_psp_$forum_not_available () then do; /* Forum (a PSP) wasn't purchased by this site */ 2069 recipient.fatal_error = "1"b; 2070 if get_ring_ () < mlsys_data_$lowest_forum_ring then 2071 recipient.code = mlsys_et_$no_forum_this_ring; 2072 else recipient.code = mlsys_et_$forum_not_available; 2073 return; 2074 end; 2075 2076 call mlsys_address_mgr_$get_address_pathname (address_ptr, address_dirname, address_ename, ((32)" "), (0)); 2077 /* this call has to work */ 2078 if address_dirname = "" then do; /* a forum meeting which couldn't be found by search list */ 2079 recipient.fatal_error = "1"b; 2080 recipient.code = forum_error_table_$not_in_search_list; 2081 return; 2082 end; 2083 2084 call forum_$open_forum (address_dirname, address_ename, forum_idx, code); 2085 2086 if code = 0 then do; 2087 /*** Forum meeting exists and we are a participant */ 2088 call forum_$real_forum_limits (forum_idx, ONLY_UNDELETED, (0), (0), (0), (0), forum_flags_word, (0)); 2089 2090 if forum_flags.read_only then do; 2091 /*** ... but the user can't enter transactions */ 2092 recipient.fatal_error = "1"b; 2093 recipient.code = forum_error_table_$read_only; 2094 call forum_$close_forum (forum_idx, (0)); 2095 forum_idx = 0; 2096 end; 2097 2098 else /*** ... user can enter the transaction: address is OK */ 2099 recipient.local_info.forum_idx = forum_idx; 2100 end; 2101 2102 else if (code = error_table_$logical_volume_not_defined) | (code = error_table_$logical_volume_not_connected) 2103 then do; 2104 /*** Forum is on a logical volume which isn't available right now: a transient error */ 2105 if deliver_options.queueing_mode = ALWAYS_QUEUE then go to QUEUE_THE_FORUM; 2106 recipient.transient_error = "1"b; 2107 recipient.code = code; 2108 end; 2109 2110 else do; 2111 /*** Forum doesn't exist or we aren't a participant */ 2112 recipient.fatal_error = "1"b; 2113 recipient.code = code; 2114 end; 2115 2116 forum_idx = 0; /* don't let cleanup handler near it */ 2117 2118 if (deliver_options.queueing_mode = ALWAYS_QUEUE) & (recipient.local_info.forum_idx ^= 0) then do; 2119 call forum_$close_forum (recipient.local_info.forum_idx, (0)); 2120 recipient.local_info.forum_idx = 0; /* don't keep the mailbox open if we're going to queue it */ 2121 QUEUE_THE_FORUM: /* ... control arrives here from LV not being available */ 2122 address_pathname = pathname_ (address_dirname, address_ename); 2123 recipient.foreign_address = rtrim (address_pathname); 2124 if recipient.foreign_address = address_pathname then 2125 recipient.to_queue = "1"b; /* ... pathname isn't too long for mlsys_mailer_ */ 2126 else do; /* ... sigh */ 2127 recipient.fatal_error = "1"b; 2128 recipient.code = mlsys_et_$address_pathname_too_long_to_q; 2129 end; 2130 end; 2131 2132 need_forum_message = need_forum_message | ^recipient.fatal_error; 2133 2134 return; 2135 2136 /* Foreign address: Computes the route to be used to deliver the message and then constructs the foreign "user name" and 2137* the system name to be used when calling the interim inter-system mailer (mlsys_mailer_). Unfortunately, mlsys_mailer_ 2138* imposes an arbitrary limit of 128 characters on the "user name" and 40 characters on the system name; these limits are 2139* enforced here as mlsys_mailer_ doesn't even bother to check for truncated names */ 2140 2141 VALIDATE_OR_EXPAND_ADDRESS (6): 2142 call add_recipient (address_ptr, NETWORK_RECIPIENT); 2143 recipient.no_acknowledge = "1"b; /* ... acknowledgements aren't supported across networks */ 2144 2145 if mlsys_psp_$ism_not_available () then do; /* no inter-system mailer on this site */ 2146 recipient.fatal_error = "1"b; 2147 recipient.code = mlsys_et_$ism_not_available; 2148 return; 2149 end; 2150 2151 address_route_ptr = null (); /* for cleaning up */ 2152 2153 call mlsys_address_route_mgr_$compute_route (address_ptr, address_route_ptr, code); 2154 2155 if code = 0 then do; 2156 /*** A possible route for sending mail to the foreign system has been determined ... */ 2157 call mlsys_address_mgr_$get_address_string (address_ptr, address_string, code); 2158 2159 if code = 0 then do; 2160 /*** ... and the unquoted user name isn't too long: construct proper user and system names */ 2161 call mlsys_format_$format_address_for_ism (address_string, address_route_ptr, 2162 recipient.foreign_address, recipient.foreign_system, code); 2163 if code ^= 0 then do; /* ... user/system name is too long if properly formatted */ 2164 recipient.fatal_error = "1"b; 2165 recipient.code = code; 2166 end; 2167 end; 2168 2169 else do; 2170 /*** ... but the unquoted user name is too long */ 2171 recipient.fatal_error = "1"b; 2172 recipient.code = mlsys_et_$foreign_address_too_long; 2173 end; 2174 end; 2175 2176 else do; 2177 /*** Can't get there from here: the local system may not have the interim inter-system mailer */ 2178 recipient.fatal_error = "1"b; 2179 recipient.code = code; 2180 end; 2181 2182 if address_route_ptr ^= null () then call mlsys_address_route_mgr_$free_address_route (address_route_ptr); 2183 2184 recipient.to_queue = (deliver_options.queueing_mode >= ALWAYS_QUEUE_FOREIGN); 2185 need_network_message = need_network_message | ^recipient.fatal_error; 2186 2187 return; 2188 2189 2190 /* Mail table address */ 2191 2192 VALIDATE_OR_EXPAND_ADDRESS (7): 2193 return; /* ... won't ever get here */ 2194 2195 /* Mailing list address: check for recursive mailing lists before actually expanding the list */ 2196 2197 VALIDATE_OR_EXPAND_ADDRESS (8): 2198 call add_recipient (address_ptr, NETWORK_RECIPIENT); 2199 recipient.no_acknowledge = "1"b; /* it won't really make any difference */ 2200 address_ptr = null (); /* prevents cleanup handler from freeing this address */ 2201 2202 list_expansion_ptr = null (); /* for common exit code */ 2203 2204 /*** Add another entry to the stack of mailing lists presently under expansion */ 2205 local_mld.previous_data_ptr = current_mailing_list_data_ptr; 2206 local_mld.mls_ptr = null (); 2207 current_mailing_list_data_ptr = addr (local_mld); 2208 2209 on condition (cleanup) 2210 begin; 2211 if local_mld.mls_ptr ^= null () then call terminate_file_ (local_mld.mls_ptr, 0, TERM_FILE_TERM, (0)); 2212 if mail_table_expansion & (address_ptr ^= null ()) then 2213 call mlsys_address_mgr_$free_address (address_ptr, (0)); 2214 end; 2215 2216 /*** Determine whether or not the mailing list actually exists */ 2217 call mlsys_address_mgr_$get_address_pathname (recipient.address_ptr, address_dirname, address_ename, 2218 address_component, (0)); /* this call has to work */ 2219 2220 call initiate_file_$component (address_dirname, address_ename, address_component, R_ACCESS, local_mld.mls_ptr, 2221 (0), code); 2222 if (code = error_table_$noentry) | (code = error_table_$no_component) then code = mlsys_et_$no_mailing_list; 2223 2224 if code = 0 then do; 2225 /*** Mailing list exists and user can access it: check for recursion */ 2226 do mailing_list_data_ptr = local_mld.previous_data_ptr repeat (mailing_list_data.previous_data_ptr) 2227 while (mailing_list_data_ptr ^= null ()); 2228 if local_mld.mls_ptr = mailing_list_data.mls_ptr then do; 2229 n_recipients = n_recipients - 1; /* not to be expanded: be sure it's not counted */ 2230 address_ptr = recipient.address_ptr; 2231 go to RETURN_FROM_EXPAND_LIST_ADDRESS; 2232 end; 2233 end; 2234 end; 2235 2236 else if (code = error_table_$logical_volume_not_defined) | (code = error_table_$logical_volume_not_connected) 2237 then do; 2238 /*** Mailing list is on a logical volume which isn't available right now: a transient error */ 2239 if deliver_options.queue_mailing_lists | (deliver_options.queueing_mode = ALWAYS_QUEUE) then 2240 go to QUEUE_THE_MAILING_LIST; 2241 recipient.transient_error = "1"b; 2242 recipient.code = code; 2243 go to RETURN_FROM_EXPAND_LIST_ADDRESS; 2244 end; 2245 2246 else do; 2247 /*** Mailing list doesn't exist or user can't access it */ 2248 recipient.fatal_error = "1"b; /* ... record the exact problem */ 2249 recipient.code = code; 2250 go to RETURN_FROM_EXPAND_LIST_ADDRESS; 2251 end; 2252 2253 /*** Control arrives here iff the mailing list exists and isn't part of a circular list */ 2254 2255 if ^p_expand_mailing_lists then /* just checking for its existence */ 2256 go to RETURN_FROM_EXPAND_LIST_ADDRESS; 2257 2258 if deliver_options.queue_mailing_lists | (deliver_options.queueing_mode = ALWAYS_QUEUE) then do; 2259 /*** Mail will be queued for this list: won't bother to expand it */ 2260 QUEUE_THE_MAILING_LIST: 2261 if mlsys_psp_$ism_not_available () then do; /* no inter-system mailer to handle the queueing */ 2262 recipient.fatal_error = "1"b; 2263 recipient.code = mlsys_et_$ism_not_available; 2264 end; 2265 else if address_component = "" then do; /* the list is in a segment ... */ 2266 address_pathname = pathname_ (address_dirname, address_ename); 2267 recipient.foreign_address = rtrim (address_pathname); 2268 if recipient.foreign_address = address_pathname then do; 2269 need_network_message = "1"b; /* ... so use the copy formatted for network transmission */ 2270 recipient.to_queue = "1"b; 2271 end; 2272 else do; /* ... but the pathname is too long for mlsys_mailer_ */ 2273 recipient.fatal_error = "1"b; 2274 recipient.code = mlsys_et_$address_pathname_too_long_to_q; 2275 end; 2276 end; 2277 else do; /* the list is an archive component ... */ 2278 recipient.fatal_error = "1"b; /* ... mlsys_mailer_ doesn't understand them yet */ 2279 recipient.code = mlsys_et_$cant_queue_mls_in_archive; 2280 end; 2281 go to RETURN_FROM_EXPAND_LIST_ADDRESS; 2282 end; 2283 2284 go to EXPAND_LIST_ADDRESS; /* expand the list */ 2285 2286 /* Named group address */ 2287 2288 VALIDATE_OR_EXPAND_ADDRESS (9): 2289 call add_recipient (address_ptr, NETWORK_RECIPIENT); 2290 recipient.no_acknowledge = "1"b; /* it won't really make any difference */ 2291 address_ptr = null (); /* prevents cleanup handler from freeing this address */ 2292 2293 local_mld.previous_data_ptr = current_mailing_list_data_ptr; 2294 local_mld.mls_ptr = null (); /* makes code shared with mailing lists work properly */ 2295 2296 2297 /* Expand the contents of a mailing list of named group */ 2298 2299 EXPAND_LIST_ADDRESS: 2300 list_expansion_ptr = null (); /* for cleanup handler */ 2301 2302 on condition (cleanup) 2303 begin; 2304 if local_mld.mls_ptr ^= null () then call terminate_file_ (local_mld.mls_ptr, 0, TERM_FILE_TERM, (0)); 2305 if list_expansion_ptr ^= null () then 2306 call mlsys_address_list_mgr_$free_address_list (list_expansion_ptr, (0)); 2307 if mail_table_expansion & (address_ptr ^= null ()) then 2308 call mlsys_address_mgr_$free_address (address_ptr, (0)); 2309 end; 2310 2311 call mlsys_address_mgr_$expand_list_address (recipient.address_ptr, ADDRESS_LIST_VERSION_2, list_expansion_ptr, 2312 code); 2313 if code ^= 0 then do; /* ... won't expand properly */ 2314 recipient.fatal_error = "1"b; /* ... record the exact problem */ 2315 recipient.code = code; 2316 go to RETURN_FROM_EXPAND_LIST_ADDRESS; 2317 end; 2318 2319 n_recipients = n_recipients - 1; /* won't need the recipient for the list address itself */ 2320 address_ptr = recipient.address_ptr; /* be sure that cleanup gets rid of this address now */ 2321 2322 n_recipients_before_expansion = n_recipients; /* in order to check for empty lists */ 2323 2324 if ^is_empty_list (list_expansion_ptr) then do; 2325 do idx = 1 to list_expansion_ptr -> address_list.n_addresses; 2326 call validate_or_expand_address (list_expansion_ptr -> address_list.addresses (idx), "0"b, 2327 use_copy_without_bcc, p_expand_mailing_lists, p_validate_only); 2328 end; 2329 end; 2330 2331 if n_recipients = n_recipients_before_expansion then 2332 /*** Empty mailing list or named group: complain about empty top level mailing lists only */ 2333 if (address_type = MAILING_LIST_ADDRESS) & p_top_level_address then do; 2334 code = mlsys_et_$empty_mailing_list; 2335 call add_recipient (address_ptr, NETWORK_RECIPIENT); 2336 address_ptr = null (); /* ... prevents cleanup from freeing this address */ 2337 recipient.fatal_error = "1"b; /* ... record the exact problem */ 2338 recipient.code = code; 2339 end; 2340 2341 RETURN_FROM_EXPAND_LIST_ADDRESS: 2342 if list_expansion_ptr ^= null () then call mlsys_address_list_mgr_$free_address_list (list_expansion_ptr, (0)); 2343 if mail_table_expansion & (address_ptr ^= null ()) then call mlsys_address_mgr_$free_address (address_ptr, (0)); 2344 2345 if local_mld.mls_ptr ^= null () then call terminate_file_ (local_mld.mls_ptr, 0, TERM_FILE_TERM, (0)); 2346 current_mailing_list_data_ptr = local_mld.previous_data_ptr; 2347 2348 return; 2349 2350 /* Internal to validate_or_expand_address: adds another address to the list of recipients */ 2351 2352 add_recipient: 2353 procedure (p_address_ptr, p_recipient_type); 2354 2355 dcl p_address_ptr pointer parameter; 2356 dcl p_recipient_type fixed binary parameter; 2357 2358 if n_recipients = n_recipients_allocated then 2359 /*** ... not enough room left in present list: switch to temporary segment if possible */ 2360 if baseno (recipients_list_ptr) = baseno (stackframeptr ()) then do; 2361 call mlsys_storage_mgr_$get_temp_segment (new_recipients_list_ptr, code); 2362 if code ^= 0 then do; /* ... can't get a temporary segment for the list */ 2363 P_code = code; 2364 go to RETURN_FROM_TRANSMIT_WITH_FATAL_ERROR; 2365 end; 2366 do idx = 1 to n_recipients; 2367 new_recipients_list_ptr -> recipients_list.recipients (idx) = 2368 recipients_list.recipients (idx); 2369 end; 2370 recipients_list_ptr = new_recipients_list_ptr; 2371 n_recipients_allocated = divide (sys_info$max_seg_size, recipient_size, 18, 0); 2372 end; 2373 else do; /* ... ran out of room in the temporary segment */ 2374 P_code = mlsys_et_$too_many_recipients; 2375 go to RETURN_FROM_TRANSMIT_WITH_FATAL_ERROR; 2376 end; 2377 2378 n_recipients = n_recipients + 1; /* must always count so mailing list validation will work */ 2379 recipient_ptr = addr (recipients_list.recipients (n_recipients)); 2380 2381 recipient.address_ptr = p_address_ptr; 2382 if ^p_top_level_address then /* need to hold on to it after its containing list is freed */ 2383 call mlsys_address_mgr_$increment_reference_count (recipient.address_ptr); 2384 2385 string (recipient.flags) = ""b; 2386 recipient.top_level = p_top_level_address; 2387 recipient.free_address = ^p_top_level_address | mail_table_expansion; 2388 recipient.use_copy_without_bcc = use_copy_without_bcc; 2389 recipient.type = p_recipient_type; 2390 recipient.top_level_info.list_idx = the_list_idx; 2391 recipient.top_level_info.address_idx = the_address_idx; 2392 recipient.duplicate_idx = 0; 2393 recipient.local_info.mailbox_idx, recipient.local_info.forum_idx = 0; 2394 recipient.foreign_info.foreign_address, recipient.foreign_info.foreign_system = ""; 2395 recipient.code = 0; /* haven't actually tried to validate it yet */ 2396 recipient.explanation = ""; 2397 2398 return; 2399 2400 end add_recipient; 2401 2402 end validate_or_expand_address; 2403 2404 /* Marks all duplicate recipients: Care must be taken that a top-level recipient is never marked as the duplicate of an 2405* expanded recipient; instead, the expanded recipient must be marked as the duplicate */ 2406 2407 mark_duplicate_recipients: 2408 procedure (); 2409 2410 dcl 1 other_recipient aligned based (other_recipient_ptr) like recipient; 2411 dcl other_recipient_ptr pointer; 2412 dcl (recipient_idx, other_recipient_idx, idx) fixed binary; 2413 2414 2415 do recipient_idx = 1 to n_recipients; 2416 2417 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 2418 2419 do other_recipient_idx = 1 to (recipient_idx - 1) while (^recipient.duplicate); 2420 other_recipient_ptr = addr (recipients_list.recipients (other_recipient_idx)); 2421 if (other_recipient.mailbox_idx ^= 0) & (other_recipient.mailbox_idx = recipient.mailbox_idx) then do; 2422 MARK_RECIPIENT_AS_A_DUPLICATE: 2423 if recipient.top_level & ^other_recipient.top_level then do; 2424 /*** Other recipient is part of a list expansion and we aren't: mark it as our duplicate */ 2425 do idx = 1 to (recipient_idx - 1); 2426 /*** ... change all duplicates of the other recipient to be our duplicates */ 2427 if recipients_list.recipients (idx).duplicate_idx = other_recipient_idx then 2428 recipients_list.recipients (idx).duplicate_idx = recipient_idx; 2429 end; 2430 other_recipient.duplicate = "1"b; 2431 other_recipient.duplicate_idx = recipient_idx; 2432 end; 2433 else do; 2434 /*** Either both recipients are top level, both are expansions, or we are an expansion and 2435* the other is top level: We are marked as the duplicate */ 2436 recipient.duplicate = "1"b; 2437 recipient.duplicate_idx = other_recipient_idx; 2438 end; 2439 end; 2440 2441 else if (other_recipient.forum_idx ^= 0) & (other_recipient.forum_idx = recipient.forum_idx) then 2442 go to MARK_RECIPIENT_AS_A_DUPLICATE; 2443 2444 else if ((recipient.mailbox_idx = 0) & (other_recipient.mailbox_idx = 0)) 2445 & ((recipient.forum_idx = 0) & (other_recipient.forum_idx = 0)) then 2446 if mlsys_address_mgr_$compare_addresses (other_recipient.address_ptr, recipient.address_ptr, (0)) 2447 then 2448 go to MARK_RECIPIENT_AS_A_DUPLICATE; 2449 end; 2450 end; 2451 2452 return; 2453 2454 end mark_duplicate_recipients; 2455 2456 /* Prepares a version of the message which is suitable for placement in a mailbox: This edition always creates a 2457* mail_format structure followed immediately by its corresponding mf_extension structure */ 2458 2459 prepare_message_for_mailbox: 2460 procedure (p_include_bcc_field, p_mailbox_message_ptr, p_mailbox_message_lth, p_code); 2461 2462 dcl p_include_bcc_field bit (1) aligned parameter; 2463 dcl p_mailbox_message_ptr pointer parameter; 2464 dcl p_mailbox_message_lth fixed binary (24) parameter; 2465 dcl p_code fixed binary (35) parameter; 2466 2467 dcl (original_mf_ptr, original_mf_extension_ptr, stack_truncation_ptr) pointer; 2468 dcl code fixed binary (35); 2469 dcl mailbox_message_lth fixed binary (19); 2470 dcl (buffer_idx, formatting_mode) fixed binary; 2471 2472 2473 if p_include_bcc_field then /* insure that the original bcc is in the message ... */ 2474 message.bcc = saved_message_data.bcc; 2475 else message.bcc = null (); /* bcc field not required */ 2476 2477 n_message_buffers_used, buffer_idx = n_message_buffers_used + 1; 2478 message_buffers (buffer_idx) = null (); 2479 2480 if message.bcc = saved_message_data.bcc then do; /* check if we can bypass formatting ... */ 2481 call mlsys_mailbox_mgr_$get_message_mf_if_canonical (message_ptr, original_mf_ptr, 2482 original_mf_extension_ptr, code); 2483 if code = 0 then /* ... a canonical in-mailbox message */ 2484 if added_redistribution then 2485 formatting_mode = REDISTRIBUTION_FORMATTING; 2486 else formatting_mode = COPY_FORMATTING; 2487 else formatting_mode = FULL_FORMATTING; /* ... non-canonical in-mailbox or a new message */ 2488 end; 2489 else formatting_mode = FULL_FORMATTING; 2490 2491 2492 /* Try to create the message on the stack first */ 2493 2494 call cu_$grow_stack_frame (STACK_EXTENSION, message_buffers (buffer_idx), (0)); 2495 2496 mail_format_ptr = message_buffers (buffer_idx); 2497 2498 call format_the_message ((STACK_EXTENSION)); 2499 2500 if code = 0 then do; /* it fits */ 2501 stack_truncation_ptr = 2502 addwordno (message_buffers (buffer_idx), (mailbox_message_lth + 16 - mod (mailbox_message_lth, 16))); 2503 call cu_$shrink_stack_frame (stack_truncation_ptr, (0)); 2504 end; 2505 2506 2507 else if code = error_table_$smallarg then do; 2508 2509 call cu_$shrink_stack_frame (message_buffers (buffer_idx), (0)); 2510 2511 /* Message won't fit on the stack: try a temporary segment. Try to use the remainder of any previously obtained temporary 2512* segment first */ 2513 2514 if last_temp_segment_ptr ^= null () then /* we already have a temporary segment ... */ 2515 if (last_temp_segment_used + STACK_EXTENSION) < sys_info$max_seg_size then do; 2516 message_buffers (buffer_idx) = addwordno (last_temp_segment_ptr, last_temp_segment_used); 2517 call format_the_message ((sys_info$max_seg_size - last_temp_segment_used)); 2518 if code ^= 0 then 2519 if code = error_table_$smallarg then 2520 go to USE_VIRGIN_TEMP_SEGMENT; 2521 else call abort_prepare_message_for_mailbox (code); 2522 end; 2523 2524 else go to USE_VIRGIN_TEMP_SEGMENT; /* not enough room in last segment: get another one */ 2525 2526 else do; /* first time we had to try a temporary segment */ 2527 USE_VIRGIN_TEMP_SEGMENT: 2528 call mlsys_storage_mgr_$get_temp_segment (last_temp_segment_ptr, code); 2529 if code ^= 0 then call abort_prepare_message_for_mailbox (code); 2530 last_temp_segment_used = 0; /* ... the temporary segment is emtpy */ 2531 message_buffers (buffer_idx) = last_temp_segment_ptr; 2532 call format_the_message (sys_info$max_seg_size); 2533 if code ^= 0 then /* ... any type of error is fatal here */ 2534 if code = error_table_$smallarg then 2535 call abort_prepare_message_for_mailbox (mlsys_et_$message_too_large); 2536 else call abort_prepare_message_for_mailbox (code); 2537 end; 2538 2539 last_temp_segment_used = last_temp_segment_used + mailbox_message_lth + 16 - mod (mailbox_message_lth, 16); 2540 end; 2541 2542 else call abort_prepare_message_for_mailbox (code); 2543 2544 2545 /* Complete construction of the mail_format structure and return it and return it and the mf_extension to the caller */ 2546 2547 mail_format_ptr = message_buffers (buffer_idx); 2548 mail_format.version = MAIL_FORMAT_VERSION_4; 2549 mail_format.sent_from = ""; 2550 unspec (mail_format.switches) = "0"b; 2551 if deliver_options.delivery_mode ^= ORDINARY_DELIVERY then mail_format.wakeup = "1"b; 2552 mail_format.acknowledge = deliver_options.acknowledge; 2553 mail_format.canonical = "1"b; 2554 2555 p_mailbox_message_ptr = message_buffers (buffer_idx); 2556 p_mailbox_message_lth = 36 * mailbox_message_lth; 2557 p_code = 0; /* success */ 2558 2559 RETURN_FROM_PREPARE_MESSAGE_FOR_MAILBOX: 2560 return; 2561 2562 2563 2564 /* Internal to prepare_message_for_mailbox: aborts after a fatal error */ 2565 2566 abort_prepare_message_for_mailbox: 2567 procedure (p_return_code); 2568 2569 dcl p_return_code fixed binary (35) parameter; 2570 2571 p_code = p_return_code; 2572 go to RETURN_FROM_PREPARE_MESSAGE_FOR_MAILBOX; 2573 2574 end abort_prepare_message_for_mailbox; 2575 2576 2577 2578 /* Internal to prepare_message_for_mailbox: actually formats the message */ 2579 2580 format_the_message: 2581 procedure (p_buffer_size); 2582 2583 dcl p_buffer_size fixed binary (19) parameter; 2584 2585 if formatting_mode = FULL_FORMATTING then 2586 call mlsys_format_$format_message_for_mailbox (message_ptr, message_buffers (buffer_idx), 2587 p_buffer_size, mailbox_message_lth, code); 2588 2589 else if formatting_mode = COPY_FORMATTING then do; 2590 mailbox_message_lth = 2591 currentsize (original_mf_ptr -> mail_format) 2592 + currentsize (original_mf_extension_ptr -> mf_extension); 2593 if mailbox_message_lth <= p_buffer_size then do; 2594 mail_format_ptr = message_buffers (buffer_idx); 2595 mf_extension_ptr = addwordno (mail_format_ptr, currentsize (original_mf_ptr -> mail_format)); 2596 mail_format.header = original_mf_ptr -> mail_format.header; 2597 mail_format.text = original_mf_ptr -> mail_format.text; 2598 mf_extension.n_text_fragments = original_mf_extension_ptr -> mf_extension.n_text_fragments; 2599 mf_extension.text_fragments = original_mf_extension_ptr -> mf_extension.text_fragments; 2600 code = 0; 2601 end; 2602 else code = error_table_$smallarg; 2603 end; 2604 2605 else /*** if formatting_mode = REDISTRIBUTION_FORMATTING then */ 2606 call mlsys_format_$format_canon_redistributed_msg (message_ptr, original_mf_ptr, 2607 original_mf_extension_ptr, message_buffers (buffer_idx), p_buffer_size, mailbox_message_lth, 2608 code); 2609 2610 return; 2611 2612 end format_the_message; 2613 2614 end prepare_message_for_mailbox; 2615 2616 /* Adds the supplied message to the specified mailbox */ 2617 2618 add_message_to_mailbox: 2619 procedure (p_mailbox_idx, p_mailbox_message_ptr, p_mailbox_message_lth, p_force_no_acknowledge, p_code); 2620 2621 dcl p_mailbox_idx fixed binary parameter; 2622 dcl p_mailbox_message_ptr pointer parameter; 2623 dcl p_mailbox_message_lth fixed binary (24) parameter; 2624 dcl p_force_no_acknowledge bit (1) unaligned parameter; 2625 dcl p_code fixed binary (35) parameter; 2626 2627 dcl 1 mbx_add_options aligned, /* control options to mailbox_$wakeup_aim_add_index */ 2628 2 normal_wakeup bit (1) unaligned, /* ... ON => send a normal wakeup (needs "w" access) */ 2629 2 urgent_wakeup bit (1) unaligned, /* ... ON => send an urgent wakeup (unused) */ 2630 2 always_add bit (1) unaligned, /* ... ON => add message even if wakeup not sent */ 2631 2 never_add bit (1) unaligned, /* ... ON => never add the message; just send a wakeup */ 2632 2 mbz bit (32) unaligned; 2633 2634 dcl code fixed binary (35); 2635 dcl retry_count fixed binary; 2636 dcl try_to_mail bit (1) aligned; 2637 2638 string (mbx_add_options) = ""b; 2639 if deliver_options.delivery_mode = ORDINARY_DELIVERY then mbx_add_options.always_add = "1"b; 2640 else if deliver_options.delivery_mode = INTERACTIVE_DELIVERY then 2641 mbx_add_options.normal_wakeup, mbx_add_options.always_add = "1"b; 2642 else /*** if deliver_options.delivery_mode = EXPRESS_DELIVERY then */ 2643 mbx_add_options.normal_wakeup = "1"b; 2644 2645 on condition (record_quota_overflow) 2646 begin; /* no room in mailbox (sigh) */ 2647 code = error_table_$rqover; 2648 go to MAILBOX_ADD_CALL_COMPLETED; 2649 end; 2650 2651 retry_count = 0; 2652 try_to_mail = "1"b; 2653 2654 p_mailbox_message_ptr -> mail_format.acknowledge = 2655 p_mailbox_message_ptr -> mail_format.acknowledge & ^p_force_no_acknowledge; 2656 2657 do while (try_to_mail); 2658 call mailbox_$wakeup_aim_add_index (p_mailbox_idx, p_mailbox_message_ptr, p_mailbox_message_lth, 2659 string (mbx_add_options), message.access_class, ((72)"0"b), code); 2660 if code = error_table_$lock_wait_time_exceeded then do; 2661 retry_count = retry_count + 1; 2662 try_to_mail = (retry_count < mlsys_data_$max_lock_wait_retries); 2663 end; 2664 else try_to_mail = "0"b; /* have our result */ 2665 end; 2666 2667 MAILBOX_ADD_CALL_COMPLETED: 2668 revert condition (record_quota_overflow); 2669 2670 p_mailbox_message_ptr -> mail_format.acknowledge = deliver_options.acknowledge; 2671 2672 if code = error_table_$no_append then code = mlsys_et_$no_a_permission; 2673 if code = error_table_$bigarg then code = mlsys_et_$message_too_large; 2674 if code = error_table_$notalloc then code = mlsys_et_$mailbox_full; 2675 p_code = code; /* save the code associated with the actual message */ 2676 2677 if deliver_options.recipient_notification & (deliver_options.delivery_mode = ORDINARY_DELIVERY) & (code = 0) 2678 then do; /* send a notification if the mail was sent OK */ 2679 if ^notification_initialized_sw then call initialize_notification (); 2680 on condition (record_quota_overflow) go to IGNORE_NOTIFICATION; 2681 string (mbx_add_options) = ""b; 2682 mbx_add_options.normal_wakeup = "1"b; /* ... express message */ 2683 call mailbox_$wakeup_aim_add_index (p_mailbox_idx, addr (NOTIFICATION_MAIL_FORMAT), 2684 (36 * currentsize (NOTIFICATION_MAIL_FORMAT)), string (mbx_add_options), message.access_class, 2685 ((72)"0"b), (0)); 2686 IGNORE_NOTIFICATION: 2687 revert condition (record_quota_overflow); 2688 end; 2689 2690 return; 2691 2692 end add_message_to_mailbox; 2693 2694 2695 2696 /* Sends a test message to the currently open mailbox: A test message is used to determine whether an interactive can be 2697* properly delivered to the given mailbox */ 2698 2699 send_test_message: 2700 procedure (p_mailbox_idx, p_code); 2701 2702 dcl p_mailbox_idx fixed binary parameter; 2703 dcl p_code fixed binary (35) parameter; 2704 2705 dcl 1 mbx_add_options aligned, /* control options to mailbox_$wakeup_aim_add_index */ 2706 2 normal_wakeup bit (1) unaligned, /* ... ON => send a normal wakeup (needs "w" access) */ 2707 2 urgent_wakeup bit (1) unaligned, /* ... ON => send an urgent wakeup (unused) */ 2708 2 always_add bit (1) unaligned, /* ... ON => add message even if wakeup not sent */ 2709 2 never_add bit (1) unaligned, /* ... ON => never add the message; just send a wakeup */ 2710 2 mbz bit (32) unaligned; 2711 2712 if ^notification_initialized_sw then call initialize_notification (); 2713 2714 string (mbx_add_options) = ""b; 2715 mbx_add_options.normal_wakeup = "1"b; 2716 mbx_add_options.never_add = "1"b; /* just see if we can do it */ 2717 2718 if deliver_options.delivery_mode = INTERACTIVE_DELIVERY then mbx_add_options.always_add = "1"b; 2719 2720 call mailbox_$wakeup_aim_add_index (p_mailbox_idx, addr (NOTIFICATION_MAIL_FORMAT), 0, string (mbx_add_options), 2721 message.access_class, ((72)"0"b), p_code); 2722 2723 if p_code = error_table_$no_append then p_code = mlsys_et_$no_a_permission; 2724 2725 return; 2726 2727 end send_test_message; 2728 2729 /* Prepares a version of the message which is suitable for placement in a forum meeting */ 2730 2731 prepare_message_for_forum: 2732 procedure (p_include_bcc_field, p_forum_message_ptr, p_forum_message_lth, p_code); 2733 2734 dcl p_include_bcc_field bit (1) aligned parameter; 2735 dcl p_forum_message_ptr pointer parameter; 2736 dcl p_forum_message_lth fixed binary (21) parameter; 2737 dcl p_code fixed binary (35) parameter; 2738 2739 dcl (forum_message_ptr, stack_truncation_ptr) pointer; 2740 dcl code fixed binary (35); 2741 dcl forum_message_lth fixed binary (21); 2742 dcl forum_message_n_words fixed binary (18); 2743 dcl buffer_idx fixed binary; 2744 2745 2746 if p_include_bcc_field then /* insure that the original bcc is in the message ... */ 2747 message.bcc = saved_message_data.bcc; 2748 else message.bcc = null (); /* bcc field not required */ 2749 2750 n_message_buffers_used, buffer_idx = n_message_buffers_used + 1; 2751 message_buffers (buffer_idx) = null (); 2752 2753 2754 /* Try to create the message on the stack first */ 2755 2756 call cu_$grow_stack_frame (STACK_EXTENSION, message_buffers (buffer_idx), (0)); 2757 2758 forum_message_ptr = message_buffers (buffer_idx); 2759 2760 call mlsys_format_$format_message_for_forum (message_ptr, forum_message_ptr, (4 * STACK_EXTENSION), 2761 forum_message_lth, code); 2762 2763 if code = 0 then do; /* it fits ... */ 2764 forum_message_n_words = divide ((forum_message_lth + 3), 4, 18, 0); 2765 stack_truncation_ptr = 2766 addwordno (message_buffers (buffer_idx), 2767 (forum_message_n_words + 16 - mod (forum_message_n_words, 16))); 2768 call cu_$shrink_stack_frame (stack_truncation_ptr, (0)); 2769 end; 2770 2771 2772 else if code = error_table_$smallarg then do; 2773 2774 call cu_$shrink_stack_frame (message_buffers (buffer_idx), (0)); 2775 2776 /* Message won't fit on the stack: try a temporary segment. Try to use the remainder of any previously obtained temporary 2777* segment first */ 2778 2779 if last_temp_segment_ptr ^= null () then /* we already have a temporary segment ... */ 2780 if (last_temp_segment_used + STACK_EXTENSION) < sys_info$max_seg_size then do; 2781 message_buffers (buffer_idx), forum_message_ptr = 2782 addwordno (last_temp_segment_ptr, last_temp_segment_used); 2783 call mlsys_format_$format_message_for_forum (message_ptr, forum_message_ptr, 2784 (4 * (sys_info$max_seg_size - last_temp_segment_used)), forum_message_lth, code); 2785 if code ^= 0 then 2786 if code = error_table_$smallarg then 2787 go to USE_VIRGIN_TEMP_SEGMENT; 2788 else call abort_prepare_message_for_forum (code); 2789 end; 2790 2791 else go to USE_VIRGIN_TEMP_SEGMENT; /* not enough room in last segment: get another one */ 2792 2793 else do; /* first time we had to try a temporary segment */ 2794 USE_VIRGIN_TEMP_SEGMENT: 2795 call mlsys_storage_mgr_$get_temp_segment (last_temp_segment_ptr, code); 2796 if code ^= 0 then call abort_prepare_message_for_forum (code); 2797 last_temp_segment_used = 0; /* ... the temporary segment is emtpy */ 2798 message_buffers (buffer_idx), forum_message_ptr = last_temp_segment_ptr; 2799 call mlsys_format_$format_message_for_forum (message_ptr, forum_message_ptr, 2800 (4 * sys_info$max_seg_size), forum_message_lth, code); 2801 if code ^= 0 then /* ... any error here is fatal */ 2802 if code = error_table_$smallarg then 2803 call abort_prepare_message_for_forum (mlsys_et_$message_too_large); 2804 else call abort_prepare_message_for_forum (code); 2805 end; 2806 2807 forum_message_n_words = divide ((forum_message_lth + 3), 4, 18, 0); 2808 last_temp_segment_used = 2809 last_temp_segment_used + forum_message_n_words + 16 - mod (forum_message_n_words, 16); 2810 end; 2811 2812 else call abort_prepare_message_for_forum (code); 2813 2814 p_forum_message_ptr = forum_message_ptr; 2815 p_forum_message_lth = forum_message_lth; 2816 p_code = 0; /* success */ 2817 2818 RETURN_FROM_PREPARE_MESSAGE_FOR_FORUM: 2819 return; 2820 2821 2822 2823 /* Intneral to prepare_message_for_forum: aborts after a fatal error */ 2824 2825 abort_prepare_message_for_forum: 2826 procedure (p_return_code); 2827 2828 dcl p_return_code fixed binary (35) parameter; 2829 2830 p_code = p_return_code; 2831 go to RETURN_FROM_PREPARE_MESSAGE_FOR_FORUM; 2832 2833 end abort_prepare_message_for_forum; 2834 2835 end prepare_message_for_forum; 2836 2837 /* Adds the supplied message to the specified forum meeting */ 2838 2839 add_message_to_forum: 2840 procedure (p_forum_idx, p_forum_message_ptr, p_forum_message_lth, p_code); 2841 2842 dcl p_forum_idx fixed binary parameter; 2843 dcl p_forum_message_ptr pointer parameter; 2844 dcl p_forum_message_lth fixed binary (21) parameter; 2845 dcl p_code fixed binary (35) parameter; 2846 2847 dcl forum_message character (p_forum_message_lth) unaligned based (p_forum_message_ptr); 2848 dcl code fixed binary (35); 2849 2850 on condition (record_quota_overflow) 2851 begin; /* no room in forum (sigh) */ 2852 code = error_table_$rqover; 2853 go to FORUM_ENTER_CALL_COMPLETED; 2854 end; 2855 2856 call forum_$enter_trans (p_forum_idx, forum_message, 0, message_subject, "1"b, (0), code); 2857 2858 FORUM_ENTER_CALL_COMPLETED: 2859 if code = forum_error_table_$rqo then code = error_table_$rqover; 2860 2861 p_code = code; 2862 2863 return; 2864 2865 end add_message_to_forum; 2866 2867 /* Prepares a version of the message which is suitable for transmission across a network using DOD-standard RFC822 format: 2868* In this release, only networks using this format are supported */ 2869 2870 prepare_message_for_network: 2871 procedure (p_include_bcc_field, p_network_message_ptr, p_network_message_lth, p_code); 2872 2873 dcl p_include_bcc_field bit (1) aligned parameter; 2874 dcl p_network_message_ptr pointer parameter; 2875 dcl p_network_message_lth fixed binary (21) parameter; 2876 dcl p_code fixed binary (35) parameter; 2877 2878 dcl (network_message_ptr, stack_truncation_ptr) pointer; 2879 dcl code fixed binary (35); 2880 dcl network_message_lth fixed binary (21); 2881 dcl network_message_n_words fixed binary (18); 2882 dcl buffer_idx fixed binary; 2883 2884 2885 if p_include_bcc_field then /* insure that the original bcc is in the message ... */ 2886 message.bcc = saved_message_data.bcc; 2887 else message.bcc = null (); /* bcc field not required */ 2888 2889 n_message_buffers_used, buffer_idx = n_message_buffers_used + 1; 2890 message_buffers (buffer_idx) = null (); 2891 2892 2893 /* Try to create the message on the stack first */ 2894 2895 call cu_$grow_stack_frame (STACK_EXTENSION, message_buffers (buffer_idx), (0)); 2896 2897 network_message_ptr = message_buffers (buffer_idx); 2898 2899 call mlsys_format_$format_message_for_rfc822_network (message_ptr, network_message_ptr, (4 * STACK_EXTENSION), 2900 network_message_lth, code); 2901 2902 if code = 0 then do; /* it fits ... */ 2903 network_message_n_words = divide ((network_message_lth + 3), 4, 18, 0); 2904 stack_truncation_ptr = 2905 addwordno (message_buffers (buffer_idx), 2906 (network_message_n_words + 16 - mod (network_message_n_words, 16))); 2907 call cu_$shrink_stack_frame (stack_truncation_ptr, (0)); 2908 end; 2909 2910 2911 else if code = error_table_$smallarg then do; 2912 2913 call cu_$shrink_stack_frame (message_buffers (buffer_idx), (0)); 2914 2915 /* Message won't fit on the stack: try a temporary segment. Try to use the remainder of any previously obtained temporary 2916* segment first */ 2917 2918 if last_temp_segment_ptr ^= null () then /* we already have a temporary segment ... */ 2919 if (last_temp_segment_used + STACK_EXTENSION) < sys_info$max_seg_size then do; 2920 message_buffers (buffer_idx), network_message_ptr = 2921 addwordno (last_temp_segment_ptr, last_temp_segment_used); 2922 call mlsys_format_$format_message_for_rfc822_network (message_ptr, network_message_ptr, 2923 (4 * (sys_info$max_seg_size - last_temp_segment_used)), network_message_lth, code); 2924 if code ^= 0 then 2925 if code = error_table_$smallarg then 2926 go to USE_VIRGIN_TEMP_SEGMENT; 2927 else call abort_prepare_message_for_network (code); 2928 end; 2929 2930 else go to USE_VIRGIN_TEMP_SEGMENT; /* not enough room in last segment: get another one */ 2931 2932 else do; /* first time we had to try a temporary segment */ 2933 USE_VIRGIN_TEMP_SEGMENT: 2934 call mlsys_storage_mgr_$get_temp_segment (last_temp_segment_ptr, code); 2935 if code ^= 0 then do; /* ... can't get a temporary segment, sorry */ 2936 p_code = code; 2937 return; 2938 end; 2939 last_temp_segment_used = 0; /* ... the temporary segment is emtpy */ 2940 message_buffers (buffer_idx), network_message_ptr = last_temp_segment_ptr; 2941 call mlsys_format_$format_message_for_rfc822_network (message_ptr, network_message_ptr, 2942 (4 * sys_info$max_seg_size), network_message_lth, code); 2943 if code ^= 0 then /* ... any error here is fatal */ 2944 if code = error_table_$smallarg then 2945 call abort_prepare_message_for_network (mlsys_et_$message_too_large); 2946 else call abort_prepare_message_for_network (code); 2947 end; 2948 2949 network_message_n_words = divide ((network_message_lth + 3), 4, 18, 0); 2950 last_temp_segment_used = 2951 last_temp_segment_used + network_message_n_words + 16 - mod (network_message_n_words, 16); 2952 end; 2953 2954 else call abort_prepare_message_for_network (code); 2955 2956 p_network_message_ptr = network_message_ptr; 2957 p_network_message_lth = network_message_lth; 2958 p_code = 0; /* success */ 2959 2960 RETURN_FROM_PREPARE_MESSAGE_FOR_NETWORK: 2961 return; 2962 2963 2964 2965 /* Intneral to prepare_message_for_network: aborts after a fatal error */ 2966 2967 abort_prepare_message_for_network: 2968 procedure (p_return_code); 2969 2970 dcl p_return_code fixed binary (35) parameter; 2971 2972 p_code = p_return_code; 2973 go to RETURN_FROM_PREPARE_MESSAGE_FOR_NETWORK; 2974 2975 end abort_prepare_message_for_network; 2976 2977 end prepare_message_for_network; 2978 2979 /* Attempts to deliver or queue mail using the interim inter-system mailer (mlsys_mailer_) */ 2980 2981 invoke_ism: 2982 procedure (); 2983 2984 return; /* not an entrypoint */ 2985 2986 dcl p_recipient_type fixed binary parameter; 2987 dcl p_use_copy_without_bcc bit (1) unaligned parameter; 2988 dcl p_message_ptr pointer parameter; 2989 dcl p_message_lth fixed binary (21) parameter; 2990 2991 dcl 1 ism_recipient aligned based (ism_recipient_ptr) like mlsys_mailer_recipient; 2992 dcl ism_recipient_ptr pointer; 2993 2994 dcl queued_only bit (1) aligned; 2995 dcl saved_code fixed binary (35); 2996 dcl (recipient_type, ism_recipient_idx, recipient_idx) fixed binary; 2997 2998 2999 deliver_by_ism: /* immediate delivery: queue transient errors if requested */ 3000 entry (p_use_copy_without_bcc, p_message_ptr, p_message_lth); 3001 3002 recipient_type = NETWORK_RECIPIENT; /* ... select only those foreign recipients ... */ 3003 queued_only = "0"b; /* ... which aren't already marked as to be queued */ 3004 go to INVOKE_ISM_COMMON; 3005 3006 3007 queue_via_ism: /* queue for later delivery */ 3008 entry (p_recipient_type, p_use_copy_without_bcc, p_message_ptr, p_message_lth); 3009 3010 recipient_type = p_recipient_type; /* ... select only those appropriate recipients ... */ 3011 queued_only = "1"b; /* ... which need to be queued */ 3012 3013 3014 INVOKE_ISM_COMMON: 3015 mlsys_mailer_data.version = MLSYS_MAILER_DATA_VERSION_1; 3016 mlsys_mailer_data.source = mlsys_data_$user_id; 3017 string (mlsys_mailer_data.header.flags) = ""b; 3018 mlsys_mailer_data.send = (deliver_options.delivery_mode ^= ORDINARY_DELIVERY); 3019 mlsys_mailer_data.mail = (deliver_options.delivery_mode = ORDINARY_DELIVERY); 3020 mlsys_mailer_data.dont_queue = ^queued_only; /* don't queue if trying to mail immediately */ 3021 mlsys_mailer_data.queue_only = queued_only; 3022 3023 3024 /* Build the list of recipients which match the selection criteria */ 3025 3026 mlsys_mailer_data.total_recipients = 0; /* no one yet */ 3027 3028 do recipient_idx = 1 to n_recipients; 3029 3030 recipient_ptr = addr (recipients_list.recipients (recipient_idx)); 3031 3032 if ^recipient.duplicate & ^recipient.fatal_error then 3033 if (recipient.type = recipient_type) & (recipient.use_copy_without_bcc = p_use_copy_without_bcc) 3034 & (recipient.to_queue = queued_only) then do; 3035 mlsys_mailer_data.total_recipients = mlsys_mailer_data.total_recipients + 1; 3036 ism_recipient_idxs (mlsys_mailer_data.total_recipients) = recipient_idx; 3037 ism_recipient_ptr = addr (mlsys_mailer_data.recipients (mlsys_mailer_data.total_recipients)); 3038 ism_recipient.user_name = recipient.foreign_address; 3039 ism_recipient.host_name = recipient.foreign_system; 3040 string (ism_recipient.flags) = ""b;/* ... might as well initialize everything */ 3041 ism_recipient.code = 0; 3042 ism_recipient.result = ""; 3043 end; 3044 end; 3045 3046 if mlsys_mailer_data.total_recipients = 0 then /* nothing of interest for this particular call */ 3047 return; 3048 3049 3050 /* Invoke mlsys_mailer_ while enforcing the temporary restriction that the acceess class of the mail must be equal to the 3051* process authorization */ 3052 3053 if aim_check_$equal (get_authorization_ (), message.access_class) then 3054 call mlsys_mailer_ (mlsys_mailer_data_ptr, p_message_ptr, p_message_lth); 3055 3056 else do; /* can't send up, down, or sideways with mlsys_mailer_ */ 3057 do ism_recipient_idx = 1 to mlsys_mailer_data.total_recipients; 3058 ism_recipient_ptr = addr (mlsys_mailer_data.recipients (ism_recipient_idx)); 3059 ism_recipient.processed, ism_recipient.fatal_error = "1"b; 3060 ism_recipient.code = error_table_$ai_restricted; 3061 end; 3062 end; 3063 3064 3065 /* Analyze the results: For immediate delivery, convert transient errors into queueing requests if appropriate */ 3066 3067 do ism_recipient_idx = 1 to mlsys_mailer_data.total_recipients; 3068 3069 ism_recipient_ptr = addr (mlsys_mailer_data.recipients (ism_recipient_idx)); 3070 recipient_ptr = addr (recipients_list.recipients (ism_recipient_idxs (ism_recipient_idx))); 3071 3072 if ism_recipient.delivered then recipient.code = mlsys_et_$message_delivered; 3073 3074 else if ism_recipient.queued then recipient.code = mlsys_et_$message_queued; 3075 3076 else if ism_recipient.expanded then recipient.code = mlsys_et_$message_queued_and_delivered; 3077 3078 else if ism_recipient.fatal_error then do; 3079 /*** Unable to deliver/queue the message ... */ 3080 recipient.fatal_error = "1"b; 3081 n_failed_recipients = n_failed_recipients + 1; 3082 if ism_recipient.code = error_table_$action_not_performed then 3083 /*** ... mlsys_mailer_ gave no specific reason: check the result text */ 3084 if ism_recipient.result = "No known path" then code = mlsys_et_$cant_compute_route; 3085 else if ism_recipient.result = "Unable to deliver mail." then do; 3086 recipient.fatal_error = "0"b; /* ... unknown failure: treat as transient */ 3087 n_failed_recipients = n_failed_recipients - 1; 3088 recipient.transient_error = "1"b; 3089 recipient.code = mlsys_et_$route_out_of_service; 3090 end; /* ... as queueing just might work */ 3091 else if (ism_recipient.result = "Unable to queue mail.") 3092 | (ism_recipient.result = "Queueing message.") then 3093 recipient.code = mlsys_et_$unable_to_queue_mail; 3094 else do; /* ... anything else is from the foreign system */ 3095 recipient.code = mlsys_et_$rejected_by_foreign_system; 3096 recipient.explanation = ism_recipient.result; 3097 end; 3098 else /*** if ism_recipient.code ^= error_table_$action_not_performed then */ 3099 recipient.code = ism_recipient.code; 3100 end; 3101 3102 else do; 3103 /*** Non-fatal error detected during immediate delivery */ 3104 recipient.transient_error = "1"b; /* ... can only be that the route is temporarily blocked */ 3105 recipient.code = mlsys_et_$route_out_of_service; 3106 end; 3107 3108 if recipient.transient_error then do; 3109 /*** Transient error: either make it fatal or try to queue the message as requested by the caller */ 3110 recipient.transient_error = "0"b; 3111 if queued_only then /* ... but we already tried queueing it */ 3112 recipient.fatal_error = "1"b; 3113 else /*** if ^queued_only then */ 3114 do; 3115 if deliver_options.queueing_mode >= QUEUE_FOREIGN_WHEN_NEEDED then do; 3116 recipient.to_queue = "1"b; /* ... queue it for delivery on the next pass */ 3117 recipient.code = 0; 3118 recipient.explanation = "the route to the foreign system is temporarily out of service"; 3119 end; 3120 else recipient.fatal_error = "1"b; 3121 end; 3122 if recipient.fatal_error then n_failed_recipients = n_failed_recipients + 1; 3123 end; 3124 3125 if recipient.fatal_error & (length (recipient.explanation) > 0) then do; 3126 /*** A fatal error while queuing after a transient error: make the transient fatal */ 3127 saved_code = recipient.code; /* ... will need to know if we change it */ 3128 if recipient.explanation = "the route to the foreign system is temporarily out of service" then 3129 recipient.code = mlsys_et_$route_out_of_service; 3130 else if recipient.explanation = "the mailbox is temporarily locked" then 3131 recipient.code = error_table_$lock_wait_time_exceeded; 3132 else if recipient.explanation = "the mailbox is temporarily full" then 3133 recipient.code = mlsys_et_$mailbox_full; 3134 else if recipient.explanation = "of record quota overflow" then recipient.code = error_table_$rqover; 3135 else if recipient.explanation = "its logical volume is not mounted" then 3136 recipient.code = error_table_$logical_volume_not_defined; 3137 else if recipient.explanation = "its logical volume is not attached" then 3138 recipient.code = error_table_$logical_volume_not_connected; 3139 else /*** if recipient.explanation = "the meeting is temporarily full" then */ 3140 recipient.code = forum_error_table_$meeting_bloat; 3141 if recipient.code ^= saved_code then /* ... we were able to get the old error back */ 3142 recipient.explanation = ""; 3143 end; 3144 3145 if ^recipient.fatal_error & (length (recipient.explanation) = 0) then never_transmitted = "0"b; 3146 end; 3147 3148 return; 3149 3150 end invoke_ism; 3151 3152 /* Adds the specified suffix to an entryname if possible */ 3153 3154 add_suffix: 3155 procedure (p_ename, p_suffix, p_new_ename, p_code); 3156 3157 dcl (p_ename, p_suffix) character (*) parameter; 3158 dcl p_new_ename character (32) parameter; 3159 dcl p_code fixed binary (35) parameter; 3160 3161 dcl (trimmed_ename, trimmed_suffix) character (33) varying; 3162 3163 if length (rtrim (p_ename)) > length (p_new_ename) then do; 3164 p_code = error_table_$entlong; 3165 return; 3166 end; 3167 3168 trimmed_ename = rtrim (p_ename); 3169 trimmed_suffix = "." || rtrim (p_suffix); 3170 3171 if length (trimmed_ename) > length (trimmed_suffix) then 3172 /* original name has room for the suffix */ 3173 if substr (trimmed_ename, (length (trimmed_ename) - length (trimmed_suffix) + 1)) = trimmed_suffix then 3174 ; /* proper suffix is already present */ 3175 else trimmed_ename = trimmed_ename || trimmed_suffix; 3176 else trimmed_ename = trimmed_ename || trimmed_suffix; 3177 3178 p_new_ename = trimmed_ename; /* return it */ 3179 3180 if length (trimmed_ename) <= length (p_new_ename) then 3181 p_code = 0; /* it fit */ 3182 else p_code = error_table_$entlong; /* sorry */ 3183 3184 return; 3185 3186 end add_suffix; 3187 3188 3189 3190 /* Returns "1"b if the given address list is empty */ 3191 3192 is_empty_list: 3193 procedure (p_address_list_ptr) returns (bit (1) aligned); 3194 3195 dcl p_address_list_ptr pointer parameter; 3196 3197 if p_address_list_ptr = null () then 3198 return ("1"b); 3199 3200 else return (p_address_list_ptr -> address_list.n_addresses = 0); 3201 3202 end is_empty_list; 3203 3204 initialize_notification: 3205 procedure (); 3206 3207 text_length = length (NOTIFICATION_TEXT); 3208 allocate NOTIFICATION_MAIL_FORMAT in (based_area) set (NOTIFICATION_MAIL_FORMAT_PTR); 3209 unspec (NOTIFICATION_MAIL_FORMAT.header) = "0"b; 3210 NOTIFICATION_MAIL_FORMAT.version = MAIL_FORMAT_VERSION_4; 3211 NOTIFICATION_MAIL_FORMAT.sent_from = ""; 3212 NOTIFICATION_MAIL_FORMAT.lines = 1; 3213 NOTIFICATION_MAIL_FORMAT.text_len = length (NOTIFICATION_TEXT); 3214 NOTIFICATION_MAIL_FORMAT.wakeup = "1"b; 3215 NOTIFICATION_MAIL_FORMAT.notify = "1"b; 3216 NOTIFICATION_MAIL_FORMAT.text = NOTIFICATION_TEXT; 3217 3218 notification_initialized_sw = "1"b; 3219 3220 end initialize_notification; 3221 1 1 /* BEGIN INCLUDE FILE ... mlsys_copy_ptr.incl.pl1 */ 1 2 /* Created: August 1983 by G. Palter */ 1 3 /* Recoded: October 1983 by W. Olin Sibert to be guarenteed to work */ 1 4 1 5 /* Copies a pointer parameter while changing the ring number in said pointer to the ring of execution: This change of 1 6* ring number is required to allow the mail system to properly manipulate ring-2 objects as requested by the caller as 1 7* the caller's pointer to said object would cause an access violation. The mail system does its own validation to insure 1 8* that the pointer provided by the caller is legitimate */ 1 9 1 10 copy_ptr: 1 11 procedure (p_pointer) returns (pointer); 1 12 1 13 dcl p_pointer pointer parameter; 1 14 dcl return_value pointer options (packed); 1 15 1 16 return_value = p_pointer; /* packed pointers don't have ring numbers ... */ 1 17 1 18 return (return_value); /* ... so it will be set to the ring of execution */ 1 19 1 20 end copy_ptr; 1 21 1 22 /* END INCLUDE FILE ... mlsys_copy_ptr.incl.pl1 */ 3222 3223 2 1 /* BEGIN INCLUDE FILE ... mlsys_data.incl.pl1 */ 2 2 /* Created: 20 Decembber 1978 by G. Palter */ 2 3 /* Modified: 1 July 1983 by G. Palter to merge with mlsys_internal_data_ */ 2 4 2 5 /* Constants defined by the Multics mail system for external use */ 2 6 2 7 dcl mlsys_data_$system_directory character (168) external; /* directory containing per-system data (mail table/queues) */ 2 8 2 9 2 10 /* Static data defined by the Multics mail system for external use */ 2 11 2 12 dcl mlsys_data_$user_default_mailbox_address pointer external; 2 13 /* -> the address of the user's default mailbox */ 2 14 dcl mlsys_data_$user_mail_table_address pointer external; /* -> the address of the user's entry in the mail table */ 2 15 dcl mlsys_data_$user_logbox_address pointer external; /* -> the address of the user's logbox */ 2 16 2 17 /* END INCLUDE FILE ... mlsys_data.incl.pl1 */ 3224 3225 3 1 /* BEGIN INCLUDE FILE ... mlsys_internal_data.incl.pl1 */ 3 2 3 3 3 4 /****^ HISTORY COMMENTS: 3 5* 1) change(86-06-11,Mills), approve(86-06-11,MCR7419), 3 6* audit(86-06-17,Margolin), install(86-06-30,MR12.0-1080): 3 7* Added mlsys_data_$domains_available. 3 8* END HISTORY COMMENTS */ 3 9 3 10 3 11 /* Created: May 1981 by G. Palter */ 3 12 /* Modified: July 1983 by G. Palter to merge with mlsys_data_ */ 3 13 3 14 /* Constants used internally by the Multics mail system */ 3 15 3 16 dcl mlsys_data_$max_opening_retries fixed binary external; /* maximum number of times to reopen a mailbox if it gets 3 17* damaged and salvaged while open */ 3 18 3 19 dcl mlsys_data_$max_lock_wait_retries fixed binary external; 3 20 /* maximum number of times to try to send a message while the 3 21* mailbox is locked (being salvaged?) */ 3 22 3 23 3 24 /* Allocation overhead factors: When allocating those structures with refer extents, insure that the variable portion of 3 25* the structure contains a multiple of the appropriate constant number of slots. These extra slots will be used for 3 26* later additions to the structure; when a new element must be added to a full structure, add this many new slots (rather 3 27* than a single new slot) 3 28* 3 29* The following expression should be used to determine the initial allocation: 3 30* 3 31* n_slots_to_allocate = n_slots_needed + CONSTANT - mod (n_slots_needed, CONSTANT); */ 3 32 3 33 dcl (mlsys_data_$mailbox_allocation, /* mailbox.messages */ 3 34 mlsys_data_$message_body_sections_allocation, /* message.body_sections */ 3 35 mlsys_data_$message_redistributions_list_allocation, /* message_redistributions_list.redistributions */ 3 36 mlsys_data_$message_user_fields_allocation, /* message_user_fields_list.user_fields */ 3 37 mlsys_data_$message_references_list_allocation, /* message_references_list.references */ 3 38 mlsys_data_$address_list_allocation) /* address_list.addresses */ 3 39 fixed binary external; 3 40 3 41 3 42 /* Static data user by the Multics mail system */ 3 43 3 44 dcl (mlsys_data_$forum_not_available, /* 1 => forum isn't available on the system or in this ring */ 3 45 mlsys_data_$ism_not_available, /* 1 => no inter-system mailer on this system */ 3 46 mlsys_data_$domains_available) /* 1 => domain name system software on this sytem */ 3 47 fixed binary (1) external; 3 48 3 49 dcl (mlsys_data_$subsystem_ring, /* ring in which the mail system is secured */ 3 50 mlsys_data_$highest_usable_ring, /* highest ring of execution which may use the mail system */ 3 51 mlsys_data_$lowest_forum_ring) /* lowest ring of execution with access to forum */ 3 52 fixed binary (3) external; 3 53 3 54 dcl mlsys_data_$temp_segment_list_ptr pointer external; /* -> list of all mail system temporary segments */ 3 55 3 56 dcl mlsys_data_$valid_segments (0:4095) bit (1) unaligned external; 3 57 /* indicates which segments have been used by the mail system 3 58* for the allocation of user-visible data in order to 3 59* validate that pointers passed from the user-ring are OK */ 3 60 3 61 dcl mlsys_area area based (mlsys_data_$subsystem_area_ptr);/* area used for all user-visible allocations ... */ 3 62 dcl mlsys_data_$subsystem_area_ptr pointer external; /* ... and the pointer on which it is based */ 3 63 3 64 dcl mlsys_data_$hash_tables_segment_ptr pointer external; /* -> hash tables used by the mail system */ 3 65 3 66 dcl mlsys_data_$transmit_cache_ptr pointer external; /* -> cache of recently used mailboxes for mlsys_transmit_ */ 3 67 3 68 dcl mlsys_data_$user_is_anonymous bit (1) aligned external;/* ON => the user is an anonymous user */ 3 69 3 70 dcl mlsys_data_$person_id character (24) varying external; /* the user's Person_id */ 3 71 dcl mlsys_data_$project_id character (12) varying external;/* the user's Project_id */ 3 72 dcl mlsys_data_$user_id character (32) varying external; /* the user's User_id (Person_id.Project_id) */ 3 73 3 74 /* END INCLUDE FILE ... mlsys_internal_data.incl.pl1 */ 3226 3227 4 1 /* BEGIN INCLUDE FILE ... mlsys_deliver_info.incl.pl1 */ 4 2 /* Created: June 1983 by G. Palter */ 4 3 4 4 /* Options for the mail_system_$deliver_message and mail_system_$redistribute_message entrypoints */ 4 5 4 6 dcl 1 deliver_options aligned based (deliver_options_ptr), 4 7 2 version character (8) unaligned, 4 8 2 delivery_mode fixed binary, /* deliver as an ordinary/interactive/express message */ 4 9 2 queueing_mode fixed binary, /* when to queue the message */ 4 10 2 queued_notification_mode fixed binary, /* when to notify sender about queued mail success/failure */ 4 11 2 flags, 4 12 3 abort bit (1) unaligned, /* ON => don't send it if any fatal errors are detected */ 4 13 3 send_if_empty bit (1) unaligned, /* ON => send the message even if its body is empty */ 4 14 3 recipient_notification bit (1) unaligned, /* ON => send "You have mail." notification */ 4 15 3 acknowledge bit (1) unaligned, /* ON => request ACK message when recipients read it */ 4 16 3 queue_mailing_lists bit (1) unaligned, /* ON => always queue the message for mailing lists */ 4 17 3 mbz bit (31) unaligned; /* must be set to ""b by the caller */ 4 18 4 19 dcl DELIVER_OPTIONS_VERSION_2 character (8) static options (constant) initial ("mlsdlo02"); 4 20 4 21 dcl deliver_options_ptr pointer; 4 22 4 23 /* Defined modes of delivery */ 4 24 4 25 dcl (ORDINARY_DELIVERY initial (1), /* send as an ordinary message */ 4 26 INTERACTIVE_DELIVERY initial (2), /* send as an interactive message */ 4 27 EXPRESS_DELIVERY initial (3)) /* send as an express interactive message; ie: deliver the 4 28* message only if the user is logged in */ 4 29 fixed binary static options (constant); 4 30 4 31 /* Defined modes for queuing mail on transient errors */ 4 32 4 33 dcl (NEVER_QUEUE initial (1), /* never queue: convert into a fatal error */ 4 34 QUEUE_FOREIGN_WHEN_NEEDED initial (2), /* never queue local mail; queue foreign mail on error */ 4 35 QUEUE_WHEN_NEEDED initial (3), /* queue all mail on any transient error */ 4 36 ALWAYS_QUEUE_FOREIGN initial (4), /* queue local mail on error; always queue foreign mail */ 4 37 ALWAYS_QUEUE initial (5)) /* always queue all mail */ 4 38 fixed binary static options (constant); 4 39 4 40 /* Defined modes of notification of success/failure to deliver queued mail */ 4 41 4 42 dcl (NEVER_NOTIFY initial (1), /* never notify the sender */ 4 43 NOTIFY_ON_ERROR initial (2), /* notify the sender only if it can not be delivered */ 4 44 ALWAYS_NOTIFY initial (3)) /* always notify the sender */ 4 45 fixed binary static options (constant); 4 46 4 47 /* Definition of the recipients of a message and the results of the attempted transmission */ 4 48 4 49 dcl 1 recipients_info aligned based (recipients_info_ptr), 4 50 2 header, 4 51 3 version character (8) unaligned, 4 52 3 area_ptr pointer, /* -> area for following structures; null => system free */ 4 53 3 expanded_recipients_result_list_ptr pointer, /* set -> expanded_recipients_result_list (if any) */ 4 54 3 n_recipients fixed binary, /* set to total # of recipients after expanding lists */ 4 55 3 n_unique_recipients fixed binary, /* set to total # of unique recipients */ 4 56 3 n_failed_recipients fixed binary, /* set to # of recipients that failed or would fail */ 4 57 3 n_lists fixed binary, /* # of address lists of recipients */ 4 58 2 lists (recipients_info_n_lists refer (recipients_info.n_lists)), 4 59 3 address_list_ptr pointer, /* -> an address list containing recipients */ 4 60 3 recipients_result_list_ptr pointer; /* set -> recipients_result_list for this address list */ 4 61 4 62 dcl RECIPIENTS_INFO_VERSION_2 character (8) static options (constant) initial ("mlsrcpt2"); 4 63 4 64 dcl (recipients_info_ptr, recipients_result_list_ptr, expanded_recipients_result_list_ptr) pointer; 4 65 4 66 dcl (recipients_info_n_lists, recipients_result_list_n_addresses, expanded_recipients_result_list_n_entries) 4 67 fixed binary; /* used to allocate these structures */ 4 68 4 69 4 70 /* Data structure returned by the mail system recording the results of the mailing for one of the input address lists */ 4 71 4 72 dcl 1 recipients_result_list aligned based (recipients_result_list_ptr), 4 73 2 n_addresses fixed binary, /* set to # of address in corresponding address list */ 4 74 2 pad bit (36), 4 75 2 results (recipients_result_list_n_addresses refer (recipients_result_list.n_addresses)), 4 76 3 code fixed binary (35), /* set to describe results of attempted delivery */ 4 77 3 expanded_list_info, /* set to identify any failing addresses found in the 4 78* expansion of this address ... */ 4 79 4 first_entry_idx fixed binary (18) unaligned unsigned, 4 80 /* ... index of first such address in structure below ... */ 4 81 4 n_entries fixed binary (18) unaligned unsigned,/* ... # of such addresses there for this address */ 4 82 3 duplicate_info, /* set to identify the prior address (if any) for which this 4 83* is a duplicate ... */ 4 84 4 list_idx fixed binary (18) unaligned unsigned, /* ... in which list ... */ 4 85 4 address_idx fixed binary (18) unaligned unsigned, /* ... and which address in that list */ 4 86 3 explanation character (128) varying; /* explanation associated with a fatal error or the message 4 87* being queued due to a transient error */ 4 88 4 89 4 90 /* Describes fatal or transient errors for those recipients which are part of mailing lists of named groups in one of the 4 91* caller's address lists */ 4 92 4 93 dcl 1 expanded_recipients_result_list aligned based (expanded_recipients_result_list_ptr), 4 94 2 n_entries fixed binary, /* set to # of failing expanded recipients */ 4 95 2 pad bit (36), 4 96 2 entries (expanded_recipients_result_list_n_entries refer (expanded_recipients_result_list.n_entries)), 4 97 3 address_ptr pointer, /* -> the failing address from the list/group */ 4 98 3 code fixed binary (35), /* set to describe why delivery failed */ 4 99 3 parent_address, /* set to identify the original recipient of whose expansion 4 100* this address is a part ... */ 4 101 4 list_idx fixed binary (18) unaligned unsigned, /* ... in which list ... */ 4 102 4 address_idx fixed binary (18) unaligned unsigned, /* ... and which address in that list */ 4 103 3 explanation character (128) varying; /* explanation associated with a fatal error or the message 4 104* being queued due to a transient error */ 4 105 4 106 /* END INCLUDE FILE ... mlsys_deliver_info.incl.pl1 */ 3228 3229 5 1 /* BEGIN INCLUDE FILE ... mlsys_message.incl.pl1 */ 5 2 5 3 5 4 /****^ HISTORY COMMENTS: 5 5* 1) change(85-12-19,Herbst), approve(86-03-25,MCR7367), 5 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 5 7* Added seen switch to message. 5 8* END HISTORY COMMENTS */ 5 9 5 10 5 11 /* Created: June 1983 by G. Palter */ 5 12 5 13 /* Definition of a message as used by the Multics Mail System */ 5 14 5 15 dcl 1 message aligned based (message_ptr), 5 16 2 version character (8) unaligned, 5 17 2 reserved bit (144), /* for exclusive use of the mail system */ 5 18 2 n_reply_references fixed binary, /* # of messages for which this is a reply */ 5 19 2 n_user_fields fixed binary, /* # of non-standard header fields in this message */ 5 20 2 n_redistributions fixed binary, /* # of times this message has been forwarded */ 5 21 2 n_body_sections fixed binary, /* # of sections in the body */ 5 22 2 flags, 5 23 3 interactive bit (1) unaligned, /* ON => this is an interactive message */ 5 24 3 can_be_deleted bit (1) unaligned, /* ON => the user can delete this message if desired */ 5 25 3 marked_for_deletion bit (1) unaligned, /* ON => message will be deleted when mailbox is closed */ 5 26 3 must_be_acknowledged bit (1) unaligned, /* ON => an ACK should be generated when message is read */ 5 27 3 seen bit (1) unaligned, /* ON => user has printed message at least once */ 5 28 3 reserved bit (31) unaligned, /* for use by the mail system */ 5 29 2 pad bit (36), 5 30 2 envelope like message_envelope, /* who/when/how the message was mailed & delivered */ 5 31 2 header, 5 32 3 message_id bit (72), /* ID of this message (same value for all copies) */ 5 33 3 access_class bit (72), /* AIM access class of this message */ 5 34 3 date_time_created fixed binary (71), /* date/time this message was composed */ 5 35 3 from pointer, /* -> address list of author(s) of the message */ 5 36 3 reply_to pointer, /* -> address list of recipients for reply (if not authors) */ 5 37 3 to pointer, /* -> address list of primary recipients */ 5 38 3 cc pointer, /* -> address list of secondary recipients */ 5 39 3 bcc pointer, /* -> address list of blind recipients */ 5 40 3 subject like message_text_field, /* subject of the message */ 5 41 3 reply_references pointer, /* -> list of messages for which this message is a reply */ 5 42 3 user_fields_list pointer, /* -> list of user-defined fields in this message */ 5 43 2 redistributions_list pointer, /* -> redistributions list for this message */ 5 44 2 body, 5 45 3 total_lines fixed binary (21), /* total # of lines in the body or -1 if indeterminate */ 5 46 3 pad bit (36), 5 47 3 body_sections (message_n_body_sections refer (message.n_body_sections)) like message_body_section; 5 48 5 49 dcl MESSAGE_VERSION_2 character (8) static options (constant) initial ("mlsmsg02"); 5 50 5 51 dcl message_subject character (message.header.subject.text_lth) unaligned based (message.header.subject.text_ptr); 5 52 5 53 dcl message_ptr pointer; 5 54 5 55 dcl (message_n_body_sections, message_trace_n_relays, message_n_redistributions, message_n_user_fields, 5 56 message_references_list_n_references) 5 57 fixed binary; /* for exclusive use of the mail system */ 5 58 5 59 /* Definition of a message envelope: describes when, by whom, and by what route the message was mailed */ 5 60 5 61 dcl 1 message_envelope aligned based (message_envelope_ptr), 5 62 2 date_time_mailed fixed binary (71), /* date/time this message was entered into the mail system */ 5 63 2 sender pointer, /* -> address of entity that mailed the message */ 5 64 2 trace pointer, /* -> message_trace describing how it got here */ 5 65 2 date_time_delivered fixed binary (71), /* date/time this message was delivered */ 5 66 2 delivered_by pointer, /* -> address of entity that delivered the message */ 5 67 2 acknowledge_to pointer; /* -> address of entity to receive ACK when message is read */ 5 68 5 69 dcl message_envelope_ptr pointer; 5 70 5 71 5 72 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the message envelope */ 5 73 5 74 dcl 1 message_envelope_parameter aligned based (message_envelope_parameter_ptr), 5 75 2 pad pointer, /* forces even word alignment */ 5 76 2 version character (8) unaligned, 5 77 2 envelope like message_envelope; 5 78 5 79 dcl MESSAGE_ENVELOPE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsenv02"); 5 80 5 81 dcl message_envelope_parameter_ptr pointer; 5 82 5 83 5 84 /* Definition of a message trace: describes the route and each relay operation by which a message was passed through the 5 85* networks to reach this recipient */ 5 86 5 87 dcl 1 message_trace aligned based (message_trace_ptr), 5 88 2 version character (8) unaligned, 5 89 2 reserved bit (144), /* ... exclusively for use by the mail system */ 5 90 2 implicit_route pointer, /* -> an address_route which defines the route it took */ 5 91 2 pad bit (36), 5 92 2 n_relays fixed binary, /* # of relay operations required to reach this site */ 5 93 2 relays (message_trace_n_relays refer (message_trace.n_relays)), 5 94 3 date_time_relayed fixed binary (71), /* ... when this relay operation took place */ 5 95 3 sending_host character (256) varying, /* ... the host which relayed the message */ 5 96 3 receiving_host character (256) varying, /* ... the host which received it */ 5 97 3 communications_media character (32) unaligned, /* ... medium over which relay took place (ARPA, Tymnet) */ 5 98 3 communications_protocol character (32) unaligned,/* ... low-level protocol used (TCP, X.25) */ 5 99 3 mail_protocol character (32) unaligned, /* ... mailer protocol used (SMTP, NBS) */ 5 100 3 relay_id bit (72), /* ... unique ID assigned by receiving system or ""b */ 5 101 3 relay_recipient pointer; /* ... -> address of recipient as given by sending system */ 5 102 5 103 dcl MESSAGE_TRACE_VERSION_2 character (8) static options (constant) initial ("mlstrc02"); 5 104 5 105 dcl message_trace_ptr pointer; 5 106 5 107 /* Definition of a message's redistributions list */ 5 108 5 109 dcl 1 message_redistributions_list aligned based (message.redistributions_list), 5 110 2 version character (8) unaligned, 5 111 2 reserved bit (144), /* ... exclusively for use by the mail system */ 5 112 2 pad bit (36), 5 113 2 n_redistributions fixed binary, /* # of redistributions */ 5 114 2 redistributions (message_n_redistributions refer (message_redistributions_list.n_redistributions)) 5 115 like message_redistribution; /* the redistributions: oldest first */ 5 116 5 117 dcl MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsrl002"); 5 118 5 119 5 120 /* Definition of a single redistribution (forwarding) of a message */ 5 121 5 122 dcl 1 message_redistribution aligned based (message_redistribution_ptr), 5 123 2 envelope like message_envelope, 5 124 2 header, 5 125 3 message_id bit (72), /* ID of this redistribution (same for all copies) */ 5 126 3 date_time_created fixed binary (71), /* date/time when this redistribution was made */ 5 127 3 from pointer, /* -> address list of authors of this redistribution */ 5 128 3 to pointer, /* -> address list of recipients of the redistribution */ 5 129 3 comment like message_text_field; /* optional comment associated with the redistribution */ 5 130 5 131 dcl message_redistribution_comment character (message_redistribution.comment.text_lth) unaligned 5 132 based (message_redistribution.comment.text_ptr); 5 133 5 134 dcl message_redistribution_ptr pointer; 5 135 5 136 5 137 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the redistributions of a message */ 5 138 5 139 dcl 1 message_redistribution_parameter aligned based (message_redistribution_parameter_ptr), 5 140 2 pad pointer, /* forces even word alignment */ 5 141 2 version character (8) unaligned, 5 142 2 redistribution like message_redistribution; 5 143 5 144 dcl MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsdist2"); 5 145 5 146 dcl message_redistribution_parameter_ptr pointer; 5 147 5 148 /* Definition of the list of user-defined fields in a message */ 5 149 5 150 dcl 1 message_user_fields_list aligned based (message.user_fields_list), 5 151 2 version character (8) unaligned, 5 152 2 reserved bit (144), /* ... exclusively for use by the mail system */ 5 153 2 pad bit (36), 5 154 2 n_user_fields fixed binary, /* # of user-defined fields in the message */ 5 155 2 user_fields (message_n_user_fields refer (message_user_fields_list.n_user_fields)) 5 156 like message_user_field; /* the actual user-defined fields */ 5 157 5 158 dcl MESSAGE_USER_FIELDS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsufl02"); 5 159 5 160 5 161 /* Definition of a user defined message header field */ 5 162 5 163 dcl 1 message_user_field aligned based (message_user_field_ptr), 5 164 2 header, 5 165 3 field_id bit (36) aligned, /* identifies the purpose of this field */ 5 166 3 field_type fixed binary, /* type of data contained in this field */ 5 167 2 field_type_variable bit (144); /* the actual data (see below) */ 5 168 5 169 dcl message_user_field_ptr pointer; 5 170 5 171 5 172 /* Defined types of user defined fields */ 5 173 5 174 dcl (MESSAGE_TEXT_USER_FIELD initial (1), /* content of the field is a text string */ 5 175 MESSAGE_ADDRESS_LIST_USER_FIELD initial (2), /* content of the field is an address list */ 5 176 MESSAGE_DATE_USER_FIELD initial (3), /* content of the field is a date/time */ 5 177 MESSAGE_INTEGER_USER_FIELD initial (4)) /* content of the filed is a fixed binary value */ 5 178 fixed binary static options (constant); 5 179 5 180 5 181 /* Structures used to access the data for the different types of user defined fields */ 5 182 5 183 dcl 1 message_text_user_field aligned based (message_user_field_ptr), 5 184 2 header like message_user_field.header, 5 185 2 text like message_text_field; /* the message text */ 5 186 5 187 dcl message_text_user_field_text character (message_text_user_field.text.text_lth) unaligned 5 188 based (message_text_user_field.text.text_ptr); 5 189 5 190 dcl 1 message_address_list_user_field aligned based (message_user_field_ptr), 5 191 2 header like message_user_field.header, 5 192 2 address_list_ptr pointer, /* -> the address list */ 5 193 2 pad bit (72); 5 194 5 195 dcl 1 message_date_user_field aligned based (message_user_field_ptr), 5 196 2 header like message_user_field.header, 5 197 2 date_time fixed binary (71), /* the clock reading */ 5 198 2 pad bit (72); 5 199 5 200 dcl 1 message_integer_user_field aligned based (message_user_field_ptr), 5 201 2 header like message_user_field.header, 5 202 2 value fixed binary (35), /* the integer value */ 5 203 2 pad bit (108); 5 204 5 205 5 206 /* Structure used in calls to mail_system_ entrypoints which manipulate the user-defined fields of a message */ 5 207 5 208 dcl 1 message_user_field_parameter aligned based (message_user_field_parameter_ptr), 5 209 2 pad pointer, /* forces even word alignment */ 5 210 2 version character (8) unaligned, 5 211 2 user_field like message_user_field; 5 212 5 213 dcl MESSAGE_USER_FIELD_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsudf02"); 5 214 5 215 dcl message_user_field_parameter_ptr pointer; 5 216 5 217 /* Definition of a list of message references used as the value of message header fields (eg: In-Reply-To) */ 5 218 5 219 dcl 1 message_references_list aligned based (message_references_list_ptr), 5 220 2 version character (8) unaligned, 5 221 2 reserved bit (144), /* ... exclusively for use by the mail system */ 5 222 2 pad bit (36), 5 223 2 n_references fixed binary, /* # of references in this list */ 5 224 2 references (message_references_list_n_references refer (message_references_list.n_references)) 5 225 like message_reference; /* the references themselves */ 5 226 5 227 dcl MESSAGE_REFERENCES_LIST_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 5 228 5 229 dcl message_references_list_ptr pointer; 5 230 5 231 5 232 /* Definition of a reference to another message */ 5 233 5 234 dcl 1 message_reference aligned based (message_reference_ptr), 5 235 2 message_id bit (72), /* ID of the other message */ 5 236 2 date_time_created fixed binary (71), /* date/time the other message was created */ 5 237 2 from pointer, /* -> address list of authors of the other message */ 5 238 2 subject like message_text_field; /* subject of the other message */ 5 239 5 240 dcl message_reference_subject character (message_reference.subject.text_lth) unaligned 5 241 based (message_reference.subject.text_ptr); 5 242 5 243 dcl message_reference_ptr pointer; 5 244 5 245 5 246 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate message references */ 5 247 5 248 dcl 1 message_reference_parameter aligned based (message_reference_parameter_ptr), 5 249 2 pad pointer, /* forces even word alignment */ 5 250 2 version character (8) unaligned, 5 251 2 reference like message_reference; 5 252 5 253 dcl MESSAGE_REFERENCE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 5 254 5 255 dcl message_reference_parameter_ptr pointer; 5 256 5 257 5 258 /* Definition of a text field in a message (Subject, Comment, or a user defined field) */ 5 259 5 260 dcl 1 message_text_field aligned based (message_text_field_ptr), 5 261 2 text_ptr pointer, /* -> the actual text */ 5 262 2 text_lth fixed binary (21), /* length of said text */ 5 263 2 flags, 5 264 3 multiline_text bit (1) unaligned, /* ON => the text of this field may span multiple lines; 5 265* OFF => the text will always be a single line */ 5 266 3 reserved bit (35) unaligned; /* for exclusive use of the mail system */ 5 267 5 268 dcl message_text_field_text character (message_text_field.text_lth) unaligned based (message_text_field.text_ptr); 5 269 5 270 dcl message_text_field_ptr pointer; 5 271 5 272 /* Definition of a section of the body of a message */ 5 273 5 274 dcl 1 message_body_section aligned based (message_body_section_ptr), 5 275 2 header, 5 276 3 section_type fixed binary, /* type of "text" stored in this section */ 5 277 3 section_n_lines fixed binary (21), /* # of lines in this section or -1 if indeterminate */ 5 278 2 section_type_variable bit (144); /* the actual data (see below) */ 5 279 5 280 dcl message_body_section_ptr pointer; 5 281 5 282 5 283 /* Defined types of message body sections */ 5 284 5 285 dcl (MESSAGE_PREFORMATTED_BODY_SECTION initial (1), /* text formatted by the authors/sender */ 5 286 MESSAGE_BIT_STRING_BODY_SECTION initial (2)) /* arbitrary bit string */ 5 287 fixed binary static options (constant); 5 288 5 289 5 290 /* Structures used to access the data for the different types of message body sections */ 5 291 5 292 dcl 1 message_preformatted_body_section aligned based (message_body_section_ptr), 5 293 2 header like message_body_section.header, 5 294 2 text_ptr pointer, /* -> the text */ 5 295 2 text_lth fixed binary (21), /* length of said text in characters */ 5 296 2 reserved bit (36); /* for exclusive use of the mail system */ 5 297 5 298 dcl message_preformatted_body_section_text character (message_preformatted_body_section.text_lth) unaligned 5 299 based (message_preformatted_body_section.text_ptr); 5 300 5 301 dcl 1 message_bit_string_body_section aligned based (message_body_section_ptr), 5 302 2 header like message_body_section.header, 5 303 2 bit_string_ptr pointer, /* -> the bit string */ 5 304 2 bit_string_lth fixed binary (24), /* length of said bit string in bits (obviously) */ 5 305 2 reserved bit (36); /* for exclusive use of the mail system */ 5 306 5 307 dcl message_bit_string_body_section_bit_string bit (message_bit_string_body_section.bit_string_lth) unaligned 5 308 based (message_bit_string_body_section.bit_string_ptr); 5 309 5 310 5 311 /* Structure used in calls to mail_system_ entrypoints which manipulate the sections of a message's body */ 5 312 5 313 dcl 1 message_body_section_parameter aligned based (message_body_section_parameter_ptr), 5 314 2 pad pointer, /* forces even word alignment */ 5 315 2 version character (8) unaligned, 5 316 2 section like message_body_section; 5 317 5 318 dcl MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsmbs02"); 5 319 5 320 dcl message_body_section_parameter_ptr pointer; 5 321 5 322 /* END INCLUDE FILE ... mlsys_message.incl.pl1 */ 3230 3231 6 1 /* BEGIN INCLUDE FILE ... mlsys_address_types.incl.pl1 */ 6 2 /* Created: June 1983 by G. Palter */ 6 3 6 4 /* Types of addresses supported by the Multics Mail System */ 6 5 6 6 dcl (INVALID_ADDRESS initial (0), /* a syntactically invalid address: used as a place holder 6 7* when parsing printed representations */ 6 8 USER_MAILBOX_ADDRESS initial (1), /* identifies a user's default mailbox */ 6 9 LOGBOX_ADDRESS initial (2), /* identifies a user's logbox */ 6 10 SAVEBOX_ADDRESS initial (3), /* identifies one of a user's saveboxes by pathname */ 6 11 MAILBOX_ADDRESS initial (4), /* identifies some other mailbox by pathname */ 6 12 FORUM_ADDRESS initial (5), /* identifies a forum meeting by pathname */ 6 13 FOREIGN_ADDRESS initial (6), /* identifies a user (or group) on another compute system */ 6 14 MAIL_TABLE_ADDRESS initial (7), /* identifies an entry in the system's mail table */ 6 15 MAILING_LIST_ADDRESS initial (8), /* identifies a mailing list by pathname */ 6 16 NAMED_GROUP_ADDRESS initial (9)) /* identifies a named group of addresses */ 6 17 fixed binary static options (constant); 6 18 6 19 /* END INCLUDE FILE ... mlsys_address_types.incl.pl1 */ 3232 3233 7 1 /* BEGIN INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 7 2 /* Created: June 1983 by G. Palter */ 7 3 7 4 /* Definition of an address list -- a collection of addresses used as the value of certain message fields, etc. */ 7 5 7 6 dcl 1 address_list aligned based (address_list_ptr), 7 7 2 version character (8) unaligned, 7 8 2 reserved bit (144), /* ... exclusively for use by the mail system */ 7 9 2 n_addresses fixed binary, /* # of address in this list */ 7 10 2 addresses (address_list_n_addresses refer (address_list.n_addresses)) pointer; 7 11 7 12 dcl ADDRESS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsals02"); 7 13 7 14 dcl address_list_ptr pointer; 7 15 7 16 dcl address_list_n_addresses fixed binary; /* reserved exclusively for use by the mail system */ 7 17 7 18 /* END INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 3234 3235 8 1 /* BEGIN INCLUDE FILE ... mlsys_mailbox_modes.incl.pl1 */ 8 2 /* Created: June 1983 by G. Palter */ 8 3 8 4 /* Extended access modes (and combinations thereof) defined for a mailbox */ 8 5 8 6 dcl (N_MBX_ACCESS initial ("0000000"b), /* no access */ 8 7 8 8 A_MBX_ACCESS initial ("1000000"b), /* add messages */ 8 9 D_MBX_ACCESS initial ("0100000"b), /* delete any message (also indicates owner of mailbox) */ 8 10 R_MBX_ACCESS initial ("0010000"b), /* read any message */ 8 11 O_MBX_ACCESS initial ("0001000"b), /* read/delete any message sent by yourself */ 8 12 S_MBX_ACCESS initial ("0000100"b), /* get count of messages in the mailbox */ 8 13 W_MBX_ACCESS initial ("0000010"b), /* can send a wakeup to this mailbox (interactive messages and 8 14* mail notifications) */ 8 15 U_MBX_ACCESS initial ("0000001"b), /* can send an urgent wakeup (unused today) */ 8 16 8 17 ADROSW_MBX_ACCESS initial ("1111110"b), /* access granted to creator/owner of a mailbox */ 8 18 AOW_MBX_ACCESS initial ("1001010"b)) /* access granted to all other users */ 8 19 bit (36) aligned static options (constant); 8 20 8 21 /* END INCLUDE FILE ... mlsys_mailbox_modes.incl.pl1 */ 3236 3237 9 1 /* BEGIN Mailbox Message Include File (mail_format.incl.pl1) */ 9 2 9 3 9 4 /****^ HISTORY COMMENTS: 9 5* 1) change(86-01-09,Herbst), approve(86-03-25,MCR7367), 9 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 9 7* Added "seen" switch. 9 8* 2) change(86-06-02,Herbst), approve(86-06-02,MCR7367), audit(86-06-30,Wong), 9 9* install(86-06-30,MR12.0-1080): 9 10* Updated to version 4 for seen switch. 9 11* END HISTORY COMMENTS */ 9 12 9 13 /* Last modified by K. T. Pogran, 3/6/75 */ 9 14 /* Modified by D. M. Wells, August 10, 1977 for v4 message segments. */ 9 15 /* Modified: 3 June 1981 by G. Palter for mail system subroutine interface */ 9 16 9 17 declare mail_format_ptr pointer aligned; 9 18 9 19 declare MAIL_FORMAT_VERSION_4 initial (4) 9 20 fixed bin internal static options (constant); 9 21 9 22 declare text_length fixed bin (21); 9 23 9 24 declare 1 mail_format aligned based (mail_format_ptr), 9 25 2 header, 9 26 3 version fixed bin (17), 9 27 3 sent_from char (32) aligned, 9 28 3 lines fixed bin (17), 9 29 3 text_len fixed bin (21), 9 30 3 switches aligned, 9 31 4 wakeup bit (1) unaligned, 9 32 4 urgent bit (1) unaligned, 9 33 4 notify bit (1) unaligned, 9 34 4 acknowledge bit (1) unaligned, 9 35 4 obsolete bit (1) unaligned, 9 36 4 canonical bit (1) unaligned, 9 37 4 seen bit (1) unaligned, 9 38 4 others bit (65) unaligned, 9 39 2 text char(text_length refer (mail_format.header.text_len)) aligned; 9 40 9 41 /* END Mailbox Message Include File (mail_format.incl.pl1) */ 3238 3239 10 1 /* BEGIN INCLUDE FILE ... mlsys_mf_extension.incl.pl1 */ 10 2 /* Created: December 1983 by G. Palter */ 10 3 10 4 /* Definition of the extension to the mail_format structure used by the Multics Mail System: When the 10 5* mail_format.canonical flag is ON, the mail_format structure stored in a mailbox contains the canonical form of the 10 6* message; in addition, the following structure is also stored in the mailbox immediately after the mail_format 10 7* structure. This extension contains information that will be necessary to preserve the performance of context searching 10 8* of a message in future releases. Said information consists of the location and length within the canonical form of the 10 9* message body, subject, redistribution comments, and user-defined text fields */ 10 10 10 11 dcl 1 mf_extension aligned based (mf_extension_ptr), 10 12 2 n_text_fragments fixed binary (21), /* # of pieces of text which will be searched */ 10 13 2 text_fragments (mf_extension_n_text_fragments refer (mf_extension.n_text_fragments)), 10 14 3 start fixed binary (21), 10 15 3 lth fixed binary (21); 10 16 10 17 dcl mf_extension_n_text_fragments fixed binary (21); 10 18 dcl mf_extension_ptr pointer; 10 19 10 20 /* END INCLUDE FILE ... mlsys_mf_extension.incl.pl1 */ 3240 3241 11 1 /* BEGIN INCLUDE FILE: forum_user_trans.incl.pl1 */ 11 2 11 3 dcl alloc_text_length fixed bin (21); /* length of text area to allocate */ 11 4 dcl alloc_subject_length fixed bin (21); /* length of subject area to allocate */ 11 5 dcl forum_user_trans_ptr ptr; /* pointer to below structure */ 11 6 11 7 dcl 1 forum_user_trans based (forum_user_trans_ptr) aligned, 11 8 2 type fixed bin, /* type of transaction */ 11 9 2 person_id char (22), /* person_id of author of this transaction */ 11 10 2 project_id char (9), /* project_id of author of this transaction */ 11 11 2 time fixed bin (71), /* time transaction was entered */ 11 12 2 trans_no fixed bin, /* number of this transaction */ 11 13 2 next_trans_ptr ptr, /* pointer (in user ring) of next transaction */ 11 14 2 prev_trans_ptr ptr, /* pointer (in user ring) of previous transaction */ 11 15 2 subject_length fixed bin (21), /* length of subject field of transaction */ 11 16 2 text_length fixed bin (21), /* length of text field of transaction */ 11 17 2 unfilled bit (1) aligned, /* set if transaction is NOT stored filled */ 11 18 2 subject char (alloc_subject_length refer (forum_user_trans.subject_length)) unaligned, /* subject of transaction */ 11 19 2 text char (alloc_text_length refer (forum_user_trans.text_length)) unaligned; /* text of transaction */ 11 20 11 21 declare user_trans_type fixed bin static options (constant) initial (1); 11 22 declare message_type fixed bin static options (constant) initial (2); 11 23 11 24 declare (ONLY_UNDELETED init (0), 11 25 INCLUDE_DELETED init (1), 11 26 ONLY_DELETED init (2)) 11 27 fixed bin static options (constant); 11 28 11 29 /* END INCLUDE FILE: forum_user_trans.incl.pl1 */ 3242 3243 12 1 /* ... BEGIN INCLUDE FILE forum_flags.incl.pl1 ... */ 12 2 12 3 /* Flags returned by forum_$forum_limits 12 4* Jay Pattin 5/5/82 */ 12 5 12 6 dcl forum_flags_word bit (36) aligned; 12 7 12 8 dcl 1 forum_flags aligned based (addr (forum_flags_word)), 12 9 2 chairman bit (1) unaligned, 12 10 2 read_only bit (1) unaligned, 12 11 2 print_cm_message bit (1) unaligned, 12 12 2 print_acl_message bit (1) unaligned, 12 13 2 acl_has_changed bit (1) unaligned, 12 14 2 adjourned bit (1) unaligned, 12 15 2 mbz bit (30) unaligned; 12 16 12 17 /* END INCLUDE FILE forum_flags.incl.pl1 */ 3244 3245 13 1 /* Begin include file mlsys_mailer_data.incl.pl1 */ 13 2 13 3 dcl MLSYS_MAILER_DATA_VERSION_1 char (8) aligned static options (constant) init ("mlsmdv_1"); 13 4 13 5 dcl mlsys_mailer_data_n_recipients fixed bin; 13 6 dcl mlsys_mailer_data_ptr ptr; 13 7 dcl 1 mlsys_mailer_data aligned based (mlsys_mailer_data_ptr), 13 8 2 header, 13 9 3 version char (8), 13 10 3 flags, 13 11 4 validate bit (1) unaligned, /* do not send the message */ 13 12 4 report_errors bit (1) unaligned, /* force reporting of errors */ 13 13 4 dont_queue bit (1) unaligned, /* do not queue if it can't be sent */ 13 14 4 send bit (1) unaligned, /* send as a message */ 13 15 4 mail bit (1) unaligned, /* send as mail */ 13 16 4 queue_only bit (1) unaligned, /* don't try to deliver */ 13 17 3 source varying char (256), /* original source of mail */ 13 18 3 total_recipients fixed bin, /* # of recipients for this call */ 13 19 2 recipients (mlsys_mailer_data_n_recipients refer (mlsys_mailer_data.total_recipients)) 13 20 like mlsys_mailer_recipient; 13 21 13 22 dcl 1 mlsys_mailer_recipient aligned based, 13 23 2 flags, 13 24 3 processed bit (1) unaligned, /* this entry has been processed */ 13 25 3 queued bit (1) unaligned, /* mail was queued for later delivery */ 13 26 3 delivered bit (1) unaligned, /* mail has been delivered to this recipient */ 13 27 3 fatal_error bit (1) unaligned, /* a fatal error occurred sending the mail */ 13 28 3 expanded bit (1) unaligned, /* this recipient is due to a mailing list */ 13 29 3 error_reported bit (1) unaligned, /* the sender has been informed of any errors */ 13 30 2 original_recipient_index fixed bin, /* index of unexpanded recipient */ 13 31 2 user_name char (128) varying, /* name at remote site */ 13 32 2 host_name char (40) varying, /* host name for this recipient */ 13 33 2 code fixed bin (35), /* results of sending/queueing for this recipient */ 13 34 2 result varying char (128); /* explanation of result */ 13 35 13 36 /* End include file mlsys_mailer_data.incl.pl1 */ 3246 3247 14 1 /* BEGIN INCLUDE FILE aim_template.incl.pl1 */ 14 2 14 3 /* Created 740723 by PG */ 14 4 /* Modified 06/28/78 by C. D. Tavares to add rcp privilege */ 14 5 /* Modified 83-05-10 by E. N. Kitltitz to add communications privilege */ 14 6 14 7 /* This structure defines the components of both an access 14 8* class and an access authorization as interpreted by the 14 9* Access Isolation Mechanism. */ 14 10 14 11 14 12 dcl 1 aim_template aligned based, /* authorization/access class template */ 14 13 2 categories bit (36), /* access categories */ 14 14 2 level fixed bin (17) unaligned, /* sensitivity level */ 14 15 2 privileges unaligned, /* special access privileges (in authorization only) */ 14 16 (3 ipc, /* interprocess communication privilege */ 14 17 3 dir, /* directory privilege */ 14 18 3 seg, /* segment privilege */ 14 19 3 soos, /* security out-of-service privilege */ 14 20 3 ring1, /* ring 1 access privilege */ 14 21 3 rcp, /* RCP resource access privilege */ 14 22 3 comm) bit (1), /* communications cross-AIM privilege */ 14 23 3 pad bit (11); 14 24 14 25 14 26 /* END INCLUDE FILE aim_template.incl.pl1 */ 3248 3249 15 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 15 2* 15 3* Values for the "access mode" argument so often used in hardcore 15 4* James R. Davis 26 Jan 81 MCR 4844 15 5* Added constants for SM access 4/28/82 Jay Pattin 15 6* Added text strings 03/19/85 Chris Jones 15 7**/ 15 8 15 9 15 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 15 11 dcl ( 15 12 N_ACCESS init ("000"b), 15 13 R_ACCESS init ("100"b), 15 14 E_ACCESS init ("010"b), 15 15 W_ACCESS init ("001"b), 15 16 RE_ACCESS init ("110"b), 15 17 REW_ACCESS init ("111"b), 15 18 RW_ACCESS init ("101"b), 15 19 S_ACCESS init ("100"b), 15 20 M_ACCESS init ("010"b), 15 21 A_ACCESS init ("001"b), 15 22 SA_ACCESS init ("101"b), 15 23 SM_ACCESS init ("110"b), 15 24 SMA_ACCESS init ("111"b) 15 25 ) bit (3) internal static options (constant); 15 26 15 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 15 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 15 29 15 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 15 31 static options (constant); 15 32 15 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 15 34 static options (constant); 15 35 15 36 dcl ( 15 37 N_ACCESS_BIN init (00000b), 15 38 R_ACCESS_BIN init (01000b), 15 39 E_ACCESS_BIN init (00100b), 15 40 W_ACCESS_BIN init (00010b), 15 41 RW_ACCESS_BIN init (01010b), 15 42 RE_ACCESS_BIN init (01100b), 15 43 REW_ACCESS_BIN init (01110b), 15 44 S_ACCESS_BIN init (01000b), 15 45 M_ACCESS_BIN init (00010b), 15 46 A_ACCESS_BIN init (00001b), 15 47 SA_ACCESS_BIN init (01001b), 15 48 SM_ACCESS_BIN init (01010b), 15 49 SMA_ACCESS_BIN init (01011b) 15 50 ) fixed bin (5) internal static options (constant); 15 51 15 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 3250 3251 16 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 16 2 /* format: style2,^inddcls,idind32 */ 16 3 16 4 declare 1 terminate_file_switches based, 16 5 2 truncate bit (1) unaligned, 16 6 2 set_bc bit (1) unaligned, 16 7 2 terminate bit (1) unaligned, 16 8 2 force_write bit (1) unaligned, 16 9 2 delete bit (1) unaligned; 16 10 16 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 16 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 16 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 16 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 16 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 16 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 16 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 16 18 16 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 3252 3253 3254 /* Various whitespace constants are placed here as they generate so many blank pages ... */ 3255 3256 dcl WHITESPACE character (5) static options (constant) initial (" 3257 "); /* space, horizontal tab, newline, vertical tab, formfeed */ 3258 3259 end mlsys_transmit_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/24/92 2236.6 mlsys_transmit_.pl1 >spec>inst>1016>mlsys_transmit_.pl1 3222 1 10/27/83 2204.2 mlsys_copy_ptr.incl.pl1 >ldd>incl>mlsys_copy_ptr.incl.pl1 3224 2 10/27/83 2204.2 mlsys_data.incl.pl1 >ldd>incl>mlsys_data.incl.pl1 3226 3 06/30/86 2123.8 mlsys_internal_data.incl.pl1 >ldd>incl>mlsys_internal_data.incl.pl1 3228 4 10/27/83 2204.2 mlsys_deliver_info.incl.pl1 >ldd>incl>mlsys_deliver_info.incl.pl1 3230 5 05/22/86 1325.8 mlsys_message.incl.pl1 >ldd>incl>mlsys_message.incl.pl1 3232 6 10/27/83 2204.2 mlsys_address_types.incl.pl1 >ldd>incl>mlsys_address_types.incl.pl1 3234 7 10/27/83 2204.2 mlsys_address_list.incl.pl1 >ldd>incl>mlsys_address_list.incl.pl1 3236 8 10/27/83 2204.2 mlsys_mailbox_modes.incl.pl1 >ldd>incl>mlsys_mailbox_modes.incl.pl1 3238 9 06/30/86 2123.8 mail_format.incl.pl1 >ldd>incl>mail_format.incl.pl1 3240 10 12/12/83 1716.5 mlsys_mf_extension.incl.pl1 >ldd>incl>mlsys_mf_extension.incl.pl1 3242 11 10/31/84 1215.4 forum_user_trans.incl.pl1 >ldd>incl>forum_user_trans.incl.pl1 3244 12 10/31/84 1215.3 forum_flags.incl.pl1 >ldd>incl>forum_flags.incl.pl1 3246 13 10/27/83 2204.2 mlsys_mailer_data.incl.pl1 >ldd>incl>mlsys_mailer_data.incl.pl1 3248 14 09/07/83 1710.6 aim_template.incl.pl1 >ldd>incl>aim_template.incl.pl1 3250 15 04/11/85 1552.6 access_mode_values.incl.pl1 >ldd>incl>access_mode_values.incl.pl1 3252 16 04/06/83 1339.4 terminate_file.incl.pl1 >ldd>incl>terminate_file.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ADDRESS_LIST_VERSION_2 000020 constant char(8) initial packed unaligned dcl 7-12 set ref 1676* 1680* 1693* 1697* 1742* 1743* 1746* 2311* ALWAYS_NOTIFY constant fixed bin(17,0) initial dcl 4-42 ref 1443 ALWAYS_QUEUE constant fixed bin(17,0) initial dcl 4-33 ref 1438 1469 2031 2044 2105 2118 2239 2258 ALWAYS_QUEUE_FOREIGN constant fixed bin(17,0) initial dcl 4-33 ref 2184 A_MBX_ACCESS constant bit(36) initial dcl 8-6 ref 1220 1220 1963 1963 1988 1988 COPY_FORMATTING constant fixed bin(17,0) initial dcl 270 ref 2486 2589 DELIVER_OPTIONS_VERSION_2 000030 constant char(8) initial packed unaligned dcl 4-19 ref 1405 EXPRESS_DELIVERY constant fixed bin(17,0) initial dcl 4-25 ref 1432 FORUM_RECIPIENT constant fixed bin(17,0) initial dcl 176 set ref 561 588 803* 805* 2064* FULL_FORMATTING constant fixed bin(17,0) initial dcl 270 ref 2487 2489 2585 INTERACTIVE_DELIVERY constant fixed bin(17,0) initial dcl 4-25 ref 670 1184 2012 2640 2718 LOGBOX_ADDRESS constant fixed bin(17,0) initial dcl 6-6 ref 1943 MAILBOX_RECIPIENT constant fixed bin(17,0) initial dcl 176 set ref 514 541 793* 796* 1937* MAILING_LIST_ADDRESS constant fixed bin(17,0) initial dcl 6-6 ref 2331 MAIL_FORMAT_VERSION_4 constant fixed bin(17,0) initial dcl 9-19 ref 2548 3210 MAIL_TABLE_ADDRESS constant fixed bin(17,0) initial dcl 6-6 ref 1660 1728 1871 MESSAGE_ENVELOPE_PARAMETER_VERSION_2 000024 constant char(8) initial packed unaligned dcl 5-79 ref 1630 1703 MESSAGE_PREFORMATTED_BODY_SECTION constant fixed bin(17,0) initial dcl 5-285 ref 1458 MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 000022 constant char(8) initial packed unaligned dcl 5-144 ref 1737 MLSYS_MAILER_DATA_VERSION_1 000016 constant char(8) initial dcl 13-3 ref 3014 NETWORK_RECIPIENT constant fixed bin(17,0) initial dcl 176 set ref 608 631 811* 814* 2141* 2197* 2288* 2335* 3002 NEVER_NOTIFY constant fixed bin(17,0) initial dcl 4-42 ref 1443 NEVER_QUEUE constant fixed bin(17,0) initial dcl 4-33 ref 1015 1255 1438 1476 NOTIFICATION_MAIL_FORMAT based structure level 1 dcl 115 set ref 2683 2683 2683 2720 2720 3208 NOTIFICATION_MAIL_FORMAT_PTR 000012 internal static pointer initial dcl 116 set ref 2683 2683 2683 2720 2720 3208* 3209 3210 3211 3212 3213 3214 3215 3216 NOTIFICATION_TEXT 000033 constant char(14) initial packed unaligned dcl 118 ref 3207 3213 3216 ONLY_UNDELETED 000060 constant fixed bin(17,0) initial dcl 11-24 set ref 2088* ORDINARY_DELIVERY constant fixed bin(17,0) initial dcl 4-25 ref 1014 1187 1188 1193 1254 1432 1996 2551 2639 2677 3018 3019 P_address_lists parameter pointer array dcl 82 set ref 983 986 986 987 987* 994 997 997 998 998* 1024 1024 1025* 1026 1055* 1081* P_address_ptr parameter pointer dcl 94 set ref 1241 1244* 1260* P_code parameter fixed bin(35,0) dcl 63 set ref 389 392* 395* 396 416 419* 422* 423 446* 473* 956* 959* 962* 983 987* 994 998* 1093* 1099 1103* 1104 1117 1136 1143* 1144 1156* 1235* 1241 1244* 1262* 1266* 1268* 1271* 1272 1274* 2009* 2363* 2374* P_create_if_not_found parameter bit(1) dcl 91 ref 1117 1126 1136 1149 P_deliver_options_ptr parameter pointer dcl 75 ref 389 416 1403 P_mailbox_dirname parameter char packed unaligned dcl 85 ref 1099 1102 1136 1139 P_mailbox_ename parameter char packed unaligned dcl 87 set ref 1099 1103* 1136 1140 1140 1140 1142 P_message_ptr parameter pointer dcl 65 set ref 389 392* 393* 416 419* 420* 1099 1117 1136 1156* 1159* P_recipients_info_ptr parameter pointer dcl 71 ref 389 416 1402 P_redistribution_comment parameter char packed unaligned dcl 79 set ref 416 1765 1766 1767 P_validate_mls_contents parameter bit(1) dcl 95 set ref 1241 1260* QUEUE_FOREIGN_WHEN_NEEDED constant fixed bin(17,0) initial dcl 4-33 ref 3115 QUEUE_WHEN_NEEDED constant fixed bin(17,0) initial dcl 4-33 ref 712 RECIPIENTS_INFO_VERSION_2 000026 constant char(8) initial packed unaligned dcl 4-62 ref 1405 REDISTRIBUTION_FORMATTING constant fixed bin(17,0) initial dcl 270 ref 2483 R_ACCESS 000057 constant bit(3) initial packed unaligned dcl 15-11 set ref 2220* SAVEBOX_ADDRESS constant fixed bin(17,0) initial dcl 6-6 ref 1943 STACK_EXTENSION 000032 constant fixed bin(18,0) initial dcl 276 set ref 753 753* 772 772* 1502* 1505 2494* 2498 2514 2756* 2760 2779 2895* 2899 2918 TERM_FILE_TERM 000014 constant bit(3) initial packed unaligned dcl 16-14 set ref 1567* 2211* 2304* 2345* UNKNOWN_RECIPIENT 000060 constant fixed bin(17,0) initial dcl 176 set ref 1878* 1929* WHITESPACE 000012 constant char(5) initial packed unaligned dcl 3256 ref 1458 abort 5 based bit(1) level 3 packed packed unaligned dcl 4-6 ref 502 641 access_class 32 based bit(72) level 3 dcl 5-15 set ref 433* 441* 1169* 1176* 1178* 2658* 2683* 2720* 3053* acknowledge 5(03) 000574 automatic bit(1) level 3 in structure "local_do" packed packed unaligned dcl 264 in procedure "mlsys_transmit_" set ref 1163* acknowledge 5(03) based bit(1) level 3 in structure "deliver_options" packed packed unaligned dcl 4-6 in procedure "mlsys_transmit_" ref 1709 1761 1943 2552 2670 acknowledge 13(03) based bit(1) level 4 in structure "mail_format" packed packed unaligned dcl 9-24 in procedure "mlsys_transmit_" set ref 2552* 2654* 2654 2670* acknowledge_to 16 000256 automatic pointer level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1761* 1763* acknowledge_to 16 000236 automatic pointer level 3 in structure "local_mep" dcl 220 in procedure "mlsys_transmit_" set ref 1632* 1709* 1711* added_envelope 000171 automatic bit(1) dcl 124 set ref 1602* 1629 1635* 1713* added_from_field 000167 automatic bit(1) dcl 122 set ref 1602* 1621 1623* 1681* added_redistribution 000172 automatic bit(1) dcl 125 set ref 1602* 1637 1639* 1779* 2483 added_reply_to_field 000170 automatic bit(1) dcl 123 set ref 1602* 1625 1627* 1699* addr builtin function dcl 384 ref 495 513 540 560 587 607 630 650 760 793 793 796 796 846 853 901 935 1013 1053 1064 1075 1161 1253 1265 1273 1457 1478 1575 1633 1633 1712 1712 1766 1775 1775 1792 1795 1797 1819 1822 1824 2090 2207 2379 2417 2420 2683 2683 2720 2720 3030 3037 3058 3069 3070 address_component 000562 automatic char(32) packed unaligned dcl 261 in procedure "mlsys_transmit_" set ref 714* 716 address_component 000317 automatic char(32) packed unaligned dcl 1854 in procedure "validate_or_expand_address" set ref 2217* 2220* 2265 address_dirname 000174 automatic char(168) packed unaligned dcl 1852 in procedure "validate_or_expand_address" set ref 1956* 1961* 1980* 2047* 2076* 2078 2084* 2121* 2217* 2220* 2266* address_dirname 000500 automatic char(168) packed unaligned dcl 260 in procedure "mlsys_transmit_" set ref 714* 717* address_ename 000552 automatic char(32) packed unaligned dcl 261 in procedure "mlsys_transmit_" set ref 714* 717* address_ename 000307 automatic char(32) packed unaligned dcl 1854 in procedure "validate_or_expand_address" set ref 1956* 1961* 1980* 2047* 2076* 2084* 2121* 2217* 2220* 2266* address_idx 47 based fixed bin(17,0) level 3 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 855 902 943 1055* 1065 1076 1081* 2391* address_idx 47 based fixed bin(17,0) level 3 in structure "other_recipient" dcl 252 in procedure "mlsys_transmit_" ref 1065 1076 address_idx 47 based fixed bin(17,0) array level 4 in structure "recipients_list" dcl 186 in procedure "mlsys_transmit_" set ref 865 address_idx 2(18) based fixed bin(18,0) level 3 in structure "result" packed packed unsigned unaligned dcl 223 in procedure "mlsys_transmit_" set ref 865* address_idx 5(18) based fixed bin(18,0) array level 4 in structure "expanded_recipients_result_list" packed packed unsigned unaligned dcl 4-93 in procedure "mlsys_transmit_" set ref 943* address_list based structure level 1 dcl 7-6 address_list_ptr 12 based pointer array level 3 in structure "recipients_info" dcl 4-49 in procedure "mlsys_transmit_" set ref 463* 464 837* 838 1425 1425* 1748* address_list_ptr 000652 automatic pointer dcl 7-14 in procedure "mlsys_transmit_" set ref 464* 465 466 838* 840 844 1026* 1027 1028 address_pathname 000416 automatic char(200) packed unaligned dcl 259 in procedure "mlsys_transmit_" set ref 717* 718 719 address_pathname 000112 automatic char(200) packed unaligned dcl 1851 in procedure "validate_or_expand_address" set ref 2047* 2049 2050 2121* 2123 2124 2266* 2267 2268 address_ptr based pointer level 2 in structure "other_recipient" dcl 2410 in procedure "mark_duplicate_recipients" set ref 2444* address_ptr 2 based pointer array level 3 in structure "expanded_recipients_result_list" dcl 4-93 in procedure "mlsys_transmit_" set ref 940* address_ptr based pointer level 2 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 714* 940 945* 1576 1576* 2217* 2230 2311* 2320 2381* 2382* 2444* address_ptr 000104 automatic pointer dcl 1850 in procedure "validate_or_expand_address" set ref 1872* 1874* 1885* 1889 1889* 1899* 1906* 1929* 1937* 1947* 1950* 1956* 2064* 2076* 2141* 2153* 2157* 2197* 2200* 2212 2212* 2230* 2288* 2291* 2307 2307* 2320* 2335* 2336* 2343 2343* address_route_ptr 000572 automatic pointer dcl 262 set ref 1521* 1534 1534* 2151* 2153* 2161* 2182 2182* address_string 000246 automatic varying char(128) dcl 1853 set ref 2157* 2161* address_type 001030 automatic fixed bin(17,0) dcl 1725 in procedure "add_redistribution" set ref 1727* 1728 address_type 001014 automatic fixed bin(17,0) dcl 1657 in procedure "complete_new_message" set ref 1659* 1660 address_type 000332 automatic fixed bin(17,0) dcl 1857 in procedure "validate_or_expand_address" set ref 1869* 1871 1874* 1923 1943 1943 2331 addresses 10 based pointer array level 2 dcl 7-6 set ref 466* 1028* 1688* 1899* 1906* 2326* addwordno builtin function dcl 384 ref 478 1035 2501 2516 2595 2765 2781 2904 2920 aim_check_$equal 000204 constant entry external dcl 302 ref 3053 aim_check_$greater_or_equal 000206 constant entry external dcl 303 ref 441 1169 aim_template based structure level 1 dcl 14-12 all_invalid 001012 automatic bit(1) dcl 1655 set ref 1686* 1687 1689* 1691 always_add 0(02) 000100 automatic bit(1) level 2 in structure "mbx_add_options" packed packed unaligned dcl 2627 in procedure "add_message_to_mailbox" set ref 2639* 2640* always_add 0(02) 000366 automatic bit(1) level 2 in structure "mbx_add_options" packed packed unaligned dcl 2705 in procedure "send_test_message" set ref 2718* area 000614 stack reference condition dcl 382 ref 827 area_ptr 2 based pointer level 3 dcl 4-49 ref 1411 1416 based_area based area(1024) dcl 117 ref 3208 baseno builtin function dcl 384 ref 477 477 1034 1034 1545 1545 1554 1554 1559 1559 1584 1584 2358 2358 bcc 10 000200 automatic pointer level 3 in structure "saved_message_data" dcl 131 in procedure "mlsys_transmit_" set ref 408* 528* 575* 618* 2473 2480 2746 2885 bcc 46 based pointer level 3 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 2473* 2475* 2480 2746* 2748* 2885* 2887* bit_string_lth 4 based fixed bin(24,0) level 2 dcl 5-301 ref 1460 body 62 based structure level 2 dcl 5-15 body_sections 64 based structure array level 3 dcl 5-15 set ref 1457 buffer_idx 001076 automatic fixed bin(17,0) dcl 2470 in procedure "prepare_message_for_mailbox" set ref 2477* 2478 2494 2496 2501 2509 2516 2531 2547 2555 2585 2594 2605 buffer_idx 001155 automatic fixed bin(17,0) dcl 2882 in procedure "prepare_message_for_network" set ref 2889* 2890 2895 2897 2904 2913 2920 2940 buffer_idx 001131 automatic fixed bin(17,0) dcl 2743 in procedure "prepare_message_for_forum" set ref 2750* 2751 2756 2758 2765 2774 2781 2798 cached_uid 000733 automatic bit(36) dcl 1303 set ref 1320* 1327 1357* 1358 canonical 13(05) based bit(1) level 4 packed packed unaligned dcl 9-24 set ref 2553* cc 44 based pointer level 3 dcl 5-15 set ref 1904* 1905 1906 cleanup 000622 stack reference condition dcl 382 ref 400 427 1011 1167 1251 1887 2209 2302 clock builtin function dcl 384 ref 1704 1739 code 001152 automatic fixed bin(35,0) dcl 2879 in procedure "prepare_message_for_network" set ref 2899* 2902 2911 2922* 2924 2924 2927* 2933* 2935 2936 2941* 2943 2943 2946* 2954* code 4 based fixed bin(35,0) array level 3 in structure "expanded_recipients_result_list" dcl 4-93 in procedure "mlsys_transmit_" set ref 941* code 000734 automatic fixed bin(35,0) dcl 1304 in procedure "lookup_or_open_mailbox" set ref 1308* 1309 1309* 1320* 1321 1350* 1352 1352* 1353 1353* 1357* 1358 code based fixed bin(35,0) level 2 in structure "result" dcl 223 in procedure "mlsys_transmit_" set ref 847* 862* 870* 876* 882 882* 884* 908 908* 911* 913* 914* code 4 based fixed bin(35,0) level 2 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 518* 545* 565* 592* 612* 635* 656* 659* 661 661* 665 665 665 665 665 670 670 670 670 685* 688* 690 690* 694 694 694 694 722 724 726 728 730 734* 761 764* 870 886 941 1266 1880* 1932* 1968* 1975* 1991* 2006* 2033* 2039* 2054* 2070* 2072* 2080* 2093* 2107* 2113* 2128* 2147* 2165* 2172* 2179* 2242* 2249* 2263* 2274* 2279* 2315* 2338* 2395* 3072* 3074* 3076* 3089* 3091* 3095* 3098* 3105* 3117* 3127 3128* 3130* 3132* 3134* 3135* 3137* 3139* 3141 code 001074 automatic fixed bin(35,0) dcl 2468 in procedure "prepare_message_for_mailbox" set ref 2481* 2483 2500 2507 2518 2518 2521* 2527* 2529 2529* 2533 2533 2536* 2542* 2585* 2600* 2602* 2605* code 000100 automatic fixed bin(35,0) dcl 103 in procedure "mlsys_transmit_" set ref 509* 510 518 536* 538 545 557* 558 565 583* 585 592 604* 605 612 626* 628 635 756* 757 764 775* 776 1190* 1191 1197* 1199 1201* 1203* 1204 1206* 1210 1211 1211* 1216* 1217 1221* 1225* 1232 1232* 1235 1731* 1732 code 000100 automatic fixed bin(35,0) dcl 2848 in procedure "add_message_to_forum" set ref 2852* 2856* 2858 2858* 2861 code 001126 automatic fixed bin(35,0) dcl 2740 in procedure "prepare_message_for_forum" set ref 2760* 2763 2772 2783* 2785 2785 2788* 2794* 2796 2796* 2799* 2801 2801 2804* 2812* code 56 based fixed bin(35,0) level 2 in structure "ism_recipient" dcl 2991 in procedure "invoke_ism" set ref 3041* 3060* 3082 3082* 3098 code 001013 automatic fixed bin(35,0) dcl 1656 in procedure "complete_new_message" set ref 1663* 1664 1688* 1689 code 000101 automatic fixed bin(35,0) dcl 2634 in procedure "add_message_to_mailbox" set ref 2647* 2658* 2660 2672 2672* 2673 2673* 2674 2674* 2675 2677 code 000331 automatic fixed bin(35,0) dcl 1856 in procedure "validate_or_expand_address" set ref 1872* 1873 1880 1961* 1962 1962* 1963 1970 1970 1975 1980* 1981 1981* 1982 1982* 1984 2002* 2003 2006 2007 2012 2012 2012 2028 2028 2033 2039 2084* 2086 2102 2102 2107 2113 2153* 2155 2157* 2159 2161* 2163 2165 2179 2220* 2222 2222 2222* 2224 2236 2236 2242 2249 2311* 2313 2315 2334* 2338 2361* 2362 2363 comment 30 000256 automatic structure level 4 dcl 221 continue 000407 automatic bit(1) dcl 254 set ref 1072* 1073 1079* create_if_not_found 000166 automatic bit(1) dcl 110 set ref 1109* 1126* 1149* 1199 create_the_mailbox 000602 automatic entry variable dcl 265 set ref 1127* 1150* 1201 1203 created 000610 automatic bit(1) dcl 266 set ref 1195* 1205* 1232 cu_$grow_stack_frame 000210 constant entry external dcl 304 ref 753 772 1502 2494 2756 2895 cu_$shrink_stack_frame 000212 constant entry external dcl 305 ref 481 483 1038 1040 2503 2509 2768 2774 2907 2913 current_mailing_list_data_ptr 000232 automatic pointer dcl 202 set ref 1510* 1564 1565 1571* 2205 2207* 2293 2346* currentsize builtin function dcl 384 ref 2590 2590 2595 2683 date_time_created 22 000256 automatic fixed bin(71,0) level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1739* 1740* 1752 date_time_created 34 based fixed bin(71,0) level 3 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 1180 1669* 1672* date_time_delivered 12 000256 automatic fixed bin(71,0) level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1758* date_time_delivered 12 000236 automatic fixed bin(71,0) level 3 in structure "local_mep" dcl 220 in procedure "mlsys_transmit_" set ref 1631* 1707* date_time_delivered 6 based fixed bin(71,0) level 2 in structure "message_envelope" dcl 5-61 in procedure "mlsys_transmit_" set ref 1801 1806* 1828* date_time_mailed 4 000256 automatic fixed bin(71,0) level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1752* date_time_mailed 4 000236 automatic fixed bin(71,0) level 3 in structure "local_mep" dcl 220 in procedure "mlsys_transmit_" set ref 1631* 1704* date_time_message_created 000316 automatic fixed bin(71,0) dcl 230 set ref 392* 1156* 1669 delete_this_address 000406 automatic bit(1) dcl 254 set ref 1071* 1073 1076* 1081 deleted_last_delivery_fields 000173 automatic bit(1) dcl 127 set ref 1604* 1641 1803* 1830* deliver_options based structure level 1 dcl 4-6 ref 1475 deliver_options_ptr 000630 automatic pointer dcl 4-21 set ref 502 641 670 712 1013* 1161* 1253* 1403* 1405 1432 1432 1438 1438 1443 1443 1449 1454 1469 1475 1478* 1709 1761 1943 1996 2012 2031 2044 2105 2118 2184 2239 2239 2258 2258 2551 2552 2639 2640 2670 2677 2677 2718 3018 3019 3115 delivered 0(02) based bit(1) level 3 packed packed unaligned dcl 2991 set ref 3072 delivered_by 14 000256 automatic pointer level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1759* delivered_by 14 000236 automatic pointer level 3 in structure "local_mep" dcl 220 in procedure "mlsys_transmit_" set ref 1632* 1708* delivered_by 10 based pointer level 2 in structure "message_envelope" dcl 5-61 in procedure "mlsys_transmit_" set ref 1800 1805* 1827* delivery_aborted 000333 automatic bit(1) dcl 236 set ref 454* 644* 908 delivery_mode 2 000574 automatic fixed bin(17,0) level 2 in structure "local_do" dcl 264 in procedure "mlsys_transmit_" set ref 1014* 1184* 1187* 1188* 1193* 1254* delivery_mode 2 based fixed bin(17,0) level 2 in structure "deliver_options" dcl 4-6 in procedure "mlsys_transmit_" ref 670 1432 1432 1996 2012 2551 2639 2640 2677 2718 3018 3019 dimension builtin function dcl 384 ref 1329 1365 divide builtin function dcl 384 ref 1505 2371 2764 2807 2903 2949 dont_queue 2(02) based bit(1) level 4 packed packed unaligned dcl 13-7 set ref 3020* duplicate 3(01) based bit(1) level 3 in structure "recipient" packed packed unaligned dcl 142 in procedure "mlsys_transmit_" set ref 496 514 541 561 588 608 631 652 761 858 876 881 1055 2419 2436* 3032 duplicate 3(01) based bit(1) level 3 in structure "other_recipient" packed packed unaligned dcl 2410 in procedure "mark_duplicate_recipients" set ref 2430* duplicate 3(01) based bit(1) level 3 in structure "other_recipient" packed packed unaligned dcl 252 in procedure "mlsys_transmit_" ref 1076 duplicate_idx 50 based fixed bin(17,0) level 2 in structure "other_recipient" dcl 2410 in procedure "mark_duplicate_recipients" set ref 2431* duplicate_idx 50 based fixed bin(17,0) level 2 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 863 865 2392* 2437* duplicate_idx 50 based fixed bin(17,0) array level 3 in structure "recipients_list" dcl 186 in procedure "mlsys_transmit_" set ref 2427 2427* duplicate_info 2 based structure level 2 dcl 223 set ref 847* entries based structure array level 2 in structure "transmit_cache" dcl 210 in procedure "mlsys_transmit_" set ref 1314 1316 1316 1322* 1329 1330 1365 1367 entries 2 based structure array level 2 in structure "expanded_recipients_result_list" dcl 4-93 in procedure "mlsys_transmit_" envelope based structure level 2 in structure "message_redistribution" dcl 5-122 in procedure "mlsys_transmit_" set ref 1797 1824 envelope 4 000256 automatic structure level 3 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" envelope 4 000236 automatic structure level 2 in structure "local_mep" dcl 220 in procedure "mlsys_transmit_" envelope 14 based structure level 2 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 1792 1819 error_table_$action_not_performed 000016 external static fixed bin(35,0) dcl 281 ref 3082 error_table_$ai_restricted 000020 external static fixed bin(35,0) dcl 281 ref 446 2007 2009 3060 error_table_$bad_subr_arg 000022 external static fixed bin(35,0) dcl 281 ref 1412 1419 1450 error_table_$bigarg 000024 external static fixed bin(35,0) dcl 281 ref 2673 error_table_$entlong 000026 external static fixed bin(35,0) dcl 281 ref 3164 3182 error_table_$lock_wait_time_exceeded 000030 external static fixed bin(35,0) dcl 281 ref 665 722 2660 3130 error_table_$logical_volume_not_connected 000032 external static fixed bin(35,0) dcl 281 ref 665 694 730 1970 2028 2102 2236 3137 error_table_$logical_volume_not_defined 000034 external static fixed bin(35,0) dcl 281 ref 665 694 728 1970 2028 2102 2236 3135 error_table_$messages_deferred 000036 external static fixed bin(35,0) dcl 281 ref 670 2012 error_table_$messages_off 000040 external static fixed bin(35,0) dcl 281 ref 670 2012 error_table_$moderr 000042 external static fixed bin(35,0) dcl 281 ref 1352 1981 error_table_$no_append 000044 external static fixed bin(35,0) dcl 281 ref 2672 2723 error_table_$no_component 000046 external static fixed bin(35,0) dcl 281 ref 2222 error_table_$no_info 000050 external static fixed bin(35,0) dcl 281 ref 670 error_table_$noentry 000052 external static fixed bin(35,0) dcl 281 ref 1199 1211 1962 1982 2222 error_table_$notalloc 000054 external static fixed bin(35,0) dcl 281 ref 2674 error_table_$rqover 000056 external static fixed bin(35,0) dcl 281 ref 665 694 726 2647 2852 2858 3134 error_table_$smallarg 000060 external static fixed bin(35,0) dcl 281 ref 2507 2518 2533 2602 2772 2785 2801 2911 2924 2943 error_table_$unimplemented_version 000062 external static fixed bin(35,0) dcl 281 ref 1407 error_table_$wakeup_denied 000064 external static fixed bin(35,0) dcl 281 ref 670 2012 expanded 0(04) based bit(1) level 3 packed packed unaligned dcl 2991 set ref 3076 expanded_list_info 1 based structure level 2 dcl 223 set ref 847* expanded_recipients_result_list based structure level 1 dcl 4-93 set ref 929 expanded_recipients_result_list_n_entries 000641 automatic fixed bin(17,0) dcl 4-66 set ref 833* 891* 891 893 927 929 929 expanded_recipients_result_list_ptr 4 based pointer level 3 in structure "recipients_info" dcl 4-49 in procedure "mlsys_transmit_" set ref 930* 1483* expanded_recipients_result_list_ptr 000636 automatic pointer dcl 4-64 in procedure "mlsys_transmit_" set ref 929* 930 940 941 942 943 944 explanation 6 based varying char(128) array level 3 in structure "expanded_recipients_result_list" dcl 4-93 in procedure "mlsys_transmit_" set ref 944* explanation 5 based varying char(128) level 2 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 722* 724* 726* 728* 730* 732* 745 871 889 937 944 2396* 3096* 3118* 3125 3128 3130 3132 3134 3135 3137 3141* 3145 explanation 3 based varying char(128) level 2 in structure "result" dcl 223 in procedure "mlsys_transmit_" set ref 848* 871* fatal_error 0(03) based bit(1) level 3 in structure "ism_recipient" packed packed unaligned dcl 2991 in procedure "invoke_ism" set ref 3059* 3078 fatal_error 3(06) based bit(1) level 3 in structure "recipient" packed packed unaligned dcl 142 in procedure "mlsys_transmit_" set ref 498 514 517* 541 544* 561 564* 588 591* 608 611* 631 634* 652 664* 677* 693* 700* 739* 745 763* 884 889 937 1266 1274 1879* 1931* 1967* 1974* 1990* 2016* 2017* 2019 2038* 2053* 2058 2069* 2079* 2092* 2112* 2127* 2132 2146* 2164* 2171* 2178* 2185 2248* 2262* 2273* 2278* 2314* 2337* 3032 3080* 3086* 3111* 3120* 3122 3125 3145 first_entry_idx 1 based fixed bin(18,0) level 3 packed packed unsigned unaligned dcl 223 set ref 893 893* first_recipient_idx 000410 automatic fixed bin(17,0) dcl 255 set ref 1062* 1063 1065* 1069 1069* 1073 1084 flags 3 based structure level 2 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 2385* flags 3 based structure level 2 in structure "other_recipient" dcl 2410 in procedure "mark_duplicate_recipients" flags 5 000574 automatic structure level 2 in structure "local_do" dcl 264 in procedure "mlsys_transmit_" set ref 1016* 1256* flags 2 based structure level 3 in structure "mlsys_mailer_data" dcl 13-7 in procedure "mlsys_transmit_" set ref 3017* flags 12 based structure level 2 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" flags 5 based structure level 2 in structure "deliver_options" dcl 4-6 in procedure "mlsys_transmit_" flags based structure level 2 in structure "ism_recipient" dcl 2991 in procedure "invoke_ism" set ref 3040* flags 3 based structure level 2 in structure "other_recipient" dcl 252 in procedure "mlsys_transmit_" flags 33 000256 automatic structure level 5 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" foreign_address 53 based varying char(128) level 3 dcl 142 set ref 718* 719 2049* 2050 2123* 2124 2161* 2267* 2268 2394* 3038 foreign_info 53 based structure level 2 dcl 142 foreign_system 114 based varying char(40) level 3 dcl 142 set ref 2161* 2394* 3039 formatting_mode 001077 automatic fixed bin(17,0) dcl 2470 set ref 2483* 2486* 2487* 2489* 2585 2589 forum_$close_forum 000214 constant entry external dcl 306 ref 567 594 1536 1578 2094 2119 forum_$enter_trans 000216 constant entry external dcl 307 ref 2856 forum_$open_forum 000220 constant entry external dcl 310 ref 2084 forum_$real_forum_limits 000222 constant entry external dcl 311 ref 2088 forum_error_table_$meeting_bloat 000066 external static fixed bin(35,0) dcl 281 ref 694 3139 forum_error_table_$not_in_search_list 000070 external static fixed bin(35,0) dcl 281 ref 2080 forum_error_table_$read_only 000072 external static fixed bin(35,0) dcl 281 ref 2093 forum_error_table_$rqo 000074 external static fixed bin(35,0) dcl 281 ref 2858 forum_flags based structure level 1 dcl 12-8 forum_flags_word 000662 automatic bit(36) dcl 12-6 set ref 2088* 2090 forum_idx 52 based fixed bin(17,0) level 3 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 566 567* 568* 593 594* 595* 683 685* 688* 1578 1578* 1582* 2098* 2118 2119* 2120* 2393* 2441 2444 forum_idx 52 based fixed bin(17,0) level 3 in structure "other_recipient" dcl 2410 in procedure "mark_duplicate_recipients" ref 2441 2441 2444 forum_idx 000414 automatic fixed bin(17,0) dcl 257 in procedure "mlsys_transmit_" set ref 1519* 1536 1536* 1538* 2084* 2088* 2094* 2095* 2098 2116* forum_message based char packed unaligned dcl 2847 set ref 2856* forum_message_lth 001127 automatic fixed bin(21,0) dcl 2741 set ref 2760* 2764 2783* 2799* 2807 2815 forum_message_n_words 001130 automatic fixed bin(18,0) dcl 2742 set ref 2764* 2765 2765 2807* 2808 2808 forum_message_ptr 001122 automatic pointer dcl 2739 set ref 2758* 2760* 2781* 2783* 2798* 2799* 2814 forum_message_with_bcc_lth 000374 automatic fixed bin(21,0) dcl 247 set ref 557* 579 688* 803* forum_message_with_bcc_ptr 000362 automatic pointer dcl 244 set ref 557* 578 688* 803* forum_message_without_bcc_lth 000375 automatic fixed bin(21,0) dcl 247 set ref 579* 583* 685* 805* forum_message_without_bcc_ptr 000364 automatic pointer dcl 244 set ref 578* 583* 685* 805* free_address 3(02) based bit(1) level 3 packed packed unaligned dcl 142 set ref 1576 2387* from 36 based pointer level 3 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 1621* 1674* 1675 1676* 1678* 1680* 1687 1688 from 24 000256 automatic pointer level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1742* 1743* 1776* get_authorization_ 000224 constant entry external dcl 314 ref 433 441 441 1169 1169 1176 1178 3053 3053 get_privileges_ 000226 constant entry external dcl 315 ref 444 1173 get_ring_ 000230 constant entry external dcl 316 ref 2070 get_system_free_area_ 000232 constant entry external dcl 317 ref 3208 have_result_code 000327 automatic bit(1) dcl 235 set ref 849* 852 856* hbound builtin function dcl 384 ref 986 997 1024 1314 1316 1330 1367 header 10 based structure array level 3 in structure "message_user_fields_list" dcl 5-150 in procedure "mlsys_transmit_" header 30 based structure level 2 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" header 64 based structure array level 4 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" header 4 based structure level 3 in structure "message_user_field_parameter" dcl 5-208 in procedure "mlsys_transmit_" header based structure level 2 in structure "mlsys_mailer_data" dcl 13-7 in procedure "mlsys_transmit_" header 2 000200 automatic structure level 2 in structure "saved_message_data" dcl 131 in procedure "mlsys_transmit_" header based structure level 2 in structure "recipients_info" dcl 4-49 in procedure "mlsys_transmit_" header based structure level 2 in structure "message_user_field" dcl 5-163 in procedure "mlsys_transmit_" header based structure level 2 in structure "mail_format" dcl 9-24 in procedure "mlsys_transmit_" set ref 2596* 2596 header 20 000256 automatic structure level 3 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" header based structure level 2 in structure "NOTIFICATION_MAIL_FORMAT" dcl 115 in procedure "mlsys_transmit_" set ref 3209* header based structure level 2 in structure "message_body_section" dcl 5-274 in procedure "mlsys_transmit_" header 4 based structure level 3 in structure "message_body_section_parameter" dcl 5-313 in procedure "mlsys_transmit_" host_name 43 based varying char(40) level 2 dcl 2991 set ref 3039* idx 000760 automatic fixed bin(17,0) dcl 1400 in procedure "verify_recipients_info_and_deliver_options" set ref 1424* 1425 1425* 1456* 1457* idx 000402 automatic fixed bin(17,0) dcl 250 in procedure "mlsys_transmit_" set ref 932* 939* 939 940 941 942 943 944 idx 000100 automatic fixed bin(17,0) dcl 1532 in procedure "cleanup_message_delivery" set ref 1544* 1545 1545 1545 1545 1549* 1574* 1575* idx 001054 automatic fixed bin(17,0) dcl 2412 in procedure "mark_duplicate_recipients" set ref 2425* 2427 2427* idx 000334 automatic fixed bin(17,0) dcl 1857 in procedure "validate_or_expand_address" set ref 1898* 1899* 1905* 1906* 2325* 2326* 2366* 2367 2367* idx 001015 automatic fixed bin(17,0) dcl 1657 in procedure "complete_new_message" set ref 1687* 1688* idx 001031 automatic fixed bin(17,0) dcl 1725 in procedure "add_redistribution" set ref 1747* 1748* idx 000741 automatic fixed bin(17,0) dcl 1305 in procedure "lookup_or_open_mailbox" set ref 1316* 1318 1320 1322 1324 1327 1329 1330 1334 1338 1338 1341 1342 1343* 1367 ignore 000756 automatic bit(1) dcl 1399 set ref 1425* index 1 based fixed bin(17,0) array level 3 in structure "transmit_cache" dcl 210 in procedure "mlsys_transmit_" set ref 1320* 1334 1357* 1358* 1364* index builtin function dcl 384 in procedure "mlsys_transmit_" ref 1140 initial_stack_extension 000220 automatic pointer dcl 191 set ref 478 483* 1035 1040* 1502* 1503 initiate_file_$component 000234 constant entry external dcl 318 ref 2220 interactive 12 based bit(1) level 3 packed packed unaligned dcl 5-15 set ref 1184 is_empty_message 000757 automatic bit(1) dcl 1399 set ref 1455* 1456 1458* 1460* 1463 ism_recipient based structure level 1 dcl 2991 ism_recipient_idx 001177 automatic fixed bin(17,0) dcl 2996 set ref 3057* 3058* 3067* 3069 3070* ism_recipient_idxs based fixed bin(17,0) array dcl 189 set ref 772 3036* 3070 ism_recipient_idxs_ptr 000216 automatic pointer dcl 191 set ref 772 772* 775* 1512* 1559 1559 1559* 1562* 3036 3070 ism_recipient_ptr 001172 automatic pointer dcl 2992 set ref 3037* 3038 3039 3040 3041 3042 3058* 3059 3059 3060 3069* 3072 3074 3076 3078 3082 3082 3082 3085 3091 3091 3096 3098 last_date_time_delivered 000174 automatic fixed bin(71,0) dcl 128 set ref 1801* 1828 last_delivered_by 000176 automatic pointer dcl 129 set ref 1800* 1827 last_temp_segment_ptr 000352 automatic pointer dcl 241 set ref 1516* 2514 2516 2527* 2531 2779 2781 2794* 2798 2918 2920 2933* 2940 last_temp_segment_used 000354 automatic fixed bin(18,0) dcl 242 set ref 2514 2516 2517 2530* 2539* 2539 2779 2781 2783 2797* 2808* 2808 2918 2920 2922 2939* 2950* 2950 lbound builtin function dcl 384 ref 986 997 1024 1316 length builtin function dcl 384 ref 745 793 793 796 796 889 937 1140 1140 1767 3125 3145 3163 3163 3171 3171 3171 3171 3180 3180 3207 3213 lines 11 based fixed bin(17,0) level 3 dcl 115 set ref 3212* list_expansion_ptr 000106 automatic pointer dcl 1850 set ref 2202* 2299* 2305 2305* 2311* 2324* 2325 2326 2341 2341* list_idx 46 based fixed bin(17,0) level 3 in structure "other_recipient" dcl 252 in procedure "mlsys_transmit_" ref 1065 1076 list_idx 46 based fixed bin(17,0) level 3 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 855 902 942 1055 1065 1076 1081 2390* list_idx 5 based fixed bin(18,0) array level 4 in structure "expanded_recipients_result_list" packed packed unsigned unaligned dcl 4-93 in procedure "mlsys_transmit_" set ref 942* list_idx 46 based fixed bin(17,0) array level 4 in structure "recipients_list" dcl 186 in procedure "mlsys_transmit_" set ref 863 list_idx 2 based fixed bin(18,0) level 3 in structure "result" packed packed unsigned unaligned dcl 223 in procedure "mlsys_transmit_" set ref 863* lists 12 based structure array level 2 dcl 4-49 local_do 000574 automatic structure level 1 dcl 264 set ref 1013 1161 1253 1475* 1478 local_info 51 based structure level 2 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" local_info 51 based structure level 2 in structure "other_recipient" dcl 2410 in procedure "mark_duplicate_recipients" local_mep 000236 automatic structure level 1 dcl 220 set ref 1633 1633 1712 1712 local_mld 000100 automatic structure level 1 dcl 1848 set ref 2207 local_mrp 000256 automatic structure level 1 dcl 221 set ref 1775 1775 lru_idx 000737 automatic fixed bin(17,0) dcl 1305 set ref 1324* 1342* 1355 1357 1358 1358 1363 1364 1365 lru_usage 000736 automatic fixed bin(17,0) dcl 1305 set ref 1314* 1341 1343* mail 2(04) based bit(1) level 4 packed packed unaligned dcl 13-7 set ref 3019* mail_format based structure level 1 dcl 9-24 set ref 2590 2595 mail_format_ptr 000654 automatic pointer dcl 9-17 set ref 2496* 2547* 2548 2549 2550 2551 2552 2553 2594* 2595 2596 2597 mail_table_expansion 000327 automatic bit(1) dcl 1855 set ref 1861* 1875* 1889 2212 2307 2343 2387 mailbox_$close 000236 constant entry external dcl 320 ref 520 547 1358 1540 1580 1992 2020 2045 mailbox_$get_mode_file 000240 constant entry external dcl 321 ref 1961 mailbox_$get_mode_index 000242 constant entry external dcl 322 ref 1216 1986 mailbox_$get_uid_file 000244 constant entry external dcl 323 ref 1308 mailbox_$get_uid_index 000246 constant entry external dcl 324 ref 1320 1357 mailbox_$open 000250 constant entry external dcl 325 ref 1350 1980 mailbox_$wakeup_aim_add_index 000252 constant entry external dcl 326 ref 2658 2683 2720 mailbox_created_code 000612 automatic fixed bin(35,0) dcl 267 set ref 1129* 1152* 1232 mailbox_dirname 000104 automatic char(168) packed unaligned dcl 108 set ref 1102* 1120* 1139* 1197* 1203* 1206* mailbox_ename 000156 automatic char(32) packed unaligned dcl 109 set ref 1103* 1120* 1140* 1142* 1143* 1143* 1197* 1203* 1206* mailbox_idx 51 based fixed bin(17,0) level 3 in structure "other_recipient" dcl 2410 in procedure "mark_duplicate_recipients" ref 2421 2421 2444 mailbox_idx 000412 automatic fixed bin(17,0) dcl 257 in procedure "mlsys_transmit_" set ref 1518* 1540 1540* 1541* 1980* 1986* 1992* 1993* 1996 2002* 2003 2020* 2021* 2023 2042* mailbox_idx 51 based fixed bin(17,0) level 3 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" set ref 519 520* 521* 546 547* 548* 654 656* 659* 1580 1580* 1582* 1996* 2003* 2023* 2044 2045* 2046* 2393* 2421 2444 mailbox_idx 000735 automatic fixed bin(17,0) dcl 1305 in procedure "lookup_or_open_mailbox" set ref 1350* 1364 1371 mailbox_message_lth 001075 automatic fixed bin(19,0) dcl 2469 set ref 2501 2501 2539 2539 2556 2585* 2590* 2593 2605* mailbox_message_with_bcc_lth 000372 automatic fixed bin(24,0) dcl 246 set ref 509* 532 659* 1190* 1225* mailbox_message_with_bcc_ptr 000356 automatic pointer dcl 244 set ref 509* 531 659* 793 793 793 793 1190* 1225* mailbox_message_without_bcc_lth 000373 automatic fixed bin(24,0) dcl 246 set ref 532* 536* 656* mailbox_message_without_bcc_ptr 000360 automatic pointer dcl 244 set ref 531* 536* 656* 796 796 796 796 mailbox_mode 000415 automatic bit(36) dcl 258 set ref 1216* 1220 1961* 1963 1986* 1988 mailbox_uid 000732 automatic bit(36) dcl 1303 set ref 1308* 1318 1363 mailing_list_data based structure level 1 dcl 198 mailing_list_data_ptr 000234 automatic pointer dcl 202 set ref 1565* 1565* 1567 1567* 1569 2226* 2226* 2228* 2233 make_copies_with_bcc 000321 automatic bit(1) dcl 232 set ref 459* 507 528 555 575 602 618 783 793 803 811 1911* 1911 1915* make_copies_without_bcc 000322 automatic bit(1) dcl 232 set ref 459* 528 575 618 785 796 805 814 1912* 1912 mbx_add_options 000100 automatic structure level 1 dcl 2627 in procedure "add_message_to_mailbox" set ref 2638* 2658 2658 2681* 2683 2683 mbx_add_options 000366 automatic structure level 1 dcl 2705 in procedure "send_test_message" set ref 2714* 2720 2720 mbz 5(05) based bit(31) level 3 packed packed unaligned dcl 4-6 ref 1449 message based structure level 1 dcl 5-15 set ref 1600 1619* message_bit_string_body_section based structure level 1 dcl 5-301 message_body_section based structure level 1 dcl 5-274 message_body_section_ptr 000650 automatic pointer dcl 5-280 set ref 1457* 1458 1458 1458 1460 message_buffers 000334 automatic pointer array dcl 238 set ref 1516* 1545 1545 1545 1545* 1549* 2478* 2494* 2496 2501 2509* 2516* 2531* 2547 2555 2585* 2594 2605* 2751* 2756* 2758 2765 2774* 2781* 2798* 2890* 2895* 2897 2904 2913* 2920* 2940* message_envelope based structure level 1 dcl 5-61 message_envelope_parameter based structure level 1 dcl 5-74 message_envelope_ptr 000644 automatic pointer dcl 5-69 set ref 1792* 1797* 1800 1801 1805 1806 1819* 1824* 1827 1828 message_id 30 based bit(72) level 3 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 1672* message_id 20 000256 automatic bit(72) level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1740* message_preformatted_body_section based structure level 1 dcl 5-292 message_preformatted_body_section_text based char packed unaligned dcl 5-298 ref 1458 message_ptr 000642 automatic pointer dcl 5-53 set ref 393* 420* 433 441 1005* 1159* 1169 1176 1178 1180 1184 1246* 1456 1457 1598 1600 1617 1619 1621 1625 1633* 1637* 1637 1669 1672 1672 1674 1675 1676 1678 1680 1684 1687 1688 1692 1693 1695 1697 1712* 1775* 1792 1792 1795 1795 1819 1819 1822 1822 1897 1898 1899 1904 1905 1906 2473 2475 2480 2481* 2585* 2605* 2658 2683 2720 2746 2748 2760* 2783* 2799* 2856 2856 2856 2885 2887 2899* 2922* 2941* 3053 message_redistribution based structure level 1 dcl 5-122 message_redistribution_parameter based structure level 1 dcl 5-139 message_redistribution_ptr 000646 automatic pointer dcl 5-134 set ref 1795* 1797 1822* 1824 message_redistributions_list based structure level 1 dcl 5-109 message_reference based structure level 1 dcl 5-234 message_subject based char packed unaligned dcl 5-51 set ref 2856* message_text_field based structure level 1 dcl 5-260 message_user_field based structure level 1 dcl 5-163 mf_extension based structure level 1 dcl 10-11 set ref 2590 mf_extension_ptr 000660 automatic pointer dcl 10-18 set ref 2595* 2598 2599 mls_ptr based pointer level 2 in structure "mailing_list_data" dcl 198 in procedure "mlsys_transmit_" set ref 1567 1567* 2228 mls_ptr 000100 automatic pointer level 2 in structure "local_mld" dcl 1848 in procedure "validate_or_expand_address" set ref 2206* 2211 2211* 2220* 2228 2294* 2304 2304* 2345 2345* mlsys_address_list_mgr_$add_address 000254 constant entry external dcl 329 ref 1680 1697 1743 mlsys_address_list_mgr_$create_read_only_address_list 000256 constant entry external dcl 330 ref 1676 1693 1742 1746 mlsys_address_list_mgr_$delete_address 000260 constant entry external dcl 331 ref 1055 1081 1621 1625 mlsys_address_list_mgr_$free_address_list 000262 constant entry external dcl 332 ref 1776 1777 2305 2341 mlsys_address_list_mgr_$increment_reference_count 000264 constant entry external dcl 333 ref 1678 1695 mlsys_address_list_mgr_$merge_address_lists 000266 constant entry external dcl 334 ref 1748 mlsys_address_list_mgr_$verify_address_list 000270 constant entry external dcl 335 ref 987 1425 mlsys_address_list_mgr_$verify_writeable_address_list 000272 constant entry external dcl 336 ref 998 mlsys_address_mgr_$check_if_actually_local 000274 constant entry external dcl 337 ref 1867 mlsys_address_mgr_$compare_addresses 000276 constant entry external dcl 338 ref 1899 1906 1947 1950 2444 mlsys_address_mgr_$decrement_reference_count 000300 constant entry external dcl 339 ref 1576 mlsys_address_mgr_$decrement_reference_count_no_free 000302 constant entry external dcl 340 ref 945 mlsys_address_mgr_$expand_list_address 000304 constant entry external dcl 341 ref 2311 mlsys_address_mgr_$free_address 000306 constant entry external dcl 342 ref 1889 2212 2307 2343 mlsys_address_mgr_$get_address_pathname 000310 constant entry external dcl 343 ref 714 1120 1956 2076 2217 mlsys_address_mgr_$get_address_string 000312 constant entry external dcl 345 ref 2157 mlsys_address_mgr_$get_address_type 000314 constant entry external dcl 346 ref 1659 1727 1869 1874 mlsys_address_mgr_$get_mail_table_address 000316 constant entry external dcl 347 ref 1872 mlsys_address_mgr_$increment_reference_count 000320 constant entry external dcl 348 ref 2382 mlsys_address_mgr_$verify_address 000322 constant entry external dcl 349 ref 1244 mlsys_address_route_mgr_$compute_route 000324 constant entry external dcl 350 ref 2153 mlsys_address_route_mgr_$free_address_route 000326 constant entry external dcl 351 ref 1534 2182 mlsys_area based area(1024) dcl 3-61 ref 1287 mlsys_data_$lowest_forum_ring 000416 external static fixed bin(3,0) dcl 3-49 ref 2070 mlsys_data_$max_lock_wait_retries 000414 external static fixed bin(17,0) dcl 3-19 ref 2662 mlsys_data_$subsystem_area_ptr 000420 external static pointer dcl 3-62 ref 1287 mlsys_data_$transmit_cache_ptr 000422 external static pointer dcl 3-66 set ref 1287* 1288 1314 1316 1316 1318 1320 1322 1327 1329 1329 1330 1331 1331 1334 1338 1338 1341 1343 1355 1357 1358 1358 1363 1364 1365 1365 1367 1368 1368 mlsys_data_$user_default_mailbox_address 000406 external static pointer dcl 2-12 set ref 1660 1666 1728 1734 1947* mlsys_data_$user_id 000424 external static varying char(32) dcl 3-72 ref 3016 mlsys_data_$user_logbox_address 000412 external static pointer dcl 2-15 set ref 1120* mlsys_data_$user_mail_table_address 000410 external static pointer dcl 2-14 set ref 1659* 1663* 1664 1727* 1731* 1732 1950* mlsys_et_$address_pathname_too_long_to_q 000076 external static fixed bin(35,0) dcl 281 ref 2054 2128 2274 mlsys_et_$cant_compute_route 000100 external static fixed bin(35,0) dcl 281 ref 3082 mlsys_et_$cant_queue_mls_in_archive 000102 external static fixed bin(35,0) dcl 281 ref 2279 mlsys_et_$duplicate_address 000104 external static fixed bin(35,0) dcl 281 ref 862 mlsys_et_$empty_mailing_list 000106 external static fixed bin(35,0) dcl 281 ref 2334 mlsys_et_$empty_message 000110 external static fixed bin(35,0) dcl 281 ref 1464 mlsys_et_$errors_in_list_address 000112 external static fixed bin(35,0) dcl 281 ref 884 1274 mlsys_et_$foreign_address_too_long 000114 external static fixed bin(35,0) dcl 281 ref 2172 mlsys_et_$forum_not_available 000116 external static fixed bin(35,0) dcl 281 ref 2072 mlsys_et_$invalid_address 000120 external static fixed bin(35,0) dcl 281 ref 1932 mlsys_et_$ism_not_available 000122 external static fixed bin(35,0) dcl 281 ref 1471 2147 2263 mlsys_et_$list_address_is_all_duplicates 000124 external static fixed bin(35,0) dcl 281 ref 876 882 mlsys_et_$logbox_created 000126 external static fixed bin(35,0) dcl 281 ref 1129 mlsys_et_$mailbox_full 000130 external static fixed bin(35,0) dcl 281 ref 665 724 2674 3132 mlsys_et_$message_delivered 000132 external static fixed bin(35,0) dcl 281 ref 661 690 913 3072 mlsys_et_$message_not_sent 000134 external static fixed bin(35,0) dcl 281 ref 908 959 mlsys_et_$message_partially_sent 000136 external static fixed bin(35,0) dcl 281 ref 962 mlsys_et_$message_queued 000140 external static fixed bin(35,0) dcl 281 ref 886 914 3074 mlsys_et_$message_queued_and_delivered 000142 external static fixed bin(35,0) dcl 281 ref 911 3076 mlsys_et_$message_too_large 000144 external static fixed bin(35,0) dcl 281 set ref 2533* 2673 2801* 2943* mlsys_et_$no_a_permission 000146 external static fixed bin(35,0) dcl 281 ref 1221 1352 1968 1981 1991 2672 2723 mlsys_et_$no_forum_this_ring 000150 external static fixed bin(35,0) dcl 281 ref 2070 mlsys_et_$no_logbox 000152 external static fixed bin(35,0) dcl 281 ref 1128 mlsys_et_$no_mailbox 000154 external static fixed bin(35,0) dcl 281 ref 1110 1962 1982 mlsys_et_$no_mailing_list 000156 external static fixed bin(35,0) dcl 281 ref 2222 mlsys_et_$no_recipients 000160 external static fixed bin(35,0) dcl 281 ref 473 1262 mlsys_et_$no_savebox 000162 external static fixed bin(35,0) dcl 281 ref 1151 mlsys_et_$rejected_by_foreign_system 000164 external static fixed bin(35,0) dcl 281 ref 3095 mlsys_et_$route_out_of_service 000166 external static fixed bin(35,0) dcl 281 ref 3089 3105 3128 mlsys_et_$savebox_created 000170 external static fixed bin(35,0) dcl 281 ref 1152 mlsys_et_$too_many_recipients 000172 external static fixed bin(35,0) dcl 281 ref 2374 mlsys_et_$unable_to_queue_mail 000174 external static fixed bin(35,0) dcl 281 ref 3091 mlsys_et_$unknown_delivery_mode 000176 external static fixed bin(35,0) dcl 281 ref 1434 mlsys_et_$unknown_queued_notify_mode 000200 external static fixed bin(35,0) dcl 281 ref 1445 mlsys_et_$unknown_queueing_mode 000202 external static fixed bin(35,0) dcl 281 ref 1439 mlsys_format_$format_address_for_ism 000330 constant entry external dcl 352 ref 2161 mlsys_format_$format_canon_redistributed_msg 000332 constant entry external dcl 354 ref 2605 mlsys_format_$format_message_for_forum 000334 constant entry external dcl 356 ref 2760 2783 2799 mlsys_format_$format_message_for_mailbox 000336 constant entry external dcl 358 ref 2585 mlsys_format_$format_message_for_rfc822_network 000340 constant entry external dcl 360 ref 2899 2922 2941 mlsys_mailbox_mgr_$get_message_mf_if_canonical 000342 constant entry external dcl 362 ref 2481 mlsys_mailbox_utils_$create_logbox 000344 constant entry external dcl 363 ref 1127 1201 1201 mlsys_mailbox_utils_$create_savebox 000346 constant entry external dcl 364 ref 1150 mlsys_mailer_ 000350 constant entry external dcl 365 ref 3053 mlsys_mailer_data based structure level 1 dcl 13-7 set ref 753 mlsys_mailer_data_n_recipients 000663 automatic fixed bin(17,0) dcl 13-5 set ref 752* 753 mlsys_mailer_data_ptr 000664 automatic pointer dcl 13-6 set ref 753 753* 756* 1512* 1554 1554 1554* 1557* 3014 3016 3017 3018 3019 3020 3021 3026 3035 3035 3036 3037 3037 3046 3053* 3057 3058 3067 3069 mlsys_mailer_recipient based structure level 1 dcl 13-22 mlsys_message_id_mgr_$encode_local_id 000352 constant entry external dcl 366 ref 1672 1740 mlsys_message_mgr_$add_redistribution 000354 constant entry external dcl 367 ref 1775 mlsys_message_mgr_$delete_redistribution 000356 constant entry external dcl 368 ref 1637 mlsys_message_mgr_$replace_message_envelope 000360 constant entry external dcl 369 ref 1633 1712 mlsys_message_mgr_$verify_im_message 000362 constant entry external dcl 370 ref 419 mlsys_message_mgr_$verify_message 000364 constant entry external dcl 371 ref 1156 mlsys_message_mgr_$verify_new_message 000366 constant entry external dcl 372 ref 392 mlsys_misc_utils_$free_delivery_results 000370 constant entry external dcl 374 ref 403 430 972 mlsys_psp_$forum_not_available 000372 constant entry external dcl 375 ref 2068 mlsys_psp_$ism_not_available 000374 constant entry external dcl 376 ref 709 1469 2145 2260 mlsys_storage_mgr_$get_temp_segment 000376 constant entry external dcl 377 ref 756 775 2361 2527 2794 2933 mlsys_storage_mgr_$release_temp_segment 000400 constant entry external dcl 378 ref 1545 1554 1559 1584 mod builtin function dcl 384 ref 478 1035 1504 2501 2539 2765 2808 2904 2950 multiline_text 33 000256 automatic bit(1) level 6 packed packed unaligned dcl 221 set ref 1773* n_addresses based fixed bin(17,0) level 2 in structure "recipients_result_list" dcl 4-72 in procedure "mlsys_transmit_" set ref 841* n_addresses 6 based fixed bin(17,0) level 2 in structure "address_list" dcl 7-6 in procedure "mlsys_transmit_" ref 465 840 844 1027 1687 1898 1905 2325 3200 n_body_sections 11 based fixed bin(17,0) level 2 dcl 5-15 set ref 1456 n_entries based fixed bin(17,0) level 2 in structure "expanded_recipients_result_list" dcl 4-93 in procedure "mlsys_transmit_" set ref 929* n_entries 1(18) based fixed bin(18,0) level 3 in structure "result" packed packed unsigned unaligned dcl 223 in procedure "mlsys_transmit_" set ref 896* 896 n_failed_recipients 10 based fixed bin(17,0) level 3 in structure "recipients_info" dcl 4-49 in procedure "mlsys_transmit_" set ref 825* 956 1481* n_failed_recipients 000227 automatic fixed bin(17,0) dcl 192 in procedure "mlsys_transmit_" set ref 492* 498* 498 502 516* 516 543* 543 563* 563 590* 590 610* 610 633* 633 641 678* 678 701* 701 741* 741 765* 765 825 3081* 3081 3087* 3087 3122* 3122 n_lists 11 based fixed bin(17,0) level 3 dcl 4-49 ref 462 835 1418 1424 1483 1747 n_message_buffers_used 000350 automatic fixed bin(17,0) dcl 239 set ref 1515* 1543 1544 1552* 2477 2477* 2750 2750* 2889 2889* n_recipients 6 based fixed bin(17,0) level 3 in structure "recipients_info" dcl 4-49 in procedure "mlsys_transmit_" set ref 822* 1481* n_recipients 000225 automatic fixed bin(17,0) dcl 192 in procedure "mlsys_transmit_" set ref 472 478 478 494 512 539 559 586 606 629 649 752 758 772 822 852 880 900 934 1035 1035 1051 1073 1262 1264 1272 1506* 1574 2229* 2229 2319* 2319 2322 2331 2358 2366 2378* 2378 2379 2415 3028 n_recipients_allocated 000224 automatic fixed bin(17,0) dcl 192 set ref 1505* 2358 2371* n_recipients_before_expansion 000333 automatic fixed bin(17,0) dcl 1857 set ref 2322* 2331 n_redistributions 10 based fixed bin(17,0) level 2 dcl 5-15 set ref 1637* 1792 1795 1819 1822 n_text_fragments based fixed bin(21,0) level 2 dcl 10-11 set ref 2590 2598* 2598 2599 n_unique_recipients 000226 automatic fixed bin(17,0) dcl 192 in procedure "mlsys_transmit_" set ref 492* 497* 497 824 n_unique_recipients 7 based fixed bin(17,0) level 3 in structure "recipients_info" dcl 4-49 in procedure "mlsys_transmit_" set ref 824* 1481* need_forum_message 000324 automatic bit(1) dcl 233 set ref 457* 555 575 802 2132* 2132 need_mailbox_message 000323 automatic bit(1) dcl 233 set ref 457* 507 528 792 2058* 2058 need_network_message 000325 automatic bit(1) dcl 233 set ref 457* 602 618 782 810 2185* 2185 2269* network_message_lth 001153 automatic fixed bin(21,0) dcl 2880 set ref 2899* 2903 2922* 2941* 2949 2957 network_message_n_words 001154 automatic fixed bin(18,0) dcl 2881 set ref 2903* 2904 2904 2949* 2950 2950 network_message_ptr 001146 automatic pointer dcl 2878 set ref 2897* 2899* 2920* 2922* 2940* 2941* 2956 network_message_with_bcc_lth 000376 automatic fixed bin(21,0) dcl 247 set ref 604* 622 783* 811* network_message_with_bcc_ptr 000366 automatic pointer dcl 244 set ref 604* 621 783* 811* network_message_without_bcc_lth 000377 automatic fixed bin(21,0) dcl 247 set ref 622* 626* 785* 814* network_message_without_bcc_ptr 000370 automatic pointer dcl 244 set ref 621* 626* 785* 814* never_add 0(03) 000366 automatic bit(1) level 2 packed packed unaligned dcl 2705 set ref 2716* never_transmitted 000326 automatic bit(1) dcl 235 set ref 455* 745* 959 3145* new_recipients_list_ptr 000110 automatic pointer dcl 1850 set ref 2361* 2367 2370 no_acknowledge 3(04) based bit(1) level 3 packed packed unaligned dcl 142 set ref 656* 659* 1943* 1947* 1950 1950* 2066* 2143* 2199* 2290* no_mailbox_code 000611 automatic fixed bin(35,0) dcl 267 set ref 1110* 1128* 1151* 1211 normal_wakeup 000100 automatic bit(1) level 2 in structure "mbx_add_options" packed packed unaligned dcl 2627 in procedure "add_message_to_mailbox" set ref 2640* 2642* 2682* normal_wakeup 000366 automatic bit(1) level 2 in structure "mbx_add_options" packed packed unaligned dcl 2705 in procedure "send_test_message" set ref 2715* notification_initialized_sw 000010 internal static bit(1) initial packed unaligned dcl 114 set ref 2679 2712 3218* notify 13(02) based bit(1) level 4 packed packed unaligned dcl 115 set ref 3215* null builtin function dcl 384 ref 419 972 987 998 1005 1009 1246 1249 1411 1425 1483 1508 1510 1512 1516 1521 1534 1545 1549 1554 1557 1559 1562 1564 1565 1567 1571 1573 1576 1587 1598 1617 1632 1675 1692 1706 1708 1711 1754 1756 1759 1763 1770 1805 1889 2151 2182 2200 2202 2206 2211 2212 2226 2291 2294 2299 2304 2305 2307 2336 2341 2343 2345 2475 2478 2514 2748 2751 2779 2887 2890 2918 3197 original_mf_extension_ptr 001070 automatic pointer dcl 2467 set ref 2481* 2590 2598 2599 2605* original_mf_ptr 001066 automatic pointer dcl 2467 set ref 2481* 2590 2595 2596 2597 2605* other_cache_idx 000740 automatic fixed bin(17,0) dcl 1305 set ref 1330* 1331 1331* 1367* 1368 1368* other_recipient based structure level 1 dcl 252 in procedure "mlsys_transmit_" other_recipient based structure level 1 dcl 2410 in procedure "mark_duplicate_recipients" other_recipient_idx 000411 automatic fixed bin(17,0) dcl 255 in procedure "mlsys_transmit_" set ref 1063* 1064 1065* 1073* 1075* other_recipient_idx 001053 automatic fixed bin(17,0) dcl 2412 in procedure "mark_duplicate_recipients" set ref 2419* 2420 2427 2437* other_recipient_ptr 001050 automatic pointer dcl 2411 in procedure "mark_duplicate_recipients" set ref 2420* 2421 2421 2422 2430 2431 2441 2441 2444 2444 2444 other_recipient_ptr 000404 automatic pointer dcl 253 in procedure "mlsys_transmit_" set ref 1064* 1065 1065 1075* 1076 1076 1076 p_address_list_ptr parameter pointer dcl 3195 ref 3192 3197 3200 p_address_ptr parameter pointer dcl 1842 in procedure "validate_or_expand_address" set ref 1839 1867* 1869* 1872* 1878* 1885 p_address_ptr parameter pointer dcl 2355 in procedure "add_recipient" ref 2352 2381 p_buffer_size parameter fixed bin(19,0) dcl 2583 set ref 2580 2585* 2593 2605* p_code parameter fixed bin(35,0) dcl 2876 in procedure "prepare_message_for_network" set ref 2870 2936* 2958* 2972* p_code parameter fixed bin(35,0) dcl 2625 in procedure "add_message_to_mailbox" set ref 2618 2675* p_code parameter fixed bin(35,0) dcl 2703 in procedure "send_test_message" set ref 2699 2720* 2723 2723* p_code parameter fixed bin(35,0) dcl 3159 in procedure "add_suffix" set ref 3154 3164* 3180* 3182* p_code parameter fixed bin(35,0) dcl 2737 in procedure "prepare_message_for_forum" set ref 2731 2816* 2830* p_code parameter fixed bin(35,0) dcl 1398 in procedure "verify_recipients_info_and_deliver_options" set ref 1395 1407* 1412* 1419* 1423* 1424 1425* 1430 1434* 1439* 1445* 1450* 1464* 1471* 1486* p_code parameter fixed bin(35,0) dcl 2845 in procedure "add_message_to_forum" set ref 2839 2861* p_code parameter fixed bin(35,0) dcl 1301 in procedure "lookup_or_open_mailbox" set ref 1296 1372* 1386* p_code parameter fixed bin(35,0) dcl 2465 in procedure "prepare_message_for_mailbox" set ref 2459 2557* 2571* p_ename parameter char packed unaligned dcl 3157 ref 3154 3163 3168 p_exclude_bcc_field parameter bit(1) dcl 1844 ref 1839 1918 p_expand_mailing_lists parameter bit(1) dcl 1845 set ref 1839 2255 2326* p_force_no_acknowledge parameter bit(1) packed unaligned dcl 2624 ref 2618 2654 p_forum_idx parameter fixed bin(17,0) dcl 2842 set ref 2839 2856* p_forum_message_lth parameter fixed bin(21,0) dcl 2736 in procedure "prepare_message_for_forum" set ref 2731 2815* p_forum_message_lth parameter fixed bin(21,0) dcl 2844 in procedure "add_message_to_forum" ref 2839 2856 2856 p_forum_message_ptr parameter pointer dcl 2735 in procedure "prepare_message_for_forum" set ref 2731 2814* p_forum_message_ptr parameter pointer dcl 2843 in procedure "add_message_to_forum" ref 2839 2856 p_include_bcc_field parameter bit(1) dcl 2462 in procedure "prepare_message_for_mailbox" ref 2459 2473 p_include_bcc_field parameter bit(1) dcl 2734 in procedure "prepare_message_for_forum" ref 2731 2746 p_include_bcc_field parameter bit(1) dcl 2873 in procedure "prepare_message_for_network" ref 2870 2885 p_mailbox_dirname parameter char packed unaligned dcl 1299 set ref 1296 1308* 1350* p_mailbox_ename parameter char packed unaligned dcl 1299 set ref 1296 1308* 1350* p_mailbox_idx parameter fixed bin(17,0) dcl 2621 in procedure "add_message_to_mailbox" set ref 2618 2658* 2683* p_mailbox_idx parameter fixed bin(17,0) dcl 1300 in procedure "lookup_or_open_mailbox" set ref 1296 1334* 1371* p_mailbox_idx parameter fixed bin(17,0) dcl 2702 in procedure "send_test_message" set ref 2699 2720* p_mailbox_message_lth parameter fixed bin(24,0) dcl 2623 in procedure "add_message_to_mailbox" set ref 2618 2658* p_mailbox_message_lth parameter fixed bin(24,0) dcl 2464 in procedure "prepare_message_for_mailbox" set ref 2459 2556* p_mailbox_message_ptr parameter pointer dcl 2622 in procedure "add_message_to_mailbox" set ref 2618 2654 2654 2658* 2670 p_mailbox_message_ptr parameter pointer dcl 2463 in procedure "prepare_message_for_mailbox" set ref 2459 2555* p_message_lth parameter fixed bin(21,0) dcl 2989 set ref 2999 3007 3053* p_message_ptr parameter pointer dcl 2988 set ref 2999 3007 3053* p_network_message_lth parameter fixed bin(21,0) dcl 2875 set ref 2870 2957* p_network_message_ptr parameter pointer dcl 2874 set ref 2870 2956* p_new_ename parameter char(32) packed unaligned dcl 3158 set ref 3154 3163 3178* 3180 p_pointer parameter pointer dcl 1-13 ref 1-10 1-16 p_recipient_type parameter fixed bin(17,0) dcl 2986 in procedure "invoke_ism" ref 3007 3010 p_recipient_type parameter fixed bin(17,0) dcl 2356 in procedure "add_recipient" ref 2352 2389 p_return_code parameter fixed bin(35,0) dcl 2970 in procedure "abort_prepare_message_for_network" ref 2967 2972 p_return_code parameter fixed bin(35,0) dcl 2569 in procedure "abort_prepare_message_for_mailbox" ref 2566 2571 p_return_code parameter fixed bin(35,0) dcl 2828 in procedure "abort_prepare_message_for_forum" ref 2825 2830 p_return_code parameter fixed bin(35,0) dcl 1384 in procedure "return_from_lookup" ref 1381 1386 p_start_recipients_list parameter bit(1) dcl 1497 ref 1494 1501 p_suffix parameter char packed unaligned dcl 3157 ref 3154 3169 p_top_level_address parameter bit(1) dcl 1843 ref 1839 1896 1915 2331 2382 2386 2387 p_use_copy_without_bcc parameter bit(1) packed unaligned dcl 2987 ref 2999 3007 3032 p_validate_only parameter bit(1) dcl 1846 set ref 1839 1959 2326* parent_address 5 based structure array level 3 dcl 4-93 part_of_this_address 000330 automatic bit(1) dcl 235 set ref 878* 880 902* partially_delivered 000331 automatic bit(1) dcl 235 set ref 879* 888* 911 913 partially_queued 000332 automatic bit(1) dcl 235 set ref 879* 886* 911 pathname_ 000402 constant entry external dcl 379 ref 717 2047 2121 2266 preserve_access_class 000607 automatic bit(1) dcl 266 set ref 1107* 1124* 1147* 1169 preserve_message_type 000606 automatic bit(1) dcl 266 set ref 1106* 1123* 1146* 1184 previous_data_ptr 2 based pointer level 2 in structure "mailing_list_data" dcl 198 in procedure "mlsys_transmit_" ref 1569 2233 previous_data_ptr 2 000100 automatic pointer level 2 in structure "local_mld" dcl 1848 in procedure "validate_or_expand_address" set ref 2205* 2226 2293* 2346 privileges 1(18) based structure level 2 in structure "aim_template" packed packed unaligned dcl 14-12 in procedure "mlsys_transmit_" privileges 000314 automatic structure level 2 in structure "user_privileges" packed packed unaligned dcl 226 in procedure "mlsys_transmit_" processed based bit(1) level 3 packed packed unaligned dcl 2991 set ref 3059* queue_mailing_lists 5(04) based bit(1) level 3 in structure "deliver_options" packed packed unaligned dcl 4-6 in procedure "mlsys_transmit_" ref 2239 2258 queue_mailing_lists 5(04) 000574 automatic bit(1) level 3 in structure "local_do" packed packed unaligned dcl 264 in procedure "mlsys_transmit_" set ref 1477* queue_only 2(05) based bit(1) level 4 packed packed unaligned dcl 13-7 set ref 3021* queued 0(01) based bit(1) level 3 packed packed unaligned dcl 2991 set ref 3074 queued_notification_mode 4 based fixed bin(17,0) level 2 dcl 4-6 ref 1443 1443 queued_only 001174 automatic bit(1) dcl 2994 set ref 3003* 3011* 3020 3021 3032 3111 queueing_mode 3 based fixed bin(17,0) level 2 in structure "deliver_options" dcl 4-6 in procedure "mlsys_transmit_" ref 712 1438 1438 1469 2031 2044 2105 2118 2184 2239 2258 3115 queueing_mode 3 000574 automatic fixed bin(17,0) level 2 in structure "local_do" dcl 264 in procedure "mlsys_transmit_" set ref 1015* 1255* 1476* read_only 0(01) based bit(1) level 2 packed packed unaligned dcl 12-8 ref 2090 recipient based structure level 1 dcl 142 set ref 1504 1504 recipient_idx 001052 automatic fixed bin(17,0) dcl 2412 in procedure "mark_duplicate_recipients" set ref 2415* 2417 2419 2425 2427 2431* recipient_idx 001200 automatic fixed bin(17,0) dcl 2996 in procedure "invoke_ism" set ref 3028* 3030 3036* recipient_idx 000230 automatic fixed bin(17,0) dcl 192 in procedure "mlsys_transmit_" set ref 494* 495* 512* 513* 539* 540* 559* 560* 586* 587* 606* 607* 629* 630* 649* 650* 758* 760* 852* 853 880 899* 899 900 901* 934* 935* 1051* 1053 1063 1084* 1272* 1273* recipient_notification 5(02) based bit(1) level 3 in structure "deliver_options" packed packed unaligned dcl 4-6 in procedure "mlsys_transmit_" ref 2677 recipient_notification 5(02) 000574 automatic bit(1) level 3 in structure "local_do" packed packed unaligned dcl 264 in procedure "mlsys_transmit_" set ref 1162* recipient_ptr 000212 automatic pointer dcl 170 set ref 495* 496 498 513* 514 514 514 514 517 518 519 520 521 540* 541 541 541 541 544 545 546 547 548 560* 561 561 561 561 564 565 566 567 568 587* 588 588 588 588 591 592 593 594 595 607* 608 608 608 608 611 612 630* 631 631 631 631 634 635 650* 652 652 652 654 656 656 656 656 659 659 659 661 661 664 664 664 665 665 665 665 665 665 670 670 670 670 670 677 683 685 685 685 688 688 690 690 693 693 693 694 694 694 694 694 700 706 708 714 718 719 721 722 722 724 724 726 726 728 728 730 730 732 734 739 745 745 760* 761 761 763 764 853* 855 855 858 858 863 865 870 871 876 881 884 886 889 889 889 901* 902 902 935* 937 937 937 937 940 941 942 943 944 945 1053* 1055 1055 1055 1055 1065 1065 1076 1076 1081 1081 1265* 1266 1266 1273* 1274 1504 1504 1575* 1576 1576 1576 1578 1578 1580 1580 1582 1582 1879 1880 1931 1932 1943 1947 1950 1950 1967 1968 1974 1975 1990 1991 1996 2003 2006 2012 2016 2017 2019 2023 2032 2033 2038 2039 2044 2045 2046 2049 2050 2050 2053 2054 2058 2066 2069 2070 2072 2079 2080 2092 2093 2098 2106 2107 2112 2113 2118 2119 2120 2123 2124 2124 2127 2128 2132 2143 2146 2147 2161 2161 2164 2165 2171 2172 2178 2179 2184 2185 2199 2217 2230 2241 2242 2248 2249 2262 2263 2267 2268 2270 2273 2274 2278 2279 2290 2311 2314 2315 2320 2337 2338 2379* 2381 2382 2385 2386 2387 2388 2389 2390 2391 2392 2393 2393 2394 2394 2395 2396 2417* 2419 2421 2422 2436 2437 2441 2444 2444 2444 3030* 3032 3032 3032 3032 3032 3038 3039 3070* 3072 3074 3076 3080 3086 3088 3089 3091 3095 3096 3098 3104 3105 3108 3110 3111 3116 3117 3118 3120 3122 3125 3125 3127 3128 3128 3130 3130 3132 3132 3134 3134 3135 3135 3137 3137 3139 3141 3141 3145 3145 recipient_size 000231 automatic fixed bin(17,0) dcl 193 set ref 478 478 1035 1035 1504* 1505 2371 recipient_type 001176 automatic fixed bin(17,0) dcl 2996 set ref 3002* 3010* 3032 recipients 105 based structure array level 2 in structure "mlsys_mailer_data" dcl 13-7 in procedure "mlsys_transmit_" set ref 3037 3058 3069 recipients based structure array level 2 in structure "recipients_list" dcl 186 in procedure "mlsys_transmit_" set ref 495 513 540 560 587 607 630 650 760 853 901 935 1053 1064 1075 1265 1273 1575 2367* 2367 2379 2417 2420 3030 3070 recipients_info based structure level 1 dcl 4-49 recipients_info_ptr 000632 automatic pointer dcl 4-64 set ref 403* 430* 462 463 464 822 824 825 835 837 838 842 930 956 972 972* 1009* 1249* 1402* 1405 1411 1416 1418 1424 1425 1425 1481 1481 1481 1483 1483 1747 1748 recipients_list based structure level 1 dcl 186 recipients_list_ptr 000214 automatic pointer dcl 191 set ref 477 495 513 540 560 587 607 630 650 760 853 863 865 901 935 1034 1053 1064 1075 1265 1273 1503* 1508* 1573 1575 1584 1584* 1587* 2358 2367 2370* 2379 2417 2420 2427 2427 3030 3070 recipients_result_list based structure level 1 dcl 4-72 set ref 841 recipients_result_list_n_addresses 000640 automatic fixed bin(17,0) dcl 4-66 set ref 840* 841 841 recipients_result_list_ptr 000634 automatic pointer dcl 4-64 in procedure "mlsys_transmit_" set ref 841* 842 846 recipients_result_list_ptr 14 based pointer array level 3 in structure "recipients_info" dcl 4-49 in procedure "mlsys_transmit_" set ref 842* 1483* record_quota_overflow 000000 stack reference condition dcl 382 ref 2645 2667 2680 2686 2850 redistribution 4 000256 automatic structure level 2 dcl 221 redistributions 10 based structure array level 2 dcl 5-109 set ref 1795 1822 redistributions_list 60 based pointer level 2 dcl 5-15 set ref 1795 1822 reply_to 40 based pointer level 3 dcl 5-15 set ref 1625* 1684* 1692 1693* 1695* 1697* result based structure level 1 dcl 223 in procedure "mlsys_transmit_" result 57 based varying char(128) level 2 in structure "ism_recipient" dcl 2991 in procedure "invoke_ism" set ref 3042* 3082 3085 3091 3091 3096 result_ptr 000312 automatic pointer dcl 224 set ref 846* 847 847 847 848 862 863 865 870 871 876 882 882 884 893 893 896 896 908 908 911 913 914 results 2 based structure array level 2 dcl 4-72 set ref 846 retry_count 000102 automatic fixed bin(17,0) dcl 2635 set ref 2651* 2661* 2661 2662 return_value 001254 automatic pointer packed dcl 1-14 set ref 1-16* 1-18 reverse builtin function dcl 384 ref 1140 1140 ring1 0(04) 000314 automatic bit(1) level 3 packed packed unaligned dcl 226 set ref 445 1174 rtrim builtin function dcl 384 ref 718 1140 1140 2049 2123 2267 3163 3168 3169 saved_code 001175 automatic fixed bin(35,0) dcl 2995 set ref 3127* 3141 saved_message_data 000200 automatic structure level 1 dcl 131 set ref 1600* 1619 section_type based fixed bin(17,0) level 3 dcl 5-274 ref 1458 send 2(03) based bit(1) level 4 packed packed unaligned dcl 13-7 set ref 3018* send_if_empty 5(01) based bit(1) level 3 packed packed unaligned dcl 4-6 ref 1454 sender 6 000256 automatic pointer level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1754* sender 6 000236 automatic pointer level 3 in structure "local_mep" dcl 220 in procedure "mlsys_transmit_" set ref 1632* 1705* sent_from 1 based char(32) level 3 in structure "NOTIFICATION_MAIL_FORMAT" dcl 115 in procedure "mlsys_transmit_" set ref 3211* sent_from 1 based char(32) level 3 in structure "mail_format" dcl 9-24 in procedure "mlsys_transmit_" set ref 2549* size builtin function dcl 384 ref 753 772 1504 1504 source 3 based varying char(256) level 3 dcl 13-7 set ref 3016* stack_truncation_ptr 001150 automatic pointer dcl 2878 in procedure "prepare_message_for_network" set ref 2904* 2907* stack_truncation_ptr 000222 automatic pointer dcl 191 in procedure "mlsys_transmit_" set ref 478* 481* 1035* 1038* stack_truncation_ptr 001124 automatic pointer dcl 2739 in procedure "prepare_message_for_forum" set ref 2765* 2768* stack_truncation_ptr 001072 automatic pointer dcl 2467 in procedure "prepare_message_for_mailbox" set ref 2501* 2503* stackframeptr builtin function dcl 384 ref 477 1034 1545 1554 1559 1584 2358 string builtin function dcl 384 set ref 444* 1016* 1173* 1256* 2385* 2638* 2658 2658 2681* 2683 2683 2714* 2720 2720 3017* 3040* subject 50 based structure level 3 dcl 5-15 substr builtin function dcl 384 ref 1140 3171 suppress_bcc_field_when_necessary 000320 automatic bit(1) dcl 232 set ref 408* 437* 1018* 1258* 1896 switches 13 based structure level 3 in structure "mail_format" dcl 9-24 in procedure "mlsys_transmit_" set ref 2550* switches 13 based structure level 3 in structure "NOTIFICATION_MAIL_FORMAT" dcl 115 in procedure "mlsys_transmit_" sys_info$max_seg_size 000014 external static fixed bin(19,0) dcl 278 set ref 2371 2514 2517 2532* 2779 2783 2799 2918 2922 2941 target_mailbox_idx 000413 automatic fixed bin(17,0) dcl 257 set ref 1197* 1206* 1216* 1225* terminate_file_ 000404 constant entry external dcl 380 ref 1567 2211 2304 2345 text 15 based char level 2 in structure "mail_format" dcl 9-24 in procedure "mlsys_transmit_" set ref 793 793 793 793 796 796 796 796 2597* 2597 text 15 based char level 2 in structure "NOTIFICATION_MAIL_FORMAT" dcl 115 in procedure "mlsys_transmit_" set ref 3216* text_fragments 1 based structure array level 2 dcl 10-11 set ref 2599* 2599 text_len 12 based fixed bin(21,0) level 3 in structure "NOTIFICATION_MAIL_FORMAT" dcl 115 in procedure "mlsys_transmit_" set ref 3213* text_len 12 based fixed bin(21,0) level 3 in structure "mail_format" dcl 9-24 in procedure "mlsys_transmit_" set ref 793 793 793 793 796 796 796 796 2590 2595 2597 2597 2683 3208* 3216 text_length 000656 automatic fixed bin(21,0) dcl 9-22 set ref 3207* 3208 3208 text_lth 32 000256 automatic fixed bin(21,0) level 5 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1767* 1771* text_lth 52 based fixed bin(21,0) level 4 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 2856 2856 text_lth 4 based fixed bin(21,0) level 2 in structure "message_preformatted_body_section" dcl 5-292 in procedure "mlsys_transmit_" ref 1458 text_ptr 2 based pointer level 2 in structure "message_preformatted_body_section" dcl 5-292 in procedure "mlsys_transmit_" ref 1458 text_ptr 50 based pointer level 4 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 2856 text_ptr 30 000256 automatic pointer level 5 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1766* 1770* the_address_idx 000401 automatic fixed bin(17,0) dcl 250 set ref 465* 466* 844* 846 855 902* 1027* 1028* 2391 the_list_idx 000400 automatic fixed bin(17,0) dcl 250 set ref 462* 463 464* 835* 837 838 842 855 902* 986* 987 987* 997* 998 998* 1024* 1025 1026* 2390 to 26 000256 automatic pointer level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1746* 1748* 1748* 1777* to 42 based pointer level 3 in structure "message" dcl 5-15 in procedure "mlsys_transmit_" set ref 1897* 1898 1899 to_queue 3(03) based bit(1) level 3 packed packed unaligned dcl 142 set ref 652 721* 2050* 2124* 2184* 2270* 3032 3116* top_level 3 based bit(1) level 3 in structure "recipient" packed packed unaligned dcl 142 in procedure "mlsys_transmit_" set ref 858 937 1055 2386* 2422 top_level 3 based bit(1) level 3 in structure "other_recipient" packed packed unaligned dcl 2410 in procedure "mark_duplicate_recipients" ref 2422 top_level_info 46 based structure level 2 in structure "recipient" dcl 142 in procedure "mlsys_transmit_" top_level_info 46 based structure array level 3 in structure "recipients_list" dcl 186 in procedure "mlsys_transmit_" top_level_info 46 based structure level 2 in structure "other_recipient" dcl 252 in procedure "mlsys_transmit_" total_recipients 104 based fixed bin(17,0) level 3 dcl 13-7 set ref 3026* 3035* 3035 3036 3037 3046 3057 3067 trace 10 000236 automatic pointer level 3 in structure "local_mep" dcl 220 in procedure "mlsys_transmit_" set ref 1632* 1706* trace 10 000256 automatic pointer level 4 in structure "local_mrp" dcl 221 in procedure "mlsys_transmit_" set ref 1756* transient_error 3(07) based bit(1) level 3 packed packed unaligned dcl 142 set ref 664* 665* 693* 694* 706 708* 2032* 2106* 2241* 3088* 3104* 3108 3110* transmit_cache based structure level 1 dcl 210 set ref 1287 1288* trimmed_ename 001222 automatic varying char(33) dcl 3161 set ref 3168* 3171 3171 3171 3175* 3175 3176* 3176 3178 3180 trimmed_suffix 001234 automatic varying char(33) dcl 3161 set ref 3169* 3171 3171 3171 3175 3176 try_to_mail 000103 automatic bit(1) dcl 2636 set ref 2652* 2657 2662* 2664* type 2 based fixed bin(17,0) level 2 dcl 142 set ref 514 541 561 588 608 631 2389* 3032 uid based bit(36) array level 3 dcl 210 set ref 1318 1327 1355 1358 1363* unspec builtin function dcl 384 set ref 1288* 1322* 2550* 3209* usage 2 based fixed bin(17,0) array level 3 dcl 210 set ref 1329* 1331* 1331 1338* 1338 1341 1343 1365* 1368* 1368 use_copy_without_bcc 000330 automatic bit(1) dcl 1855 in procedure "validate_or_expand_address" set ref 1860* 1898 1899* 1904 1905 1906* 1911 1912 1918* 2326* 2388 use_copy_without_bcc 3(05) based bit(1) level 3 in structure "recipient" packed packed unaligned dcl 142 in procedure "mlsys_transmit_" set ref 514 541 561 588 608 631 656 685 2388* 3032 user_name 2 based varying char(128) level 2 dcl 2991 set ref 3038* user_privileges 000314 automatic structure level 1 dcl 226 set ref 444* 1173* users_address 001026 automatic pointer dcl 1724 in procedure "add_redistribution" set ref 1728* 1732* 1734* 1743* 1761 users_address 001010 automatic pointer dcl 1654 in procedure "complete_new_message" set ref 1660* 1664* 1666* 1680* 1697* 1705 1709 users_area based area(1024) dcl 105 ref 841 929 users_area_ptr 000102 automatic pointer dcl 106 set ref 841 929 1416* verify builtin function dcl 384 ref 1458 version 2 000256 automatic char(8) level 2 in structure "local_mrp" packed packed unaligned dcl 221 in procedure "mlsys_transmit_" set ref 1737* version based char(8) level 2 in structure "deliver_options" packed packed unaligned dcl 4-6 in procedure "mlsys_transmit_" ref 1405 version based fixed bin(17,0) level 3 in structure "NOTIFICATION_MAIL_FORMAT" dcl 115 in procedure "mlsys_transmit_" set ref 3210* version based char(8) level 3 in structure "mlsys_mailer_data" dcl 13-7 in procedure "mlsys_transmit_" set ref 3014* version 2 000236 automatic char(8) level 2 in structure "local_mep" packed packed unaligned dcl 220 in procedure "mlsys_transmit_" set ref 1630* 1703* version based char(8) level 3 in structure "recipients_info" packed packed unaligned dcl 4-49 in procedure "mlsys_transmit_" ref 1405 version based fixed bin(17,0) level 3 in structure "mail_format" dcl 9-24 in procedure "mlsys_transmit_" set ref 2548* wakeup 13 based bit(1) level 4 in structure "NOTIFICATION_MAIL_FORMAT" packed packed unaligned dcl 115 in procedure "mlsys_transmit_" set ref 3214* wakeup 13 based bit(1) level 4 in structure "mail_format" packed packed unaligned dcl 9-24 in procedure "mlsys_transmit_" set ref 2551* warning 3(08) based bit(1) level 3 packed packed unaligned dcl 142 set ref 664* 670* 693* 889 937 2012* wordno builtin function dcl 384 ref 1545 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ADROSW_MBX_ACCESS internal static bit(36) initial dcl 8-6 AOW_MBX_ACCESS internal static bit(36) initial dcl 8-6 A_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 15-33 D_MBX_ACCESS internal static bit(36) initial dcl 8-6 E_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 FOREIGN_ADDRESS internal static fixed bin(17,0) initial dcl 6-6 FORUM_ADDRESS internal static fixed bin(17,0) initial dcl 6-6 INCLUDE_DELETED internal static fixed bin(17,0) initial dcl 11-24 INVALID_ADDRESS internal static fixed bin(17,0) initial dcl 6-6 MAILBOX_ADDRESS internal static fixed bin(17,0) initial dcl 6-6 MESSAGE_ADDRESS_LIST_USER_FIELD internal static fixed bin(17,0) initial dcl 5-174 MESSAGE_BIT_STRING_BODY_SECTION internal static fixed bin(17,0) initial dcl 5-285 MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 5-318 MESSAGE_DATE_USER_FIELD internal static fixed bin(17,0) initial dcl 5-174 MESSAGE_INTEGER_USER_FIELD internal static fixed bin(17,0) initial dcl 5-174 MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 5-117 MESSAGE_REFERENCES_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 5-227 MESSAGE_REFERENCE_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 5-253 MESSAGE_TEXT_USER_FIELD internal static fixed bin(17,0) initial dcl 5-174 MESSAGE_TRACE_VERSION_2 internal static char(8) initial packed unaligned dcl 5-103 MESSAGE_USER_FIELDS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 5-158 MESSAGE_USER_FIELD_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 5-213 MESSAGE_VERSION_2 internal static char(8) initial packed unaligned dcl 5-49 M_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 NAMED_GROUP_ADDRESS internal static fixed bin(17,0) initial dcl 6-6 NOTIFY_ON_ERROR internal static fixed bin(17,0) initial dcl 4-42 N_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 N_MBX_ACCESS internal static bit(36) initial dcl 8-6 ONLY_DELETED internal static fixed bin(17,0) initial dcl 11-24 O_MBX_ACCESS internal static bit(36) initial dcl 8-6 REW_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 RE_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 RW_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 R_MBX_ACCESS internal static bit(36) initial dcl 8-6 SA_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array packed unaligned dcl 15-30 SMA_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 SM_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 S_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 S_MBX_ACCESS internal static bit(36) initial dcl 8-6 TERM_FILE_BC internal static bit(2) initial packed unaligned dcl 16-12 TERM_FILE_DELETE internal static bit(5) initial packed unaligned dcl 16-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial packed unaligned dcl 16-16 TERM_FILE_TRUNC internal static bit(1) initial packed unaligned dcl 16-11 TERM_FILE_TRUNC_BC internal static bit(2) initial packed unaligned dcl 16-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial packed unaligned dcl 16-15 USER_MAILBOX_ADDRESS internal static fixed bin(17,0) initial dcl 6-6 U_MBX_ACCESS internal static bit(36) initial dcl 8-6 W_ACCESS internal static bit(3) initial packed unaligned dcl 15-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 15-36 W_MBX_ACCESS internal static bit(36) initial dcl 8-6 address_list_n_addresses automatic fixed bin(17,0) dcl 7-16 alloc_subject_length automatic fixed bin(21,0) dcl 11-4 alloc_text_length automatic fixed bin(21,0) dcl 11-3 forum_user_trans based structure level 1 dcl 11-7 forum_user_trans_ptr automatic pointer dcl 11-5 message_address_list_user_field based structure level 1 dcl 5-190 message_bit_string_body_section_bit_string based bit packed unaligned dcl 5-307 message_body_section_parameter based structure level 1 dcl 5-313 message_body_section_parameter_ptr automatic pointer dcl 5-320 message_date_user_field based structure level 1 dcl 5-195 message_envelope_parameter_ptr automatic pointer dcl 5-81 message_integer_user_field based structure level 1 dcl 5-200 message_n_body_sections automatic fixed bin(17,0) dcl 5-55 message_n_redistributions automatic fixed bin(17,0) dcl 5-55 message_n_user_fields automatic fixed bin(17,0) dcl 5-55 message_redistribution_comment based char packed unaligned dcl 5-131 message_redistribution_parameter_ptr automatic pointer dcl 5-146 message_reference_parameter based structure level 1 dcl 5-248 message_reference_parameter_ptr automatic pointer dcl 5-255 message_reference_ptr automatic pointer dcl 5-243 message_reference_subject based char packed unaligned dcl 5-240 message_references_list based structure level 1 dcl 5-219 message_references_list_n_references automatic fixed bin(17,0) dcl 5-55 message_references_list_ptr automatic pointer dcl 5-229 message_text_field_ptr automatic pointer dcl 5-270 message_text_field_text based char packed unaligned dcl 5-268 message_text_user_field based structure level 1 dcl 5-183 message_text_user_field_text based char packed unaligned dcl 5-187 message_trace based structure level 1 dcl 5-87 message_trace_n_relays automatic fixed bin(17,0) dcl 5-55 message_trace_ptr automatic pointer dcl 5-105 message_type internal static fixed bin(17,0) initial dcl 11-22 message_user_field_parameter based structure level 1 dcl 5-208 message_user_field_parameter_ptr automatic pointer dcl 5-215 message_user_field_ptr automatic pointer dcl 5-169 message_user_fields_list based structure level 1 dcl 5-150 mf_extension_n_text_fragments automatic fixed bin(21,0) dcl 10-17 mlsys_data_$address_list_allocation external static fixed bin(17,0) dcl 3-33 mlsys_data_$domains_available external static fixed bin(1,0) dcl 3-44 mlsys_data_$forum_not_available external static fixed bin(1,0) dcl 3-44 mlsys_data_$hash_tables_segment_ptr external static pointer dcl 3-64 mlsys_data_$highest_usable_ring external static fixed bin(3,0) dcl 3-49 mlsys_data_$ism_not_available external static fixed bin(1,0) dcl 3-44 mlsys_data_$mailbox_allocation external static fixed bin(17,0) dcl 3-33 mlsys_data_$max_opening_retries external static fixed bin(17,0) dcl 3-16 mlsys_data_$message_body_sections_allocation external static fixed bin(17,0) dcl 3-33 mlsys_data_$message_redistributions_list_allocation external static fixed bin(17,0) dcl 3-33 mlsys_data_$message_references_list_allocation external static fixed bin(17,0) dcl 3-33 mlsys_data_$message_user_fields_allocation external static fixed bin(17,0) dcl 3-33 mlsys_data_$person_id external static varying char(24) dcl 3-70 mlsys_data_$project_id external static varying char(12) dcl 3-71 mlsys_data_$subsystem_ring external static fixed bin(3,0) dcl 3-49 mlsys_data_$system_directory external static char(168) packed unaligned dcl 2-7 mlsys_data_$temp_segment_list_ptr external static pointer dcl 3-54 mlsys_data_$user_is_anonymous external static bit(1) dcl 3-68 mlsys_data_$valid_segments external static bit(1) array packed unaligned dcl 3-56 recipients_info_n_lists automatic fixed bin(17,0) dcl 4-66 terminate_file_switches based structure level 1 packed packed unaligned dcl 16-4 user_trans_type internal static fixed bin(17,0) initial dcl 11-21 NAMES DECLARED BY EXPLICIT CONTEXT. COPY_LOG_OR_SAVE_MESSAGE 004427 constant label dcl 1156 ref 1112 1131 ELIMINATE_DUPLICATE_ADDRS_COMMON 003426 constant label dcl 1005 ref 991 EXPAND_LIST_ADDRESS 012565 constant label dcl 2299 ref 2284 FORUM_ENTER_CALL_COMPLETED 015241 constant label dcl 2858 ref 2853 IGNORE_NOTIFICATION 014512 constant label dcl 2686 ref 2680 INVALIDATE_CACHE_ENTRY_AND_REOPEN 005337 constant label dcl 1322 ref 1327 INVOKE_ISM_COMMON 015633 constant label dcl 3014 ref 3004 MAILBOX_ADD_CALL_COMPLETED 014354 constant label dcl 2667 ref 2648 MARK_RECIPIENT_AS_A_DUPLICATE 013367 constant label dcl 2422 ref 2441 2444 OPEN_THE_MAILBOX 005437 constant label dcl 1350 ref 1325 QUEUE_THE_FORUM 011617 constant label dcl 2121 ref 2105 QUEUE_THE_MAILBOX 011215 constant label dcl 2047 ref 2031 QUEUE_THE_MAILING_LIST 012426 constant label dcl 2260 ref 2239 RETURN_FROM_COPY_LOG_OR_SAVE_MESSAGE 005000 constant label dcl 1229 ref 1191 1213 1217 1222 RETURN_FROM_EXPAND_LIST_ADDRESS 013037 constant label dcl 2341 ref 2231 2243 2250 2255 2281 2316 RETURN_FROM_LOOKUP_OR_OPEN_MAILBOX 005602 constant label dcl 1374 ref 1387 RETURN_FROM_PREPARE_MESSAGE_FOR_FORUM 015125 constant label dcl 2818 ref 2831 RETURN_FROM_PREPARE_MESSAGE_FOR_MAILBOX 014040 constant label dcl 2559 ref 2572 RETURN_FROM_PREPARE_MESSAGE_FOR_NETWORK 015571 constant label dcl 2960 ref 2973 RETURN_FROM_TRANSMIT 003210 constant label dcl 953 ref 829 RETURN_FROM_TRANSMIT_WITH_FATAL_ERROR 003233 constant label dcl 970 ref 447 474 2010 2364 2375 SETUP_RESULTS_LISTS 002521 constant label dcl 822 ref 502 641 768 TRANSMIT_MESSAGE 000565 constant label dcl 441 ref 411 TREAT_TRANSIENT_LOCAL_ERROR_AS_FATAL 002257 constant label dcl 739 ref 709 716 719 UNABLE_TO_GET_ISM_TEMP_SPACE 002331 constant label dcl 758 ref 776 USE_VIRGIN_TEMP_SEGMENT 013715 constant label dcl 2527 in procedure "prepare_message_for_mailbox" ref 2514 2518 USE_VIRGIN_TEMP_SEGMENT 015461 constant label dcl 2933 in procedure "prepare_message_for_network" ref 2918 2924 USE_VIRGIN_TEMP_SEGMENT 015015 constant label dcl 2794 in procedure "prepare_message_for_forum" ref 2779 2785 VALIDATE_OR_EXPAND_ADDRESS 000000 constant label array(0:9) dcl 1929 ref 1923 abort_prepare_message_for_forum 015126 constant entry internal dcl 2825 ref 2788 2796 2801 2804 2812 abort_prepare_message_for_mailbox 014041 constant entry internal dcl 2566 ref 2521 2529 2533 2536 2542 abort_prepare_message_for_network 015572 constant entry internal dcl 2967 ref 2927 2943 2946 2954 add_last_delivery_fields 010055 constant entry internal dcl 1816 ref 1641 add_message_to_forum 015135 constant entry internal dcl 2839 ref 685 688 add_message_to_mailbox 014205 constant entry internal dcl 2618 ref 656 659 1225 add_recipient 013134 constant entry internal dcl 2352 ref 1878 1929 1937 2064 2141 2197 2288 2335 add_redistribution 007510 constant entry internal dcl 1721 ref 435 add_suffix 016373 constant entry internal dcl 3154 ref 1103 1143 cleanup_message_delivery 006224 constant entry internal dcl 1529 ref 402 429 953 970 1011 1091 1167 1229 1251 1278 complete_new_message 007132 constant entry internal dcl 1651 ref 406 1180 copy_message 004101 constant entry external dcl 1099 copy_ptr 016672 constant entry internal dcl 1-10 ref 393 420 1159 delete_last_delivery_fields 010023 constant entry internal dcl 1789 ref 1182 deliver_by_ism 015602 constant entry internal dcl 2999 ref 783 785 deliver_message 000262 constant entry external dcl 389 eliminate_duplicate_addrs 003262 constant entry external dcl 983 eliminate_duplicate_addrs_write 003345 constant entry external dcl 994 format_the_message 014047 constant entry internal dcl 2580 ref 2498 2517 2532 initialize_cache 005212 constant entry external dcl 1284 initialize_message_delivery 006131 constant entry internal dcl 1494 ref 398 425 1008 1165 1248 initialize_notification 016607 constant entry internal dcl 3204 ref 2679 2712 invoke_ism 015600 constant entry internal dcl 2981 is_empty_list 016563 constant entry internal dcl 3192 ref 408 463 528 575 618 837 1025 1674 1684 1897 1904 2324 log_message 004177 constant entry external dcl 1117 lookup_or_open_mailbox 005233 constant entry internal dcl 1296 ref 1197 1206 mark_duplicate_recipients 013327 constant entry internal dcl 2407 ref 490 1043 mlsys_transmit_ 000247 constant entry external dcl 55 prepare_message_for_forum 014606 constant entry internal dcl 2731 ref 557 583 prepare_message_for_mailbox 013477 constant entry internal dcl 2459 ref 509 536 1190 prepare_message_for_network 015252 constant entry internal dcl 2870 ref 604 626 queue_via_ism 015616 constant entry internal dcl 3007 ref 793 796 803 805 811 814 redistribute_message 000424 constant entry external dcl 416 restore_message_state 006731 constant entry internal dcl 1614 ref 1589 return_from_lookup 005603 constant entry internal dcl 1381 ref 1309 1335 1353 save_message 004272 constant entry external dcl 1136 save_message_state 006652 constant entry internal dcl 1595 ref 1499 send_test_message 014514 constant entry internal dcl 2699 ref 2002 validate_address 005016 constant entry external dcl 1241 ref 1663 1688 1731 validate_or_expand_address 010102 constant entry internal dcl 1839 ref 466 1028 1260 2326 verify_recipients_info_and_deliver_options 005611 constant entry internal dcl 1395 ref 395 422 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 22174 22622 17466 22204 Length 24062 17466 426 1224 2505 4 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mlsys_transmit_ 1010 external procedure is an external procedure. on unit on line 400 72 on unit on unit on line 427 72 on unit on unit on line 827 64 on unit on unit on line 1011 64 on unit on unit on line 1167 64 on unit on unit on line 1251 64 on unit lookup_or_open_mailbox internal procedure shares stack frame of external procedure mlsys_transmit_. return_from_lookup internal procedure shares stack frame of external procedure mlsys_transmit_. verify_recipients_info_and_deliver_options internal procedure shares stack frame of external procedure mlsys_transmit_. initialize_message_delivery internal procedure shares stack frame of external procedure mlsys_transmit_. cleanup_message_delivery 130 internal procedure is called by several nonquick procedures. save_message_state internal procedure shares stack frame of external procedure mlsys_transmit_. restore_message_state internal procedure shares stack frame of internal procedure cleanup_message_delivery. complete_new_message internal procedure shares stack frame of external procedure mlsys_transmit_. add_redistribution internal procedure shares stack frame of external procedure mlsys_transmit_. delete_last_delivery_fields internal procedure shares stack frame of external procedure mlsys_transmit_. add_last_delivery_fields internal procedure shares stack frame of internal procedure cleanup_message_delivery. validate_or_expand_address 370 internal procedure enables or reverts conditions. on unit on line 1887 72 on unit on unit on line 2209 84 on unit on unit on line 2302 84 on unit add_recipient internal procedure shares stack frame of internal procedure validate_or_expand_address. mark_duplicate_recipients internal procedure shares stack frame of external procedure mlsys_transmit_. prepare_message_for_mailbox internal procedure shares stack frame of external procedure mlsys_transmit_. abort_prepare_message_for_mailbox internal procedure shares stack frame of external procedure mlsys_transmit_. format_the_message internal procedure shares stack frame of external procedure mlsys_transmit_. add_message_to_mailbox 97 internal procedure enables or reverts conditions. on unit on line 2645 64 on unit on unit on line 2680 64 on unit send_test_message internal procedure shares stack frame of internal procedure validate_or_expand_address. prepare_message_for_forum internal procedure shares stack frame of external procedure mlsys_transmit_. abort_prepare_message_for_forum internal procedure shares stack frame of external procedure mlsys_transmit_. add_message_to_forum 108 internal procedure enables or reverts conditions. on unit on line 2850 64 on unit prepare_message_for_network internal procedure shares stack frame of external procedure mlsys_transmit_. abort_prepare_message_for_network internal procedure shares stack frame of external procedure mlsys_transmit_. invoke_ism internal procedure shares stack frame of external procedure mlsys_transmit_. add_suffix internal procedure shares stack frame of external procedure mlsys_transmit_. is_empty_list 64 internal procedure is called by several nonquick procedures. initialize_notification 70 internal procedure is called by several nonquick procedures. copy_ptr internal procedure shares stack frame of external procedure mlsys_transmit_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 notification_initialized_sw mlsys_transmit_ 000012 NOTIFICATION_MAIL_FORMAT_PTR mlsys_transmit_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME add_message_to_forum 000100 code add_message_to_forum add_message_to_mailbox 000100 mbx_add_options add_message_to_mailbox 000101 code add_message_to_mailbox 000102 retry_count add_message_to_mailbox 000103 try_to_mail add_message_to_mailbox cleanup_message_delivery 000100 idx cleanup_message_delivery mlsys_transmit_ 000100 code mlsys_transmit_ 000102 users_area_ptr mlsys_transmit_ 000104 mailbox_dirname mlsys_transmit_ 000156 mailbox_ename mlsys_transmit_ 000166 create_if_not_found mlsys_transmit_ 000167 added_from_field mlsys_transmit_ 000170 added_reply_to_field mlsys_transmit_ 000171 added_envelope mlsys_transmit_ 000172 added_redistribution mlsys_transmit_ 000173 deleted_last_delivery_fields mlsys_transmit_ 000174 last_date_time_delivered mlsys_transmit_ 000176 last_delivered_by mlsys_transmit_ 000200 saved_message_data mlsys_transmit_ 000212 recipient_ptr mlsys_transmit_ 000214 recipients_list_ptr mlsys_transmit_ 000216 ism_recipient_idxs_ptr mlsys_transmit_ 000220 initial_stack_extension mlsys_transmit_ 000222 stack_truncation_ptr mlsys_transmit_ 000224 n_recipients_allocated mlsys_transmit_ 000225 n_recipients mlsys_transmit_ 000226 n_unique_recipients mlsys_transmit_ 000227 n_failed_recipients mlsys_transmit_ 000230 recipient_idx mlsys_transmit_ 000231 recipient_size mlsys_transmit_ 000232 current_mailing_list_data_ptr mlsys_transmit_ 000234 mailing_list_data_ptr mlsys_transmit_ 000236 local_mep mlsys_transmit_ 000256 local_mrp mlsys_transmit_ 000312 result_ptr mlsys_transmit_ 000314 user_privileges mlsys_transmit_ 000316 date_time_message_created mlsys_transmit_ 000320 suppress_bcc_field_when_necessary mlsys_transmit_ 000321 make_copies_with_bcc mlsys_transmit_ 000322 make_copies_without_bcc mlsys_transmit_ 000323 need_mailbox_message mlsys_transmit_ 000324 need_forum_message mlsys_transmit_ 000325 need_network_message mlsys_transmit_ 000326 never_transmitted mlsys_transmit_ 000327 have_result_code mlsys_transmit_ 000330 part_of_this_address mlsys_transmit_ 000331 partially_delivered mlsys_transmit_ 000332 partially_queued mlsys_transmit_ 000333 delivery_aborted mlsys_transmit_ 000334 message_buffers mlsys_transmit_ 000350 n_message_buffers_used mlsys_transmit_ 000352 last_temp_segment_ptr mlsys_transmit_ 000354 last_temp_segment_used mlsys_transmit_ 000356 mailbox_message_with_bcc_ptr mlsys_transmit_ 000360 mailbox_message_without_bcc_ptr mlsys_transmit_ 000362 forum_message_with_bcc_ptr mlsys_transmit_ 000364 forum_message_without_bcc_ptr mlsys_transmit_ 000366 network_message_with_bcc_ptr mlsys_transmit_ 000370 network_message_without_bcc_ptr mlsys_transmit_ 000372 mailbox_message_with_bcc_lth mlsys_transmit_ 000373 mailbox_message_without_bcc_lth mlsys_transmit_ 000374 forum_message_with_bcc_lth mlsys_transmit_ 000375 forum_message_without_bcc_lth mlsys_transmit_ 000376 network_message_with_bcc_lth mlsys_transmit_ 000377 network_message_without_bcc_lth mlsys_transmit_ 000400 the_list_idx mlsys_transmit_ 000401 the_address_idx mlsys_transmit_ 000402 idx mlsys_transmit_ 000404 other_recipient_ptr mlsys_transmit_ 000406 delete_this_address mlsys_transmit_ 000407 continue mlsys_transmit_ 000410 first_recipient_idx mlsys_transmit_ 000411 other_recipient_idx mlsys_transmit_ 000412 mailbox_idx mlsys_transmit_ 000413 target_mailbox_idx mlsys_transmit_ 000414 forum_idx mlsys_transmit_ 000415 mailbox_mode mlsys_transmit_ 000416 address_pathname mlsys_transmit_ 000500 address_dirname mlsys_transmit_ 000552 address_ename mlsys_transmit_ 000562 address_component mlsys_transmit_ 000572 address_route_ptr mlsys_transmit_ 000574 local_do mlsys_transmit_ 000602 create_the_mailbox mlsys_transmit_ 000606 preserve_message_type mlsys_transmit_ 000607 preserve_access_class mlsys_transmit_ 000610 created mlsys_transmit_ 000611 no_mailbox_code mlsys_transmit_ 000612 mailbox_created_code mlsys_transmit_ 000630 deliver_options_ptr mlsys_transmit_ 000632 recipients_info_ptr mlsys_transmit_ 000634 recipients_result_list_ptr mlsys_transmit_ 000636 expanded_recipients_result_list_ptr mlsys_transmit_ 000640 recipients_result_list_n_addresses mlsys_transmit_ 000641 expanded_recipients_result_list_n_entries mlsys_transmit_ 000642 message_ptr mlsys_transmit_ 000644 message_envelope_ptr mlsys_transmit_ 000646 message_redistribution_ptr mlsys_transmit_ 000650 message_body_section_ptr mlsys_transmit_ 000652 address_list_ptr mlsys_transmit_ 000654 mail_format_ptr mlsys_transmit_ 000656 text_length mlsys_transmit_ 000660 mf_extension_ptr mlsys_transmit_ 000662 forum_flags_word mlsys_transmit_ 000663 mlsys_mailer_data_n_recipients mlsys_transmit_ 000664 mlsys_mailer_data_ptr mlsys_transmit_ 000732 mailbox_uid lookup_or_open_mailbox 000733 cached_uid lookup_or_open_mailbox 000734 code lookup_or_open_mailbox 000735 mailbox_idx lookup_or_open_mailbox 000736 lru_usage lookup_or_open_mailbox 000737 lru_idx lookup_or_open_mailbox 000740 other_cache_idx lookup_or_open_mailbox 000741 idx lookup_or_open_mailbox 000756 ignore verify_recipients_info_and_deliver_options 000757 is_empty_message verify_recipients_info_and_deliver_options 000760 idx verify_recipients_info_and_deliver_options 001010 users_address complete_new_message 001012 all_invalid complete_new_message 001013 code complete_new_message 001014 address_type complete_new_message 001015 idx complete_new_message 001026 users_address add_redistribution 001030 address_type add_redistribution 001031 idx add_redistribution 001050 other_recipient_ptr mark_duplicate_recipients 001052 recipient_idx mark_duplicate_recipients 001053 other_recipient_idx mark_duplicate_recipients 001054 idx mark_duplicate_recipients 001066 original_mf_ptr prepare_message_for_mailbox 001070 original_mf_extension_ptr prepare_message_for_mailbox 001072 stack_truncation_ptr prepare_message_for_mailbox 001074 code prepare_message_for_mailbox 001075 mailbox_message_lth prepare_message_for_mailbox 001076 buffer_idx prepare_message_for_mailbox 001077 formatting_mode prepare_message_for_mailbox 001122 forum_message_ptr prepare_message_for_forum 001124 stack_truncation_ptr prepare_message_for_forum 001126 code prepare_message_for_forum 001127 forum_message_lth prepare_message_for_forum 001130 forum_message_n_words prepare_message_for_forum 001131 buffer_idx prepare_message_for_forum 001146 network_message_ptr prepare_message_for_network 001150 stack_truncation_ptr prepare_message_for_network 001152 code prepare_message_for_network 001153 network_message_lth prepare_message_for_network 001154 network_message_n_words prepare_message_for_network 001155 buffer_idx prepare_message_for_network 001172 ism_recipient_ptr invoke_ism 001174 queued_only invoke_ism 001175 saved_code invoke_ism 001176 recipient_type invoke_ism 001177 ism_recipient_idx invoke_ism 001200 recipient_idx invoke_ism 001222 trimmed_ename add_suffix 001234 trimmed_suffix add_suffix 001254 return_value copy_ptr validate_or_expand_address 000100 local_mld validate_or_expand_address 000104 address_ptr validate_or_expand_address 000106 list_expansion_ptr validate_or_expand_address 000110 new_recipients_list_ptr validate_or_expand_address 000112 address_pathname validate_or_expand_address 000174 address_dirname validate_or_expand_address 000246 address_string validate_or_expand_address 000307 address_ename validate_or_expand_address 000317 address_component validate_or_expand_address 000327 mail_table_expansion validate_or_expand_address 000330 use_copy_without_bcc validate_or_expand_address 000331 code validate_or_expand_address 000332 address_type validate_or_expand_address 000333 n_recipients_before_expansion validate_or_expand_address 000334 idx validate_or_expand_address 000366 mbx_add_options send_test_message THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_l_a r_e_as r_ne_as r_ge_a alloc_char_temp call_ent_var_desc call_ext_in call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 mdfx1 enable_op shorten_stack ext_entry ext_entry_desc int_entry set_chars_eis op_alloc_ clock_mac ix_rev_chars THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. aim_check_$equal aim_check_$greater_or_equal cu_$grow_stack_frame cu_$shrink_stack_frame forum_$close_forum forum_$enter_trans forum_$open_forum forum_$real_forum_limits get_authorization_ get_privileges_ get_ring_ get_system_free_area_ initiate_file_$component mailbox_$close mailbox_$get_mode_file mailbox_$get_mode_index mailbox_$get_uid_file mailbox_$get_uid_index mailbox_$open mailbox_$wakeup_aim_add_index mlsys_address_list_mgr_$add_address mlsys_address_list_mgr_$create_read_only_address_list mlsys_address_list_mgr_$delete_address mlsys_address_list_mgr_$free_address_list mlsys_address_list_mgr_$increment_reference_count mlsys_address_list_mgr_$merge_address_lists mlsys_address_list_mgr_$verify_address_list mlsys_address_list_mgr_$verify_writeable_address_list mlsys_address_mgr_$check_if_actually_local mlsys_address_mgr_$compare_addresses mlsys_address_mgr_$decrement_reference_count mlsys_address_mgr_$decrement_reference_count_no_free mlsys_address_mgr_$expand_list_address mlsys_address_mgr_$free_address mlsys_address_mgr_$get_address_pathname mlsys_address_mgr_$get_address_string mlsys_address_mgr_$get_address_type mlsys_address_mgr_$get_mail_table_address mlsys_address_mgr_$increment_reference_count mlsys_address_mgr_$verify_address mlsys_address_route_mgr_$compute_route mlsys_address_route_mgr_$free_address_route mlsys_format_$format_address_for_ism mlsys_format_$format_canon_redistributed_msg mlsys_format_$format_message_for_forum mlsys_format_$format_message_for_mailbox mlsys_format_$format_message_for_rfc822_network mlsys_mailbox_mgr_$get_message_mf_if_canonical mlsys_mailbox_utils_$create_logbox mlsys_mailbox_utils_$create_savebox mlsys_mailer_ mlsys_message_id_mgr_$encode_local_id mlsys_message_mgr_$add_redistribution mlsys_message_mgr_$delete_redistribution mlsys_message_mgr_$replace_message_envelope mlsys_message_mgr_$verify_im_message mlsys_message_mgr_$verify_message mlsys_message_mgr_$verify_new_message mlsys_misc_utils_$free_delivery_results mlsys_psp_$forum_not_available mlsys_psp_$ism_not_available mlsys_storage_mgr_$get_temp_segment mlsys_storage_mgr_$release_temp_segment pathname_ terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$ai_restricted error_table_$bad_subr_arg error_table_$bigarg error_table_$entlong error_table_$lock_wait_time_exceeded error_table_$logical_volume_not_connected error_table_$logical_volume_not_defined error_table_$messages_deferred error_table_$messages_off error_table_$moderr error_table_$no_append error_table_$no_component error_table_$no_info error_table_$noentry error_table_$notalloc error_table_$rqover error_table_$smallarg error_table_$unimplemented_version error_table_$wakeup_denied forum_error_table_$meeting_bloat forum_error_table_$not_in_search_list forum_error_table_$read_only forum_error_table_$rqo mlsys_data_$lowest_forum_ring mlsys_data_$max_lock_wait_retries mlsys_data_$subsystem_area_ptr mlsys_data_$transmit_cache_ptr mlsys_data_$user_default_mailbox_address mlsys_data_$user_id mlsys_data_$user_logbox_address mlsys_data_$user_mail_table_address mlsys_et_$address_pathname_too_long_to_q mlsys_et_$cant_compute_route mlsys_et_$cant_queue_mls_in_archive mlsys_et_$duplicate_address mlsys_et_$empty_mailing_list mlsys_et_$empty_message mlsys_et_$errors_in_list_address mlsys_et_$foreign_address_too_long mlsys_et_$forum_not_available mlsys_et_$invalid_address mlsys_et_$ism_not_available mlsys_et_$list_address_is_all_duplicates mlsys_et_$logbox_created mlsys_et_$mailbox_full mlsys_et_$message_delivered mlsys_et_$message_not_sent mlsys_et_$message_partially_sent mlsys_et_$message_queued mlsys_et_$message_queued_and_delivered mlsys_et_$message_too_large mlsys_et_$no_a_permission mlsys_et_$no_forum_this_ring mlsys_et_$no_logbox mlsys_et_$no_mailbox mlsys_et_$no_mailing_list mlsys_et_$no_recipients mlsys_et_$no_savebox mlsys_et_$rejected_by_foreign_system mlsys_et_$route_out_of_service mlsys_et_$savebox_created mlsys_et_$too_many_recipients mlsys_et_$unable_to_queue_mail mlsys_et_$unknown_delivery_mode mlsys_et_$unknown_queued_notify_mode mlsys_et_$unknown_queueing_mode sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 55 000246 58 000254 389 000255 392 000276 393 000317 395 000330 396 000336 398 000340 400 000344 402 000360 403 000365 404 000400 406 000401 408 000402 411 000416 416 000417 419 000446 420 000471 422 000502 423 000510 425 000512 427 000516 429 000532 430 000537 431 000552 433 000553 435 000563 437 000564 441 000565 444 000613 445 000624 446 000627 447 000632 454 000633 455 000635 457 000636 459 000641 462 000643 463 000653 464 000670 465 000675 466 000705 468 000735 470 000737 472 000741 473 000743 474 000746 477 000747 478 000760 481 000777 482 001011 483 001012 490 001024 492 001025 494 001027 495 001037 496 001043 497 001046 498 001047 500 001053 502 001055 507 001063 509 001067 510 001073 512 001075 513 001105 514 001111 516 001122 517 001123 518 001125 519 001127 520 001131 521 001143 524 001145 528 001147 531 001167 532 001171 533 001173 536 001174 538 001200 539 001202 540 001211 541 001215 543 001226 544 001227 545 001231 546 001233 547 001235 548 001247 551 001251 555 001253 557 001257 558 001263 559 001265 560 001275 561 001301 563 001312 564 001313 565 001315 566 001317 567 001321 568 001333 571 001335 575 001337 578 001357 579 001361 580 001363 583 001364 585 001370 586 001372 587 001401 588 001405 590 001416 591 001417 592 001421 593 001423 594 001425 595 001437 598 001441 602 001443 604 001447 605 001453 606 001455 607 001465 608 001471 610 001502 611 001503 612 001505 614 001507 618 001511 621 001531 622 001533 623 001535 626 001536 628 001542 629 001544 630 001553 631 001557 633 001570 634 001571 635 001573 637 001575 641 001577 644 001605 649 001606 650 001615 652 001621 654 001624 656 001626 659 001652 661 001672 664 001701 665 001707 670 001725 677 001745 678 001747 681 001750 683 001751 685 001753 688 001773 690 002007 693 002016 694 002024 700 002040 701 002042 706 002043 708 002046 709 002050 712 002062 714 002066 716 002117 717 002123 718 002146 719 002167 721 002174 722 002176 724 002210 726 002220 728 002230 730 002240 732 002250 734 002255 735 002256 739 002257 741 002262 745 002263 747 002271 752 002273 753 002275 756 002316 757 002327 758 002331 760 002341 761 002345 763 002352 764 002354 765 002356 767 002357 768 002361 772 002362 775 002402 776 002413 782 002415 783 002417 785 002425 792 002433 793 002435 796 002451 802 002465 803 002467 805 002475 810 002503 811 002505 814 002513 822 002521 824 002524 825 002526 827 002530 829 002544 833 002547 835 002550 837 002561 838 002576 840 002603 841 002605 842 002616 844 002622 846 002633 847 002637 848 002650 849 002651 852 002652 853 002663 855 002667 856 002675 858 002677 862 002705 863 002710 865 002720 867 002722 870 002723 871 002725 872 002733 876 002734 878 002742 879 002744 880 002746 881 002753 882 002757 884 002764 886 002774 888 003002 889 003004 891 003013 893 003014 896 003023 899 003027 900 003030 901 003033 902 003037 906 003050 908 003051 911 003061 913 003071 914 003077 918 003102 919 003104 921 003106 927 003110 929 003112 930 003123 932 003125 934 003126 935 003135 937 003141 939 003151 940 003152 941 003157 942 003162 943 003166 944 003171 945 003177 947 003206 953 003210 956 003214 959 003221 962 003227 964 003232 970 003233 972 003237 974 003255 983 003256 986 003272 987 003303 989 003340 991 003342 994 003343 997 003355 998 003367 1002 003424 1005 003426 1008 003430 1009 003434 1011 003436 1013 003460 1014 003462 1015 003464 1016 003466 1018 003467 1024 003470 1025 003501 1026 003525 1027 003541 1028 003551 1030 003577 1032 003601 1034 003603 1035 003614 1038 003633 1039 003645 1040 003646 1043 003660 1051 003661 1053 003667 1055 003673 1062 003727 1063 003730 1064 003741 1065 003746 1068 003760 1069 003763 1071 003767 1072 003771 1073 003772 1075 004005 1076 004011 1079 004025 1080 004026 1081 004030 1084 004060 1086 004063 1091 004066 1093 004072 1095 004073 1099 004074 1102 004124 1103 004132 1104 004161 1106 004163 1107 004165 1109 004166 1110 004167 1112 004172 1117 004173 1120 004211 1123 004246 1124 004247 1126 004250 1127 004253 1128 004260 1129 004262 1131 004264 1136 004265 1139 004317 1140 004325 1142 004356 1143 004362 1144 004407 1146 004411 1147 004412 1149 004413 1150 004416 1151 004423 1152 004425 1156 004427 1159 004447 1161 004460 1162 004462 1163 004464 1165 004466 1167 004472 1169 004514 1173 004545 1174 004556 1176 004562 1177 004572 1178 004573 1180 004603 1182 004610 1184 004611 1187 004622 1188 004625 1190 004627 1191 004633 1193 004635 1195 004637 1197 004640 1199 004643 1201 004651 1203 004674 1204 004714 1205 004716 1206 004720 1210 004723 1211 004725 1213 004732 1216 004733 1217 004746 1220 004750 1221 004754 1222 004757 1225 004760 1229 005000 1232 005004 1235 005012 1237 005013 1241 005014 1244 005026 1246 005045 1248 005047 1249 005053 1251 005055 1253 005077 1254 005101 1255 005103 1256 005105 1258 005106 1260 005107 1262 005134 1264 005142 1265 005144 1266 005146 1268 005154 1269 005155 1271 005156 1272 005157 1273 005167 1274 005174 1275 005202 1278 005204 1280 005210 1284 005211 1287 005217 1288 005227 1290 005232 1296 005233 1308 005251 1309 005300 1314 005304 1316 005306 1318 005313 1320 005321 1321 005335 1322 005337 1324 005347 1325 005351 1327 005352 1329 005360 1330 005363 1331 005371 1333 005400 1334 005402 1335 005412 1338 005415 1341 005425 1342 005431 1343 005433 1345 005435 1350 005437 1352 005466 1353 005474 1355 005500 1357 005507 1358 005522 1363 005544 1364 005551 1365 005554 1367 005556 1368 005565 1369 005574 1371 005576 1372 005601 1374 005602 1381 005603 1386 005605 1387 005610 1395 005611 1402 005613 1403 005616 1405 005621 1407 005631 1408 005634 1411 005635 1412 005641 1413 005644 1416 005645 1418 005647 1419 005651 1420 005654 1423 005655 1424 005656 1425 005670 1429 005714 1430 005716 1432 005722 1434 005730 1435 005733 1438 005734 1439 005741 1440 005744 1443 005745 1445 005752 1446 005755 1449 005756 1450 005761 1451 005764 1454 005765 1455 005770 1456 005772 1457 006005 1458 006011 1460 006032 1462 006035 1463 006037 1464 006041 1465 006045 1469 006046 1471 006064 1472 006070 1475 006071 1476 006074 1477 006076 1478 006100 1481 006102 1483 006106 1486 006126 1488 006130 1494 006131 1499 006133 1501 006134 1502 006140 1503 006154 1504 006156 1505 006163 1506 006166 1507 006167 1508 006170 1510 006172 1512 006174 1515 006177 1516 006200 1518 006216 1519 006217 1521 006220 1523 006222 1529 006223 1534 006231 1536 006244 1538 006261 1540 006263 1541 006277 1543 006301 1544 006303 1545 006311 1549 006347 1550 006353 1552 006355 1554 006357 1557 006406 1559 006411 1562 006437 1564 006442 1565 006445 1567 006455 1569 006510 1571 006516 1573 006520 1574 006523 1575 006533 1576 006541 1578 006557 1580 006575 1582 006613 1583 006617 1584 006621 1587 006645 1589 006650 1591 006651 1595 006652 1598 006653 1600 006660 1602 006723 1604 006727 1606 006730 1614 006731 1617 006732 1619 006740 1621 007003 1623 007024 1625 007026 1627 007047 1629 007051 1630 007053 1631 007055 1632 007060 1633 007065 1635 007103 1637 007105 1639 007124 1641 007126 1644 007131 1651 007132 1659 007133 1660 007147 1663 007157 1664 007174 1666 007203 1669 007207 1672 007212 1674 007222 1675 007236 1676 007243 1678 007257 1680 007267 1681 007306 1682 007310 1684 007311 1686 007325 1687 007327 1688 007343 1689 007362 1690 007365 1691 007367 1692 007371 1693 007376 1695 007412 1697 007422 1699 007441 1703 007443 1704 007445 1705 007447 1706 007451 1707 007453 1708 007455 1709 007457 1711 007465 1712 007467 1713 007505 1715 007507 1721 007510 1727 007511 1728 007525 1731 007535 1732 007552 1734 007561 1737 007565 1739 007567 1740 007571 1742 007602 1743 007616 1746 007634 1747 007650 1748 007661 1750 007705 1752 007707 1754 007711 1756 007713 1758 007714 1759 007716 1761 007720 1763 007727 1765 007731 1766 007740 1767 007742 1768 007744 1770 007745 1771 007747 1773 007750 1775 007752 1776 007774 1777 010006 1779 010020 1781 010022 1789 010023 1792 010024 1795 010032 1797 010036 1800 010040 1801 010043 1803 010046 1805 010050 1806 010052 1808 010054 1816 010055 1819 010056 1822 010065 1824 010071 1827 010073 1828 010075 1830 010077 1832 010100 1839 010101 1860 010107 1861 010110 1867 010111 1869 010120 1871 010135 1872 010140 1873 010154 1874 010156 1875 010172 1876 010174 1878 010175 1879 010206 1880 010212 1881 010214 1883 010215 1885 010216 1887 010222 1889 010236 1891 010256 1896 010257 1897 010267 1898 010304 1899 010322 1902 010351 1904 010353 1905 010377 1906 010414 1909 010443 1911 010445 1912 010452 1913 010455 1915 010456 1918 010464 1923 010467 1929 010471 1931 010473 1932 010477 1933 010502 1937 010503 1943 010505 1947 010523 1950 010551 1956 010602 1959 010637 1961 010643 1962 010671 1963 010677 1967 010707 1968 010712 1969 010714 1970 010715 1974 010722 1975 010726 1977 010727 1980 010730 1981 010756 1982 010764 1984 010770 1986 010772 1988 011006 1990 011013 1991 011016 1992 011021 1993 011032 1994 011034 1996 011035 2002 011045 2003 011055 2006 011064 2007 011067 2009 011072 2010 011074 2012 011077 2016 011115 2017 011120 2019 011122 2020 011125 2021 011136 2022 011140 2023 011141 2026 011143 2028 011144 2031 011150 2032 011155 2033 011160 2034 011162 2038 011163 2039 011167 2042 011170 2044 011171 2045 011200 2046 011212 2047 011215 2049 011240 2050 011262 2053 011272 2054 011274 2058 011277 2060 011305 2064 011306 2066 011310 2068 011314 2069 011326 2070 011332 2072 011352 2073 011356 2076 011357 2078 011414 2079 011420 2080 011424 2081 011427 2084 011430 2086 011456 2088 011460 2090 011513 2092 011517 2093 011522 2094 011525 2095 011536 2096 011540 2098 011541 2100 011544 2102 011545 2105 011552 2106 011557 2107 011562 2108 011564 2112 011565 2113 011571 2116 011572 2118 011573 2119 011602 2120 011614 2121 011617 2123 011642 2124 011664 2127 011674 2128 011676 2132 011701 2134 011707 2141 011710 2143 011712 2145 011716 2146 011730 2147 011734 2148 011737 2151 011740 2153 011743 2155 011756 2157 011760 2159 012001 2161 012003 2163 012035 2164 012037 2165 012043 2167 012044 2171 012045 2172 012051 2174 012054 2178 012055 2179 012061 2182 012062 2184 012076 2185 012110 2187 012115 2192 012116 2197 012117 2199 012121 2200 012125 2202 012127 2205 012130 2206 012132 2207 012133 2209 012135 2211 012151 2212 012204 2214 012225 2217 012226 2220 012260 2222 012321 2224 012331 2226 012333 2228 012343 2229 012347 2230 012351 2231 012354 2233 012355 2234 012361 2236 012362 2239 012366 2241 012376 2242 012401 2243 012403 2248 012404 2249 012410 2250 012411 2255 012412 2258 012416 2260 012426 2262 012440 2263 012444 2264 012447 2265 012450 2266 012454 2267 012477 2268 012521 2269 012526 2270 012530 2271 012532 2273 012533 2274 012535 2276 012540 2278 012541 2279 012545 2281 012550 2284 012551 2288 012552 2290 012554 2291 012560 2293 012562 2294 012564 2299 012565 2302 012567 2304 012603 2305 012636 2307 012655 2309 012676 2311 012677 2313 012715 2314 012717 2315 012723 2316 012724 2319 012725 2320 012730 2322 012733 2324 012735 2325 012751 2326 012761 2328 013005 2331 013007 2334 013022 2335 013025 2336 013027 2337 013031 2338 013035 2341 013037 2343 013055 2345 013075 2346 013130 2348 013133 2352 013134 2358 013136 2361 013153 2362 013164 2363 013166 2364 013170 2366 013173 2367 013203 2369 013214 2370 013216 2371 013221 2372 013225 2374 013226 2375 013231 2378 013234 2379 013236 2381 013243 2382 013247 2385 013262 2386 013265 2387 013274 2388 013303 2389 013310 2390 013313 2391 013315 2392 013317 2393 013320 2394 013322 2395 013324 2396 013325 2398 013326 2407 013327 2415 013330 2417 013337 2419 013343 2420 013357 2421 013363 2422 013367 2425 013377 2427 013407 2429 013420 2430 013422 2431 013425 2432 013427 2436 013430 2437 013432 2439 013434 2441 013435 2444 013441 2449 013472 2450 013474 2452 013476 2459 013477 2473 013501 2475 013510 2477 013513 2478 013517 2480 013523 2481 013531 2483 013546 2486 013555 2487 013560 2488 013562 2489 013563 2494 013565 2496 013602 2498 013605 2500 013611 2501 013613 2503 013630 2504 013642 2507 013643 2509 013646 2514 013662 2516 013673 2517 013700 2518 013705 2521 013712 2522 013714 2527 013715 2529 013726 2530 013732 2531 013733 2532 013737 2533 013746 2536 013762 2539 013764 2540 013775 2542 013776 2547 014000 2548 014004 2549 014007 2550 014013 2551 014016 2552 014024 2553 014030 2555 014032 2556 014034 2557 014037 2559 014040 2566 014041 2571 014043 2572 014046 2580 014047 2585 014051 2589 014077 2590 014101 2593 014115 2594 014117 2595 014123 2596 014127 2597 014132 2598 014137 2599 014141 2600 014147 2601 014150 2602 014151 2603 014154 2605 014155 2610 014203 2618 014204 2638 014212 2639 014213 2640 014223 2642 014232 2645 014234 2647 014250 2648 014253 2651 014256 2652 014257 2654 014261 2657 014303 2658 014306 2660 014340 2661 014344 2662 014345 2663 014351 2664 014352 2665 014353 2667 014354 2670 014355 2672 014366 2673 014374 2674 014400 2675 014404 2677 014405 2679 014415 2680 014424 2681 014443 2682 014444 2683 014446 2686 014512 2690 014513 2699 014514 2712 014516 2714 014526 2715 014527 2716 014531 2718 014533 2720 014542 2723 014576 2725 014605 2731 014606 2746 014610 2748 014617 2750 014622 2751 014626 2756 014632 2758 014647 2760 014652 2763 014673 2764 014675 2765 014701 2768 014713 2769 014725 2772 014726 2774 014731 2779 014743 2781 014754 2783 014763 2785 015005 2788 015012 2789 015014 2794 015015 2796 015026 2797 015032 2798 015033 2799 015040 2801 015062 2804 015076 2807 015100 2808 015104 2810 015114 2812 015115 2814 015117 2815 015122 2816 015124 2818 015125 2825 015126 2830 015130 2831 015133 2839 015134 2850 015142 2852 015156 2853 015161 2856 015164 2858 015241 2861 015247 2863 015251 2870 015252 2885 015254 2887 015263 2889 015266 2890 015272 2895 015276 2897 015313 2899 015316 2902 015337 2903 015341 2904 015345 2907 015357 2908 015371 2911 015372 2913 015375 2918 015407 2920 015420 2922 015427 2924 015451 2927 015456 2928 015460 2933 015461 2935 015472 2936 015474 2937 015476 2939 015477 2940 015500 2941 015504 2943 015526 2946 015542 2949 015544 2950 015550 2952 015560 2954 015561 2956 015563 2957 015566 2958 015570 2960 015571 2967 015572 2972 015574 2973 015577 2981 015600 2984 015601 2999 015602 3002 015612 3003 015614 3004 015615 3007 015616 3010 015626 3011 015631 3014 015633 3016 015637 3017 015646 3018 015647 3019 015657 3020 015665 3021 015673 3026 015700 3028 015701 3030 015711 3032 015715 3035 015735 3036 015737 3037 015743 3038 015747 3039 015754 3040 015761 3041 015762 3042 015763 3044 015764 3046 015766 3053 015772 3057 016034 3058 016045 3059 016051 3060 016055 3061 016060 3067 016062 3069 016073 3070 016077 3072 016106 3074 016115 3076 016124 3078 016133 3080 016136 3081 016140 3082 016141 3085 016155 3086 016162 3087 016164 3088 016166 3089 016170 3090 016172 3091 016173 3095 016210 3096 016212 3097 016217 3098 016220 3100 016221 3104 016222 3105 016224 3108 016227 3110 016232 3111 016234 3115 016241 3116 016245 3117 016247 3118 016250 3119 016255 3120 016256 3122 016260 3125 016264 3127 016273 3128 016275 3130 016305 3132 016315 3134 016325 3135 016335 3137 016345 3139 016355 3141 016357 3145 016363 3146 016370 3148 016372 3154 016373 3163 016411 3164 016430 3165 016433 3168 016434 3169 016443 3171 016477 3175 016517 3176 016532 3178 016544 3180 016551 3182 016556 3184 016561 3192 016562 3197 016570 3200 016600 3204 016606 3207 016614 3208 016617 3209 016643 3210 016646 3211 016650 3212 016653 3213 016655 3214 016657 3215 016661 3216 016663 3218 016667 3220 016671 1 10 016672 1 16 016674 1 18 016677 ----------------------------------------------------------- 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