COMPILATION LISTING OF SEGMENT sdm_subsystem_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 05/22/86 1044.9 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 /* format: off */ 11 12 /* The Multics send_mail subsystem */ 13 14 /* Created: December 1978 by G. Palter */ 15 /* Modified: 11 January 1979 by G. Palter to print informative error messages and only print sdm_data_$special_message 16* once per process */ 17 /* Modified: 15 January 1979 by G. Palter to support no abort feature */ 18 /* Modified: 24 January 1979 by G. Palter to support original text feature for use by read_mail "reply" request */ 19 /* Modified: 31 January 1979 by G. Palter to revert to filling before invoking qedx */ 20 /* Modified: 7 February 1979 by G. Palter to correct bug with -fill and using \f in input mode */ 21 /* Modified: 25 December 1979 by W. Olin Sibert to implement auto_fill mode */ 22 /* Modified: 25 April 1980 by G. Palter to implement abbrev processing */ 23 /* Modified: 28 April 1980 by G. Palter to call v1_ssu_ entries for version 4.1 subsystems */ 24 /* Modified: 5 May 1980 by W. Olin Sibert to use new ssu_ interfaces */ 25 /* Modified: 1 June 1980 by G. Palter to implement suggestion #0186 -- there should be a "print_original" request in 26* send_mail which prints the message being replied to when invoked by read_mail's "reply" request */ 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 fix bug #0354 -- both read_mail and send_mail mis-declare ssu_$set_prompt: 30* for read_mail, the declaration used works; for send_mail, use of -no_prompt can cause severe problems (faults, 31* fatal process errors, etc.) */ 32 /* Modified: 27 March 1981 by G. Palter to put the "original" requests into a separate request table */ 33 /* Modified: 16 February 1982 by G. Palter for version 4 sdm_subsystem_info (default profiles) and new calling sequences 34* for ssu_$create_invocation and ssu_$set_abbrev_info */ 35 /* Modified: 2 March 1982 by G. Palter to eliminate a window which prevented subsystem invocations from being destroyed */ 36 /* Modified: 17 September 1982 by G. Palter to implement new defaults for -fill and -request_loop based on terminal/file 37* input, change filling to occur after the initial invocation of qedx, support debug_mode and new prompt control, and 38* set the exec_com search list and suffix properly */ 39 /* Modified: 3 October 1982 by G. Palter to use sdm_set_info_directories_ */ 40 /* Modified: September 1983 by G. Palter as part of the conversion of send_mail to the new mail system interface */ 41 /* Modified: April 1984 by G. Palter to fix error #0438 -- the primitives which allow a user to replace the address list 42* portions of a message (eg: mail_system_$replace_from, mail_system_$replace_user_field) should not make the user's 43* copy of the address list read-only. Instead, they should copy the user's list to allow the user to continue to 44* modify the list if desired for later additional use */ 45 46 /* format: on,style4,delnl,insnl,ifthenstmt,ifthen */ 47 48 49 sdm_subsystem_: 50 procedure (); 51 52 return; /* not an entrypoint */ 53 54 55 /* Parameters */ 56 57 dcl P_sdm_invocation_ptr pointer parameter; /* -> description of send_mail subsystem */ 58 dcl P_sdm_subsystem_info_ptr pointer parameter; /* -> options used to create/control the subsystem */ 59 60 dcl P_sdm_subsystem_info_version character (8) parameter; /* version of above structure desired by the caller */ 61 62 dcl P_code fixed binary (35) parameter; 63 64 65 /* Local copies of parameters */ 66 67 dcl code fixed binary (35); 68 69 70 /* Remaining declarations */ 71 72 dcl sci_ptr pointer; 73 74 dcl initial_rql character (initial_rql_lth) varying based (initial_rql_ptr); 75 dcl initial_rql_lth fixed binary (21); 76 dcl initial_rql_ptr pointer; 77 78 dcl edit_requests character (edit_requests_lth) unaligned based (edit_requests_ptr); 79 dcl edit_requests_lth fixed binary (21); 80 dcl edit_requests_ptr pointer; 81 82 dcl user_initial_requests character (sdm_subsystem_info.initial_requests_lth) unaligned 83 based (sdm_subsystem_info.initial_requests_ptr); 84 85 dcl sdm_subsystem_info_subject character (sdm_subsystem_info.subject_lth) unaligned 86 based (sdm_subsystem_info.subject_ptr); 87 88 dcl subsystem_area area aligned based (subsystem_area_ptr); 89 dcl subsystem_area_ptr pointer; 90 dcl 1 local_ai aligned like area_info; 91 92 dcl subject_line character (1024); 93 dcl subject_segment_ptr pointer; 94 dcl (subject_lth, rest_of_subject_lth) fixed binary (21); 95 96 dcl enter_request_loop bit (1) aligned; /* ON => user wants to entry the request loop */ 97 dcl fatal_error bit (1) aligned; 98 99 dcl input_terminator_type fixed binary; /* specifies how user ended message */ 100 dcl (address_type, idx) fixed binary; 101 102 dcl SEND_MAIL character (32) static options (constant) initial ("send_mail"); 103 104 dcl sys_info$max_seg_size fixed binary (19) external; 105 dcl iox_$error_output pointer external; 106 dcl iox_$user_input pointer external; 107 108 /* format: off */ 109 dcl (error_table_$fatal_error, error_table_$long_record, error_table_$unimplemented_version, ssu_et_$subsystem_aborted) 110 fixed binary (35) external static; 111 /* format: on */ 112 113 dcl cu_$arg_list_ptr entry () returns (pointer); 114 dcl cu_$cl entry (bit (36) aligned); 115 dcl cu_$generate_call entry (entry, pointer); 116 dcl cu_$grow_stack_frame entry (fixed binary (18), pointer, fixed binary (35)); 117 dcl ioa_$ioa_switch entry () options (variable); 118 dcl ioa_$nnl entry () options (variable); 119 dcl iox_$get_line entry (pointer, pointer, fixed binary (21), fixed binary (21), fixed binary (35)); 120 dcl mail_system_$add_address entry (pointer, pointer, character (8), fixed binary (35)); 121 dcl mail_system_$add_reply_reference entry (pointer, pointer, fixed binary, fixed binary (35)); 122 dcl mail_system_$create_address_list entry (character (8), pointer, fixed binary (35)); 123 dcl mail_system_$create_message entry (character (8), pointer, fixed binary (35)); 124 dcl mail_system_$free_address_list entry (pointer, fixed binary (35)); 125 dcl mail_system_$free_message entry (pointer, fixed binary (35)); 126 dcl mail_system_$get_address_type entry (pointer, fixed binary, fixed binary (35)); 127 dcl mail_system_$replace_bcc entry (pointer, pointer, fixed binary (35)); 128 dcl mail_system_$replace_cc entry (pointer, pointer, fixed binary (35)); 129 dcl mail_system_$replace_from entry (pointer, pointer, fixed binary (35)); 130 dcl mail_system_$replace_reply_to entry (pointer, pointer, fixed binary (35)); 131 dcl mail_system_$replace_subject entry (pointer, character (*), fixed binary (35)); 132 dcl mail_system_$replace_to entry (pointer, pointer, fixed binary (35)); 133 dcl requote_string_ entry (character (*)) returns (character (*)); 134 dcl sdm_set_info_directories_ entry (pointer, fixed binary (35)); 135 dcl sdm_set_request_tables_ entry (pointer, fixed binary (35)); 136 dcl sdm_text_mgr_$file_input entry (pointer, character (*), character (*), bit (1) aligned); 137 dcl sdm_text_mgr_$process_original_text entry (pointer, pointer, bit (1) aligned); 138 dcl sdm_text_mgr_$terminal_input entry (pointer, fixed binary, pointer, fixed binary (21), bit (1) aligned); 139 dcl ssu_$create_invocation 140 entry (character (*), character (*), pointer, pointer, character (*), pointer, fixed binary (35)); 141 dcl ssu_$destroy_invocation entry (pointer); 142 dcl ssu_$execute_line entry (pointer, pointer, fixed binary (21), fixed binary (35)); 143 dcl ssu_$get_area entry (pointer, pointer, character (*), pointer); 144 dcl ssu_$get_temp_segment entry (pointer, character (*), pointer); 145 dcl ssu_$listen entry (pointer, pointer, fixed binary (35)); 146 dcl ssu_$print_blast entry (pointer, pointer, fixed binary, character (*) varying, fixed binary (35)); 147 dcl ssu_$print_message entry () options (variable); 148 dcl ssu_$record_usage entry (pointer, pointer, fixed binary (35)); 149 dcl ssu_$release_temp_segment entry (pointer, pointer); 150 dcl ssu_$set_abbrev_info entry (pointer, pointer, pointer, bit (1) aligned); 151 dcl ssu_$set_debug_mode entry (pointer, bit (1) aligned); 152 dcl ssu_$set_ec_search_list entry (pointer, character (32)); 153 dcl ssu_$set_ec_suffix entry (pointer, character (32)); 154 dcl ssu_$set_info_ptr entry (pointer, pointer); 155 dcl ssu_$set_prompt entry (pointer, character (64) varying); 156 dcl ssu_$set_prompt_mode entry (pointer, bit (*)); 157 158 dcl cleanup condition; 159 160 dcl (addcharno, addr, addwordno, clock, codeptr, divide, length, null, unspec) builtin; 161 162 /* Initialize an invocation of the send_mail subsystem: creates a subsystem invocation, initializes an sdm_invocation 163* structure, and creates an sdm_subsystem_info structure containing default values as obtained from sdm_data_ */ 164 165 create_invocation: 166 entry (P_sdm_subsystem_info_version, P_sdm_invocation_ptr, P_sdm_subsystem_info_ptr, P_code); 167 168 if P_sdm_subsystem_info_version ^= SDM_SUBSYSTEM_INFO_VERSION_6 then do; 169 P_code = error_table_$unimplemented_version; /* only have one supported version */ 170 return; 171 end; 172 173 174 /* Create the subsystem invocation and an area for use by the subsystem */ 175 176 sci_ptr, /* for cleanup handler */ 177 sdm_invocation_ptr, sdm_subsystem_info_ptr = null (); 178 179 on condition (cleanup) 180 begin; 181 if sci_ptr ^= null () then call ssu_$destroy_invocation (sci_ptr); 182 end; 183 184 call ssu_$create_invocation (SEND_MAIL, (sdm_data_$version), null (), null (), "", sci_ptr, P_code); 185 if P_code ^= 0 then return; /* failed */ 186 187 unspec (local_ai) = ""b; 188 local_ai.version = area_info_version_1; 189 local_ai.zero_on_alloc, local_ai.extend = "1"b; 190 call ssu_$get_area (sci_ptr, addr (local_ai), "", subsystem_area_ptr); 191 192 193 /* Create the send_mail invocation structure */ 194 195 allocate sdm_invocation in (subsystem_area) set (sdm_invocation_ptr); 196 sdm_invocation.type = SDM_INVOCATION; 197 198 sdm_invocation.sci_ptr = sci_ptr; 199 sdm_invocation.area_ptr = subsystem_area_ptr; /* use the above area for all allocations */ 200 201 sdm_invocation.message_ptr = null (); /* no message yet */ 202 203 sdm_invocation.original_messages_ptr = null (); /* avoids problems with premature terminations */ 204 205 call ssu_$set_info_ptr (sci_ptr, sdm_invocation_ptr); 206 207 208 /* Create and initialize the sdm_subsystem_info structure */ 209 210 allocate sdm_subsystem_info in (sdm_area) set (sdm_subsystem_info_ptr); 211 212 sdm_subsystem_info.version = SDM_SUBSYSTEM_INFO_VERSION_6; 213 214 sdm_subsystem_info.input_type = TERMINAL_INPUT; /* defaults to read from the terminal */ 215 216 sdm_subsystem_info.address_lists = null (); /* no sources or destinations yet */ 217 218 sdm_subsystem_info.subject_given = "0"b; /* no subject supplied yet */ 219 220 sdm_subsystem_info.options = sdm_data_$default_options; 221 /* set up permanent options */ 222 223 sdm_subsystem_info.initial_requests_lth = 0; /* no initial request line */ 224 225 sdm_subsystem_info.rdm_invocation_ptr = null (); /* don't yet know whether it was created by read_mail reply */ 226 227 sdm_subsystem_info.original_messages_ptr = null (); 228 /* no list of original messages for an In-Reply-To field */ 229 230 P_sdm_invocation_ptr = sdm_invocation_ptr; 231 P_sdm_subsystem_info_ptr = sdm_subsystem_info_ptr; 232 P_code = 0; 233 234 return; 235 236 /* Main workhorse of the subsystem: reads the input message and either sends the message or enters the request loop */ 237 238 subsystem: 239 entry (P_sdm_invocation_ptr, P_sdm_subsystem_info_ptr, P_code); 240 241 sdm_invocation_ptr = P_sdm_invocation_ptr; 242 sdm_subsystem_info_ptr = P_sdm_subsystem_info_ptr; 243 244 if sdm_subsystem_info.version ^= SDM_SUBSYSTEM_INFO_VERSION_6 then do; 245 P_code = error_table_$unimplemented_version; 246 return; /* bad version: caller will cleanup */ 247 end; 248 249 sdm_invocation.debug_mode = sdm_subsystem_info.debug; 250 call ssu_$set_debug_mode (sdm_invocation.sci_ptr, (sdm_invocation.debug_mode)); 251 252 253 /* Create the message and place the supplied address lists (From/Reply-To/To/cc/bcc fields) into the message */ 254 255 call mail_system_$create_message (MESSAGE_VERSION_2, sdm_invocation.message_ptr, code); 256 if code ^= 0 then /* someone changed the mail system out from under us? */ 257 call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to create the message."); 258 259 sdm_invocation.message_state = UNPROCESSED_MESSAGE; 260 sdm_invocation.date_time_body_modified = clock ();/* we need some value here */ 261 262 if sdm_subsystem_info.from ^= null () then do; /* explicit authors */ 263 call mail_system_$replace_from (sdm_invocation.message_ptr, sdm_subsystem_info.from, code); 264 if code ^= 0 then call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the From field."); 265 end; 266 267 if sdm_data_$default_from_field = null () then do;/* create a default From field for use with "print -header" */ 268 call mail_system_$create_address_list (ADDRESS_LIST_VERSION_2, sdm_data_$default_from_field, code); 269 if code ^= 0 then 270 UNABLE_TO_CREATE_DEFAULT_FROM_FIELD: 271 call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to create the default From field."); 272 call mail_system_$get_address_type (mlsys_data_$user_mail_table_address, address_type, (0)); 273 if address_type = INVALID_ADDRESS then /* ... anonymous user */ 274 call mail_system_$add_address (sdm_data_$default_from_field, mlsys_data_$user_default_mailbox_address, 275 ADDRESS_LIST_VERSION_2, code); 276 else call mail_system_$add_address (sdm_data_$default_from_field, mlsys_data_$user_mail_table_address, 277 ADDRESS_LIST_VERSION_2, code); 278 if code ^= 0 then go to UNABLE_TO_CREATE_DEFAULT_FROM_FIELD; 279 end; 280 281 if sdm_subsystem_info.reply_to ^= null () then do; 282 call mail_system_$replace_reply_to (sdm_invocation.message_ptr, sdm_subsystem_info.reply_to, code); 283 if code ^= 0 then 284 call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the Reply-to field."); 285 end; 286 287 if sdm_subsystem_info.to ^= null () then do; 288 call mail_system_$replace_to (sdm_invocation.message_ptr, sdm_subsystem_info.to, code); 289 if code ^= 0 then call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the To field."); 290 end; 291 292 if sdm_subsystem_info.cc ^= null () then do; 293 call mail_system_$replace_cc (sdm_invocation.message_ptr, sdm_subsystem_info.cc, code); 294 if code ^= 0 then call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the cc field."); 295 end; 296 297 if sdm_subsystem_info.bcc ^= null () then do; 298 call mail_system_$replace_bcc (sdm_invocation.message_ptr, sdm_subsystem_info.bcc, code); 299 if code ^= 0 then call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the bcc field."); 300 end; 301 302 303 /* Process the list of original messages for which this message is a reply */ 304 305 if sdm_subsystem_info.original_messages_ptr ^= null () then do; 306 307 if sdm_subsystem_info.original_messages_ptr -> original_messages.version ^= ORIGINAL_MESSAGES_VERSION_1 308 then call abort_subsystem (sdm_invocation.sci_ptr, error_table_$unimplemented_version, 309 "Attempting to process the list of original messages."); 310 311 original_messages_n_original_messages = /* ... need our own copy: remaining code always frees it */ 312 sdm_subsystem_info.original_messages_ptr -> original_messages.n_original_messages; 313 allocate original_messages in (sdm_area) set (sdm_invocation.original_messages_ptr); 314 sdm_invocation.original_messages_ptr -> original_messages = 315 sdm_subsystem_info.original_messages_ptr -> original_messages; 316 317 /*** Now add the original messages to the new message's reply references list */ 318 original_messages_ptr = sdm_invocation.original_messages_ptr; 319 do idx = 1 to original_messages.n_original_messages; 320 call mail_system_$add_reply_reference (sdm_invocation.message_ptr, 321 original_messages.messages (idx).message_ptr, (-1), code); 322 if code ^= 0 then 323 call abort_subsystem (sdm_invocation.sci_ptr, code, 324 "Unable to add a reference to message #^d to the In-Reply-To field.", 325 original_messages.messages (idx).message_idx); 326 end; 327 end; 328 329 330 /* Print the initial greeting message before possibly asking for a subject */ 331 332 if sdm_data_$first_invocation then 333 call ssu_$print_blast (sdm_invocation.sci_ptr, codeptr (subsystem), 3, sdm_data_$special_message, (0)); 334 else call ssu_$record_usage (sdm_invocation.sci_ptr, codeptr (subsystem), (0)); 335 336 sdm_data_$first_invocation = "0"b; 337 338 339 /* Set the message subject: If requested, prompt the user for the subject and read it from the terminal */ 340 341 if sdm_subsystem_info.subject_given then /* user gave a subject on the command line ... */ 342 if sdm_subsystem_info.subject_lth ^= 0 then do; 343 call mail_system_$replace_subject (sdm_invocation.message_ptr, sdm_subsystem_info_subject, code); 344 if code ^= 0 then 345 call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the Subject field."); 346 end; 347 348 else ; /* user explicitly requested no subject on the command line */ 349 350 else do; /* no explicit instructions: ask for a subject */ 351 call ioa_$nnl ("Subject: "); 352 353 call iox_$get_line (iox_$user_input, addr (subject_line), length (subject_line), subject_lth, code); 354 if code = 0 then do; /* ... got it in our automatic buffer */ 355 begin; 356 dcl the_subject character (subject_lth - 1) unaligned defined (subject_line) position (1); 357 if length (the_subject) > 0 then 358 call mail_system_$replace_subject (sdm_invocation.message_ptr, the_subject, code); 359 if code ^= 0 then 360 call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the Subject field."); 361 end; 362 end; 363 364 else if code = error_table_$long_record then do; 365 /*** ... too large for our automatic buffer: read the rest into a temporary segment */ 366 call ssu_$get_temp_segment (sdm_invocation.sci_ptr, "subject-buffer", subject_segment_ptr); 367 begin; 368 dcl subject_in_segment character (subject_lth) unaligned based (subject_segment_ptr); 369 dcl the_subject_so_far character (subject_lth) unaligned defined (subject_line) position (1); 370 subject_in_segment = the_subject_so_far; 371 end; 372 call iox_$get_line (iox_$user_input, addcharno (subject_segment_ptr, subject_lth), 373 ((4 * sys_info$max_seg_size) - subject_lth), rest_of_subject_lth, code); 374 if code ^= 0 then do; /* ... quite fatal */ 375 call ssu_$release_temp_segment (sdm_invocation.sci_ptr, subject_segment_ptr); 376 call abort_subsystem (sdm_invocation.sci_ptr, code, "Reading the message subject."); 377 end; 378 begin; 379 dcl the_subject character (subject_lth + rest_of_subject_lth - 1) unaligned based (subject_segment_ptr); 380 if length (the_subject) > 0 then 381 call mail_system_$replace_subject (sdm_invocation.message_ptr, the_subject, code); 382 end; /* ... code is already zero if above call isn't made */ 383 call ssu_$release_temp_segment (sdm_invocation.sci_ptr, subject_segment_ptr); 384 if code ^= 0 then 385 call abort_subsystem (sdm_invocation.sci_ptr, code, "Unable to replace the Subject field."); 386 end; 387 388 else call abort_subsystem (sdm_invocation.sci_ptr, code, "Reading the message subject."); 389 end; 390 391 392 /* Process remaining input options except input source and intial request line */ 393 394 sdm_invocation.fill_width = sdm_subsystem_info.fill_width; 395 396 sdm_invocation.brief = sdm_subsystem_info.brief; 397 sdm_invocation.acknowledge = sdm_subsystem_info.acknowledge; 398 sdm_invocation.notify = sdm_subsystem_info.notify; 399 sdm_invocation.auto_write = sdm_subsystem_info.auto_write; 400 401 if sdm_subsystem_info.fill_control = DEFAULT_FILL then 402 sdm_invocation.fill = (sdm_subsystem_info.input_type = TERMINAL_INPUT); 403 else sdm_invocation.fill = (sdm_subsystem_info.fill_control = FILL); 404 405 if sdm_subsystem_info.request_loop_control = DEFAULT_REQUEST_LOOP then 406 enter_request_loop = (sdm_subsystem_info.input_type = FILE_INPUT); 407 else enter_request_loop = (sdm_subsystem_info.request_loop_control = REQUEST_LOOP); 408 409 if sdm_subsystem_info.prompt_control.prompt_control = DEFAULT_PROMPT then ; 410 /* use the default prompt */ 411 else if sdm_subsystem_info.prompt_control.prompt_control = NO_PROMPT then 412 call ssu_$set_prompt_mode (sdm_invocation.sci_ptr, DONT_PROMPT); 413 else call ssu_$set_prompt (sdm_invocation.sci_ptr, sdm_subsystem_info.prompt_string); 414 415 call ssu_$set_abbrev_info (sdm_invocation.sci_ptr, sdm_subsystem_info.default_profile_ptr, 416 sdm_subsystem_info.profile_ptr, (sdm_subsystem_info.abbrev)); 417 418 call ssu_$set_ec_search_list (sdm_invocation.sci_ptr, sdm_data_$ec_search_list); 419 call ssu_$set_ec_suffix (sdm_invocation.sci_ptr, sdm_data_$ec_suffix); 420 421 sdm_invocation.rdm_invocation_ptr = sdm_subsystem_info.rdm_invocation_ptr; 422 /* remember the reply request (if any) */ 423 424 call sdm_set_request_tables_ (sdm_invocation_ptr, code); 425 if code ^= 0 then call abort_subsystem (sdm_invocation.sci_ptr, code, "Defining the subsystem request tables."); 426 427 call sdm_set_info_directories_ (sdm_invocation_ptr, code); 428 if code ^= 0 then 429 call abort_subsystem (sdm_invocation.sci_ptr, code, "Defining the subsystem info directories."); 430 431 432 /* Add the original message text to the body of the message if requested: The original text consists of the Date, From, 433* and Subject fields and the actual message body of the original messages. This text is indented as requested and the 434* original message bodies are also reformatted if requested */ 435 436 if sdm_subsystem_info.include_original_text then do; 437 call sdm_text_mgr_$process_original_text (sdm_invocation_ptr, 438 addr (sdm_subsystem_info.original_text_control), fatal_error); 439 if fatal_error then go to RETURN_FROM_SUBSYSTEM_WITH_FATAL_ERROR; 440 end; /* ... above call has already printed the error message */ 441 442 443 /* Input the message body either from the terminal or the specified file */ 444 445 if sdm_subsystem_info.input_type = TERMINAL_INPUT then 446 call sdm_text_mgr_$terminal_input (sdm_invocation_ptr, input_terminator_type, edit_requests_ptr, 447 edit_requests_lth, fatal_error); 448 449 else /*** if sdm_subsystem_info.input_type = FILE_INPUT then */ 450 do; 451 call sdm_text_mgr_$file_input (sdm_invocation_ptr, sdm_subsystem_info.input_file.dname, 452 sdm_subsystem_info.input_file.ename, fatal_error); 453 input_terminator_type = NORMAL_TERMINATION; 454 edit_requests_lth = 0; 455 end; 456 457 if fatal_error then /* above subroutines print the appropriate error messages */ 458 go to RETURN_FROM_SUBSYSTEM_WITH_FATAL_ERROR; 459 460 461 /* Build the initial request line */ 462 463 initial_rql_lth = sdm_subsystem_info.initial_requests_lth; 464 /* start with whatever the user requested */ 465 466 if input_terminator_type = ENTER_EDITOR then /* if necessary to add qedx request */ 467 initial_rql_lth = initial_rql_lth + length ("qedx -request """"; ") + 2 * edit_requests_lth; 468 469 if sdm_invocation.fill then /* if necessary to add fill request */ 470 initial_rql_lth = initial_rql_lth + length ("fill; "); 471 472 initial_rql_lth = initial_rql_lth + length ("send; quit"); 473 /* be sure there's enough room */ 474 475 call cu_$grow_stack_frame ((divide ((initial_rql_lth + 3), 4, 18, 0) + 1), initial_rql_ptr, (0)); 476 477 if ^enter_request_loop & /* user didn't explicitly ask for the request loop */ 478 (sdm_subsystem_info.initial_requests_lth = 0) & (input_terminator_type = NORMAL_TERMINATION) then 479 if sdm_invocation.fill then /* ... fill, send, and quit */ 480 initial_rql = "fill; send; quit"; 481 else initial_rql = "send; quit"; /* ... send and quit */ 482 483 else do; /* user asked for the request loop ... */ 484 initial_rql = ""; 485 if input_terminator_type = ENTER_EDITOR then do; 486 initial_rql = initial_rql || "qedx -request "; 487 initial_rql = initial_rql || requote_string_ (edit_requests); 488 initial_rql = initial_rql || "; "; /* ... supply input line via request option */ 489 end; 490 if sdm_invocation.fill then initial_rql = initial_rql || "fill; "; 491 if sdm_subsystem_info.initial_requests_lth ^= 0 then initial_rql = initial_rql || user_initial_requests; 492 end; 493 494 if length (initial_rql) > 0 then do; /* execute the initial request string */ 495 call ssu_$execute_line (sdm_invocation.sci_ptr, addwordno (initial_rql_ptr, 1), length (initial_rql), code) 496 ; 497 if code = ssu_et_$subsystem_aborted then go to RETURN_FROM_SUBSYSTEM; 498 end; 499 500 501 /* Invoke the subsystem listener */ 502 503 call ssu_$listen (sdm_invocation.sci_ptr, (null ()), code); 504 if code = ssu_et_$subsystem_aborted then code = 0; 505 506 if code ^= 0 then call abort_subsystem (sdm_invocation.sci_ptr, code, "Invoking the subsystem listener."); 507 508 509 /* That's all */ 510 511 RETURN_FROM_SUBSYSTEM: 512 P_code = sdm_invocation.abort_code; /* reflect any special conditions to the caller */ 513 return; 514 515 516 517 /* Prints an error message and aborts the attempted subsystem invocation */ 518 519 abort_subsystem: 520 procedure () options (variable); 521 522 call cu_$generate_call (ssu_$print_message, cu_$arg_list_ptr ()); 523 524 if sdm_invocation.debug_mode then do; /* simulate the actions of ssu_$abort_subsystem */ 525 call ioa_$ioa_switch (iox_$error_output, "ssu_error_: Debug mode set; calling cu_$cl."); 526 call cu_$cl (""b); 527 end; 528 529 go to RETURN_FROM_SUBSYSTEM_WITH_FATAL_ERROR; 530 531 end abort_subsystem; 532 533 RETURN_FROM_SUBSYSTEM_WITH_FATAL_ERROR: 534 P_code = error_table_$fatal_error; /* we've already reported the error */ 535 return; 536 537 /* Destroy a send_mail invocation */ 538 539 destroy_invocation: 540 entry (P_sdm_invocation_ptr, P_sdm_subsystem_info_ptr); 541 542 sdm_invocation_ptr = P_sdm_invocation_ptr; 543 sdm_subsystem_info_ptr = P_sdm_subsystem_info_ptr; 544 545 P_sdm_invocation_ptr, /* don't try to do any of this more than once */ 546 P_sdm_subsystem_info_ptr = null (); 547 548 if sdm_subsystem_info_ptr ^= null () then do; /* get rid of input address lists if needed */ 549 if sdm_subsystem_info.from ^= null () then 550 call mail_system_$free_address_list (sdm_subsystem_info.from, (0)); 551 if sdm_subsystem_info.reply_to ^= null () then 552 call mail_system_$free_address_list (sdm_subsystem_info.reply_to, (0)); 553 if sdm_subsystem_info.to ^= null () then call mail_system_$free_address_list (sdm_subsystem_info.to, (0)); 554 if sdm_subsystem_info.cc ^= null () then call mail_system_$free_address_list (sdm_subsystem_info.cc, (0)); 555 if sdm_subsystem_info.bcc ^= null () then 556 call mail_system_$free_address_list (sdm_subsystem_info.bcc, (0)); 557 end; 558 559 if sdm_invocation_ptr ^= null () then do; /* get rid of the message and subsystem invocation */ 560 if sdm_invocation.message_ptr ^= null () then 561 call mail_system_$free_message (sdm_invocation.message_ptr, (0)); 562 if sdm_invocation.sci_ptr ^= null () then /* ... destroying the subsystem releases the area */ 563 call ssu_$destroy_invocation (sdm_invocation.sci_ptr); 564 end; 565 566 return; 567 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 */ 568 569 2 1 /* BEGIN INCLUDE FILE ... sdm_subsystem_info.incl.pl1 */ 2 2 /* Created: 28 December 1978 by G. Palter (version 1) */ 2 3 /* Modified: 23 January 1979 by G. Palter (version 2) */ 2 4 /* Modified: 31 May 1980 by G. Palter (version 3) -- support of the "print_original" request */ 2 5 /* Modified: 16 February 1982 by G. Palter (version 4) */ 2 6 /* Modified: 17 September 1982 by G. Palter (version 5) */ 2 7 /* Modified: August 1983 by G. Palter (version 6) -- support for the bcc field and the new definition of the 2 8* In-Reply-To field */ 2 9 2 10 2 11 /* Arguments to the send_mail subsystem */ 2 12 2 13 dcl 1 sdm_subsystem_info aligned based (sdm_subsystem_info_ptr), 2 14 2 version character (8) unaligned, 2 15 2 16 2 input_type fixed binary, /* source of message text (see below) */ 2 17 2 input_file, /* identifies file of input text when needed */ 2 18 3 dname character (168) unaligned, /* ... directory and entry name */ 2 19 3 ename character (32) unaligned, 2 20 2 21 2 address_lists, /* gives sources, destinations, etc. */ 2 22 3 from pointer, /* ... -> authors */ 2 23 3 reply_to pointer, /* ... -> destinations for a reply */ 2 24 3 to pointer, /* ... -> primary recipients */ 2 25 3 cc pointer, /* ... -> secondary recipients */ 2 26 3 bcc pointer, /* ... -> "blind" recipients */ 2 27 2 28 2 subject aligned, /* subject of message */ 2 29 3 subject_ptr pointer, /* ... -> text of subject */ 2 30 3 subject_lth fixed binary (21), /* ... its length */ 2 31 3 subject_given bit (1) aligned, /* ... ON => subject given even zero length */ 2 32 2 33 2 options like send_mail_options aligned, /* permanent options as modified by ctl args */ 2 34 2 35 2 initial_requests aligned, /* initial request line to execute */ 2 36 3 initial_requests_ptr pointer, 2 37 3 initial_requests_lth fixed binary (21), 2 38 2 39 2 rdm_invocation_ptr pointer, /* -> description of read_mail invocation which created this 2 40* send_mail invocation to construct a reply message */ 2 41 2 42 2 original_messages_ptr pointer; /* -> optional list of original messages from which the 2 43* In-Reply-To field is generated and the original text(s) 2 44* extracted (see sdm_original_messages.incl.pl1) */ 2 45 2 46 dcl sdm_subsystem_info_ptr pointer; 2 47 2 48 dcl SDM_SUBSYSTEM_INFO_VERSION_6 character (8) static options (constant) initial ("sdmssi06"); 2 49 2 50 2 51 /* Sources of input for message text */ 2 52 2 53 dcl (TERMINAL_INPUT initial (1), 2 54 FILE_INPUT initial (2)) 2 55 fixed binary static options (constant); 2 56 2 57 /* END INCLUDE FILE ... sdm_subsystem_info.incl.pl1 */ 570 571 3 1 /* BEGIN INCLUDE FILE ... send_mail_options.incl.pl1 */ 3 2 /* Created: 28 December 1978 by G. Palter */ 3 3 /* Modified: 25 April 1980 by G. Palter for version 2 -- abbrev processing */ 3 4 /* Modified: 27 January 1981 by G. Palter for version 3 -- increased prompt string length */ 3 5 /* Modified: 16 February 1982 by G. Palter for version 4 -- default profile in addition to current profile */ 3 6 /* Modified: 17 September 1982 by G. Palter for version 5 -- new definition of -fill, -debug, and making -fill/-rql 3 7* dependent on mode of message input (terminal/file) */ 3 8 /* Modified: August 1983 by G. Palter for version 6 -- elimination of -header and -message_id (always ON), elimination of 3 9* -no_abort as the command line -abort/-no_abort no longer sets the default for the send request control argument, 3 10* addition of -auto_write/-no_auto_write as required by the MCR boards, and addition of options pertaining to 3 11* treatment of the original message(s) text when invoked by a reply request */ 3 12 3 13 /* User settable options of the send_mail subsystem */ 3 14 3 15 dcl 1 send_mail_options aligned based (send_mail_options_ptr), 3 16 2 version character (8) unaligned, 3 17 3 18 2 fill_width fixed binary, /* default width for filling */ 3 19 3 20 2 prompt_control aligned, /* controls how send_mail prompts */ 3 21 3 prompt_string character (64) varying, /* ... user-supplied string */ 3 22 3 flags aligned, 3 23 4 prompt_control bit (2) unaligned, /* ... default prompt/use above string/don't prompt */ 3 24 4 pad bit (34) unaligned, 3 25 3 26 2 default_profile_ptr pointer, /* -> default profile to be used if flags.abbrev is ON */ 3 27 2 profile_ptr pointer, /* -> profile to be used if flags.abbrev is ON */ 3 28 3 29 2 original_text_control aligned, /* controls send_mail's treatment of original message text */ 3 30 3 original_text_indentation fixed binary, /* ... # of columns to indent the text if requested */ 3 31 3 flags, 3 32 4 include_original_text bit (1) unaligned, /* ... ON => text from message(s) being answered is to be 3 33* included in the reply before the actual answer */ 3 34 4 indent_original_text bit (1) unaligned, /* ... ON => the original text is to be indented */ 3 35 4 fill_original_text bit (1) unaligned, /* ... ON => the original text is to be re-filled */ 3 36 4 pad bit (33) unaligned, 3 37 3 38 2 flags aligned, 3 39 3 acknowledge bit (1) unaligned, /* ON => user wants acknowledgement from recipients */ 3 40 3 brief bit (1) unaligned, /* ON => suppress "Mail delivered..." messages */ 3 41 3 notify bit (1) unaligned, /* ON => send each recipient a wakeup */ 3 42 3 abbrev bit (1) unaligned, /* ON => use abbrev processing in this invocation */ 3 43 3 debug bit (1) unaligned, /* ON => enable debugging features */ 3 44 3 auto_write bit (1) unaligned, /* ON => qedx request automatically rewrites on quit (sigh) */ 3 45 3 fill_control bit (2) unaligned, /* default/explicit -fill/explicit -no_fill */ 3 46 3 request_loop_control bit (2) unaligned, /* default/explicit -rql/explicit -nrql */ 3 47 3 pad bit (26) unaligned; 3 48 3 49 dcl send_mail_options_ptr pointer; 3 50 3 51 dcl SEND_MAIL_OPTIONS_VERSION_6 character (8) static options (constant) initial ("sdmopt06"); 3 52 3 53 3 54 /* Prompt control options */ 3 55 3 56 dcl (DEFAULT_PROMPT initial ("00"b), /* use default subsystem prompt */ 3 57 USE_PROMPT_STRING initial ("01"b), /* use prompt string supplied by user (via -prompt STR) */ 3 58 NO_PROMPT initial ("10"b)) /* disable subsystem prompt */ 3 59 bit (2) static options (constant); 3 60 3 61 3 62 /* Fill control options */ 3 63 3 64 dcl (DEFAULT_FILL initial ("00"b), /* fill if terminal input; do not fill if file input */ 3 65 FILL initial ("01"b), /* user specified -fill */ 3 66 NO_FILL initial ("10"b)) /* user specified -no_fill */ 3 67 bit (2) static options (constant); 3 68 3 69 3 70 /* Request loop control options */ 3 71 3 72 dcl (DEFAULT_REQUEST_LOOP initial ("00"b), /* enter loop if file input; do not enter if terminal input */ 3 73 REQUEST_LOOP initial ("01"b), /* user specified -request_loop */ 3 74 NO_REQUEST_LOOP initial ("10"b)) /* user specified -no_request_loop */ 3 75 bit (2) static options (constant); 3 76 3 77 /* END INCLUDE FILE ... send_mail_options.incl.pl1 */ 572 573 4 1 /* BEGIN INCLUDE FILE ... sdm_original_messages.incl.pl1 */ 4 2 /* Created: August 1983 by G. Palter */ 4 3 4 4 /* Definition of the list of original messages for which this message is a reply: send_mail must keep track of this list 4 5* separately from the copy in the message itself as, when qedx/apply -header is used, the mail system can not convert the 4 6* printed representation of the In-Reply-To field back into its internal form; therefore, send_mail will delete the the 4 7* list of reply references from the message before allowing the user to edit the message and will restore the list on 4 8* return from the editor. This list is also used by callers of the send_mail subsystem (ie: read_mail's reply request) 4 9* to supply the initial content for the reply references of the message; if requested, send_mail will extract the message 4 10* body from these message(s) for inclusion in the body of the message being created by the user */ 4 11 4 12 dcl 1 original_messages aligned based (original_messages_ptr), 4 13 2 version character (8) unaligned, 4 14 2 pad bit (36), 4 15 2 n_original_messages fixed binary, /* # of original messages listed herein */ 4 16 2 messages (original_messages_n_original_messages refer (original_messages.n_original_messages)), 4 17 3 message_ptr pointer, /* ... -> the message */ 4 18 3 message_idx fixed binary, /* ... # assigned to the message by read_mail */ 4 19 3 pad bit (36); 4 20 4 21 dcl ORIGINAL_MESSAGES_VERSION_1 character (8) static options (constant) initial ("sdmoml01"); 4 22 4 23 dcl original_messages_n_original_messages fixed binary; /* required to allocate the above structure */ 4 24 4 25 dcl original_messages_ptr pointer; 4 26 4 27 4 28 /* END INCLUDE FILE ... sdm_original_messages.incl.pl1 */ 574 575 5 1 /* BEGIN INCLUDE FILE ... sdm_data.incl.pl1 */ 5 2 /* Created: 20 December 1978 by G. Palter */ 5 3 /* Modified: 17 September 1982 by G. Palter to add sdm_data_$ec_suffix and sdm_data_$ec_search_list */ 5 4 /* Modified: August 1983 by G. Palter as part of send_mail conversion */ 5 5 5 6 5 7 /* Constant data used by the send_mail subsystem */ 5 8 5 9 dcl sdm_data_$version character (32) varying external; /* current version of the subsystem */ 5 10 5 11 dcl sdm_data_$info_directory character (168) external; /* directory containing self-documenation */ 5 12 5 13 dcl sdm_data_$special_message character (256) varying external; 5 14 /* message to print on each invocation if not null */ 5 15 5 16 dcl sdm_data_$ec_suffix character (32) external; /* exec_com suffix for send_mail */ 5 17 dcl sdm_data_$ec_search_list character (32) external; /* exec_com search list */ 5 18 5 19 dcl 1 sdm_data_$default_options like send_mail_options aligned external; 5 20 /* default options to control send_mail */ 5 21 5 22 5 23 /* Static data used by the send_mail subsystem */ 5 24 5 25 dcl sdm_data_$first_invocation bit (1) aligned external; /* ON => this is the first invocation in this process */ 5 26 5 27 dcl sdm_data_$default_from_field pointer external; /* -> an address list to be used when asked to display the 5 28* From field and it has not been explicitly set by the user: 5 29* this list contains exactly 1 address -- the user's mail 5 30* table address (or default mailbox address if anonymous) */ 5 31 5 32 /* END INCLUDE FILE ... sdm_data.incl.pl1 */ 576 577 6 1 /* BEGIN INCLUDE FILE ... sdm_text_mgr_constants.incl.pl1 */ 6 2 /* Created: 31 December 1978 by G. Palter */ 6 3 6 4 /* Constants used by sdm_text_mgr_ to communicate the type of input terminator read from the terminal */ 6 5 6 6 dcl (NORMAL_TERMINATION initial (1), /* '.': transmit the message */ 6 7 ENTER_REQUEST_LOOP initial (2), /* '\fq': enter request loop */ 6 8 ENTER_EDITOR initial (3)) /* '\f...': enter editor */ 6 9 fixed binary static options (constant); 6 10 6 11 /* END INCLUDE FILE ... sdm_text_mgr_constants.incl.pl1 */ 578 579 7 1 /* BEGIN INCLUDE FILE ... mlsys_data.incl.pl1 */ 7 2 /* Created: 20 Decembber 1978 by G. Palter */ 7 3 /* Modified: 1 July 1983 by G. Palter to merge with mlsys_internal_data_ */ 7 4 7 5 /* Constants defined by the Multics mail system for external use */ 7 6 7 7 dcl mlsys_data_$system_directory character (168) external; /* directory containing per-system data (mail table/queues) */ 7 8 7 9 7 10 /* Static data defined by the Multics mail system for external use */ 7 11 7 12 dcl mlsys_data_$user_default_mailbox_address pointer external; 7 13 /* -> the address of the user's default mailbox */ 7 14 dcl mlsys_data_$user_mail_table_address pointer external; /* -> the address of the user's entry in the mail table */ 7 15 dcl mlsys_data_$user_logbox_address pointer external; /* -> the address of the user's logbox */ 7 16 7 17 /* END INCLUDE FILE ... mlsys_data.incl.pl1 */ 580 581 8 1 /* BEGIN INCLUDE FILE ... mlsys_address_types.incl.pl1 */ 8 2 /* Created: June 1983 by G. Palter */ 8 3 8 4 /* Types of addresses supported by the Multics Mail System */ 8 5 8 6 dcl (INVALID_ADDRESS initial (0), /* a syntactically invalid address: used as a place holder 8 7* when parsing printed representations */ 8 8 USER_MAILBOX_ADDRESS initial (1), /* identifies a user's default mailbox */ 8 9 LOGBOX_ADDRESS initial (2), /* identifies a user's logbox */ 8 10 SAVEBOX_ADDRESS initial (3), /* identifies one of a user's saveboxes by pathname */ 8 11 MAILBOX_ADDRESS initial (4), /* identifies some other mailbox by pathname */ 8 12 FORUM_ADDRESS initial (5), /* identifies a forum meeting by pathname */ 8 13 FOREIGN_ADDRESS initial (6), /* identifies a user (or group) on another compute system */ 8 14 MAIL_TABLE_ADDRESS initial (7), /* identifies an entry in the system's mail table */ 8 15 MAILING_LIST_ADDRESS initial (8), /* identifies a mailing list by pathname */ 8 16 NAMED_GROUP_ADDRESS initial (9)) /* identifies a named group of addresses */ 8 17 fixed binary static options (constant); 8 18 8 19 /* END INCLUDE FILE ... mlsys_address_types.incl.pl1 */ 582 583 9 1 /* BEGIN INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 9 2 /* Created: June 1983 by G. Palter */ 9 3 9 4 /* Definition of an address list -- a collection of addresses used as the value of certain message fields, etc. */ 9 5 9 6 dcl 1 address_list aligned based (address_list_ptr), 9 7 2 version character (8) unaligned, 9 8 2 reserved bit (144), /* ... exclusively for use by the mail system */ 9 9 2 n_addresses fixed binary, /* # of address in this list */ 9 10 2 addresses (address_list_n_addresses refer (address_list.n_addresses)) pointer; 9 11 9 12 dcl ADDRESS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsals02"); 9 13 9 14 dcl address_list_ptr pointer; 9 15 9 16 dcl address_list_n_addresses fixed binary; /* reserved exclusively for use by the mail system */ 9 17 9 18 /* END INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 584 585 10 1 /* BEGIN INCLUDE FILE ... mlsys_message.incl.pl1 */ 10 2 10 3 10 4 /****^ HISTORY COMMENTS: 10 5* 1) change(85-12-19,Herbst), approve(86-03-25,MCR7367), 10 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 10 7* Added seen switch to message. 10 8* END HISTORY COMMENTS */ 10 9 10 10 10 11 /* Created: June 1983 by G. Palter */ 10 12 10 13 /* Definition of a message as used by the Multics Mail System */ 10 14 10 15 dcl 1 message aligned based (message_ptr), 10 16 2 version character (8) unaligned, 10 17 2 reserved bit (144), /* for exclusive use of the mail system */ 10 18 2 n_reply_references fixed binary, /* # of messages for which this is a reply */ 10 19 2 n_user_fields fixed binary, /* # of non-standard header fields in this message */ 10 20 2 n_redistributions fixed binary, /* # of times this message has been forwarded */ 10 21 2 n_body_sections fixed binary, /* # of sections in the body */ 10 22 2 flags, 10 23 3 interactive bit (1) unaligned, /* ON => this is an interactive message */ 10 24 3 can_be_deleted bit (1) unaligned, /* ON => the user can delete this message if desired */ 10 25 3 marked_for_deletion bit (1) unaligned, /* ON => message will be deleted when mailbox is closed */ 10 26 3 must_be_acknowledged bit (1) unaligned, /* ON => an ACK should be generated when message is read */ 10 27 3 seen bit (1) unaligned, /* ON => user has printed message at least once */ 10 28 3 reserved bit (31) unaligned, /* for use by the mail system */ 10 29 2 pad bit (36), 10 30 2 envelope like message_envelope, /* who/when/how the message was mailed & delivered */ 10 31 2 header, 10 32 3 message_id bit (72), /* ID of this message (same value for all copies) */ 10 33 3 access_class bit (72), /* AIM access class of this message */ 10 34 3 date_time_created fixed binary (71), /* date/time this message was composed */ 10 35 3 from pointer, /* -> address list of author(s) of the message */ 10 36 3 reply_to pointer, /* -> address list of recipients for reply (if not authors) */ 10 37 3 to pointer, /* -> address list of primary recipients */ 10 38 3 cc pointer, /* -> address list of secondary recipients */ 10 39 3 bcc pointer, /* -> address list of blind recipients */ 10 40 3 subject like message_text_field, /* subject of the message */ 10 41 3 reply_references pointer, /* -> list of messages for which this message is a reply */ 10 42 3 user_fields_list pointer, /* -> list of user-defined fields in this message */ 10 43 2 redistributions_list pointer, /* -> redistributions list for this message */ 10 44 2 body, 10 45 3 total_lines fixed binary (21), /* total # of lines in the body or -1 if indeterminate */ 10 46 3 pad bit (36), 10 47 3 body_sections (message_n_body_sections refer (message.n_body_sections)) like message_body_section; 10 48 10 49 dcl MESSAGE_VERSION_2 character (8) static options (constant) initial ("mlsmsg02"); 10 50 10 51 dcl message_subject character (message.header.subject.text_lth) unaligned based (message.header.subject.text_ptr); 10 52 10 53 dcl message_ptr pointer; 10 54 10 55 dcl (message_n_body_sections, message_trace_n_relays, message_n_redistributions, message_n_user_fields, 10 56 message_references_list_n_references) 10 57 fixed binary; /* for exclusive use of the mail system */ 10 58 10 59 /* Definition of a message envelope: describes when, by whom, and by what route the message was mailed */ 10 60 10 61 dcl 1 message_envelope aligned based (message_envelope_ptr), 10 62 2 date_time_mailed fixed binary (71), /* date/time this message was entered into the mail system */ 10 63 2 sender pointer, /* -> address of entity that mailed the message */ 10 64 2 trace pointer, /* -> message_trace describing how it got here */ 10 65 2 date_time_delivered fixed binary (71), /* date/time this message was delivered */ 10 66 2 delivered_by pointer, /* -> address of entity that delivered the message */ 10 67 2 acknowledge_to pointer; /* -> address of entity to receive ACK when message is read */ 10 68 10 69 dcl message_envelope_ptr pointer; 10 70 10 71 10 72 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the message envelope */ 10 73 10 74 dcl 1 message_envelope_parameter aligned based (message_envelope_parameter_ptr), 10 75 2 pad pointer, /* forces even word alignment */ 10 76 2 version character (8) unaligned, 10 77 2 envelope like message_envelope; 10 78 10 79 dcl MESSAGE_ENVELOPE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsenv02"); 10 80 10 81 dcl message_envelope_parameter_ptr pointer; 10 82 10 83 10 84 /* Definition of a message trace: describes the route and each relay operation by which a message was passed through the 10 85* networks to reach this recipient */ 10 86 10 87 dcl 1 message_trace aligned based (message_trace_ptr), 10 88 2 version character (8) unaligned, 10 89 2 reserved bit (144), /* ... exclusively for use by the mail system */ 10 90 2 implicit_route pointer, /* -> an address_route which defines the route it took */ 10 91 2 pad bit (36), 10 92 2 n_relays fixed binary, /* # of relay operations required to reach this site */ 10 93 2 relays (message_trace_n_relays refer (message_trace.n_relays)), 10 94 3 date_time_relayed fixed binary (71), /* ... when this relay operation took place */ 10 95 3 sending_host character (256) varying, /* ... the host which relayed the message */ 10 96 3 receiving_host character (256) varying, /* ... the host which received it */ 10 97 3 communications_media character (32) unaligned, /* ... medium over which relay took place (ARPA, Tymnet) */ 10 98 3 communications_protocol character (32) unaligned,/* ... low-level protocol used (TCP, X.25) */ 10 99 3 mail_protocol character (32) unaligned, /* ... mailer protocol used (SMTP, NBS) */ 10 100 3 relay_id bit (72), /* ... unique ID assigned by receiving system or ""b */ 10 101 3 relay_recipient pointer; /* ... -> address of recipient as given by sending system */ 10 102 10 103 dcl MESSAGE_TRACE_VERSION_2 character (8) static options (constant) initial ("mlstrc02"); 10 104 10 105 dcl message_trace_ptr pointer; 10 106 10 107 /* Definition of a message's redistributions list */ 10 108 10 109 dcl 1 message_redistributions_list aligned based (message.redistributions_list), 10 110 2 version character (8) unaligned, 10 111 2 reserved bit (144), /* ... exclusively for use by the mail system */ 10 112 2 pad bit (36), 10 113 2 n_redistributions fixed binary, /* # of redistributions */ 10 114 2 redistributions (message_n_redistributions refer (message_redistributions_list.n_redistributions)) 10 115 like message_redistribution; /* the redistributions: oldest first */ 10 116 10 117 dcl MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsrl002"); 10 118 10 119 10 120 /* Definition of a single redistribution (forwarding) of a message */ 10 121 10 122 dcl 1 message_redistribution aligned based (message_redistribution_ptr), 10 123 2 envelope like message_envelope, 10 124 2 header, 10 125 3 message_id bit (72), /* ID of this redistribution (same for all copies) */ 10 126 3 date_time_created fixed binary (71), /* date/time when this redistribution was made */ 10 127 3 from pointer, /* -> address list of authors of this redistribution */ 10 128 3 to pointer, /* -> address list of recipients of the redistribution */ 10 129 3 comment like message_text_field; /* optional comment associated with the redistribution */ 10 130 10 131 dcl message_redistribution_comment character (message_redistribution.comment.text_lth) unaligned 10 132 based (message_redistribution.comment.text_ptr); 10 133 10 134 dcl message_redistribution_ptr pointer; 10 135 10 136 10 137 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the redistributions of a message */ 10 138 10 139 dcl 1 message_redistribution_parameter aligned based (message_redistribution_parameter_ptr), 10 140 2 pad pointer, /* forces even word alignment */ 10 141 2 version character (8) unaligned, 10 142 2 redistribution like message_redistribution; 10 143 10 144 dcl MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsdist2"); 10 145 10 146 dcl message_redistribution_parameter_ptr pointer; 10 147 10 148 /* Definition of the list of user-defined fields in a message */ 10 149 10 150 dcl 1 message_user_fields_list aligned based (message.user_fields_list), 10 151 2 version character (8) unaligned, 10 152 2 reserved bit (144), /* ... exclusively for use by the mail system */ 10 153 2 pad bit (36), 10 154 2 n_user_fields fixed binary, /* # of user-defined fields in the message */ 10 155 2 user_fields (message_n_user_fields refer (message_user_fields_list.n_user_fields)) 10 156 like message_user_field; /* the actual user-defined fields */ 10 157 10 158 dcl MESSAGE_USER_FIELDS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsufl02"); 10 159 10 160 10 161 /* Definition of a user defined message header field */ 10 162 10 163 dcl 1 message_user_field aligned based (message_user_field_ptr), 10 164 2 header, 10 165 3 field_id bit (36) aligned, /* identifies the purpose of this field */ 10 166 3 field_type fixed binary, /* type of data contained in this field */ 10 167 2 field_type_variable bit (144); /* the actual data (see below) */ 10 168 10 169 dcl message_user_field_ptr pointer; 10 170 10 171 10 172 /* Defined types of user defined fields */ 10 173 10 174 dcl (MESSAGE_TEXT_USER_FIELD initial (1), /* content of the field is a text string */ 10 175 MESSAGE_ADDRESS_LIST_USER_FIELD initial (2), /* content of the field is an address list */ 10 176 MESSAGE_DATE_USER_FIELD initial (3), /* content of the field is a date/time */ 10 177 MESSAGE_INTEGER_USER_FIELD initial (4)) /* content of the filed is a fixed binary value */ 10 178 fixed binary static options (constant); 10 179 10 180 10 181 /* Structures used to access the data for the different types of user defined fields */ 10 182 10 183 dcl 1 message_text_user_field aligned based (message_user_field_ptr), 10 184 2 header like message_user_field.header, 10 185 2 text like message_text_field; /* the message text */ 10 186 10 187 dcl message_text_user_field_text character (message_text_user_field.text.text_lth) unaligned 10 188 based (message_text_user_field.text.text_ptr); 10 189 10 190 dcl 1 message_address_list_user_field aligned based (message_user_field_ptr), 10 191 2 header like message_user_field.header, 10 192 2 address_list_ptr pointer, /* -> the address list */ 10 193 2 pad bit (72); 10 194 10 195 dcl 1 message_date_user_field aligned based (message_user_field_ptr), 10 196 2 header like message_user_field.header, 10 197 2 date_time fixed binary (71), /* the clock reading */ 10 198 2 pad bit (72); 10 199 10 200 dcl 1 message_integer_user_field aligned based (message_user_field_ptr), 10 201 2 header like message_user_field.header, 10 202 2 value fixed binary (35), /* the integer value */ 10 203 2 pad bit (108); 10 204 10 205 10 206 /* Structure used in calls to mail_system_ entrypoints which manipulate the user-defined fields of a message */ 10 207 10 208 dcl 1 message_user_field_parameter aligned based (message_user_field_parameter_ptr), 10 209 2 pad pointer, /* forces even word alignment */ 10 210 2 version character (8) unaligned, 10 211 2 user_field like message_user_field; 10 212 10 213 dcl MESSAGE_USER_FIELD_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsudf02"); 10 214 10 215 dcl message_user_field_parameter_ptr pointer; 10 216 10 217 /* Definition of a list of message references used as the value of message header fields (eg: In-Reply-To) */ 10 218 10 219 dcl 1 message_references_list aligned based (message_references_list_ptr), 10 220 2 version character (8) unaligned, 10 221 2 reserved bit (144), /* ... exclusively for use by the mail system */ 10 222 2 pad bit (36), 10 223 2 n_references fixed binary, /* # of references in this list */ 10 224 2 references (message_references_list_n_references refer (message_references_list.n_references)) 10 225 like message_reference; /* the references themselves */ 10 226 10 227 dcl MESSAGE_REFERENCES_LIST_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 10 228 10 229 dcl message_references_list_ptr pointer; 10 230 10 231 10 232 /* Definition of a reference to another message */ 10 233 10 234 dcl 1 message_reference aligned based (message_reference_ptr), 10 235 2 message_id bit (72), /* ID of the other message */ 10 236 2 date_time_created fixed binary (71), /* date/time the other message was created */ 10 237 2 from pointer, /* -> address list of authors of the other message */ 10 238 2 subject like message_text_field; /* subject of the other message */ 10 239 10 240 dcl message_reference_subject character (message_reference.subject.text_lth) unaligned 10 241 based (message_reference.subject.text_ptr); 10 242 10 243 dcl message_reference_ptr pointer; 10 244 10 245 10 246 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate message references */ 10 247 10 248 dcl 1 message_reference_parameter aligned based (message_reference_parameter_ptr), 10 249 2 pad pointer, /* forces even word alignment */ 10 250 2 version character (8) unaligned, 10 251 2 reference like message_reference; 10 252 10 253 dcl MESSAGE_REFERENCE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 10 254 10 255 dcl message_reference_parameter_ptr pointer; 10 256 10 257 10 258 /* Definition of a text field in a message (Subject, Comment, or a user defined field) */ 10 259 10 260 dcl 1 message_text_field aligned based (message_text_field_ptr), 10 261 2 text_ptr pointer, /* -> the actual text */ 10 262 2 text_lth fixed binary (21), /* length of said text */ 10 263 2 flags, 10 264 3 multiline_text bit (1) unaligned, /* ON => the text of this field may span multiple lines; 10 265* OFF => the text will always be a single line */ 10 266 3 reserved bit (35) unaligned; /* for exclusive use of the mail system */ 10 267 10 268 dcl message_text_field_text character (message_text_field.text_lth) unaligned based (message_text_field.text_ptr); 10 269 10 270 dcl message_text_field_ptr pointer; 10 271 10 272 /* Definition of a section of the body of a message */ 10 273 10 274 dcl 1 message_body_section aligned based (message_body_section_ptr), 10 275 2 header, 10 276 3 section_type fixed binary, /* type of "text" stored in this section */ 10 277 3 section_n_lines fixed binary (21), /* # of lines in this section or -1 if indeterminate */ 10 278 2 section_type_variable bit (144); /* the actual data (see below) */ 10 279 10 280 dcl message_body_section_ptr pointer; 10 281 10 282 10 283 /* Defined types of message body sections */ 10 284 10 285 dcl (MESSAGE_PREFORMATTED_BODY_SECTION initial (1), /* text formatted by the authors/sender */ 10 286 MESSAGE_BIT_STRING_BODY_SECTION initial (2)) /* arbitrary bit string */ 10 287 fixed binary static options (constant); 10 288 10 289 10 290 /* Structures used to access the data for the different types of message body sections */ 10 291 10 292 dcl 1 message_preformatted_body_section aligned based (message_body_section_ptr), 10 293 2 header like message_body_section.header, 10 294 2 text_ptr pointer, /* -> the text */ 10 295 2 text_lth fixed binary (21), /* length of said text in characters */ 10 296 2 reserved bit (36); /* for exclusive use of the mail system */ 10 297 10 298 dcl message_preformatted_body_section_text character (message_preformatted_body_section.text_lth) unaligned 10 299 based (message_preformatted_body_section.text_ptr); 10 300 10 301 dcl 1 message_bit_string_body_section aligned based (message_body_section_ptr), 10 302 2 header like message_body_section.header, 10 303 2 bit_string_ptr pointer, /* -> the bit string */ 10 304 2 bit_string_lth fixed binary (24), /* length of said bit string in bits (obviously) */ 10 305 2 reserved bit (36); /* for exclusive use of the mail system */ 10 306 10 307 dcl message_bit_string_body_section_bit_string bit (message_bit_string_body_section.bit_string_lth) unaligned 10 308 based (message_bit_string_body_section.bit_string_ptr); 10 309 10 310 10 311 /* Structure used in calls to mail_system_ entrypoints which manipulate the sections of a message's body */ 10 312 10 313 dcl 1 message_body_section_parameter aligned based (message_body_section_parameter_ptr), 10 314 2 pad pointer, /* forces even word alignment */ 10 315 2 version character (8) unaligned, 10 316 2 section like message_body_section; 10 317 10 318 dcl MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsmbs02"); 10 319 10 320 dcl message_body_section_parameter_ptr pointer; 10 321 10 322 /* END INCLUDE FILE ... mlsys_message.incl.pl1 */ 586 587 11 1 /* BEGIN INCLUDE FILE area_info.incl.pl1 12/75 */ 11 2 11 3 dcl area_info_version_1 fixed bin static init (1) options (constant); 11 4 11 5 dcl area_infop ptr; 11 6 11 7 dcl 1 area_info aligned based (area_infop), 11 8 2 version fixed bin, /* version number for this structure is 1 */ 11 9 2 control aligned like area_control, /* control bits for the area */ 11 10 2 owner char (32) unal, /* creator of the area */ 11 11 2 n_components fixed bin, /* number of components in the area (returned only) */ 11 12 2 size fixed bin (18), /* size of the area in words */ 11 13 2 version_of_area fixed bin, /* version of area (returned only) */ 11 14 2 areap ptr, /* pointer to the area (first component on multisegment area) */ 11 15 2 allocated_blocks fixed bin, /* number of blocks allocated */ 11 16 2 free_blocks fixed bin, /* number of free blocks not in virgin */ 11 17 2 allocated_words fixed bin (30), /* number of words allocated in the area */ 11 18 2 free_words fixed bin (30); /* number of words free in area not in virgin */ 11 19 11 20 dcl 1 area_control aligned based, 11 21 2 extend bit (1) unal, /* says area is extensible */ 11 22 2 zero_on_alloc bit (1) unal, /* says block gets zerod at allocation time */ 11 23 2 zero_on_free bit (1) unal, /* says block gets zerod at free time */ 11 24 2 dont_free bit (1) unal, /* debugging aid, turns off free requests */ 11 25 2 no_freeing bit (1) unal, /* for allocation method without freeing */ 11 26 2 system bit (1) unal, /* says area is managed by system */ 11 27 2 pad bit (30) unal; 11 28 11 29 /* END INCLUDE FILE area_info.incl.pl1 */ 588 589 12 1 /* BEGIN INCLUDE FILE ... ssu_prompt_modes.incl.pl1 */ 12 2 /* Created: 15 February 1982 by G. Palter */ 12 3 12 4 /* Values for use in calls to ssu_$set_prompt_mode to control prompting by the subsystem listener */ 12 5 12 6 dcl PROMPT bit (1) static options (constant) initial ("0"b); 12 7 dcl DONT_PROMPT bit (1) static options (constant) initial ("1"b); 12 8 12 9 dcl PROMPT_AFTER_NULL_LINES bit (2) static options (constant) initial ("01"b); 12 10 dcl DONT_PROMPT_AFTER_NULL_LINES bit (2) static options (constant) initial ("00"b); 12 11 12 12 dcl PROMPT_IF_TYPEAHEAD bit (3) static options (constant) initial ("000"b); 12 13 dcl DONT_PROMPT_IF_TYPEAHEAD bit (3) static options (constant) initial ("001"b); 12 14 12 15 /* For example: 12 16* call ssu_$set_prompt_mode (sci_ptr, PROMPT | DONT_PROMPT_AFTER_NULL_LINES | DONT_PROMPT_IF_TYPEAHEAD); */ 12 17 12 18 /* END INCLUDE FILE ... ssu_prompt_modes.incl.pl1 */ 590 591 592 end sdm_subsystem_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/22/86 1010.8 sdm_subsystem_.pl1 >spec>install>1059>sdm_subsystem_.pl1 568 1 10/27/83 2104.2 sdm_invocation.incl.pl1 >ldd>include>sdm_invocation.incl.pl1 570 2 10/27/83 2104.3 sdm_subsystem_info.incl.pl1 >ldd>include>sdm_subsystem_info.incl.pl1 572 3 10/27/83 2104.2 send_mail_options.incl.pl1 >ldd>include>send_mail_options.incl.pl1 574 4 10/27/83 2104.3 sdm_original_messages.incl.pl1 >ldd>include>sdm_original_messages.incl.pl1 576 5 10/27/83 2104.3 sdm_data.incl.pl1 >ldd>include>sdm_data.incl.pl1 578 6 10/27/83 2104.2 sdm_text_mgr_constants.incl.pl1 >ldd>include>sdm_text_mgr_constants.incl.pl1 580 7 10/27/83 2104.2 mlsys_data.incl.pl1 >ldd>include>mlsys_data.incl.pl1 582 8 10/27/83 2104.2 mlsys_address_types.incl.pl1 >ldd>include>mlsys_address_types.incl.pl1 584 9 10/27/83 2104.2 mlsys_address_list.incl.pl1 >ldd>include>mlsys_address_list.incl.pl1 586 10 05/22/86 1005.9 mlsys_message.incl.pl1 >spec>install>1059>mlsys_message.incl.pl1 588 11 06/11/76 1043.4 area_info.incl.pl1 >ldd>include>area_info.incl.pl1 590 12 04/13/82 1620.2 ssu_prompt_modes.incl.pl1 >ldd>include>ssu_prompt_modes.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 9-12 set ref 268* 273* 276* DEFAULT_FILL constant bit(2) initial unaligned dcl 3-64 ref 401 DEFAULT_PROMPT constant bit(2) initial unaligned dcl 3-56 ref 409 DEFAULT_REQUEST_LOOP constant bit(2) initial unaligned dcl 3-72 ref 405 DONT_PROMPT 000046 constant bit(1) initial unaligned dcl 12-7 set ref 411* ENTER_EDITOR constant fixed bin(17,0) initial dcl 6-6 ref 466 485 FILE_INPUT constant fixed bin(17,0) initial dcl 2-53 ref 405 FILL constant bit(2) initial unaligned dcl 3-64 ref 403 INVALID_ADDRESS constant fixed bin(17,0) initial dcl 8-6 ref 273 MESSAGE_VERSION_2 000000 constant char(8) initial unaligned dcl 10-49 set ref 255* NORMAL_TERMINATION constant fixed bin(17,0) initial dcl 6-6 ref 453 477 NO_PROMPT constant bit(2) initial unaligned dcl 3-56 ref 411 ORIGINAL_MESSAGES_VERSION_1 000004 constant char(8) initial unaligned dcl 4-21 ref 307 P_code parameter fixed bin(35,0) dcl 62 set ref 165 169* 184* 185 232* 238 245* 511* 533* P_sdm_invocation_ptr parameter pointer dcl 57 set ref 165 230* 238 241 539 542 545* P_sdm_subsystem_info_ptr parameter pointer dcl 58 set ref 165 231* 238 242 539 543 545* P_sdm_subsystem_info_version parameter char(8) unaligned dcl 60 ref 165 168 REQUEST_LOOP constant bit(2) initial unaligned dcl 3-72 ref 407 SDM_INVOCATION 000010 constant char(8) initial unaligned dcl 1-36 ref 196 SDM_SUBSYSTEM_INFO_VERSION_6 000006 constant char(8) initial unaligned dcl 2-48 ref 168 212 244 SEND_MAIL 000012 constant char(32) initial unaligned dcl 102 set ref 184* TERMINAL_INPUT constant fixed bin(17,0) initial dcl 2-53 ref 214 401 445 UNPROCESSED_MESSAGE constant fixed bin(17,0) initial dcl 1-47 ref 259 abbrev 140(03) based bit(1) level 4 packed unaligned dcl 2-13 set ref 415 abort_code 22 based fixed bin(35,0) level 2 dcl 1-6 ref 511 acknowledge 15(01) based bit(1) level 3 in structure "sdm_invocation" packed unaligned dcl 1-6 in procedure "sdm_subsystem_" set ref 397* acknowledge 140 based bit(1) level 4 in structure "sdm_subsystem_info" packed unaligned dcl 2-13 in procedure "sdm_subsystem_" set ref 397 addcharno builtin function dcl 160 ref 372 372 addr builtin function dcl 160 ref 190 190 353 353 437 437 address_lists 66 based structure level 2 dcl 2-13 set ref 216* address_type 000551 automatic fixed bin(17,0) dcl 100 set ref 272* 273 addwordno builtin function dcl 160 ref 495 495 area_control based structure level 1 dcl 11-20 area_info based structure level 1 dcl 11-7 area_info_version_1 constant fixed bin(17,0) initial dcl 11-3 ref 188 area_ptr 4 based pointer level 2 dcl 1-6 set ref 199* 210 313 auto_write 15(05) based bit(1) level 3 in structure "sdm_invocation" packed unaligned dcl 1-6 in procedure "sdm_subsystem_" set ref 399* auto_write 140(05) based bit(1) level 4 in structure "sdm_subsystem_info" packed unaligned dcl 2-13 in procedure "sdm_subsystem_" set ref 399 bcc 76 based pointer level 3 dcl 2-13 set ref 297 298* 555 555* brief 140(01) based bit(1) level 4 in structure "sdm_subsystem_info" packed unaligned dcl 2-13 in procedure "sdm_subsystem_" set ref 396 brief 15 based bit(1) level 3 in structure "sdm_invocation" packed unaligned dcl 1-6 in procedure "sdm_subsystem_" set ref 396* cc 74 based pointer level 3 dcl 2-13 set ref 292 293* 554 554* cleanup 000554 stack reference condition dcl 158 ref 179 clock builtin function dcl 160 ref 260 code 000100 automatic fixed bin(35,0) dcl 67 set ref 255* 256 256* 263* 264 264* 268* 269 269* 273* 276* 278 282* 283 283* 288* 289 289* 293* 294 294* 298* 299 299* 320* 322 322* 343* 344 344* 353* 354 357* 359 359* 364 372* 374 376* 380* 384 384* 388* 424* 425 425* 427* 428 428* 495* 497 503* 504 504* 506 506* codeptr builtin function dcl 160 ref 332 332 334 334 control 1 000116 automatic structure level 2 dcl 90 cu_$arg_list_ptr 000026 constant entry external dcl 113 ref 522 522 cu_$cl 000030 constant entry external dcl 114 ref 526 cu_$generate_call 000032 constant entry external dcl 115 ref 522 cu_$grow_stack_frame 000034 constant entry external dcl 116 ref 475 date_time_body_modified 12 based fixed bin(71,0) level 3 dcl 1-6 set ref 260* debug 140(04) based bit(1) level 4 packed unaligned dcl 2-13 set ref 249 debug_mode 15(04) based bit(1) level 3 packed unaligned dcl 1-6 set ref 249* 250 524 default_profile_ptr 132 based pointer level 3 dcl 2-13 set ref 415* divide builtin function dcl 160 ref 475 dname 3 based char(168) level 3 packed unaligned dcl 2-13 set ref 451* edit_requests based char unaligned dcl 78 set ref 487* edit_requests_lth 000110 automatic fixed bin(21,0) dcl 79 set ref 445* 454* 466 487 487 edit_requests_ptr 000112 automatic pointer dcl 80 set ref 445* 487 ename 55 based char(32) level 3 packed unaligned dcl 2-13 set ref 451* enter_request_loop 000546 automatic bit(1) dcl 96 set ref 405* 407* 477 error_table_$fatal_error 000016 external static fixed bin(35,0) dcl 109 ref 533 error_table_$long_record 000020 external static fixed bin(35,0) dcl 109 ref 364 error_table_$unimplemented_version 000022 external static fixed bin(35,0) dcl 109 set ref 169 245 307* extend 1 000116 automatic bit(1) level 3 packed unaligned dcl 90 set ref 189* fatal_error 000547 automatic bit(1) dcl 97 set ref 437* 439 445* 451* 457 fill 15(03) based bit(1) level 3 packed unaligned dcl 1-6 set ref 401* 403* 469 477 490 fill_control 140(06) based bit(2) level 4 packed unaligned dcl 2-13 set ref 401 403 fill_width 106 based fixed bin(17,0) level 3 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" set ref 394 fill_width 14 based fixed bin(17,0) level 2 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_subsystem_" set ref 394* flags 130 based structure level 4 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" flags 137 based structure level 4 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" flags 15 based structure level 2 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_subsystem_" flags 140 based structure level 3 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" from 66 based pointer level 3 dcl 2-13 set ref 262 263* 549 549* header 10 based structure array level 3 in structure "message_user_fields_list" dcl 10-150 in procedure "sdm_subsystem_" header based structure level 2 in structure "message_body_section" dcl 10-274 in procedure "sdm_subsystem_" header based structure level 2 in structure "message_user_field" dcl 10-163 in procedure "sdm_subsystem_" header 4 based structure level 3 in structure "message_user_field_parameter" dcl 10-208 in procedure "sdm_subsystem_" header 64 based structure array level 4 in structure "message" dcl 10-15 in procedure "sdm_subsystem_" header 4 based structure level 3 in structure "message_body_section_parameter" dcl 10-313 in procedure "sdm_subsystem_" idx 000552 automatic fixed bin(17,0) dcl 100 set ref 319* 320 322* include_original_text 137 based bit(1) level 5 packed unaligned dcl 2-13 set ref 436 initial_requests 142 based structure level 2 dcl 2-13 initial_requests_lth 144 based fixed bin(21,0) level 3 dcl 2-13 set ref 223* 463 477 491 491 initial_requests_ptr 142 based pointer level 3 dcl 2-13 ref 491 initial_rql based varying char dcl 74 set ref 477* 481* 484* 486* 486 487* 487 488* 488 490* 490 491* 491 494 495 495 initial_rql_lth 000104 automatic fixed bin(21,0) dcl 75 set ref 463* 466* 466 469* 469 472* 472 475 477 481 484 486 487 488 490 491 initial_rql_ptr 000106 automatic pointer dcl 76 set ref 475* 477 481 484 486 486 487 487 488 488 490 490 491 491 494 495 495 495 495 input_file 3 based structure level 2 dcl 2-13 input_terminator_type 000550 automatic fixed bin(17,0) dcl 99 set ref 445* 453* 466 477 485 input_type 2 based fixed bin(17,0) level 2 dcl 2-13 set ref 214* 401 405 445 ioa_$ioa_switch 000036 constant entry external dcl 117 ref 525 ioa_$nnl 000040 constant entry external dcl 118 ref 351 iox_$error_output 000012 external static pointer dcl 105 set ref 525* iox_$get_line 000042 constant entry external dcl 119 ref 353 372 iox_$user_input 000014 external static pointer dcl 106 set ref 353* 372* length builtin function dcl 160 ref 353 353 357 380 466 469 472 494 495 495 local_ai 000116 automatic structure level 1 dcl 90 set ref 187* 190 190 mail_system_$add_address 000044 constant entry external dcl 120 ref 273 276 mail_system_$add_reply_reference 000046 constant entry external dcl 121 ref 320 mail_system_$create_address_list 000050 constant entry external dcl 122 ref 268 mail_system_$create_message 000052 constant entry external dcl 123 ref 255 mail_system_$free_address_list 000054 constant entry external dcl 124 ref 549 551 553 554 555 mail_system_$free_message 000056 constant entry external dcl 125 ref 560 mail_system_$get_address_type 000060 constant entry external dcl 126 ref 272 mail_system_$replace_bcc 000062 constant entry external dcl 127 ref 298 mail_system_$replace_cc 000064 constant entry external dcl 128 ref 293 mail_system_$replace_from 000066 constant entry external dcl 129 ref 263 mail_system_$replace_reply_to 000070 constant entry external dcl 130 ref 282 mail_system_$replace_subject 000072 constant entry external dcl 131 ref 343 357 380 mail_system_$replace_to 000074 constant entry external dcl 132 ref 288 message_body_section based structure level 1 dcl 10-274 message_envelope based structure level 1 dcl 10-61 message_idx 6 based fixed bin(17,0) array level 3 dcl 4-12 set ref 322* message_info 6 based structure level 2 dcl 1-6 message_ptr 6 based pointer level 3 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_subsystem_" set ref 201* 255* 263* 282* 288* 293* 298* 320* 343* 357* 380* 560 560* message_ptr 4 based pointer array level 3 in structure "original_messages" dcl 4-12 in procedure "sdm_subsystem_" set ref 320* message_redistribution based structure level 1 dcl 10-122 message_reference based structure level 1 dcl 10-234 message_state 10 based fixed bin(17,0) level 3 dcl 1-6 set ref 259* message_text_field based structure level 1 dcl 10-260 message_user_field based structure level 1 dcl 10-163 messages 4 based structure array level 2 dcl 4-12 mlsys_data_$user_default_mailbox_address 000172 external static pointer dcl 7-12 set ref 273* mlsys_data_$user_mail_table_address 000174 external static pointer dcl 7-14 set ref 272* 276* n_original_messages 3 based fixed bin(17,0) level 2 dcl 4-12 set ref 311 313* 314 319 notify 140(02) based bit(1) level 4 in structure "sdm_subsystem_info" packed unaligned dcl 2-13 in procedure "sdm_subsystem_" set ref 398 notify 15(02) based bit(1) level 3 in structure "sdm_invocation" packed unaligned dcl 1-6 in procedure "sdm_subsystem_" set ref 398* null builtin function dcl 160 ref 176 181 184 184 184 184 201 203 216 225 227 262 267 281 287 292 297 305 503 545 548 549 551 553 554 555 559 560 562 options 104 based structure level 2 dcl 2-13 set ref 220* original_messages based structure level 1 dcl 4-12 set ref 313 314* 314 original_messages_n_original_messages 000566 automatic fixed bin(17,0) dcl 4-23 set ref 311* 313 313 original_messages_ptr 150 based pointer level 2 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" set ref 227* 305 307 311 314 original_messages_ptr 20 based pointer level 2 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_subsystem_" set ref 203* 313* 314 318 original_messages_ptr 000570 automatic pointer dcl 4-25 in procedure "sdm_subsystem_" set ref 318* 319 320 322 original_text_control 136 based structure level 3 dcl 2-13 set ref 437 437 profile_ptr 134 based pointer level 3 dcl 2-13 set ref 415* prompt_control 107 based structure level 3 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" prompt_control 130 based bit(2) level 5 in structure "sdm_subsystem_info" packed unaligned dcl 2-13 in procedure "sdm_subsystem_" set ref 409 411 prompt_string 107 based varying char(64) level 4 dcl 2-13 set ref 413* rdm_invocation_ptr 146 based pointer level 2 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" set ref 225* 421 rdm_invocation_ptr 16 based pointer level 2 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_subsystem_" set ref 421* reply_to 70 based pointer level 3 dcl 2-13 set ref 281 282* 551 551* request_loop_control 140(08) based bit(2) level 4 packed unaligned dcl 2-13 set ref 405 407 requote_string_ 000076 constant entry external dcl 133 ref 487 rest_of_subject_lth 000545 automatic fixed bin(21,0) dcl 94 set ref 372* 380 380 380 sci_ptr 000102 automatic pointer dcl 72 in procedure "sdm_subsystem_" set ref 176* 181 181* 184* 190* 198 205* sci_ptr 2 based pointer level 2 in structure "sdm_invocation" dcl 1-6 in procedure "sdm_subsystem_" set ref 198* 250* 256* 264* 269* 283* 289* 294* 299* 307* 322* 332* 334* 344* 359* 366* 375* 376* 383* 384* 388* 411* 413* 415* 418* 419* 425* 428* 495* 503* 506* 562 562* sdm_area based area(1024) dcl 1-40 ref 210 313 sdm_data_$default_from_field 000170 external static pointer dcl 5-27 set ref 267 268* 273* 276* sdm_data_$default_options 000164 external static structure level 1 dcl 5-19 ref 220 sdm_data_$ec_search_list 000162 external static char(32) unaligned dcl 5-17 set ref 418* sdm_data_$ec_suffix 000160 external static char(32) unaligned dcl 5-16 set ref 419* sdm_data_$first_invocation 000166 external static bit(1) dcl 5-25 set ref 332 336* sdm_data_$special_message 000156 external static varying char(256) dcl 5-13 set ref 332* sdm_data_$version 000154 external static varying char(32) dcl 5-9 ref 184 sdm_invocation based structure level 1 dcl 1-6 set ref 195 sdm_invocation_ptr 000562 automatic pointer dcl 1-38 set ref 176* 195* 196 198 199 201 203 205* 210 230 241* 249 250 250 255 256 259 260 263 264 269 282 283 288 289 293 294 298 299 307 313 313 314 318 320 322 332 334 343 344 357 359 366 375 376 380 383 384 388 394 396 397 398 399 401 403 411 413 415 418 419 421 424* 425 427* 428 437* 445* 451* 469 477 490 495 503 506 511 524 542* 559 560 560 562 562 sdm_set_info_directories_ 000100 constant entry external dcl 134 ref 427 sdm_set_request_tables_ 000102 constant entry external dcl 135 ref 424 sdm_subsystem_info based structure level 1 dcl 2-13 set ref 210 sdm_subsystem_info_ptr 000564 automatic pointer dcl 2-46 set ref 176* 210* 212 214 216 218 220 223 225 227 231 242* 244 249 262 263 281 282 287 288 292 293 297 298 305 307 311 314 341 341 343 343 343 394 396 397 398 399 401 401 403 405 405 407 409 411 413 415 415 415 421 436 437 437 445 451 451 463 477 491 491 491 543* 548 549 549 551 551 553 553 554 554 555 555 sdm_subsystem_info_subject based char unaligned dcl 85 set ref 343* sdm_text_mgr_$file_input 000104 constant entry external dcl 136 ref 451 sdm_text_mgr_$process_original_text 000106 constant entry external dcl 137 ref 437 sdm_text_mgr_$terminal_input 000110 constant entry external dcl 138 ref 445 send_mail_options based structure level 1 dcl 3-15 ssu_$create_invocation 000112 constant entry external dcl 139 ref 184 ssu_$destroy_invocation 000114 constant entry external dcl 141 ref 181 562 ssu_$execute_line 000116 constant entry external dcl 142 ref 495 ssu_$get_area 000120 constant entry external dcl 143 ref 190 ssu_$get_temp_segment 000122 constant entry external dcl 144 ref 366 ssu_$listen 000124 constant entry external dcl 145 ref 503 ssu_$print_blast 000126 constant entry external dcl 146 ref 332 ssu_$print_message 000130 constant entry external dcl 147 ref 522 522 ssu_$record_usage 000132 constant entry external dcl 148 ref 334 ssu_$release_temp_segment 000134 constant entry external dcl 149 ref 375 383 ssu_$set_abbrev_info 000136 constant entry external dcl 150 ref 415 ssu_$set_debug_mode 000140 constant entry external dcl 151 ref 250 ssu_$set_ec_search_list 000142 constant entry external dcl 152 ref 418 ssu_$set_ec_suffix 000144 constant entry external dcl 153 ref 419 ssu_$set_info_ptr 000146 constant entry external dcl 154 ref 205 ssu_$set_prompt 000150 constant entry external dcl 155 ref 413 ssu_$set_prompt_mode 000152 constant entry external dcl 156 ref 411 ssu_et_$subsystem_aborted 000024 external static fixed bin(35,0) dcl 109 ref 497 504 subject 100 based structure level 2 dcl 2-13 subject_given 103 based bit(1) level 3 dcl 2-13 set ref 218* 341 subject_in_segment based char unaligned dcl 368 set ref 370* subject_line 000142 automatic char(1024) unaligned dcl 92 set ref 353 353 353 353 357 357 357 357 370 370 subject_lth 000544 automatic fixed bin(21,0) dcl 94 in procedure "sdm_subsystem_" set ref 353* 356 369 370 372 372 372 380 380 380 subject_lth 102 based fixed bin(21,0) level 3 in structure "sdm_subsystem_info" dcl 2-13 in procedure "sdm_subsystem_" ref 341 343 343 subject_ptr 100 based pointer level 3 dcl 2-13 ref 343 subject_segment_ptr 000542 automatic pointer dcl 93 set ref 366* 370 372 372 375* 380 380 383* subsystem_area based area(1024) dcl 88 ref 195 subsystem_area_ptr 000114 automatic pointer dcl 89 set ref 190* 195 199 sys_info$max_seg_size 000010 external static fixed bin(19,0) dcl 104 ref 372 the_subject based char unaligned dcl 379 in begin block on line 378 set ref 380 380* the_subject defined char unaligned dcl 356 in begin block on line 355 set ref 357 357* the_subject_so_far defined char unaligned dcl 369 ref 370 to 72 based pointer level 3 dcl 2-13 set ref 287 288* 553 553* type based char(8) level 2 dcl 1-6 set ref 196* unspec builtin function dcl 160 set ref 187* user_initial_requests based char unaligned dcl 82 ref 491 version based char(8) level 2 in structure "original_messages" packed unaligned dcl 4-12 in procedure "sdm_subsystem_" set ref 307 version 000116 automatic fixed bin(17,0) level 2 in structure "local_ai" dcl 90 in procedure "sdm_subsystem_" set ref 188* version based char(8) level 2 in structure "sdm_subsystem_info" packed unaligned dcl 2-13 in procedure "sdm_subsystem_" set ref 212* 244 zero_on_alloc 1(01) 000116 automatic bit(1) level 3 packed unaligned dcl 90 set ref 189* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. DONT_PROMPT_AFTER_NULL_LINES internal static bit(2) initial unaligned dcl 12-10 DONT_PROMPT_IF_TYPEAHEAD internal static bit(3) initial unaligned dcl 12-13 ENTER_REQUEST_LOOP internal static fixed bin(17,0) initial dcl 6-6 FOREIGN_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 FORUM_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 LOGBOX_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 MAILBOX_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 MAILING_LIST_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 MAIL_TABLE_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 MESSAGE_ADDRESS_LIST_USER_FIELD internal static fixed bin(17,0) initial dcl 10-174 MESSAGE_BIT_STRING_BODY_SECTION internal static fixed bin(17,0) initial dcl 10-285 MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 10-318 MESSAGE_DATE_USER_FIELD internal static fixed bin(17,0) initial dcl 10-174 MESSAGE_ENVELOPE_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 10-79 MESSAGE_INTEGER_USER_FIELD internal static fixed bin(17,0) initial dcl 10-174 MESSAGE_PREFORMATTED_BODY_SECTION internal static fixed bin(17,0) initial dcl 10-285 MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 internal static char(8) initial unaligned dcl 10-117 MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 10-144 MESSAGE_REFERENCES_LIST_VERSION_2 internal static char(8) initial unaligned dcl 10-227 MESSAGE_REFERENCE_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 10-253 MESSAGE_TEXT_USER_FIELD internal static fixed bin(17,0) initial dcl 10-174 MESSAGE_TRACE_VERSION_2 internal static char(8) initial unaligned dcl 10-103 MESSAGE_USER_FIELDS_LIST_VERSION_2 internal static char(8) initial unaligned dcl 10-158 MESSAGE_USER_FIELD_PARAMETER_VERSION_2 internal static char(8) initial unaligned dcl 10-213 MODIFIED_MESSAGE internal static fixed bin(17,0) initial dcl 1-47 NAMED_GROUP_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 NO_FILL internal static bit(2) initial unaligned dcl 3-64 NO_REQUEST_LOOP internal static bit(2) initial unaligned dcl 3-72 PROCESSED_MESSAGE internal static fixed bin(17,0) initial dcl 1-47 PROMPT internal static bit(1) initial unaligned dcl 12-6 PROMPT_AFTER_NULL_LINES internal static bit(2) initial unaligned dcl 12-9 PROMPT_IF_TYPEAHEAD internal static bit(3) initial unaligned dcl 12-12 SAVEBOX_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 SEND_MAIL_OPTIONS_VERSION_6 internal static char(8) initial unaligned dcl 3-51 USER_MAILBOX_ADDRESS internal static fixed bin(17,0) initial dcl 8-6 USE_PROMPT_STRING internal static bit(2) initial unaligned dcl 3-56 address_list based structure level 1 dcl 9-6 address_list_n_addresses automatic fixed bin(17,0) dcl 9-16 address_list_ptr automatic pointer dcl 9-14 area_infop automatic pointer dcl 11-5 message based structure level 1 dcl 10-15 message_address_list_user_field based structure level 1 dcl 10-190 message_bit_string_body_section based structure level 1 dcl 10-301 message_bit_string_body_section_bit_string based bit unaligned dcl 10-307 message_body_section_parameter based structure level 1 dcl 10-313 message_body_section_parameter_ptr automatic pointer dcl 10-320 message_body_section_ptr automatic pointer dcl 10-280 message_date_user_field based structure level 1 dcl 10-195 message_envelope_parameter based structure level 1 dcl 10-74 message_envelope_parameter_ptr automatic pointer dcl 10-81 message_envelope_ptr automatic pointer dcl 10-69 message_integer_user_field based structure level 1 dcl 10-200 message_n_body_sections automatic fixed bin(17,0) dcl 10-55 message_n_redistributions automatic fixed bin(17,0) dcl 10-55 message_n_user_fields automatic fixed bin(17,0) dcl 10-55 message_preformatted_body_section based structure level 1 dcl 10-292 message_preformatted_body_section_text based char unaligned dcl 10-298 message_ptr automatic pointer dcl 10-53 message_redistribution_comment based char unaligned dcl 10-131 message_redistribution_parameter based structure level 1 dcl 10-139 message_redistribution_parameter_ptr automatic pointer dcl 10-146 message_redistribution_ptr automatic pointer dcl 10-134 message_redistributions_list based structure level 1 dcl 10-109 message_reference_parameter based structure level 1 dcl 10-248 message_reference_parameter_ptr automatic pointer dcl 10-255 message_reference_ptr automatic pointer dcl 10-243 message_reference_subject based char unaligned dcl 10-240 message_references_list based structure level 1 dcl 10-219 message_references_list_n_references automatic fixed bin(17,0) dcl 10-55 message_references_list_ptr automatic pointer dcl 10-229 message_subject based char unaligned dcl 10-51 message_text_field_ptr automatic pointer dcl 10-270 message_text_field_text based char unaligned dcl 10-268 message_text_user_field based structure level 1 dcl 10-183 message_text_user_field_text based char unaligned dcl 10-187 message_trace based structure level 1 dcl 10-87 message_trace_n_relays automatic fixed bin(17,0) dcl 10-55 message_trace_ptr automatic pointer dcl 10-105 message_user_field_parameter based structure level 1 dcl 10-208 message_user_field_parameter_ptr automatic pointer dcl 10-215 message_user_field_ptr automatic pointer dcl 10-169 message_user_fields_list based structure level 1 dcl 10-150 mlsys_data_$system_directory external static char(168) unaligned dcl 7-7 mlsys_data_$user_logbox_address external static pointer dcl 7-15 sdm_data_$info_directory external static char(168) unaligned dcl 5-11 send_mail_options_ptr automatic pointer dcl 3-49 NAMES DECLARED BY EXPLICIT CONTEXT. RETURN_FROM_SUBSYSTEM 003253 constant label dcl 511 ref 497 RETURN_FROM_SUBSYSTEM_WITH_FATAL_ERROR 003257 constant label dcl 533 ref 439 457 529 UNABLE_TO_CREATE_DEFAULT_FROM_FIELD 001052 constant label dcl 269 ref 278 abort_subsystem 003471 constant entry internal dcl 519 ref 256 264 269 283 289 294 299 307 322 344 359 376 384 388 425 428 506 create_invocation 000347 constant entry external dcl 165 destroy_invocation 003267 constant entry external dcl 539 sdm_subsystem_ 000334 constant entry external dcl 49 subsystem 000640 constant entry external dcl 238 ref 332 332 334 334 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4544 4742 3565 4554 Length 5532 3565 176 553 757 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME sdm_subsystem_ 509 external procedure is an external procedure. on unit on line 179 68 on unit begin block on line 355 begin block shares stack frame of external procedure sdm_subsystem_. begin block on line 367 begin block shares stack frame of external procedure sdm_subsystem_. begin block on line 378 begin block shares stack frame of external procedure sdm_subsystem_. abort_subsystem 102 internal procedure is declared options(variable). STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME sdm_subsystem_ 000100 code sdm_subsystem_ 000102 sci_ptr sdm_subsystem_ 000104 initial_rql_lth sdm_subsystem_ 000106 initial_rql_ptr sdm_subsystem_ 000110 edit_requests_lth sdm_subsystem_ 000112 edit_requests_ptr sdm_subsystem_ 000114 subsystem_area_ptr sdm_subsystem_ 000116 local_ai sdm_subsystem_ 000142 subject_line sdm_subsystem_ 000542 subject_segment_ptr sdm_subsystem_ 000544 subject_lth sdm_subsystem_ 000545 rest_of_subject_lth sdm_subsystem_ 000546 enter_request_loop sdm_subsystem_ 000547 fatal_error sdm_subsystem_ 000550 input_terminator_type sdm_subsystem_ 000551 address_type sdm_subsystem_ 000552 idx sdm_subsystem_ 000562 sdm_invocation_ptr sdm_subsystem_ 000564 sdm_subsystem_info_ptr sdm_subsystem_ 000566 original_messages_n_original_messages sdm_subsystem_ 000570 original_messages_ptr sdm_subsystem_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_cs call_ext_out_desc call_ext_out call_int_this_desc return tra_ext enable shorten_stack ext_entry int_entry alloc_based clock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$arg_list_ptr cu_$cl cu_$generate_call cu_$grow_stack_frame ioa_$ioa_switch ioa_$nnl iox_$get_line mail_system_$add_address mail_system_$add_reply_reference mail_system_$create_address_list mail_system_$create_message mail_system_$free_address_list mail_system_$free_message mail_system_$get_address_type mail_system_$replace_bcc mail_system_$replace_cc mail_system_$replace_from mail_system_$replace_reply_to mail_system_$replace_subject mail_system_$replace_to requote_string_ sdm_set_info_directories_ sdm_set_request_tables_ sdm_text_mgr_$file_input sdm_text_mgr_$process_original_text sdm_text_mgr_$terminal_input ssu_$create_invocation ssu_$destroy_invocation ssu_$execute_line ssu_$get_area ssu_$get_temp_segment ssu_$listen ssu_$print_blast ssu_$print_message ssu_$record_usage ssu_$release_temp_segment ssu_$set_abbrev_info ssu_$set_debug_mode ssu_$set_ec_search_list ssu_$set_ec_suffix ssu_$set_info_ptr ssu_$set_prompt ssu_$set_prompt_mode THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$fatal_error error_table_$long_record error_table_$unimplemented_version iox_$error_output iox_$user_input mlsys_data_$user_default_mailbox_address mlsys_data_$user_mail_table_address sdm_data_$default_from_field sdm_data_$default_options sdm_data_$ec_search_list sdm_data_$ec_suffix sdm_data_$first_invocation sdm_data_$special_message sdm_data_$version ssu_et_$subsystem_aborted sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 49 000333 52 000341 165 000342 168 000363 169 000371 170 000374 176 000375 179 000401 181 000415 182 000430 184 000431 185 000504 187 000507 188 000512 189 000514 190 000520 195 000545 196 000552 198 000555 199 000557 201 000561 203 000563 205 000564 210 000575 212 000603 214 000606 216 000610 218 000616 220 000617 223 000624 225 000625 227 000626 230 000627 231 000631 232 000632 234 000633 238 000634 241 000654 242 000657 244 000662 245 000666 246 000671 249 000672 250 000676 255 000713 256 000727 259 000755 260 000760 262 000763 263 000770 264 001003 267 001031 268 001036 269 001050 272 001076 273 001112 276 001132 278 001147 281 001151 282 001156 283 001172 287 001220 288 001225 289 001241 292 001267 293 001274 294 001310 297 001336 298 001343 299 001357 305 001405 307 001412 311 001444 313 001450 314 001463 318 001474 319 001475 320 001505 322 001527 326 001566 332 001570 334 001632 336 001650 341 001652 343 001657 344 001702 348 001730 351 001731 353 001746 354 001771 356 001773 357 001776 359 002023 362 002051 364 002052 366 002055 369 002101 370 002103 372 002107 374 002135 375 002137 376 002151 380 002175 383 002226 384 002240 386 002266 388 002267 394 002313 396 002317 397 002324 398 002331 399 002335 401 002341 403 002356 405 002364 407 002376 409 002401 411 002406 413 002426 415 002437 418 002462 419 002474 421 002506 424 002512 425 002523 427 002551 428 002562 436 002610 437 002614 439 002631 445 002634 451 002660 453 002705 454 002707 457 002710 463 002713 466 002716 469 002730 472 002736 475 002740 477 002761 481 003007 484 003021 485 003022 486 003025 487 003040 488 003101 490 003114 491 003133 494 003152 495 003154 497 003176 503 003202 504 003220 506 003225 511 003253 513 003256 533 003257 535 003262 539 003263 542 003301 543 003304 545 003307 548 003312 549 003316 551 003334 553 003353 554 003372 555 003411 559 003430 560 003434 562 003453 566 003467 519 003470 522 003476 524 003521 525 003526 526 003546 529 003557 ----------------------------------------------------------- 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