COMPILATION LISTING OF SEGMENT message_facility_ Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 05/04/88 0824.6 mst Wed Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* *********************************************************** */ 8 9 /* This subroutine is the heart of the Multics message facility. */ 10 /* This replaces the Multics message facility written 12/01/75 by 11* Steve Herbst. */ 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(84-05-10,Lippard), approve(), audit(), install(): 16* Written by Jim Lippard. 17* 2) change(84-11-16,Lippard), approve(), audit(), install(): 18* Modified to prevent messages received from getting message numbers 19* lower than those already in the mailbox. 20* 3) change(84-11-27,Lippard), approve(), audit(), install(): 21* Modified to fix the last fix correctly, to only print "You have N 22* messages" in the alarm handler when a call string is NOT being used, 23* and to make alarms work. 24* 4) change(84-12-18,Lippard), approve(), audit(), install(): 25* Modified to make message_facility_$send_message do something reasonable 26* with error_table_$no_info. 27* 5) change(85-01-11,Lippard), approve(), audit(), install(): 28* Modified to make entry points take a message_id instead of an array 29* index to prevent internal message arrays and applications' arrays from 30* getting out of synch. 31* 6) change(85-01-23,Lippard), approve(), audit(), install(): 32* Modified to fix code calling mlr_. 33* 7) change(85-01-30,Lippard), approve(), audit(), install(): 34* Modified to speed up message selection by using a binary search. 35* 8) change(85-03-26,Lippard), approve(), audit(), install(): 36* Modified to speed up create_message_array and compact_message_array. 37* 9) change(85-04-16,Lippard), approve(), audit(), install(): 38* Modified to properly set the last message number when a new message is 39* received. 40* 10) change(85-05-31,Lippard), approve(85-11-18,MCR7298), 41* audit(86-01-10,Spitzer), install(86-01-20,MR12.0-1006): 42* Modified to initialize everything in the msg_facility_mailbox structure 43* before any possible aborting/freeing takes place. 44* 11) change(85-09-02,Lippard), approve(85-11-18,MCR7298), 45* audit(86-01-10,Spitzer), install(86-01-20,MR12.0-1006): 46* Modified to only send acknowledgements when the user has d permission 47* on the mailbox. 48* 12) change(86-04-23,Lippard), approve(86-05-27,MCR7418), 49* audit(86-06-24,Hartogs), install(86-06-30,MR12.0-1080): 50* Modified to make get_msg_array_ptr only call create_message_array when 51* necessary. 52* 13) change(86-06-04,Lippard), approve(86-06-24,MCR7432), 53* audit(86-06-24,Hartogs), install(86-06-30,MR12.0-1080): 54* Modified to properly zero fields in mail_format when sending messages. 55* 14) change(86-06-05,Lippard), approve(86-06-24,MCR7437), 56* audit(86-06-24,Hartogs), install(86-06-30,MR12.0-1080): 57* Modified to correctly figure out when to use mailbox_$own_xxx entries. 58* 15) change(86-08-06,Lippard), approve(87-03-18,MECR0001), 59* audit(87-03-12,Fawcett), install(87-03-19,MR12.1-1002): 60* Modified to check for unseen messages in wakeup processor. 61* 16) change(87-01-29,Lippard), approve(87-03-18,MECR0001), 62* audit(87-03-12,Fawcett), install(87-03-19,MR12.1-1002): 63* Modified to strip control characters from message comment field. 64* 17) change(87-05-08,Lippard), approve(87-04-20,MCR7669), 65* audit(87-05-11,Fawcett), install(88-05-04,MR12.2-1045): 66* Formal installation to close out MECR0001 and to use the permanent 67* seen switches in the mailbox when access allows. 68* 18) change(88-03-31,Lippard), approve(88-04-18,MCR7876), 69* audit(88-04-26,Parisek), install(88-05-04,MR12.2-1045): 70* Changed wakeup_processor to (a) stop setting P_code, which is not 71* a parameter to that procedure and (b) check for error_table_$seg_unknown 72* from mailbox_$get_mode_index. Also changed calls to ioa_$rsnnl to 73* use the returned length correctly. 74* END HISTORY COMMENTS */ 75 76 message_facility_: procedure options (variable); 77 return; /* not an entry */ 78 79 dcl (P_msgf_mbx_ptr, P_next_msgf_mbx_ptr) ptr parm; 80 dcl (P_dname, P_ename, P_message) char (*) parm; 81 dcl P_access_class bit (72) aligned; 82 dcl P_default_mbx bit (1) aligned parm; 83 dcl P_flags bit (*) parm; 84 dcl P_message_id bit (72) aligned parm; 85 dcl P_prefix char (32) varying parm; 86 dcl (P_short_prefix, P_short_format) bit (1) aligned parm; 87 dcl P_handler entry variable parm; 88 dcl P_info_ptr ptr parm; 89 dcl P_time fixed bin (71) parm; 90 dcl P_area_ptr ptr; 91 dcl P_msg_array_ptr ptr parm; 92 dcl P_n_messages fixed bin parm; 93 dcl P_iocb_ptr ptr; 94 dcl P_code fixed bin (35) parm; 95 96 dcl access_class bit (1) aligned; 97 dcl access_mode bit (36) aligned; 98 dcl allow_switch bit (36) aligned; 99 dcl array_length fixed bin (21); 100 dcl authorization bit (72) aligned; 101 dcl auth_string char (170); 102 dcl call_string char (512) based (P_info_ptr); 103 dcl change_state bit (1) aligned; 104 dcl command_line char (2000); 105 dcl count fixed bin; 106 dcl current_message_index fixed bin; 107 dcl d_permission bit (1) aligned; 108 dcl default_dname char (168); 109 dcl default_ename char (32); 110 dcl default_uid bit (36) aligned; 111 dcl destination_string char (array_length) based (destination_string_ptr); 112 dcl destination_string_ptr ptr; 113 dcl dname char (168); 114 dcl ename char (32); 115 dcl wakeup_flags bit (5) aligned; 116 dcl full_name char (32) internal static init (""); 117 dcl hold_this_message bit (1) aligned; 118 dcl hold_this_notification bit (1) aligned; 119 dcl iocb_ptr ptr; 120 dcl last_index fixed bin; 121 dcl last_message_set bit (1) aligned; 122 dcl last_msg_time char (24) internal static init (""); 123 dcl last_sender char (120) internal static init (""); 124 dcl last_time fixed bin (71) internal static init (0); 125 dcl mbx_index fixed bin; 126 dcl message char (47); 127 dcl message_bit_count fixed bin; 128 dcl message_id bit (72) aligned; 129 dcl message_ident char (200) varying; 130 dcl message_index fixed bin; 131 dcl message_sender char (120); 132 dcl own bit (1) aligned; 133 dcl person char (22) internal static init (""); 134 dcl project char (9) internal static init (""); 135 dcl person_id char (22); 136 dcl project_id char (9); 137 dcl login_name char (32); 138 dcl seen_switch_flags bit (3) aligned; 139 dcl short bit (1) aligned; 140 dcl source_string char (array_length) based (source_string_ptr); 141 dcl source_string_ptr ptr; 142 dcl tag char (10) var; 143 dcl uid bit (36) aligned; 144 dcl use_call_string bit (1) aligned; 145 146 dcl date_time fixed bin (71); 147 dcl msg_date_time char (24); 148 dcl current_date_time char (24); 149 150 dcl freed_msgf_mbx_ptr ptr; 151 dcl next_msgf_mbx_ptr ptr; 152 dcl static_msgf_mbx_ptr ptr internal static init (null ()); 153 154 dcl area_ptr ptr static init (null ()); 155 dcl sys_area area (65560) based (area_ptr); 156 dcl user_area_ptr ptr; 157 dcl user_area area based (user_area_ptr); 158 159 dcl 1 internal_msg_array (msg_facility_mailbox.n_elements) aligned based (msg_facility_mailbox.messages_ptr) like msg_array; 160 161 dcl 1 local_lmi aligned like last_message_info; 162 163 dcl 1 local_mi aligned like message_info; 164 165 dcl 1 local_mra aligned like mseg_return_args; 166 167 dcl 1 local_pf unaligned like msg_print_flags based (local_pf_ptr); 168 dcl local_pf_ptr ptr; 169 170 dcl 1 local_smi aligned like send_mail_info based (local_smi_ptr); 171 dcl local_smi_ptr ptr; 172 173 dcl new_message_number fixed bin; 174 175 dcl found bit (1) aligned; 176 dcl retried bit (1) aligned; 177 178 dcl (idx, jdx) fixed bin; 179 180 dcl code fixed bin (35); 181 182 dcl aim_check_$greater_or_equal entry (bit (72) aligned, bit (72) aligned) returns (bit (1) aligned) reducible; 183 184 dcl error_table_$bad_segment fixed bin (35) ext static; 185 dcl error_table_$bad_subr_arg fixed bin (35) ext static; 186 dcl error_table_$messages_off fixed bin (35) ext static; 187 dcl error_table_$noentry fixed bin (35) ext static; 188 dcl error_table_$no_info fixed bin (35) ext static; 189 dcl error_table_$no_message fixed bin (35) ext static; 190 dcl error_table_$rqover fixed bin (35) ext static; 191 dcl error_table_$seg_unknown fixed bin (35) ext static; 192 dcl error_table_$unimplemented_version fixed bin (35) ext static; 193 194 dcl (addr, after, before, clock, collate, divide, fixed, index, length, max, min, null, rel, rtrim, size, string, substr, 195 translate, unspec) builtin; 196 197 dcl (cleanup, record_quota_overflow) condition; 198 199 dcl canonicalize_ entry (ptr, fixed bin (21), ptr, fixed bin (21), fixed bin (35)); 200 201 dcl convert_access_class_$to_string_short entry (bit (72) aligned, char (*), fixed bin (35)); 202 203 dcl cu_$cp entry (ptr, fixed bin (21), fixed bin (35)); 204 205 dcl date_time_ entry (fixed bin (71), char (*)); 206 dcl date_time_$format entry (char (*), fixed bin (71), char (*), char (*)) returns (char (250) var); 207 208 dcl get_authorization_ entry () returns (bit (72) aligned) reducible; 209 210 dcl get_system_free_area_ entry () returns (ptr); 211 212 213 dcl ioa_$ioa_switch entry options (variable); 214 dcl ioa_$ioa_switch_nnl entry options (variable); 215 dcl ioa_$rsnnl entry options (variable); 216 217 dcl iox_$control entry (ptr, char (*), ptr, fixed bin (35)); 218 dcl iox_$user_io ptr ext static; 219 220 dcl ipc_$create_ev_chn entry (fixed bin (71), fixed bin (35)); 221 dcl ipc_$decl_ev_call_chn entry (fixed bin (71), entry, ptr, fixed bin, fixed bin (35)); 222 dcl ipc_$delete_ev_chn entry (fixed bin (71), fixed bin (35)); 223 224 dcl mailbox_$accept_wakeups_index entry (fixed bin, fixed bin (71), bit (36) aligned, fixed bin (35)); 225 dcl mailbox_$close entry (fixed bin, fixed bin (35)); 226 dcl mailbox_$delete_index entry (fixed bin, bit (72) aligned, fixed bin (35)); 227 dcl mailbox_$get_mode_index entry (fixed bin, bit (36) aligned, fixed bin (35)); 228 dcl mailbox_$get_uid_file entry (char (*), char (*), bit (36) aligned, fixed bin (35)); 229 dcl mailbox_$incremental_read_index entry (fixed bin, ptr, bit (2) aligned, bit (72) aligned, ptr, 230 fixed bin (35)); 231 dcl mailbox_$open entry (char (*), char (*), fixed bin, fixed bin (35)); 232 dcl mailbox_$own_incremental_read_index entry (fixed bin, ptr, bit (2) aligned, bit (72) aligned, ptr, 233 fixed bin (35)); 234 dcl mailbox_$own_read_index entry (fixed bin, ptr, bit (1) aligned, ptr, fixed bin (35)); 235 dcl mailbox_$read_index entry (fixed bin, ptr, bit (1) aligned, ptr, fixed bin (35)); 236 dcl mailbox_$update_message_index entry (fixed bin, fixed bin, bit (72) aligned, ptr, fixed bin (35)); 237 dcl mailbox_$wakeup_add_index entry (fixed bin, ptr, fixed bin, bit (36) aligned, bit (72) aligned, 238 fixed bin (35)); 239 dcl mailbox_$wakeup_aim_add_index entry (fixed bin, ptr, fixed bin, bit (36) aligned, bit (72) aligned, 240 bit (72) aligned, fixed bin (35)); 241 242 dcl message_facility_$alarm_processor entry (ptr); 243 dcl message_facility_$wakeup_processor entry (ptr); 244 dcl message_facility_$default_alarm_handler entry (ptr, ptr); 245 dcl message_facility_$default_wakeup_handler entry (ptr, ptr); 246 dcl message_facility_$delete_message entry (ptr, bit (72) aligned, fixed bin (35)); 247 dcl message_facility_$free_msgf_mbx_ptr entry (ptr, fixed bin (35)); 248 dcl message_facility_$get_last_message_info entry (ptr, ptr, fixed bin (35)); 249 dcl message_facility_$print_message entry (ptr, ptr, bit (72) aligned, ptr, fixed bin (35)); 250 dcl message_facility_$read_message entry (ptr, bit (72) aligned, ptr, ptr, fixed bin (35)); 251 dcl message_facility_$send_message entry (char (*), char (*), char (*), ptr, fixed bin (35)); 252 dcl message_facility_$set_seen_switch entry (ptr, bit (72) aligned, bit (*), fixed bin (35)); 253 254 dcl mrl_ entry (ptr, fixed bin (21), ptr, fixed bin (21)); 255 256 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 257 258 dcl requote_string_ entry (char (*)) returns (char (*)); 259 260 dcl sub_err_ entry options (variable); 261 262 dcl timer_manager_$alarm_wakeup entry (fixed bin (71), bit (2), fixed bin (71)); 263 dcl timer_manager_$reset_alarm_wakeup entry (fixed bin (71)); 264 265 dcl user_info_$whoami entry (char (*), char (*), char (*)); 266 267 dcl value_$get entry () options (variable); 268 269 dcl TRUE bit (1) aligned internal static options (constant) init ("1"b); 270 dcl FALSE bit (1) aligned internal static options (constant) init ("0"b); 271 dcl ALPHABET char (256) init ((8)" " || " " || (4)" " || "" || (16)" " 272 || substr (collate (), 33)); /* space, BSHT, space, RRSBRS, space, alphanumerics */ 273 dcl FIVE_MINUTES fixed bin (71) internal static options (constant) init (300000000); 274 dcl MSG_ARRAY_BLOCK_SIZE fixed bin internal static options (constant) init (100); 275 dcl MSG_ARRAY_ELEMENT_LENGTH fixed bin internal static options (constant) init (16); /* four words, sixteen characters */ 276 dcl NL char (1) aligned internal static options (constant) init (" 277 "); 278 dcl NLSPHT char (3) aligned internal static options (constant) init (" 279 "); 280 dcl BS char (1) aligned internal static options (constant) init (""); 281 dcl PERMANENT_VALUES bit (36) aligned internal static options (constant) init ("200000000000"b3); 282 dcl READ_CURRENT bit (2) aligned internal static options (constant) init ("00"b); 283 dcl READ_FIRST bit (1) aligned internal static options (constant) init ("0"b); 284 dcl READ_FORWARD bit (2) aligned internal static options (constant) init ("01"b); 285 dcl RELATIVE_SECONDS bit (2) internal static options (constant) init ("11"b); 286 287 /* This entry returns the next msg facility mailbox pointer in the chain. */ 288 get_next_msgf_mbx_ptr: entry (P_msgf_mbx_ptr, P_next_msgf_mbx_ptr); 289 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 290 P_next_msgf_mbx_ptr = null (); 291 292 if msg_facility_mailbox_ptr = null () then next_msgf_mbx_ptr = static_msgf_mbx_ptr; 293 else next_msgf_mbx_ptr = msg_facility_mailbox.next_mbx_ptr; 294 295 code = 1; 296 do while (code ^= 0); 297 msg_facility_mailbox_ptr = next_msgf_mbx_ptr; 298 code = 0; 299 if msg_facility_mailbox_ptr ^= null () then do; /* see if it's there and we have access */ 300 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 301 msg_facility_mailbox.index, code); 302 if code ^= 0 then do; 303 call message_facility_$free_msgf_mbx_ptr (msg_facility_mailbox_ptr, (0)); 304 if P_msgf_mbx_ptr = null () then next_msgf_mbx_ptr = static_msgf_mbx_ptr; 305 else next_msgf_mbx_ptr = P_msgf_mbx_ptr -> msg_facility_mailbox.next_mbx_ptr; 306 end; 307 end; 308 end; 309 310 P_next_msgf_mbx_ptr = next_msgf_mbx_ptr; 311 return; /* get_next_msgf_mbx_ptr */ 312 313 /* This entry returns a msg facility mailbox pointer for the specified mailbox. */ 314 get_msgf_mbx_ptr: entry (P_dname, P_ename, P_msgf_mbx_ptr, P_code); 315 dname = P_dname; 316 ename = P_ename; 317 P_msgf_mbx_ptr = null (); 318 P_code = 0; 319 320 call mailbox_$get_uid_file (dname, ename, uid, code); 321 322 if code ^= 0 then do; 323 P_code = code; 324 return; 325 end; 326 327 msg_facility_mailbox_ptr = static_msgf_mbx_ptr; 328 found = FALSE; 329 do while ((msg_facility_mailbox_ptr ^= null ()) & ^found); 330 if msg_facility_mailbox.uid = uid then found = TRUE; 331 else msg_facility_mailbox_ptr = msg_facility_mailbox.next_mbx_ptr; 332 end; 333 334 if ^found then do; 335 /* add a new one, at the beginning of the list */ 336 if area_ptr = null () then area_ptr = get_system_free_area_ (); 337 allocate msg_facility_mailbox set (msg_facility_mailbox_ptr) in (sys_area); 338 msg_facility_mailbox.next_mbx_ptr = static_msgf_mbx_ptr; 339 static_msgf_mbx_ptr = msg_facility_mailbox_ptr; 340 341 /* initialize the structure */ 342 msg_facility_mailbox.version = MSG_FACILITY_MAILBOX_VERSION_1; 343 msg_facility_mailbox.dname = dname; 344 msg_facility_mailbox.ename = ename; 345 msg_facility_mailbox.uid = uid; 346 call user_info_$whoami (person, project, ""); 347 default_dname = ">udd>" || rtrim (project) || ">" || rtrim (person); 348 default_ename = rtrim (person) || ".mbx"; 349 call mailbox_$get_uid_file (default_dname, default_ename, default_uid, (0)); 350 if uid = default_uid then msg_facility_mailbox.default_mbx = TRUE; 351 else msg_facility_mailbox.default_mbx = FALSE; 352 msg_facility_mailbox.event_channel = 0; 353 354 string (msg_facility_mailbox.wakeup_flags) = ""b; 355 msg_facility_mailbox.mbz = ""b; 356 msg_facility_mailbox.short_format = FALSE; 357 msg_facility_mailbox.prefix = ""; 358 msg_facility_mailbox.short_prefix = FALSE; 359 msg_facility_mailbox.alarm_time = 0; 360 msg_facility_mailbox.alarm_event_channel = 0; 361 msg_facility_mailbox.last_message_ptr = null (); 362 msg_facility_mailbox.last_id = ""b; 363 msg_facility_mailbox.last_message_number = 0; 364 msg_facility_mailbox.highest_message = 0; 365 msg_facility_mailbox.messages_ptr = null (); 366 msg_facility_mailbox.n_elements = 0; 367 msg_facility_mailbox.n_messages = 0; 368 msg_facility_mailbox.msg_array_compacted = TRUE; 369 msg_facility_mailbox.msg_array_updated = FALSE; 370 msg_facility_mailbox.wakeup_handler = message_facility_$default_wakeup_handler; 371 msg_facility_mailbox.wakeup_info_ptr = null (); 372 msg_facility_mailbox.alarm_handler = message_facility_$default_alarm_handler; 373 msg_facility_mailbox.alarm_info_ptr = null (); 374 375 /* We do this last so that everything is initialized properly in case we have 376* to free the structure. */ 377 call mailbox_$open (dname, ename, msg_facility_mailbox.index, code); 378 379 if code ^= 0 then do; 380 P_code = code; 381 return; 382 end; 383 384 end; 385 386 else do; /* see if mailbox is still there */ 387 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 388 msg_facility_mailbox.index, code); 389 390 if code ^= 0 then do; 391 P_code = code; 392 call message_facility_$free_msgf_mbx_ptr (msg_facility_mailbox_ptr, (0)); 393 return; 394 end; 395 end; 396 397 P_msgf_mbx_ptr = msg_facility_mailbox_ptr; 398 return; /* get_msgf_mbx_ptr */ 399 400 /* This entry makes a mailbox unknown to the message facility. */ 401 free_msgf_mbx_ptr: entry (P_msgf_mbx_ptr, P_code); 402 P_code = 0; 403 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 404 405 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 406 P_code = error_table_$unimplemented_version; 407 return; 408 end; 409 410 call mailbox_$close (msg_facility_mailbox.index, (0)); 411 412 freed_msgf_mbx_ptr = msg_facility_mailbox_ptr; 413 msg_facility_mailbox_ptr = static_msgf_mbx_ptr; 414 415 if P_msgf_mbx_ptr = static_msgf_mbx_ptr then do; /* free first mailbox in list */ 416 msg_facility_mailbox_ptr = static_msgf_mbx_ptr; 417 static_msgf_mbx_ptr = msg_facility_mailbox.next_mbx_ptr; 418 end; 419 420 else do; 421 422 /* set msg_facility_mailbox_ptr to point to mbx in list just BEFORE the one we're freeing */ 423 found = FALSE; 424 do msg_facility_mailbox_ptr = static_msgf_mbx_ptr 425 repeat (msg_facility_mailbox.next_mbx_ptr) 426 while (msg_facility_mailbox.next_mbx_ptr ^= null () 427 & ^found); 428 if msg_facility_mailbox.next_mbx_ptr = freed_msgf_mbx_ptr then found = TRUE; 429 end; 430 431 if msg_facility_mailbox.next_mbx_ptr = null () then do; /* this msgf structure isn't in our list! */ 432 P_code = error_table_$unimplemented_version; 433 return; 434 end; 435 end; 436 437 P_msgf_mbx_ptr = null (); 438 msg_facility_mailbox.next_mbx_ptr = freed_msgf_mbx_ptr -> msg_facility_mailbox.next_mbx_ptr; 439 440 msg_facility_mailbox_ptr = freed_msgf_mbx_ptr; 441 442 /* reset alarm wakeups */ 443 if msg_facility_mailbox.alarm_time > 0 then call 444 timer_manager_$reset_alarm_wakeup (msg_facility_mailbox.alarm_event_channel); 445 446 /* delete event channels */ 447 if msg_facility_mailbox.alarm_event_channel ^= 0 then 448 call ipc_$delete_ev_chn (msg_facility_mailbox.alarm_event_channel, (0)); 449 if msg_facility_mailbox.event_channel ^= 0 then call ipc_$delete_ev_chn (msg_facility_mailbox.event_channel, (0)); 450 451 /* free last message mail format structure */ 452 if msg_facility_mailbox.last_message_ptr ^= null () then do; 453 message_info_ptr = msg_facility_mailbox.last_message_ptr; 454 if message_info.message_ptr ^= null () then free message_info.message_ptr -> mail_format in (sys_area); 455 free message_info in (sys_area); 456 end; 457 458 /* free message array */ 459 if msg_facility_mailbox.messages_ptr ^= null () then free internal_msg_array in (sys_area); 460 461 free msg_facility_mailbox in (sys_area); 462 return; /* free_msgf_mbx_ptr */ 463 464 /* This entry returns the wakeup state for the specified mailbox. */ 465 get_wakeup_state: entry (P_msgf_mbx_ptr, P_flags, P_code); 466 P_flags = ""b; 467 P_code = 0; 468 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 469 470 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 471 P_code = error_table_$unimplemented_version; 472 return; 473 end; 474 475 P_flags = substr (string (msg_facility_mailbox.wakeup_flags), 1, 5); 476 return; /* get_wakeup_state */ 477 478 /* This entry sets the wakeup state for the specified mailbox. */ 479 set_wakeup_state: entry (P_msgf_mbx_ptr, P_flags, P_code); 480 P_code = 0; 481 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 482 wakeup_flags = P_flags; 483 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 484 P_code = error_table_$unimplemented_version; 485 return; 486 end; 487 488 if substr (wakeup_flags, 4, 2) = "00"b | substr (wakeup_flags, 4, 2) = "11"b then do; 489 /* can't currently "unaccept" messages, 11 is undefined */ 490 P_code = error_table_$bad_subr_arg; 491 return; 492 end; 493 494 if msg_facility_mailbox.event_channel = 0 then do; 495 call ipc_$create_ev_chn (msg_facility_mailbox.event_channel, code); 496 497 if code ^= 0 then do; 498 P_code = code; 499 return; 500 end; 501 502 call ipc_$decl_ev_call_chn (msg_facility_mailbox.event_channel, message_facility_$wakeup_processor, 503 msg_facility_mailbox_ptr, (1), code); 504 505 if code ^= 0 then do; 506 P_code = code; 507 return; 508 end; 509 end; 510 511 if wakeup_flags ^= string (msg_facility_mailbox.wakeup_flags) then 512 change_state = TRUE; 513 514 string (msg_facility_mailbox.wakeup_flags) = wakeup_flags; 515 516 substr (allow_switch, 1, 1) = substr (msg_facility_mailbox.wakeup_state, 1, 1); 517 substr (allow_switch, 2, 1) = substr (allow_switch, 1, 1); 518 519 SET_WAKEUP_STATE: 520 call mailbox_$accept_wakeups_index (msg_facility_mailbox.index, msg_facility_mailbox.event_channel, 521 allow_switch, code); 522 523 if code = error_table_$seg_unknown then do; 524 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 525 msg_facility_mailbox.index, code); 526 if code ^= 0 then do; 527 P_code = code; 528 return; 529 end; 530 go to SET_WAKEUP_STATE; 531 end; 532 533 else if code ^= 0 then do; 534 P_code = code; 535 return; 536 end; 537 538 if substr (allow_switch, 1, 1) = FALSE & change_state then 539 msg_facility_mailbox.msg_array_updated = FALSE; 540 return; /* set_wakeup_state */ 541 542 /* This entry returns the pathname for the specified mailbox. */ 543 get_mbx_path: entry (P_msgf_mbx_ptr, P_dname, P_ename, P_default_mbx, P_code); 544 P_dname, P_ename = ""; 545 P_default_mbx = ""b; 546 P_code = 0; 547 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 548 549 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 550 P_code = error_table_$unimplemented_version; 551 return; 552 end; 553 554 P_dname = msg_facility_mailbox.dname; 555 P_ename = msg_facility_mailbox.ename; 556 P_default_mbx = msg_facility_mailbox.default_mbx; 557 return; /* get_mbx_path */ 558 559 /* This entry returns the prefix information for the specified mailbox. */ 560 get_prefix: entry (P_msgf_mbx_ptr, P_prefix, P_short_prefix, P_code); 561 P_prefix = ""; 562 P_short_prefix = ""b; 563 P_code = 0; 564 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 565 566 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 567 P_code = error_table_$unimplemented_version; 568 return; 569 end; 570 571 P_prefix = msg_facility_mailbox.prefix; 572 P_short_prefix = msg_facility_mailbox.short_prefix; 573 return; /* get_prefix */ 574 575 /* This entry sets the prefix information for the specified mailbox. */ 576 set_prefix: entry (P_msgf_mbx_ptr, P_prefix, P_short_prefix, P_code); 577 P_code = 0; 578 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 579 580 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 581 P_code = error_table_$unimplemented_version; 582 return; 583 end; 584 585 msg_facility_mailbox.prefix = P_prefix; 586 msg_facility_mailbox.short_prefix = P_short_prefix; 587 return; /* set_prefix */ 588 589 /* This entry returns the short format switch for the specified mailbox. */ 590 get_message_format: entry (P_msgf_mbx_ptr, P_short_format, P_code); 591 P_short_format = ""b; 592 P_code = 0; 593 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 594 595 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 596 P_code = error_table_$unimplemented_version; 597 return; 598 end; 599 600 P_short_format = msg_facility_mailbox.short_format; 601 return; /* get_message_format */ 602 603 /* This entry sets the short format switch for the specified mailbox. */ 604 set_message_format: entry (P_msgf_mbx_ptr, P_short_format, P_code); 605 P_code = 0; 606 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 607 608 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 609 P_code = error_table_$unimplemented_version; 610 return; 611 end; 612 613 msg_facility_mailbox.short_format = P_short_format; 614 return; /* set_message_format */ 615 616 /* This entry returns the alarm handler for the specified mailbox. */ 617 get_alarm_handler: entry (P_msgf_mbx_ptr, P_handler, P_info_ptr, P_time, P_code); 618 P_info_ptr = null (); 619 P_time = 0; 620 P_code = 0; 621 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 622 623 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 624 P_code = error_table_$unimplemented_version; 625 return; 626 end; 627 628 P_handler = msg_facility_mailbox.alarm_handler; 629 P_info_ptr = msg_facility_mailbox.alarm_info_ptr; 630 P_time = msg_facility_mailbox.alarm_time; 631 return; /* get_alarm_handler */ 632 633 /* This entry sets the alarm handler for the specified mailbox. */ 634 set_alarm_handler: entry (P_msgf_mbx_ptr, P_handler, P_info_ptr, P_time, P_code); 635 P_code = 0; 636 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 637 638 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 639 P_code = error_table_$unimplemented_version; 640 return; 641 end; 642 643 if msg_facility_mailbox.event_channel = 0 then do; 644 P_code = error_table_$messages_off; 645 return; 646 end; 647 648 msg_facility_mailbox.alarm_handler = P_handler; 649 msg_facility_mailbox.alarm_info_ptr = P_info_ptr; 650 msg_facility_mailbox.alarm_time = P_time; 651 652 /* if alarm time is nonzero, turn on hold messages mode */ 653 if msg_facility_mailbox.alarm_time ^= 0 then msg_facility_mailbox.hold_messages = TRUE; 654 655 /* turn off any preexisting alarm */ 656 if msg_facility_mailbox.alarm_event_channel ^= 0 then 657 call timer_manager_$reset_alarm_wakeup (msg_facility_mailbox.alarm_event_channel); 658 659 if msg_facility_mailbox.alarm_event_channel = 0 then do; 660 call ipc_$create_ev_chn (msg_facility_mailbox.alarm_event_channel, code); 661 662 if code ^= 0 then do; 663 P_code = code; 664 return; 665 end; 666 667 call ipc_$decl_ev_call_chn (msg_facility_mailbox.alarm_event_channel, message_facility_$alarm_processor, 668 msg_facility_mailbox_ptr, (1), code); 669 670 if code ^= 0 then do; 671 P_code = code; 672 return; 673 end; 674 end; 675 676 if P_time ^= 0 then call timer_manager_$alarm_wakeup (msg_facility_mailbox.alarm_time, RELATIVE_SECONDS, 677 msg_facility_mailbox.alarm_event_channel); 678 return; /* set_alarm_handler */ 679 680 /* This entry returns the wakeup handler for the specified mailbox. */ 681 get_wakeup_handler: entry (P_msgf_mbx_ptr, P_handler, P_info_ptr, P_code); 682 P_info_ptr = null (); 683 P_code = 0; 684 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 685 686 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 687 P_code = error_table_$unimplemented_version; 688 return; 689 end; 690 691 P_handler = msg_facility_mailbox.wakeup_handler; 692 P_info_ptr = msg_facility_mailbox.wakeup_info_ptr; 693 return; /* get_wakeup_handler */ 694 695 /* This entry sets the wakeup handler for the specified mailbox. */ 696 set_wakeup_handler: entry (P_msgf_mbx_ptr, P_handler, P_info_ptr, P_code); 697 P_code = 0; 698 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 699 700 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 701 P_code = error_table_$unimplemented_version; 702 return; 703 end; 704 705 if msg_facility_mailbox.event_channel = 0 then do; 706 P_code = error_table_$messages_off; 707 return; 708 end; 709 710 msg_facility_mailbox.wakeup_handler = P_handler; 711 msg_facility_mailbox.wakeup_info_ptr = P_info_ptr; 712 return; /* set_wakeup_handler */ 713 714 /* This entry returns last message information for the specified mailbox. */ 715 get_last_message_info: entry (P_msgf_mbx_ptr, P_info_ptr, P_code); 716 P_code = 0; 717 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 718 719 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 720 P_code = error_table_$unimplemented_version; 721 return; 722 end; 723 724 last_message_info_ptr = P_info_ptr; 725 726 if last_message_info.version ^= LAST_MESSAGE_INFO_VERSION_1 then do; 727 P_code = error_table_$unimplemented_version; 728 return; 729 end; 730 731 last_message_info.last_message_ptr = msg_facility_mailbox.last_message_ptr; 732 last_message_info.last_message_id = msg_facility_mailbox.last_id; 733 last_message_info.last_message_number = msg_facility_mailbox.last_message_number; 734 return; /* get_last_message_info */ 735 736 /* This entry returns a pointer to the message array for the specified mailbox. */ 737 get_msg_array_ptr: entry (P_msgf_mbx_ptr, P_area_ptr, P_msg_array_ptr, P_n_messages, P_code); 738 P_msg_array_ptr = null (); 739 P_n_messages = 0; 740 P_code = 0; 741 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 742 user_area_ptr = P_area_ptr; 743 744 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 745 P_code = error_table_$unimplemented_version; 746 return; 747 end; 748 749 if user_area_ptr = null () then user_area_ptr = get_system_free_area_ (); 750 751 /* Determine which mailbox_ entry points to use. */ 752 call mailbox_$get_mode_index (msg_facility_mailbox.index, access_mode, code); 753 754 if code ^= 0 then do; 755 P_code = code; 756 return; 757 end; 758 759 own = ^substr (access_mode, 3, 1); 760 761 /* Check to see if any new messages have arrived that we missed. */ 762 CHECK_LAST_MESSAGE: 763 if ^own then call mailbox_$incremental_read_index (msg_facility_mailbox.index, user_area_ptr, READ_FORWARD, 764 msg_facility_mailbox.last_id, addr (local_mra), code); 765 else call mailbox_$own_incremental_read_index (msg_facility_mailbox.index, user_area_ptr, READ_FORWARD, 766 msg_facility_mailbox.last_id, addr (local_mra), code); 767 if code = error_table_$seg_unknown then do; 768 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 769 msg_facility_mailbox.index, code); 770 if code ^= 0 then do; 771 P_code = code; 772 return; 773 end; 774 go to CHECK_LAST_MESSAGE; 775 end; 776 777 if code ^= error_table_$no_message then 778 msg_facility_mailbox.msg_array_updated = FALSE; 779 780 /* If the message array has already been created in the past and we are 781* accepting messages, the message array is automatically kept up-to-date 782* and there is no need to waste computrons going through the entire 783* mailbox. (The above code takes care of the cases where we're losing 784* wakeups, due to another user accepting messages out from under us or 785* whatever.) */ 786 787 if msg_facility_mailbox.wakeup_state = "10"b 788 & msg_facility_mailbox.messages_ptr ^= null () 789 & msg_facility_mailbox.msg_array_updated then do; 790 if ^msg_facility_mailbox.msg_array_compacted then 791 call compact_message_array; 792 end; 793 else do; 794 call create_message_array; 795 if code ^= 0 then P_code = code; 796 end; 797 798 n_messages = msg_facility_mailbox.n_messages; 799 allocate msg_array in (user_area); 800 array_length = MSG_ARRAY_ELEMENT_LENGTH * n_messages; 801 destination_string_ptr = addr (msg_array (1)); 802 source_string_ptr = addr (internal_msg_array (1)); 803 destination_string = source_string; 804 P_n_messages = n_messages; 805 P_msg_array_ptr = msg_array_ptr; 806 return; /* get_msg_array_ptr */ 807 808 /* This entry returns the specified message from the specified mailbox. */ 809 read_message: entry (P_msgf_mbx_ptr, P_message_id, P_area_ptr, P_info_ptr, P_code); 810 P_code = 0; 811 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 812 message_id = P_message_id; 813 message_info_ptr = P_info_ptr; 814 user_area_ptr = P_area_ptr; 815 816 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 817 P_code = error_table_$unimplemented_version; 818 return; 819 end; 820 821 822 if message_info.version ^= MESSAGE_INFO_VERSION_1 then do; 823 P_code = error_table_$unimplemented_version; 824 return; 825 end; 826 827 if user_area_ptr = null () then user_area_ptr = get_system_free_area_ (); 828 829 /* Determine which mailbox_ entry points to use. */ 830 call mailbox_$get_mode_index (msg_facility_mailbox.index, access_mode, code); 831 832 if code ^= 0 then do; 833 P_code = code; 834 return; 835 end; 836 837 own = ^substr (access_mode, 3, 1); 838 839 READ_MESSAGE: 840 if ^own then call mailbox_$incremental_read_index (msg_facility_mailbox.index, user_area_ptr, READ_CURRENT, 841 message_id, addr (local_mra), code); 842 else call mailbox_$own_incremental_read_index (msg_facility_mailbox.index, user_area_ptr, READ_CURRENT, 843 message_id, addr (local_mra), code); 844 if code = error_table_$seg_unknown then do; 845 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 846 msg_facility_mailbox.index, code); 847 if code ^= 0 then do; 848 P_code = code; 849 return; 850 end; 851 go to READ_MESSAGE; 852 end; 853 854 /* If the message isn't found, our message array could be out of synch 855* with the mailbox, so we need to call create_message_array in the next 856* call to message_facility_$get_msg_array_ptr. */ 857 if code = error_table_$no_message then 858 msg_facility_mailbox.msg_array_updated = FALSE; 859 860 if code ^= 0 then do; 861 P_code = code; 862 return; 863 end; 864 865 message_info.sender = local_mra.sender_id; 866 message_info.message_ptr = local_mra.ms_ptr; 867 message_info.authorization = local_mra.sender_authorization; 868 869 return; /* read_message */ 870 871 /* This entry sets the seen switch for the specified message in the specified mailbox. */ 872 set_seen_switch: entry (P_msgf_mbx_ptr, P_message_id, P_flags, P_code); 873 P_code = 0; 874 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 875 message_id = P_message_id; 876 seen_switch_flags = P_flags; 877 878 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 879 P_code = error_table_$unimplemented_version; 880 return; 881 end; 882 883 call get_message_index (message_id, message_index, code); 884 885 if code ^= 0 then do; 886 P_code = code; 887 return; 888 end; 889 890 /* Determine which mailbox_ entry points to use. */ 891 call mailbox_$get_mode_index (msg_facility_mailbox.index, access_mode, code); 892 893 if code ^= 0 then do; 894 P_code = code; 895 return; 896 end; 897 898 own = ^substr (access_mode, 3, 1); 899 900 SET_SEEN_SWITCH: 901 if ^own then call mailbox_$incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_CURRENT, 902 message_id, addr (local_mra), code); 903 else call mailbox_$own_incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_CURRENT, 904 message_id, addr (local_mra), code); 905 if code = error_table_$seg_unknown then do; 906 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 907 msg_facility_mailbox.index, code); 908 if code ^= 0 then do; 909 P_code = code; 910 return; 911 end; 912 go to SET_SEEN_SWITCH; 913 end; 914 915 if code ^= 0 then do; 916 P_code = code; 917 return; 918 end; 919 920 mail_format_ptr = local_mra.ms_ptr; 921 922 d_permission = substr (access_mode, 2, 1); 923 924 if mail_format.acknowledge & d_permission then call send_acknowledgement; 925 if substr (seen_switch_flags, 1, 1) then do; /* use defaults */ 926 hold_this_message = msg_facility_mailbox.hold_messages; 927 hold_this_notification = msg_facility_mailbox.hold_notifications; 928 end; 929 930 else do; /* use supplied args */ 931 hold_this_message = substr (seen_switch_flags, 2, 1); 932 hold_this_notification = substr (seen_switch_flags, 3, 1); 933 end; 934 935 /* set seen switch */ 936 internal_msg_array.printed (message_index) = TRUE; 937 if d_permission then do; 938 mail_format.seen = TRUE; 939 call mailbox_$update_message_index (msg_facility_mailbox.index, 36 * (fixed (rel (addr (mail_format.text))) 940 - fixed (rel (addr (mail_format.version)))), message_id, local_mra.ms_ptr, (0)); 941 end; 942 943 found = FALSE; 944 last_message_set = FALSE; 945 last_index = 0; 946 do idx = msg_facility_mailbox.n_elements to 1 by -1 while (^found); 947 if internal_msg_array.message_id (idx) ^= ""b then do; 948 found = TRUE; 949 last_index = idx; 950 end; 951 end; 952 if (message_index = last_index & message_id ^= msg_facility_mailbox.last_id) 953 & found then do; /* set last message info */ 954 last_message_set = TRUE; 955 956 message_info_ptr = msg_facility_mailbox.last_message_ptr; 957 if message_info_ptr ^= null () then do; 958 mail_format_ptr = message_info.message_ptr; 959 if mail_format_ptr ^= null () then free mail_format in (sys_area); 960 free message_info in (sys_area); 961 end; 962 963 mail_format_ptr = local_mra.ms_ptr; 964 allocate message_info in (sys_area); 965 message_info.version = MESSAGE_INFO_VERSION_1; 966 message_info.sender = local_mra.sender_id; 967 message_info.message_ptr = local_mra.ms_ptr; 968 message_info.authorization = local_mra.sender_authorization; 969 msg_facility_mailbox.last_message_ptr = message_info_ptr; 970 msg_facility_mailbox.last_id = message_id; 971 msg_facility_mailbox.last_message_number = internal_msg_array.message_number (message_index); 972 end; 973 974 if d_permission 975 & ((mail_format.notify & ^hold_this_notification) 976 | (^mail_format.notify & ^hold_this_message)) then do; /* delete message */ 977 call message_facility_$delete_message (msg_facility_mailbox_ptr, message_id, code); 978 979 if code ^= 0 then do; 980 P_code = code; 981 if ^last_message_set then 982 free mail_format in (sys_area); 983 return; 984 end; 985 end; /* delete message */ 986 987 if ^last_message_set then 988 free mail_format in (sys_area); 989 990 return; /* set_seen_switch */ 991 992 /* This entry sends a message to the specified mailbox. */ 993 send_message: entry (P_dname, P_ename, P_message, P_info_ptr, P_code); 994 access_class = FALSE; 995 go to SEND_COMMON; 996 997 send_message_access_class: entry (P_dname, P_ename, P_message, P_info_ptr, P_access_class, P_code); 998 access_class = TRUE; 999 authorization = P_access_class; 1000 1001 SEND_COMMON: 1002 P_code = 0; 1003 dname = P_dname; 1004 ename = P_ename; 1005 1006 local_smi_ptr = P_info_ptr; 1007 1008 on cleanup begin; 1009 if mbx_index ^= 0 then call mailbox_$close (mbx_index, (0)); 1010 end; 1011 1012 call mailbox_$open (dname, ename, mbx_index, code); 1013 1014 if code ^= 0 then do; 1015 P_code = code; 1016 return; 1017 end; 1018 1019 if P_message = "" then text_length = 0; 1020 else text_length = length (rtrim (P_message)); 1021 1022 message_bit_count = size (mail_format) * 36; 1023 1024 begin; /* allocate message */ 1025 dcl mail_format_space bit (message_bit_count) aligned; 1026 dcl 1 local_mf aligned like mail_format based (local_mf_ptr); 1027 dcl local_mf_ptr ptr; 1028 1029 local_mf_ptr = addr (mail_format_space); 1030 1031 local_mf.text_len = text_length; 1032 local_mf.version = MAIL_FORMAT_VERSION_4; 1033 local_mf.sent_from = local_smi.sent_from; 1034 string (local_mf.switches) = ""b; 1035 local_mf.wakeup = local_smi.wakeup; 1036 local_mf.notify = local_smi.notify; 1037 local_mf.acknowledge = local_smi.acknowledge; 1038 local_mf.text = rtrim (P_message); 1039 local_mf.lines = 0; 1040 1041 call get_person_and_project; 1042 1043 if local_mf.sent_from = "" then local_mf.sent_from = person; 1044 else if local_mf.sent_from = person then local_mf.sent_from = full_name; 1045 1046 idx = 1; 1047 count = 1; 1048 1049 do while (idx ^= 0 & text_length ^= 0); 1050 idx = index (substr (P_message, count, text_length), NL); 1051 count = count + idx; 1052 text_length = text_length - idx; 1053 local_mf.lines = local_mf.lines + 1; 1054 end; 1055 1056 on record_quota_overflow begin; 1057 P_code = error_table_$rqover; 1058 go to RETURN_FROM_SM; 1059 end; 1060 1061 allow_switch = local_mf.wakeup || local_mf.urgent || local_smi.always_add || local_smi.never_add; 1062 retried = FALSE; 1063 1064 RETRY: if ^access_class then call mailbox_$wakeup_add_index (mbx_index, addr (local_mf), message_bit_count, 1065 allow_switch, message_id, code); 1066 else call mailbox_$wakeup_aim_add_index (mbx_index, addr (local_mf), message_bit_count, allow_switch, 1067 authorization, message_id, code); 1068 if code = error_table_$bad_segment & ^retried then do; 1069 retried = TRUE; 1070 go to RETRY; 1071 end; 1072 1073 /* error_table_$no_info means the message was delivered but the wakeup may 1074* not have been due to AIM. This statement will not be necessary if the 1075* primitives are changed to return a different error code in this case 1076* (e_t_$no_info from mailbox_$open IS an error, the message is not sent). */ 1077 else if code = error_table_$no_info then code = 0; 1078 1079 P_code = code; 1080 1081 end; 1082 RETURN_FROM_SM: 1083 call mailbox_$close (mbx_index, (0)); 1084 return; /* send_message */ 1085 1086 /* This entry deletes a message from the specified mailbox. */ 1087 delete_message: entry (P_msgf_mbx_ptr, P_message_id, P_code); 1088 P_code = 0; 1089 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 1090 message_id = P_message_id; 1091 1092 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 1093 P_code = error_table_$unimplemented_version; 1094 return; 1095 end; 1096 1097 call get_message_index (message_id, message_index, code); 1098 1099 if code ^= 0 then do; 1100 P_code = code; 1101 return; 1102 end; 1103 1104 DELETE_MESSAGE: 1105 call mailbox_$delete_index (msg_facility_mailbox.index, message_id, code); 1106 1107 if code = error_table_$seg_unknown then do; 1108 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 1109 msg_facility_mailbox.index, code); 1110 if code ^= 0 then do; 1111 P_code = code; 1112 return; 1113 end; 1114 go to DELETE_MESSAGE; 1115 end; 1116 1117 else if code ^= 0 then do; 1118 P_code = code; 1119 return; 1120 end; 1121 1122 /* mark msg as deleted in message array */ 1123 internal_msg_array.message_id (message_index) = ""b; 1124 internal_msg_array.message_number (message_index) = 0; 1125 1126 msg_facility_mailbox.n_messages = msg_facility_mailbox.n_messages - 1; 1127 msg_facility_mailbox.msg_array_compacted = FALSE; 1128 return; /* delete_message */ 1129 1130 /* This entry prints a message. */ 1131 print_message: entry (P_msgf_mbx_ptr, P_iocb_ptr, P_message_id, P_info_ptr, P_code); 1132 P_code = 0; 1133 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 1134 iocb_ptr = P_iocb_ptr; 1135 message_id = P_message_id; 1136 local_pf_ptr = P_info_ptr; 1137 1138 if msg_facility_mailbox.version ^= MSG_FACILITY_MAILBOX_VERSION_1 then do; 1139 P_code = error_table_$unimplemented_version; 1140 return; 1141 end; 1142 1143 if ^local_pf.print_last_message then do; 1144 call get_message_index (message_id, message_index, code); 1145 1146 if code ^= 0 then do; 1147 P_code = code; 1148 return; 1149 end; 1150 1151 mail_format_ptr = null (); 1152 local_mi.version = MESSAGE_INFO_VERSION_1; 1153 1154 on cleanup begin; 1155 if mail_format_ptr ^= null () then free mail_format in (sys_area); 1156 end; 1157 1158 call message_facility_$read_message (msg_facility_mailbox_ptr, message_id, area_ptr, addr (local_mi), code); 1159 if code ^= 0 then return; 1160 end; 1161 else do; /* use last message info */ 1162 local_lmi.version = LAST_MESSAGE_INFO_VERSION_1; 1163 1164 call message_facility_$get_last_message_info (msg_facility_mailbox_ptr, addr (local_lmi), code); 1165 1166 if code ^= 0 then do; 1167 P_code = code; 1168 return; 1169 end; 1170 1171 if local_lmi.last_message_id = ""b then do; 1172 P_code = error_table_$no_message; 1173 return; 1174 end; 1175 1176 message_info_ptr = local_lmi.last_message_ptr; 1177 local_mi = message_info; 1178 end; 1179 1180 mail_format_ptr = local_mi.message_ptr; 1181 1182 if ^local_pf.print_last_message then do; 1183 if internal_msg_array.message_number (message_index) ^= 0 then call ioa_$rsnnl ("^d) ", tag, (0), 1184 internal_msg_array.message_number (message_index)); 1185 else tag = ""; 1186 end; 1187 else do; 1188 if local_lmi.last_message_number ^= 0 then 1189 call ioa_$rsnnl ("^d) ", tag, (0), local_lmi.last_message_number); 1190 else tag = ""; 1191 end; 1192 1193 /* print prefix, it may contain ioa_ controls */ 1194 if local_pf.print_prefix then call ioa_$ioa_switch_nnl (iocb_ptr, 1195 msg_facility_mailbox.prefix); 1196 1197 message_ident = ""; 1198 1199 if local_pf.print_ename then message_ident = rtrim (msg_facility_mailbox.ename) || " "; 1200 1201 if local_pf.print_sender then do; 1202 1203 /* create message sender string */ 1204 message_sender = substr (local_mi.sender, 1, length (rtrim (local_mi.sender)) - 2); 1205 if mail_format.sent_from ^= before (local_mi.sender, ".") & rtrim (mail_format.sent_from) ^= "" then 1206 message_sender = rtrim (message_sender) 1207 || " (" || rtrim (canon (rtrim (mail_format.sent_from), length (rtrim (mail_format.sent_from)))) || ")"; 1208 authorization = get_authorization_ (); 1209 if ^aim_check_$greater_or_equal (local_mi.authorization, authorization) then do; 1210 call convert_access_class_$to_string_short (local_mi.authorization, auth_string, code); 1211 if auth_string = "" then auth_string = "system_low"; 1212 message_sender = rtrim (message_sender) || " at " || auth_string; 1213 end; 1214 1215 if tag ^= "" then message_ident = message_ident || tag || rtrim (message_sender); 1216 else message_ident = message_ident || "From " || rtrim (message_sender); 1217 end; 1218 else message_ident = message_ident || tag || "="; 1219 1220 if ^local_pf.print_last_message then date_time = fixed (substr (message_id, 19, 54), 71); 1221 else date_time = fixed (substr (local_lmi.last_message_id, 19, 54), 71); 1222 1223 if local_pf.print_date_and_time then 1224 message_ident = message_ident || " " || date_time_$format ("date_time", date_time, "", ""); 1225 else if local_pf.print_time then 1226 message_ident = message_ident || " " || date_time_$format ("time", date_time, "", ""); 1227 1228 call ioa_$ioa_switch_nnl (iocb_ptr, "^a: ^[^/^]^a^/", message_ident, 1229 (length (message_ident) > 16 & (length (message_ident) + mail_format.text_len > 80)), 1230 rtrim (canon (rtrim (mail_format.text), length (rtrim (mail_format.text))))); 1231 1232 if ^local_pf.print_last_message then if mail_format_ptr ^= null () then free mail_format in (sys_area); 1233 return; /* print_message */ 1234 1235 /* This entry is the processor for alarms. */ 1236 alarm_processor: entry (P_info_ptr); 1237 event_call_info_ptr = P_info_ptr; 1238 msg_facility_mailbox_ptr = event_call_info.data_ptr; 1239 1240 call create_message_array; 1241 1242 if code = error_table_$no_message then code = 0; 1243 1244 if code ^= 0 then do; 1245 call sub_err_ (code, "alarm", ACTION_CANT_RESTART, null (), (0), 1246 "While updating message array for mailbox ^a.", pathname_ ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename))); 1247 return; 1248 end; 1249 1250 call msg_facility_mailbox.alarm_handler (msg_facility_mailbox_ptr, msg_facility_mailbox.alarm_info_ptr); 1251 1252 if msg_facility_mailbox.alarm_time > 0 then call timer_manager_$alarm_wakeup (msg_facility_mailbox.alarm_time, 1253 RELATIVE_SECONDS, msg_facility_mailbox.alarm_event_channel); 1254 1255 return; /* alarm_processor */ 1256 1257 /* This entry is the processor for wakeups. */ 1258 wakeup_processor: entry (P_info_ptr); 1259 event_call_info_ptr = P_info_ptr; 1260 msg_facility_mailbox_ptr = event_call_info.data_ptr; 1261 1262 /* Determine which mailbox_ entry points to use. */ 1263 WAKEUP_GET_MODE_INDEX: 1264 call mailbox_$get_mode_index (msg_facility_mailbox.index, access_mode, code); 1265 1266 if code = error_table_$seg_unknown then do; 1267 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 1268 msg_facility_mailbox.index, code); 1269 if code ^= 0 then return; 1270 go to WAKEUP_GET_MODE_INDEX; 1271 end; 1272 else if code ^= 0 then return; 1273 else own = ^substr (access_mode, 3, 1); 1274 1275 /* Check to see if any new messages have arrived that we missed. */ 1276 WAKEUP_CHECK_LAST_MESSAGE: 1277 if ^own then call mailbox_$incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_FORWARD, 1278 msg_facility_mailbox.last_id, addr (local_mra), code); 1279 else call mailbox_$own_incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_FORWARD, 1280 msg_facility_mailbox.last_id, addr (local_mra), code); 1281 if code = error_table_$seg_unknown then do; 1282 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 1283 msg_facility_mailbox.index, code); 1284 if code ^= 0 then return; 1285 go to WAKEUP_CHECK_LAST_MESSAGE; 1286 end; 1287 1288 if code ^= error_table_$no_message then 1289 msg_facility_mailbox.msg_array_updated = FALSE; 1290 1291 if ^msg_facility_mailbox.msg_array_updated then 1292 call create_message_array; 1293 else if ^msg_facility_mailbox.msg_array_compacted then 1294 call compact_message_array; 1295 1296 message_id = unspec (event_call_info.message); 1297 1298 /* Update last message info, do not mark message seen. */ 1299 PROCESSOR_READ: 1300 if ^own then call mailbox_$incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_CURRENT, message_id, 1301 addr (local_mra), code); 1302 else call mailbox_$incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_CURRENT, message_id, 1303 addr (local_mra), code); 1304 if code = error_table_$seg_unknown then do; 1305 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 1306 msg_facility_mailbox.index, code); 1307 if code ^= 0 then return; 1308 go to PROCESSOR_READ; 1309 end; 1310 1311 if code = error_table_$no_message then return; /* no big deal. */ 1312 1313 if code ^= 0 then do; 1314 call sub_err_ (code, "wakeup", ACTION_CANT_RESTART, null (), (0), 1315 "While reading message from mailbox ^a.", pathname_ ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename))); 1316 end; 1317 1318 mail_format_ptr = local_mra.ms_ptr; 1319 1320 if mail_format.notify & ^msg_facility_mailbox.notify_mail then do; 1321 call mailbox_$delete_index (msg_facility_mailbox.index, message_id, code); 1322 free mail_format in (sys_area); 1323 return; 1324 end; 1325 1326 call get_message_index (message_id, current_message_index, code); 1327 if code = 0 then new_message_number = internal_msg_array.message_number (current_message_index); 1328 else if code = error_table_$no_message then do; 1329 if (^mail_format.notify & msg_facility_mailbox.hold_messages) 1330 | (msg_facility_mailbox.hold_notifications & mail_format.notify) then do; 1331 new_message_number = msg_facility_mailbox.highest_message + 1; 1332 msg_facility_mailbox.highest_message = new_message_number; 1333 1334 end; 1335 1336 else new_message_number = 0; 1337 1338 /* Update message array, adding new message at the end (unless it's the 1339* fairly rare case in which this message was added before others that 1340* have already been received but the wakeup came later). */ 1341 msg_facility_mailbox.n_messages = msg_facility_mailbox.n_messages + 1; 1342 if msg_facility_mailbox.n_messages > msg_facility_mailbox.n_elements then do; 1343 n_messages = msg_facility_mailbox.n_elements + MSG_ARRAY_BLOCK_SIZE; 1344 allocate msg_array in (sys_area); 1345 if msg_facility_mailbox.messages_ptr ^= null () then do; 1346 array_length = MSG_ARRAY_ELEMENT_LENGTH * (msg_facility_mailbox.n_messages - 1); 1347 destination_string_ptr = addr (msg_array (1)); 1348 source_string_ptr = addr (internal_msg_array (1)); 1349 destination_string = source_string; 1350 free internal_msg_array in (sys_area); 1351 end; 1352 msg_facility_mailbox.n_elements = n_messages; 1353 msg_facility_mailbox.messages_ptr = msg_array_ptr; 1354 end; 1355 idx = msg_facility_mailbox.n_messages; 1356 1357 /* See if we need to insert this message at a different point in the 1358* message array. */ 1359 if idx ^= 1 then do; 1360 found = FALSE; 1361 do while (^found & idx > 1); 1362 if internal_msg_array.message_id (idx - 1) < message_id then found = TRUE; 1363 else idx = idx - 1; 1364 end; 1365 1366 if idx ^= msg_facility_mailbox.n_messages then do; 1367 array_length = MSG_ARRAY_ELEMENT_LENGTH * (msg_facility_mailbox.n_messages - idx); 1368 call mrl_ (addr (internal_msg_array (idx)), array_length, 1369 addr (internal_msg_array (idx + 1)), array_length); 1370 end; 1371 1372 end; 1373 1374 internal_msg_array.message_id (idx) = message_id; 1375 internal_msg_array.message_number (idx) = new_message_number; 1376 d_permission = substr (access_mode, 2, 1); 1377 if d_permission then internal_msg_array.printed (idx) = mail_format.seen; 1378 else internal_msg_array.printed (idx) = FALSE; 1379 internal_msg_array.mbz (idx) = ""b; 1380 current_message_index = idx; 1381 end; 1382 1383 /* update last message info */ 1384 message_info_ptr = msg_facility_mailbox.last_message_ptr; 1385 if message_info_ptr ^= null () then do; 1386 mail_format_ptr = message_info.message_ptr; 1387 if mail_format_ptr ^= null () then free mail_format in (sys_area); 1388 free message_info in (sys_area); 1389 end; 1390 1391 allocate message_info in (sys_area); 1392 message_info.version = MESSAGE_INFO_VERSION_1; 1393 message_info.sender = local_mra.sender_id; 1394 message_info.message_ptr = local_mra.ms_ptr; 1395 message_info.authorization = local_mra.sender_authorization; 1396 msg_facility_mailbox.last_id = message_id; 1397 msg_facility_mailbox.last_message_ptr = message_info_ptr; 1398 msg_facility_mailbox.last_message_number = internal_msg_array.message_number (current_message_index); 1399 1400 /* Call handler. */ 1401 call msg_facility_mailbox.wakeup_handler (msg_facility_mailbox_ptr, msg_facility_mailbox.wakeup_info_ptr); 1402 return; /* wakeup_processor */ 1403 1404 /* This entry is the default alarm handler. */ 1405 default_alarm_handler: entry (P_msgf_mbx_ptr, P_info_ptr); 1406 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 1407 if msg_facility_mailbox.n_messages = 0 then return; 1408 1409 use_call_string = FALSE; 1410 if P_info_ptr ^= null then if call_string ^= "" then use_call_string = TRUE; 1411 1412 if ^use_call_string then 1413 call ioa_$ioa_switch (iox_$user_io, "^[You have^;There are^] ^d message^[s^]^[ in ^a^].", msg_facility_mailbox.default_mbx, msg_facility_mailbox.n_messages, 1414 (msg_facility_mailbox.n_messages ^= 1), ^msg_facility_mailbox.default_mbx, 1415 pathname_ ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename))); 1416 do idx = 1 to msg_facility_mailbox.n_messages; 1417 call process_message (internal_msg_array.message_id (idx)); 1418 end; 1419 call iox_$control (iox_$user_io, "start", null (), code); 1420 return; /* default_alarm_handler */ 1421 1422 /* This entry is the default wakeup handler. */ 1423 default_wakeup_handler: entry (P_msgf_mbx_ptr, P_info_ptr); 1424 msg_facility_mailbox_ptr = P_msgf_mbx_ptr; 1425 1426 use_call_string = FALSE; 1427 if P_info_ptr ^= null () then if call_string ^= "" then use_call_string = TRUE; 1428 1429 call process_message (msg_facility_mailbox.last_id); 1430 call iox_$control (iox_$user_io, "start", null (), code); 1431 return; /* default_wakeup_handler */ 1432 1433 /* This procedure returns a message array index given a message ID. */ 1434 get_message_index: procedure (P_message_id, P_message_index, P_code); 1435 dcl P_message_id bit (72) aligned parm; 1436 dcl P_message_index fixed bin parm; 1437 dcl P_code fixed bin (35) parm; 1438 dcl idx fixed bin; 1439 dcl (max_idx, high_idx, low_idx, high_temp, low_temp) fixed bin; 1440 dcl message_id bit (54) aligned; 1441 dcl done_searching bit (1) aligned; 1442 1443 P_message_index = 0; 1444 1445 if msg_facility_mailbox.n_messages = 0 then do; 1446 P_code = error_table_$no_message; 1447 return; 1448 end; 1449 1450 P_code = 0; 1451 message_id = substr (P_message_id, 19, 54); /* date/time portion */ 1452 1453 low_idx = 1; 1454 if ^msg_facility_mailbox.msg_array_compacted then max_idx = msg_facility_mailbox.n_elements; 1455 else max_idx = msg_facility_mailbox.n_messages; /* faster */ 1456 high_idx = max_idx; 1457 idx = divide (high_idx + low_idx, 2, 17, 0); 1458 done_searching = FALSE; 1459 1460 do while (^done_searching); 1461 if internal_msg_array.message_id (idx) = ""b then do; /* deleted */ 1462 high_temp = min (idx + 1, max_idx); 1463 low_temp = max (idx - 1, 1); 1464 do while (high_temp < max_idx & internal_msg_array.message_id (high_temp) = ""b); 1465 high_temp = high_temp + 1; 1466 end; 1467 do while (low_temp > 1 & internal_msg_array.message_id (low_temp) = ""b); 1468 low_temp = low_temp - 1; 1469 end; 1470 if substr (internal_msg_array.message_id (high_temp), 19, 54) > message_id 1471 | internal_msg_array.message_id (high_temp) = ""b then high_idx = low_temp; 1472 else low_idx = high_temp; 1473 1474 if idx > high_idx then idx = high_idx; 1475 else if idx < low_idx then idx = low_idx; 1476 end; 1477 1478 else if substr (internal_msg_array.message_id (idx), 19, 54) < message_id then do; 1479 if idx >= max_idx then done_searching = TRUE; 1480 else if substr (internal_msg_array.message_id (idx + 1), 19, 54) > message_id then done_searching = TRUE; 1481 else do; 1482 low_idx = idx; 1483 idx = idx + max (divide (high_idx - idx, 2, 17, 0), 1); 1484 end; 1485 end; 1486 1487 else if idx = 1 then done_searching = TRUE; 1488 else if substr (internal_msg_array.message_id (idx - 1), 19, 54) < message_id then done_searching = TRUE; 1489 else do; 1490 high_idx = idx; 1491 idx = idx - max (divide (idx - low_idx, 2, 17, 0), 1); 1492 end; 1493 end; 1494 1495 if message_id ^= substr (internal_msg_array.message_id (idx), 19, 54) then P_code = error_table_$no_message; 1496 else P_message_index = idx; 1497 return; 1498 end get_message_index; 1499 1500 /* This procedure creates or updates the message array. */ 1501 create_message_array: procedure; 1502 dcl msg_existence_array (msg_facility_mailbox.n_messages) bit (1) aligned; 1503 dcl old_msg_count fixed bin; 1504 dcl msg_count fixed bin; 1505 dcl n_deleted fixed bin; 1506 1507 /* initialize msg existence array */ 1508 msg_existence_array (*) = FALSE; 1509 old_msg_count = msg_facility_mailbox.n_messages; 1510 msg_count = 0; 1511 1512 /* compact message array */ 1513 if ^msg_facility_mailbox.msg_array_compacted then 1514 call compact_message_array; 1515 1516 /* add new messages to array */ 1517 mail_format_ptr = null (); 1518 1519 on cleanup begin; 1520 if mail_format_ptr ^= null () then free mail_format in (sys_area); 1521 end; 1522 1523 /* Determine which mailbox_ entry points to use. */ 1524 call mailbox_$get_mode_index (msg_facility_mailbox.index, access_mode, code); 1525 1526 if code ^= 0 then return; 1527 own = ^substr (access_mode, 3, 1); 1528 1529 MSG_ARRAY_NEW_READ: 1530 if ^own then call mailbox_$read_index (msg_facility_mailbox.index, area_ptr, READ_FIRST, addr (local_mra), code); 1531 else call mailbox_$own_read_index (msg_facility_mailbox.index, area_ptr, READ_FIRST, addr (local_mra), code); 1532 1533 if code = error_table_$seg_unknown then do; 1534 call mailbox_$open ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename), 1535 msg_facility_mailbox.index, code); 1536 if code ^= 0 then return; 1537 go to MSG_ARRAY_NEW_READ; 1538 end; 1539 1540 do while (code = 0); 1541 mail_format_ptr = local_mra.ms_ptr; 1542 message_id = local_mra.ms_id; 1543 found = FALSE; 1544 do idx = 1 to msg_facility_mailbox.n_messages while (^found); 1545 if internal_msg_array.message_id (idx) = message_id then do; /* found message */ 1546 found = TRUE; 1547 msg_existence_array (idx) = TRUE; 1548 msg_count = msg_count + 1; 1549 if internal_msg_array.message_number (idx) = 0 then 1550 if (msg_facility_mailbox.hold_messages & ^mail_format.notify) 1551 | (msg_facility_mailbox.hold_notifications & mail_format.notify) then 1552 do; /* already in mbx, now in hold mode */ 1553 msg_facility_mailbox.highest_message = msg_facility_mailbox.highest_message + 1; 1554 internal_msg_array.message_number (idx) = msg_facility_mailbox.highest_message; 1555 end; /* assign number to old message */ 1556 else ; 1557 else /* message_number is nonzero, do we want to make it zero? */ 1558 if (^msg_facility_mailbox.hold_messages & ^mail_format.notify) 1559 | (^msg_facility_mailbox.hold_notifications & mail_format.notify) then 1560 internal_msg_array.message_number (idx) = 0; /* already in mailbox, now in non-hold mode */ 1561 end; /* found message */ 1562 end; 1563 if ^found & mail_format.wakeup then do; 1564 /* add this message */ 1565 msg_facility_mailbox.n_messages = msg_facility_mailbox.n_messages + 1; 1566 if msg_facility_mailbox.n_messages > msg_facility_mailbox.n_elements then do; 1567 n_messages = msg_facility_mailbox.n_elements + MSG_ARRAY_BLOCK_SIZE; 1568 allocate msg_array in (sys_area); 1569 if msg_facility_mailbox.messages_ptr ^= null () then do; 1570 array_length = MSG_ARRAY_ELEMENT_LENGTH * (msg_facility_mailbox.n_messages - 1); 1571 destination_string_ptr = addr (msg_array (1)); 1572 source_string_ptr = addr (internal_msg_array (1)); 1573 destination_string = source_string; 1574 free internal_msg_array in (sys_area); 1575 end; 1576 msg_facility_mailbox.n_elements = n_messages; 1577 msg_facility_mailbox.messages_ptr = msg_array_ptr; 1578 end; 1579 1580 jdx = msg_facility_mailbox.n_messages; 1581 1582 /* See if we need to insert this message at a different point in the 1583* message array. */ 1584 if jdx ^= 1 then do; 1585 found = FALSE; 1586 do while (^found & jdx > 1); 1587 if internal_msg_array.message_id (jdx - 1) < message_id then found = TRUE; 1588 else jdx = jdx - 1; 1589 end; 1590 1591 if jdx ^= msg_facility_mailbox.n_messages then do; 1592 array_length = MSG_ARRAY_ELEMENT_LENGTH * (msg_facility_mailbox.n_messages - jdx); 1593 call mrl_ (addr (internal_msg_array (jdx)), array_length, 1594 addr (internal_msg_array (jdx + 1)), array_length); 1595 end; 1596 1597 end; 1598 1599 internal_msg_array.message_id (jdx) = message_id; 1600 d_permission = substr (access_mode, 2, 1); 1601 if d_permission then internal_msg_array.printed (jdx) = mail_format.seen; 1602 else internal_msg_array.printed (jdx) = FALSE; 1603 internal_msg_array.mbz (jdx) = ""b; 1604 1605 if (msg_facility_mailbox.hold_messages & ^mail_format.notify) 1606 | (msg_facility_mailbox.hold_notifications & mail_format.notify) then do; 1607 internal_msg_array.message_number (jdx) = 1608 msg_facility_mailbox.highest_message + 1; 1609 msg_facility_mailbox.highest_message = msg_facility_mailbox.highest_message + 1; 1610 end; 1611 else internal_msg_array.message_number (jdx) = 0; 1612 end; /* new one */ 1613 if mail_format_ptr ^= null () then do; 1614 free mail_format in (sys_area); 1615 mail_format_ptr = null (); 1616 end; 1617 1618 if ^own then call mailbox_$incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_FORWARD, 1619 message_id, addr (local_mra), code); 1620 else call mailbox_$own_incremental_read_index (msg_facility_mailbox.index, area_ptr, READ_FORWARD, message_id, 1621 addr (local_mra), code); 1622 end; 1623 1624 1625 if code = error_table_$no_message then code = 0; 1626 else if code ^= 0 then return; 1627 1628 /* Now delete messages which are no longer in the mailbox, if any. */ 1629 if msg_count < old_msg_count then do; 1630 n_deleted = 0; 1631 msg_facility_mailbox.msg_array_compacted = FALSE; 1632 do idx = 1 to old_msg_count while (n_deleted < old_msg_count - msg_count); 1633 if ^msg_existence_array (idx) then do; /* we didn't find this one */ 1634 n_deleted = n_deleted + 1; 1635 msg_facility_mailbox.n_messages = msg_facility_mailbox.n_messages - 1; 1636 internal_msg_array.message_id (idx) = ""b; 1637 internal_msg_array.message_number (idx) = 0; 1638 end; 1639 end; 1640 call compact_message_array; 1641 end; 1642 1643 /* If we don't own this mailbox (no "d") then assign numbers in sequence. 1644* This allows us to delete our messages by number in another's mailbox. */ 1645 if own | ^substr (access_mode, 2, 1) then do; 1646 msg_facility_mailbox.highest_message = 0; 1647 do idx = 1 to msg_facility_mailbox.n_messages; 1648 msg_facility_mailbox.highest_message = msg_facility_mailbox.highest_message + 1; 1649 internal_msg_array.message_number (idx) = msg_facility_mailbox.highest_message; 1650 end; 1651 end; 1652 1653 if code = error_table_$no_message then code = 0; 1654 1655 if msg_facility_mailbox.wakeup_state = "10"b then 1656 msg_facility_mailbox.msg_array_updated = TRUE; 1657 end create_message_array; 1658 1659 /* This procedure compacts the message array. */ 1660 compact_message_array: procedure; 1661 idx, last_index = 0; 1662 do while (last_index < msg_facility_mailbox.n_messages); 1663 idx = idx + 1; 1664 last_index = last_index + 1; 1665 do while (idx < msg_facility_mailbox.n_elements & internal_msg_array.message_id (idx) = ""b); 1666 idx = idx + 1; 1667 end; 1668 if idx ^= last_index & internal_msg_array.message_id (idx) ^= ""b then do; 1669 internal_msg_array (last_index) = internal_msg_array (idx); 1670 internal_msg_array.message_id (idx) = ""b; 1671 internal_msg_array.message_number (idx) = 0; 1672 end; 1673 end; 1674 if msg_facility_mailbox.messages_ptr ^= null () & last_index ^= 0 then 1675 if internal_msg_array.message_id (last_index) = ""b then last_index = last_index - 1; 1676 msg_facility_mailbox.n_messages = last_index; 1677 msg_facility_mailbox.msg_array_compacted = TRUE; 1678 end compact_message_array; 1679 1680 /* This procedure removes control characters (except backspace, tab, 1681* red ribbon shift, and black ribbon shift) and canonicalizes strings 1682* to prevent backspacing past the front of the string. */ 1683 canon: procedure (P_string, P_string_len) returns (char (*)); 1684 dcl P_string char (*) parm; 1685 dcl P_string_len fixed bin (21) parm; 1686 dcl output_string char (P_string_len); 1687 1688 P_string = translate (P_string, ALPHABET); 1689 if index (P_string, BS) ^= 0 then do; 1690 output_string = ""; 1691 call canonicalize_ (addr (P_string), length (P_string), addr (output_string), P_string_len, (0)); 1692 return (output_string); 1693 end; 1694 else return (P_string); 1695 end canon; 1696 1697 /* This procedure sends an acknowledgement message. */ 1698 send_acknowledgement: procedure; 1699 authorization = get_authorization_ (); 1700 if aim_check_$greater_or_equal (local_mra.sender_authorization, authorization) then do; 1701 call get_person_and_project; 1702 send_mail_info.version = send_mail_info_version_2; 1703 send_mail_info.sent_from = full_name; 1704 send_mail_info.wakeup = TRUE; 1705 send_mail_info.always_add = TRUE; 1706 send_mail_info.never_add = FALSE; 1707 send_mail_info.notify = TRUE; 1708 send_mail_info.acknowledge = FALSE; 1709 send_mail_info.mbz = ""b; 1710 person_id = before (substr (local_mra.sender_id, 1, length (rtrim (local_mra.sender_id)) - 2), "."); 1711 project_id = after (substr (local_mra.sender_id, 1, length (rtrim (local_mra.sender_id)) - 2), "."); 1712 dname = ">udd>" || rtrim (project_id) || ">" || person_id; 1713 ename = rtrim (person_id) || ".mbx"; 1714 date_time = fixed (substr (local_mra.ms_id, 19, 54), 71); 1715 call date_time_ (date_time, msg_date_time); 1716 call date_time_ (clock (), current_date_time); 1717 if msg_date_time = current_date_time then message = "Acknowledged."; 1718 else message = "Acknowledge message of " || msg_date_time; 1719 1720 code = 1; 1721 1722 if person_id = "anonymous" then do; 1723 login_name = local_mra.ms_ptr -> mail_format.sent_from; 1724 call message_facility_$send_message (">udd>" || rtrim (project_id) || ">" || login_name, 1725 rtrim (login_name) || ".mbx", message, addr (send_mail_info), code); 1726 if code ^= error_table_$noentry then code = 0; 1727 end; 1728 1729 if code ^= 0 then call message_facility_$send_message (dname, ename, message, addr (send_mail_info), (0)); 1730 end; 1731 1732 mail_format.acknowledge = FALSE; 1733 call mailbox_$update_message_index (msg_facility_mailbox.index, 36 * (fixed (rel (addr (mail_format.text))) 1734 - fixed (rel (addr (mail_format.version)))), message_id, local_mra.ms_ptr, (0)); 1735 end send_acknowledgement; 1736 1737 /* This procedure prints out a message or executes the supplied call string. */ 1738 process_message: procedure (P_message_id); 1739 dcl P_message_id bit (72) aligned parm; 1740 dcl message_id bit (72) aligned; 1741 dcl message_index fixed bin; 1742 1743 message_id = P_message_id; 1744 mail_format_ptr = null (); 1745 local_mi.version = MESSAGE_INFO_VERSION_1; 1746 1747 call get_message_index (message_id, message_index, code); 1748 1749 if code ^= 0 then return; 1750 1751 on cleanup begin; 1752 if mail_format_ptr ^= null () then free mail_format in (sys_area); 1753 end; 1754 1755 call message_facility_$read_message (msg_facility_mailbox_ptr, message_id, area_ptr, addr (local_mi), code); 1756 if code ^= 0 then return; 1757 mail_format_ptr = local_mi.message_ptr; 1758 date_time = fixed (substr (message_id, 19, 54), 71); 1759 call date_time_ (date_time, msg_date_time); 1760 1761 /* create message sender string */ 1762 if mail_format.sent_from = before (local_mi.sender, ".") | rtrim (mail_format.sent_from) = "" then 1763 message_sender = substr (local_mi.sender, 1, length (rtrim (local_mi.sender)) - 2); 1764 else message_sender = substr (local_mi.sender, 1, length (rtrim (local_mi.sender)) - 2) 1765 || " (" || rtrim (canon (rtrim (mail_format.sent_from), length (rtrim (mail_format.sent_from)))) || ")"; 1766 authorization = get_authorization_ (); 1767 if ^aim_check_$greater_or_equal (local_mi.authorization, authorization) then do; 1768 call convert_access_class_$to_string_short (local_mi.authorization, auth_string, code); 1769 if auth_string = "" then auth_string = "system_low"; 1770 message_sender = rtrim (message_sender) || " at " || auth_string; 1771 end; 1772 1773 if use_call_string then do; 1774 call ioa_$rsnnl ("^a ^d ^a ^a ^a^[ ^a^]", command_line, (0), call_string, internal_msg_array.message_number (message_index), 1775 requote_string_ (rtrim (message_sender)), 1776 requote_string_ (rtrim (date_time_$format ("date_time", date_time, "", ""))), 1777 requote_string_ (rtrim (canon (rtrim (mail_format.text, NLSPHT), length (rtrim (mail_format.text, NLSPHT))))), 1778 ^msg_facility_mailbox.default_mbx, 1779 requote_string_ (pathname_ ((msg_facility_mailbox.dname), (msg_facility_mailbox.ename)))); 1780 1781 /* If this message is supposed to be deleted, do so. */ 1782 if (mail_format.notify & ^msg_facility_mailbox.hold_notifications) | 1783 (^mail_format.notify & ^msg_facility_mailbox.hold_messages) then 1784 call message_facility_$set_seen_switch (msg_facility_mailbox_ptr, message_id, DELETE_UNHELD, (0)); 1785 call cu_$cp (addr (command_line), length (rtrim (command_line)), (0)); 1786 end; 1787 1788 else do; 1789 /* print message */ 1790 string (msg_print_flags) = ""b; 1791 if message_sender = last_sender then short = TRUE; 1792 else short = FALSE; 1793 1794 /* print prefix, it may contain ioa_ controls */ 1795 if ^short | msg_facility_mailbox.short_prefix then msg_print_flags.print_prefix = TRUE; 1796 1797 /* if not default mailbox, prefix with mailbox entry name */ 1798 if ^msg_facility_mailbox.default_mbx then msg_print_flags.print_ename = TRUE; 1799 1800 if ^msg_facility_mailbox.short_format | ^short then 1801 msg_print_flags.print_sender = TRUE; 1802 1803 if ^msg_facility_mailbox.short_format | substr (msg_date_time, 1, 8) ^= last_msg_time then 1804 msg_print_flags.print_date_and_time = TRUE; 1805 else if date_time - last_time > FIVE_MINUTES then msg_print_flags.print_time = TRUE; 1806 1807 last_sender = message_sender; 1808 last_time = date_time; 1809 last_msg_time = substr (msg_date_time, 1, 8); 1810 1811 call message_facility_$print_message (msg_facility_mailbox_ptr, iox_$user_io, message_id, addr (msg_print_flags), code); 1812 1813 1814 call message_facility_$set_seen_switch (msg_facility_mailbox_ptr, message_id, DELETE_UNHELD, code); 1815 end; 1816 if mail_format_ptr ^= null () then free mail_format in (sys_area); 1817 end process_message; 1818 1819 /* Get person ID, project ID, and full name. */ 1820 get_person_and_project: procedure; 1821 if person = "" then call user_info_$whoami (person, project, ""); 1822 1823 /* Since the full name is stored in the "sent_from" field of the mail_format 1824* structure, we don't get a value from the value segment for an anonymous 1825* user since it is important that the login name be there so that replies 1826* and acknowledgements get sent to the right place. When we change this 1827* to use mail_system_ more fully, we can do the right thing. */ 1828 1829 if full_name = "" & person ^= "anonymous" then do; 1830 call value_$get (null (), PERMANENT_VALUES, rtrim (person) || ".full_name._", full_name, code); 1831 if code ^= 0 then call value_$get (null (), PERMANENT_VALUES, "full_name._", full_name, code); 1832 if code ^= 0 then full_name = person; 1833 end; 1834 1835 else if person = "anonymous" then full_name = person; 1836 end get_person_and_project; 1837 1838 1 1 /* BEGIN INCLUDE FILE event_call_info.incl.pl1 */ 1 2 1 3 /* T. Casey, May 1978 */ 1 4 1 5 dcl event_call_info_ptr ptr; 1 6 1 7 dcl 1 event_call_info aligned based (event_call_info_ptr), /* argument structure passed to event call procedure */ 1 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 1 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 1 10 2 sender bit (36), /* process id of sender */ 1 11 2 origin, 1 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 1 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 1 14 2 data_ptr ptr; /* ptr given to dcl_event_call_channel */ 1 15 1 16 /* END INCLUDE FILE event_call_info.incl.pl1 */ 1839 1840 2 1 /* BEGIN INCLUDE FILE last_message_info.incl.pl1 */ 2 2 /* Written 05/15/84 by Jim Lippard */ 2 3 /* Modified 01/11/85 by Jim Lippard to remove last_message_index. */ 2 4 2 5 dcl 1 last_message_info aligned based (last_message_info_ptr), 2 6 2 version char (8), 2 7 2 last_message_ptr ptr, 2 8 2 last_message_id bit (72) aligned, 2 9 2 last_message_number fixed bin; 2 10 2 11 dcl last_message_info_ptr ptr; 2 12 2 13 dcl LAST_MESSAGE_INFO_VERSION_1 char (8) internal static options (constant) init ("lastmsg1"); 2 14 2 15 /* END INCLUDE FILE last_message_info.incl.pl1 */ 1841 1842 3 1 /* BEGIN Mailbox Message Include File (mail_format.incl.pl1) */ 3 2 3 3 3 4 /****^ HISTORY COMMENTS: 3 5* 1) change(86-01-09,Herbst), approve(86-03-25,MCR7367), 3 6* audit(86-04-28,Margolin), install(86-05-22,MR12.0-1059): 3 7* Added "seen" switch. 3 8* 2) change(86-06-02,Herbst), approve(86-06-02,MCR7367), audit(86-06-30,Wong), 3 9* install(86-06-30,MR12.0-1080): 3 10* Updated to version 4 for seen switch. 3 11* END HISTORY COMMENTS */ 3 12 3 13 /* Last modified by K. T. Pogran, 3/6/75 */ 3 14 /* Modified by D. M. Wells, August 10, 1977 for v4 message segments. */ 3 15 /* Modified: 3 June 1981 by G. Palter for mail system subroutine interface */ 3 16 3 17 declare mail_format_ptr pointer aligned; 3 18 3 19 declare MAIL_FORMAT_VERSION_4 initial (4) 3 20 fixed bin internal static options (constant); 3 21 3 22 declare text_length fixed bin (21); 3 23 3 24 declare 1 mail_format aligned based (mail_format_ptr), 3 25 2 header, 3 26 3 version fixed bin (17), 3 27 3 sent_from char (32) aligned, 3 28 3 lines fixed bin (17), 3 29 3 text_len fixed bin (21), 3 30 3 switches aligned, 3 31 4 wakeup bit (1) unaligned, 3 32 4 urgent bit (1) unaligned, 3 33 4 notify bit (1) unaligned, 3 34 4 acknowledge bit (1) unaligned, 3 35 4 obsolete bit (1) unaligned, 3 36 4 canonical bit (1) unaligned, 3 37 4 seen bit (1) unaligned, 3 38 4 others bit (65) unaligned, 3 39 2 text char(text_length refer (mail_format.header.text_len)) aligned; 3 40 3 41 /* END Mailbox Message Include File (mail_format.incl.pl1) */ 1843 1844 4 1 /* BEGIN INCLUDE FILE message_info.incl.pl1 */ 4 2 /* Written 05/15/84 by Jim Lippard */ 4 3 4 4 dcl 1 message_info aligned based (message_info_ptr), 4 5 2 version char (8), 4 6 2 sender char (32), 4 7 2 message_ptr ptr, 4 8 2 authorization bit (72); 4 9 4 10 dcl message_info_ptr ptr; 4 11 4 12 dcl MESSAGE_INFO_VERSION_1 char (8) internal static options (constant) init ("msginfo1"); 4 13 4 14 /* END INCLUDE FILE message_info.incl.pl1 */ 1845 1846 5 1 /* BEGIN INCLUDE FILE . . . mseg_return_args.incl.pl1 */ 5 2 5 3 5 4 /* structure returned when message is read from a message segment */ 5 5 5 6 5 7 dcl ms_arg_ptr ptr; 5 8 5 9 dcl 1 mseg_return_args based (ms_arg_ptr) aligned, 5 10 2 ms_ptr ptr, /* pointer to message */ 5 11 2 ms_len fixed bin (24), /* length of message in bits */ 5 12 2 sender_id char (32) unaligned, /* process-group ID of sender */ 5 13 2 level fixed bin, /* validation level of sender */ 5 14 2 ms_id bit (72), /* unique ID of message */ 5 15 2 sender_authorization bit (72), /* access authorization of message sender */ 5 16 2 access_class bit (72); /* message access class */ 5 17 5 18 5 19 /* END INCLUDE FILE . . . mseg_return_args.incl.pl1 */ 1847 1848 6 1 /* BEGIN INCLUDE FILE msg_array.incl.pl1 */ 6 2 /* Written 05/29/84 by Jim Lippard */ 6 3 6 4 dcl 1 msg_array (n_messages) aligned based (msg_array_ptr), 6 5 2 message_id bit (72), 6 6 2 message_number fixed bin, 6 7 2 flags, 6 8 3 printed bit (1) unal, 6 9 3 mbz bit (35) unal; 6 10 6 11 dcl msg_array_ptr ptr; 6 12 6 13 dcl n_messages fixed bin; 6 14 6 15 dcl DELETE_UNHELD bit (3) internal static options (constant) init ("100"b); 6 16 dcl DONT_DELETE_MESSAGES bit (3) internal static options (constant) init ("010"b); 6 17 dcl DONT_DELETE_NOTIFICATIONS bit (3) internal static options (constant) init ("001"b); 6 18 6 19 /* END INCLUDE FILE msg_array.incl.pl1 */ 1849 1850 7 1 /* BEGIN INCLUDE FILE msg_facility_mailbox.incl.pl1 */ 7 2 7 3 7 4 /****^ HISTORY COMMENTS: 7 5* 1) change(84-05-10,Lippard), approve(), audit(), install(): 7 6* Created by Jim Lippard. 7 7* 2) change(85-01-12,Lippard), approve(), audit(), install(): 7 8* Remove last_message_index. 7 9* 3) change(85-02-01,Lippard), approve(), audit(), install(): 7 10* Add msg_array_compacted. 7 11* 4) change(86-05-07,Lippard), approve(86-05-27,MCR7418), 7 12* audit(86-06-24,Hartogs), install(86-06-30,MR12.0-1080): 7 13* Add msg_array_updated. 7 14* END HISTORY COMMENTS */ 7 15 7 16 7 17 dcl 1 msg_facility_mailbox aligned based (msg_facility_mailbox_ptr), 7 18 2 version char (8), /* structure version */ 7 19 2 next_mbx_ptr ptr, /* ptr to next mailbox in chain */ 7 20 2 dname char (168), /* mailbox directory */ 7 21 2 ename char (32), /* mailbox entry name */ 7 22 2 uid bit (36), /* mailbox unique ID */ 7 23 2 default_mbx bit (1), /* user's default mailbox */ 7 24 2 event_channel fixed bin (71), /* event channel for wakeups */ 7 25 2 index fixed bin, /* index to mailbox for mailbox_ */ 7 26 2 wakeup_flags, 7 27 3 hold_messages bit (1) unal, /* messages are being held */ 7 28 3 hold_notifications bit (1) unal, /* notifications are being held */ 7 29 3 notify_mail bit (1) unal, /* notifications are being printed */ 7 30 3 wakeup_state bit (2) unal, /* message acceptance state */ 7 31 3 mbz bit (31) unal, 7 32 2 short_format bit (1), /* messages printed in short format */ 7 33 2 prefix char (32) var, /* prefix string */ 7 34 2 short_prefix bit (1), /* prefix printed for short form messages */ 7 35 2 mbz2 bit (36) unal, 7 36 2 alarm_time fixed bin (71), /* alarm wakeup time */ 7 37 2 alarm_event_channel fixed bin (71), /* event channel for alarm */ 7 38 2 last, 7 39 3 last_message_ptr ptr, /* ptr to mail_format structure for last message */ 7 40 3 last_id bit (72) aligned, /* message ID of last message */ 7 41 3 last_message_number fixed bin, /* number of last message */ 7 42 3 mbz3 bit (36) unal, 7 43 2 messages_ptr ptr, /* ptr to message array */ 7 44 2 n_elements fixed bin, /* number of elements in message array */ 7 45 2 n_messages fixed bin, /* number of messages */ 7 46 2 highest_message fixed bin, /* number of highest message */ 7 47 2 msg_array_flags unaligned, 7 48 3 msg_array_compacted bit (1), /* if msg_array has been compacted */ 7 49 3 msg_array_updated bit (1), /* if msg_array has been updated */ 7 50 2 mbz4 bit (36) unal, 7 51 2 wakeup_processor, 7 52 3 wakeup_handler variable entry (ptr, ptr), /* wakeup handler procedure */ 7 53 3 wakeup_info_ptr ptr, 7 54 2 alarm_processor, 7 55 3 alarm_handler variable entry (ptr, ptr), /* alarm handler procedure */ 7 56 3 alarm_info_ptr ptr; 7 57 7 58 dcl MSG_FACILITY_MAILBOX_VERSION_1 char (8) internal static 7 59 options (constant) init 7 60 ("msgfmbx1"); 7 61 7 62 dcl msg_facility_mailbox_ptr ptr; 7 63 7 64 /* END INCLUDE FILE msg_facility_mailbox.incl.pl1 */ 1851 1852 8 1 /* BEGIN INCLUDE FILE msg_print_flags.incl.pl1 */ 8 2 /* Written 10/17/84 by Jim Lippard */ 8 3 8 4 dcl 1 msg_print_flags unaligned, 8 5 2 print_prefix bit (1), 8 6 2 print_ename bit (1), 8 7 2 print_sender bit (1), 8 8 2 print_date_and_time bit (1), 8 9 2 print_time bit (1), 8 10 2 print_last_message bit (1), 8 11 2 mbz bit (30); 8 12 8 13 /* END INCLUDE FILE msg_print_flags.incl.pl1 */ 1853 1854 9 1 /* BEGIN send_mail_info include file */ 9 2 9 3 dcl send_mail_info_version_2 fixed bin init(2); 9 4 9 5 dcl 1 send_mail_info aligned, 9 6 2 version fixed bin, /* = 2 */ 9 7 2 sent_from char(32) aligned, 9 8 2 switches, 9 9 3 wakeup bit(1) unal, 9 10 3 mbz1 bit(1) unal, 9 11 3 always_add bit(1) unal, 9 12 3 never_add bit(1) unal, 9 13 3 notify bit(1) unal, 9 14 3 acknowledge bit(1) unal, 9 15 3 mbz bit(30) unal; 9 16 9 17 /* END send_mail_info include file */ 1855 1856 10 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 10 2 /* format: style3 */ 10 3 10 4 /* These constants are to be used for the flags argument of sub_err_ */ 10 5 /* They are just "string (condition_info_header.action_flags)" */ 10 6 10 7 declare ( 10 8 ACTION_CAN_RESTART init (""b), 10 9 ACTION_CANT_RESTART init ("1"b), 10 10 ACTION_DEFAULT_RESTART 10 11 init ("01"b), 10 12 ACTION_QUIET_RESTART 10 13 init ("001"b), 10 14 ACTION_SUPPORT_SIGNAL 10 15 init ("0001"b) 10 16 ) bit (36) aligned internal static options (constant); 10 17 10 18 /* End include file */ 1857 1858 end message_facility_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/04/88 0824.7 message_facility_.pl1 >spec>install>1045>message_facility_.pl1 1839 1 06/29/79 1728.0 event_call_info.incl.pl1 >ldd>include>event_call_info.incl.pl1 1841 2 01/22/85 2000.0 last_message_info.incl.pl1 >ldd>include>last_message_info.incl.pl1 1843 3 06/30/86 2023.8 mail_format.incl.pl1 >ldd>include>mail_format.incl.pl1 1845 4 11/08/84 0926.0 message_info.incl.pl1 >ldd>include>message_info.incl.pl1 1847 5 05/17/82 1411.5 mseg_return_args.incl.pl1 >ldd>include>mseg_return_args.incl.pl1 1849 6 11/08/84 0926.0 msg_array.incl.pl1 >ldd>include>msg_array.incl.pl1 1851 7 06/30/86 2023.8 msg_facility_mailbox.incl.pl1 >ldd>include>msg_facility_mailbox.incl.pl1 1853 8 11/08/84 0926.0 msg_print_flags.incl.pl1 >ldd>include>msg_print_flags.incl.pl1 1855 9 04/27/78 1504.4 send_mail_info.incl.pl1 >ldd>include>send_mail_info.incl.pl1 1857 10 04/16/82 0958.1 sub_err_flags.incl.pl1 >ldd>include>sub_err_flags.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. ACTION_CANT_RESTART 000042 constant bit(36) initial dcl 10-7 set ref 1245* 1314* ALPHABET 001642 automatic char(256) initial packed unaligned dcl 271 set ref 271* 1688 BS constant char(1) initial dcl 280 ref 1689 DELETE_UNHELD 000042 constant bit(3) initial packed unaligned dcl 6-15 set ref 1782* 1814* FALSE constant bit(1) initial dcl 270 ref 328 351 356 358 369 423 538 538 777 857 943 944 994 1062 1127 1288 1360 1378 1409 1426 1458 1508 1543 1585 1602 1631 1706 1708 1732 1792 FIVE_MINUTES 000010 constant fixed bin(71,0) initial dcl 273 ref 1805 LAST_MESSAGE_INFO_VERSION_1 000004 constant char(8) initial packed unaligned dcl 2-13 ref 726 1162 MAIL_FORMAT_VERSION_4 constant fixed bin(17,0) initial dcl 3-19 ref 1032 MESSAGE_INFO_VERSION_1 000002 constant char(8) initial packed unaligned dcl 4-12 ref 822 965 1152 1392 1745 MSG_ARRAY_BLOCK_SIZE constant fixed bin(17,0) initial dcl 274 ref 1343 1567 MSG_ARRAY_ELEMENT_LENGTH constant fixed bin(17,0) initial dcl 275 ref 800 1346 1367 1570 1592 MSG_FACILITY_MAILBOX_VERSION_1 000000 constant char(8) initial packed unaligned dcl 7-58 ref 342 405 470 483 549 566 580 595 608 623 638 686 700 719 744 816 878 1092 1138 NL constant char(1) initial dcl 276 ref 1050 NLSPHT 000007 constant char(3) initial dcl 278 ref 1774 1774 1774 1774 1774 1774 1774 1774 PERMANENT_VALUES 000006 constant bit(36) initial dcl 281 set ref 1830* 1831* P_access_class parameter bit(72) dcl 81 ref 997 999 P_area_ptr parameter pointer dcl 90 ref 737 742 809 814 P_code parameter fixed bin(35,0) dcl 94 in procedure "message_facility_" set ref 314 318* 323* 380* 391* 401 402* 406* 432* 465 467* 471* 479 480* 484* 490* 498* 506* 527* 534* 543 546* 550* 560 563* 567* 576 577* 581* 590 592* 596* 604 605* 609* 617 620* 624* 634 635* 639* 644* 663* 671* 681 683* 687* 696 697* 701* 706* 715 716* 720* 727* 737 740* 745* 755* 771* 795* 809 810* 817* 823* 833* 848* 861* 872 873* 879* 886* 894* 909* 916* 980* 993 997 1001* 1015* 1057* 1079* 1087 1088* 1093* 1100* 1111* 1118* 1131 1132* 1139* 1147* 1167* 1172* P_code parameter fixed bin(35,0) dcl 1437 in procedure "get_message_index" set ref 1434 1446* 1450* 1495* P_default_mbx parameter bit(1) dcl 82 set ref 543 545* 556* P_dname parameter char packed unaligned dcl 80 set ref 314 315 543 544* 554* 993 997 1003 P_ename parameter char packed unaligned dcl 80 set ref 314 316 543 544* 555* 993 997 1004 P_flags parameter bit packed unaligned dcl 83 set ref 465 466* 475* 479 482 872 876 P_handler parameter entry variable dcl 87 set ref 617 628* 634 648 681 691* 696 710 P_info_ptr parameter pointer dcl 88 set ref 617 618* 629* 634 649 681 682* 692* 696 711 715 724 809 813 993 997 1006 1131 1136 1236 1237 1258 1259 1405 1410 1410 1423 1427 1427 1774 P_iocb_ptr parameter pointer dcl 93 ref 1131 1134 P_message parameter char packed unaligned dcl 80 ref 993 997 1019 1020 1038 1050 P_message_id parameter bit(72) dcl 1435 in procedure "get_message_index" ref 1434 1451 P_message_id parameter bit(72) dcl 84 in procedure "message_facility_" ref 809 812 872 875 1087 1090 1131 1135 P_message_id parameter bit(72) dcl 1739 in procedure "process_message" ref 1738 1743 P_message_index parameter fixed bin(17,0) dcl 1436 set ref 1434 1443* 1496* P_msg_array_ptr parameter pointer dcl 91 set ref 737 738* 805* P_msgf_mbx_ptr parameter pointer dcl 79 set ref 288 289 304 305 314 317* 397* 401 403 415 437* 465 468 479 481 543 547 560 564 576 578 590 593 604 606 617 621 634 636 681 684 696 698 715 717 737 741 809 811 872 874 1087 1089 1131 1133 1405 1406 1423 1424 P_n_messages parameter fixed bin(17,0) dcl 92 set ref 737 739* 804* P_next_msgf_mbx_ptr parameter pointer dcl 79 set ref 288 290* 310* P_prefix parameter varying char(32) dcl 85 set ref 560 561* 571* 576 585 P_short_format parameter bit(1) dcl 86 set ref 590 591* 600* 604 613 P_short_prefix parameter bit(1) dcl 86 set ref 560 562* 572* 576 586 P_string parameter char packed unaligned dcl 1684 set ref 1683 1688* 1688 1689 1691 1691 1691 1691 1694 P_string_len parameter fixed bin(21,0) dcl 1685 set ref 1683 1686 1691* P_time parameter fixed bin(71,0) dcl 89 set ref 617 619* 630* 634 650 676 READ_CURRENT 000010 constant bit(2) initial dcl 282 set ref 839* 842* 900* 903* 1299* 1302* READ_FIRST 000010 constant bit(1) initial dcl 283 set ref 1529* 1531* READ_FORWARD 000006 constant bit(2) initial dcl 284 set ref 762* 765* 1276* 1279* 1618* 1620* RELATIVE_SECONDS 000043 constant bit(2) initial packed unaligned dcl 285 set ref 676* 1252* TRUE constant bit(1) initial dcl 269 ref 330 350 368 428 511 653 936 938 948 954 998 1069 1362 1410 1427 1479 1480 1487 1488 1546 1547 1587 1655 1677 1704 1705 1707 1791 1795 1798 1800 1803 1805 access_class 000100 automatic bit(1) dcl 96 set ref 994* 998* 1064 access_mode 000101 automatic bit(36) dcl 97 set ref 752* 759 830* 837 891* 898 922 1263* 1273 1376 1524* 1527 1600 1645 acknowledge 13(03) based bit(1) level 4 in structure "mail_format" packed packed unaligned dcl 3-24 in procedure "message_facility_" set ref 924 1732* acknowledge 13(03) based bit(1) level 4 in structure "local_mf" packed packed unaligned dcl 1026 in begin block on line 1024 set ref 1037* acknowledge 11(05) based bit(1) level 3 in structure "local_smi" packed packed unaligned dcl 170 in procedure "message_facility_" ref 1037 acknowledge 11(05) 001764 automatic bit(1) level 3 in structure "send_mail_info" packed packed unaligned dcl 9-5 in procedure "message_facility_" set ref 1708* addr builtin function dcl 194 ref 762 762 765 765 801 802 839 839 842 842 900 900 903 903 939 939 1029 1064 1064 1066 1066 1158 1158 1164 1164 1276 1276 1279 1279 1299 1299 1302 1302 1347 1348 1368 1368 1368 1368 1529 1529 1531 1531 1571 1572 1593 1593 1593 1593 1618 1618 1620 1620 1691 1691 1691 1691 1724 1724 1729 1729 1733 1733 1755 1755 1785 1785 1811 1811 after builtin function dcl 194 ref 1711 aim_check_$greater_or_equal 000104 constant entry external dcl 182 ref 1209 1700 1767 alarm_event_channel 112 based fixed bin(71,0) level 2 dcl 7-17 set ref 360* 443* 447 447* 656 656* 659 660* 667* 676* 1252* alarm_handler 140 based entry variable level 3 dcl 7-17 set ref 372* 628 648* 1250 alarm_info_ptr 144 based pointer level 3 dcl 7-17 set ref 373* 629 649* 1250* alarm_processor 140 based structure level 2 dcl 7-17 alarm_time 110 based fixed bin(71,0) level 2 dcl 7-17 set ref 359* 443 630 650* 653 676* 1252 1252* allow_switch 000102 automatic bit(36) dcl 98 set ref 516* 517* 517 519* 538 1061* 1064* 1066* always_add 11(02) based bit(1) level 3 in structure "local_smi" packed packed unaligned dcl 170 in procedure "message_facility_" ref 1061 always_add 11(02) 001764 automatic bit(1) level 3 in structure "send_mail_info" packed packed unaligned dcl 9-5 in procedure "message_facility_" set ref 1705* area_ptr 000102 internal static pointer initial dcl 154 set ref 336 336* 337 454 455 459 461 900* 903* 959 960 964 981 987 1155 1158* 1232 1276* 1279* 1299* 1302* 1322 1344 1350 1387 1388 1391 1520 1529* 1531* 1568 1574 1614 1618* 1620* 1752 1755* 1816 array_length 000103 automatic fixed bin(21,0) dcl 99 set ref 800* 803 803 1346* 1349 1349 1367* 1368* 1368* 1570* 1573 1573 1592* 1593* 1593* auth_string 000106 automatic char(170) packed unaligned dcl 101 set ref 1210* 1211 1211* 1212 1768* 1769 1769* 1770 authorization 14 based bit(72) level 2 in structure "message_info" dcl 4-4 in procedure "message_facility_" set ref 867* 968* 1395* authorization 000104 automatic bit(72) dcl 100 in procedure "message_facility_" set ref 999* 1066* 1208* 1209* 1699* 1700* 1766* 1767* authorization 14 001562 automatic bit(72) level 2 in structure "local_mi" dcl 163 in procedure "message_facility_" set ref 1209* 1210* 1767* 1768* before builtin function dcl 194 ref 1205 1710 1762 call_string based char(512) packed unaligned dcl 102 set ref 1410 1427 1774* canonicalize_ 000130 constant entry external dcl 199 ref 1691 change_state 000161 automatic bit(1) dcl 103 set ref 511* 538 cleanup 001634 stack reference condition dcl 197 ref 1008 1154 1519 1751 clock builtin function dcl 194 ref 1716 1716 code 001633 automatic fixed bin(35,0) dcl 180 set ref 295* 296 298* 300* 302 320* 322 323 377* 379 380 387* 390 391 495* 497 498 502* 505 506 519* 523 524* 526 527 533 534 660* 662 663 667* 670 671 752* 754 755 762* 765* 767 768* 770 771 777 795 795 830* 832 833 839* 842* 844 845* 847 848 857 860 861 883* 885 886 891* 893 894 900* 903* 905 906* 908 909 915 916 977* 979 980 1012* 1014 1015 1064* 1066* 1068 1077 1077* 1079 1097* 1099 1100 1104* 1107 1108* 1110 1111 1117 1118 1144* 1146 1147 1158* 1159 1164* 1166 1167 1210* 1242 1242* 1244 1245* 1263* 1266 1267* 1269 1272 1276* 1279* 1281 1282* 1284 1288 1299* 1302* 1304 1305* 1307 1311 1313 1314* 1321* 1326* 1327 1328 1419* 1430* 1524* 1526 1529* 1531* 1533 1534* 1536 1540 1618* 1620* 1625 1625* 1626 1653 1653* 1720* 1724* 1726 1726* 1729 1747* 1749 1755* 1756 1768* 1811* 1814* 1830* 1831 1831* 1832 collate builtin function dcl 194 ref 271 command_line 000162 automatic char(2000) packed unaligned dcl 104 set ref 1774* 1785 1785 1785 1785 convert_access_class_$to_string_short 000132 constant entry external dcl 201 ref 1210 1768 count 001146 automatic fixed bin(17,0) dcl 105 set ref 1047* 1050 1051* 1051 cu_$cp 000134 constant entry external dcl 203 ref 1785 current_date_time 001536 automatic char(24) packed unaligned dcl 148 set ref 1716* 1717 current_message_index 001147 automatic fixed bin(17,0) dcl 106 set ref 1326* 1327 1380* 1398 d_permission 001150 automatic bit(1) dcl 107 set ref 922* 924 937 974 1376* 1377 1600* 1601 data_ptr 6 based pointer level 2 dcl 1-7 ref 1238 1260 date_time 001526 automatic fixed bin(71,0) dcl 146 set ref 1220* 1221* 1223* 1225* 1714* 1715* 1758* 1759* 1774* 1774* 1805 1808 date_time_ 000136 constant entry external dcl 205 ref 1715 1716 1759 date_time_$format 000140 constant entry external dcl 206 ref 1223 1225 1774 1774 default_dname 001151 automatic char(168) packed unaligned dcl 108 set ref 347* 349* default_ename 001223 automatic char(32) packed unaligned dcl 109 set ref 348* 349* default_mbx 67 based bit(1) level 2 dcl 7-17 set ref 350* 351* 556 1412* 1412 1774 1798 default_uid 001233 automatic bit(36) dcl 110 set ref 349* 350 destination_string based char packed unaligned dcl 111 set ref 803* 1349* 1573* destination_string_ptr 001234 automatic pointer dcl 112 set ref 801* 803 1347* 1349 1571* 1573 divide builtin function dcl 194 ref 1457 1483 1491 dname 001236 automatic char(168) packed unaligned dcl 113 in procedure "message_facility_" set ref 315* 320* 343 377* 1003* 1012* 1712* 1729* dname 4 based char(168) level 2 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 300 343* 387 524 554 768 845 906 1108 1245 1245 1267 1282 1305 1314 1314 1412 1412 1534 1774 1774 done_searching 000110 automatic bit(1) dcl 1441 set ref 1458* 1460 1479* 1480* 1487* 1488* ename 001310 automatic char(32) packed unaligned dcl 114 in procedure "message_facility_" set ref 316* 320* 344 377* 1004* 1012* 1713* 1729* ename 56 based char(32) level 2 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 300 344* 387 524 555 768 845 906 1108 1199 1245 1245 1267 1282 1305 1314 1314 1412 1412 1534 1774 1774 error_table_$bad_segment 000106 external static fixed bin(35,0) dcl 184 ref 1068 error_table_$bad_subr_arg 000110 external static fixed bin(35,0) dcl 185 ref 490 error_table_$messages_off 000112 external static fixed bin(35,0) dcl 186 ref 644 706 error_table_$no_info 000116 external static fixed bin(35,0) dcl 188 ref 1077 error_table_$no_message 000120 external static fixed bin(35,0) dcl 189 ref 777 857 1172 1242 1288 1311 1328 1446 1495 1625 1653 error_table_$noentry 000114 external static fixed bin(35,0) dcl 187 ref 1726 error_table_$rqover 000122 external static fixed bin(35,0) dcl 190 ref 1057 error_table_$seg_unknown 000124 external static fixed bin(35,0) dcl 191 ref 523 767 844 905 1107 1266 1281 1304 1533 error_table_$unimplemented_version 000126 external static fixed bin(35,0) dcl 192 ref 406 432 471 484 550 567 581 596 609 624 639 687 701 720 727 745 817 823 879 1093 1139 event_call_info based structure level 1 dcl 1-7 event_call_info_ptr 001742 automatic pointer dcl 1-5 set ref 1237* 1238 1259* 1260 1296 event_channel 70 based fixed bin(71,0) level 2 dcl 7-17 set ref 352* 449 449* 494 495* 502* 519* 643 705 fixed builtin function dcl 194 ref 939 939 1220 1221 1714 1733 1733 1758 flags 3 based structure array level 2 dcl 159 found 001627 automatic bit(1) dcl 175 set ref 328* 329 330* 334 423* 424 428* 943* 946 948* 952 1360* 1361 1362* 1543* 1544 1546* 1563 1585* 1586 1587* freed_msgf_mbx_ptr 001544 automatic pointer dcl 150 set ref 412* 428 438 440 full_name 000010 internal static char(32) initial packed unaligned dcl 116 set ref 1044 1703 1829 1830* 1831* 1832* 1835* get_authorization_ 000142 constant entry external dcl 208 ref 1208 1699 1766 get_system_free_area_ 000144 constant entry external dcl 210 ref 336 749 827 header based structure level 2 in structure "mail_format" dcl 3-24 in procedure "message_facility_" header based structure level 2 in structure "local_mf" dcl 1026 in begin block on line 1024 high_idx 000102 automatic fixed bin(17,0) dcl 1439 set ref 1456* 1457 1470* 1474 1474 1483 1490* high_temp 000104 automatic fixed bin(17,0) dcl 1439 set ref 1462* 1464 1464 1465* 1465 1470 1470 1472 highest_message 126 based fixed bin(17,0) level 2 dcl 7-17 set ref 364* 1331 1332* 1553* 1553 1554 1607 1609* 1609 1646* 1648* 1648 1649 hold_messages 73 based bit(1) level 3 packed packed unaligned dcl 7-17 set ref 653* 926 1329 1549 1557 1605 1782 hold_notifications 73(01) based bit(1) level 3 packed packed unaligned dcl 7-17 set ref 927 1329 1549 1557 1605 1782 hold_this_message 001321 automatic bit(1) dcl 117 set ref 926* 931* 974 hold_this_notification 001322 automatic bit(1) dcl 118 set ref 927* 932* 974 idx 001631 automatic fixed bin(17,0) dcl 178 in procedure "message_facility_" set ref 946* 947 949* 1046* 1049 1050* 1051 1052 1355* 1359 1361 1362 1363* 1363 1366 1367 1368 1368 1368 1368 1374 1375 1377 1378 1379 1380 1416* 1417* 1544* 1545 1547 1549 1554 1557* 1632* 1633 1636 1637* 1647* 1649* 1661* 1663* 1663 1665 1665 1666* 1666 1668 1668 1669 1670 1671 idx 000100 automatic fixed bin(17,0) dcl 1438 in procedure "get_message_index" set ref 1457* 1461 1462 1463 1474 1474* 1475 1475* 1478 1479 1480 1482 1483* 1483 1483 1487 1488 1490 1491* 1491 1491 1495 1496 index builtin function dcl 194 in procedure "message_facility_" ref 1050 1689 index 72 based fixed bin(17,0) level 2 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 300* 377* 387* 410* 519* 524* 752* 762* 765* 768* 830* 839* 842* 845* 891* 900* 903* 906* 939* 1104* 1108* 1263* 1267* 1276* 1279* 1282* 1299* 1302* 1305* 1321* 1524* 1529* 1531* 1534* 1618* 1620* 1733* internal_msg_array based structure array level 1 dcl 159 set ref 459 802 1348 1350 1368 1368 1368 1368 1572 1574 1593 1593 1593 1593 1669* 1669 ioa_$ioa_switch 000146 constant entry external dcl 213 ref 1412 ioa_$ioa_switch_nnl 000150 constant entry external dcl 214 ref 1194 1228 ioa_$rsnnl 000152 constant entry external dcl 215 ref 1183 1188 1774 iocb_ptr 001324 automatic pointer dcl 119 set ref 1134* 1194* 1228* iox_$control 000154 constant entry external dcl 217 ref 1419 1430 iox_$user_io 000156 external static pointer dcl 218 set ref 1412* 1419* 1430* 1811* ipc_$create_ev_chn 000160 constant entry external dcl 220 ref 495 660 ipc_$decl_ev_call_chn 000162 constant entry external dcl 221 ref 502 667 ipc_$delete_ev_chn 000164 constant entry external dcl 222 ref 447 449 jdx 001632 automatic fixed bin(17,0) dcl 178 set ref 1580* 1584 1586 1587 1588* 1588 1591 1592 1593 1593 1593 1593 1599 1601 1602 1603 1607 1611 last 114 based structure level 2 dcl 7-17 last_id 116 based bit(72) level 3 dcl 7-17 set ref 362* 732 762* 765* 952 970* 1276* 1279* 1396* 1429* last_index 001326 automatic fixed bin(17,0) dcl 120 set ref 945* 949* 952 1661* 1662 1664* 1664 1668 1669 1674 1674 1674* 1674 1676 last_message_id 4 001552 automatic bit(72) level 2 in structure "local_lmi" dcl 161 in procedure "message_facility_" set ref 1171 1221 last_message_id 4 based bit(72) level 2 in structure "last_message_info" dcl 2-5 in procedure "message_facility_" set ref 732* last_message_info based structure level 1 dcl 2-5 last_message_info_ptr 001744 automatic pointer dcl 2-11 set ref 724* 726 731 732 733 last_message_number 120 based fixed bin(17,0) level 3 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 363* 733 971* 1398* last_message_number 6 based fixed bin(17,0) level 2 in structure "last_message_info" dcl 2-5 in procedure "message_facility_" set ref 733* last_message_number 6 001552 automatic fixed bin(17,0) level 2 in structure "local_lmi" dcl 161 in procedure "message_facility_" set ref 1188 1188* last_message_ptr 2 based pointer level 2 in structure "last_message_info" dcl 2-5 in procedure "message_facility_" set ref 731* last_message_ptr 2 001552 automatic pointer level 2 in structure "local_lmi" dcl 161 in procedure "message_facility_" set ref 1176 last_message_ptr 114 based pointer level 3 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 361* 452 453 731 956 969* 1384 1397* last_message_set 001327 automatic bit(1) dcl 121 set ref 944* 954* 981 987 last_msg_time 000020 internal static char(24) initial packed unaligned dcl 122 set ref 1803 1809* last_sender 000026 internal static char(120) initial packed unaligned dcl 123 set ref 1791 1807* last_time 000064 internal static fixed bin(71,0) initial dcl 124 set ref 1805 1808* length builtin function dcl 194 ref 1020 1204 1205 1205 1228 1228 1228 1228 1228 1228 1691 1691 1710 1711 1762 1764 1764 1764 1774 1774 1774 1774 1785 1785 lines 11 based fixed bin(17,0) level 3 dcl 1026 set ref 1039* 1053* 1053 local_lmi 001552 automatic structure level 1 dcl 161 set ref 1164 1164 local_mf based structure level 1 dcl 1026 set ref 1064 1064 1066 1066 local_mf_ptr 000100 automatic pointer dcl 1027 set ref 1029* 1031 1032 1033 1034 1035 1036 1037 1038 1039 1043 1043 1044 1044 1053 1053 1061 1061 1064 1064 1066 1066 local_mi 001562 automatic structure level 1 dcl 163 set ref 1158 1158 1177* 1755 1755 local_mra 001600 automatic structure level 1 dcl 165 set ref 762 762 765 765 839 839 842 842 900 900 903 903 1276 1276 1279 1279 1299 1299 1302 1302 1529 1529 1531 1531 1618 1618 1620 1620 local_pf based structure level 1 packed packed unaligned dcl 167 local_pf_ptr 001622 automatic pointer dcl 168 set ref 1136* 1143 1182 1194 1199 1201 1220 1223 1225 1232 local_smi based structure level 1 dcl 170 local_smi_ptr 001624 automatic pointer dcl 171 set ref 1006* 1033 1035 1036 1037 1061 1061 login_name 001504 automatic char(32) packed unaligned dcl 137 set ref 1723* 1724 1724 low_idx 000103 automatic fixed bin(17,0) dcl 1439 set ref 1453* 1457 1472* 1475 1475 1482* 1491 low_temp 000105 automatic fixed bin(17,0) dcl 1439 set ref 1463* 1467 1467 1468* 1468 1470 mail_format based structure level 1 dcl 3-24 set ref 454 959 981 987 1022 1155 1232 1322 1387 1520 1614 1752 1816 mail_format_ptr 001746 automatic pointer dcl 3-17 set ref 920* 924 938 939 939 958* 959 959 963* 974 974 981 987 1022 1151* 1155 1155 1180* 1205 1205 1205 1205 1205 1205 1228 1228 1228 1228 1228 1228 1228 1228 1228 1232 1232 1318* 1320 1322 1329 1329 1377 1386* 1387 1387 1517* 1520 1520 1541* 1549 1549 1557 1557 1563 1601 1605 1605 1613 1614 1615* 1732 1733 1733 1744* 1752 1752 1757* 1762 1762 1764 1764 1764 1764 1774 1774 1774 1774 1774 1774 1774 1774 1782 1782 1816 1816 mail_format_space 000100 automatic bit dcl 1025 set ref 1029 mailbox_$accept_wakeups_index 000166 constant entry external dcl 224 ref 519 mailbox_$close 000170 constant entry external dcl 225 ref 410 1009 1082 mailbox_$delete_index 000172 constant entry external dcl 226 ref 1104 1321 mailbox_$get_mode_index 000174 constant entry external dcl 227 ref 752 830 891 1263 1524 mailbox_$get_uid_file 000176 constant entry external dcl 228 ref 320 349 mailbox_$incremental_read_index 000200 constant entry external dcl 229 ref 762 839 900 1276 1299 1302 1618 mailbox_$open 000202 constant entry external dcl 231 ref 300 377 387 524 768 845 906 1012 1108 1267 1282 1305 1534 mailbox_$own_incremental_read_index 000204 constant entry external dcl 232 ref 765 842 903 1279 1620 mailbox_$own_read_index 000206 constant entry external dcl 234 ref 1531 mailbox_$read_index 000210 constant entry external dcl 235 ref 1529 mailbox_$update_message_index 000212 constant entry external dcl 236 ref 939 1733 mailbox_$wakeup_add_index 000214 constant entry external dcl 237 ref 1064 mailbox_$wakeup_aim_add_index 000216 constant entry external dcl 239 ref 1066 max builtin function dcl 194 ref 1463 1483 1491 max_idx 000101 automatic fixed bin(17,0) dcl 1439 set ref 1454* 1455* 1456 1462 1464 1479 mbx_index 001330 automatic fixed bin(17,0) dcl 125 set ref 1009 1009* 1012* 1064* 1066* 1082* mbz 73(05) based bit(31) level 3 in structure "msg_facility_mailbox" packed packed unaligned dcl 7-17 in procedure "message_facility_" set ref 355* mbz 11(06) 001764 automatic bit(30) level 3 in structure "send_mail_info" packed packed unaligned dcl 9-5 in procedure "message_facility_" set ref 1709* mbz 3(01) based bit(35) array level 3 in structure "internal_msg_array" packed packed unaligned dcl 159 in procedure "message_facility_" set ref 1379* 1603* message 2 based fixed bin(71,0) level 2 in structure "event_call_info" dcl 1-7 in procedure "message_facility_" ref 1296 message 001331 automatic char(47) packed unaligned dcl 126 in procedure "message_facility_" set ref 1717* 1718* 1724* 1729* message_bit_count 001345 automatic fixed bin(17,0) dcl 127 set ref 1022* 1025 1064* 1066* message_facility_$alarm_processor 000220 constant entry external dcl 242 ref 667 667 message_facility_$default_alarm_handler 000224 constant entry external dcl 244 ref 372 message_facility_$default_wakeup_handler 000226 constant entry external dcl 245 ref 370 message_facility_$delete_message 000230 constant entry external dcl 246 ref 977 message_facility_$free_msgf_mbx_ptr 000232 constant entry external dcl 247 ref 303 392 message_facility_$get_last_message_info 000234 constant entry external dcl 248 ref 1164 message_facility_$print_message 000236 constant entry external dcl 249 ref 1811 message_facility_$read_message 000240 constant entry external dcl 250 ref 1158 1755 message_facility_$send_message 000242 constant entry external dcl 251 ref 1724 1729 message_facility_$set_seen_switch 000244 constant entry external dcl 252 ref 1782 1814 message_facility_$wakeup_processor 000222 constant entry external dcl 243 ref 502 502 message_id 001346 automatic bit(72) dcl 128 in procedure "message_facility_" set ref 812* 839* 842* 875* 883* 900* 903* 939* 952 970 977* 1064* 1066* 1090* 1097* 1104* 1135* 1144* 1158* 1220 1296* 1299* 1302* 1321* 1326* 1362 1374 1396 1542* 1545 1587 1599 1618* 1620* 1733* message_id 000106 automatic bit(54) dcl 1440 in procedure "get_message_index" set ref 1451* 1470 1478 1480 1488 1495 message_id 000100 automatic bit(72) dcl 1740 in procedure "process_message" set ref 1743* 1747* 1755* 1758 1782* 1811* 1814* message_id based bit(72) array level 2 in structure "internal_msg_array" dcl 159 in procedure "message_facility_" set ref 947 1123* 1362 1374* 1417* 1461 1464 1467 1470 1470 1478 1480 1488 1495 1545 1587 1599* 1636* 1665 1668 1670* 1674 message_ident 001350 automatic varying char(200) dcl 129 set ref 1197* 1199* 1215* 1215 1216* 1216 1218* 1218 1223* 1223 1225* 1225 1228* 1228 1228 message_index 000102 automatic fixed bin(17,0) dcl 1741 in procedure "process_message" set ref 1747* 1774 message_index 001433 automatic fixed bin(17,0) dcl 130 in procedure "message_facility_" set ref 883* 936 952 971 1097* 1123 1124 1144* 1183 1183 message_info based structure level 1 dcl 4-4 set ref 455 960 964 1177 1388 1391 message_info_ptr 001752 automatic pointer dcl 4-10 set ref 453* 454 454 455 813* 822 865 866 867 956* 957 958 960 964* 965 966 967 968 969 1176* 1177 1384* 1385 1386 1388 1391* 1392 1393 1394 1395 1397 message_number 2 based fixed bin(17,0) array level 2 dcl 159 set ref 971 1124* 1183 1183* 1327 1375* 1398 1549 1554* 1557* 1607* 1611* 1637* 1649* 1671* 1774* message_ptr 12 based pointer level 2 in structure "message_info" dcl 4-4 in procedure "message_facility_" set ref 454 454 866* 958 967* 1386 1394* message_ptr 12 001562 automatic pointer level 2 in structure "local_mi" dcl 163 in procedure "message_facility_" set ref 1180 1757 message_sender 001434 automatic char(120) packed unaligned dcl 131 set ref 1204* 1205* 1205 1212* 1212 1215 1216 1762* 1764* 1770* 1770 1774 1774 1791 1807 messages_ptr 122 based pointer level 2 dcl 7-17 set ref 365* 459 459 787 802 936 947 971 1123 1124 1183 1183 1327 1345 1348 1350 1353* 1362 1368 1368 1368 1368 1374 1375 1377 1378 1379 1398 1417 1461 1464 1467 1470 1470 1478 1480 1488 1495 1545 1549 1554 1557 1569 1572 1574 1577* 1587 1593 1593 1593 1593 1599 1601 1602 1603 1607 1611 1636 1637 1649 1665 1668 1669 1669 1670 1671 1674 1674 1774 min builtin function dcl 194 ref 1462 mrl_ 000246 constant entry external dcl 254 ref 1368 1593 ms_id 14 001600 automatic bit(72) level 2 dcl 165 set ref 1542 1714 ms_ptr 001600 automatic pointer level 2 dcl 165 set ref 866 920 939* 963 967 1318 1394 1541 1723 1733* mseg_return_args based structure level 1 dcl 5-9 msg_array based structure array level 1 dcl 6-4 set ref 799 801 1344 1347 1568 1571 msg_array_compacted 127 based bit(1) level 3 packed packed unaligned dcl 7-17 set ref 368* 790 1127* 1293 1454 1513 1631* 1677* msg_array_flags 127 based structure level 2 packed packed unaligned dcl 7-17 msg_array_ptr 001754 automatic pointer dcl 6-11 set ref 799* 801 805 1344* 1347 1353 1568* 1571 1577 msg_array_updated 127(01) based bit(1) level 3 packed packed unaligned dcl 7-17 set ref 369* 538* 777* 787 857* 1288* 1291 1655* msg_count 000101 automatic fixed bin(17,0) dcl 1504 set ref 1510* 1548* 1548 1629 1632 msg_date_time 001530 automatic char(24) packed unaligned dcl 147 set ref 1715* 1717 1718 1759* 1803 1809 msg_existence_array 000100 automatic bit(1) array dcl 1502 set ref 1508* 1547* 1633 msg_facility_mailbox based structure level 1 dcl 7-17 set ref 337 461 msg_facility_mailbox_ptr 001760 automatic pointer dcl 7-62 set ref 289* 292 293 297* 299 300 300 300 303* 327* 329 330 331* 331 337* 338 339 342 343 344 345 350 351 352 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 377 387 387 387 392* 397 403* 405 410 412 413* 416* 417 424* 424* 428* 429 431 438 440* 443 443 447 447 449 449 452 453 459 459 459 461 468* 470 475 481* 483 494 495 502 502* 511 514 516 519 519 524 524 524 538 547* 549 554 555 556 564* 566 571 572 578* 580 585 586 593* 595 600 606* 608 613 621* 623 628 629 630 636* 638 643 648 649 650 653 653 656 656 659 660 667 667* 676 676 684* 686 691 692 698* 700 705 710 711 717* 719 731 732 733 741* 744 752 762 762 765 765 768 768 768 777 787 787 787 790 798 802 811* 816 830 839 842 845 845 845 857 874* 878 891 900 903 906 906 906 926 927 936 939 946 947 952 956 969 970 971 971 977* 1089* 1092 1104 1108 1108 1108 1123 1124 1126 1126 1127 1133* 1138 1158* 1164* 1183 1183 1194 1199 1238* 1245 1245 1245 1245 1250 1250* 1250 1252 1252 1252 1260* 1263 1267 1267 1267 1276 1276 1279 1279 1282 1282 1282 1288 1291 1293 1299 1302 1305 1305 1305 1314 1314 1314 1314 1320 1321 1327 1329 1329 1331 1332 1341 1341 1342 1342 1343 1345 1346 1348 1350 1350 1352 1353 1355 1362 1366 1367 1368 1368 1368 1368 1374 1375 1377 1378 1379 1384 1396 1397 1398 1398 1401 1401* 1401 1406* 1407 1412 1412 1412 1412 1412 1412 1412 1412 1416 1417 1424* 1429 1445 1454 1454 1455 1461 1464 1467 1470 1470 1478 1480 1488 1495 1502 1509 1513 1524 1529 1531 1534 1534 1534 1544 1545 1549 1549 1549 1553 1553 1554 1554 1557 1557 1557 1565 1565 1566 1566 1567 1569 1570 1572 1574 1574 1576 1577 1580 1587 1591 1592 1593 1593 1593 1593 1599 1601 1602 1603 1605 1605 1607 1607 1609 1609 1611 1618 1620 1631 1635 1635 1636 1637 1646 1647 1648 1648 1649 1649 1655 1655 1662 1665 1665 1668 1669 1669 1670 1671 1674 1674 1676 1677 1733 1755* 1774 1774 1774 1774 1774 1774 1782 1782 1782* 1795 1798 1800 1803 1811* 1814* msg_print_flags 001762 automatic structure level 1 packed packed unaligned dcl 8-4 set ref 1790* 1811 1811 n_deleted 000102 automatic fixed bin(17,0) dcl 1505 set ref 1630* 1632 1634* 1634 n_elements 124 based fixed bin(17,0) level 2 dcl 7-17 set ref 366* 459 946 1342 1343 1350 1352* 1454 1566 1567 1574 1576* 1665 n_messages 001756 automatic fixed bin(17,0) dcl 6-13 in procedure "message_facility_" set ref 798* 799 800 804 1343* 1344 1352 1567* 1568 1576 n_messages 125 based fixed bin(17,0) level 2 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 367* 798 1126* 1126 1341* 1341 1342 1346 1355 1366 1367 1407 1412* 1412 1416 1445 1455 1502 1509 1544 1565* 1565 1566 1570 1580 1591 1592 1635* 1635 1647 1662 1676* never_add 11(03) 001764 automatic bit(1) level 3 in structure "send_mail_info" packed packed unaligned dcl 9-5 in procedure "message_facility_" set ref 1706* never_add 11(03) based bit(1) level 3 in structure "local_smi" packed packed unaligned dcl 170 in procedure "message_facility_" ref 1061 new_message_number 001626 automatic fixed bin(17,0) dcl 173 set ref 1327* 1331* 1332 1336* 1375 next_mbx_ptr 2 based pointer level 2 dcl 7-17 set ref 293 305 331 338* 417 424 428 429 431 438* 438 next_msgf_mbx_ptr 001546 automatic pointer dcl 151 set ref 292* 293* 297 304* 305* 310 notify 11(04) 001764 automatic bit(1) level 3 in structure "send_mail_info" packed packed unaligned dcl 9-5 in procedure "message_facility_" set ref 1707* notify 11(04) based bit(1) level 3 in structure "local_smi" packed packed unaligned dcl 170 in procedure "message_facility_" ref 1036 notify 13(02) based bit(1) level 4 in structure "mail_format" packed packed unaligned dcl 3-24 in procedure "message_facility_" ref 974 974 1320 1329 1329 1549 1549 1557 1557 1605 1605 1782 1782 notify 13(02) based bit(1) level 4 in structure "local_mf" packed packed unaligned dcl 1026 in begin block on line 1024 set ref 1036* notify_mail 73(02) based bit(1) level 3 packed packed unaligned dcl 7-17 set ref 1320 null builtin function dcl 194 ref 290 292 299 304 317 329 336 361 365 371 373 424 431 437 452 454 459 618 682 738 749 787 827 957 959 1151 1155 1232 1245 1245 1314 1314 1345 1385 1387 1410 1419 1419 1427 1430 1430 1517 1520 1569 1613 1615 1674 1744 1752 1816 1830 1830 1831 1831 old_msg_count 000100 automatic fixed bin(17,0) dcl 1503 set ref 1509* 1629 1632 1632 output_string 000100 automatic char packed unaligned dcl 1686 set ref 1690* 1691 1691 1692 own 001472 automatic bit(1) dcl 132 set ref 759* 762 837* 839 898* 900 1273* 1276 1299 1527* 1529 1618 1645 pathname_ 000250 constant entry external dcl 256 ref 1245 1245 1314 1314 1412 1412 1774 1774 person 000066 internal static char(22) initial packed unaligned dcl 133 set ref 346* 347 348 1043 1044 1821 1821* 1829 1830 1832 1835 1835 person_id 001473 automatic char(22) packed unaligned dcl 135 set ref 1710* 1712 1713 1722 prefix 75 based varying char(32) level 2 dcl 7-17 set ref 357* 571 585* 1194* print_date_and_time 0(03) 001762 automatic bit(1) level 2 in structure "msg_print_flags" packed packed unaligned dcl 8-4 in procedure "message_facility_" set ref 1803* print_date_and_time 0(03) based bit(1) level 2 in structure "local_pf" packed packed unaligned dcl 167 in procedure "message_facility_" ref 1223 print_ename 0(01) based bit(1) level 2 in structure "local_pf" packed packed unaligned dcl 167 in procedure "message_facility_" ref 1199 print_ename 0(01) 001762 automatic bit(1) level 2 in structure "msg_print_flags" packed packed unaligned dcl 8-4 in procedure "message_facility_" set ref 1798* print_last_message 0(05) based bit(1) level 2 packed packed unaligned dcl 167 ref 1143 1182 1220 1232 print_prefix based bit(1) level 2 in structure "local_pf" packed packed unaligned dcl 167 in procedure "message_facility_" ref 1194 print_prefix 001762 automatic bit(1) level 2 in structure "msg_print_flags" packed packed unaligned dcl 8-4 in procedure "message_facility_" set ref 1795* print_sender 0(02) 001762 automatic bit(1) level 2 in structure "msg_print_flags" packed packed unaligned dcl 8-4 in procedure "message_facility_" set ref 1800* print_sender 0(02) based bit(1) level 2 in structure "local_pf" packed packed unaligned dcl 167 in procedure "message_facility_" ref 1201 print_time 0(04) 001762 automatic bit(1) level 2 in structure "msg_print_flags" packed packed unaligned dcl 8-4 in procedure "message_facility_" set ref 1805* print_time 0(04) based bit(1) level 2 in structure "local_pf" packed packed unaligned dcl 167 in procedure "message_facility_" ref 1225 printed 3 based bit(1) array level 3 packed packed unaligned dcl 159 set ref 936* 1377* 1378* 1601* 1602* project 000074 internal static char(9) initial packed unaligned dcl 134 set ref 346* 347 1821* project_id 001501 automatic char(9) packed unaligned dcl 136 set ref 1711* 1712 1724 record_quota_overflow 000000 stack reference condition dcl 197 ref 1056 rel builtin function dcl 194 ref 939 939 1733 1733 requote_string_ 000252 constant entry external dcl 258 ref 1774 1774 1774 1774 retried 001630 automatic bit(1) dcl 176 set ref 1062* 1068 1069* rtrim builtin function dcl 194 ref 347 347 348 1020 1038 1199 1204 1205 1205 1205 1205 1205 1205 1205 1212 1215 1216 1228 1228 1228 1228 1228 1228 1228 1228 1228 1228 1710 1711 1712 1713 1724 1724 1762 1762 1764 1764 1764 1764 1764 1764 1770 1774 1774 1774 1774 1774 1774 1774 1774 1774 1774 1774 1774 1774 1774 1785 1785 1830 seen 13(06) based bit(1) level 4 packed packed unaligned dcl 3-24 set ref 938* 1377 1601 seen_switch_flags 001514 automatic bit(3) dcl 138 set ref 876* 925 931 932 send_mail_info 001764 automatic structure level 1 dcl 9-5 set ref 1724 1724 1729 1729 send_mail_info_version_2 001763 automatic fixed bin(17,0) initial dcl 9-3 set ref 9-3* 1702 sender 2 001562 automatic char(32) level 2 in structure "local_mi" dcl 163 in procedure "message_facility_" set ref 1204 1204 1205 1762 1762 1762 1764 1764 sender 2 based char(32) level 2 in structure "message_info" dcl 4-4 in procedure "message_facility_" set ref 865* 966* 1393* sender_authorization 16 001600 automatic bit(72) level 2 dcl 165 set ref 867 968 1395 1700* sender_id 3 001600 automatic char(32) level 2 packed packed unaligned dcl 165 set ref 865 966 1393 1710 1710 1711 1711 sent_from 1 based char(32) level 2 in structure "local_smi" dcl 170 in procedure "message_facility_" ref 1033 sent_from 1 based char(32) level 3 in structure "mail_format" dcl 3-24 in procedure "message_facility_" ref 1205 1205 1205 1205 1205 1205 1723 1762 1762 1764 1764 1764 1764 sent_from 1 based char(32) level 3 in structure "local_mf" dcl 1026 in begin block on line 1024 set ref 1033* 1043 1043* 1044 1044* sent_from 1 001764 automatic char(32) level 2 in structure "send_mail_info" dcl 9-5 in procedure "message_facility_" set ref 1703* short 001515 automatic bit(1) dcl 139 set ref 1791* 1792* 1795 1800 short_format 74 based bit(1) level 2 dcl 7-17 set ref 356* 600 613* 1800 1803 short_prefix 106 based bit(1) level 2 dcl 7-17 set ref 358* 572 586* 1795 size builtin function dcl 194 ref 1022 source_string based char packed unaligned dcl 140 ref 803 1349 1573 source_string_ptr 001516 automatic pointer dcl 141 set ref 802* 803 1348* 1349 1572* 1573 static_msgf_mbx_ptr 000100 internal static pointer initial dcl 152 set ref 292 304 327 338 339* 413 415 416 417* 424 string builtin function dcl 194 set ref 354* 475 511 514* 1034* 1790* sub_err_ 000254 constant entry external dcl 260 ref 1245 1314 substr builtin function dcl 194 set ref 271 475 488 488 516* 516 517* 517 538 759 837 898 922 925 931 932 1050 1204 1220 1221 1273 1376 1451 1470 1478 1480 1488 1495 1527 1600 1645 1710 1711 1714 1758 1762 1764 1803 1809 switches 11 001764 automatic structure level 2 in structure "send_mail_info" dcl 9-5 in procedure "message_facility_" switches 11 based structure level 2 in structure "local_smi" dcl 170 in procedure "message_facility_" switches 13 based structure level 3 in structure "local_mf" dcl 1026 in begin block on line 1024 set ref 1034* switches 13 based structure level 3 in structure "mail_format" dcl 3-24 in procedure "message_facility_" sys_area based area(65560) dcl 155 ref 337 454 455 459 461 959 960 964 981 987 1155 1232 1322 1344 1350 1387 1388 1391 1520 1568 1574 1614 1752 1816 tag 001520 automatic varying char(10) dcl 142 set ref 1183* 1185* 1188* 1190* 1215 1215 1218 text 15 based char level 2 in structure "local_mf" dcl 1026 in begin block on line 1024 set ref 1038* text 15 based char level 2 in structure "mail_format" dcl 3-24 in procedure "message_facility_" set ref 939 1228 1228 1228 1228 1228 1228 1228 1228 1733 1774 1774 1774 1774 1774 1774 1774 1774 text_len 12 based fixed bin(21,0) level 3 in structure "mail_format" dcl 3-24 in procedure "message_facility_" ref 454 939 959 981 987 1038 1155 1228 1228 1228 1228 1228 1228 1228 1228 1228 1232 1322 1387 1520 1614 1733 1752 1774 1774 1774 1774 1774 1774 1774 1774 1816 text_len 12 based fixed bin(21,0) level 3 in structure "local_mf" dcl 1026 in begin block on line 1024 set ref 1031* text_length 001750 automatic fixed bin(21,0) dcl 3-22 set ref 1019* 1020* 1022 1031 1049 1050 1052* 1052 timer_manager_$alarm_wakeup 000256 constant entry external dcl 262 ref 676 1252 timer_manager_$reset_alarm_wakeup 000260 constant entry external dcl 263 ref 443 656 translate builtin function dcl 194 ref 1688 uid 66 based bit(36) level 2 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 330 345* uid 001524 automatic bit(36) dcl 143 in procedure "message_facility_" set ref 320* 330 345 350 unspec builtin function dcl 194 ref 1296 urgent 13(01) based bit(1) level 4 packed packed unaligned dcl 1026 set ref 1061 use_call_string 001525 automatic bit(1) dcl 144 set ref 1409* 1410* 1412 1426* 1427* 1773 user_area based area(1024) dcl 157 ref 799 user_area_ptr 001550 automatic pointer dcl 156 set ref 742* 749 749* 762* 765* 799 814* 827 827* 839* 842* user_info_$whoami 000262 constant entry external dcl 265 ref 346 1821 value_$get 000264 constant entry external dcl 267 ref 1830 1831 version based char(8) level 2 in structure "last_message_info" dcl 2-5 in procedure "message_facility_" ref 726 version based char(8) level 2 in structure "message_info" dcl 4-4 in procedure "message_facility_" set ref 822 965* 1392* version 001552 automatic char(8) level 2 in structure "local_lmi" dcl 161 in procedure "message_facility_" set ref 1162* version based fixed bin(17,0) level 3 in structure "mail_format" dcl 3-24 in procedure "message_facility_" set ref 939 1733 version based char(8) level 2 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 342* 405 470 483 549 566 580 595 608 623 638 686 700 719 744 816 878 1092 1138 version 001562 automatic char(8) level 2 in structure "local_mi" dcl 163 in procedure "message_facility_" set ref 1152* 1745* version based fixed bin(17,0) level 3 in structure "local_mf" dcl 1026 in begin block on line 1024 set ref 1032* version 001764 automatic fixed bin(17,0) level 2 in structure "send_mail_info" dcl 9-5 in procedure "message_facility_" set ref 1702* wakeup 13 based bit(1) level 4 in structure "local_mf" packed packed unaligned dcl 1026 in begin block on line 1024 set ref 1035* 1061 wakeup 11 based bit(1) level 3 in structure "local_smi" packed packed unaligned dcl 170 in procedure "message_facility_" ref 1035 wakeup 11 001764 automatic bit(1) level 3 in structure "send_mail_info" packed packed unaligned dcl 9-5 in procedure "message_facility_" set ref 1704* wakeup 13 based bit(1) level 4 in structure "mail_format" packed packed unaligned dcl 3-24 in procedure "message_facility_" ref 1563 wakeup_flags 001320 automatic bit(5) dcl 115 in procedure "message_facility_" set ref 482* 488 488 511 514 wakeup_flags 73 based structure level 2 in structure "msg_facility_mailbox" dcl 7-17 in procedure "message_facility_" set ref 354* 475 511 514* wakeup_handler 132 based entry variable level 3 dcl 7-17 set ref 370* 691 710* 1401 wakeup_info_ptr 136 based pointer level 3 dcl 7-17 set ref 371* 692 711* 1401* wakeup_processor 132 based structure level 2 dcl 7-17 wakeup_state 73(03) based bit(2) level 3 packed packed unaligned dcl 7-17 set ref 516 787 1655 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CAN_RESTART internal static bit(36) initial dcl 10-7 ACTION_DEFAULT_RESTART internal static bit(36) initial dcl 10-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 10-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 10-7 DONT_DELETE_MESSAGES internal static bit(3) initial packed unaligned dcl 6-16 DONT_DELETE_NOTIFICATIONS internal static bit(3) initial packed unaligned dcl 6-17 ms_arg_ptr automatic pointer dcl 5-7 NAMES DECLARED BY EXPLICIT CONTEXT. CHECK_LAST_MESSAGE 003065 constant label dcl 762 ref 774 DELETE_MESSAGE 005235 constant label dcl 1104 ref 1114 MSG_ARRAY_NEW_READ 011264 constant label dcl 1529 ref 1537 PROCESSOR_READ 007504 constant label dcl 1299 ref 1308 READ_MESSAGE 003422 constant label dcl 839 ref 851 RETRY 005047 constant label dcl 1064 ref 1070 RETURN_FROM_SM 005143 constant label dcl 1082 ref 1058 SEND_COMMON 004462 constant label dcl 1001 ref 995 SET_SEEN_SWITCH 003707 constant label dcl 900 ref 912 SET_WAKEUP_STATE 001676 constant label dcl 519 ref 530 WAKEUP_CHECK_LAST_MESSAGE 007336 constant label dcl 1276 ref 1285 WAKEUP_GET_MODE_INDEX 007251 constant label dcl 1263 ref 1270 alarm_processor 007047 constant entry external dcl 1236 canon 012300 constant entry internal dcl 1683 ref 1205 1228 1228 1764 1774 1774 compact_message_array 012166 constant entry internal dcl 1660 ref 790 1293 1513 1640 create_message_array 011141 constant entry internal dcl 1501 ref 794 1240 1291 default_alarm_handler 010322 constant entry external dcl 1405 default_wakeup_handler 010541 constant entry external dcl 1423 delete_message 005162 constant entry external dcl 1087 free_msgf_mbx_ptr 001222 constant entry external dcl 401 get_alarm_handler 002321 constant entry external dcl 617 get_last_message_info 002703 constant entry external dcl 715 get_mbx_path 002002 constant entry external dcl 543 get_message_format 002222 constant entry external dcl 590 get_message_index 010634 constant entry internal dcl 1434 ref 883 1097 1144 1326 1747 get_msg_array_ptr 002765 constant entry external dcl 737 get_msgf_mbx_ptr 000471 constant entry external dcl 314 get_next_msgf_mbx_ptr 000330 constant entry external dcl 288 get_person_and_project 014544 constant entry internal dcl 1820 ref 1041 1701 get_prefix 002107 constant entry external dcl 560 get_wakeup_handler 002560 constant entry external dcl 681 get_wakeup_state 001447 constant entry external dcl 465 message_facility_ 000315 constant entry external dcl 76 print_message 005344 constant entry external dcl 1131 process_message 013176 constant entry internal dcl 1738 ref 1417 1429 read_message 003303 constant entry external dcl 809 send_acknowledgement 012425 constant entry internal dcl 1698 ref 924 send_message 004361 constant entry external dcl 993 send_message_access_class 004422 constant entry external dcl 997 set_alarm_handler 002373 constant entry external dcl 634 set_message_format 002260 constant entry external dcl 604 set_prefix 002154 constant entry external dcl 576 set_seen_switch 003571 constant entry external dcl 872 set_wakeup_handler 002626 constant entry external dcl 696 set_wakeup_state 001523 constant entry external dcl 479 wakeup_processor 007233 constant entry external dcl 1258 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 16432 16720 15166 16442 Length 17652 15166 266 715 1244 74 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME message_facility_ 1272 external procedure is an external procedure. on unit on line 1008 72 on unit begin block on line 1024 110 begin block uses auto adjustable storage, and enables or reverts conditions. on unit on line 1056 64 on unit on unit on line 1154 64 on unit get_message_index 75 internal procedure is called by several nonquick procedures. create_message_array 168 internal procedure uses auto adjustable storage, and enables or reverts conditions. on unit on line 1519 64 on unit compact_message_array 66 internal procedure is called by several nonquick procedures. canon 88 internal procedure uses auto adjustable storage, uses returns(char(*)) or returns(bit(*)), and is called during a stack extension. send_acknowledgement internal procedure shares stack frame of external procedure message_facility_. process_message 263 internal procedure enables or reverts conditions. on unit on line 1751 64 on unit get_person_and_project 108 internal procedure is called by several nonquick procedures. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 full_name message_facility_ 000020 last_msg_time message_facility_ 000026 last_sender message_facility_ 000064 last_time message_facility_ 000066 person message_facility_ 000074 project message_facility_ 000100 static_msgf_mbx_ptr message_facility_ 000102 area_ptr message_facility_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 1024 000100 local_mf_ptr begin block on line 1024 000100 mail_format_space begin block on line 1024 canon 000100 output_string canon create_message_array 000100 msg_existence_array create_message_array 000100 old_msg_count create_message_array 000101 msg_count create_message_array 000102 n_deleted create_message_array get_message_index 000100 idx get_message_index 000101 max_idx get_message_index 000102 high_idx get_message_index 000103 low_idx get_message_index 000104 high_temp get_message_index 000105 low_temp get_message_index 000106 message_id get_message_index 000110 done_searching get_message_index message_facility_ 000100 access_class message_facility_ 000101 access_mode message_facility_ 000102 allow_switch message_facility_ 000103 array_length message_facility_ 000104 authorization message_facility_ 000106 auth_string message_facility_ 000161 change_state message_facility_ 000162 command_line message_facility_ 001146 count message_facility_ 001147 current_message_index message_facility_ 001150 d_permission message_facility_ 001151 default_dname message_facility_ 001223 default_ename message_facility_ 001233 default_uid message_facility_ 001234 destination_string_ptr message_facility_ 001236 dname message_facility_ 001310 ename message_facility_ 001320 wakeup_flags message_facility_ 001321 hold_this_message message_facility_ 001322 hold_this_notification message_facility_ 001324 iocb_ptr message_facility_ 001326 last_index message_facility_ 001327 last_message_set message_facility_ 001330 mbx_index message_facility_ 001331 message message_facility_ 001345 message_bit_count message_facility_ 001346 message_id message_facility_ 001350 message_ident message_facility_ 001433 message_index message_facility_ 001434 message_sender message_facility_ 001472 own message_facility_ 001473 person_id message_facility_ 001501 project_id message_facility_ 001504 login_name message_facility_ 001514 seen_switch_flags message_facility_ 001515 short message_facility_ 001516 source_string_ptr message_facility_ 001520 tag message_facility_ 001524 uid message_facility_ 001525 use_call_string message_facility_ 001526 date_time message_facility_ 001530 msg_date_time message_facility_ 001536 current_date_time message_facility_ 001544 freed_msgf_mbx_ptr message_facility_ 001546 next_msgf_mbx_ptr message_facility_ 001550 user_area_ptr message_facility_ 001552 local_lmi message_facility_ 001562 local_mi message_facility_ 001600 local_mra message_facility_ 001622 local_pf_ptr message_facility_ 001624 local_smi_ptr message_facility_ 001626 new_message_number message_facility_ 001627 found message_facility_ 001630 retried message_facility_ 001631 idx message_facility_ 001632 jdx message_facility_ 001633 code message_facility_ 001642 ALPHABET message_facility_ 001742 event_call_info_ptr message_facility_ 001744 last_message_info_ptr message_facility_ 001746 mail_format_ptr message_facility_ 001750 text_length message_facility_ 001752 message_info_ptr message_facility_ 001754 msg_array_ptr message_facility_ 001756 n_messages message_facility_ 001760 msg_facility_mailbox_ptr message_facility_ 001762 msg_print_flags message_facility_ 001763 send_mail_info_version_2 message_facility_ 001764 send_mail_info message_facility_ process_message 000100 message_id process_message 000102 message_index process_message THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_ne_as alloc_char_temp cat_realloc_chars enter_begin_block leave_begin_block call_ent_var call_ext_out_desc call_ext_out call_int_this_desc call_int_this call_int_other_desc call_int_other return_mac tra_ext_1 alloc_auto_adj mpfx2 enable_op shorten_stack ext_entry ext_entry_desc int_entry int_entry_desc set_chars_eis return_chars_eis translate_2 op_alloc_ op_freen_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. aim_check_$greater_or_equal canonicalize_ convert_access_class_$to_string_short cu_$cp date_time_ date_time_$format get_authorization_ get_system_free_area_ ioa_$ioa_switch ioa_$ioa_switch_nnl ioa_$rsnnl iox_$control ipc_$create_ev_chn ipc_$decl_ev_call_chn ipc_$delete_ev_chn mailbox_$accept_wakeups_index mailbox_$close mailbox_$delete_index mailbox_$get_mode_index mailbox_$get_uid_file mailbox_$incremental_read_index mailbox_$open mailbox_$own_incremental_read_index mailbox_$own_read_index mailbox_$read_index mailbox_$update_message_index mailbox_$wakeup_add_index mailbox_$wakeup_aim_add_index message_facility_$alarm_processor message_facility_$default_alarm_handler message_facility_$default_wakeup_handler message_facility_$delete_message message_facility_$free_msgf_mbx_ptr message_facility_$get_last_message_info message_facility_$print_message message_facility_$read_message message_facility_$send_message message_facility_$set_seen_switch message_facility_$wakeup_processor mrl_ pathname_ requote_string_ sub_err_ timer_manager_$alarm_wakeup timer_manager_$reset_alarm_wakeup user_info_$whoami value_$get THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_segment error_table_$bad_subr_arg error_table_$messages_off error_table_$no_info error_table_$no_message error_table_$noentry error_table_$rqover error_table_$seg_unknown error_table_$unimplemented_version iox_$user_io LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 271 000274 9 3 000307 76 000314 77 000323 288 000324 289 000341 290 000344 292 000347 293 000356 295 000360 296 000362 297 000364 298 000366 299 000367 300 000373 302 000427 303 000431 304 000443 305 000453 308 000457 310 000460 311 000463 314 000464 315 000515 316 000525 317 000535 318 000537 320 000540 322 000565 323 000567 324 000570 327 000571 328 000574 329 000575 330 000606 331 000615 332 000617 334 000620 336 000622 337 000635 338 000643 339 000646 342 000647 343 000652 344 000655 345 000660 346 000662 347 000702 348 000765 349 001002 350 001030 351 001037 352 001041 354 001043 355 001044 356 001046 357 001047 358 001050 359 001051 360 001053 361 001054 362 001056 363 001061 364 001062 365 001063 366 001065 367 001066 368 001067 369 001071 370 001073 371 001100 372 001102 373 001106 377 001110 379 001134 380 001136 381 001137 384 001140 387 001141 390 001175 391 001177 392 001200 393 001212 397 001213 398 001215 401 001216 402 001235 403 001236 405 001241 406 001245 407 001250 410 001251 412 001263 413 001265 415 001270 417 001274 418 001276 423 001277 424 001300 428 001307 429 001315 431 001320 432 001324 433 001327 437 001330 438 001332 440 001335 443 001337 447 001351 449 001366 452 001403 453 001410 454 001412 455 001425 459 001427 461 001440 462 001442 465 001443 466 001467 467 001477 468 001500 470 001503 471 001510 472 001513 475 001514 476 001520 479 001521 480 001543 481 001544 482 001547 483 001560 484 001564 485 001567 488 001570 490 001577 491 001602 494 001603 495 001605 497 001616 498 001620 499 001621 502 001622 505 001650 506 001652 507 001653 511 001654 514 001662 516 001664 517 001671 519 001676 523 001714 524 001720 526 001753 527 001755 528 001756 530 001757 533 001760 534 001762 535 001763 538 001764 540 001774 543 001775 544 002026 545 002047 546 002051 547 002052 549 002055 550 002062 551 002065 554 002066 555 002072 556 002076 557 002101 560 002102 561 002122 562 002125 563 002126 564 002127 566 002132 567 002136 568 002141 571 002142 572 002147 573 002151 576 002152 577 002167 578 002170 580 002173 581 002177 582 002202 585 002203 586 002212 587 002215 590 002216 591 002235 592 002237 593 002240 595 002243 596 002247 597 002252 600 002253 601 002255 604 002256 605 002273 606 002274 608 002277 609 002303 610 002306 613 002307 614 002313 617 002314 618 002336 619 002340 620 002343 621 002344 623 002347 624 002353 625 002356 628 002357 629 002364 630 002366 631 002370 634 002371 635 002410 636 002411 638 002414 639 002420 640 002423 643 002424 644 002426 645 002431 648 002432 649 002440 650 002443 653 002445 656 002450 659 002461 660 002464 662 002475 663 002477 664 002500 667 002501 670 002527 671 002531 672 002532 676 002533 678 002552 681 002553 682 002575 683 002577 684 002600 686 002603 687 002607 688 002612 691 002613 692 002621 693 002623 696 002624 697 002643 698 002644 700 002647 701 002653 702 002656 705 002657 706 002661 707 002664 710 002665 711 002673 712 002676 715 002677 716 002720 717 002721 719 002724 720 002730 721 002733 724 002734 726 002737 727 002743 728 002746 731 002747 732 002751 733 002755 734 002757 737 002760 738 003002 739 003005 740 003006 741 003007 742 003012 744 003015 745 003021 746 003024 749 003025 752 003040 754 003054 755 003056 756 003057 759 003060 762 003065 765 003114 767 003140 768 003144 770 003177 771 003201 772 003202 774 003203 777 003204 787 003211 790 003226 792 003235 794 003236 795 003242 798 003245 799 003250 800 003256 801 003261 802 003263 803 003266 804 003271 805 003274 806 003275 809 003276 810 003324 811 003325 812 003330 813 003334 814 003337 816 003342 817 003346 818 003351 822 003352 823 003356 824 003361 827 003362 830 003375 832 003411 833 003413 834 003414 837 003415 839 003422 842 003451 844 003475 845 003501 847 003534 848 003536 849 003537 851 003540 857 003541 860 003546 861 003550 862 003551 865 003552 866 003556 867 003560 869 003563 872 003564 873 003613 874 003614 875 003617 876 003623 878 003634 879 003640 880 003643 883 003644 885 003656 886 003660 887 003661 891 003662 893 003676 894 003700 895 003701 898 003702 900 003707 903 003736 905 003762 906 003766 908 004021 909 004023 910 004024 912 004025 915 004026 916 004030 917 004031 920 004032 922 004034 924 004040 925 004046 926 004051 927 004055 928 004061 931 004062 932 004066 936 004072 937 004100 938 004102 939 004105 943 004144 944 004145 945 004146 946 004147 947 004157 948 004166 949 004170 951 004172 952 004175 954 004210 956 004212 957 004214 958 004220 959 004222 960 004234 963 004236 964 004240 965 004246 966 004251 967 004254 968 004256 969 004261 970 004263 971 004266 974 004273 977 004312 979 004325 980 004327 981 004330 983 004341 987 004342 990 004353 993 004354 994 004412 995 004413 997 004414 998 004453 999 004455 1001 004462 1003 004463 1004 004473 1006 004503 1008 004506 1009 004522 1010 004536 1012 004537 1014 004564 1015 004566 1016 004567 1019 004570 1020 004601 1022 004613 1024 004621 1025 004624 1029 004634 1031 004636 1032 004640 1033 004642 1034 004646 1035 004651 1036 004655 1037 004662 1038 004667 1039 004707 1041 004710 1043 004715 1044 004727 1046 004737 1047 004742 1049 004743 1050 004751 1051 004765 1052 004766 1053 004770 1054 004772 1056 004773 1057 005007 1058 005013 1061 005016 1062 005046 1064 005047 1066 005076 1068 005123 1069 005132 1070 005134 1077 005135 1079 005140 1081 005142 1082 005143 1084 005155 1087 005156 1088 005177 1089 005200 1090 005203 1092 005207 1093 005213 1094 005216 1097 005217 1099 005231 1100 005233 1101 005234 1104 005235 1107 005251 1108 005255 1110 005310 1111 005312 1112 005313 1114 005314 1117 005315 1118 005317 1119 005320 1123 005321 1124 005331 1126 005332 1127 005334 1128 005336 1131 005337 1132 005363 1133 005364 1134 005367 1135 005373 1136 005377 1138 005402 1139 005407 1140 005412 1143 005413 1144 005417 1146 005431 1147 005433 1148 005434 1151 005435 1152 005437 1154 005441 1155 005455 1156 005471 1158 005472 1159 005513 1160 005515 1162 005516 1164 005520 1166 005535 1167 005537 1168 005540 1171 005541 1172 005543 1173 005546 1176 005547 1177 005551 1180 005555 1182 005557 1183 005564 1185 005627 1186 005630 1188 005631 1190 005664 1194 005665 1197 005710 1199 005711 1201 005751 1204 005756 1205 005773 1208 006146 1209 006156 1210 006174 1211 006215 1212 006224 1213 006263 1215 006264 1216 006341 1217 006410 1218 006412 1220 006446 1221 006460 1223 006463 1225 006561 1228 006654 1232 007022 1233 007043 1236 007044 1237 007060 1238 007063 1240 007065 1242 007071 1244 007076 1245 007100 1247 007200 1250 007201 1252 007212 1255 007230 1258 007231 1259 007244 1260 007247 1263 007251 1266 007265 1267 007271 1269 007324 1270 007326 1272 007327 1273 007331 1276 007336 1279 007365 1281 007411 1282 007415 1284 007450 1285 007452 1288 007453 1291 007460 1293 007471 1296 007500 1299 007504 1302 007533 1304 007557 1305 007563 1307 007616 1308 007620 1311 007621 1313 007623 1314 007625 1318 007725 1320 007727 1321 007737 1322 007752 1323 007761 1326 007762 1327 007774 1328 010005 1329 010010 1331 010030 1332 010033 1334 010034 1336 010035 1341 010036 1342 010040 1343 010043 1344 010046 1345 010055 1346 010062 1347 010066 1348 010070 1349 010072 1350 010075 1352 010101 1353 010104 1355 010106 1359 010111 1360 010113 1361 010114 1362 010121 1363 010133 1364 010135 1366 010136 1367 010142 1368 010146 1374 010172 1375 010202 1376 010204 1377 010210 1378 010221 1379 010223 1380 010225 1384 010227 1385 010232 1386 010236 1387 010240 1388 010252 1391 010254 1392 010262 1393 010265 1394 010270 1395 010272 1396 010275 1397 010301 1398 010302 1401 010307 1402 010317 1405 010320 1406 010335 1407 010340 1409 010342 1410 010343 1412 010357 1416 010463 1417 010473 1418 010504 1419 010506 1420 010536 1423 010537 1424 010554 1426 010557 1427 010560 1429 010574 1430 010602 1431 010632 1434 010633 1443 010641 1445 010643 1446 010647 1447 010651 1450 010652 1451 010653 1453 010660 1454 010662 1455 010670 1456 010672 1457 010673 1458 010676 1460 010677 1461 010702 1462 010714 1463 010722 1464 010730 1465 010743 1466 010744 1467 010745 1468 010761 1469 010763 1470 010764 1472 011010 1474 011012 1475 011020 1476 011024 1478 011025 1479 011033 1480 011041 1482 011052 1483 011054 1485 011063 1487 011064 1488 011072 1490 011102 1491 011104 1493 011114 1495 011115 1496 011134 1497 011137 1501 011140 1502 011146 1508 011154 1509 011165 1510 011171 1513 011172 1517 011202 1519 011205 1520 011221 1521 011236 1524 011237 1526 011254 1527 011257 1529 011264 1531 011312 1533 011334 1534 011341 1536 011374 1537 011377 1540 011400 1541 011403 1542 011405 1543 011407 1544 011410 1545 011424 1546 011434 1547 011436 1548 011441 1549 011442 1553 011465 1554 011466 1556 011470 1557 011471 1562 011512 1563 011514 1565 011522 1566 011524 1567 011527 1568 011532 1569 011543 1570 011550 1571 011554 1572 011556 1573 011560 1574 011563 1576 011567 1577 011573 1580 011575 1584 011600 1585 011602 1586 011603 1587 011612 1588 011624 1589 011626 1591 011627 1592 011633 1593 011637 1599 011663 1600 011674 1601 011700 1602 011711 1603 011713 1605 011715 1607 011734 1609 011737 1610 011740 1611 011741 1613 011742 1614 011746 1615 011755 1618 011760 1620 012007 1622 012033 1625 012034 1626 012041 1629 012043 1630 012046 1631 012047 1632 012052 1633 012066 1634 012072 1635 012073 1636 012076 1637 012105 1639 012106 1640 012110 1645 012115 1646 012123 1647 012125 1648 012136 1649 012140 1650 012145 1653 012147 1655 012154 1657 012164 1660 012165 1661 012173 1662 012176 1663 012203 1664 012204 1665 012205 1666 012224 1667 012225 1668 012226 1669 012237 1670 012247 1671 012252 1673 012253 1674 012254 1676 012272 1677 012274 1678 012276 1683 012277 1686 012313 1688 012323 1689 012340 1690 012353 1691 012360 1692 012405 1694 012415 1698 012425 1699 012426 1700 012435 1701 012453 1702 012457 1703 012461 1704 012465 1705 012467 1706 012471 1707 012473 1708 012475 1709 012477 1710 012501 1711 012524 1712 012543 1713 012612 1714 012641 1715 012645 1716 012661 1717 012700 1718 012710 1720 012723 1722 012726 1723 012732 1724 012736 1726 013065 1729 013073 1732 013131 1733 013134 1735 013174 1738 013175 1743 013203 1744 013210 1745 013213 1747 013215 1749 013230 1751 013233 1752 013247 1753 013264 1755 013265 1756 013310 1757 013313 1758 013315 1759 013320 1762 013335 1764 013405 1766 013531 1767 013542 1768 013561 1769 013603 1770 013613 1771 013652 1773 013653 1774 013656 1782 014265 1785 014335 1786 014367 1790 014370 1791 014371 1792 014401 1795 014402 1798 014413 1800 014421 1803 014431 1805 014442 1807 014450 1808 014453 1809 014455 1811 014460 1814 014500 1816 014526 1817 014542 1820 014543 1821 014551 1829 014575 1830 014606 1831 014667 1832 014732 1833 014741 1835 014742 1836 014751 ----------------------------------------------------------- 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