COMPILATION LISTING OF SEGMENT rdm_forward_subsystem_ Compiled by: Multics PL/I Compiler, Release 28d, of October 4, 1983 Compiled at: Honeywell Multics Op. - System M Compiled on: 08/23/84 0833.7 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* rdm_forward_subsystem_: a mini-subsystem created by read_mail to permit 8* entering and editing a forwarding comment (forward -add_comments). 9**/ 10 11 /* Written: 4 Oct 1983 by B. Margolin 12* Modified: 8 Aug 1984 by P. Benjamin to change ssu_$standard_requests to 13* ssu_request_tables_$standard_requests. 14**/ 15 16 /* format: style2,ifthenstmt,ifthendo,ifthen,^indnoniterdo,indcomtxt,^inditerdo,idind22 */ 17 18 rdm_forward_subsystem_: 19 proc (P_rdm_invocation_ptr, P_rfso_ptr, P_buffer_ptr, P_buffer_size, P_buffer_used, P_code); 20 21 /*** Parameters ***/ 22 23 dcl (P_rdm_invocation_ptr, P_rfso_ptr, P_buffer_ptr) 24 ptr parameter; 25 dcl (P_buffer_size, P_buffer_used) 26 fixed bin (21) parameter; 27 dcl P_code fixed bin (35) parameter; 28 29 /*** Automatic ***/ 30 31 dcl action bit (35) aligned; 32 dcl buffer_ptr ptr; 33 dcl buffer_size fixed bin (21); 34 dcl code fixed bin (35); 35 dcl default_prompt char (64) varying; 36 dcl edit_requests_len fixed bin (21); 37 dcl edit_requests_ptr ptr; 38 dcl fatal_error bit (1) aligned; 39 dcl initial_rql_len fixed bin (21); 40 dcl input_terminator_type fixed bin; 41 dcl level fixed bin; 42 dcl 1 rfi aligned like rdm_forward_invocation; 43 dcl rfso_ptr ptr; 44 dcl sci_ptr ptr; 45 46 /*** Based ***/ 47 48 dcl buffer char (buffer_size) based (buffer_ptr); 49 dcl edit_requests char (edit_requests_len) based (edit_requests_ptr); 50 dcl 1 rfso aligned like rdm_forward_subsystem_options based (rfso_ptr); 51 dcl user_initial_requests char (rfso.initial_requests_lth) based (rfso.initial_requests_ptr); 52 53 /*** Entries ***/ 54 55 dcl cu_$cl entry (bit (36) aligned); 56 dcl ( 57 ioa_$ioa_switch, 58 ioa_$rsnnl 59 ) entry () options (variable); 60 dcl pathname_ entry (char (*), char (*)) returns (char (168)); 61 dcl rdm_fwd_text_mgr_$file_input 62 entry (ptr, ptr, fixed bin (21), bit (1) aligned); 63 dcl rdm_fwd_text_mgr_$terminal_input 64 entry (ptr, fixed bin, ptr, fixed bin (21), bit (1) aligned); 65 dcl requote_string_ entry (char (*)) returns (char (*)); 66 dcl ssu_$add_request_table 67 entry (ptr, ptr, fixed bin, fixed bin (35)); 68 dcl ssu_$create_invocation 69 entry (char (*), char (*), ptr, ptr, char (*), ptr, fixed bin (35)); 70 dcl ssu_$destroy_invocation 71 entry (ptr); 72 dcl ssu_$execute_line entry (ptr, ptr, fixed bin (21), fixed bin (35)); 73 dcl ssu_$get_invocation_count 74 entry (ptr, fixed bin, fixed bin); 75 dcl ssu_$get_request_name entry (ptr) returns (char (32)); 76 dcl ssu_$get_subsystem_name 77 entry (ptr) returns (char (32)); 78 dcl ssu_$get_temp_segment entry (ptr, char (*), ptr); 79 dcl ssu_$listen entry (ptr, ptr, fixed bin (35)); 80 dcl ssu_$print_message entry () options (variable); 81 dcl ssu_$release_temp_segment 82 entry (ptr, ptr); 83 dcl ssu_$set_abbrev_info entry (ptr, ptr, ptr, bit (1) aligned); 84 dcl ssu_$set_ec_search_list 85 entry (ptr, char (32)); 86 dcl ssu_$set_ec_suffix entry (ptr, char (32)); 87 dcl ssu_$set_debug_mode entry (ptr, bit (1) aligned); 88 dcl ssu_$set_prompt entry (ptr, char (64) var); 89 dcl ssu_$set_prompt_mode entry (ptr, bit (*)); 90 dcl sub_err_ entry () options (variable); 91 92 /*** Static ***/ 93 94 dcl ( 95 emf_et_$forwarding_aborted, 96 error_table_$unimplemented_version, 97 ssu_et_$subsystem_aborted 98 ) fixed bin (35) ext static; 99 dcl iox_$error_output ptr; 100 dcl ( 101 rdm_request_tables_$forward_requests, 102 ssu_request_tables_$standard_requests 103 ) ext static; /* Data type insignificant */ 104 dcl WHOAMI char (17) int static options (constant) init ("read_mail.forward"); 105 106 /*** Miscellany ***/ 107 108 dcl (addwordno, length, min, null, substr) 109 builtin; 110 dcl cleanup condition; 111 1 1 /* BEGIN INCLUDE FILE ... rdm_data.incl.pl1 */ 1 2 /* Created: September 1983 by G. Palter */ 1 3 1 4 1 5 /* Constant data used by the read_mail subsystem */ 1 6 1 7 dcl rdm_data_$version character (32) varying external; /* current version of the subsystem */ 1 8 1 9 dcl rdm_data_$info_directory character (168) external; /* directory containing self-documenation */ 1 10 1 11 dcl rdm_data_$special_message character (256) varying external; 1 12 /* message to print on each invocation if not null */ 1 13 1 14 dcl rdm_data_$ec_suffix character (32) external; /* exec_com suffix for read_mail */ 1 15 dcl rdm_data_$ec_search_list character (32) external; /* exec_com search list */ 1 16 1 17 1 18 /* Static data used by the read_mail subsystem */ 1 19 1 20 dcl rdm_data_$first_invocation bit (1) aligned external; /* ON => this is the first invocation in this process */ 1 21 1 22 /* END INCLUDE FILE ... rdm_data.incl.pl1 */ 112 113 2 1 /* START OF: rdm_forward_invocation.incl.pl1 * * * * * * * * * * * * * * * * */ 2 2 2 3 /* Structure used internally by the read_mail forward sub-request-loop */ 2 4 2 5 /* Written: 07 Oct 1983 by B. Margolin */ 2 6 2 7 dcl 1 rdm_forward_invocation aligned based (rdm_forward_invocation_ptr), 2 8 2 type char (8), 2 9 2 sci_ptr ptr, 2 10 2 rfso_ptr ptr, /* -> rdm_forward_subsystem_options */ 2 11 2 rdm_invocation_ptr ptr, /* for the read_mail that created this forwarding invocation */ 2 12 2 area_ptr ptr, 2 13 2 text_buffer, 2 14 3 buffer_ptr ptr, 2 15 3 buffer_used fixed bin (21), 2 16 2 flags, 2 17 3 debug_mode bit (1) unaligned, 2 18 3 fill bit (1) unaligned, 2 19 3 enter_request_loop bit (1) unaligned, 2 20 3 auto_write bit (1) unaligned, 2 21 3 pad bit (31) unaligned, 2 22 2 fill_width fixed bin, 2 23 2 temp_seg_ptr ptr, 2 24 2 abort_code fixed bin (35); 2 25 2 26 dcl rdm_forward_invocation_ptr ptr; 2 27 dcl RDM_FORWARD_INVOCATION char (8) int static options (constant) init ("rdmfwdin"); 2 28 2 29 /* END OF: rdm_forward_invocation.incl.pl1 * * * * * * * * * * * * * * * * */ 114 115 3 1 /* START OF: rdm_fwd_subsystem_opts.incl.pl1 * * * * * * * * * * * * * * * * */ 3 2 3 3 /* Option structure for the read_mail forwarding subsystem. */ 3 4 3 5 /* Written: 10/3/83 by B. Margolin */ 3 6 3 7 dcl 1 rdm_forward_subsystem_options aligned based (rdm_forward_subsystem_options_ptr), 3 8 2 version char (8), 3 9 2 input_type char (4), /* terminal/file */ 3 10 2 input_file, 3 11 3 input_file_ptr ptr, 3 12 3 input_file_lth fixed bin (21), 3 13 2 request_loop_control, 3 14 3 initial_requests_ptr ptr, 3 15 3 initial_requests_lth fixed bin (21), 3 16 3 enter_request_loop bit (2) aligned, /* default/-rql/-nrql */ 3 17 2 fill_control, 3 18 3 fill_width fixed bin, /* default 62 (caller should set) */ 3 19 3 enable_filling bit (2) aligned, /* default/-fill/-no_fill */ 3 20 2 prompt_control, 3 21 3 prompt_string char (64) var, 3 22 3 enable_prompt bit (2) aligned, /* default/-prompt prompt_string/-no_prompt */ 3 23 2 abbrev_control, 3 24 3 default_profile_ptr ptr, 3 25 3 profile_ptr ptr, 3 26 3 enable_abbrev bit (1) aligned, 3 27 2 flags, 3 28 3 auto_write bit (1) unaligned, 3 29 3 pad bit (35) unaligned; 3 30 3 31 dcl rdm_forward_subsystem_options_ptr ptr; 3 32 dcl RDM_FORWARD_SUBSYSTEM_OPTIONS_VERSION_1 3 33 char (8) int static options (constant) init ("rfso_001"); 3 34 3 35 dcl (DEFAULT_PROMPT init ("00"b), 3 36 USE_PROMPT_STRING init ("01"b), 3 37 NO_PROMPT init ("10"b), 3 38 3 39 DEFAULT_FILL init ("00"b), 3 40 FILL init ("01"b), 3 41 NO_FILL init ("10"b), 3 42 3 43 DEFAULT_REQUEST_LOOP init ("00"b), 3 44 REQUEST_LOOP init ("01"b), 3 45 NO_REQUEST_LOOP init ("10"b)) 3 46 bit (2) aligned int static options (constant); 3 47 3 48 dcl (TERMINAL_INPUT init ("term"), 3 49 FILE_INPUT init ("file")) 3 50 char (4) int static options (constant); 3 51 3 52 /* END OF: rdm_fwd_subsystem_opts.incl.pl1 * * * * * * * * * * * * * * * * */ 116 117 4 1 /* BEGIN INCLUDE FILE ... rdm_fwd_text_mgr_const.incl.pl1 */ 4 2 /* Created: 7 October 1983 by B. Margolin 4 3* (copied from sdm_text_mgr_constants.incl.pl1) */ 4 4 4 5 /* Constants used by rdm_fwd_text_mgr_ to communicate the type of input terminator read from the terminal */ 4 6 4 7 dcl (NORMAL_TERMINATION initial (1), /* '.': transmit the message */ 4 8 ENTER_REQUEST_LOOP initial (2), /* '\fq': enter request loop */ 4 9 ENTER_EDITOR initial (3)) /* '\f...': enter editor */ 4 10 fixed binary static options (constant); 4 11 4 12 /* END INCLUDE FILE ... rdm_fwd_text_mgr_const.incl.pl1 */ 118 119 5 1 /* BEGIN INCLUDE FILE ... rdm_invocation.incl.pl1 */ 5 2 /* Created: September 1983 by G. Palter from portions of emf_info.incl.pl1 */ 5 3 5 4 /* Definition of a single invocation of read_mail */ 5 5 5 6 dcl 1 rdm_invocation aligned based (rdm_invocation_ptr), 5 7 2 type character (8), /* defines this structure as a read_mail invocation */ 5 8 2 sci_ptr pointer, /* -> subsystem utilities invocation data */ 5 9 2 area_ptr pointer, /* -> area to be used by the subsystem */ 5 10 5 11 2 mailbox_info, 5 12 3 mailbox_ptr pointer, /* -> mailbox structure being examined by this invocation */ 5 13 3 message_list_ptr pointer, /* -> list of read_mail specific information retained for each 5 14* message (eg: the "processed" flag) */ 5 15 3 message_chains, /*the various message chains ... */ 5 16 4 all pointer, /* ... all unexpunged messages */ 5 17 4 undeleted pointer, /* ... all undeleted messages */ 5 18 4 deleted pointer, /* ... all deleted messages */ 5 19 4 marked pointer, /* ... messages to be processed by the current request */ 5 20 4 marked_as_original pointer, /* ... messages being processed by a reply/forward request */ 5 21 3 mailbox_name character (168) varying, /* name of the mailbox (your mailbox/logbox/pathname) */ 5 22 5 23 2 current_message fixed binary, /* index of the current message; 0 => no current message */ 5 24 5 25 2 last_search_buffer, /* describes the buffer where read_mail constructs the ... */ 5 26 3 buffer_ptr pointer, /* ... the printed representation of messages in order ... */ 5 27 3 buffer_used fixed binary (21), /* ... to speed up regular expression searching */ 5 28 5 29 2 global_options, /* command line options affecting all of read_mail ... */ 5 30 3 flags, 5 31 4 acknowledge bit (1) unaligned, /* ... ON => acknowledge messages after printing */ 5 32 4 brief bit (1) unaligned, /* ... ON => shorten some messages and omit others */ 5 33 4 debug_mode bit (1) unaligned, /* ... ON => enable debugging features */ 5 34 4 pad bit (33) unaligned, 5 35 5 36 2 print_options, /* command line options affecting the print request ... */ 5 37 3 formatting_mode fixed binary, /* ... output mode for the message header, etc. */ 5 38 5 39 2 reply_options, /* command line options affecting the reply request ... */ 5 40 3 line_length fixed binary, /* ... line length to be used by send_mail for filling */ 5 41 3 indentation fixed binary, /* ... amount to indent original text when included */ 5 42 3 flags, 5 43 4 include_original bit (1) unaligned, /* ... ON => include original message text in the reply */ 5 44 4 include_authors bit (1) unaligned, /* ... ON => include original authors as recipients */ 5 45 4 include_recipients bit (1) unaligned, /* ... ON => include original recipients as recipients */ 5 46 4 include_self bit (2) unaligned, /* ... ON => include this user as a recipient of the reply if 5 47* selected by include_authors/include_recipients */ 5 48 4 fill_control bit (2) unaligned, /* ... controls message filling by send_mail */ 5 49 4 pad bit (29) unaligned; 5 50 5 51 dcl RDM_INVOCATION character (8) static options (constant) initial ("rdm_0009"); 5 52 5 53 dcl rdm_invocation_ptr pointer; 5 54 5 55 dcl rdm_area area based (rdm_invocation.area_ptr); 5 56 5 57 5 58 /* Defined settings for reply_options.include_self */ 5 59 5 60 dcl (DEFAULT_INCLUDE_SELF initial ("00"b), /* neither -include_self nor -no_include_self given */ 5 61 NO_INCLUDE_SELF initial ("01"b), /* -no_include_self explicitly given */ 5 62 INCLUDE_SELF initial ("10"b)) /* -include_self explicitly given */ 5 63 bit (2) aligned static options (constant); 5 64 5 65 /* END INCLUDE FILE ... rdm_invocation.incl.pl1 */ 120 121 6 1 /* BEGIN INCLUDE FILE ... ssu_prompt_modes.incl.pl1 */ 6 2 /* Created: 15 February 1982 by G. Palter */ 6 3 6 4 /* Values for use in calls to ssu_$set_prompt_mode to control prompting by the subsystem listener */ 6 5 6 6 dcl PROMPT bit (1) static options (constant) initial ("0"b); 6 7 dcl DONT_PROMPT bit (1) static options (constant) initial ("1"b); 6 8 6 9 dcl PROMPT_AFTER_NULL_LINES bit (2) static options (constant) initial ("01"b); 6 10 dcl DONT_PROMPT_AFTER_NULL_LINES bit (2) static options (constant) initial ("00"b); 6 11 6 12 dcl PROMPT_IF_TYPEAHEAD bit (3) static options (constant) initial ("000"b); 6 13 dcl DONT_PROMPT_IF_TYPEAHEAD bit (3) static options (constant) initial ("001"b); 6 14 6 15 /* For example: 6 16* call ssu_$set_prompt_mode (sci_ptr, PROMPT | DONT_PROMPT_AFTER_NULL_LINES | DONT_PROMPT_IF_TYPEAHEAD); */ 6 17 6 18 /* END INCLUDE FILE ... ssu_prompt_modes.incl.pl1 */ 122 123 7 1 /* BEGIN INCLUDE FILE sub_err_flags.incl.pl1 BIM 11/81 */ 7 2 /* format: style3 */ 7 3 7 4 /* These constants are to be used for the flags argument of sub_err_ */ 7 5 /* They are just "string (condition_info_header.action_flags)" */ 7 6 7 7 declare ( 7 8 ACTION_CAN_RESTART init (""b), 7 9 ACTION_CANT_RESTART init ("1"b), 7 10 ACTION_DEFAULT_RESTART 7 11 init ("01"b), 7 12 ACTION_QUIET_RESTART 7 13 init ("001"b), 7 14 ACTION_SUPPORT_SIGNAL 7 15 init ("0001"b) 7 16 ) bit (36) aligned internal static options (constant); 7 17 7 18 /* End include file */ 124 125 126 rdm_invocation_ptr = P_rdm_invocation_ptr; 127 rfso_ptr = P_rfso_ptr; 128 buffer_ptr = P_buffer_ptr; 129 buffer_size = P_buffer_size; 130 P_buffer_used, P_code = 0; 131 132 rfi.temp_seg_ptr, sci_ptr = null (); 133 134 on cleanup call cleanup_rfs (); 135 136 if rfso.version ^= RDM_FORWARD_SUBSYSTEM_OPTIONS_VERSION_1 then 137 call abort_rfs (error_table_$unimplemented_version); 138 139 rfi.type = RDM_FORWARD_INVOCATION; 140 rfi.rfso_ptr = rfso_ptr; 141 rfi.rdm_invocation_ptr = rdm_invocation_ptr; 142 rfi.area_ptr = rdm_invocation.area_ptr; 143 rfi.debug_mode = rdm_invocation.debug_mode; 144 145 /* Check for a really trivial combination of options */ 146 147 if rfso.input_type = FILE_INPUT & rfso.enter_request_loop = NO_REQUEST_LOOP 148 & (rfso.enable_filling = DEFAULT_FILL | rfso.enable_filling = NO_FILL) then do; 149 /* Just copy it and return */ 150 rfi.buffer_used = rfso.input_file_lth; 151 rfi.buffer_ptr = rfso.input_file_ptr; 152 call successful_return (addr (rfi)); 153 end; 154 155 call ssu_$create_invocation (WHOAMI, (rdm_data_$version), addr (rfi), 156 addr (rdm_request_tables_$forward_requests), pathname_ (rdm_data_$info_directory, "forward_requests"), 157 sci_ptr, code); 158 if code ^= 0 then do; 159 if rfi.debug_mode then 160 action = ACTION_CAN_RESTART; 161 else action = ACTION_DEFAULT_RESTART; 162 call sub_err_ (code, WHOAMI, action, null (), (0), "Creating forwarding subsystem invocation."); 163 call unsuccessful_return (); 164 end; 165 166 call ssu_$add_request_table (sci_ptr, addr (ssu_request_tables_$standard_requests), 2, code); 167 if code ^= 0 then 168 call ssu_$print_message (sci_ptr, code, 169 "Adding standard request table. Going on without standard ssu_ requests."); 170 code = 0; 171 172 rfi.sci_ptr = sci_ptr; 173 call ssu_$set_debug_mode (sci_ptr, (rfi.debug_mode)); 174 175 call ssu_$get_temp_segment (sci_ptr, "Comment Text", rfi.temp_seg_ptr); 176 if rfi.temp_seg_ptr = null () then call unsuccessful_return (); 177 /* Message already printed by ssu_ */ 178 179 if rfso.enable_filling = DEFAULT_FILL then 180 rfi.fill = (rfso.input_type = TERMINAL_INPUT); 181 else rfi.fill = (rfso.enable_filling = FILL); 182 rfi.fill_width = rfso.fill_width; 183 184 if rfso.enter_request_loop = DEFAULT_REQUEST_LOOP then 185 rfi.enter_request_loop = (rfso.input_type = FILE_INPUT); 186 else rfi.enter_request_loop = (rfso.enter_request_loop = REQUEST_LOOP); 187 188 if rfso.enable_prompt = NO_PROMPT then call ssu_$set_prompt_mode (sci_ptr, DONT_PROMPT); 189 else if rfso.enable_prompt = USE_PROMPT_STRING then call ssu_$set_prompt (sci_ptr, rfso.prompt_string); 190 else if rfso.enable_prompt = DEFAULT_PROMPT then do; 191 call ssu_$get_invocation_count (rdm_invocation.sci_ptr, level, (0)); 192 call ioa_$rsnnl ("^^/^a^[ (^d)^;^s^] (^a):^^2x", /* ^^ because we are generating an ioa_ string */ 193 default_prompt, (0), ssu_$get_subsystem_name (rdm_invocation.sci_ptr), 194 (level ^= 1), level, ssu_$get_request_name (rdm_invocation.sci_ptr)); 195 call ssu_$set_prompt (sci_ptr, default_prompt); 196 end; 197 198 rfi.auto_write = rfso.auto_write; 199 200 call ssu_$set_abbrev_info (sci_ptr, rfso.default_profile_ptr, rfso.profile_ptr, (rfso.enable_abbrev)); 201 call ssu_$set_ec_search_list (sci_ptr, rdm_data_$ec_search_list); 202 call ssu_$set_ec_suffix (sci_ptr, rdm_data_$ec_suffix); 203 204 /* Now start playing with the text */ 205 206 if rfso.input_type = TERMINAL_INPUT then 207 call rdm_fwd_text_mgr_$terminal_input (addr (rfi), input_terminator_type, edit_requests_ptr, 208 edit_requests_len, fatal_error); 209 else /*** if rfso.input_type = FILE_INPUT then ***/ 210 do; 211 call rdm_fwd_text_mgr_$file_input (addr (rfi), rfso.input_file_ptr, rfso.input_file_lth, fatal_error); 212 input_terminator_type = NORMAL_TERMINATION; 213 edit_requests_len = 0; 214 end; 215 if fatal_error then call unsuccessful_return (); 216 217 /*** Build the initial request line ***/ 218 219 initial_rql_len = rfso.initial_requests_lth; /* -request */ 220 if edit_requests_len > 0 then /* said \f */ 221 initial_rql_len = initial_rql_len + length ("qedx -request """"; ") + 2 * edit_requests_len; 222 /* room for requoting */ 223 else if input_terminator_type = ENTER_EDITOR then /* said \f */ 224 initial_rql_len = initial_rql_len + length ("qedx; "); 225 226 if rfi.fill then initial_rql_len = initial_rql_len + length ("fill; "); 227 initial_rql_len = initial_rql_len + length ("send"); 228 /* Just in case, leave room */ 229 230 initial_request: 231 begin; 232 dcl initial_rql char (initial_rql_len) varying; 233 234 if ^rfi.enter_request_loop /* No explicit -rql */ & (rfso.initial_requests_lth = 0) /* or -request */ 235 & (input_terminator_type = NORMAL_TERMINATION) then 236 /* Just typed . */ 237 if rfi.fill then 238 initial_rql = "fill; send"; 239 else initial_rql = "send"; 240 241 else do; 242 initial_rql = ""; 243 if input_terminator_type = ENTER_EDITOR then 244 /* \f */ 245 if edit_requests_len = 0 then 246 initial_rql = "qedx; "; 247 else do; 248 initial_rql = "qedx -request " || requote_string_ (edit_requests); 249 initial_rql = initial_rql || "; "; 250 end; 251 if rfi.fill then initial_rql = initial_rql || "fill; "; 252 if rfso.initial_requests_lth > 0 then initial_rql = initial_rql || user_initial_requests; 253 end; 254 255 if length (initial_rql) > 0 then do; 256 call ssu_$execute_line (sci_ptr, addwordno (addr (initial_rql), 1), length (initial_rql), code); 257 if code = ssu_et_$subsystem_aborted then go to SUBSYS_ABORTED; 258 end; 259 260 end initial_request; 261 262 /*** Finally, we get to the real work! ***/ 263 264 call ssu_$listen (sci_ptr, null (), code); 265 if code ^= 0 then 266 if code = ssu_et_$subsystem_aborted then 267 SUBSYS_ABORTED: 268 if rfi.abort_code = 0 then call successful_return (addr (rfi)); 269 /* send */ 270 else if rfi.abort_code = emf_et_$forwarding_aborted then call unsuccessful_return (); 271 /* quit */ 272 else call abort_rfs (rfi.abort_code); /* some other error */ 273 else do; /* can't call ssu_$abort_subsystem from outside a listener or request line */ 274 call ssu_$print_message (sci_ptr, code, "Invoking the sub-request-loop listener."); 275 if rfi.debug_mode then do; /* simulate ssu_$abort_subsystem */ 276 call ioa_$ioa_switch (iox_$error_output, "ssu_error_: Debug mode set; call cu_$cl."); 277 call cu_$cl (""b); 278 end; 279 call unsuccessful_return (); 280 end; 281 282 call successful_return (addr (rfi)); 283 284 GLOBAL_RETURN: 285 call cleanup_rfs (); 286 return; 287 288 /**** Abort the subsystem, returning the specified code ****/ 289 abort_rfs: 290 proc (P_abort_code); 291 292 dcl P_abort_code fixed bin (35); 293 294 P_code = P_abort_code; 295 go to GLOBAL_RETURN; 296 297 end abort_rfs; 298 299 /**** Normal return, set the output parameters ****/ 300 successful_return: 301 proc (P_rfi_ptr); 302 303 dcl P_rfi_ptr ptr parameter; 304 dcl 1 local_rfi aligned like rdm_forward_invocation based (P_rfi_ptr); 305 dcl rfi_buffer char (local_rfi.buffer_used) based (local_rfi.buffer_ptr); 306 307 P_buffer_used = min (local_rfi.buffer_used, buffer_size); 308 substr (buffer, 1, P_buffer_used) = substr (rfi_buffer, 1, P_buffer_used); 309 P_code = 0; 310 go to GLOBAL_RETURN; 311 312 end successful_return; 313 314 /**** Normal return when the message shouldn't be forwarded (e.g. quit) ****/ 315 unsuccessful_return: 316 proc (); 317 318 P_code = emf_et_$forwarding_aborted; 319 go to GLOBAL_RETURN; 320 321 end unsuccessful_return; 322 323 cleanup_rfs: 324 proc (); 325 326 if rfi.temp_seg_ptr ^= null then call ssu_$release_temp_segment (sci_ptr, rfi.temp_seg_ptr); 327 if sci_ptr ^= null () then call ssu_$destroy_invocation (sci_ptr); 328 return; 329 330 end cleanup_rfs; 331 332 end rdm_forward_subsystem_; 333 SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/23/84 0825.6 rdm_forward_subsystem_.pl1 >spec>on>6889>rdm_forward_subsystem_.pl1 112 1 10/27/83 2104.3 rdm_data.incl.pl1 >ldd>include>rdm_data.incl.pl1 114 2 10/27/83 2104.3 rdm_fwd_invocation.incl.pl1 >ldd>include>rdm_fwd_invocation.incl.pl1 116 3 10/27/83 2104.3 rdm_fwd_subsystem_opts.incl.pl1 >ldd>include>rdm_fwd_subsystem_opts.incl.pl1 118 4 10/27/83 2104.3 rdm_fwd_text_mgr_const.incl.pl1 >ldd>include>rdm_fwd_text_mgr_const.incl.pl1 120 5 10/27/83 2104.3 rdm_invocation.incl.pl1 >ldd>include>rdm_invocation.incl.pl1 122 6 04/13/82 1620.2 ssu_prompt_modes.incl.pl1 >ldd>include>ssu_prompt_modes.incl.pl1 124 7 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_CAN_RESTART constant bit(36) initial dcl 7-7 ref 159 ACTION_DEFAULT_RESTART constant bit(36) initial dcl 7-7 ref 161 DEFAULT_FILL constant bit(2) initial dcl 3-35 ref 147 179 DEFAULT_PROMPT constant bit(2) initial dcl 3-35 ref 190 DEFAULT_REQUEST_LOOP constant bit(2) initial dcl 3-35 ref 184 DONT_PROMPT 000002 constant bit(1) initial unaligned dcl 6-7 set ref 188* ENTER_EDITOR constant fixed bin(17,0) initial dcl 4-7 ref 223 243 FILE_INPUT 000000 constant char(4) initial unaligned dcl 3-48 ref 147 184 FILL constant bit(2) initial dcl 3-35 ref 181 NORMAL_TERMINATION constant fixed bin(17,0) initial dcl 4-7 ref 212 234 NO_FILL constant bit(2) initial dcl 3-35 ref 147 NO_PROMPT 000002 constant bit(2) initial dcl 3-35 ref 188 NO_REQUEST_LOOP constant bit(2) initial dcl 3-35 ref 147 P_abort_code parameter fixed bin(35,0) dcl 292 ref 289 294 P_buffer_ptr parameter pointer dcl 23 ref 18 128 P_buffer_size parameter fixed bin(21,0) dcl 25 ref 18 129 P_buffer_used parameter fixed bin(21,0) dcl 25 set ref 18 130* 307* 308 308 P_code parameter fixed bin(35,0) dcl 27 set ref 18 130* 294* 309* 318* P_rdm_invocation_ptr parameter pointer dcl 23 ref 18 126 P_rfi_ptr parameter pointer dcl 303 ref 300 307 308 308 P_rfso_ptr parameter pointer dcl 23 ref 18 127 RDM_FORWARD_INVOCATION 000006 constant char(8) initial unaligned dcl 2-27 ref 139 RDM_FORWARD_SUBSYSTEM_OPTIONS_VERSION_1 000004 constant char(8) initial unaligned dcl 3-32 ref 136 REQUEST_LOOP constant bit(2) initial dcl 3-35 ref 186 TERMINAL_INPUT 000001 constant char(4) initial unaligned dcl 3-48 ref 179 206 USE_PROMPT_STRING constant bit(2) initial dcl 3-35 ref 189 WHOAMI 000010 constant char(17) initial unaligned dcl 104 set ref 155* 162* abbrev_control 40 based structure level 2 dcl 50 abort_code 22 000136 automatic fixed bin(35,0) level 2 dcl 42 set ref 265 270 272* action 000100 automatic bit(35) dcl 31 set ref 159* 161* 162* addwordno builtin function dcl 108 ref 256 256 area_ptr 10 000136 automatic pointer level 2 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" set ref 142* area_ptr 4 based pointer level 2 in structure "rdm_invocation" dcl 5-6 in procedure "rdm_forward_subsystem_" ref 142 auto_write 15(03) 000136 automatic bit(1) level 3 in structure "rfi" packed unaligned dcl 42 in procedure "rdm_forward_subsystem_" set ref 198* auto_write 45 based bit(1) level 3 in structure "rfso" packed unaligned dcl 50 in procedure "rdm_forward_subsystem_" ref 198 buffer based char unaligned dcl 48 set ref 308* buffer_ptr 000102 automatic pointer dcl 32 in procedure "rdm_forward_subsystem_" set ref 128* 308 buffer_ptr 12 based pointer level 3 in structure "local_rfi" dcl 304 in procedure "successful_return" ref 308 buffer_ptr 12 000136 automatic pointer level 3 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" set ref 151* buffer_size 000104 automatic fixed bin(21,0) dcl 33 set ref 129* 307 308 buffer_used 14 based fixed bin(21,0) level 3 in structure "local_rfi" dcl 304 in procedure "successful_return" ref 307 308 buffer_used 14 000136 automatic fixed bin(21,0) level 3 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" set ref 150* cleanup 000170 stack reference condition dcl 110 ref 134 code 000105 automatic fixed bin(35,0) dcl 34 set ref 155* 158 162* 166* 167 167* 170* 256* 257 264* 265 265 274* cu_$cl 000010 constant entry external dcl 55 ref 277 debug_mode 15 000136 automatic bit(1) level 3 in structure "rfi" packed unaligned dcl 42 in procedure "rdm_forward_subsystem_" set ref 143* 159 173 275 debug_mode 103(02) based bit(1) level 4 in structure "rdm_invocation" packed unaligned dcl 5-6 in procedure "rdm_forward_subsystem_" ref 143 default_profile_ptr 40 based pointer level 3 dcl 50 set ref 200* default_prompt 000106 automatic varying char(64) dcl 35 set ref 192* 195* edit_requests based char unaligned dcl 49 set ref 248* edit_requests_len 000127 automatic fixed bin(21,0) dcl 36 set ref 206* 213* 220 220 243 248 248 edit_requests_ptr 000130 automatic pointer dcl 37 set ref 206* 248 emf_et_$forwarding_aborted 000072 external static fixed bin(35,0) dcl 94 ref 270 318 enable_abbrev 44 based bit(1) level 3 dcl 50 ref 200 enable_filling 15 based bit(2) level 3 dcl 50 ref 147 147 179 181 enable_prompt 37 based bit(2) level 3 dcl 50 ref 188 189 190 enter_request_loop 15(02) 000136 automatic bit(1) level 3 in structure "rfi" packed unaligned dcl 42 in procedure "rdm_forward_subsystem_" set ref 184* 186* 234 enter_request_loop 13 based bit(2) level 3 in structure "rfso" dcl 50 in procedure "rdm_forward_subsystem_" ref 147 184 186 error_table_$unimplemented_version 000074 external static fixed bin(35,0) dcl 94 set ref 136* fatal_error 000132 automatic bit(1) dcl 38 set ref 206* 211* 215 fill 15(01) 000136 automatic bit(1) level 3 packed unaligned dcl 42 set ref 179* 181* 226 234 251 fill_control 14 based structure level 2 dcl 50 fill_width 14 based fixed bin(17,0) level 3 in structure "rfso" dcl 50 in procedure "rdm_forward_subsystem_" ref 182 fill_width 16 000136 automatic fixed bin(17,0) level 2 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" set ref 182* flags 45 based structure level 2 in structure "rfso" dcl 50 in procedure "rdm_forward_subsystem_" flags 15 000136 automatic structure level 2 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" flags 103 based structure level 3 in structure "rdm_invocation" dcl 5-6 in procedure "rdm_forward_subsystem_" global_options 103 based structure level 2 dcl 5-6 initial_requests_lth 12 based fixed bin(21,0) level 3 dcl 50 ref 219 234 252 252 initial_requests_ptr 10 based pointer level 3 dcl 50 ref 252 initial_rql 000100 automatic varying char dcl 232 set ref 234* 239* 242* 243* 248* 249* 249 251* 251 252* 252 255 256 256 256 256 initial_rql_len 000133 automatic fixed bin(21,0) dcl 39 set ref 219* 220* 220 223* 223 226* 226 227* 227 232 input_file 4 based structure level 2 dcl 50 input_file_lth 6 based fixed bin(21,0) level 3 dcl 50 set ref 150 211* input_file_ptr 4 based pointer level 3 dcl 50 set ref 151 211* input_terminator_type 000134 automatic fixed bin(17,0) dcl 40 set ref 206* 212* 223 234 243 input_type 2 based char(4) level 2 dcl 50 ref 147 179 184 206 ioa_$ioa_switch 000012 constant entry external dcl 56 ref 276 ioa_$rsnnl 000014 constant entry external dcl 56 ref 192 iox_$error_output 000166 automatic pointer dcl 99 set ref 276* length builtin function dcl 108 ref 220 223 226 227 255 256 256 level 000135 automatic fixed bin(17,0) dcl 41 set ref 191* 192 192* local_rfi based structure level 1 dcl 304 min builtin function dcl 108 ref 307 null builtin function dcl 108 ref 132 162 162 176 264 264 326 327 pathname_ 000016 constant entry external dcl 60 ref 155 155 profile_ptr 42 based pointer level 3 dcl 50 set ref 200* prompt_control 16 based structure level 2 dcl 50 prompt_string 16 based varying char(64) level 3 dcl 50 set ref 189* rdm_data_$ec_search_list 000112 external static char(32) unaligned dcl 1-15 set ref 201* rdm_data_$ec_suffix 000110 external static char(32) unaligned dcl 1-14 set ref 202* rdm_data_$info_directory 000106 external static char(168) unaligned dcl 1-9 set ref 155* 155* rdm_data_$version 000104 external static varying char(32) dcl 1-7 ref 155 rdm_forward_invocation based structure level 1 dcl 2-7 rdm_forward_subsystem_options based structure level 1 dcl 3-7 rdm_fwd_text_mgr_$file_input 000020 constant entry external dcl 61 ref 211 rdm_fwd_text_mgr_$terminal_input 000022 constant entry external dcl 63 ref 206 rdm_invocation based structure level 1 dcl 5-6 rdm_invocation_ptr 6 000136 automatic pointer level 2 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" set ref 141* rdm_invocation_ptr 000176 automatic pointer dcl 5-53 in procedure "rdm_forward_subsystem_" set ref 126* 141 142 143 191 192 192 192 192 rdm_request_tables_$forward_requests 000100 external static fixed bin(17,0) dcl 100 set ref 155 155 request_loop_control 10 based structure level 2 dcl 50 requote_string_ 000024 constant entry external dcl 65 ref 248 rfi 000136 automatic structure level 1 dcl 42 set ref 152 152 155 155 206 206 211 211 265 265 282 282 rfi_buffer based char unaligned dcl 305 ref 308 rfso based structure level 1 dcl 50 rfso_ptr 4 000136 automatic pointer level 2 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" set ref 140* rfso_ptr 000162 automatic pointer dcl 43 in procedure "rdm_forward_subsystem_" set ref 127* 136 140 147 147 147 147 150 151 179 179 181 182 184 184 186 188 189 189 190 198 200 200 200 206 211 211 219 234 252 252 252 sci_ptr 2 based pointer level 2 in structure "rdm_invocation" dcl 5-6 in procedure "rdm_forward_subsystem_" set ref 191* 192* 192* 192* 192* sci_ptr 000164 automatic pointer dcl 44 in procedure "rdm_forward_subsystem_" set ref 132* 155* 166* 167* 172 173* 175* 188* 189* 195* 200* 201* 202* 256* 264* 274* 326* 327 327* sci_ptr 2 000136 automatic pointer level 2 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" set ref 172* ssu_$add_request_table 000026 constant entry external dcl 66 ref 166 ssu_$create_invocation 000030 constant entry external dcl 68 ref 155 ssu_$destroy_invocation 000032 constant entry external dcl 70 ref 327 ssu_$execute_line 000034 constant entry external dcl 72 ref 256 ssu_$get_invocation_count 000036 constant entry external dcl 73 ref 191 ssu_$get_request_name 000040 constant entry external dcl 75 ref 192 192 ssu_$get_subsystem_name 000042 constant entry external dcl 76 ref 192 192 ssu_$get_temp_segment 000044 constant entry external dcl 78 ref 175 ssu_$listen 000046 constant entry external dcl 79 ref 264 ssu_$print_message 000050 constant entry external dcl 80 ref 167 274 ssu_$release_temp_segment 000052 constant entry external dcl 81 ref 326 ssu_$set_abbrev_info 000054 constant entry external dcl 83 ref 200 ssu_$set_debug_mode 000062 constant entry external dcl 87 ref 173 ssu_$set_ec_search_list 000056 constant entry external dcl 84 ref 201 ssu_$set_ec_suffix 000060 constant entry external dcl 86 ref 202 ssu_$set_prompt 000064 constant entry external dcl 88 ref 189 195 ssu_$set_prompt_mode 000066 constant entry external dcl 89 ref 188 ssu_et_$subsystem_aborted 000076 external static fixed bin(35,0) dcl 94 ref 257 265 ssu_request_tables_$standard_requests 000102 external static fixed bin(17,0) dcl 100 set ref 166 166 sub_err_ 000070 constant entry external dcl 90 ref 162 substr builtin function dcl 108 set ref 308* 308 temp_seg_ptr 20 000136 automatic pointer level 2 dcl 42 set ref 132* 175* 176 326 326* text_buffer 12 based structure level 2 in structure "local_rfi" dcl 304 in procedure "successful_return" text_buffer 12 000136 automatic structure level 2 in structure "rfi" dcl 42 in procedure "rdm_forward_subsystem_" type 000136 automatic char(8) level 2 dcl 42 set ref 139* user_initial_requests based char unaligned dcl 51 ref 252 version based char(8) level 2 dcl 50 ref 136 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ACTION_CANT_RESTART internal static bit(36) initial dcl 7-7 ACTION_QUIET_RESTART internal static bit(36) initial dcl 7-7 ACTION_SUPPORT_SIGNAL internal static bit(36) initial dcl 7-7 DEFAULT_INCLUDE_SELF internal static bit(2) initial dcl 5-60 DONT_PROMPT_AFTER_NULL_LINES internal static bit(2) initial unaligned dcl 6-10 DONT_PROMPT_IF_TYPEAHEAD internal static bit(3) initial unaligned dcl 6-13 ENTER_REQUEST_LOOP internal static fixed bin(17,0) initial dcl 4-7 INCLUDE_SELF internal static bit(2) initial dcl 5-60 NO_INCLUDE_SELF internal static bit(2) initial dcl 5-60 PROMPT internal static bit(1) initial unaligned dcl 6-6 PROMPT_AFTER_NULL_LINES internal static bit(2) initial unaligned dcl 6-9 PROMPT_IF_TYPEAHEAD internal static bit(3) initial unaligned dcl 6-12 RDM_INVOCATION internal static char(8) initial unaligned dcl 5-51 rdm_area based area(1024) dcl 5-55 rdm_data_$first_invocation external static bit(1) dcl 1-20 rdm_data_$special_message external static varying char(256) dcl 1-11 rdm_forward_invocation_ptr automatic pointer dcl 2-26 rdm_forward_subsystem_options_ptr automatic pointer dcl 3-31 NAMES DECLARED BY EXPLICIT CONTEXT. GLOBAL_RETURN 001615 constant label dcl 284 ref 295 310 319 SUBSYS_ABORTED 001512 constant label dcl 265 ref 257 abort_rfs 001622 constant entry internal dcl 289 ref 136 272 cleanup_rfs 001660 constant entry internal dcl 323 ref 134 284 initial_request 001222 constant label dcl 230 rdm_forward_subsystem_ 000177 constant entry external dcl 18 successful_return 001630 constant entry internal dcl 300 ref 152 265 282 unsuccessful_return 001651 constant entry internal dcl 315 ref 163 176 215 270 279 NAME DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 152 152 155 155 155 155 166 166 206 206 211 211 256 256 265 265 282 282 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2420 2534 1735 2430 Length 3134 1735 114 364 462 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME rdm_forward_subsystem_ 276 external procedure is an external procedure. on unit on line 134 64 on unit begin block on line 230 86 begin block uses auto adjustable storage. abort_rfs internal procedure shares stack frame of external procedure rdm_forward_subsystem_. successful_return internal procedure shares stack frame of external procedure rdm_forward_subsystem_. unsuccessful_return internal procedure shares stack frame of external procedure rdm_forward_subsystem_. cleanup_rfs 70 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME begin block on line 230 000100 initial_rql begin block on line 230 rdm_forward_subsystem_ 000100 action rdm_forward_subsystem_ 000102 buffer_ptr rdm_forward_subsystem_ 000104 buffer_size rdm_forward_subsystem_ 000105 code rdm_forward_subsystem_ 000106 default_prompt rdm_forward_subsystem_ 000127 edit_requests_len rdm_forward_subsystem_ 000130 edit_requests_ptr rdm_forward_subsystem_ 000132 fatal_error rdm_forward_subsystem_ 000133 initial_rql_len rdm_forward_subsystem_ 000134 input_terminator_type rdm_forward_subsystem_ 000135 level rdm_forward_subsystem_ 000136 rfi rdm_forward_subsystem_ 000162 rfso_ptr rdm_forward_subsystem_ 000164 sci_ptr rdm_forward_subsystem_ 000166 iox_$error_output rdm_forward_subsystem_ 000176 rdm_invocation_ptr rdm_forward_subsystem_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as r_ne_as alloc_cs enter_begin leave_begin call_ext_out_desc call_ext_out call_int_this call_int_other return tra_ext alloc_auto_adj enable shorten_stack ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$cl ioa_$ioa_switch ioa_$rsnnl pathname_ rdm_fwd_text_mgr_$file_input rdm_fwd_text_mgr_$terminal_input requote_string_ ssu_$add_request_table ssu_$create_invocation ssu_$destroy_invocation ssu_$execute_line ssu_$get_invocation_count ssu_$get_request_name ssu_$get_subsystem_name ssu_$get_temp_segment ssu_$listen ssu_$print_message ssu_$release_temp_segment ssu_$set_abbrev_info ssu_$set_debug_mode ssu_$set_ec_search_list ssu_$set_ec_suffix ssu_$set_prompt ssu_$set_prompt_mode sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. emf_et_$forwarding_aborted error_table_$unimplemented_version rdm_data_$ec_search_list rdm_data_$ec_suffix rdm_data_$info_directory rdm_data_$version rdm_request_tables_$forward_requests ssu_et_$subsystem_aborted ssu_request_tables_$standard_requests LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 18 000171 126 000204 127 000210 128 000213 129 000216 130 000220 132 000222 134 000225 136 000247 139 000263 140 000265 141 000267 142 000271 143 000273 147 000300 150 000312 151 000314 152 000316 155 000322 158 000424 159 000427 161 000434 162 000437 163 000502 166 000503 167 000524 170 000552 172 000553 173 000555 175 000571 176 000616 179 000623 181 000636 182 000644 184 000646 186 000660 188 000666 189 000707 190 000723 191 000725 192 000742 195 001036 198 001047 200 001055 201 001074 202 001105 206 001116 211 001144 212 001163 213 001165 215 001166 219 001172 220 001175 223 001206 226 001213 227 001220 230 001222 232 001225 234 001236 239 001263 242 001274 243 001275 248 001313 249 001361 251 001374 252 001413 255 001432 256 001434 257 001457 260 001467 264 001470 265 001505 270 001521 272 001526 274 001531 275 001554 276 001557 277 001577 279 001610 282 001611 284 001615 286 001621 289 001622 294 001624 295 001627 300 001630 307 001632 308 001642 309 001647 310 001650 315 001651 318 001652 319 001656 323 001657 326 001665 327 001702 328 001716 ----------------------------------------------------------- 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