COMPILATION LISTING OF SEGMENT !BBBJmKfWkhqXfb Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-06-29_1714.76_Thu_mdt Options: table map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 tty_buf: proc; 14 15 16 /* Program to create ring-0 tty_buf segment 17* 18* Written Jan. 81 by J. Bongiovanni */ 19 20 21 dcl 1 cdsa like cds_args aligned; 22 dcl code fixed bin (35); 23 dcl p ptr; 24 25 26 dcl my_name char (7) init ("tty_buf") int static options (constant); 27 28 1 1 /* BEGIN INCLUDE FILE cds_args.incl.pl1 */ 1 2 1 3 dcl 1 cds_args based aligned, 1 4 2 sections (2), 1 5 3 p ptr, /* pointer to data for text/static section */ 1 6 3 len fixed bin (18), /* size of text/static section */ 1 7 3 struct_name char (32), /* name of declared structure for this section */ 1 8 2 seg_name char (32), /* name to create segment by */ 1 9 2 num_exclude_names fixed bin, /* number of names in exclude array */ 1 10 2 exclude_array_ptr ptr, /* pointer to array of exclude names */ 1 11 2 switches, /* control switches */ 1 12 3 defs_in_link bit (1) unal, /* says put defs in linkage */ 1 13 3 separate_static bit (1) unal, /* says separate static section is wanted */ 1 14 3 have_text bit (1) unal, /* ON if text section given */ 1 15 3 have_static bit (1) unal, /* ON if static section given */ 1 16 3 pad bit (32) unal; 1 17 1 18 dcl exclude_names (1) char (32) based; /* pointed to be cds_args.exclude_array_ptr */ 1 19 1 20 /* END INCLUDE FILE cds_args.incl.pl1 */ 29 2 1 /* BEGIN INCLUDE FILE ... tty_buf.incl.pl1 */ 2 2 2 3 /* Date Last Modified and Reason 2 4* Created 04/19/77 by J. Stern (from part of tty.incl.pl1) 2 5* Modified January 1978 by Robert Coren and Larry Johnson for variable-size buffers 2 6* Modified 2/6/78 by Robert Coren to make circular_queue size settable 2 7* Modified Aug 78 by J. Nicholls to move the buffer block format to a file of its own 2 8* and wtcb to its own plus other modification for ring 0 multiplexing, tty_buffer_block.incl.pl1 2 9* Modified 7/17/79 by B. Greenberg for echo negotiation meters. 2 10* Modified November 1979 by C. Hornig for MCS tracing. 2 11* Modified December 1979 by Robert Coren to add FNP channel lock meter 2 12* Modified February 1980 by Robert Coren to remove all references to circular buffer 2 13* Modified March 1980 by Robert Coren to reorganize metering information 2 14* Modified December 1980 by Robert Coren to add FNP-specific events 2 15* Modified 24 March 1982, W. Olin Sibert, to add mcs_timer support, recoverable_error_severity 2 16* Modified November 1984 by Robert Coren to add tty_area_lock 2 17**/ 2 18 2 19 dcl ttybp ptr, 2 20 tty_buf$ ext static, /* tty buffer segment */ 2 21 tty_ev fixed bin int static options (constant) init (57), /* event used for wait and notify */ 2 22 abs_buf_limit fixed bin (18) static options (constant) init (64), /* minimum number of words we will leave free */ 2 23 input_bpart fixed bin (18) static options (constant) init (2), /* fraction of bleft we will allow for input */ 2 24 output_bpart fixed bin (18) static options (constant) init (4); /* fraction of bleft we will allow for output */ 2 25 2 26 2 27 dcl qblock_size fixed bin int static options (constant) init (16); /* size in words of a delay queue block */ 2 28 dcl bsizec fixed bin int static options (constant) init (60); /* number of characters in smallest buffer */ 2 29 dcl buf_per_second fixed bin int static options (constant) init (10); /* for figuring out max. buffer size based on speed */ 2 30 2 31 dcl FNP_DUMP_PATCH_EVENT fixed bin int static options (constant) init (58); 2 32 dcl FNP_METER_EVENT fixed bin int static options (constant) init (59); 2 33 dcl TTY_AREA_LOCK_EVENT bit (36) aligned int static options (constant) init ("74"b3); 2 34 2 35 dcl 1 tty_buf aligned based (ttybp), /* declaration of tty buffer seg */ 2 36 2 slock bit (36), /* per system lock */ 2 37 2 absorig fixed bin (24), /* abs address of this seg */ 2 38 2 borig bit (18), /* index of start of buffer area */ 2 39 2 bleft fixed bin (18), /* words left in pool */ 2 40 2 free bit (18), /* pointer to start of free pool */ 2 41 2 fnp_config_flags (8) bit (1) unal, /* flag(i) ON if fnp(i) configured */ 2 42 2 padb1 bit (28) unaligned, 2 43 2 lct_ptr ptr, /* pointer to logical channel table */ 2 44 2 45 2 nrawread fixed bin (35), /* number of raw chars input, total */ 2 46 2 nrawwrite fixed bin (35), /* number of raw characters output */ 2 47 2 ninchars fixed bin (35), /* total input chars after conversion */ 2 48 2 noutchars fixed bin (35), /* total output chars before conversion */ 2 49 2 readblocked fixed bin (35), /* number of times go input blocked */ 2 50 2 nblocked fixed bin (35), /* number of times process output blocked */ 2 51 2 minbuf fixed bin (18), /* min output buffer size */ 2 52 2 totbuf fixed bin (35), /* divide by nblocked to get ave buffer size */ 2 53 2 54 2 preconverted fixed bin (35), /* number of converted chars held in tty_buf */ 2 55 2 input_restart fixed bin, /* number of times tty_read had to start over */ 2 56 2 output_restart fixed bin, /* number of times tty_write has had to start over */ 2 57 2 output_buffer_overflow fixed bin, /* number of times tty_write has run out of buffers */ 2 58 2 read_time fixed bin (71), /* total time spent in tty_read */ 2 59 2 write_time fixed bin (71), /* total time spent in tty_write */ 2 60 2 61 2 read_calls fixed bin (35), /* number of calls to tty_read */ 2 62 2 write_calls fixed bin (35), /* number of calls to tty_write */ 2 63 2 bfx fixed bin, /* used in calls to iobm */ 2 64 2 nquits fixed bin (35), /* number of quits */ 2 65 2 space_needed_data, 2 66 3 space_needed bit (1) unal, /* space_needed bit on in at least 1 lcte */ 2 67 3 space_needed_calls fixed bin (34) unal, /* meter of uses of this facility */ 2 68 2 space_lock_count fixed bin (35), /* count of times tty_buf.slock locked */ 2 69 2 space_lock_wait_count fixed bin (35), /* count of times necessary to loop to lock it */ 2 70 2 space_lock_wait_time fixed bin (35), /* total time looped trying to lock it */ 2 71 2 72 2 alloc_calls fixed bin (35), /* total number of allocations performed in tty_buf */ 2 73 2 free_calls fixed bin (35), /* total number of freeings in tty_buf */ 2 74 2 alloc_time fixed bin (35), /* time spent masked in tty_space_man$get entries */ 2 75 2 free_time fixed bin (35), /* time spent masked in tty_space_man$free entries */ 2 76 2 total_alloc_steps fixed bin (35), /* number of steps thru free chain while doing above */ 2 77 2 alloc_failures fixed bin (35), /* number of unsuccessful attempts to allocate space */ 2 78 2 cumulative_input_space fixed bin (71), /* cumulative amount of space allocated for input */ 2 79 2 80 2 cumulative_output_space fixed bin (71), /* cumulative amount of space allocated for output */ 2 81 2 cumulative_control_space fixed bin (71), /* cumulative amount of space allocated by tty_space_man$get_space */ 2 82 2 input_space_updates fixed bin (35), /* number of increments to cumulative_input_space */ 2 83 2 output_space_updates fixed bin (35), /* number of increments to cumulative_output_space */ 2 84 2 control_space_updates fixed bin (35), /* number of increments to cumulative_control_space */ 2 85 2 minimum_free_space fixed bin (18), /* smallest amount of free space ever available */ 2 86 2 87 2 current_input_space fixed bin (18), /* amount of space currently allocated for input */ 2 88 2 current_output_space fixed bin (18), /* amount of space currently allocated for output */ 2 89 2 current_control_space fixed bin (18), /* amount of space currently allocated by get_space */ 2 90 2 tty_lock_calls fixed bin (35), /* number of calls to tty_lock$lock entries */ 2 91 2 found_channel_locked fixed bin (35), /* number of times tty_lock found channel already locked */ 2 92 2 max_wait_time fixed bin (35), /* longest time waited for any channel lock */ 2 93 2 total_wait_time fixed bin (71), /* total amount of time spent waiting for channel locks */ 2 94 2 95 2 echo_neg_time fixed bin (71), /* cumulative time spent doing echo negotiation */ 2 96 2 echo_neg_interrupts fixed bin (35), /* Echo-negotiated shipments */ 2 97 2 echo_neg_r0_chars fixed bin (35), /* Chars echoed by ring 0 */ 2 98 2 echo_neg_mux_chars fixed bin (35), /* Chars echoed by mux */ 2 99 2 echo_neg_sndopt_restarts fixed bin (35), /* Echo reinits */ 2 100 2 echo_neg_mux_nonecho fixed bin (35), 2 101 2 echo_neg_entries fixed bin (35), /* Entries into negotiate */ 2 102 2 103 2 echo_neg_mux_inhibit bit (1) aligned, /* For testing */ 2 104 2 n_queued_interrupts fixed bin (35), /* number of interrupts queued by tty_lock */ 2 105 2 trace unaligned, /* tracing information */ 2 106 3 flags, 2 107 4 enable bit, /* global tracing control */ 2 108 4 default_mode bit, /* whether to trace channels by default */ 2 109 4 read bit, /* read */ 2 110 4 write bit, /* write */ 2 111 4 data bit, /* buffers on reads and writes */ 2 112 4 control bit, /* control, priv_control, and hpriv_control */ 2 113 4 modes bit, /* (get set check)_modes */ 2 114 4 interrupt bit, /* interrupt, interrupt_later */ 2 115 4 init bit, /* init_multiplexer, terminate_multiplexer */ 2 116 4 start bit, /* start, stop */ 2 117 4 shutdown bit, /* shutdown */ 2 118 4 space_man bit, /* tty_space_man$* */ 2 119 4 pad_flags bit (6), 2 120 3 data_offset bit (18), /* offset of tracing data */ 2 121 2 122 2 recoverable_error_severity fixed bin, /* Syserr severity for recoverable MCS errors */ 2 123 2 124 2 timer_lock bit (36) aligned, /* Lock owned by mcs_timer */ 2 125 2 next_timer_offset bit (18) aligned, /* Offset of next timer to come due */ 2 126 2 timer_count fixed bin, /* Number of timers outstanding */ 2 127 2 timer_process bit (36) aligned, /* Who is doing timers? */ 2 128 2 129 2 timer_ev_chn fixed bin (71), /* How get get him */ 2 130 2 timer_lock_wait_time fixed bin (71), /* CPU time spent spinning on timer lock */ 2 131 2 132 2 timer_lock_count fixed bin (35), /* Number of times timer lock locked */ 2 133 2 timer_lock_wait_count fixed bin (35), /* Number of times imer lock waited on */ 2 134 2 timer_call_time fixed bin (71), /* CPU time spent in call side timer operations */ 2 135 2 136 2 timer_polling_time fixed bin (71), /* CPU time spent polling (including channel_manager) */ 2 137 2 timer_set_calls fixed bin (35), /* Number of calls to mcs_timer$set, set_wired */ 2 138 2 timer_reset_calls fixed bin (35), /* Number of calls to mcs_timer$reset, reset_wired */ 2 139 2 140 2 timer_change_calls fixed bin (35), /* Number of calls to mcs_timer$change, change_wired */ 2 141 2 timer_poll_calls fixed bin (35), /* Number of calls to mcs_timer$poll */ 2 142 2 timer_error_calls fixed bin (35), /* Number of mcs_timer calls ending with recoverable errors */ 2 143 2 timer_duplicate_pollings fixed bin (35), /* Number of timer polling found in progress on other CPU */ 2 144 2 145 2 tty_area_lock like hc_fast_lock, /* to prevent contention in allocating/freeing in tty_area */ 2 146 2 147 2 pad2 (13) fixed bin (35), 2 148 2 149 2 free_space fixed bin; /* start of free space region */ 2 150 2 151 3 1 /* BEGIN INCLUDE FILE...hc_fast_lock.incl.pl1 */ 3 2 3 3 /* Created November 1984 by Robert Coren to replace hc_lock.incl.pl1 */ 3 4 3 5 /* Lock format suitable for use with lock$lock_fast, unlock_fast */ 3 6 3 7 /* format: style3 */ 3 8 3 9 declare lock_ptr pointer; 3 10 declare 1 hc_fast_lock aligned based (lock_ptr), 3 11 2 pid bit (36) aligned, /* holder of lock */ 3 12 2 event bit (36) aligned, /* event associated with lock */ 3 13 2 flags aligned, 3 14 3 notify_sw bit (1) unaligned, 3 15 3 pad bit (35) unaligned; /* certain locks use this pad, like dirs */ 3 16 3 17 /* END INCLUDE FILE...hc_fast_lock.incl.pl1 */ 2 152 2 153 2 154 /* END INCLUDE FILE ... tty_buf.incl.pl1 */ 30 31 32 dcl com_err_ entry options (variable); 33 dcl create_data_segment_ entry (ptr, fixed bin(35)); 34 dcl get_temp_segment_ entry (char(*), ptr, fixed bin(35)); 35 dcl release_temp_segment_ entry entry options(variable); 36 37 dcl cleanup condition; 38 39 40 41 ttybp = null(); 42 on cleanup call release_temp_segment_ (my_name, ttybp, code); 43 44 call get_temp_segment_ (my_name, ttybp, code); 45 if code ^= 0 then do; 46 call com_err_ (code, my_name, "Getting temp segment"); 47 return; 48 end; 49 50 unspec (cdsa) = ""b; 51 cdsa.have_text = "1"b; 52 cdsa.p (1) = ttybp; 53 cdsa.len (1) = size (tty_buf); 54 cdsa.struct_name (1), cdsa.seg_name = my_name; 55 cdsa.num_exclude_names = 0; 56 cdsa.exclude_array_ptr = null(); 57 58 call create_data_segment_ (addr (cdsa), code); 59 if code ^= 0 then call com_err_ (code, my_name, "Creating data segment"); 60 61 call release_temp_segment_ (my_name, ttybp, code); 62 63 end tty_buf; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 06/29/00 1714.7 !BBBJmKfWkhqXfb.pl1 >udd>sm>ds>w>ml>tty_buf.cds 29 1 04/01/76 2309.5 cds_args.incl.pl1 >ldd>incl>cds_args.incl.pl1 30 2 01/06/85 1522.1 tty_buf.incl.pl1 >ldd>incl>tty_buf.incl.pl1 2-152 3 01/06/85 1522.1 hc_fast_lock.incl.pl1 >ldd>incl>hc_fast_lock.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. cds_args based structure level 1 dcl 1-3 cdsa 000100 automatic structure level 1 dcl 21 set ref 50* 58 58 cleanup 000154 stack reference condition dcl 37 ref 42 code 000145 automatic fixed bin(35,0) dcl 22 set ref 42* 44* 45 46* 58* 59 59* 61* com_err_ 000014 constant entry external dcl 32 ref 46 59 create_data_segment_ 000016 constant entry external dcl 33 ref 58 exclude_array_ptr 42 000100 automatic pointer level 2 dcl 21 set ref 56* get_temp_segment_ 000020 constant entry external dcl 34 ref 44 have_text 44(02) 000100 automatic bit(1) level 3 packed packed unaligned dcl 21 set ref 51* hc_fast_lock based structure level 1 dcl 3-10 len 2 000100 automatic fixed bin(18,0) array level 3 dcl 21 set ref 53* lock_ptr 000152 automatic pointer dcl 3-9 ref 3-10 3-10 3-10 3-10 3-10 3-10 my_name 000000 constant char(7) initial packed unaligned dcl 26 set ref 42* 44* 46* 54 59* 61* num_exclude_names 40 000100 automatic fixed bin(17,0) level 2 dcl 21 set ref 55* p 000100 automatic pointer array level 3 dcl 21 set ref 52* release_temp_segment_ 000022 constant entry external dcl 35 ref 42 61 sections 000100 automatic structure array level 2 dcl 21 seg_name 30 000100 automatic char(32) level 2 dcl 21 set ref 54* struct_name 3 000100 automatic char(32) array level 3 dcl 21 set ref 54* switches 44 000100 automatic structure level 2 dcl 21 tty_buf based structure level 1 dcl 2-35 ref 53 ttybp 000150 automatic pointer dcl 2-19 set ref 41* 42* 44* 52 53 61* 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 2-35 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. FNP_DUMP_PATCH_EVENT constant fixed bin(17,0) initial dcl 2-31 FNP_METER_EVENT constant fixed bin(17,0) initial dcl 2-32 TTY_AREA_LOCK_EVENT constant bit(36) initial dcl 2-33 abs_buf_limit constant fixed bin(18,0) initial dcl 2-19 bsizec constant fixed bin(17,0) initial dcl 2-28 buf_per_second constant fixed bin(17,0) initial dcl 2-29 exclude_names based char(32) array packed unaligned dcl 1-18 input_bpart constant fixed bin(18,0) initial dcl 2-19 output_bpart constant fixed bin(18,0) initial dcl 2-19 p 000146 automatic pointer dcl 23 qblock_size constant fixed bin(17,0) initial dcl 2-27 tty_buf$ 000012 external static fixed bin(17,0) dcl 2-19 tty_ev constant fixed bin(17,0) initial dcl 2-19 NAME DECLARED BY EXPLICIT CONTEXT. tty_buf 000030 constant entry external dcl 13 NAMES DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 58 58 null builtin function ref 41 56 size builtin function ref 53 unspec builtin function ref 50 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 362 406 257 372 Length 3612 257 24 3167 103 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tty_buf 144 external procedure is an external procedure. on unit on line 42 78 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tty_buf 000100 cdsa tty_buf 000145 code tty_buf 000146 p tty_buf 000150 ttybp tty_buf 000152 lock_ptr tty_buf THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac enable_op ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ create_data_segment_ get_temp_segment_ release_temp_segment_ NO EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 13 000027 41 000035 42 000037 44 000075 45 000116 46 000120 47 000147 50 000150 51 000153 52 000155 53 000157 54 000161 55 000171 56 000172 58 000174 59 000207 61 000235 63 000256 Object Segment >udd>sm>ds>w>ml>tty_buf Created on 06/29/00 1714.8 mdt Thu by Schroth.SysMaint.m using create_data_segment_, Version II of Friday, May 18, 1990 Object Text Defs Link Symb Static Start 0 0 152 1264 1274 1274 Length 1575 152 1112 10 265 0 81 Definitions: segname: tty_buf text|1 absorig text|40 alloc_calls text|45 alloc_failures text|42 alloc_time text|32 bfx text|3 bleft text|2 borig text|56 control_space_updates text|52 cumulative_control_space text|46 cumulative_input_space text|50 cumulative_output_space text|62 current_control_space text|60 current_input_space text|61 current_output_space text|77 echo_neg_entries text|72 echo_neg_interrupts text|74 echo_neg_mux_chars text|100 echo_neg_mux_inhibit text|76 echo_neg_mux_nonecho text|73 echo_neg_r0_chars text|75 echo_neg_sndopt_restarts text|70 echo_neg_time text|5 fnp_config_flags text|64 found_channel_locked text|4 free text|41 free_calls text|150 free_space text|43 free_time text|21 input_restart text|54 input_space_updates text|6 lct_ptr text|65 max_wait_time text|16 minbuf text|57 minimum_free_space text|101 n_queued_interrupts text|15 nblocked text|105 next_timer_offset text|12 ninchars text|13 noutchars text|33 nquits text|10 nrawread text|11 nrawwrite text|23 output_buffer_overflow text|22 output_restart text|55 output_space_updates text|133 pad2 text|20 preconverted text|30 read_calls text|24 read_time text|14 readblocked text|103 recoverable_error_severity text|0 slock text|35 space_lock_count text|36 space_lock_wait_count text|37 space_lock_wait_time text|34 space_needed_data symb|0 symbol_table text|116 timer_call_time text|124 timer_change_calls text|106 timer_count text|127 timer_duplicate_pollings text|126 timer_error_calls text|110 timer_ev_chn text|104 timer_lock text|114 timer_lock_count text|115 timer_lock_wait_count text|112 timer_lock_wait_time text|125 timer_poll_calls text|120 timer_polling_time text|107 timer_process text|123 timer_reset_calls text|122 timer_set_calls text|44 total_alloc_steps text|66 total_wait_time text|17 totbuf text|102 trace text|130 tty_area_lock text|63 tty_lock_calls text|31 write_calls text|26 write_time No Links. ----------------------------------------------------------- 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