COMPILATION LISTING OF SEGMENT sdm_mbx_requests_ Compiled by: Multics PL/I Compiler, Release 32e, of September 22, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 10/02/89 0825.2 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1988 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(88-03-22,Blair), approve(88-03-22,MCR7842), 16* audit(88-06-28,Lippard), install(88-07-26,MR12.2-1069): 17* Look for the savebox using the mlsys search_list before querying the 18* user for whether or not he wishes to create a new mbx on a save 19* request. The copy also uses the searchlist to locate mailboxes, but 20* the mailbox must exist for the request to succeed. 21* 2) change(89-06-23,Lee), approve(89-07-11,MCR8120), 22* audit(89-08-27,LZimmerman), install(89-10-02,MR12.3-1079): 23* phx19035 (Mail 460) - fixed bug in send_mail's "enter" request which 24* causes mail to be sent when invalid or missing arguments are supplied for 25* address control arguments. 26* END HISTORY COMMENTS */ 27 28 29 /* format: off */ 30 31 /* The send_mail send, log, save, and copy requests */ 32 33 /* Created: 2 January 1979 by G. Palter */ 34 /* Modified: 9 January 1979 by G. Palter to add log, save, and copy requests */ 35 /* Modified: 12 January 1978 by G. Palter to not regard options to send as changing the identity of the message */ 36 /* Modified: 15 January 1979 by G. Palter to add "-abort"/"-no_abort" to the send request */ 37 /* Modified: 7 February 1979 by G. Palter to not set acknowledge bit for log, save, and copy requests */ 38 /* Modified: 16 March 1979 by G. Palter to not send, log, or save the message if there is no text */ 39 /* Modified: 2 June 1980 by G. Palter to fix bug #0304 -- the "write", "append", and "preface" requests should validate 40* the name of the segment. For example, they should reject the name "x." */ 41 /* Modified: September 1983 by G. Palter as part of the conversion to the new mail system interface */ 42 /* Modified: April 1984 by G. Palter to fix mail system error #0433 -- the send_mail command and all send_mail and 43* read_mail requests which accept multiple addresses as arguments do not properly parse "-log -at HOST" */ 44 45 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen */ 46 47 48 sdm_mbx_requests_: 49 procedure (P_sci_ptr, P_sdm_invocation_ptr); 50 51 return; /* not an entrypoint */ 52 53 54 /* Parameters */ 55 56 dcl P_sci_ptr pointer parameter; 57 dcl P_sdm_invocation_ptr pointer parameter; 58 59 60 /* Remaining declarations */ 61 62 dcl argument character (argument_lth) unaligned based (argument_ptr); 63 dcl argument_ptr pointer; 64 dcl argument_lth fixed binary (21); 65 dcl (n_arguments, argument_idx) fixed binary; 66 dcl error_table_$noentry fixed bin(35) ext static; 67 68 dcl 1 local_pcao aligned like parse_ca_options; 69 dcl 1 local_do aligned like deliver_options; 70 71 dcl 1 local_ri aligned, /* describes the message's recipients ... */ 72 2 header like recipients_info.header, 73 2 lists (3) like recipients_info.lists; /* ... enough for the To, cc, and bcc fields */ 74 75 dcl explicit_address_list_ptr pointer; /* -> list of recipients on the send request line */ 76 77 dcl address_ptr pointer; 78 dcl (address_idx, address_type) fixed binary; 79 80 dcl mbx_dirname character (168); 81 dcl mbx_ename character (32); 82 83 dcl brief bit (1) aligned; 84 dcl try_to_create bit (1); 85 dcl invalid_address_found bit (1); 86 87 dcl code fixed binary (35); 88 89 /* format: off */ 90 dcl (error_table_$bad_arg, error_table_$badopt, error_table_$nostars, mlsys_et_$ca_parse_failed, mlsys_et_$empty_message, 91 mlsys_et_$logbox_created, mlsys_et_$message_not_sent, mlsys_et_$message_partially_sent, mlsys_et_$no_mailbox, 92 mlsys_et_$no_recipients, mlsys_et_$no_savebox, mlsys_et_$savebox_created) 93 fixed binary (35) external; 94 /* format: on */ 95 96 dcl check_star_name_$entry entry (character (*), fixed binary (35)); 97 dcl command_query_$yes_no entry () options (variable); 98 dcl expand_pathname_$add_suffix entry (character (*), character (*), character (*), character (*), fixed binary (35)); 99 dcl get_system_free_area_ entry () returns (pointer); 100 101 dcl mail_system_$copy_message entry (pointer, character (*), character (*), fixed binary (35)); 102 dcl mail_system_$deliver_message entry (pointer, pointer, pointer, fixed binary (35)); 103 dcl mail_system_$free_address_list entry (pointer, fixed binary (35)); 104 dcl mail_system_$get_address_pathname entry (pointer, character (*), character (*), character (*), fixed binary (35)); 105 dcl mail_system_$get_address_type entry (pointer, fixed binary, fixed binary (35)); 106 dcl mail_system_$log_message entry (pointer, bit (1) aligned, fixed binary (35)); 107 dcl mail_system_$save_message entry (pointer, character (*), character (*), bit (1) aligned, fixed binary (35)); 108 dcl mail_system_$validate_address entry (pointer, bit (1) aligned, fixed binary (35)); 109 dcl mlsys_utils_$create_logbox entry (fixed binary (35)); 110 dcl mlsys_utils_$create_savebox entry (character (*), character (*), fixed binary (35)); 111 dcl mlsys_utils_$free_delivery_results entry (pointer, fixed binary (35)); 112 dcl mlsys_utils_$parse_address_list_control_args 113 entry (pointer, fixed binary, pointer, character (8), pointer, pointer, fixed binary (35)); 114 dcl mlsys_utils_$print_delivery_results entry (pointer, bit (1) aligned, pointer, fixed binary (35)); 115 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 116 dcl search_paths_$find_dir entry (char(*), ptr, char(*), char(*), char(*), fixed bin(35)); 117 dcl suffixed_name_$make entry (char(*), char(*), char(32), fixed bin(35)); 118 dcl ssu_$abort_line entry () options (variable); 119 dcl ssu_$arg_count entry (pointer, fixed binary); 120 dcl ssu_$arg_ptr entry (pointer, fixed binary, pointer, fixed binary (21)); 121 dcl ssu_$get_subsystem_and_request_name entry (pointer) returns (character (72) varying); 122 dcl ssu_$print_message entry () options (variable); 123 124 dcl cleanup condition; 125 126 dcl (addr, index, length, null, reverse, search, string) builtin; 127 128 /* The "send" request: transmits the message either to the addresses listed in the To, cc, and bcc fields or to the 129* addresses given on the request line */ 130 131 send_request: 132 entry (P_sci_ptr, P_sdm_invocation_ptr); 133 134 sdm_invocation_ptr = P_sdm_invocation_ptr; 135 message_ptr = sdm_invocation.message_ptr; 136 137 call ssu_$arg_count (P_sci_ptr, n_arguments); 138 139 explicit_address_list_ptr, /* for cleanup handler */ 140 local_ri.expanded_recipients_result_list_ptr, local_ri.lists (*) = null (); 141 142 on condition (cleanup) call cleanup_after_send_request (); 143 144 /*** Setup delivery options */ 145 local_do.version = DELIVER_OPTIONS_VERSION_2; 146 local_do.delivery_mode = ORDINARY_DELIVERY; /* ... an ordinary message */ 147 local_do.queueing_mode = ALWAYS_QUEUE_FOREIGN; /* ... always queue foreign addresses & local when needed */ 148 local_do.queued_notification_mode = NOTIFY_ON_ERROR; 149 string (local_do.flags) = ""b; 150 local_do.abort = "1"b; /* ... default to not send if everyone can't get the copy */ 151 local_do.recipient_notification = sdm_invocation.notify; 152 local_do.acknowledge = sdm_invocation.acknowledge; 153 154 local_ri.version = RECIPIENTS_INFO_VERSION_2; 155 local_ri.area_ptr = get_system_free_area_ (); 156 local_ri.n_lists = 0; /* ... haven't decided which lists yet */ 157 158 159 /* Argument processing */ 160 161 local_pcao.version = PARSE_CA_OPTIONS_VERSION_1; 162 local_pcao.logbox_creation_mode = CREATE_AND_ANNOUNCE_MAILBOX; 163 local_pcao.savebox_creation_mode = QUERY_TO_CREATE_MAILBOX; 164 local_pcao.abort_on_errors = "0"b; /* ... can't abort in case -no_abort appears somewhere */ 165 local_pcao.validate_addresses = "0"b; /* ... deliver_message entrypoint will do the validation */ 166 local_pcao.mbz = "0"b; 167 168 brief = sdm_invocation.brief; /* defaults to what was given on the command line */ 169 invalid_address_found = "0"b; /* phx19035, RL: to determine handling of -abort/-no_abort */ 170 171 argument_idx = 1; /* start at the beginning */ 172 173 do while (argument_idx <= n_arguments); 174 175 call mlsys_utils_$parse_address_list_control_args (P_sci_ptr, argument_idx, addr (local_pcao), 176 ADDRESS_LIST_VERSION_2, explicit_address_list_ptr, explicit_address_list_ptr, code); 177 178 if (code ^= 0) & (code ^= mlsys_et_$ca_parse_failed) then 179 call ssu_$abort_line (P_sci_ptr, code, "Parsing control arguments."); 180 181 /* phx19035 RL: Note invalid addresses for possible later abort */ 182 invalid_address_found = invalid_address_found | (code = mlsys_et_$ca_parse_failed); 183 184 if argument_idx <= n_arguments then do; 185 186 /*** An argument not recognized by the mail system: must be one of ours */ 187 call ssu_$arg_ptr (P_sci_ptr, argument_idx, argument_ptr, argument_lth); 188 189 if index (argument, "-") = 1 then /* a control argument */ 190 if argument = "-abort" then local_do.abort = "1"b; 191 else if argument = "-no_abort" then local_do.abort = "0"b; 192 193 else if (argument = "-acknowledge") | (argument = "-ack") then local_do.acknowledge = "1"b; 194 else if (argument = "-no_acknowledge") | (argument = "-nack") then local_do.acknowledge = "0"b; 195 196 else if (argument = "-brief") | (argument = "-bf") then brief = "1"b; 197 else if (argument = "-long") | (argument = "-lg") then brief = "0"b; 198 199 else if (argument = "-notify") | (argument = "-nt") then local_do.recipient_notification = "1"b; 200 else if (argument = "-no_notify") | (argument = "-nnt") then 201 local_do.recipient_notification = "0"b; 202 203 /*** Control arguments which are now obsolete: delete in MR11 */ 204 else if (argument = "-header") | (argument = "-he") | (argument = "-no_header") 205 | (argument = "-nhe") then 206 ; 207 else if (argument = "-message_id") | (argument = "-mid") | (argument = "-no_message_id") 208 | (argument = "-nmid") then 209 ; 210 211 else call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 212 213 else call ssu_$abort_line (P_sci_ptr, error_table_$bad_arg, """^a""", argument); 214 215 argument_idx = argument_idx + 1; /* continue with next argument (if any) */ 216 end; 217 end; 218 219 /* phx19035 RL: Abort delivery if invalid addresses found and -no_abort not specified */ 220 if invalid_address_found & local_do.abort then 221 call ssu_$abort_line (P_sci_ptr, 0); 222 223 /* Scan the explicit recipients for logbox and save 224*box addresses: Create the logbox if necessary and ask for permission 225* to create any saveboxes */ 226 227 if ^is_empty_list (explicit_address_list_ptr) then do; 228 address_list_ptr = explicit_address_list_ptr; 229 do address_idx = 1 to address_list.n_addresses; 230 address_ptr = address_list.addresses (address_idx); 231 call mail_system_$get_address_type (address_ptr, address_type, (0)); 232 if (address_type = LOGBOX_ADDRESS) | (address_type = SAVEBOX_ADDRESS) then do; 233 call mail_system_$get_address_pathname (address_ptr, mbx_dirname, mbx_ename, ((32)" "), (0)); 234 call mail_system_$validate_address (address_ptr, "0"b /* don't expand mailing lists */, code); 235 if code = mlsys_et_$no_mailbox then do; 236 if address_type = LOGBOX_ADDRESS then do; 237 call mlsys_utils_$create_logbox (code); 238 if code = 0 then 239 call ssu_$print_message (P_sci_ptr, 0, "Created ^a.", 240 pathname_ (mbx_dirname, mbx_ename)); 241 else if local_do.abort then 242 call ssu_$abort_line (P_sci_ptr, code, "^a", pathname_ (mbx_dirname, mbx_ename)); 243 else call ssu_$print_message (P_sci_ptr, code, "^a", 244 pathname_ (mbx_dirname, mbx_ename)); 245 end; 246 else /*** if address_type = SAVEBOX_ADDRESS then */ 247 do; 248 call command_query_$yes_no (try_to_create, 0, 249 ssu_$get_subsystem_and_request_name (P_sci_ptr), "", 250 "Do you wish to create the savebox ^a?", pathname_ (mbx_dirname, mbx_ename)); 251 if try_to_create then do; 252 call mlsys_utils_$create_savebox (mbx_dirname, mbx_ename, code); 253 if code ^= 0 then /* ... report the failure */ 254 if local_do.abort then 255 call ssu_$abort_line (P_sci_ptr, code, "^a", 256 pathname_ (mbx_dirname, mbx_ename)); 257 else call ssu_$print_message (P_sci_ptr, code, "^a", 258 pathname_ (mbx_dirname, mbx_ename)); 259 else if local_do.abort then call ssu_$abort_line (P_sci_ptr, 0); 260 end; 261 end; 262 end; 263 end; 264 end; 265 end; 266 267 268 /* Setup the list(s) of recipients for the message */ 269 270 if is_empty_list (explicit_address_list_ptr) then do; 271 /*** Use the To, cc, and bcc fields */ 272 local_ri.n_lists = 0; 273 if ^is_empty_list (message.to) then do; 274 local_ri.n_lists = local_ri.n_lists + 1; 275 local_ri.lists (local_ri.n_lists).address_list_ptr = message.to; 276 end; 277 if ^is_empty_list (message.cc) then do; 278 local_ri.n_lists = local_ri.n_lists + 1; 279 local_ri.lists (local_ri.n_lists).address_list_ptr = message.cc; 280 end; 281 if ^is_empty_list (message.bcc) then do; 282 local_ri.n_lists = local_ri.n_lists + 1; 283 local_ri.lists (local_ri.n_lists).address_list_ptr = message.bcc; 284 end; 285 if local_ri.n_lists = 0 then /* no recipients ... */ 286 call ssu_$abort_line (P_sci_ptr, mlsys_et_$no_recipients); 287 end; 288 289 else do; 290 /*** Use the addresses supplied on the request line */ 291 local_ri.n_lists = 1; 292 local_ri.lists (1).address_list_ptr = explicit_address_list_ptr; 293 end; 294 295 /* Deliver the message and report the results */ 296 297 call mail_system_$deliver_message (message_ptr, addr (local_ri), addr (local_do), code); 298 299 if (code ^= 0) & (code ^= mlsys_et_$message_not_sent) & (code ^= mlsys_et_$message_partially_sent) then 300 call ssu_$abort_line (P_sci_ptr, code, "Attempting to transmit the message."); 301 302 call mlsys_utils_$print_delivery_results (P_sci_ptr, brief, addr (local_ri), (0)); 303 304 call cleanup_after_send_request (); /* flush the data */ 305 306 if (code = 0) | (code = mlsys_et_$message_partially_sent) then sdm_invocation.message_state = PROCESSED_MESSAGE; 307 /* allow quit without query if it got through to anyone */ 308 309 if code ^= 0 then /* abort the line because of errors in the transmission */ 310 call ssu_$abort_line (P_sci_ptr, code); 311 312 return; 313 314 315 316 /* Release the data structures used by the send request */ 317 318 cleanup_after_send_request: 319 procedure (); 320 321 call mlsys_utils_$free_delivery_results (addr (local_ri), (0)); 322 323 if explicit_address_list_ptr ^= null () then 324 call mail_system_$free_address_list (explicit_address_list_ptr, (0)); 325 326 return; 327 328 end cleanup_after_send_request; 329 330 /* The "log" request: places a copy of the message into the user's logbox which is created if necessary */ 331 332 log_request: 333 entry (P_sci_ptr, P_sdm_invocation_ptr); 334 335 sdm_invocation_ptr = P_sdm_invocation_ptr; 336 message_ptr = sdm_invocation.message_ptr; 337 338 call ssu_$arg_count (P_sci_ptr, n_arguments); 339 if n_arguments ^= 0 then call ssu_$abort_line (P_sci_ptr, 0, "No arguments may be given."); 340 341 call abort_if_body_is_empty (); 342 343 call mail_system_$log_message (message_ptr, "1"b /* create if not found */, code); 344 if code = mlsys_et_$logbox_created then do; /* announce that we just created the user's logbox */ 345 call mail_system_$get_address_pathname (mlsys_data_$user_logbox_address, mbx_dirname, mbx_ename, ((32)" "), 346 (0)); 347 call ssu_$print_message (P_sci_ptr, 0, "Created ^a.", pathname_ (mbx_dirname, mbx_ename)); 348 code = 0; /* ... make the code indicate success */ 349 end; 350 351 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "Adding the message to your logbox."); 352 353 sdm_invocation.message_state = PROCESSED_MESSAGE; /* the user can now quit without query */ 354 355 return; 356 357 /* The "save" request: places a copy of the message into the specified savebox; the user is queried for permission to 358* create the savebox if it does not exist */ 359 360 save_request: 361 entry (P_sci_ptr, P_sdm_invocation_ptr); 362 363 sdm_invocation_ptr = P_sdm_invocation_ptr; 364 message_ptr = sdm_invocation.message_ptr; 365 366 call ssu_$arg_count (P_sci_ptr, n_arguments); 367 if n_arguments ^= 1 then call ssu_$abort_line (P_sci_ptr, 0, "Usage: save path"); 368 369 call ssu_$arg_ptr (P_sci_ptr, 1, argument_ptr, argument_lth); 370 371 if index (argument, "-") = 1 then call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 372 373 if index (reverse (argument), reverse (".sv")) = 1 then argument_lth = argument_lth - length (".sv"); 374 /* remove ".sv" to avoid generating "x.sv.sv.mbx" */ 375 if search (argument, "<>") > 0 then do; 376 call expand_pathname_$add_suffix (argument, "sv.mbx", mbx_dirname, mbx_ename, code); 377 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a", argument); 378 end; 379 else do; 380 call suffixed_name_$make (argument, "sv.mbx", mbx_ename, code); 381 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a", argument); 382 call search_paths_$find_dir ("mlsys", null(), mbx_ename, "", mbx_dirname, code); 383 if code ^= 0 then 384 if code = error_table_$noentry then do; 385 call expand_pathname_$add_suffix (argument, "sv.mbx", mbx_dirname, mbx_ename, code); 386 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a", argument); 387 end; 388 else call ssu_$abort_line (P_sci_ptr, code, "^a", mbx_ename); 389 end; 390 391 call check_star_name_$entry (mbx_ename, code); 392 if code ^= 0 then /* reject invalid names and star names */ 393 if (code = 1) | (code = 2) then 394 call ssu_$abort_line (P_sci_ptr, error_table_$nostars, "^a", pathname_ (mbx_dirname, mbx_ename)); 395 else call ssu_$abort_line (P_sci_ptr, code, "^a", pathname_ (mbx_dirname, mbx_ename)); 396 397 call abort_if_body_is_empty (); 398 399 call mail_system_$save_message (message_ptr, mbx_dirname, mbx_ename, "0"b /* do not create if missing */, code); 400 401 if code = mlsys_et_$no_savebox then do; /* ask for permission to create the savebox */ 402 call command_query_$yes_no (try_to_create, 0, ssu_$get_subsystem_and_request_name (P_sci_ptr), "", 403 "Do you wish to create the savebox ^a?", pathname_ (mbx_dirname, mbx_ename)); 404 if try_to_create then /* ... permission given: try again */ 405 call mail_system_$save_message (message_ptr, mbx_dirname, mbx_ename, "1"b /* create if not found */, 406 code); 407 else call ssu_$abort_line (P_sci_ptr, 0); /* ... no permission: stop right here */ 408 if code = mlsys_et_$savebox_created then code = 0; 409 end; 410 411 if code ^= 0 then /* couldn't save it */ 412 call ssu_$abort_line (P_sci_ptr, code, "Adding the message to the savebox ^a.", 413 pathname_ (mbx_dirname, mbx_ename)); 414 415 sdm_invocation.message_state = PROCESSED_MESSAGE; /* it's now OK to quit without query */ 416 417 return; 418 419 /* The "copy" request: places a copy of the message into the specified mailbox which must already exist */ 420 421 copy_request: 422 entry (P_sci_ptr, P_sdm_invocation_ptr); 423 424 sdm_invocation_ptr = P_sdm_invocation_ptr; 425 message_ptr = sdm_invocation.message_ptr; 426 427 call ssu_$arg_count (P_sci_ptr, n_arguments); 428 if n_arguments ^= 1 then call ssu_$abort_line (P_sci_ptr, 0, "Usage: copy path"); 429 430 call ssu_$arg_ptr (P_sci_ptr, 1, argument_ptr, argument_lth); 431 432 if index (argument, "-") = 1 then call ssu_$abort_line (P_sci_ptr, error_table_$badopt, """^a""", argument); 433 434 if search (argument, "<>") > 0 then do; 435 call expand_pathname_$add_suffix (argument, "mbx", mbx_dirname, mbx_ename, code); 436 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a", argument); 437 end; 438 else do; 439 call suffixed_name_$make (argument, "mbx", mbx_ename, code); 440 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a", argument); 441 call search_paths_$find_dir ("mlsys", null (), mbx_ename, "", mbx_dirname, code); 442 if code ^= 0 then 443 if code = error_table_$noentry then do; 444 call expand_pathname_$add_suffix (argument, "mbx", mbx_dirname, mbx_ename, code); 445 if code ^= 0 then call ssu_$abort_line (P_sci_ptr, code, "^a", argument); 446 end; 447 else call ssu_$abort_line (P_sci_ptr, code, "^a", argument); 448 end; 449 450 call check_star_name_$entry (mbx_ename, code); 451 if code ^= 0 then /* reject invalid names and star names */ 452 if (code = 1) | (code = 2) then 453 call ssu_$abort_line (P_sci_ptr, error_table_$nostars, "^a", pathname_ (mbx_dirname, mbx_ename)); 454 else call ssu_$abort_line (P_sci_ptr, code, "^a", pathname_ (mbx_dirname, mbx_ename)); 455 456 call abort_if_body_is_empty (); 457 458 call mail_system_$copy_message (message_ptr, mbx_dirname, mbx_ename, code); 459 460 if code ^= 0 then /* couldn't copy it */ 461 call ssu_$abort_line (P_sci_ptr, code, "Adding the message to the mailbox ^a.", 462 pathname_ (mbx_dirname, mbx_ename)); 463 464 sdm_invocation.message_state = PROCESSED_MESSAGE; /* it's now OK to quit without query */ 465 466 return; 467 468 /* Determines if the given address list is empty */ 469 470 is_empty_list: 471 procedure (p_address_list_ptr) returns (bit (1) aligned); 472 473 dcl p_address_list_ptr pointer parameter; 474 475 if p_address_list_ptr = null () then /* if there's no data at all, it's empty */ 476 return ("1"b); 477 478 else return ((p_address_list_ptr -> address_list.n_addresses = 0)); 479 480 end is_empty_list; 481 482 483 484 /* Aborts the operation if the message is empty */ 485 486 abort_if_body_is_empty: 487 procedure (); 488 489 dcl idx fixed binary; 490 491 do idx = 1 to message.n_body_sections; 492 message_body_section_ptr = addr (message.body_sections (idx)); 493 if message_body_section.section_type = MESSAGE_PREFORMATTED_BODY_SECTION then 494 if message_preformatted_body_section.text_lth > 0 then 495 return; /* any non-zero length section => the message isn't empty */ 496 else ; 497 else /*** if message_body_section.section_type = MESSAGE_BIT_STRING_BODY_SECTION then */ 498 if message_bit_string_body_section.bit_string_lth > 0 then return; 499 end; /* any non-zero length section => the message isn't empty */ 500 501 /*** Control arrives here iff all sections in the body are empty */ 502 call ssu_$abort_line (P_sci_ptr, mlsys_et_$empty_message); 503 504 end abort_if_body_is_empty; 505 1 1 /* BEGIN INCLUDE FILE ... sdm_invocation.incl.pl1 */ 1 2 /* Created: August 1983 by G. Palter from portions of emf_info.incl.pl1 */ 1 3 1 4 /* Definition of a single invocation of send_mail */ 1 5 1 6 dcl 1 sdm_invocation aligned based (sdm_invocation_ptr), 1 7 2 type character (8), /* defines this structure as a send_mail invocation */ 1 8 2 sci_ptr pointer, /* -> subsystem utilities invocation data */ 1 9 2 area_ptr pointer, /* -> area to be used by the subsystem */ 1 10 1 11 2 message_info, /* information about the message being constructed */ 1 12 3 message_ptr pointer, /* ... -> the actual message */ 1 13 3 message_state fixed binary, /* ... unprocessed/modified/processed: controls quit query */ 1 14 3 date_time_body_modified fixed binary (71), /* ... last date/time the message body was changed: used to 1 15* display Date/Message-ID fields before transmission */ 1 16 1 17 2 fill_width fixed binary, /* default line length for message filling */ 1 18 2 flags, 1 19 3 brief bit (1) unaligned, /* ON => suppress "Mail delivered..." messages */ 1 20 3 acknowledge bit (1) unaligned, /* ON => user wants acknowledgement from recipients */ 1 21 3 notify bit (1) unaligned, /* ON => send each recipient a notification of delivery */ 1 22 3 fill bit (1) unaligned, /* ON => fill message body whenever modified */ 1 23 3 debug_mode bit (1) unaligned, /* ON => debugging features enabled */ 1 24 3 auto_write bit (1) unaligned, 1 25 3 pad bit (30) unaligned, /* ON => qedx request automatically rewrites on quit (sigh) */ 1 26 1 27 2 rdm_invocation_ptr pointer, /* -> description of read_mail invocation whose reply request 1 28* created this send_mail invocation */ 1 29 1 30 2 original_messages_ptr pointer, /* -> current list of original messages from which the 1 31* In-Reply-To field is to be regenerated after use of 1 32* qedx/apply -header */ 1 33 1 34 2 abort_code fixed binary (35); /* indicates whether send_mail exited with unsent message */ 1 35 1 36 dcl SDM_INVOCATION character (8) static options (constant) initial ("sdm_0008"); 1 37 1 38 dcl sdm_invocation_ptr pointer; 1 39 1 40 dcl sdm_area area based (sdm_invocation.area_ptr); 1 41 1 42 1 43 /* Possible message states: indicate whether the message has been modified in some way since it was last successfully 1 44* transmitted, logged, saved, or writen. This state is used by the quit request to control whether it should query the 1 45* user for permission to exit send_mail */ 1 46 1 47 dcl (UNPROCESSED_MESSAGE initial (-1), /* message has never been transmitted/logged/saved/written */ 1 48 1 49 MODIFIED_MESSAGE initial (1), /* message was transmitted/logged/saved/written but has been 1 50* modified since the last such operation */ 1 51 1 52 PROCESSED_MESSAGE initial (0)) /* message was transmitted/logged/saved/written and hasn't 1 53* been modified since that operation: OK to quit without 1 54* having to ask for the user's permission */ 1 55 fixed binary static options (constant); 1 56 1 57 /* END INCLUDE FILE ... sdm_invocation.incl.pl1 */ 506 507 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 */ 508 509 3 1 /* BEGIN INCLUDE FILE ... mlsys_message.incl.pl1 */ 3 2 3 3 3 4 /****^ HISTORY COMMENTS: 3 5* 1) change(85-12-19,Herbst), approve(86-03-25,MCR7367), 3 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 3 7* Added seen switch to message. 3 8* END HISTORY COMMENTS */ 3 9 3 10 3 11 /* Created: June 1983 by G. Palter */ 3 12 3 13 /* Definition of a message as used by the Multics Mail System */ 3 14 3 15 dcl 1 message aligned based (message_ptr), 3 16 2 version character (8) unaligned, 3 17 2 reserved bit (144), /* for exclusive use of the mail system */ 3 18 2 n_reply_references fixed binary, /* # of messages for which this is a reply */ 3 19 2 n_user_fields fixed binary, /* # of non-standard header fields in this message */ 3 20 2 n_redistributions fixed binary, /* # of times this message has been forwarded */ 3 21 2 n_body_sections fixed binary, /* # of sections in the body */ 3 22 2 flags, 3 23 3 interactive bit (1) unaligned, /* ON => this is an interactive message */ 3 24 3 can_be_deleted bit (1) unaligned, /* ON => the user can delete this message if desired */ 3 25 3 marked_for_deletion bit (1) unaligned, /* ON => message will be deleted when mailbox is closed */ 3 26 3 must_be_acknowledged bit (1) unaligned, /* ON => an ACK should be generated when message is read */ 3 27 3 seen bit (1) unaligned, /* ON => user has printed message at least once */ 3 28 3 reserved bit (31) unaligned, /* for use by the mail system */ 3 29 2 pad bit (36), 3 30 2 envelope like message_envelope, /* who/when/how the message was mailed & delivered */ 3 31 2 header, 3 32 3 message_id bit (72), /* ID of this message (same value for all copies) */ 3 33 3 access_class bit (72), /* AIM access class of this message */ 3 34 3 date_time_created fixed binary (71), /* date/time this message was composed */ 3 35 3 from pointer, /* -> address list of author(s) of the message */ 3 36 3 reply_to pointer, /* -> address list of recipients for reply (if not authors) */ 3 37 3 to pointer, /* -> address list of primary recipients */ 3 38 3 cc pointer, /* -> address list of secondary recipients */ 3 39 3 bcc pointer, /* -> address list of blind recipients */ 3 40 3 subject like message_text_field, /* subject of the message */ 3 41 3 reply_references pointer, /* -> list of messages for which this message is a reply */ 3 42 3 user_fields_list pointer, /* -> list of user-defined fields in this message */ 3 43 2 redistributions_list pointer, /* -> redistributions list for this message */ 3 44 2 body, 3 45 3 total_lines fixed binary (21), /* total # of lines in the body or -1 if indeterminate */ 3 46 3 pad bit (36), 3 47 3 body_sections (message_n_body_sections refer (message.n_body_sections)) like message_body_section; 3 48 3 49 dcl MESSAGE_VERSION_2 character (8) static options (constant) initial ("mlsmsg02"); 3 50 3 51 dcl message_subject character (message.header.subject.text_lth) unaligned based (message.header.subject.text_ptr); 3 52 3 53 dcl message_ptr pointer; 3 54 3 55 dcl (message_n_body_sections, message_trace_n_relays, message_n_redistributions, message_n_user_fields, 3 56 message_references_list_n_references) 3 57 fixed binary; /* for exclusive use of the mail system */ 3 58 3 59 /* Definition of a message envelope: describes when, by whom, and by what route the message was mailed */ 3 60 3 61 dcl 1 message_envelope aligned based (message_envelope_ptr), 3 62 2 date_time_mailed fixed binary (71), /* date/time this message was entered into the mail system */ 3 63 2 sender pointer, /* -> address of entity that mailed the message */ 3 64 2 trace pointer, /* -> message_trace describing how it got here */ 3 65 2 date_time_delivered fixed binary (71), /* date/time this message was delivered */ 3 66 2 delivered_by pointer, /* -> address of entity that delivered the message */ 3 67 2 acknowledge_to pointer; /* -> address of entity to receive ACK when message is read */ 3 68 3 69 dcl message_envelope_ptr pointer; 3 70 3 71 3 72 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the message envelope */ 3 73 3 74 dcl 1 message_envelope_parameter aligned based (message_envelope_parameter_ptr), 3 75 2 pad pointer, /* forces even word alignment */ 3 76 2 version character (8) unaligned, 3 77 2 envelope like message_envelope; 3 78 3 79 dcl MESSAGE_ENVELOPE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsenv02"); 3 80 3 81 dcl message_envelope_parameter_ptr pointer; 3 82 3 83 3 84 /* Definition of a message trace: describes the route and each relay operation by which a message was passed through the 3 85* networks to reach this recipient */ 3 86 3 87 dcl 1 message_trace aligned based (message_trace_ptr), 3 88 2 version character (8) unaligned, 3 89 2 reserved bit (144), /* ... exclusively for use by the mail system */ 3 90 2 implicit_route pointer, /* -> an address_route which defines the route it took */ 3 91 2 pad bit (36), 3 92 2 n_relays fixed binary, /* # of relay operations required to reach this site */ 3 93 2 relays (message_trace_n_relays refer (message_trace.n_relays)), 3 94 3 date_time_relayed fixed binary (71), /* ... when this relay operation took place */ 3 95 3 sending_host character (256) varying, /* ... the host which relayed the message */ 3 96 3 receiving_host character (256) varying, /* ... the host which received it */ 3 97 3 communications_media character (32) unaligned, /* ... medium over which relay took place (ARPA, Tymnet) */ 3 98 3 communications_protocol character (32) unaligned,/* ... low-level protocol used (TCP, X.25) */ 3 99 3 mail_protocol character (32) unaligned, /* ... mailer protocol used (SMTP, NBS) */ 3 100 3 relay_id bit (72), /* ... unique ID assigned by receiving system or ""b */ 3 101 3 relay_recipient pointer; /* ... -> address of recipient as given by sending system */ 3 102 3 103 dcl MESSAGE_TRACE_VERSION_2 character (8) static options (constant) initial ("mlstrc02"); 3 104 3 105 dcl message_trace_ptr pointer; 3 106 3 107 /* Definition of a message's redistributions list */ 3 108 3 109 dcl 1 message_redistributions_list aligned based (message.redistributions_list), 3 110 2 version character (8) unaligned, 3 111 2 reserved bit (144), /* ... exclusively for use by the mail system */ 3 112 2 pad bit (36), 3 113 2 n_redistributions fixed binary, /* # of redistributions */ 3 114 2 redistributions (message_n_redistributions refer (message_redistributions_list.n_redistributions)) 3 115 like message_redistribution; /* the redistributions: oldest first */ 3 116 3 117 dcl MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsrl002"); 3 118 3 119 3 120 /* Definition of a single redistribution (forwarding) of a message */ 3 121 3 122 dcl 1 message_redistribution aligned based (message_redistribution_ptr), 3 123 2 envelope like message_envelope, 3 124 2 header, 3 125 3 message_id bit (72), /* ID of this redistribution (same for all copies) */ 3 126 3 date_time_created fixed binary (71), /* date/time when this redistribution was made */ 3 127 3 from pointer, /* -> address list of authors of this redistribution */ 3 128 3 to pointer, /* -> address list of recipients of the redistribution */ 3 129 3 comment like message_text_field; /* optional comment associated with the redistribution */ 3 130 3 131 dcl message_redistribution_comment character (message_redistribution.comment.text_lth) unaligned 3 132 based (message_redistribution.comment.text_ptr); 3 133 3 134 dcl message_redistribution_ptr pointer; 3 135 3 136 3 137 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the redistributions of a message */ 3 138 3 139 dcl 1 message_redistribution_parameter aligned based (message_redistribution_parameter_ptr), 3 140 2 pad pointer, /* forces even word alignment */ 3 141 2 version character (8) unaligned, 3 142 2 redistribution like message_redistribution; 3 143 3 144 dcl MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsdist2"); 3 145 3 146 dcl message_redistribution_parameter_ptr pointer; 3 147 3 148 /* Definition of the list of user-defined fields in a message */ 3 149 3 150 dcl 1 message_user_fields_list aligned based (message.user_fields_list), 3 151 2 version character (8) unaligned, 3 152 2 reserved bit (144), /* ... exclusively for use by the mail system */ 3 153 2 pad bit (36), 3 154 2 n_user_fields fixed binary, /* # of user-defined fields in the message */ 3 155 2 user_fields (message_n_user_fields refer (message_user_fields_list.n_user_fields)) 3 156 like message_user_field; /* the actual user-defined fields */ 3 157 3 158 dcl MESSAGE_USER_FIELDS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsufl02"); 3 159 3 160 3 161 /* Definition of a user defined message header field */ 3 162 3 163 dcl 1 message_user_field aligned based (message_user_field_ptr), 3 164 2 header, 3 165 3 field_id bit (36) aligned, /* identifies the purpose of this field */ 3 166 3 field_type fixed binary, /* type of data contained in this field */ 3 167 2 field_type_variable bit (144); /* the actual data (see below) */ 3 168 3 169 dcl message_user_field_ptr pointer; 3 170 3 171 3 172 /* Defined types of user defined fields */ 3 173 3 174 dcl (MESSAGE_TEXT_USER_FIELD initial (1), /* content of the field is a text string */ 3 175 MESSAGE_ADDRESS_LIST_USER_FIELD initial (2), /* content of the field is an address list */ 3 176 MESSAGE_DATE_USER_FIELD initial (3), /* content of the field is a date/time */ 3 177 MESSAGE_INTEGER_USER_FIELD initial (4)) /* content of the filed is a fixed binary value */ 3 178 fixed binary static options (constant); 3 179 3 180 3 181 /* Structures used to access the data for the different types of user defined fields */ 3 182 3 183 dcl 1 message_text_user_field aligned based (message_user_field_ptr), 3 184 2 header like message_user_field.header, 3 185 2 text like message_text_field; /* the message text */ 3 186 3 187 dcl message_text_user_field_text character (message_text_user_field.text.text_lth) unaligned 3 188 based (message_text_user_field.text.text_ptr); 3 189 3 190 dcl 1 message_address_list_user_field aligned based (message_user_field_ptr), 3 191 2 header like message_user_field.header, 3 192 2 address_list_ptr pointer, /* -> the address list */ 3 193 2 pad bit (72); 3 194 3 195 dcl 1 message_date_user_field aligned based (message_user_field_ptr), 3 196 2 header like message_user_field.header, 3 197 2 date_time fixed binary (71), /* the clock reading */ 3 198 2 pad bit (72); 3 199 3 200 dcl 1 message_integer_user_field aligned based (message_user_field_ptr), 3 201 2 header like message_user_field.header, 3 202 2 value fixed binary (35), /* the integer value */ 3 203 2 pad bit (108); 3 204 3 205 3 206 /* Structure used in calls to mail_system_ entrypoints which manipulate the user-defined fields of a message */ 3 207 3 208 dcl 1 message_user_field_parameter aligned based (message_user_field_parameter_ptr), 3 209 2 pad pointer, /* forces even word alignment */ 3 210 2 version character (8) unaligned, 3 211 2 user_field like message_user_field; 3 212 3 213 dcl MESSAGE_USER_FIELD_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsudf02"); 3 214 3 215 dcl message_user_field_parameter_ptr pointer; 3 216 3 217 /* Definition of a list of message references used as the value of message header fields (eg: In-Reply-To) */ 3 218 3 219 dcl 1 message_references_list aligned based (message_references_list_ptr), 3 220 2 version character (8) unaligned, 3 221 2 reserved bit (144), /* ... exclusively for use by the mail system */ 3 222 2 pad bit (36), 3 223 2 n_references fixed binary, /* # of references in this list */ 3 224 2 references (message_references_list_n_references refer (message_references_list.n_references)) 3 225 like message_reference; /* the references themselves */ 3 226 3 227 dcl MESSAGE_REFERENCES_LIST_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 3 228 3 229 dcl message_references_list_ptr pointer; 3 230 3 231 3 232 /* Definition of a reference to another message */ 3 233 3 234 dcl 1 message_reference aligned based (message_reference_ptr), 3 235 2 message_id bit (72), /* ID of the other message */ 3 236 2 date_time_created fixed binary (71), /* date/time the other message was created */ 3 237 2 from pointer, /* -> address list of authors of the other message */ 3 238 2 subject like message_text_field; /* subject of the other message */ 3 239 3 240 dcl message_reference_subject character (message_reference.subject.text_lth) unaligned 3 241 based (message_reference.subject.text_ptr); 3 242 3 243 dcl message_reference_ptr pointer; 3 244 3 245 3 246 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate message references */ 3 247 3 248 dcl 1 message_reference_parameter aligned based (message_reference_parameter_ptr), 3 249 2 pad pointer, /* forces even word alignment */ 3 250 2 version character (8) unaligned, 3 251 2 reference like message_reference; 3 252 3 253 dcl MESSAGE_REFERENCE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 3 254 3 255 dcl message_reference_parameter_ptr pointer; 3 256 3 257 3 258 /* Definition of a text field in a message (Subject, Comment, or a user defined field) */ 3 259 3 260 dcl 1 message_text_field aligned based (message_text_field_ptr), 3 261 2 text_ptr pointer, /* -> the actual text */ 3 262 2 text_lth fixed binary (21), /* length of said text */ 3 263 2 flags, 3 264 3 multiline_text bit (1) unaligned, /* ON => the text of this field may span multiple lines; 3 265* OFF => the text will always be a single line */ 3 266 3 reserved bit (35) unaligned; /* for exclusive use of the mail system */ 3 267 3 268 dcl message_text_field_text character (message_text_field.text_lth) unaligned based (message_text_field.text_ptr); 3 269 3 270 dcl message_text_field_ptr pointer; 3 271 3 272 /* Definition of a section of the body of a message */ 3 273 3 274 dcl 1 message_body_section aligned based (message_body_section_ptr), 3 275 2 header, 3 276 3 section_type fixed binary, /* type of "text" stored in this section */ 3 277 3 section_n_lines fixed binary (21), /* # of lines in this section or -1 if indeterminate */ 3 278 2 section_type_variable bit (144); /* the actual data (see below) */ 3 279 3 280 dcl message_body_section_ptr pointer; 3 281 3 282 3 283 /* Defined types of message body sections */ 3 284 3 285 dcl (MESSAGE_PREFORMATTED_BODY_SECTION initial (1), /* text formatted by the authors/sender */ 3 286 MESSAGE_BIT_STRING_BODY_SECTION initial (2)) /* arbitrary bit string */ 3 287 fixed binary static options (constant); 3 288 3 289 3 290 /* Structures used to access the data for the different types of message body sections */ 3 291 3 292 dcl 1 message_preformatted_body_section aligned based (message_body_section_ptr), 3 293 2 header like message_body_section.header, 3 294 2 text_ptr pointer, /* -> the text */ 3 295 2 text_lth fixed binary (21), /* length of said text in characters */ 3 296 2 reserved bit (36); /* for exclusive use of the mail system */ 3 297 3 298 dcl message_preformatted_body_section_text character (message_preformatted_body_section.text_lth) unaligned 3 299 based (message_preformatted_body_section.text_ptr); 3 300 3 301 dcl 1 message_bit_string_body_section aligned based (message_body_section_ptr), 3 302 2 header like message_body_section.header, 3 303 2 bit_string_ptr pointer, /* -> the bit string */ 3 304 2 bit_string_lth fixed binary (24), /* length of said bit string in bits (obviously) */ 3 305 2 reserved bit (36); /* for exclusive use of the mail system */ 3 306 3 307 dcl message_bit_string_body_section_bit_string bit (message_bit_string_body_section.bit_string_lth) unaligned 3 308 based (message_bit_string_body_section.bit_string_ptr); 3 309 3 310 3 311 /* Structure used in calls to mail_system_ entrypoints which manipulate the sections of a message's body */ 3 312 3 313 dcl 1 message_body_section_parameter aligned based (message_body_section_parameter_ptr), 3 314 2 pad pointer, /* forces even word alignment */ 3 315 2 version character (8) unaligned, 3 316 2 section like message_body_section; 3 317 3 318 dcl MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsmbs02"); 3 319 3 320 dcl message_body_section_parameter_ptr pointer; 3 321 3 322 /* END INCLUDE FILE ... mlsys_message.incl.pl1 */ 510 511 4 1 /* BEGIN INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 4 2 /* Created: June 1983 by G. Palter */ 4 3 4 4 /* Definition of an address list -- a collection of addresses used as the value of certain message fields, etc. */ 4 5 4 6 dcl 1 address_list aligned based (address_list_ptr), 4 7 2 version character (8) unaligned, 4 8 2 reserved bit (144), /* ... exclusively for use by the mail system */ 4 9 2 n_addresses fixed binary, /* # of address in this list */ 4 10 2 addresses (address_list_n_addresses refer (address_list.n_addresses)) pointer; 4 11 4 12 dcl ADDRESS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsals02"); 4 13 4 14 dcl address_list_ptr pointer; 4 15 4 16 dcl address_list_n_addresses fixed binary; /* reserved exclusively for use by the mail system */ 4 17 4 18 /* END INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 512 513 5 1 /* BEGIN INCLUDE FILE ... mlsys_address_types.incl.pl1 */ 5 2 /* Created: June 1983 by G. Palter */ 5 3 5 4 /* Types of addresses supported by the Multics Mail System */ 5 5 5 6 dcl (INVALID_ADDRESS initial (0), /* a syntactically invalid address: used as a place holder 5 7* when parsing printed representations */ 5 8 USER_MAILBOX_ADDRESS initial (1), /* identifies a user's default mailbox */ 5 9 LOGBOX_ADDRESS initial (2), /* identifies a user's logbox */ 5 10 SAVEBOX_ADDRESS initial (3), /* identifies one of a user's saveboxes by pathname */ 5 11 MAILBOX_ADDRESS initial (4), /* identifies some other mailbox by pathname */ 5 12 FORUM_ADDRESS initial (5), /* identifies a forum meeting by pathname */ 5 13 FOREIGN_ADDRESS initial (6), /* identifies a user (or group) on another compute system */ 5 14 MAIL_TABLE_ADDRESS initial (7), /* identifies an entry in the system's mail table */ 5 15 MAILING_LIST_ADDRESS initial (8), /* identifies a mailing list by pathname */ 5 16 NAMED_GROUP_ADDRESS initial (9)) /* identifies a named group of addresses */ 5 17 fixed binary static options (constant); 5 18 5 19 /* END INCLUDE FILE ... mlsys_address_types.incl.pl1 */ 514 515 6 1 /* BEGIN INCLUDE FILE ... mlsys_deliver_info.incl.pl1 */ 6 2 /* Created: June 1983 by G. Palter */ 6 3 6 4 /* Options for the mail_system_$deliver_message and mail_system_$redistribute_message entrypoints */ 6 5 6 6 dcl 1 deliver_options aligned based (deliver_options_ptr), 6 7 2 version character (8) unaligned, 6 8 2 delivery_mode fixed binary, /* deliver as an ordinary/interactive/express message */ 6 9 2 queueing_mode fixed binary, /* when to queue the message */ 6 10 2 queued_notification_mode fixed binary, /* when to notify sender about queued mail success/failure */ 6 11 2 flags, 6 12 3 abort bit (1) unaligned, /* ON => don't send it if any fatal errors are detected */ 6 13 3 send_if_empty bit (1) unaligned, /* ON => send the message even if its body is empty */ 6 14 3 recipient_notification bit (1) unaligned, /* ON => send "You have mail." notification */ 6 15 3 acknowledge bit (1) unaligned, /* ON => request ACK message when recipients read it */ 6 16 3 queue_mailing_lists bit (1) unaligned, /* ON => always queue the message for mailing lists */ 6 17 3 mbz bit (31) unaligned; /* must be set to ""b by the caller */ 6 18 6 19 dcl DELIVER_OPTIONS_VERSION_2 character (8) static options (constant) initial ("mlsdlo02"); 6 20 6 21 dcl deliver_options_ptr pointer; 6 22 6 23 /* Defined modes of delivery */ 6 24 6 25 dcl (ORDINARY_DELIVERY initial (1), /* send as an ordinary message */ 6 26 INTERACTIVE_DELIVERY initial (2), /* send as an interactive message */ 6 27 EXPRESS_DELIVERY initial (3)) /* send as an express interactive message; ie: deliver the 6 28* message only if the user is logged in */ 6 29 fixed binary static options (constant); 6 30 6 31 /* Defined modes for queuing mail on transient errors */ 6 32 6 33 dcl (NEVER_QUEUE initial (1), /* never queue: convert into a fatal error */ 6 34 QUEUE_FOREIGN_WHEN_NEEDED initial (2), /* never queue local mail; queue foreign mail on error */ 6 35 QUEUE_WHEN_NEEDED initial (3), /* queue all mail on any transient error */ 6 36 ALWAYS_QUEUE_FOREIGN initial (4), /* queue local mail on error; always queue foreign mail */ 6 37 ALWAYS_QUEUE initial (5)) /* always queue all mail */ 6 38 fixed binary static options (constant); 6 39 6 40 /* Defined modes of notification of success/failure to deliver queued mail */ 6 41 6 42 dcl (NEVER_NOTIFY initial (1), /* never notify the sender */ 6 43 NOTIFY_ON_ERROR initial (2), /* notify the sender only if it can not be delivered */ 6 44 ALWAYS_NOTIFY initial (3)) /* always notify the sender */ 6 45 fixed binary static options (constant); 6 46 6 47 /* Definition of the recipients of a message and the results of the attempted transmission */ 6 48 6 49 dcl 1 recipients_info aligned based (recipients_info_ptr), 6 50 2 header, 6 51 3 version character (8) unaligned, 6 52 3 area_ptr pointer, /* -> area for following structures; null => system free */ 6 53 3 expanded_recipients_result_list_ptr pointer, /* set -> expanded_recipients_result_list (if any) */ 6 54 3 n_recipients fixed binary, /* set to total # of recipients after expanding lists */ 6 55 3 n_unique_recipients fixed binary, /* set to total # of unique recipients */ 6 56 3 n_failed_recipients fixed binary, /* set to # of recipients that failed or would fail */ 6 57 3 n_lists fixed binary, /* # of address lists of recipients */ 6 58 2 lists (recipients_info_n_lists refer (recipients_info.n_lists)), 6 59 3 address_list_ptr pointer, /* -> an address list containing recipients */ 6 60 3 recipients_result_list_ptr pointer; /* set -> recipients_result_list for this address list */ 6 61 6 62 dcl RECIPIENTS_INFO_VERSION_2 character (8) static options (constant) initial ("mlsrcpt2"); 6 63 6 64 dcl (recipients_info_ptr, recipients_result_list_ptr, expanded_recipients_result_list_ptr) pointer; 6 65 6 66 dcl (recipients_info_n_lists, recipients_result_list_n_addresses, expanded_recipients_result_list_n_entries) 6 67 fixed binary; /* used to allocate these structures */ 6 68 6 69 6 70 /* Data structure returned by the mail system recording the results of the mailing for one of the input address lists */ 6 71 6 72 dcl 1 recipients_result_list aligned based (recipients_result_list_ptr), 6 73 2 n_addresses fixed binary, /* set to # of address in corresponding address list */ 6 74 2 pad bit (36), 6 75 2 results (recipients_result_list_n_addresses refer (recipients_result_list.n_addresses)), 6 76 3 code fixed binary (35), /* set to describe results of attempted delivery */ 6 77 3 expanded_list_info, /* set to identify any failing addresses found in the 6 78* expansion of this address ... */ 6 79 4 first_entry_idx fixed binary (18) unaligned unsigned, 6 80 /* ... index of first such address in structure below ... */ 6 81 4 n_entries fixed binary (18) unaligned unsigned,/* ... # of such addresses there for this address */ 6 82 3 duplicate_info, /* set to identify the prior address (if any) for which this 6 83* is a duplicate ... */ 6 84 4 list_idx fixed binary (18) unaligned unsigned, /* ... in which list ... */ 6 85 4 address_idx fixed binary (18) unaligned unsigned, /* ... and which address in that list */ 6 86 3 explanation character (128) varying; /* explanation associated with a fatal error or the message 6 87* being queued due to a transient error */ 6 88 6 89 6 90 /* Describes fatal or transient errors for those recipients which are part of mailing lists of named groups in one of the 6 91* caller's address lists */ 6 92 6 93 dcl 1 expanded_recipients_result_list aligned based (expanded_recipients_result_list_ptr), 6 94 2 n_entries fixed binary, /* set to # of failing expanded recipients */ 6 95 2 pad bit (36), 6 96 2 entries (expanded_recipients_result_list_n_entries refer (expanded_recipients_result_list.n_entries)), 6 97 3 address_ptr pointer, /* -> the failing address from the list/group */ 6 98 3 code fixed binary (35), /* set to describe why delivery failed */ 6 99 3 parent_address, /* set to identify the original recipient of whose expansion 6 100* this address is a part ... */ 6 101 4 list_idx fixed binary (18) unaligned unsigned, /* ... in which list ... */ 6 102 4 address_idx fixed binary (18) unaligned unsigned, /* ... and which address in that list */ 6 103 3 explanation character (128) varying; /* explanation associated with a fatal error or the message 6 104* being queued due to a transient error */ 6 105 6 106 /* END INCLUDE FILE ... mlsys_deliver_info.incl.pl1 */ 516 517 7 1 /* BEGIN INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 7 2 /* Created: June 1983 by G. Palter */ 7 3 /* Modified: March 1984 by G. Palter to remove ignore_log_save option */ 7 4 7 5 /* Options for the mlsys_utils_$parse_address_control_arguments, mlsys_utils_$parse_address_list_control_arguments, and 7 6* mlsys_utils_$parse_mailbox_control_arguments entrypoints */ 7 7 7 8 dcl 1 parse_ca_options aligned based (parse_ca_options_ptr), 7 9 2 version character (8) unaligned, 7 10 2 logbox_creation_mode fixed binary, /* specifies the action to be taken if the address/mailbox is 7 11* the user's logbox, address/mailbox validation is requested, 7 12* and the logbox does not exist */ 7 13 2 savebox_creation_mode fixed binary, /* ... same as above but for any savebox */ 7 14 2 flags, 7 15 3 abort_on_errors bit (1) unaligned, /* ON => use ssu_$abort_line to report errors (ie: abort on 7 16* the first error); OFF => use ssu_$print_message */ 7 17 3 validate_addresses bit (1) unaligned, /* ON => validate the existence of the address/mailbox; 7 18* OFF => only validate the command/request line syntax */ 7 19 3 mbz bit (34) unaligned; /* must be set to ""b by the caller */ 7 20 7 21 dcl PARSE_CA_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlspca01"); 7 22 7 23 dcl parse_ca_options_ptr pointer; 7 24 7 25 7 26 /* Defined logbox/savebox creation modes */ 7 27 7 28 dcl (DONT_CREATE_MAILBOX initial (0), /* do not create the mailbox and issue an error message */ 7 29 QUERY_TO_CREATE_MAILBOX initial (1), /* ask the user for permission to create the mailbox */ 7 30 CREATE_AND_ANNOUNCE_MAILBOX initial (2), /* create the mailbox and inform the user of this action */ 7 31 SILENTLY_CREATE_MAILBOX initial (3)) /* create the mailbox but don't inform the user */ 7 32 fixed binary static options (constant); 7 33 7 34 /* END INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 518 519 520 end sdm_mbx_requests_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/02/89 0819.8 sdm_mbx_requests_.pl1 >spec>install>1079>sdm_mbx_requests_.pl1 506 1 10/27/83 2104.2 sdm_invocation.incl.pl1 >ldd>include>sdm_invocation.incl.pl1 508 2 10/27/83 2104.2 mlsys_data.incl.pl1 >ldd>include>mlsys_data.incl.pl1 510 3 05/22/86 1225.8 mlsys_message.incl.pl1 >ldd>include>mlsys_message.incl.pl1 512 4 10/27/83 2104.2 mlsys_address_list.incl.pl1 >ldd>include>mlsys_address_list.incl.pl1 514 5 10/27/83 2104.2 mlsys_address_types.incl.pl1 >ldd>include>mlsys_address_types.incl.pl1 516 6 10/27/83 2104.2 mlsys_deliver_info.incl.pl1 >ldd>include>mlsys_deliver_info.incl.pl1 518 7 06/18/84 1324.1 mlsys_parse_ca_options.incl.pl1 >ldd>include>mlsys_parse_ca_options.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 000006 constant char(8) initial packed unaligned dcl 4-12 set ref 175* ALWAYS_QUEUE_FOREIGN constant fixed bin(17,0) initial dcl 6-33 ref 147 CREATE_AND_ANNOUNCE_MAILBOX constant fixed bin(17,0) initial dcl 7-28 ref 162 DELIVER_OPTIONS_VERSION_2 000004 constant char(8) initial packed unaligned dcl 6-19 ref 145 LOGBOX_ADDRESS constant fixed bin(17,0) initial dcl 5-6 ref 232 236 MESSAGE_PREFORMATTED_BODY_SECTION constant fixed bin(17,0) initial dcl 3-285 ref 493 NOTIFY_ON_ERROR constant fixed bin(17,0) initial dcl 6-42 ref 148 ORDINARY_DELIVERY constant fixed bin(17,0) initial dcl 6-25 ref 146 PARSE_CA_OPTIONS_VERSION_1 000000 constant char(8) initial packed unaligned dcl 7-21 ref 161 PROCESSED_MESSAGE constant fixed bin(17,0) initial dcl 1-47 ref 306 353 415 464 P_sci_ptr parameter pointer dcl 56 set ref 48 131 137* 175* 178* 187* 211* 213* 220* 238* 241* 243* 248* 253* 257* 259* 285* 299* 302* 309* 332 338* 339* 347* 351* 360 366* 367* 369* 371* 377* 381* 386* 388* 392* 395* 402* 407* 411* 421 427* 428* 430* 432* 436* 440* 445* 447* 451* 454* 460* 502* P_sdm_invocation_ptr parameter pointer dcl 57 ref 48 131 134 332 335 360 363 421 424 QUERY_TO_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 7-28 ref 163 RECIPIENTS_INFO_VERSION_2 000002 constant char(8) initial packed unaligned dcl 6-62 ref 154 SAVEBOX_ADDRESS constant fixed bin(17,0) initial dcl 5-6 ref 232 abort 5 000112 automatic bit(1) level 3 packed packed unaligned dcl 69 set ref 150* 189* 191* 220 241 253 259 abort_on_errors 4 000105 automatic bit(1) level 3 packed packed unaligned dcl 68 set ref 164* acknowledge 15(01) based bit(1) level 3 in structure "sdm_invocation" packed packed unaligned dcl 1-6 in procedure "sdm_mbx_requests_" ref 152 acknowledge 5(03) 000112 automatic bit(1) level 3 in structure "local_do" packed packed unaligned dcl 69 in procedure "sdm_mbx_requests_" set ref 152* 193* 194* addr builtin function dcl 126 ref 175 175 297 297 297 297 302 302 321 321 492 address_idx 000152 automatic fixed bin(17,0) dcl 78 set ref 229* 230* address_list based structure level 1 dcl 4-6 address_list_ptr 000256 automatic pointer dcl 4-14 in procedure "sdm_mbx_requests_" set ref 228* 229 230 address_list_ptr 12 000120 automatic pointer array level 3 in structure "local_ri" dcl 71 in procedure "sdm_mbx_requests_" set ref 275* 279* 283* 292* address_ptr 000150 automatic pointer dcl 77 set ref 230* 231* 233* 234* address_type 000153 automatic fixed bin(17,0) dcl 78 set ref 231* 232 232 236 addresses 10 based pointer array level 2 dcl 4-6 ref 230 area_ptr 2 000120 automatic pointer level 3 dcl 71 set ref 155* argument based char packed unaligned dcl 62 set ref 189 189 191 193 193 194 194 196 196 197 197 199 199 200 200 204 204 204 204 207 207 207 207 211* 213* 371 371* 373 375 376* 377* 380* 381* 385* 386* 432 432* 434 435* 436* 439* 440* 444* 445* 447* argument_idx 000104 automatic fixed bin(17,0) dcl 65 set ref 171* 173 175* 184 187* 215* 215 argument_lth 000102 automatic fixed bin(21,0) dcl 64 set ref 187* 189 189 191 193 193 194 194 196 196 197 197 199 199 200 200 204 204 204 204 207 207 207 207 211 211 213 213 369* 371 371 371 373 373* 373 375 376 376 377 377 380 380 381 381 385 385 386 386 430* 432 432 432 434 435 435 436 436 439 439 440 440 444 444 445 445 447 447 argument_ptr 000100 automatic pointer dcl 63 set ref 187* 189 189 191 193 193 194 194 196 196 197 197 199 199 200 200 204 204 204 204 207 207 207 207 211 213 369* 371 371 373 375 376 377 380 381 385 386 430* 432 432 434 435 436 439 440 444 445 447 bcc 46 based pointer level 3 dcl 3-15 set ref 281* 283 bit_string_lth 4 based fixed bin(24,0) level 2 dcl 3-301 ref 497 body 62 based structure level 2 dcl 3-15 body_sections 64 based structure array level 3 dcl 3-15 set ref 492 brief 000236 automatic bit(1) dcl 83 in procedure "sdm_mbx_requests_" set ref 168* 196* 197* 302* brief 15 based bit(1) level 3 in structure "sdm_invocation" packed packed unaligned dcl 1-6 in procedure "sdm_mbx_requests_" ref 168 cc 44 based pointer level 3 dcl 3-15 set ref 277* 279 check_star_name_$entry 000042 constant entry external dcl 96 ref 391 450 cleanup 000242 stack reference condition dcl 124 ref 142 code 000241 automatic fixed bin(35,0) dcl 87 set ref 175* 178 178 178* 182 234* 235 237* 238 241* 243* 252* 253 253* 257* 297* 299 299 299 299* 306 306 309 309* 343* 344 348* 351 351* 376* 377 377* 380* 381 381* 382* 383 383 385* 386 386* 388* 391* 392 392 392 395* 399* 401 404* 408 408* 411 411* 435* 436 436* 439* 440 440* 441* 442 442 444* 445 445* 447* 450* 451 451 451 454* 458* 460 460* command_query_$yes_no 000044 constant entry external dcl 97 ref 248 402 deliver_options based structure level 1 dcl 6-6 delivery_mode 2 000112 automatic fixed bin(17,0) level 2 dcl 69 set ref 146* error_table_$bad_arg 000012 external static fixed bin(35,0) dcl 90 set ref 213* error_table_$badopt 000014 external static fixed bin(35,0) dcl 90 set ref 211* 371* 432* error_table_$noentry 000010 external static fixed bin(35,0) dcl 66 ref 383 442 error_table_$nostars 000016 external static fixed bin(35,0) dcl 90 set ref 392* 451* expand_pathname_$add_suffix 000046 constant entry external dcl 98 ref 376 385 435 444 expanded_recipients_result_list_ptr 4 000120 automatic pointer level 3 dcl 71 set ref 139* explicit_address_list_ptr 000146 automatic pointer dcl 75 set ref 139* 175* 175* 227* 228 270* 292 323 323* flags 4 000105 automatic structure level 2 in structure "local_pcao" dcl 68 in procedure "sdm_mbx_requests_" flags 15 based structure level 2 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_mbx_requests_" flags 5 000112 automatic structure level 2 in structure "local_do" dcl 69 in procedure "sdm_mbx_requests_" set ref 149* get_system_free_area_ 000050 constant entry external dcl 99 ref 155 header 10 based structure array level 3 in structure "message_user_fields_list" dcl 3-150 in procedure "sdm_mbx_requests_" header 4 based structure level 3 in structure "message_user_field_parameter" dcl 3-208 in procedure "sdm_mbx_requests_" header based structure level 2 in structure "recipients_info" dcl 6-49 in procedure "sdm_mbx_requests_" header 64 based structure array level 4 in structure "message" dcl 3-15 in procedure "sdm_mbx_requests_" header based structure level 2 in structure "message_body_section" dcl 3-274 in procedure "sdm_mbx_requests_" header based structure level 2 in structure "message_user_field" dcl 3-163 in procedure "sdm_mbx_requests_" header 4 based structure level 3 in structure "message_body_section_parameter" dcl 3-313 in procedure "sdm_mbx_requests_" header 000120 automatic structure level 2 in structure "local_ri" dcl 71 in procedure "sdm_mbx_requests_" header 30 based structure level 2 in structure "message" dcl 3-15 in procedure "sdm_mbx_requests_" idx 000276 automatic fixed bin(17,0) dcl 489 set ref 491* 492* index builtin function dcl 126 ref 189 371 373 432 invalid_address_found 000240 automatic bit(1) packed unaligned dcl 85 set ref 169* 182* 182 220 length builtin function dcl 126 ref 373 lists 12 based structure array level 2 in structure "recipients_info" dcl 6-49 in procedure "sdm_mbx_requests_" lists 12 000120 automatic structure array level 2 in structure "local_ri" dcl 71 in procedure "sdm_mbx_requests_" set ref 139* local_do 000112 automatic structure level 1 dcl 69 set ref 297 297 local_pcao 000105 automatic structure level 1 dcl 68 set ref 175 175 local_ri 000120 automatic structure level 1 dcl 71 set ref 297 297 302 302 321 321 logbox_creation_mode 2 000105 automatic fixed bin(17,0) level 2 dcl 68 set ref 162* mail_system_$copy_message 000052 constant entry external dcl 101 ref 458 mail_system_$deliver_message 000054 constant entry external dcl 102 ref 297 mail_system_$free_address_list 000056 constant entry external dcl 103 ref 323 mail_system_$get_address_pathname 000060 constant entry external dcl 104 ref 233 345 mail_system_$get_address_type 000062 constant entry external dcl 105 ref 231 mail_system_$log_message 000064 constant entry external dcl 106 ref 343 mail_system_$save_message 000066 constant entry external dcl 107 ref 399 404 mail_system_$validate_address 000070 constant entry external dcl 108 ref 234 mbx_dirname 000154 automatic char(168) packed unaligned dcl 80 set ref 233* 238* 238* 241* 241* 243* 243* 248* 248* 252* 253* 253* 257* 257* 345* 347* 347* 376* 382* 385* 392* 392* 395* 395* 399* 402* 402* 404* 411* 411* 435* 441* 444* 451* 451* 454* 454* 458* 460* 460* mbx_ename 000226 automatic char(32) packed unaligned dcl 81 set ref 233* 238* 238* 241* 241* 243* 243* 248* 248* 252* 253* 253* 257* 257* 345* 347* 347* 376* 380* 382* 385* 388* 391* 392* 392* 395* 395* 399* 402* 402* 404* 411* 411* 435* 439* 441* 444* 450* 451* 451* 454* 454* 458* 460* 460* mbz 4(02) 000105 automatic bit(34) level 3 packed packed unaligned dcl 68 set ref 166* message based structure level 1 dcl 3-15 message_bit_string_body_section based structure level 1 dcl 3-301 message_body_section based structure level 1 dcl 3-274 message_body_section_ptr 000254 automatic pointer dcl 3-280 set ref 492* 493 493 497 message_envelope based structure level 1 dcl 3-61 message_info 6 based structure level 2 dcl 1-6 message_preformatted_body_section based structure level 1 dcl 3-292 message_ptr 000252 automatic pointer dcl 3-53 in procedure "sdm_mbx_requests_" set ref 135* 273 275 277 279 281 283 297* 336* 343* 364* 399* 404* 425* 458* 491 492 message_ptr 6 based pointer level 3 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_mbx_requests_" ref 135 336 364 425 message_redistribution based structure level 1 dcl 3-122 message_reference based structure level 1 dcl 3-234 message_state 10 based fixed bin(17,0) level 3 dcl 1-6 set ref 306* 353* 415* 464* message_text_field based structure level 1 dcl 3-260 message_user_field based structure level 1 dcl 3-163 mlsys_data_$user_logbox_address 000124 external static pointer dcl 2-15 set ref 345* mlsys_et_$ca_parse_failed 000020 external static fixed bin(35,0) dcl 90 ref 178 182 mlsys_et_$empty_message 000022 external static fixed bin(35,0) dcl 90 set ref 502* mlsys_et_$logbox_created 000024 external static fixed bin(35,0) dcl 90 ref 344 mlsys_et_$message_not_sent 000026 external static fixed bin(35,0) dcl 90 ref 299 mlsys_et_$message_partially_sent 000030 external static fixed bin(35,0) dcl 90 ref 299 306 mlsys_et_$no_mailbox 000032 external static fixed bin(35,0) dcl 90 ref 235 mlsys_et_$no_recipients 000034 external static fixed bin(35,0) dcl 90 set ref 285* mlsys_et_$no_savebox 000036 external static fixed bin(35,0) dcl 90 ref 401 mlsys_et_$savebox_created 000040 external static fixed bin(35,0) dcl 90 ref 408 mlsys_utils_$create_logbox 000072 constant entry external dcl 109 ref 237 mlsys_utils_$create_savebox 000074 constant entry external dcl 110 ref 252 mlsys_utils_$free_delivery_results 000076 constant entry external dcl 111 ref 321 mlsys_utils_$parse_address_list_control_args 000100 constant entry external dcl 112 ref 175 mlsys_utils_$print_delivery_results 000102 constant entry external dcl 114 ref 302 n_addresses 6 based fixed bin(17,0) level 2 dcl 4-6 ref 229 478 n_arguments 000103 automatic fixed bin(17,0) dcl 65 set ref 137* 173 184 338* 339 366* 367 427* 428 n_body_sections 11 based fixed bin(17,0) level 2 dcl 3-15 ref 491 n_lists 11 000120 automatic fixed bin(17,0) level 3 dcl 71 set ref 156* 272* 274* 274 275 278* 278 279 282* 282 283 285 291* notify 15(02) based bit(1) level 3 packed packed unaligned dcl 1-6 ref 151 null builtin function dcl 126 ref 139 323 382 382 441 441 475 p_address_list_ptr parameter pointer dcl 473 ref 470 475 478 parse_ca_options based structure level 1 dcl 7-8 pathname_ 000104 constant entry external dcl 115 ref 238 238 241 241 243 243 248 248 253 253 257 257 347 347 392 392 395 395 402 402 411 411 451 451 454 454 460 460 queued_notification_mode 4 000112 automatic fixed bin(17,0) level 2 dcl 69 set ref 148* queueing_mode 3 000112 automatic fixed bin(17,0) level 2 dcl 69 set ref 147* recipient_notification 5(02) 000112 automatic bit(1) level 3 packed packed unaligned dcl 69 set ref 151* 199* 200* recipients_info based structure level 1 dcl 6-49 reverse builtin function dcl 126 ref 373 373 savebox_creation_mode 3 000105 automatic fixed bin(17,0) level 2 dcl 68 set ref 163* sdm_invocation based structure level 1 dcl 1-6 sdm_invocation_ptr 000250 automatic pointer dcl 1-38 set ref 134* 135 151 152 168 306 335* 336 353 363* 364 415 424* 425 464 search builtin function dcl 126 ref 375 434 search_paths_$find_dir 000106 constant entry external dcl 116 ref 382 441 section_type based fixed bin(17,0) level 3 dcl 3-274 ref 493 ssu_$abort_line 000112 constant entry external dcl 118 ref 178 211 213 220 241 253 259 285 299 309 339 351 367 371 377 381 386 388 392 395 407 411 428 432 436 440 445 447 451 454 460 502 ssu_$arg_count 000114 constant entry external dcl 119 ref 137 338 366 427 ssu_$arg_ptr 000116 constant entry external dcl 120 ref 187 369 430 ssu_$get_subsystem_and_request_name 000120 constant entry external dcl 121 ref 248 402 ssu_$print_message 000122 constant entry external dcl 122 ref 238 243 257 347 string builtin function dcl 126 set ref 149* suffixed_name_$make 000110 constant entry external dcl 117 ref 380 439 text_lth 4 based fixed bin(21,0) level 2 dcl 3-292 ref 493 to 42 based pointer level 3 dcl 3-15 set ref 273* 275 try_to_create 000237 automatic bit(1) packed unaligned dcl 84 set ref 248* 251 402* 404 validate_addresses 4(01) 000105 automatic bit(1) level 3 packed packed unaligned dcl 68 set ref 165* version 000112 automatic char(8) level 2 in structure "local_do" packed packed unaligned dcl 69 in procedure "sdm_mbx_requests_" set ref 145* version 000105 automatic char(8) level 2 in structure "local_pcao" packed packed unaligned dcl 68 in procedure "sdm_mbx_requests_" set ref 161* version 000120 automatic char(8) level 3 in structure "local_ri" packed packed unaligned dcl 71 in procedure "sdm_mbx_requests_" set ref 154* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ALWAYS_NOTIFY internal static fixed bin(17,0) initial dcl 6-42 ALWAYS_QUEUE internal static fixed bin(17,0) initial dcl 6-33 DONT_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 7-28 EXPRESS_DELIVERY internal static fixed bin(17,0) initial dcl 6-25 FOREIGN_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 FORUM_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 INTERACTIVE_DELIVERY internal static fixed bin(17,0) initial dcl 6-25 INVALID_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 MAILBOX_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 MAILING_LIST_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 MAIL_TABLE_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 MESSAGE_ADDRESS_LIST_USER_FIELD internal static fixed bin(17,0) initial dcl 3-174 MESSAGE_BIT_STRING_BODY_SECTION internal static fixed bin(17,0) initial dcl 3-285 MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 3-318 MESSAGE_DATE_USER_FIELD internal static fixed bin(17,0) initial dcl 3-174 MESSAGE_ENVELOPE_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 3-79 MESSAGE_INTEGER_USER_FIELD internal static fixed bin(17,0) initial dcl 3-174 MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 3-117 MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 3-144 MESSAGE_REFERENCES_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 3-227 MESSAGE_REFERENCE_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 3-253 MESSAGE_TEXT_USER_FIELD internal static fixed bin(17,0) initial dcl 3-174 MESSAGE_TRACE_VERSION_2 internal static char(8) initial packed unaligned dcl 3-103 MESSAGE_USER_FIELDS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 3-158 MESSAGE_USER_FIELD_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 3-213 MESSAGE_VERSION_2 internal static char(8) initial packed unaligned dcl 3-49 MODIFIED_MESSAGE internal static fixed bin(17,0) initial dcl 1-47 NAMED_GROUP_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 NEVER_NOTIFY internal static fixed bin(17,0) initial dcl 6-42 NEVER_QUEUE internal static fixed bin(17,0) initial dcl 6-33 QUEUE_FOREIGN_WHEN_NEEDED internal static fixed bin(17,0) initial dcl 6-33 QUEUE_WHEN_NEEDED internal static fixed bin(17,0) initial dcl 6-33 SDM_INVOCATION internal static char(8) initial packed unaligned dcl 1-36 SILENTLY_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 7-28 UNPROCESSED_MESSAGE internal static fixed bin(17,0) initial dcl 1-47 USER_MAILBOX_ADDRESS internal static fixed bin(17,0) initial dcl 5-6 address_list_n_addresses automatic fixed bin(17,0) dcl 4-16 deliver_options_ptr automatic pointer dcl 6-21 expanded_recipients_result_list based structure level 1 dcl 6-93 expanded_recipients_result_list_n_entries automatic fixed bin(17,0) dcl 6-66 expanded_recipients_result_list_ptr automatic pointer dcl 6-64 message_address_list_user_field based structure level 1 dcl 3-190 message_bit_string_body_section_bit_string based bit packed unaligned dcl 3-307 message_body_section_parameter based structure level 1 dcl 3-313 message_body_section_parameter_ptr automatic pointer dcl 3-320 message_date_user_field based structure level 1 dcl 3-195 message_envelope_parameter based structure level 1 dcl 3-74 message_envelope_parameter_ptr automatic pointer dcl 3-81 message_envelope_ptr automatic pointer dcl 3-69 message_integer_user_field based structure level 1 dcl 3-200 message_n_body_sections automatic fixed bin(17,0) dcl 3-55 message_n_redistributions automatic fixed bin(17,0) dcl 3-55 message_n_user_fields automatic fixed bin(17,0) dcl 3-55 message_preformatted_body_section_text based char packed unaligned dcl 3-298 message_redistribution_comment based char packed unaligned dcl 3-131 message_redistribution_parameter based structure level 1 dcl 3-139 message_redistribution_parameter_ptr automatic pointer dcl 3-146 message_redistribution_ptr automatic pointer dcl 3-134 message_redistributions_list based structure level 1 dcl 3-109 message_reference_parameter based structure level 1 dcl 3-248 message_reference_parameter_ptr automatic pointer dcl 3-255 message_reference_ptr automatic pointer dcl 3-243 message_reference_subject based char packed unaligned dcl 3-240 message_references_list based structure level 1 dcl 3-219 message_references_list_n_references automatic fixed bin(17,0) dcl 3-55 message_references_list_ptr automatic pointer dcl 3-229 message_subject based char packed unaligned dcl 3-51 message_text_field_ptr automatic pointer dcl 3-270 message_text_field_text based char packed unaligned dcl 3-268 message_text_user_field based structure level 1 dcl 3-183 message_text_user_field_text based char packed unaligned dcl 3-187 message_trace based structure level 1 dcl 3-87 message_trace_n_relays automatic fixed bin(17,0) dcl 3-55 message_trace_ptr automatic pointer dcl 3-105 message_user_field_parameter based structure level 1 dcl 3-208 message_user_field_parameter_ptr automatic pointer dcl 3-215 message_user_field_ptr automatic pointer dcl 3-169 message_user_fields_list based structure level 1 dcl 3-150 mlsys_data_$system_directory external static char(168) packed unaligned dcl 2-7 mlsys_data_$user_default_mailbox_address external static pointer dcl 2-12 mlsys_data_$user_mail_table_address external static pointer dcl 2-14 parse_ca_options_ptr automatic pointer dcl 7-23 recipients_info_n_lists automatic fixed bin(17,0) dcl 6-66 recipients_info_ptr automatic pointer dcl 6-64 recipients_result_list based structure level 1 dcl 6-72 recipients_result_list_n_addresses automatic fixed bin(17,0) dcl 6-66 recipients_result_list_ptr automatic pointer dcl 6-64 sdm_area based area(1024) dcl 1-40 NAMES DECLARED BY EXPLICIT CONTEXT. abort_if_body_is_empty 004716 constant entry internal dcl 486 ref 341 397 456 cleanup_after_send_request 004636 constant entry internal dcl 318 ref 142 304 copy_request 003623 constant entry external dcl 421 is_empty_list 004677 constant entry internal dcl 470 ref 227 270 273 277 281 log_request 002152 constant entry external dcl 332 save_request 002415 constant entry external dcl 360 sdm_mbx_requests_ 000246 constant entry external dcl 48 send_request 000256 constant entry external dcl 131 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6002 6130 5206 6012 Length 6612 5206 126 445 573 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sdm_mbx_requests_ 354 external procedure is an external procedure. on unit on line 142 64 on unit cleanup_after_send_request 74 internal procedure is called by several nonquick procedures. is_empty_list internal procedure shares stack frame of external procedure sdm_mbx_requests_. abort_if_body_is_empty internal procedure shares stack frame of external procedure sdm_mbx_requests_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME sdm_mbx_requests_ 000100 argument_ptr sdm_mbx_requests_ 000102 argument_lth sdm_mbx_requests_ 000103 n_arguments sdm_mbx_requests_ 000104 argument_idx sdm_mbx_requests_ 000105 local_pcao sdm_mbx_requests_ 000112 local_do sdm_mbx_requests_ 000120 local_ri sdm_mbx_requests_ 000146 explicit_address_list_ptr sdm_mbx_requests_ 000150 address_ptr sdm_mbx_requests_ 000152 address_idx sdm_mbx_requests_ 000153 address_type sdm_mbx_requests_ 000154 mbx_dirname sdm_mbx_requests_ 000226 mbx_ename sdm_mbx_requests_ 000236 brief sdm_mbx_requests_ 000237 try_to_create sdm_mbx_requests_ 000240 invalid_address_found sdm_mbx_requests_ 000241 code sdm_mbx_requests_ 000250 sdm_invocation_ptr sdm_mbx_requests_ 000252 message_ptr sdm_mbx_requests_ 000254 message_body_section_ptr sdm_mbx_requests_ 000256 address_list_ptr sdm_mbx_requests_ 000276 idx abort_if_body_is_empty THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out_desc call_ext_out call_int_this call_int_other return_mac enable_op ext_entry int_entry set_chars_eis ix_rev_chars THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. check_star_name_$entry command_query_$yes_no expand_pathname_$add_suffix get_system_free_area_ mail_system_$copy_message mail_system_$deliver_message mail_system_$free_address_list mail_system_$get_address_pathname mail_system_$get_address_type mail_system_$log_message mail_system_$save_message mail_system_$validate_address mlsys_utils_$create_logbox mlsys_utils_$create_savebox mlsys_utils_$free_delivery_results mlsys_utils_$parse_address_list_control_args mlsys_utils_$print_delivery_results pathname_ search_paths_$find_dir ssu_$abort_line ssu_$arg_count ssu_$arg_ptr ssu_$get_subsystem_and_request_name ssu_$print_message suffixed_name_$make THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$badopt error_table_$noentry error_table_$nostars mlsys_data_$user_logbox_address mlsys_et_$ca_parse_failed mlsys_et_$empty_message mlsys_et_$logbox_created mlsys_et_$message_not_sent mlsys_et_$message_partially_sent mlsys_et_$no_mailbox mlsys_et_$no_recipients mlsys_et_$no_savebox mlsys_et_$savebox_created LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 48 000242 51 000253 131 000254 134 000263 135 000267 137 000271 139 000302 142 000321 145 000343 146 000345 147 000347 148 000351 149 000353 150 000354 151 000356 152 000363 154 000370 155 000372 156 000401 161 000402 162 000405 163 000407 164 000411 165 000413 166 000415 168 000417 169 000423 171 000424 173 000426 175 000431 178 000456 182 000507 184 000514 187 000517 189 000534 191 000557 193 000566 194 000601 196 000614 197 000627 199 000641 200 000654 204 000667 207 000710 211 000731 213 000765 215 001020 217 001021 220 001022 227 001046 228 001053 229 001055 230 001065 231 001071 232 001105 233 001112 234 001147 235 001164 236 001170 237 001173 238 001201 241 001257 243 001333 245 001403 248 001404 251 001476 252 001501 253 001522 257 001600 259 001651 264 001673 270 001675 272 001702 273 001703 274 001717 275 001720 277 001725 278 001741 279 001742 281 001747 282 001763 283 001764 285 001771 287 002011 291 002012 292 002014 297 002016 299 002037 302 002072 304 002113 306 002117 309 002127 312 002147 332 002150 335 002157 336 002163 338 002165 339 002176 341 002226 343 002227 344 002244 345 002250 347 002304 348 002357 351 002360 353 002407 355 002412 360 002413 363 002422 364 002426 366 002430 367 002441 369 002472 371 002512 373 002561 375 002573 376 002607 377 002645 378 002702 380 002703 381 002735 382 002772 383 003033 385 003040 386 003075 387 003132 388 003133 391 003162 392 003177 395 003256 397 003326 399 003327 401 003362 402 003366 404 003460 407 003517 408 003536 411 003543 415 003615 417 003620 421 003621 424 003630 425 003634 427 003636 428 003647 430 003703 432 003723 434 003772 435 004006 436 004044 437 004101 439 004102 440 004134 441 004171 442 004232 444 004237 445 004274 446 004331 447 004332 450 004364 451 004401 454 004460 456 004530 458 004531 460 004556 464 004631 466 004634 318 004635 321 004643 323 004657 326 004676 470 004677 475 004701 478 004710 486 004716 491 004717 492 004727 493 004733 496 004741 497 004742 499 004745 502 004747 504 004765 ----------------------------------------------------------- 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