COMPILATION LISTING OF SEGMENT xmail_process_user_msg_ Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 09/02/88 0747.6 mst Fri Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(86-06-25,Blair), approve(86-07-15,MCR7447), 16* audit(86-07-18,LJAdams), install(86-07-21,MR12.0-1100): 17* Accept the old format of "Cc:" so that users can read their deferred 18* messages which were created before the format changed to "cc:" for copies. 19* Error #119. 20* 2) change(86-06-25,Blair), approve(86-07-15,MCR7447), 21* audit(86-07-18,LJAdams), install(86-07-21,MR12.0-1100): 22* When passing arguments to the mail_system routines which build the 23* message, precede the keywords used to delimit the contents of the header 24* fields with a NL to make sure that keywords which are part of the text are 25* not used incorrectly. TR 20269. 26* 3) change(87-08-10,Blair), approve(87-12-10,MCR7818), 27* audit(87-12-23,LJAdams), install(88-01-12,MR12.2-1013): 28* Add capability to parse a Reply-To field in a message header and process 29* the supplied value. 30* END HISTORY COMMENTS */ 31 32 33 xmail_process_user_msg_: procedure (); 34 35 36 /* BEGIN DESCRIPTION 37* 38*function: 39* 40* This proc is called by xmail_prepare_msg_ to extract the "subject 41* text and the "message" text from the msg prepared by the user via 42* emacs. It uses the mlsys_utils_$parse_address_list_text proc to 43* establish the primary and secondary (if any) recipients address 44* structure lists. Note that this procedure assumes that there are no 45* syntax errors in the user specified list of addresses and/or address 46* lists since the emacs extention does this as well as determining 47* that for every address specified there is a corresponding mailbox. 48* 49*history: 50* 51* 81-07-03 Written by R. Ignagni, format: style1. 52* 53* 83-07-13 DJ Schimke: Modified to use new mail_system calls and version 2 54* mailboxes. 55* 56* 84-08-07 JG Backs: Modified for the addition of blind carbon copies (bcc) 57* 58* 84-11-08 JG Backs: Removed the input parameter P_caller, which was not 59* used anywhere in module, but was passed to xmail_send_msg_. Since it also 60* was not used there, it was removed in both places, changing the call and 61* declaration statement of module xmail_send_msg_ to eliminate the parameter. 62* These changes also required respective changes to xmail_prepare_msg_ and 63* xmail_send_stored_msg_, which are the only two modules calling this module. 64* Audit change. 65* 66* 84-11-09 JG Backs: Deleted the spaces within the quotes of "To:", "cc:", 67* and "bcc:" because they were not needed and were inconsistant within and 68* across modules. Audit change. 69* 70*END DESCRIPTION 71**/ 72 73 /* CONDITIONS */ 74 75 dcl (quit, cleanup) condition; 76 77 /* STATIC */ 78 79 dcl wrong_format char (31) static options (constant) init ("Message not in expected format."); 80 dcl error_message char (67) static options (constant) 81 init ("Sending of message not completed, due to an internal program error."); 82 dcl WHITE_SPACE char (4) aligned static options (constant) init (" 83 "); /* HT VT NL */ 84 dcl WHITE_SPACE_COMMA char (6) aligned static options (constant) init (" 85 ,"); /* HT VT NL comma */ 86 dcl NAME char (23) static options (constant) init ("xmail_process_user_msg_"); 87 dcl NL char (1) int static options (constant) init (" 88 "); 89 dcl stop char (1) static options (constant) init ("q"); 90 91 /* AUTOMATIC */ 92 93 dcl bit_count fixed bin (24); 94 dcl code fixed bin (35); 95 dcl copy_format char (3); 96 dcl follows_copy char (8); 97 dcl new_style bit (1) aligned; 98 dcl no_chars fixed bin (21); 99 dcl old_style bit (1) aligned; 100 dcl start_of_text fixed bin; 101 102 dcl 1 auto_message_body_section_parameter automatic like message_body_section_parameter; 103 104 dcl 1 auto_parse_text_options automatic like parse_text_options; 105 106 /* BASED */ 107 108 dcl based_string char (no_chars) 109 based (send_mail_info.emacs_seg_ptr); 110 dcl based_array (no_chars) char (1) 111 based (send_mail_info.emacs_seg_ptr); 112 113 /* ENTRIES */ 114 115 dcl xmail_send_msg_ entry (); /* no parameter */ 116 dcl xmail_error_$no_code entry options (variable); 117 dcl xmail_error_$code_last entry options (variable); 118 dcl xmail_window_manager_$reconnect entry (); 119 dcl mail_system_$add_body_section 120 entry (ptr, ptr, fixed bin, fixed bin (35)); 121 dcl mail_system_$create_message 122 entry (char (8), ptr, fixed bin (35)); 123 dcl mail_system_$free_address_list 124 entry (ptr, fixed bin (35)); 125 dcl mail_system_$free_message 126 entry (ptr, fixed bin (35)); 127 dcl mail_system_$replace_bcc 128 entry (ptr, ptr, fixed bin (35)); 129 dcl mail_system_$replace_cc 130 entry (ptr, ptr, fixed bin (35)); 131 dcl mail_system_$replace_reply_to 132 entry (ptr, ptr, fixed bin (35)); dcl mail_system_$replace_subject 133 entry (ptr, char (*), fixed bin (35)); 134 dcl mail_system_$replace_to 135 entry (ptr, ptr, fixed bin (35)); 136 dcl mlsys_utils_$parse_address_list_text 137 entry (char (*), ptr, char (8), ptr, ptr, fixed bin (35)); 138 dcl delete_$ptr entry (ptr, bit (6), char (*), fixed bin (35)); 139 dcl ioa_ entry options (variable); 140 dcl hcs_$status_mins entry (ptr, fixed bin (2), fixed bin (24), fixed bin (35)); 141 142 /* BUILTIN */ 143 144 dcl (addr, after, before, divide, index, length, ltrim, null, rtrim, substr) builtin; 145 146 /* INCLUDE FILES */ 147 1 1 /* BEGIN INCLUDE FILE ... mlsys_message.incl.pl1 */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(85-12-19,Herbst), approve(86-03-25,MCR7367), 1 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 1 7* Added seen switch to message. 1 8* END HISTORY COMMENTS */ 1 9 1 10 1 11 /* Created: June 1983 by G. Palter */ 1 12 1 13 /* Definition of a message as used by the Multics Mail System */ 1 14 1 15 dcl 1 message aligned based (message_ptr), 1 16 2 version character (8) unaligned, 1 17 2 reserved bit (144), /* for exclusive use of the mail system */ 1 18 2 n_reply_references fixed binary, /* # of messages for which this is a reply */ 1 19 2 n_user_fields fixed binary, /* # of non-standard header fields in this message */ 1 20 2 n_redistributions fixed binary, /* # of times this message has been forwarded */ 1 21 2 n_body_sections fixed binary, /* # of sections in the body */ 1 22 2 flags, 1 23 3 interactive bit (1) unaligned, /* ON => this is an interactive message */ 1 24 3 can_be_deleted bit (1) unaligned, /* ON => the user can delete this message if desired */ 1 25 3 marked_for_deletion bit (1) unaligned, /* ON => message will be deleted when mailbox is closed */ 1 26 3 must_be_acknowledged bit (1) unaligned, /* ON => an ACK should be generated when message is read */ 1 27 3 seen bit (1) unaligned, /* ON => user has printed message at least once */ 1 28 3 reserved bit (31) unaligned, /* for use by the mail system */ 1 29 2 pad bit (36), 1 30 2 envelope like message_envelope, /* who/when/how the message was mailed & delivered */ 1 31 2 header, 1 32 3 message_id bit (72), /* ID of this message (same value for all copies) */ 1 33 3 access_class bit (72), /* AIM access class of this message */ 1 34 3 date_time_created fixed binary (71), /* date/time this message was composed */ 1 35 3 from pointer, /* -> address list of author(s) of the message */ 1 36 3 reply_to pointer, /* -> address list of recipients for reply (if not authors) */ 1 37 3 to pointer, /* -> address list of primary recipients */ 1 38 3 cc pointer, /* -> address list of secondary recipients */ 1 39 3 bcc pointer, /* -> address list of blind recipients */ 1 40 3 subject like message_text_field, /* subject of the message */ 1 41 3 reply_references pointer, /* -> list of messages for which this message is a reply */ 1 42 3 user_fields_list pointer, /* -> list of user-defined fields in this message */ 1 43 2 redistributions_list pointer, /* -> redistributions list for this message */ 1 44 2 body, 1 45 3 total_lines fixed binary (21), /* total # of lines in the body or -1 if indeterminate */ 1 46 3 pad bit (36), 1 47 3 body_sections (message_n_body_sections refer (message.n_body_sections)) like message_body_section; 1 48 1 49 dcl MESSAGE_VERSION_2 character (8) static options (constant) initial ("mlsmsg02"); 1 50 1 51 dcl message_subject character (message.header.subject.text_lth) unaligned based (message.header.subject.text_ptr); 1 52 1 53 dcl message_ptr pointer; 1 54 1 55 dcl (message_n_body_sections, message_trace_n_relays, message_n_redistributions, message_n_user_fields, 1 56 message_references_list_n_references) 1 57 fixed binary; /* for exclusive use of the mail system */ 1 58 1 59 /* Definition of a message envelope: describes when, by whom, and by what route the message was mailed */ 1 60 1 61 dcl 1 message_envelope aligned based (message_envelope_ptr), 1 62 2 date_time_mailed fixed binary (71), /* date/time this message was entered into the mail system */ 1 63 2 sender pointer, /* -> address of entity that mailed the message */ 1 64 2 trace pointer, /* -> message_trace describing how it got here */ 1 65 2 date_time_delivered fixed binary (71), /* date/time this message was delivered */ 1 66 2 delivered_by pointer, /* -> address of entity that delivered the message */ 1 67 2 acknowledge_to pointer; /* -> address of entity to receive ACK when message is read */ 1 68 1 69 dcl message_envelope_ptr pointer; 1 70 1 71 1 72 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the message envelope */ 1 73 1 74 dcl 1 message_envelope_parameter aligned based (message_envelope_parameter_ptr), 1 75 2 pad pointer, /* forces even word alignment */ 1 76 2 version character (8) unaligned, 1 77 2 envelope like message_envelope; 1 78 1 79 dcl MESSAGE_ENVELOPE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsenv02"); 1 80 1 81 dcl message_envelope_parameter_ptr pointer; 1 82 1 83 1 84 /* Definition of a message trace: describes the route and each relay operation by which a message was passed through the 1 85* networks to reach this recipient */ 1 86 1 87 dcl 1 message_trace aligned based (message_trace_ptr), 1 88 2 version character (8) unaligned, 1 89 2 reserved bit (144), /* ... exclusively for use by the mail system */ 1 90 2 implicit_route pointer, /* -> an address_route which defines the route it took */ 1 91 2 pad bit (36), 1 92 2 n_relays fixed binary, /* # of relay operations required to reach this site */ 1 93 2 relays (message_trace_n_relays refer (message_trace.n_relays)), 1 94 3 date_time_relayed fixed binary (71), /* ... when this relay operation took place */ 1 95 3 sending_host character (256) varying, /* ... the host which relayed the message */ 1 96 3 receiving_host character (256) varying, /* ... the host which received it */ 1 97 3 communications_media character (32) unaligned, /* ... medium over which relay took place (ARPA, Tymnet) */ 1 98 3 communications_protocol character (32) unaligned,/* ... low-level protocol used (TCP, X.25) */ 1 99 3 mail_protocol character (32) unaligned, /* ... mailer protocol used (SMTP, NBS) */ 1 100 3 relay_id bit (72), /* ... unique ID assigned by receiving system or ""b */ 1 101 3 relay_recipient pointer; /* ... -> address of recipient as given by sending system */ 1 102 1 103 dcl MESSAGE_TRACE_VERSION_2 character (8) static options (constant) initial ("mlstrc02"); 1 104 1 105 dcl message_trace_ptr pointer; 1 106 1 107 /* Definition of a message's redistributions list */ 1 108 1 109 dcl 1 message_redistributions_list aligned based (message.redistributions_list), 1 110 2 version character (8) unaligned, 1 111 2 reserved bit (144), /* ... exclusively for use by the mail system */ 1 112 2 pad bit (36), 1 113 2 n_redistributions fixed binary, /* # of redistributions */ 1 114 2 redistributions (message_n_redistributions refer (message_redistributions_list.n_redistributions)) 1 115 like message_redistribution; /* the redistributions: oldest first */ 1 116 1 117 dcl MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsrl002"); 1 118 1 119 1 120 /* Definition of a single redistribution (forwarding) of a message */ 1 121 1 122 dcl 1 message_redistribution aligned based (message_redistribution_ptr), 1 123 2 envelope like message_envelope, 1 124 2 header, 1 125 3 message_id bit (72), /* ID of this redistribution (same for all copies) */ 1 126 3 date_time_created fixed binary (71), /* date/time when this redistribution was made */ 1 127 3 from pointer, /* -> address list of authors of this redistribution */ 1 128 3 to pointer, /* -> address list of recipients of the redistribution */ 1 129 3 comment like message_text_field; /* optional comment associated with the redistribution */ 1 130 1 131 dcl message_redistribution_comment character (message_redistribution.comment.text_lth) unaligned 1 132 based (message_redistribution.comment.text_ptr); 1 133 1 134 dcl message_redistribution_ptr pointer; 1 135 1 136 1 137 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate the redistributions of a message */ 1 138 1 139 dcl 1 message_redistribution_parameter aligned based (message_redistribution_parameter_ptr), 1 140 2 pad pointer, /* forces even word alignment */ 1 141 2 version character (8) unaligned, 1 142 2 redistribution like message_redistribution; 1 143 1 144 dcl MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsdist2"); 1 145 1 146 dcl message_redistribution_parameter_ptr pointer; 1 147 1 148 /* Definition of the list of user-defined fields in a message */ 1 149 1 150 dcl 1 message_user_fields_list aligned based (message.user_fields_list), 1 151 2 version character (8) unaligned, 1 152 2 reserved bit (144), /* ... exclusively for use by the mail system */ 1 153 2 pad bit (36), 1 154 2 n_user_fields fixed binary, /* # of user-defined fields in the message */ 1 155 2 user_fields (message_n_user_fields refer (message_user_fields_list.n_user_fields)) 1 156 like message_user_field; /* the actual user-defined fields */ 1 157 1 158 dcl MESSAGE_USER_FIELDS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsufl02"); 1 159 1 160 1 161 /* Definition of a user defined message header field */ 1 162 1 163 dcl 1 message_user_field aligned based (message_user_field_ptr), 1 164 2 header, 1 165 3 field_id bit (36) aligned, /* identifies the purpose of this field */ 1 166 3 field_type fixed binary, /* type of data contained in this field */ 1 167 2 field_type_variable bit (144); /* the actual data (see below) */ 1 168 1 169 dcl message_user_field_ptr pointer; 1 170 1 171 1 172 /* Defined types of user defined fields */ 1 173 1 174 dcl (MESSAGE_TEXT_USER_FIELD initial (1), /* content of the field is a text string */ 1 175 MESSAGE_ADDRESS_LIST_USER_FIELD initial (2), /* content of the field is an address list */ 1 176 MESSAGE_DATE_USER_FIELD initial (3), /* content of the field is a date/time */ 1 177 MESSAGE_INTEGER_USER_FIELD initial (4)) /* content of the filed is a fixed binary value */ 1 178 fixed binary static options (constant); 1 179 1 180 1 181 /* Structures used to access the data for the different types of user defined fields */ 1 182 1 183 dcl 1 message_text_user_field aligned based (message_user_field_ptr), 1 184 2 header like message_user_field.header, 1 185 2 text like message_text_field; /* the message text */ 1 186 1 187 dcl message_text_user_field_text character (message_text_user_field.text.text_lth) unaligned 1 188 based (message_text_user_field.text.text_ptr); 1 189 1 190 dcl 1 message_address_list_user_field aligned based (message_user_field_ptr), 1 191 2 header like message_user_field.header, 1 192 2 address_list_ptr pointer, /* -> the address list */ 1 193 2 pad bit (72); 1 194 1 195 dcl 1 message_date_user_field aligned based (message_user_field_ptr), 1 196 2 header like message_user_field.header, 1 197 2 date_time fixed binary (71), /* the clock reading */ 1 198 2 pad bit (72); 1 199 1 200 dcl 1 message_integer_user_field aligned based (message_user_field_ptr), 1 201 2 header like message_user_field.header, 1 202 2 value fixed binary (35), /* the integer value */ 1 203 2 pad bit (108); 1 204 1 205 1 206 /* Structure used in calls to mail_system_ entrypoints which manipulate the user-defined fields of a message */ 1 207 1 208 dcl 1 message_user_field_parameter aligned based (message_user_field_parameter_ptr), 1 209 2 pad pointer, /* forces even word alignment */ 1 210 2 version character (8) unaligned, 1 211 2 user_field like message_user_field; 1 212 1 213 dcl MESSAGE_USER_FIELD_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsudf02"); 1 214 1 215 dcl message_user_field_parameter_ptr pointer; 1 216 1 217 /* Definition of a list of message references used as the value of message header fields (eg: In-Reply-To) */ 1 218 1 219 dcl 1 message_references_list aligned based (message_references_list_ptr), 1 220 2 version character (8) unaligned, 1 221 2 reserved bit (144), /* ... exclusively for use by the mail system */ 1 222 2 pad bit (36), 1 223 2 n_references fixed binary, /* # of references in this list */ 1 224 2 references (message_references_list_n_references refer (message_references_list.n_references)) 1 225 like message_reference; /* the references themselves */ 1 226 1 227 dcl MESSAGE_REFERENCES_LIST_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 1 228 1 229 dcl message_references_list_ptr pointer; 1 230 1 231 1 232 /* Definition of a reference to another message */ 1 233 1 234 dcl 1 message_reference aligned based (message_reference_ptr), 1 235 2 message_id bit (72), /* ID of the other message */ 1 236 2 date_time_created fixed binary (71), /* date/time the other message was created */ 1 237 2 from pointer, /* -> address list of authors of the other message */ 1 238 2 subject like message_text_field; /* subject of the other message */ 1 239 1 240 dcl message_reference_subject character (message_reference.subject.text_lth) unaligned 1 241 based (message_reference.subject.text_ptr); 1 242 1 243 dcl message_reference_ptr pointer; 1 244 1 245 1 246 /* Structure used in calls to mail_system_daemon_ entrypoints which manipulate message references */ 1 247 1 248 dcl 1 message_reference_parameter aligned based (message_reference_parameter_ptr), 1 249 2 pad pointer, /* forces even word alignment */ 1 250 2 version character (8) unaligned, 1 251 2 reference like message_reference; 1 252 1 253 dcl MESSAGE_REFERENCE_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsref02"); 1 254 1 255 dcl message_reference_parameter_ptr pointer; 1 256 1 257 1 258 /* Definition of a text field in a message (Subject, Comment, or a user defined field) */ 1 259 1 260 dcl 1 message_text_field aligned based (message_text_field_ptr), 1 261 2 text_ptr pointer, /* -> the actual text */ 1 262 2 text_lth fixed binary (21), /* length of said text */ 1 263 2 flags, 1 264 3 multiline_text bit (1) unaligned, /* ON => the text of this field may span multiple lines; 1 265* OFF => the text will always be a single line */ 1 266 3 reserved bit (35) unaligned; /* for exclusive use of the mail system */ 1 267 1 268 dcl message_text_field_text character (message_text_field.text_lth) unaligned based (message_text_field.text_ptr); 1 269 1 270 dcl message_text_field_ptr pointer; 1 271 1 272 /* Definition of a section of the body of a message */ 1 273 1 274 dcl 1 message_body_section aligned based (message_body_section_ptr), 1 275 2 header, 1 276 3 section_type fixed binary, /* type of "text" stored in this section */ 1 277 3 section_n_lines fixed binary (21), /* # of lines in this section or -1 if indeterminate */ 1 278 2 section_type_variable bit (144); /* the actual data (see below) */ 1 279 1 280 dcl message_body_section_ptr pointer; 1 281 1 282 1 283 /* Defined types of message body sections */ 1 284 1 285 dcl (MESSAGE_PREFORMATTED_BODY_SECTION initial (1), /* text formatted by the authors/sender */ 1 286 MESSAGE_BIT_STRING_BODY_SECTION initial (2)) /* arbitrary bit string */ 1 287 fixed binary static options (constant); 1 288 1 289 1 290 /* Structures used to access the data for the different types of message body sections */ 1 291 1 292 dcl 1 message_preformatted_body_section aligned based (message_body_section_ptr), 1 293 2 header like message_body_section.header, 1 294 2 text_ptr pointer, /* -> the text */ 1 295 2 text_lth fixed binary (21), /* length of said text in characters */ 1 296 2 reserved bit (36); /* for exclusive use of the mail system */ 1 297 1 298 dcl message_preformatted_body_section_text character (message_preformatted_body_section.text_lth) unaligned 1 299 based (message_preformatted_body_section.text_ptr); 1 300 1 301 dcl 1 message_bit_string_body_section aligned based (message_body_section_ptr), 1 302 2 header like message_body_section.header, 1 303 2 bit_string_ptr pointer, /* -> the bit string */ 1 304 2 bit_string_lth fixed binary (24), /* length of said bit string in bits (obviously) */ 1 305 2 reserved bit (36); /* for exclusive use of the mail system */ 1 306 1 307 dcl message_bit_string_body_section_bit_string bit (message_bit_string_body_section.bit_string_lth) unaligned 1 308 based (message_bit_string_body_section.bit_string_ptr); 1 309 1 310 1 311 /* Structure used in calls to mail_system_ entrypoints which manipulate the sections of a message's body */ 1 312 1 313 dcl 1 message_body_section_parameter aligned based (message_body_section_parameter_ptr), 1 314 2 pad pointer, /* forces even word alignment */ 1 315 2 version character (8) unaligned, 1 316 2 section like message_body_section; 1 317 1 318 dcl MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 character (8) static options (constant) initial ("mlsmbs02"); 1 319 1 320 dcl message_body_section_parameter_ptr pointer; 1 321 1 322 /* END INCLUDE FILE ... mlsys_message.incl.pl1 */ 148 149 2 1 /* BEGIN INCLUDE FILE: xmail_data.incl.pl1 */ 2 2 2 3 2 4 /****^ HISTORY COMMENTS: 2 5* 1) change(85-12-20,Blair), approve(86-03-06,MCR7358), 2 6* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 2 7* Modified 03/15/85 by Joanne Backs adding confirm_print flag. 2 8* 2) change(85-12-20,LJAdams), approve(86-03-06,MCR7358), 2 9* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 2 10* Adding switch to indicate request for menu display came from general help. 2 11* This is so general help menu will be displayed in top screen. 2 12* 3) change(86-01-10,Blair), approve(86-03-06,MCR7358), 2 13* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 2 14* Add switch to indicate whether or not it is permissible to process mail 2 15* in other users' mailboxes (foreign_mailbox). 2 16* 4) change(86-01-13,Blair), approve(86-03-06,MCR7358), 2 17* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 2 18* Add bit to indicate whether or not this is a true cleanup condition. 2 19* 5) change(86-02-06,Blair), approve(86-03-06,MCR7358), 2 20* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 2 21* Rearrange to group all the bit flags together in one word with a pad. 2 22* 6) change(86-03-05,Blair), approve(86-03-05,MCR7358), 2 23* audit(86-04-21,RBarstad), install(86-05-28,MR12.0-1062): 2 24* Change value_seg ptr to value_seg_pathname to avoid the situation where 2 25* you keep around a pointer to a structure which no longer exists. 2 26* 7) change(87-01-16,Blair), approve(87-02-05,MCR7618), 2 27* audit(87-04-15,RBarstad), install(87-04-26,MR12.1-1025): 2 28* Add a field to indicate whether or not we should process interactive msgs. 2 29* Increment version to 4.1 so default value will get set. 2 30* 8) change(87-02-13,Blair), approve(87-02-13,MCR7618), 2 31* audit(87-04-15,RBarstad), install(87-04-26,MR12.1-1025): 2 32* Add a field to indicate whether or not we're processing a reply so that we 2 33* will be able to rebuild the screens properly after a disconnect occurs. 2 34* Error_list #114. 2 35* 9) change(88-07-26,Blair), approve(88-07-26,MCR7959), 2 36* audit(88-08-25,RBarstad), install(88-09-02,MR12.2-1098): 2 37* Add a bit to indicate whether or not the error segment had to be created 2 38* in the pdir (because we didn't have sma access to the mlsys_dir). 2 39* END HISTORY COMMENTS */ 2 40 2 41 2 42 /* Written 5/13/81 by Paul H. Kyzivat */ 2 43 /* Modified 12/16/81 by S. Krupp to delete unused parts of structure 2 44* and to add n_fkeys_used */ 2 45 /* Modified 12/14/82 by Dave Schimke to make the xmail version a 10 character 2 46* varying string. */ 2 47 /* Modified 09/12/83 by Dave Schimke adding interactive_msgs flag */ 2 48 /* Modified 09/14/83 by Dave Schimke adding moved_user_io */ 2 49 /* Modified 09/06/84 by Joanne Backs adding lists_as_menus flag */ 2 50 /* Modified 09/21/84 by Joanne Backs adding remove_menus flag */ 2 51 2 52 dcl xmail_data_ptr external static ptr init (null); 2 53 2 54 dcl 1 xmail_data aligned based (xmail_data_ptr), 2 55 2 mail_dir char (168) varying, 2 56 2 first_label label, 2 57 2 quit_label label, 2 58 2 value_seg_pathname char (168) varying, 2 59 2 moved_user_io ptr, 2 60 2 normal_usage char (80) unal, 2 61 2 function_key_info, 2 62 3 function_key_data_ptr ptr, 2 63 3 n_fkeys_used fixed bin, 2 64 2 actee, 2 65 3 person char(32) varying, 2 66 3 project char(32) varying, 2 67 2 flags aligned, 2 68 3 mail_in_incoming bit (1) unal, 2 69 3 lists_as_menus bit (1) unal, /* personalization */ 2 70 3 remove_menus bit (1) unal, /* personalization */ 2 71 3 confirm_print bit (1) unal, /* personalization */ 2 72 3 multics_mode bit (1) unal, /* personalization */ 2 73 3 interactive_msgs bit (1) unal, /* personalization */ 2 74 3 foreign_mailbox bit (1) unal, /* read others' mailboxes */ 2 75 3 general_help bit (1) unal, /* indicated requesting gen help*/ 2 76 3 cleanup_signalled bit (1) unal, /* on when true cleanup condition */ 2 77 3 msgs_as_mail bit (1) unal, /* on for include_msgs */ 2 78 3 reply_request bit (1) unal, /* on if we're doing a reply */ 2 79 3 error_seg_in_pdir bit (1) unal, /* on if the error_seg is in the pdir */ 2 80 3 pad bit (24) unal; 2 81 2 82 2 83 2 84 dcl xmail_version char(10) var static options(constant) init("4.1"); 2 85 2 86 /* END INCLUDE FILE: xmail_data.incl.pl1 */ 150 151 3 1 /* begin include fine window_dcls.incl.pl1 BIM June 1981 */ 3 2 /* Modified 9 October 1983 by Jon A. Rochlis to add window_$edit_line. */ 3 3 3 4 /* format: style3 */ 3 5 3 6 declare window_$bell entry (pointer, fixed binary (35)); 3 7 declare window_$clear_region 3 8 entry (pointer, fixed binary, fixed binary, fixed binary, fixed binary, fixed binary (35)); 3 9 declare window_$clear_to_end_of_line 3 10 entry (pointer, fixed binary (35)); 3 11 declare window_$clear_to_end_of_window 3 12 entry (pointer, fixed binary (35)); 3 13 declare window_$clear_window 3 14 entry (pointer, fixed binary (35)); 3 15 declare window_$delete_chars 3 16 entry (pointer, fixed binary, fixed binary (35)); 3 17 declare window_$get_cursor_position 3 18 entry (pointer, fixed binary, fixed binary, fixed binary (35)); 3 19 3 20 /* Call window_$get_echoed_chars (iocb_ptr, n_to_read, read_buffer, n_read, read_break, code); */ 3 21 3 22 declare window_$get_echoed_chars 3 23 entry (pointer, fixed binary (21), character (*), fixed binary (21), character (1) var, 3 24 fixed binary (35)); 3 25 declare window_$get_unechoed_chars 3 26 entry (pointer, fixed binary (21), character (*), fixed binary (21), character (1) var, 3 27 fixed binary (35)); 3 28 declare window_$insert_text entry (pointer, character (*), fixed binary (35)); 3 29 declare window_$overwrite_text 3 30 entry (pointer, character (*), fixed binary (35)); 3 31 declare window_$position_cursor 3 32 entry (pointer, fixed binary, fixed binary, fixed binary (35)); 3 33 3 34 /* Call window_$position_cursor_rel (iocb_ptr, delta_line, delta_column, code); */ 3 35 3 36 declare window_$position_cursor_rel 3 37 entry (pointer, fixed binary, fixed binary, fixed binary (35)); 3 38 3 39 /* Call window_$scroll_region (iocb_ptr, first_line_of_region, n_lines_of_region, distance_to_scroll_region_negative_is_up, 3 40* code); */ 3 41 3 42 declare window_$scroll_region 3 43 entry (pointer, fixed binary, fixed binary, fixed binary, fixed binary (35)); 3 44 declare window_$sync entry (pointer, fixed binary (35)); 3 45 3 46 /* Call window_$write_raw_text (iocb_ptr, text_string, code); */ 3 47 3 48 declare window_$write_raw_text 3 49 entry (pointer, character (*), fixed binary (35)); 3 50 3 51 /* Call window_$write_sync_read (iocb_ptr, prompt_string, n_to_read, read_buffer, n_read, break_char, code); */ 3 52 3 53 declare window_$write_sync_read 3 54 entry (pointer, character (*), fixed bin (21), character (*), fixed binary (21), 3 55 character (1) var, fixed binary (35)); 3 56 3 57 /* Call window_$change_line (iocb_ptr, new_line, code); */ 3 58 3 59 declare window_$change_line entry (pointer, fixed binary, fixed binary (35)); 3 60 3 61 /* Call window_$change_column (iocb_ptr, new_column, code); */ 3 62 3 63 declare window_$change_column 3 64 entry (pointer, fixed binary, fixed binary (35)); 3 65 3 66 /* Call window_$get_one_unechoed (iocb_ptr, char_or_len_0, block_flag, code); */ 3 67 declare ( 3 68 window_$get_one_unechoed, 3 69 window_$get_one_unechoed_char 3 70 ) entry (pointer, character (1) var, bit (1) aligned, fixed binary (35)); 3 71 3 72 declare window_$create entry (pointer, pointer, pointer, fixed binary (35)); 3 73 3 74 declare window_$destroy entry (pointer, fixed binary (35)); 3 75 3 76 declare window_$edit_line entry (pointer, pointer, pointer, fixed bin(21), fixed bin(21), fixed bin(35)); 3 77 3 78 /* call window_$edit_line (iocb_ptr, window_edit_line_info_ptr, buffer_ptr, 3 79* buffer_len, n_returned, code); */ 3 80 3 81 3 82 /* end include file window_dcls.incl.pl1 */ 152 153 4 1 /* BEGIN INCLUDE FILE ... xmail_send_mail.incl.pl1 */ 4 2 4 3 /****^ HISTORY COMMENTS: 4 4* 1) change(87-08-10,Blair), approve(87-12-17,MCR7818), 4 5* audit(87-12-23,LJAdams), install(88-01-12,MR12.2-1013): 4 6* Add pointer for reply_to field. 4 7* END HISTORY COMMENTS */ 4 8 4 9 /* Created by R. Ignagni July 1981 */ 4 10 4 11 /* 84-08-06 JG Backs: Modified to add pointer for bcc. */ 4 12 4 13 dcl 1 send_mail_info aligned based (send_mail_info_ptr), 4 14 2 msg_exists bit (1), /* ON = new message exists */ 4 15 2 stored_seg_ptr ptr, /* ptr to stored msg seg */ 4 16 2 emacs_seg_ptr ptr, /* ptr to seg containing msg */ 4 17 2 new_msg_ptr ptr, /* ptr to new_msg structure */ 4 18 2 reply_to_list_ptr ptr, /* ptr to reply_to addr struct */ 4 19 2 to_list_ptr ptr, /* ptr to recipients addr struct */ 4 20 2 cc_list_ptr ptr, /* ptr to cc address structure */ 4 21 2 bcc_list_ptr ptr, /* ptr to bcc address structure */ 4 22 2 send_mail_area_ptr ptr, /* ptr to send_mail_area */ 4 23 2 emacs_seg_pathname char (168); 4 24 4 25 4 26 dcl send_mail_info_ptr ptr external static init (null); 4 27 4 28 /* END INCLUDE FILE xmail_send_mail.inl.pl1 */ 154 155 5 1 /* BEGIN INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 5 2 /* Created: June 1983 by G. Palter */ 5 3 5 4 /* Definition of an address list -- a collection of addresses used as the value of certain message fields, etc. */ 5 5 5 6 dcl 1 address_list aligned based (address_list_ptr), 5 7 2 version character (8) unaligned, 5 8 2 reserved bit (144), /* ... exclusively for use by the mail system */ 5 9 2 n_addresses fixed binary, /* # of address in this list */ 5 10 2 addresses (address_list_n_addresses refer (address_list.n_addresses)) pointer; 5 11 5 12 dcl ADDRESS_LIST_VERSION_2 character (8) static options (constant) initial ("mlsals02"); 5 13 5 14 dcl address_list_ptr pointer; 5 15 5 16 dcl address_list_n_addresses fixed binary; /* reserved exclusively for use by the mail system */ 5 17 5 18 /* END INCLUDE FILE ... mlsys_address_list.incl.pl1 */ 156 157 6 1 /* BEGIN INCLUDE FILE ... mlsys_parse_txt_options.incl.pl1 */ 6 2 /* Created: June 1983 by G. Palter */ 6 3 6 4 /* Options for the mlsys_utils_$parse_address_list_text and mlsys_utils_$parse_message_text entrypoints */ 6 5 6 6 dcl 1 parse_text_options aligned based (parse_text_options_ptr), 6 7 2 version character (8) unaligned, 6 8 2 area_ptr pointer, /* -> area for following structures; null => system free */ 6 9 2 flags, 6 10 3 list_errors bit (1) unaligned, /* ON => return the list of errors in the input text */ 6 11 3 validate_addresses bit (1) unaligned, /* ON => validate the existence of the addresses in the 6 12* address list or message */ 6 13 3 include_invalid_addresses bit (1) unaligned, /* ON => create an invalid address for each unparseable 6 14* substring of the input text */ 6 15 3 mbz bit (33) unaligned; /* must be set to ""b by the caller */ 6 16 6 17 dcl PARSE_TEXT_OPTIONS_VERSION_1 character (8) static options (constant) initial ("mlsptxt1"); 6 18 6 19 dcl parse_text_options_ptr pointer; 6 20 6 21 6 22 /* Describes the errors detected while parsing the printed representation of an address list or message */ 6 23 6 24 dcl 1 parse_text_error_list aligned based (parse_text_error_list_ptr), 6 25 2 n_errors fixed binary, /* set to # of errors detected */ 6 26 2 errors (parse_text_error_list_n_errors refer (parse_text_error_list.n_errors)), 6 27 3 text_start fixed binary (21), /* ... set to index of first character in the substring */ 6 28 3 text_lth fixed binary (21), /* ... set to length of this invalid substring */ 6 29 3 code fixed binary (35), /* ... set to an error code which describes what is wrong with 6 30* this substring */ 6 31 3 additional_info character (128) varying; /* ... and extra information to clarify the error */ 6 32 6 33 dcl parse_text_error_list_ptr pointer; 6 34 6 35 dcl parse_text_error_list_n_errors fixed binary; /* used to allocate the above structure */ 6 36 6 37 /* END INCLUDE FILE ... mlsys_parse_txt_options.incl.pl1 */ 158 159 160 /* BEGIN */ 161 162 /* Set up quit and cleanup conditions */ 163 164 START: parse_text_error_list_ptr, message_ptr = null (); 165 166 on condition (cleanup) call CLEAN_UP; 167 on condition (quit) 168 begin; 169 call xmail_window_manager_$reconnect (); 170 call ioa_ ("Sending message terminated."); 171 call CLEAN_UP; 172 go to exit; 173 end; 174 175 176 call hcs_$status_mins (send_mail_info.emacs_seg_ptr, 1, bit_count, code); 177 if code ^= 0 then call xmail_error_$no_code (code, NAME, stop, "^a", error_message); 178 179 /* Get number of chars in seg */ 180 181 if bit_count = 0 /* The user "quit" while in emacs */ 182 then do; 183 call ioa_ ("Sending message terminated."); 184 call CLEAN_UP; 185 return; 186 end; 187 no_chars = divide (bit_count, 9, 17, 0); 188 189 /* Extract the "Subject", "To", "cc", and "bcc" fields from the segment created 190* by Emacs */ 191 192 old_style, new_style = "0"b; 193 if index (based_string, "Cc:") > 0 then do; 194 old_style = "1"b; 195 copy_format = "Cc:"; 196 follows_copy = "Message:"; 197 end; 198 if index (based_string, "cc:") > 0 then do; 199 new_style = "1"b; 200 copy_format = "cc:"; 201 follows_copy = "bcc:"; 202 end; 203 204 205 if (^(old_style | new_style) | 206 (index (based_string, "Subject:") = 0) | 207 (index (based_string, "To:") = 0) | 208 /* (index (based_string, "cc:") = 0) | 209* (index (based_string, "bcc:") = 0) | replaced by old_style new_style */ 210 (index (based_string, "Message:") = 0)) 211 then call xmail_error_$no_code (code, NAME, stop, "^a Sending terminated.", wrong_format); 212 if new_style & (index (based_string, "bcc:") = 0) 213 then call xmail_error_$no_code (code, NAME, stop, "^a Sending terminated.", wrong_format); 214 215 if rtrim (after (based_string, "Message:"), WHITE_SPACE) = "" 216 then call xmail_error_$no_code (code, NAME, "i", "No message text entered. Sending terminated."); 217 218 call mail_system_$create_message (MESSAGE_VERSION_2, send_mail_info.new_msg_ptr, code); 219 220 if code ^= 0 then call xmail_error_$no_code (code, NAME, stop, "^a", error_message); 221 222 /* Supply "subject" for the new message */ 223 224 call mail_system_$replace_subject (send_mail_info.new_msg_ptr, (after (before (based_string, NL || "Reply-To:"), "Subject:"))|| NL, code); 225 226 if code ^= 0 then call xmail_error_$no_code (code, NAME, stop, "^a", error_message); 227 228 /* Supply the "message" field for the new message */ 229 230 message_body_section_ptr = addr (auto_message_body_section_parameter.section); 231 auto_message_body_section_parameter.version = 232 MESSAGE_BODY_SECTION_PARAMETER_VERSION_2; 233 message_preformatted_body_section.header.section_type = 234 MESSAGE_PREFORMATTED_BODY_SECTION; 235 message_preformatted_body_section.header.section_n_lines = -1; 236 start_of_text = index (based_string, NL || "Message:") + length ("Message:") + 1; 237 message_preformatted_body_section.text_ptr = 238 addr (based_array (start_of_text)); 239 message_preformatted_body_section.text_lth = 240 length (substr (rtrim (based_string), start_of_text)); 241 242 call mail_system_$add_body_section (send_mail_info.new_msg_ptr, addr (auto_message_body_section_parameter), 1, code); 243 if code ^= 0 then call xmail_error_$no_code (code, NAME, stop, "^a", error_message); 244 245 /* Convert text to address lists for To:, bcc:, and cc: fields */ 246 247 send_mail_info.to_list_ptr, 248 send_mail_info.reply_to_list_ptr, 249 send_mail_info.cc_list_ptr, 250 send_mail_info.bcc_list_ptr = null (); 251 252 auto_parse_text_options.version = PARSE_TEXT_OPTIONS_VERSION_1; 253 auto_parse_text_options.area_ptr = null; 254 auto_parse_text_options.flags.list_errors = "0"b; 255 auto_parse_text_options.flags.validate_addresses = "0"b; 256 auto_parse_text_options.flags.include_invalid_addresses = "0"b; 257 auto_parse_text_options.flags.mbz = "0"b; 258 259 if rtrim (after (before (based_string, NL || "To:"), NL || "Reply-To:"), WHITE_SPACE_COMMA) || NL = "" 260 then goto PROCESS_TO; 261 else do; 262 call mlsys_utils_$parse_address_list_text (rtrim (after (before (based_string, NL || "To:"), NL || 263 "Reply-To:") || NL, WHITE_SPACE_COMMA), addr (auto_parse_text_options), ADDRESS_LIST_VERSION_2, 264 send_mail_info.reply_to_list_ptr, parse_text_error_list_ptr, code); 265 if code ^= 0 then call xmail_error_$code_last ( code, NAME, stop, "^a^/", error_message); 266 call mail_system_$replace_reply_to (send_mail_info.new_msg_ptr, send_mail_info.reply_to_list_ptr, code); 267 if code ^= 0 then call xmail_error_$code_last ( code, NAME, stop, "^a^/", error_message); 268 end; 269 270 PROCESS_TO: 271 if rtrim (after (before (based_string, NL || copy_format), NL || "To:"), WHITE_SPACE_COMMA) || NL = "" 272 then call xmail_error_$no_code (code, NAME, "i", "You did not enter any recipients. Sending terminated."); 273 274 call mlsys_utils_$parse_address_list_text (rtrim (after (before (based_string, NL || copy_format),NL || "To:") || NL, WHITE_SPACE_COMMA), 275 addr (auto_parse_text_options), ADDRESS_LIST_VERSION_2, send_mail_info.to_list_ptr, parse_text_error_list_ptr, code); 276 if code ^= 0 then call xmail_error_$code_last (code, NAME, stop, "^a^/", error_message); 277 call mail_system_$replace_to (send_mail_info.new_msg_ptr, send_mail_info.to_list_ptr, code); 278 if code ^= 0 then call xmail_error_$code_last (code, NAME, stop, "^a^/", error_message); 279 280 if ltrim (rtrim (after (before (based_string,NL || rtrim(follows_copy)), NL ||copy_format), WHITE_SPACE_COMMA), WHITE_SPACE_COMMA) || NL ^= "" 281 then call mlsys_utils_$parse_address_list_text (rtrim (after (before (based_string, NL || rtrim(follows_copy)), NL || copy_format)|| NL, WHITE_SPACE_COMMA), addr (auto_parse_text_options), ADDRESS_LIST_VERSION_2, send_mail_info.cc_list_ptr, parse_text_error_list_ptr, code); 282 if code ^= 0 then call xmail_error_$code_last (code, NAME, stop, "^a^/", error_message); 283 if send_mail_info.cc_list_ptr ^= null 284 then do; 285 call mail_system_$replace_cc (send_mail_info.new_msg_ptr, send_mail_info.cc_list_ptr, code); 286 if code ^= 0 287 then call xmail_error_$code_last (code, NAME, stop, "^a^/", error_message); 288 end; 289 290 /* Add bcc handling */ 291 if new_style then 292 if ltrim (rtrim (after (before (based_string, NL || "Message:"), NL || "bcc:"), WHITE_SPACE_COMMA), WHITE_SPACE_COMMA) || NL ^= "" 293 then call mlsys_utils_$parse_address_list_text (rtrim (after (before (based_string, NL || "Message:"), NL || "bcc:") || NL, WHITE_SPACE_COMMA), addr (auto_parse_text_options), ADDRESS_LIST_VERSION_2, send_mail_info.bcc_list_ptr, parse_text_error_list_ptr, code); 294 if code ^= 0 then call xmail_error_$code_last (code, NAME, stop, "^a^/", error_message); 295 if send_mail_info.bcc_list_ptr ^= null 296 then do; 297 call mail_system_$replace_bcc (send_mail_info.new_msg_ptr, send_mail_info.bcc_list_ptr, code); 298 if code ^= 0 299 then call xmail_error_$code_last (code, NAME, stop, "^a^/", error_message); 300 end; 301 302 send_mail_info.msg_exists = "1"b; 303 304 if parse_text_error_list_ptr ^= null () 305 then do; 306 free parse_text_error_list; 307 parse_text_error_list_ptr = null (); 308 end; 309 call xmail_send_msg_ (); /* no parameter */ 310 return; 311 312 exit: return; 313 314 315 /* INTERNAL PROCEDURES */ 316 317 CLEAN_UP: proc (); 318 319 if send_mail_info.emacs_seg_ptr ^= null () then 320 call delete_$ptr (send_mail_info.emacs_seg_ptr, "100101"b, NAME, code); 321 if send_mail_info.new_msg_ptr ^= null () then 322 call mail_system_$free_message (send_mail_info.new_msg_ptr, code); 323 if code ^= 0 then send_mail_info.to_list_ptr = null (); 324 if send_mail_info.to_list_ptr ^= null () then 325 call mail_system_$free_address_list (send_mail_info.to_list_ptr, code); 326 if code ^= 0 then send_mail_info.reply_to_list_ptr = null (); 327 if send_mail_info.reply_to_list_ptr ^= null () then 328 call mail_system_$free_address_list (send_mail_info.reply_to_list_ptr, code); 329 if code ^= 0 then send_mail_info.cc_list_ptr = null (); 330 if send_mail_info.cc_list_ptr ^= null () then 331 call mail_system_$free_address_list (send_mail_info.cc_list_ptr, code); 332 if code ^= 0 then send_mail_info.bcc_list_ptr = null (); 333 if send_mail_info.bcc_list_ptr ^= null () then 334 call mail_system_$free_address_list (send_mail_info.bcc_list_ptr, code); 335 send_mail_info.emacs_seg_ptr = null (); 336 send_mail_info.new_msg_ptr = null (); 337 send_mail_info.msg_exists = "0"b; 338 send_mail_info.emacs_seg_pathname = ""; 339 return; 340 341 end CLEAN_UP; 342 343 344 end xmail_process_user_msg_; 345 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 09/02/88 0747.6 xmail_process_user_msg_.pl1 >spec>install>MR12.2-1098>xmail_process_user_msg_.pl1 148 1 05/22/86 1225.8 mlsys_message.incl.pl1 >ldd>include>mlsys_message.incl.pl1 150 2 09/02/88 0743.4 xmail_data.incl.pl1 >spec>install>MR12.2-1098>xmail_data.incl.pl1 152 3 09/12/84 0916.7 window_dcls.incl.pl1 >ldd>include>window_dcls.incl.pl1 154 4 01/14/88 2003.9 xmail_send_mail.incl.pl1 >ldd>include>xmail_send_mail.incl.pl1 156 5 10/27/83 2104.2 mlsys_address_list.incl.pl1 >ldd>include>mlsys_address_list.incl.pl1 158 6 10/27/83 2104.2 mlsys_parse_txt_options.incl.pl1 >ldd>include>mlsys_parse_txt_options.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ADDRESS_LIST_VERSION_2 000002 constant char(8) initial packed unaligned dcl 5-12 set ref 262* 274* 280* 291* MESSAGE_BODY_SECTION_PARAMETER_VERSION_2 000004 constant char(8) initial packed unaligned dcl 1-318 ref 231 MESSAGE_PREFORMATTED_BODY_SECTION constant fixed bin(17,0) initial dcl 1-285 ref 233 MESSAGE_VERSION_2 000006 constant char(8) initial packed unaligned dcl 1-49 set ref 218* NAME 000011 constant char(23) initial packed unaligned dcl 86 set ref 177* 205* 212* 215* 220* 226* 243* 265* 267* 270* 276* 278* 282* 286* 294* 298* 319* NL 003704 constant char(1) initial packed unaligned dcl 87 ref 224 224 236 259 259 259 262 262 262 262 262 262 270 270 270 274 274 274 274 274 274 280 280 280 280 280 280 280 280 280 291 291 291 291 291 291 291 291 291 PARSE_TEXT_OPTIONS_VERSION_1 000000 constant char(8) initial packed unaligned dcl 6-17 ref 252 WHITE_SPACE 000022 constant char(4) initial dcl 82 ref 215 WHITE_SPACE_COMMA 000020 constant char(6) initial dcl 84 ref 259 262 262 270 274 274 280 280 280 280 291 291 291 291 addr builtin function dcl 144 ref 230 237 242 242 262 262 274 274 280 280 291 291 after builtin function dcl 144 ref 215 224 259 262 262 270 274 274 280 280 280 291 291 291 area_ptr 2 000140 automatic pointer level 2 dcl 104 set ref 253* auto_message_body_section_parameter 000126 automatic structure level 1 unaligned dcl 102 set ref 242 242 auto_parse_text_options 000140 automatic structure level 1 unaligned dcl 104 set ref 262 262 274 274 280 280 291 291 based_array based char(1) array packed unaligned dcl 110 set ref 237 based_string based char packed unaligned dcl 108 ref 193 198 205 205 205 212 215 224 236 239 259 262 262 270 274 274 280 280 280 291 291 291 bcc_list_ptr 16 based pointer level 2 dcl 4-13 set ref 247* 291* 295 297* 332* 333 333* before builtin function dcl 144 ref 224 259 262 262 270 274 274 280 280 280 291 291 291 bit_count 000114 automatic fixed bin(24,0) dcl 93 set ref 176* 181 187 cc_list_ptr 14 based pointer level 2 dcl 4-13 set ref 247* 280* 283 285* 329* 330 330* cleanup 000106 stack reference condition dcl 75 ref 166 code 000115 automatic fixed bin(35,0) dcl 94 set ref 176* 177 177* 205* 212* 215* 218* 220 220* 224* 226 226* 242* 243 243* 262* 265 265* 266* 267 267* 270* 274* 276 276* 277* 278 278* 280* 282 282* 285* 286 286* 291* 294 294* 297* 298 298* 319* 321* 323 324* 326 327* 329 330* 332 333* copy_format 000116 automatic char(3) packed unaligned dcl 95 set ref 195* 200* 270 274 274 280 280 280 delete_$ptr 000044 constant entry external dcl 138 ref 319 divide builtin function dcl 144 ref 187 emacs_seg_pathname 22 based char(168) level 2 dcl 4-13 set ref 338* emacs_seg_ptr 4 based pointer level 2 dcl 4-13 set ref 176* 193 198 205 205 205 212 215 224 236 237 239 259 262 262 270 274 274 280 280 280 291 291 291 319 319* 335* error_message 000023 constant char(67) initial packed unaligned dcl 80 set ref 177* 220* 226* 243* 265* 267* 276* 278* 282* 286* 294* 298* flags 4 000140 automatic structure level 2 packed packed unaligned dcl 104 follows_copy 000120 automatic char(8) packed unaligned dcl 96 set ref 196* 201* 280 280 280 hcs_$status_mins 000050 constant entry external dcl 140 ref 176 header based structure level 2 in structure "message_user_field" dcl 1-163 in procedure "xmail_process_user_msg_" header based structure level 2 in structure "message_preformatted_body_section" dcl 1-292 in procedure "xmail_process_user_msg_" header based structure level 2 in structure "message_body_section" dcl 1-274 in procedure "xmail_process_user_msg_" header 4 based structure level 3 in structure "message_user_field_parameter" dcl 1-208 in procedure "xmail_process_user_msg_" header 4 based structure level 3 in structure "message_body_section_parameter" dcl 1-313 in procedure "xmail_process_user_msg_" header 64 based structure array level 4 in structure "message" dcl 1-15 in procedure "xmail_process_user_msg_" header 10 based structure array level 3 in structure "message_user_fields_list" dcl 1-150 in procedure "xmail_process_user_msg_" header 4 000126 automatic structure level 3 in structure "auto_message_body_section_parameter" unaligned dcl 102 in procedure "xmail_process_user_msg_" include_invalid_addresses 4(02) 000140 automatic bit(1) level 3 packed packed unaligned dcl 104 set ref 256* index builtin function dcl 144 ref 193 198 205 205 205 212 236 ioa_ 000046 constant entry external dcl 139 ref 170 183 length builtin function dcl 144 ref 236 239 list_errors 4 000140 automatic bit(1) level 3 packed packed unaligned dcl 104 set ref 254* ltrim builtin function dcl 144 ref 280 291 mail_system_$add_body_section 000020 constant entry external dcl 119 ref 242 mail_system_$create_message 000022 constant entry external dcl 121 ref 218 mail_system_$free_address_list 000024 constant entry external dcl 123 ref 324 327 330 333 mail_system_$free_message 000026 constant entry external dcl 125 ref 321 mail_system_$replace_bcc 000030 constant entry external dcl 127 ref 297 mail_system_$replace_cc 000032 constant entry external dcl 129 ref 285 mail_system_$replace_reply_to 000034 constant entry external dcl 131 ref 266 mail_system_$replace_subject 000036 constant entry external dcl 132 ref 224 mail_system_$replace_to 000040 constant entry external dcl 134 ref 277 mbz 4(03) 000140 automatic bit(33) level 3 packed packed unaligned dcl 104 set ref 257* message_body_section based structure level 1 dcl 1-274 message_body_section_parameter based structure level 1 dcl 1-313 message_body_section_ptr 000150 automatic pointer dcl 1-280 set ref 230* 233 235 237 239 message_envelope based structure level 1 dcl 1-61 message_preformatted_body_section based structure level 1 dcl 1-292 message_ptr 000146 automatic pointer dcl 1-53 set ref 164* message_redistribution based structure level 1 dcl 1-122 message_reference based structure level 1 dcl 1-234 message_text_field based structure level 1 dcl 1-260 message_user_field based structure level 1 dcl 1-163 mlsys_utils_$parse_address_list_text 000042 constant entry external dcl 136 ref 262 274 280 291 msg_exists based bit(1) level 2 dcl 4-13 set ref 302* 337* n_errors based fixed bin(17,0) level 2 dcl 6-24 ref 306 new_msg_ptr 6 based pointer level 2 dcl 4-13 set ref 218* 224* 242* 266* 277* 285* 297* 321 321* 336* new_style 000122 automatic bit(1) dcl 97 set ref 192* 199* 205 212 291 no_chars 000123 automatic fixed bin(21,0) dcl 98 set ref 187* 193 198 205 205 205 212 215 224 236 239 259 262 262 270 274 274 280 280 280 291 291 291 null builtin function dcl 144 ref 164 247 253 283 295 304 307 319 321 323 324 326 327 329 330 332 333 335 336 old_style 000124 automatic bit(1) dcl 99 set ref 192* 194* 205 parse_text_error_list based structure level 1 dcl 6-24 ref 306 parse_text_error_list_ptr 000152 automatic pointer dcl 6-33 set ref 164* 262* 274* 280* 291* 304 306 307* parse_text_options based structure level 1 dcl 6-6 quit 000100 stack reference condition dcl 75 ref 167 reply_to_list_ptr 10 based pointer level 2 dcl 4-13 set ref 247* 262* 266* 326* 327 327* rtrim builtin function dcl 144 ref 215 239 259 262 262 270 274 274 280 280 280 280 280 280 291 291 291 section 4 000126 automatic structure level 2 unaligned dcl 102 set ref 230 section_n_lines 1 based fixed bin(21,0) level 3 dcl 1-292 set ref 235* section_type based fixed bin(17,0) level 3 dcl 1-292 set ref 233* send_mail_info based structure level 1 dcl 4-13 send_mail_info_ptr 000052 external static pointer initial dcl 4-26 ref 176 193 198 205 205 205 212 215 218 224 224 236 237 239 242 247 247 247 247 259 262 262 262 266 266 270 274 274 274 277 277 280 280 280 280 283 285 285 291 291 291 291 295 297 297 302 319 319 321 321 323 324 324 326 327 327 329 330 330 332 333 333 335 336 337 338 start_of_text 000125 automatic fixed bin(17,0) dcl 100 set ref 236* 237 239 stop 000010 constant char(1) initial packed unaligned dcl 89 set ref 177* 205* 212* 220* 226* 243* 265* 267* 276* 278* 282* 286* 294* 298* substr builtin function dcl 144 ref 239 text_lth 4 based fixed bin(21,0) level 2 dcl 1-292 set ref 239* text_ptr 2 based pointer level 2 dcl 1-292 set ref 237* to_list_ptr 12 based pointer level 2 dcl 4-13 set ref 247* 274* 277* 323* 324 324* validate_addresses 4(01) 000140 automatic bit(1) level 3 packed packed unaligned dcl 104 set ref 255* version 000140 automatic char(8) level 2 in structure "auto_parse_text_options" packed packed unaligned dcl 104 in procedure "xmail_process_user_msg_" set ref 252* version 2 000126 automatic char(8) level 2 in structure "auto_message_body_section_parameter" packed packed unaligned dcl 102 in procedure "xmail_process_user_msg_" set ref 231* wrong_format 000044 constant char(31) initial packed unaligned dcl 79 set ref 205* 212* xmail_error_$code_last 000014 constant entry external dcl 117 ref 265 267 276 278 282 286 294 298 xmail_error_$no_code 000012 constant entry external dcl 116 ref 177 205 212 215 220 226 243 270 xmail_send_msg_ 000010 constant entry external dcl 115 ref 309 xmail_window_manager_$reconnect 000016 constant entry external dcl 118 ref 169 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. MESSAGE_ADDRESS_LIST_USER_FIELD internal static fixed bin(17,0) initial dcl 1-174 MESSAGE_BIT_STRING_BODY_SECTION internal static fixed bin(17,0) initial dcl 1-285 MESSAGE_DATE_USER_FIELD internal static fixed bin(17,0) initial dcl 1-174 MESSAGE_ENVELOPE_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 1-79 MESSAGE_INTEGER_USER_FIELD internal static fixed bin(17,0) initial dcl 1-174 MESSAGE_REDISTRIBUTIONS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 1-117 MESSAGE_REDISTRIBUTION_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 1-144 MESSAGE_REFERENCES_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 1-227 MESSAGE_REFERENCE_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 1-253 MESSAGE_TEXT_USER_FIELD internal static fixed bin(17,0) initial dcl 1-174 MESSAGE_TRACE_VERSION_2 internal static char(8) initial packed unaligned dcl 1-103 MESSAGE_USER_FIELDS_LIST_VERSION_2 internal static char(8) initial packed unaligned dcl 1-158 MESSAGE_USER_FIELD_PARAMETER_VERSION_2 internal static char(8) initial packed unaligned dcl 1-213 address_list based structure level 1 dcl 5-6 address_list_n_addresses automatic fixed bin(17,0) dcl 5-16 address_list_ptr automatic pointer dcl 5-14 message based structure level 1 dcl 1-15 message_address_list_user_field based structure level 1 dcl 1-190 message_bit_string_body_section based structure level 1 dcl 1-301 message_bit_string_body_section_bit_string based bit packed unaligned dcl 1-307 message_body_section_parameter_ptr automatic pointer dcl 1-320 message_date_user_field based structure level 1 dcl 1-195 message_envelope_parameter based structure level 1 dcl 1-74 message_envelope_parameter_ptr automatic pointer dcl 1-81 message_envelope_ptr automatic pointer dcl 1-69 message_integer_user_field based structure level 1 dcl 1-200 message_n_body_sections automatic fixed bin(17,0) dcl 1-55 message_n_redistributions automatic fixed bin(17,0) dcl 1-55 message_n_user_fields automatic fixed bin(17,0) dcl 1-55 message_preformatted_body_section_text based char packed unaligned dcl 1-298 message_redistribution_comment based char packed unaligned dcl 1-131 message_redistribution_parameter based structure level 1 dcl 1-139 message_redistribution_parameter_ptr automatic pointer dcl 1-146 message_redistribution_ptr automatic pointer dcl 1-134 message_redistributions_list based structure level 1 dcl 1-109 message_reference_parameter based structure level 1 dcl 1-248 message_reference_parameter_ptr automatic pointer dcl 1-255 message_reference_ptr automatic pointer dcl 1-243 message_reference_subject based char packed unaligned dcl 1-240 message_references_list based structure level 1 dcl 1-219 message_references_list_n_references automatic fixed bin(17,0) dcl 1-55 message_references_list_ptr automatic pointer dcl 1-229 message_subject based char packed unaligned dcl 1-51 message_text_field_ptr automatic pointer dcl 1-270 message_text_field_text based char packed unaligned dcl 1-268 message_text_user_field based structure level 1 dcl 1-183 message_text_user_field_text based char packed unaligned dcl 1-187 message_trace based structure level 1 dcl 1-87 message_trace_n_relays automatic fixed bin(17,0) dcl 1-55 message_trace_ptr automatic pointer dcl 1-105 message_user_field_parameter based structure level 1 dcl 1-208 message_user_field_parameter_ptr automatic pointer dcl 1-215 message_user_field_ptr automatic pointer dcl 1-169 message_user_fields_list based structure level 1 dcl 1-150 parse_text_error_list_n_errors automatic fixed bin(17,0) dcl 6-35 parse_text_options_ptr automatic pointer dcl 6-19 window_$bell 000000 constant entry external dcl 3-6 window_$change_column 000000 constant entry external dcl 3-63 window_$change_line 000000 constant entry external dcl 3-59 window_$clear_region 000000 constant entry external dcl 3-7 window_$clear_to_end_of_line 000000 constant entry external dcl 3-9 window_$clear_to_end_of_window 000000 constant entry external dcl 3-11 window_$clear_window 000000 constant entry external dcl 3-13 window_$create 000000 constant entry external dcl 3-72 window_$delete_chars 000000 constant entry external dcl 3-15 window_$destroy 000000 constant entry external dcl 3-74 window_$edit_line 000000 constant entry external dcl 3-76 window_$get_cursor_position 000000 constant entry external dcl 3-17 window_$get_echoed_chars 000000 constant entry external dcl 3-22 window_$get_one_unechoed 000000 constant entry external dcl 3-67 window_$get_one_unechoed_char 000000 constant entry external dcl 3-67 window_$get_unechoed_chars 000000 constant entry external dcl 3-25 window_$insert_text 000000 constant entry external dcl 3-28 window_$overwrite_text 000000 constant entry external dcl 3-29 window_$position_cursor 000000 constant entry external dcl 3-31 window_$position_cursor_rel 000000 constant entry external dcl 3-36 window_$scroll_region 000000 constant entry external dcl 3-42 window_$sync 000000 constant entry external dcl 3-44 window_$write_raw_text 000000 constant entry external dcl 3-48 window_$write_sync_read 000000 constant entry external dcl 3-53 xmail_data based structure level 1 dcl 2-54 xmail_data_ptr external static pointer initial dcl 2-52 xmail_version internal static varying char(10) initial dcl 2-84 NAMES DECLARED BY EXPLICIT CONTEXT. CLEAN_UP 003044 constant entry internal dcl 317 ref 166 171 184 PROCESS_TO 001526 constant label dcl 270 ref 259 START 000173 constant label dcl 164 exit 003042 constant label dcl 312 ref 172 xmail_process_user_msg_ 000166 constant entry external dcl 33 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4176 4252 3705 4206 Length 4642 3705 54 354 271 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME xmail_process_user_msg_ 210 external procedure is an external procedure. on unit on line 166 64 on unit on unit on line 167 78 on unit CLEAN_UP 84 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME xmail_process_user_msg_ 000114 bit_count xmail_process_user_msg_ 000115 code xmail_process_user_msg_ 000116 copy_format xmail_process_user_msg_ 000120 follows_copy xmail_process_user_msg_ 000122 new_style xmail_process_user_msg_ 000123 no_chars xmail_process_user_msg_ 000124 old_style xmail_process_user_msg_ 000125 start_of_text xmail_process_user_msg_ 000126 auto_message_body_section_parameter xmail_process_user_msg_ 000140 auto_parse_text_options xmail_process_user_msg_ 000146 message_ptr xmail_process_user_msg_ 000150 message_body_section_ptr xmail_process_user_msg_ 000152 parse_text_error_list_ptr xmail_process_user_msg_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp call_ext_out_desc call_ext_out call_int_this call_int_other return_mac tra_ext_1 enable_op shorten_stack ext_entry int_entry set_chars_eis index_chars_eis op_freen_ index_before_cs index_after_cs THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. delete_$ptr hcs_$status_mins ioa_ mail_system_$add_body_section mail_system_$create_message mail_system_$free_address_list mail_system_$free_message mail_system_$replace_bcc mail_system_$replace_cc mail_system_$replace_reply_to mail_system_$replace_subject mail_system_$replace_to mlsys_utils_$parse_address_list_text xmail_error_$code_last xmail_error_$no_code xmail_send_msg_ xmail_window_manager_$reconnect THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. send_mail_info_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 33 000165 164 000173 166 000176 167 000220 169 000234 170 000240 171 000254 172 000261 176 000264 177 000305 181 000342 183 000344 184 000360 185 000364 187 000365 192 000367 193 000371 194 000402 195 000404 196 000406 198 000410 199 000417 200 000421 201 000423 205 000425 212 000511 215 000560 218 000645 220 000662 224 000717 226 001006 230 001044 231 001046 233 001050 235 001052 236 001054 237 001075 239 001102 242 001123 243 001143 247 001200 252 001216 253 001220 254 001222 255 001224 256 001226 257 001230 259 001232 261 001322 262 001323 265 001416 266 001454 267 001471 270 001526 274 001646 276 001775 277 002033 278 002050 280 002105 282 002357 283 002415 285 002424 286 002436 291 002473 294 002701 295 002737 297 002746 298 002760 302 003015 304 003021 306 003025 307 003032 309 003034 310 003041 312 003042 317 003043 319 003051 321 003106 323 003126 324 003136 326 003155 327 003165 329 003204 330 003214 332 003233 333 003243 335 003262 336 003267 337 003272 338 003274 339 003300 ----------------------------------------------------------- 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