COMPILATION LISTING OF SEGMENT send_mail Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 04/09/85 1322.5 mst Tue Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: off */ 11 12 /* The Multics send_mail command */ 13 14 /* Written: 1 January 1978 by G. Palter */ 15 /* Modified: 12 January 1978 by G. Palter to reflect change in sdm_subsystem_ return codes */ 16 /* Modified: 15 January 1979 by G. Palter to add "-abort"/"-no_abort" and stop recognizing the 17* undocumented "-file_input" */ 18 /* Modified: 1 February 1979 by G. Palter to enforce a minimum line length of twenty */ 19 /* Modified: 9 February 1979 by G. Palter to fix bug 038 wherein -save command line option produced 20* unpredictable results */ 21 /* Modified: 25 December 1979 by W. Olin Sibert to support auto_fill mode */ 22 /* Modified: 4 April 1980 by G. Palter to fix bug #077 -- Use of send_mail as an active function is highly unrewarding */ 23 /* Modified: 25 April 1980 by G. Palter to implement suggestion #084 -- Provide abbrev expansion of read_mail and 24* send_mail request lines; add the "-abbrev", "-no_abbrev", and "-profile" control arguments */ 25 /* Modified: 20 May 1980 by G. Palter to fix bug #0314 -- error message printed for a non-existant profile contains an 26* extraneous "]" */ 27 /* Modified: 4 June 1980 by G. Palter to implement suggestion #0287 -- if a reply is being created and the user exits 28* send_mail without sending the reply, the "-delete" control argument of the "reply" request should be ignored */ 29 /* Modified: 27 January 1981 by G. Palter to use cu_$arg_count rather than cu_$af_return_arg */ 30 /* Modified: 16 February 1982 by G. Palter to convert to version 4 sdm_subsystem_info -- default profiles */ 31 /* Modified: 2 March 1982 by G. Palter to eliminate a window which prevented subsystem invocations from being destroyed */ 32 /* Modified: 17 September 1982 by G. Palter to add -debug/-no_debug, change definition of -fill and eliminate -auto_fill, 33* and change prompting and request loop control */ 34 /* Modified: August 1983 by G. Palter to convert to the new mail system interface. As part of this conversion: 35* (1) The -header/-no_header and -message_id/-no_message_id control arguments are still accepted but no longer have 36* any meaning as the user ring can not control the amount of header information recorded in a message; 37* (2) The -bcc control argument is accepted to add addresses the the bcc field (mail_system 0284); 38* (3) Logbox and savebox addresses are now added to the bcc field instead of the cc field; 39* (4) The command will create the logbox and offer to create saveboxes before reading the message text; if the user 40* refuses to create the savebox, it will be considered an invalid address (mail_system 0228); 41* (5) The command will, by default, abort before asking for the message text if any of the addresses on the command 42* line is invalid (mail_system 0191, 229). The -abort/-no_abort control argument is changed to indicate whether 43* such invalid addresses should abort the command or cause send_mail to enter the request loop */ 44 /* Modified: April 1984 by G. Palter to fix mail system error #0433 -- the send_mail command and all send_mail and 45* read_mail requests which accept multiple addresses as arguments do not properly parse "-log -at HOST" */ 46 47 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen */ 48 49 50 send_mail: 51 sdm: 52 procedure () options (variable); 53 54 55 dcl 1 local_pcao aligned like parse_ca_options; 56 57 dcl argument character (argument_lth) unaligned based (argument_ptr); 58 dcl argument_ptr pointer; 59 dcl argument_lth fixed binary (21); 60 dcl (n_arguments, argument_idx) fixed binary; 61 62 dcl profile_pathname character (profile_pathname_lth) unaligned based (profile_pathname_ptr); 63 dcl profile_dirname character (168); 64 dcl profile_ename character (32); 65 dcl profile_pathname_ptr pointer; 66 dcl profile_pathname_lth fixed binary (21); 67 dcl (profile_pathname_given, abbrev_ca_given) bit (1) aligned; 68 69 dcl input_filename character (input_filename_lth) unaligned based (input_filename_ptr); 70 dcl (input_filename_ptr, input_file_ptr) pointer; 71 dcl input_filename_lth fixed binary (21); 72 73 dcl current_address_list_ptr pointer based (current_address_list_ptr_ptr); 74 dcl current_address_list_ptr_ptr pointer; 75 76 dcl sci_ptr pointer; /* -> subsystem used to parse command line arguments */ 77 dcl sdm_invocation_ptr pointer; /* -> description of the send_mail invocation */ 78 79 dcl abort bit (1) aligned; /* ON => don't enter subsystem if any addresses are invalid */ 80 dcl found_invalid_address bit (1) aligned; /* ON => there really are some invalid addresses present */ 81 82 dcl code fixed binary (35); 83 84 dcl SEND_MAIL character (32) static options (constant) initial ("send_mail"); 85 86 /* format: off */ 87 dcl (error_table_$bad_arg, error_table_$bad_conversion, error_table_$badopt, error_table_$fatal_error, error_table_$noarg, 88 emf_et_$send_mail_aborted, mlsys_et_$ca_parse_failed, mlsys_et_$cant_parse_irt_field) 89 fixed binary (35) external; 90 /* format: on */ 91 92 dcl active_fnc_err_ entry () options (variable); 93 dcl com_err_ entry () options (variable); 94 dcl cv_dec_check_ entry (character (*), fixed binary (35)) returns (fixed binary (35)); 95 dcl cu_$af_return_arg entry (fixed binary, pointer, fixed binary (21)) returns (fixed binary (35)); 96 dcl cu_$arg_list_ptr entry () returns (pointer); 97 dcl expand_pathname_ entry (character (*), character (*), character (*), fixed binary (35)); 98 dcl expand_pathname_$add_suffix entry (character (*), character (*), character (*), character (*), fixed binary (35)); 99 dcl initiate_file_ entry (character (*), character (*), bit (*), pointer, fixed binary (24), fixed binary (35)); 100 dcl mlsys_utils_$parse_address_list_control_args 101 entry (pointer, fixed binary, pointer, character (8), pointer, pointer, fixed binary (35)); 102 dcl pathname_ entry (character (*), character (*)) returns (character (168)); 103 dcl sdm_subsystem_$create_invocation entry (character (8), pointer, pointer, fixed binary (35)); 104 dcl sdm_subsystem_$destroy_invocation entry (pointer, pointer); 105 dcl sdm_subsystem_$subsystem entry (pointer, pointer, fixed binary (35)); 106 dcl ssu_$abort_subsystem entry () options (variable); 107 dcl ssu_$arg_count entry (pointer, fixed binary); 108 dcl ssu_$arg_ptr entry (pointer, fixed binary, pointer, fixed binary (21)); 109 dcl ssu_$destroy_invocation entry (pointer); 110 dcl ssu_$standalone_invocation entry (pointer, character (*), character (*), pointer, entry, fixed binary (35)); 111 dcl terminate_file_ entry (pointer, fixed binary (24), bit (*), fixed binary (35)); 112 113 dcl cleanup condition; 114 115 dcl (addr, index, null) builtin; 116 117 /* send_mail: sdm: procedure () options (variable) */ 118 119 sci_ptr, /* for cleanup handler */ 120 sdm_invocation_ptr, sdm_subsystem_info_ptr, input_file_ptr = null (); 121 122 on condition (cleanup) call cleanup_send_mail_command (); 123 124 call ssu_$standalone_invocation (sci_ptr, SEND_MAIL, "argument-parse", cu_$arg_list_ptr (), 125 abort_send_mail_command, code); 126 if code ^= 0 then do; /* please forgive the following, but ... */ 127 if cu_$af_return_arg (0, (null ()), (0)) = 0 then 128 call active_fnc_err_ (code, SEND_MAIL, "Can not establish standalone subsystem invocation."); 129 else call com_err_ (code, SEND_MAIL, "Can not establish standalone subsystem invocation."); 130 return; 131 end; 132 133 call ssu_$arg_count (sci_ptr, n_arguments); /* aborts if not a command */ 134 135 call sdm_subsystem_$create_invocation (SDM_SUBSYSTEM_INFO_VERSION_6, sdm_invocation_ptr, sdm_subsystem_info_ptr, 136 code); 137 if code ^= 0 then call ssu_$abort_subsystem (sci_ptr, code, "Creating the subsystem."); 138 139 140 /* Argument processing */ 141 142 current_address_list_ptr_ptr = addr (sdm_subsystem_info.to); 143 /* defaults to -to */ 144 145 local_pcao.version = PARSE_CA_OPTIONS_VERSION_1; 146 local_pcao.logbox_creation_mode = CREATE_AND_ANNOUNCE_MAILBOX; 147 local_pcao.savebox_creation_mode = QUERY_TO_CREATE_MAILBOX; 148 local_pcao.abort_on_errors = "0"b; /* can't abort in case -no_abort appears somewhere */ 149 local_pcao.validate_addresses = "1"b; /* always check validity of addresses */ 150 local_pcao.mbz = ""b; 151 152 abort = "1"b; /* abort if any invalid addresses are found */ 153 found_invalid_address = "0"b; /* until proven otherwise */ 154 155 abbrev_ca_given = "0"b; /* haven't seen -abbrev/-no_abbrev yet */ 156 profile_pathname_given = "0"b; /* haven't seen -profile yet */ 157 158 argument_idx = 1; /* start at the beginning */ 159 160 do while (argument_idx <= n_arguments); 161 162 call mlsys_utils_$parse_address_list_control_args (sci_ptr, argument_idx, addr (local_pcao), 163 ADDRESS_LIST_VERSION_2, current_address_list_ptr, sdm_subsystem_info.bcc, code); 164 165 if (code ^= 0) & (code ^= mlsys_et_$ca_parse_failed) then 166 call ssu_$abort_subsystem (sci_ptr, code, "Parsing control arguments."); 167 168 found_invalid_address = found_invalid_address | (code = mlsys_et_$ca_parse_failed); 169 /* need to know whether to abort or not ... */ 170 171 if argument_idx <= n_arguments then do; 172 173 /*** An argument not recognized by the mail system: must be one of ours */ 174 call ssu_$arg_ptr (sci_ptr, argument_idx, argument_ptr, argument_lth); 175 176 if index (argument, "-") = 1 then /* a control argument */ 177 if (argument = "-terminal_input") | (argument = "-ti") then 178 sdm_subsystem_info.input_type = TERMINAL_INPUT; 179 else if (argument = "-input_file") | (argument = "-if") then do; 180 call get_next_argument ("A pathname"); 181 sdm_subsystem_info.input_type = FILE_INPUT; 182 input_filename_ptr = argument_ptr; 183 input_filename_lth = argument_lth; 184 end; /* save it for later processing */ 185 186 else if argument = "-from" then current_address_list_ptr_ptr = addr (sdm_subsystem_info.from); 187 else if (argument = "-reply_to") | (argument = "-rpt") then 188 current_address_list_ptr_ptr = addr (sdm_subsystem_info.reply_to); 189 else if argument = "-to" then current_address_list_ptr_ptr = addr (sdm_subsystem_info.to); 190 else if argument = "-cc" then current_address_list_ptr_ptr = addr (sdm_subsystem_info.cc); 191 else if argument = "-bcc" then current_address_list_ptr_ptr = addr (sdm_subsystem_info.bcc); 192 193 else if (argument = "-subject") | (argument = "-sj") then do; 194 call get_next_argument ("A string"); 195 sdm_subsystem_info.subject_given = "1"b; 196 sdm_subsystem_info.subject_ptr = argument_ptr; 197 sdm_subsystem_info.subject_lth = argument_lth; 198 end; 199 else if (argument = "-no_subject") | (argument = "-nsj") then do; 200 sdm_subsystem_info.subject_given = "1"b; 201 sdm_subsystem_info.subject_lth = 0; 202 end; 203 204 else if argument = "-abort" then abort = "1"b; 205 else if argument = "-no_abort" then abort = "0"b; 206 207 else if (argument = "-acknowledge") | (argument = "-ack") then 208 sdm_subsystem_info.acknowledge = "1"b; 209 else if (argument = "-no_acknowledge") | (argument = "-nack") then 210 sdm_subsystem_info.acknowledge = "0"b; 211 212 else if (argument = "-brief") | (argument = "-bf") then sdm_subsystem_info.brief = "1"b; 213 else if (argument = "-long") | (argument = "-lg") then sdm_subsystem_info.brief = "0"b; 214 215 else if (argument = "-fill") | (argument = "-fi") then sdm_subsystem_info.fill_control = FILL; 216 else if (argument = "-no_fill") | (argument = "-nfi") then 217 sdm_subsystem_info.fill_control = NO_FILL; 218 else if (argument = "-line_length") | (argument = "-ll") then do; 219 call get_next_argument ("A number"); 220 sdm_subsystem_info.fill_width = cv_dec_check_ (argument, code); 221 if code ^= 0 then 222 call ssu_$abort_subsystem (sci_ptr, error_table_$bad_conversion, "-line_length ""^a""", 223 argument); 224 if sdm_subsystem_info.fill_width < 31 then 225 call ssu_$abort_subsystem (sci_ptr, 0, "Line length must be greater than 30."); 226 end; 227 228 else if (argument = "-notify") | (argument = "-nt") then sdm_subsystem_info.notify = "1"b; 229 else if (argument = "-no_notify") | (argument = "-nnt") then sdm_subsystem_info.notify = "0"b; 230 231 /*** Control arguments required by the MCR boards despite the furious objections of the author */ 232 else if argument = "-auto_write" then sdm_subsystem_info.auto_write = "1"b; 233 else if argument = "-no_auto_write" then sdm_subsystem_info.auto_write = "0"b; 234 235 /*** Control arguments which are now obsolete: delete in MR11 */ 236 else if (argument = "-in_reply_to") | (argument = "-irt") then do; 237 call get_next_argument ("A string"); 238 call ssu_$abort_subsystem (sci_ptr, mlsys_et_$cant_parse_irt_field, "-in_reply_to ""^a""", 239 argument); 240 end; 241 else if (argument = "-header") | (argument = "-he") | (argument = "-no_header") 242 | (argument = "-nhe") then 243 ; 244 else if (argument = "-message_id") | (argument = "-mid") | (argument = "-no_message_id") 245 | (argument = "-nmid") then 246 ; 247 248 /*** Standard subsystem control arguments */ 249 else if (argument = "-abbrev") | (argument = "-ab") then 250 sdm_subsystem_info.abbrev, abbrev_ca_given = "1"b; 251 else if (argument = "-no_abbrev") | (argument = "-nab") then do; 252 sdm_subsystem_info.abbrev = "0"b; 253 abbrev_ca_given = "1"b; 254 end; 255 else if (argument = "-profile") | (argument = "-pf") then do; 256 call get_next_argument ("A pathname"); 257 profile_pathname_given = "1"b; 258 profile_pathname_ptr = argument_ptr; 259 profile_pathname_lth = argument_lth; 260 end; /* save for later processing */ 261 262 else if (argument = "-debug") | (argument = "-db") then sdm_subsystem_info.debug = "1"b; 263 else if (argument = "-no_debug") | (argument = "-ndb") then sdm_subsystem_info.debug = "0"b; 264 265 else if (argument = "-prompt") | (argument = "-pmt") then do; 266 call get_next_argument ("A string"); 267 if argument_lth = 0 then /* same as -no_prompt */ 268 sdm_subsystem_info.prompt_control.prompt_control = NO_PROMPT; 269 else do; 270 sdm_subsystem_info.prompt_control.prompt_control = USE_PROMPT_STRING; 271 sdm_subsystem_info.prompt_string = argument; 272 end; 273 end; 274 else if (argument = "-no_prompt") | (argument = "-npmt") then 275 sdm_subsystem_info.prompt_control.prompt_control = NO_PROMPT; 276 277 else if (argument = "-request") | (argument = "-rq") then do; 278 call get_next_argument ("A string"); 279 sdm_subsystem_info.initial_requests_ptr = argument_ptr; 280 sdm_subsystem_info.initial_requests_lth = argument_lth; 281 end; 282 283 else if (argument = "-request_loop") | (argument = "-rql") then 284 sdm_subsystem_info.request_loop_control = REQUEST_LOOP; 285 else if (argument = "-no_request_loop") | (argument = "-nrql") then 286 sdm_subsystem_info.request_loop_control = NO_REQUEST_LOOP; 287 288 else call ssu_$abort_subsystem (sci_ptr, error_table_$badopt, """^a""", argument); 289 290 else call ssu_$abort_subsystem (sci_ptr, error_table_$bad_arg, """^a""", argument); 291 292 argument_idx = argument_idx + 1; /* continue with next argument (if any) */ 293 end; 294 end; 295 296 297 /* Verify that the input file requested by the user actually exists */ 298 299 if sdm_subsystem_info.input_type = FILE_INPUT then do; 300 301 call expand_pathname_ (input_filename, sdm_subsystem_info.input_file.dname, 302 sdm_subsystem_info.input_file.ename, code); 303 if code ^= 0 then call ssu_$abort_subsystem (sci_ptr, code, "-input_file ""^a""", input_filename); 304 305 call initiate_file_ (sdm_subsystem_info.input_file.dname, sdm_subsystem_info.input_file.ename, R_ACCESS, 306 input_file_ptr, (0), code); 307 if code ^= 0 then 308 call ssu_$abort_subsystem (sci_ptr, code, "-input_file ""^a""", 309 pathname_ (sdm_subsystem_info.input_file.dname, sdm_subsystem_info.input_file.ename)); 310 311 call terminate_file_ (input_file_ptr, 0, TERM_FILE_TERM, (0)); 312 end; 313 314 315 /* Initiate the subsystem profile requested by the user */ 316 317 if profile_pathname_given then do; 318 319 call expand_pathname_$add_suffix (profile_pathname, "profile", profile_dirname, profile_ename, code); 320 if code ^= 0 then call ssu_$abort_subsystem (sci_ptr, code, "-profile ""^a""", profile_pathname); 321 322 call initiate_file_ (profile_dirname, profile_ename, R_ACCESS, sdm_subsystem_info.default_profile_ptr, (0), 323 code); 324 if code ^= 0 then 325 call ssu_$abort_subsystem (sci_ptr, code, "-profile ""^a""", 326 pathname_ (profile_dirname, profile_ename)); 327 328 if ^abbrev_ca_given then /* -profile implies -abbrev unless explicit -ab/-nab given */ 329 sdm_subsystem_info.abbrev = "1"b; 330 end; 331 332 333 /* Abort the entire subsystem invocation or force the subsystem to enter the request loop if invalid addresses were found 334* according to the use of -abort/-no_abort and then invoke the subsystem */ 335 336 if found_invalid_address then /* there are indeed invalid addresses ... */ 337 if abort then /* ... and the user doesn't want to continue */ 338 call ssu_$abort_subsystem (sci_ptr, 0); 339 else sdm_subsystem_info.request_loop_control = REQUEST_LOOP; 340 /* ... force the user to fix the addresses */ 341 342 call sdm_subsystem_$subsystem (sdm_invocation_ptr, sdm_subsystem_info_ptr, code); 343 344 if (code ^= 0) & (code ^= error_table_$fatal_error) & (code ^= emf_et_$send_mail_aborted) then 345 call ssu_$abort_subsystem (sci_ptr, code, "Invoking the subsystem."); 346 347 348 /* Cleanup */ 349 350 RETURN_FROM_SEND_MAIL: 351 call cleanup_send_mail_command (); 352 353 return; 354 355 /* Releases all temporary data obtained by this send_mail invocation */ 356 357 cleanup_send_mail_command: 358 procedure (); 359 360 if input_file_ptr ^= null () then call terminate_file_ (input_file_ptr, 0, TERM_FILE_TERM, (0)); 361 362 if (sdm_invocation_ptr ^= null ()) | (sdm_subsystem_info_ptr ^= null ()) then 363 call sdm_subsystem_$destroy_invocation (sdm_invocation_ptr, sdm_subsystem_info_ptr); 364 365 if sci_ptr ^= null () then call ssu_$destroy_invocation (sci_ptr); 366 367 return; 368 369 end cleanup_send_mail_command; 370 371 372 373 /* Invoked by ssu_$abort_subsystem/ssu_$abort_line to terminate the send_mail invocation */ 374 375 abort_send_mail_command: 376 procedure (); 377 378 go to RETURN_FROM_SEND_MAIL; 379 380 end abort_send_mail_command; 381 382 383 384 /* Fetches the next argument for control arguments which require values */ 385 386 get_next_argument: 387 procedure (p_string); 388 389 dcl p_string character (*) parameter; 390 391 if argument_idx = n_arguments then 392 call ssu_$abort_subsystem (sci_ptr, error_table_$noarg, "^a after ""^a"".", p_string, argument); 393 394 argument_idx = argument_idx + 1; 395 396 call ssu_$arg_ptr (sci_ptr, argument_idx, argument_ptr, argument_lth); 397 398 return; 399 400 end get_next_argument; 401 1 1 /* BEGIN INCLUDE FILE ... sdm_subsystem_info.incl.pl1 */ 1 2 /* Created: 28 December 1978 by G. Palter (version 1) */ 1 3 /* Modified: 23 January 1979 by G. Palter (version 2) */ 1 4 /* Modified: 31 May 1980 by G. Palter (version 3) -- support of the "print_original" request */ 1 5 /* Modified: 16 February 1982 by G. Palter (version 4) */ 1 6 /* Modified: 17 September 1982 by G. Palter (version 5) */ 1 7 /* Modified: August 1983 by G. Palter (version 6) -- support for the bcc field and the new definition of the 1 8* In-Reply-To field */ 1 9 1 10 1 11 /* Arguments to the send_mail subsystem */ 1 12 1 13 dcl 1 sdm_subsystem_info aligned based (sdm_subsystem_info_ptr), 1 14 2 version character (8) unaligned, 1 15 1 16 2 input_type fixed binary, /* source of message text (see below) */ 1 17 2 input_file, /* identifies file of input text when needed */ 1 18 3 dname character (168) unaligned, /* ... directory and entry name */ 1 19 3 ename character (32) unaligned, 1 20 1 21 2 address_lists, /* gives sources, destinations, etc. */ 1 22 3 from pointer, /* ... -> authors */ 1 23 3 reply_to pointer, /* ... -> destinations for a reply */ 1 24 3 to pointer, /* ... -> primary recipients */ 1 25 3 cc pointer, /* ... -> secondary recipients */ 1 26 3 bcc pointer, /* ... -> "blind" recipients */ 1 27 1 28 2 subject aligned, /* subject of message */ 1 29 3 subject_ptr pointer, /* ... -> text of subject */ 1 30 3 subject_lth fixed binary (21), /* ... its length */ 1 31 3 subject_given bit (1) aligned, /* ... ON => subject given even zero length */ 1 32 1 33 2 options like send_mail_options aligned, /* permanent options as modified by ctl args */ 1 34 1 35 2 initial_requests aligned, /* initial request line to execute */ 1 36 3 initial_requests_ptr pointer, 1 37 3 initial_requests_lth fixed binary (21), 1 38 1 39 2 rdm_invocation_ptr pointer, /* -> description of read_mail invocation which created this 1 40* send_mail invocation to construct a reply message */ 1 41 1 42 2 original_messages_ptr pointer; /* -> optional list of original messages from which the 1 43* In-Reply-To field is generated and the original text(s) 1 44* extracted (see sdm_original_messages.incl.pl1) */ 1 45 1 46 dcl sdm_subsystem_info_ptr pointer; 1 47 1 48 dcl SDM_SUBSYSTEM_INFO_VERSION_6 character (8) static options (constant) initial ("sdmssi06"); 1 49 1 50 1 51 /* Sources of input for message text */ 1 52 1 53 dcl (TERMINAL_INPUT initial (1), 1 54 FILE_INPUT initial (2)) 1 55 fixed binary static options (constant); 1 56 1 57 /* END INCLUDE FILE ... sdm_subsystem_info.incl.pl1 */ 402 403 2 1 /* BEGIN INCLUDE FILE ... send_mail_options.incl.pl1 */ 2 2 /* Created: 28 December 1978 by G. Palter */ 2 3 /* Modified: 25 April 1980 by G. Palter for version 2 -- abbrev processing */ 2 4 /* Modified: 27 January 1981 by G. Palter for version 3 -- increased prompt string length */ 2 5 /* Modified: 16 February 1982 by G. Palter for version 4 -- default profile in addition to current profile */ 2 6 /* Modified: 17 September 1982 by G. Palter for version 5 -- new definition of -fill, -debug, and making -fill/-rql 2 7* dependent on mode of message input (terminal/file) */ 2 8 /* Modified: August 1983 by G. Palter for version 6 -- elimination of -header and -message_id (always ON), elimination of 2 9* -no_abort as the command line -abort/-no_abort no longer sets the default for the send request control argument, 2 10* addition of -auto_write/-no_auto_write as required by the MCR boards, and addition of options pertaining to 2 11* treatment of the original message(s) text when invoked by a reply request */ 2 12 2 13 /* User settable options of the send_mail subsystem */ 2 14 2 15 dcl 1 send_mail_options aligned based (send_mail_options_ptr), 2 16 2 version character (8) unaligned, 2 17 2 18 2 fill_width fixed binary, /* default width for filling */ 2 19 2 20 2 prompt_control aligned, /* controls how send_mail prompts */ 2 21 3 prompt_string character (64) varying, /* ... user-supplied string */ 2 22 3 flags aligned, 2 23 4 prompt_control bit (2) unaligned, /* ... default prompt/use above string/don't prompt */ 2 24 4 pad bit (34) unaligned, 2 25 2 26 2 default_profile_ptr pointer, /* -> default profile to be used if flags.abbrev is ON */ 2 27 2 profile_ptr pointer, /* -> profile to be used if flags.abbrev is ON */ 2 28 2 29 2 original_text_control aligned, /* controls send_mail's treatment of original message text */ 2 30 3 original_text_indentation fixed binary, /* ... # of columns to indent the text if requested */ 2 31 3 flags, 2 32 4 include_original_text bit (1) unaligned, /* ... ON => text from message(s) being answered is to be 2 33* included in the reply before the actual answer */ 2 34 4 indent_original_text bit (1) unaligned, /* ... ON => the original text is to be indented */ 2 35 4 fill_original_text bit (1) unaligned, /* ... ON => the original text is to be re-filled */ 2 36 4 pad bit (33) unaligned, 2 37 2 38 2 flags aligned, 2 39 3 acknowledge bit (1) unaligned, /* ON => user wants acknowledgement from recipients */ 2 40 3 brief bit (1) unaligned, /* ON => suppress "Mail delivered..." messages */ 2 41 3 notify bit (1) unaligned, /* ON => send each recipient a wakeup */ 2 42 3 abbrev bit (1) unaligned, /* ON => use abbrev processing in this invocation */ 2 43 3 debug bit (1) unaligned, /* ON => enable debugging features */ 2 44 3 auto_write bit (1) unaligned, /* ON => qedx request automatically rewrites on quit (sigh) */ 2 45 3 fill_control bit (2) unaligned, /* default/explicit -fill/explicit -no_fill */ 2 46 3 request_loop_control bit (2) unaligned, /* default/explicit -rql/explicit -nrql */ 2 47 3 pad bit (26) unaligned; 2 48 2 49 dcl send_mail_options_ptr pointer; 2 50 2 51 dcl SEND_MAIL_OPTIONS_VERSION_6 character (8) static options (constant) initial ("sdmopt06"); 2 52 2 53 2 54 /* Prompt control options */ 2 55 2 56 dcl (DEFAULT_PROMPT initial ("00"b), /* use default subsystem prompt */ 2 57 USE_PROMPT_STRING initial ("01"b), /* use prompt string supplied by user (via -prompt STR) */ 2 58 NO_PROMPT initial ("10"b)) /* disable subsystem prompt */ 2 59 bit (2) static options (constant); 2 60 2 61 2 62 /* Fill control options */ 2 63 2 64 dcl (DEFAULT_FILL initial ("00"b), /* fill if terminal input; do not fill if file input */ 2 65 FILL initial ("01"b), /* user specified -fill */ 2 66 NO_FILL initial ("10"b)) /* user specified -no_fill */ 2 67 bit (2) static options (constant); 2 68 2 69 2 70 /* Request loop control options */ 2 71 2 72 dcl (DEFAULT_REQUEST_LOOP initial ("00"b), /* enter loop if file input; do not enter if terminal input */ 2 73 REQUEST_LOOP initial ("01"b), /* user specified -request_loop */ 2 74 NO_REQUEST_LOOP initial ("10"b)) /* user specified -no_request_loop */ 2 75 bit (2) static options (constant); 2 76 2 77 /* END INCLUDE FILE ... send_mail_options.incl.pl1 */ 404 405 3 1 /* BEGIN INCLUDE FILE ... mlsys_data.incl.pl1 */ 3 2 /* Created: 20 Decembber 1978 by G. Palter */ 3 3 /* Modified: 1 July 1983 by G. Palter to merge with mlsys_internal_data_ */ 3 4 3 5 /* Constants defined by the Multics mail system for external use */ 3 6 3 7 dcl mlsys_data_$system_directory character (168) external; /* directory containing per-system data (mail table/queues) */ 3 8 3 9 3 10 /* Static data defined by the Multics mail system for external use */ 3 11 3 12 dcl mlsys_data_$user_default_mailbox_address pointer external; 3 13 /* -> the address of the user's default mailbox */ 3 14 dcl mlsys_data_$user_mail_table_address pointer external; /* -> the address of the user's entry in the mail table */ 3 15 dcl mlsys_data_$user_logbox_address pointer external; /* -> the address of the user's logbox */ 3 16 3 17 /* END INCLUDE FILE ... mlsys_data.incl.pl1 */ 406 407 4 1 /* BEGIN INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 4 2 /* Created: June 1983 by G. Palter */ 4 3 /* Modified: March 1984 by G. Palter to remove ignore_log_save option */ 4 4 4 5 /* Options for the mlsys_utils_$parse_address_control_arguments, mlsys_utils_$parse_address_list_control_arguments, and 4 6* mlsys_utils_$parse_mailbox_control_arguments entrypoints */ 4 7 4 8 dcl 1 parse_ca_options aligned based (parse_ca_options_ptr), 4 9 2 version character (8) unaligned, 4 10 2 logbox_creation_mode fixed binary, /* specifies the action to be taken if the address/mailbox is 4 11* the user's logbox, address/mailbox validation is requested, 4 12* and the logbox does not exist */ 4 13 2 savebox_creation_mode fixed binary, /* ... same as above but for any savebox */ 4 14 2 flags, 4 15 3 abort_on_errors bit (1) unaligned, /* ON => use ssu_$abort_line to report errors (ie: abort on 4 16* the first error); OFF => use ssu_$print_message */ 4 17 3 validate_addresses bit (1) unaligned, /* ON => validate the existence of the address/mailbox; 4 18* OFF => only validate the command/request line syntax */ 4 19 3 mbz bit (34) unaligned; /* must be set to ""b by the caller */ 4 20 4 21 dcl PARSE_CA_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlspca01"); 4 22 4 23 dcl parse_ca_options_ptr pointer; 4 24 4 25 4 26 /* Defined logbox/savebox creation modes */ 4 27 4 28 dcl (DONT_CREATE_MAILBOX initial (0), /* do not create the mailbox and issue an error message */ 4 29 QUERY_TO_CREATE_MAILBOX initial (1), /* ask the user for permission to create the mailbox */ 4 30 CREATE_AND_ANNOUNCE_MAILBOX initial (2), /* create the mailbox and inform the user of this action */ 4 31 SILENTLY_CREATE_MAILBOX initial (3)) /* create the mailbox but don't inform the user */ 4 32 fixed binary static options (constant); 4 33 4 34 /* END INCLUDE FILE ... mlsys_parse_ca_options.incl.pl1 */ 408 409 5 1 /* BEGIN INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 5 2 /* Created: June 1983 by G. Palter */ 5 3 5 4 /* Definition of an address list -- a collection of addresses used as the value of certain message fields, etc. */ 5 5 5 6 dcl 1 address_list aligned based (address_list_ptr), 5 7 2 version character (8) unaligned, 5 8 2 reserved bit (144), /* ... exclusively for use by the mail system */ 5 9 2 n_addresses fixed binary, /* # of address in this list */ 5 10 2 addresses (address_list_n_addresses refer (address_list.n_addresses)) pointer; 5 11 5 12 dcl ADDRESS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsals02"); 5 13 5 14 dcl address_list_ptr pointer; 5 15 5 16 dcl address_list_n_addresses fixed binary; /* reserved exclusively for use by the mail system */ 5 17 5 18 /* END INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 410 411 6 1 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 6 2* 6 3* Values for the "access mode" argument so often used in hardcore 6 4* James R. Davis 26 Jan 81 MCR 4844 6 5* Added constants for SM access 4/28/82 Jay Pattin 6 6* Added text strings 03/19/85 Chris Jones 6 7**/ 6 8 6 9 6 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 6 11 dcl ( 6 12 N_ACCESS init ("000"b), 6 13 R_ACCESS init ("100"b), 6 14 E_ACCESS init ("010"b), 6 15 W_ACCESS init ("001"b), 6 16 RE_ACCESS init ("110"b), 6 17 REW_ACCESS init ("111"b), 6 18 RW_ACCESS init ("101"b), 6 19 S_ACCESS init ("100"b), 6 20 M_ACCESS init ("010"b), 6 21 A_ACCESS init ("001"b), 6 22 SA_ACCESS init ("101"b), 6 23 SM_ACCESS init ("110"b), 6 24 SMA_ACCESS init ("111"b) 6 25 ) bit (3) internal static options (constant); 6 26 6 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 6 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 6 29 6 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 6 31 static options (constant); 6 32 6 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 6 34 static options (constant); 6 35 6 36 dcl ( 6 37 N_ACCESS_BIN init (00000b), 6 38 R_ACCESS_BIN init (01000b), 6 39 E_ACCESS_BIN init (00100b), 6 40 W_ACCESS_BIN init (00010b), 6 41 RW_ACCESS_BIN init (01010b), 6 42 RE_ACCESS_BIN init (01100b), 6 43 REW_ACCESS_BIN init (01110b), 6 44 S_ACCESS_BIN init (01000b), 6 45 M_ACCESS_BIN init (00010b), 6 46 A_ACCESS_BIN init (00001b), 6 47 SA_ACCESS_BIN init (01001b), 6 48 SM_ACCESS_BIN init (01010b), 6 49 SMA_ACCESS_BIN init (01011b) 6 50 ) fixed bin (5) internal static options (constant); 6 51 6 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 412 413 7 1 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 7 2 /* format: style2,^inddcls,idind32 */ 7 3 7 4 declare 1 terminate_file_switches based, 7 5 2 truncate bit (1) unaligned, 7 6 2 set_bc bit (1) unaligned, 7 7 2 terminate bit (1) unaligned, 7 8 2 force_write bit (1) unaligned, 7 9 2 delete bit (1) unaligned; 7 10 7 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 7 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 7 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 7 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 7 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 7 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 7 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 7 18 7 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 414 415 416 end send_mail; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/08/85 1131.6 send_mail.pl1 >special_ldd>online>41-15-04/10/85>send_mail.pl1 402 1 10/27/83 2104.3 sdm_subsystem_info.incl.pl1 >ldd>include>sdm_subsystem_info.incl.pl1 404 2 10/27/83 2104.2 send_mail_options.incl.pl1 >ldd>include>send_mail_options.incl.pl1 406 3 10/27/83 2104.2 mlsys_data.incl.pl1 >ldd>include>mlsys_data.incl.pl1 408 4 06/18/84 1324.1 mlsys_parse_ca_options.incl.pl1 >ldd>include>mlsys_parse_ca_options.incl.pl1 410 5 10/27/83 2104.2 mlsys_address_list.incl.pl1 >ldd>include>mlsys_address_list.incl.pl1 412 6 04/09/85 1109.7 access_mode_values.incl.pl1 >special_ldd>online>41-15-04/10/85>access_mode_values.incl.pl1 414 7 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ADDRESS_LIST_VERSION_2 000002 constant char(8) initial unaligned dcl 5-12 set ref 162* CREATE_AND_ANNOUNCE_MAILBOX constant fixed bin(17,0) initial dcl 4-28 ref 146 FILE_INPUT constant fixed bin(17,0) initial dcl 1-53 ref 181 299 FILL constant bit(2) initial unaligned dcl 2-64 ref 215 NO_FILL constant bit(2) initial unaligned dcl 2-64 ref 216 NO_PROMPT constant bit(2) initial unaligned dcl 2-56 ref 267 274 NO_REQUEST_LOOP constant bit(2) initial unaligned dcl 2-72 ref 285 PARSE_CA_OPTIONS_VERSION_1 000004 constant char(8) initial unaligned dcl 4-21 ref 145 QUERY_TO_CREATE_MAILBOX constant fixed bin(17,0) initial dcl 4-28 ref 147 REQUEST_LOOP constant bit(2) initial unaligned dcl 2-72 ref 283 339 R_ACCESS 000073 constant bit(3) initial unaligned dcl 6-11 set ref 305* 322* SDM_SUBSYSTEM_INFO_VERSION_6 000006 constant char(8) initial unaligned dcl 1-48 set ref 135* SEND_MAIL 000010 constant char(32) initial unaligned dcl 84 set ref 124* 127* 129* TERMINAL_INPUT constant fixed bin(17,0) initial dcl 1-53 ref 176 TERM_FILE_TERM 000000 constant bit(3) initial unaligned dcl 7-14 set ref 311* 360* USE_PROMPT_STRING constant bit(2) initial unaligned dcl 2-56 ref 270 abbrev 140(03) based bit(1) level 4 packed unaligned dcl 1-13 set ref 249* 252* 328* abbrev_ca_given 000202 automatic bit(1) dcl 67 set ref 155* 249* 253* 328 abort 000220 automatic bit(1) dcl 79 set ref 152* 204* 205* 336 abort_on_errors 4 000100 automatic bit(1) level 3 packed unaligned dcl 55 set ref 148* acknowledge 140 based bit(1) level 4 packed unaligned dcl 1-13 set ref 207* 209* active_fnc_err_ 000030 constant entry external dcl 92 ref 127 addr builtin function dcl 115 ref 142 162 162 186 187 189 190 191 address_lists 66 based structure level 2 dcl 1-13 argument based char unaligned dcl 57 set ref 176 176 176 179 179 186 187 187 189 190 191 193 193 199 199 204 205 207 207 209 209 212 212 213 213 215 215 216 216 218 218 220* 221* 228 228 229 229 232 233 236 236 238* 241 241 241 241 244 244 244 244 249 249 251 251 255 255 262 262 263 263 265 265 271 274 274 277 277 283 283 285 285 288* 290* 391* argument_idx 000112 automatic fixed bin(17,0) dcl 60 set ref 158* 160 162* 171 174* 292* 292 391 394* 394 396* argument_lth 000110 automatic fixed bin(21,0) dcl 59 set ref 174* 176 176 176 179 179 183 186 187 187 189 190 191 193 193 197 199 199 204 205 207 207 209 209 212 212 213 213 215 215 216 216 218 218 220 220 221 221 228 228 229 229 232 233 236 236 238 238 241 241 241 241 244 244 244 244 249 249 251 251 255 255 259 262 262 263 263 265 265 267 271 274 274 277 277 280 283 283 285 285 288 288 290 290 391 391 396* argument_ptr 000106 automatic pointer dcl 58 set ref 174* 176 176 176 179 179 182 186 187 187 189 190 191 193 193 196 199 199 204 205 207 207 209 209 212 212 213 213 215 215 216 216 218 218 220 221 228 228 229 229 232 233 236 236 238 241 241 241 241 244 244 244 244 249 249 251 251 255 255 258 262 262 263 263 265 265 271 274 274 277 277 279 283 283 285 285 288 290 391 396* auto_write 140(05) based bit(1) level 4 packed unaligned dcl 1-13 set ref 232* 233* bcc 76 based pointer level 3 dcl 1-13 set ref 162* 191 brief 140(01) based bit(1) level 4 packed unaligned dcl 1-13 set ref 212* 213* cc 74 based pointer level 3 dcl 1-13 set ref 190 cleanup 000224 stack reference condition dcl 113 ref 122 code 000222 automatic fixed bin(35,0) dcl 82 set ref 124* 126 127* 129* 135* 137 137* 162* 165 165 165* 168 220* 221 301* 303 303* 305* 307 307* 319* 320 320* 322* 324 324* 342* 344 344 344 344* com_err_ 000032 constant entry external dcl 93 ref 129 cu_$af_return_arg 000036 constant entry external dcl 95 ref 127 cu_$arg_list_ptr 000040 constant entry external dcl 96 ref 124 124 current_address_list_ptr based pointer dcl 73 set ref 162* current_address_list_ptr_ptr 000212 automatic pointer dcl 74 set ref 142* 162 186* 187* 189* 190* 191* cv_dec_check_ 000034 constant entry external dcl 94 ref 220 debug 140(04) based bit(1) level 4 packed unaligned dcl 1-13 set ref 262* 263* default_profile_ptr 132 based pointer level 3 dcl 1-13 set ref 322* dname 3 based char(168) level 3 packed unaligned dcl 1-13 set ref 301* 305* 307* 307* emf_et_$send_mail_aborted 000022 external static fixed bin(35,0) dcl 87 ref 344 ename 55 based char(32) level 3 packed unaligned dcl 1-13 set ref 301* 305* 307* 307* error_table_$bad_arg 000010 external static fixed bin(35,0) dcl 87 set ref 290* error_table_$bad_conversion 000012 external static fixed bin(35,0) dcl 87 set ref 221* error_table_$badopt 000014 external static fixed bin(35,0) dcl 87 set ref 288* error_table_$fatal_error 000016 external static fixed bin(35,0) dcl 87 ref 344 error_table_$noarg 000020 external static fixed bin(35,0) dcl 87 set ref 391* expand_pathname_ 000042 constant entry external dcl 97 ref 301 expand_pathname_$add_suffix 000044 constant entry external dcl 98 ref 319 fill_control 140(06) based bit(2) level 4 packed unaligned dcl 1-13 set ref 215* 216* fill_width 106 based fixed bin(17,0) level 3 dcl 1-13 set ref 220* 224 flags 4 000100 automatic structure level 2 in structure "local_pcao" dcl 55 in procedure "sdm" flags 130 based structure level 4 in structure "sdm_subsystem_info" dcl 1-13 in procedure "sdm" flags 140 based structure level 3 in structure "sdm_subsystem_info" dcl 1-13 in procedure "sdm" found_invalid_address 000221 automatic bit(1) dcl 80 set ref 153* 168* 168 336 from 66 based pointer level 3 dcl 1-13 set ref 186 index builtin function dcl 115 ref 176 initial_requests 142 based structure level 2 dcl 1-13 initial_requests_lth 144 based fixed bin(21,0) level 3 dcl 1-13 set ref 280* initial_requests_ptr 142 based pointer level 3 dcl 1-13 set ref 279* initiate_file_ 000046 constant entry external dcl 99 ref 305 322 input_file 3 based structure level 2 dcl 1-13 input_file_ptr 000206 automatic pointer dcl 70 set ref 119* 305* 311* 360 360* input_filename based char unaligned dcl 69 set ref 301* 303* input_filename_lth 000210 automatic fixed bin(21,0) dcl 71 set ref 183* 301 301 303 303 input_filename_ptr 000204 automatic pointer dcl 70 set ref 182* 301 303 input_type 2 based fixed bin(17,0) level 2 dcl 1-13 set ref 176* 181* 299 local_pcao 000100 automatic structure level 1 dcl 55 set ref 162 162 logbox_creation_mode 2 000100 automatic fixed bin(17,0) level 2 dcl 55 set ref 146* mbz 4(02) 000100 automatic bit(34) level 3 packed unaligned dcl 55 set ref 150* mlsys_et_$ca_parse_failed 000024 external static fixed bin(35,0) dcl 87 ref 165 168 mlsys_et_$cant_parse_irt_field 000026 external static fixed bin(35,0) dcl 87 set ref 238* mlsys_utils_$parse_address_list_control_args 000050 constant entry external dcl 100 ref 162 n_arguments 000111 automatic fixed bin(17,0) dcl 60 set ref 133* 160 171 391 notify 140(02) based bit(1) level 4 packed unaligned dcl 1-13 set ref 228* 229* null builtin function dcl 115 ref 119 127 360 362 362 365 options 104 based structure level 2 dcl 1-13 p_string parameter char unaligned dcl 389 set ref 386 391* parse_ca_options based structure level 1 dcl 4-8 pathname_ 000052 constant entry external dcl 102 ref 307 307 324 324 profile_dirname 000113 automatic char(168) unaligned dcl 63 set ref 319* 322* 324* 324* profile_ename 000165 automatic char(32) unaligned dcl 64 set ref 319* 322* 324* 324* profile_pathname based char unaligned dcl 62 set ref 319* 320* profile_pathname_given 000201 automatic bit(1) dcl 67 set ref 156* 257* 317 profile_pathname_lth 000200 automatic fixed bin(21,0) dcl 66 set ref 259* 319 319 320 320 profile_pathname_ptr 000176 automatic pointer dcl 65 set ref 258* 319 320 prompt_control 130 based bit(2) level 5 in structure "sdm_subsystem_info" packed unaligned dcl 1-13 in procedure "sdm" set ref 267* 270* 274* prompt_control 107 based structure level 3 in structure "sdm_subsystem_info" dcl 1-13 in procedure "sdm" prompt_string 107 based varying char(64) level 4 dcl 1-13 set ref 271* reply_to 70 based pointer level 3 dcl 1-13 set ref 187 request_loop_control 140(08) based bit(2) level 4 packed unaligned dcl 1-13 set ref 283* 285* 339* savebox_creation_mode 3 000100 automatic fixed bin(17,0) level 2 dcl 55 set ref 147* sci_ptr 000214 automatic pointer dcl 76 set ref 119* 124* 133* 137* 162* 165* 174* 221* 224* 238* 288* 290* 303* 307* 320* 324* 336* 344* 365 365* 391* 396* sdm_invocation_ptr 000216 automatic pointer dcl 77 set ref 119* 135* 342* 362 362* sdm_subsystem_$create_invocation 000054 constant entry external dcl 103 ref 135 sdm_subsystem_$destroy_invocation 000056 constant entry external dcl 104 ref 362 sdm_subsystem_$subsystem 000060 constant entry external dcl 105 ref 342 sdm_subsystem_info based structure level 1 dcl 1-13 sdm_subsystem_info_ptr 000232 automatic pointer dcl 1-46 set ref 119* 135* 142 162 176 181 186 187 189 190 191 195 196 197 200 201 207 209 212 213 215 216 220 224 228 229 232 233 249 252 262 263 267 270 271 274 279 280 283 285 299 301 301 305 305 307 307 307 307 322 328 339 342* 362 362* send_mail_options based structure level 1 dcl 2-15 ssu_$abort_subsystem 000062 constant entry external dcl 106 ref 137 165 221 224 238 288 290 303 307 320 324 336 344 391 ssu_$arg_count 000064 constant entry external dcl 107 ref 133 ssu_$arg_ptr 000066 constant entry external dcl 108 ref 174 396 ssu_$destroy_invocation 000070 constant entry external dcl 109 ref 365 ssu_$standalone_invocation 000072 constant entry external dcl 110 ref 124 subject 100 based structure level 2 dcl 1-13 subject_given 103 based bit(1) level 3 dcl 1-13 set ref 195* 200* subject_lth 102 based fixed bin(21,0) level 3 dcl 1-13 set ref 197* 201* subject_ptr 100 based pointer level 3 dcl 1-13 set ref 196* terminate_file_ 000074 constant entry external dcl 111 ref 311 360 to 72 based pointer level 3 dcl 1-13 set ref 142 189 validate_addresses 4(01) 000100 automatic bit(1) level 3 packed unaligned dcl 55 set ref 149* version 000100 automatic char(8) level 2 packed unaligned dcl 55 set ref 145* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 6-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 DEFAULT_FILL internal static bit(2) initial unaligned dcl 2-64 DEFAULT_PROMPT internal static bit(2) initial unaligned dcl 2-56 DEFAULT_REQUEST_LOOP internal static bit(2) initial unaligned dcl 2-72 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 6-33 DONT_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 4-28 E_ACCESS internal static bit(3) initial unaligned dcl 6-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 M_ACCESS internal static bit(3) initial unaligned dcl 6-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 N_ACCESS internal static bit(3) initial unaligned dcl 6-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 REW_ACCESS internal static bit(3) initial unaligned dcl 6-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 RE_ACCESS internal static bit(3) initial unaligned dcl 6-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 RW_ACCESS internal static bit(3) initial unaligned dcl 6-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 SA_ACCESS internal static bit(3) initial unaligned dcl 6-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 6-30 SEND_MAIL_OPTIONS_VERSION_6 internal static char(8) initial unaligned dcl 2-51 SILENTLY_CREATE_MAILBOX internal static fixed bin(17,0) initial dcl 4-28 SMA_ACCESS internal static bit(3) initial unaligned dcl 6-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 SM_ACCESS internal static bit(3) initial unaligned dcl 6-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 S_ACCESS internal static bit(3) initial unaligned dcl 6-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 TERM_FILE_BC internal static bit(2) initial unaligned dcl 7-12 TERM_FILE_DELETE internal static bit(5) initial unaligned dcl 7-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial unaligned dcl 7-16 TERM_FILE_TRUNC internal static bit(1) initial unaligned dcl 7-11 TERM_FILE_TRUNC_BC internal static bit(2) initial unaligned dcl 7-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial unaligned dcl 7-15 W_ACCESS internal static bit(3) initial unaligned dcl 6-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 6-36 address_list based structure level 1 dcl 5-6 address_list_n_addresses automatic fixed bin(17,0) dcl 5-16 address_list_ptr automatic pointer dcl 5-14 mlsys_data_$system_directory external static char(168) unaligned dcl 3-7 mlsys_data_$user_default_mailbox_address external static pointer dcl 3-12 mlsys_data_$user_logbox_address external static pointer dcl 3-15 mlsys_data_$user_mail_table_address external static pointer dcl 3-14 parse_ca_options_ptr automatic pointer dcl 4-23 send_mail_options_ptr automatic pointer dcl 2-49 terminate_file_switches based structure level 1 packed unaligned dcl 7-4 NAMES DECLARED BY EXPLICIT CONTEXT. RETURN_FROM_SEND_MAIL 003010 constant label dcl 350 ref 378 abort_send_mail_command 003116 constant entry internal dcl 375 ref 124 124 cleanup_send_mail_command 003016 constant entry internal dcl 357 ref 122 350 get_next_argument 003126 constant entry internal dcl 386 ref 180 194 219 237 256 266 278 sdm 000373 constant entry external dcl 50 send_mail 000402 constant entry external dcl 50 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3652 3750 3255 3662 Length 4354 3255 76 370 374 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sdm 286 external procedure is an external procedure. on unit on line 122 64 on unit cleanup_send_mail_command 84 internal procedure is called by several nonquick procedures. abort_send_mail_command 64 internal procedure is assigned to an entry variable. get_next_argument internal procedure shares stack frame of external procedure sdm. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME sdm 000100 local_pcao sdm 000106 argument_ptr sdm 000110 argument_lth sdm 000111 n_arguments sdm 000112 argument_idx sdm 000113 profile_dirname sdm 000165 profile_ename sdm 000176 profile_pathname_ptr sdm 000200 profile_pathname_lth sdm 000201 profile_pathname_given sdm 000202 abbrev_ca_given sdm 000204 input_filename_ptr sdm 000206 input_file_ptr sdm 000210 input_filename_lth sdm 000212 current_address_list_ptr_ptr sdm 000214 sci_ptr sdm 000216 sdm_invocation_ptr sdm 000220 abort sdm 000221 found_invalid_address sdm 000222 code sdm 000232 sdm_subsystem_info_ptr sdm 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 tra_ext enable ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. active_fnc_err_ com_err_ cu_$af_return_arg cu_$arg_list_ptr cv_dec_check_ expand_pathname_ expand_pathname_$add_suffix initiate_file_ mlsys_utils_$parse_address_list_control_args pathname_ sdm_subsystem_$create_invocation sdm_subsystem_$destroy_invocation sdm_subsystem_$subsystem ssu_$abort_subsystem ssu_$arg_count ssu_$arg_ptr ssu_$destroy_invocation ssu_$standalone_invocation terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. emf_et_$send_mail_aborted error_table_$bad_arg error_table_$bad_conversion error_table_$badopt error_table_$fatal_error error_table_$noarg mlsys_et_$ca_parse_failed mlsys_et_$cant_parse_irt_field LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 50 000372 119 000407 122 000414 124 000436 126 000512 127 000514 129 000564 130 000610 133 000611 135 000622 137 000637 142 000665 145 000670 146 000672 147 000674 148 000676 149 000700 150 000702 152 000704 153 000706 155 000707 156 000710 158 000711 160 000713 162 000717 165 000745 168 000775 171 001002 174 001005 176 001021 179 001051 180 001061 181 001071 182 001074 183 001076 184 001100 186 001101 187 001111 189 001125 190 001135 191 001145 193 001155 194 001165 195 001172 196 001175 197 001177 198 001201 199 001202 200 001212 201 001215 202 001216 204 001217 205 001226 207 001234 209 001250 212 001264 213 001300 215 001314 216 001332 218 001350 219 001360 220 001365 221 001413 224 001453 226 001504 228 001505 229 001521 232 001535 233 001545 236 001555 237 001565 238 001572 240 001625 241 001626 244 001647 249 001670 251 001706 252 001716 253 001721 254 001723 255 001724 256 001734 257 001744 258 001746 259 001750 260 001752 262 001753 263 001767 265 002003 266 002013 267 002020 270 002030 271 002035 273 002045 274 002046 277 002064 278 002074 279 002101 280 002104 281 002106 283 002107 285 002125 288 002143 290 002176 292 002230 294 002231 299 002232 301 002236 303 002266 305 002326 307 002365 311 002443 317 002472 319 002474 320 002532 322 002572 324 002631 328 002706 336 002713 339 002736 342 002743 344 002756 350 003010 353 003014 357 003015 360 003023 362 003056 365 003100 367 003114 375 003115 378 003123 386 003126 391 003137 394 003206 396 003207 398 003224 ----------------------------------------------------------- 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