COMPILATION LISTING OF SEGMENT dm_init_from_hardcore_ Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 05/17/85 1456.4 mst Fri Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* 9* Program to initialize per-system variables from hardcore variables. 10* 11* For testing, this program creates a dummy (user-ring) dm_journal_seg_ 12* and initializes it. Testing is determined by the ring of execution. 13**/ 14 /* HISTORY: 15* 16*Written by J. Bongiovanni, 11/15/82. 17*Modified: 18*08/06/83 by Lee A. Newcomb: removed obsolete code args from calls 19* to dm_per_system_ entries. 20*11/29/84 by Stanford S. Cox: MAIN: Renamed dm_=, Chg to use initiate_file_, 21* removed segfault handler, added cleanup handler. ER & FINISH: Added. 22*12/06/84 by Stanford S. Cox: FINISH: Chg to terminate journal seg before 23* resetting validation level. 24*05/10/85 by R. Michael Tague: Changed to use dm_hcs_$get_n_journals. 25**/ 26 27 /* format: style4,indattr,ifthenstmt,ifthen,^indcomtxt,idind33 */ 28 29 dm_init_from_hardcore_: 30 proc (p_code); 31 32 /* Parameter */ 33 34 dcl p_code fixed bin (35); /* Standard return code */ 35 36 /* Automatic */ 37 38 dcl journalx fixed bin; 39 dcl pagex fixed bin; 40 dcl save_level fixed bin; 41 42 /* Static */ 43 44 dcl END_OF_TIME fixed bin (71) int static options (constant) init (111111111111111111111111111111111111111111111111111111b); 45 dcl JOURNAL_DIR char (4) int static options (constant) init (">sl1"); 46 dcl JOURNAL_SEG char (15) int static options (constant) init ("dm_journal_seg_"); 47 dcl JOURNAL_WAIT_EVENT bit (36) aligned int static options (constant) init ("666000000000"b3); 48 dcl MAX_DM_PAGES fixed bin int static options (constant) init (2048); 49 dcl PER_ASTE_POOL (0:3) fixed bin int static options (constant) init (1000, 500, 200, 50); 50 51 /* Entry */ 52 53 dcl cu_$level_get entry (fixed bin); 54 dcl cu_$level_set entry (fixed bin); 55 dcl dm_hcs_$get_n_journals entry () returns (fixed bin); 56 dcl dm_per_system_$create entry (char (*), ptr); 57 dcl get_ring_ entry () returns (fixed bin (3)); 58 dcl initiate_file_ entry (char (*), char (*), bit (*), ptr, fixed bin (24), fixed bin (35)); 59 dcl terminate_file_ entry (ptr, fixed bin (24), bit (*), fixed bin (35)); 60 61 /* External */ 62 63 dcl dm_system_data_$bj_max_n_journals fixed bin external; 64 dcl sys_info$data_management_ringno fixed bin external; 65 66 /* Builtin */ 67 68 dcl addr builtin; 69 dcl null builtin; 70 dcl rel builtin; 71 72 /* Condition */ 73 74 dcl cleanup condition; 75 76 p_code = 0; 77 78 if get_ring_ () = sys_info$data_management_ringno then do; /* "Live" */ 79 call cu_$level_get (save_level); 80 on cleanup call FINISH (); 81 call cu_$level_set (get_ring_ ()); 82 call initiate_file_ (JOURNAL_DIR, JOURNAL_SEG, R_ACCESS, dm_journal_segp, (0), p_code); 83 call cu_$level_set (save_level); 84 revert cleanup; 85 if dm_journal_segp = null () then call ERROR_RETURN; 86 p_code = 0; 87 dm_system_data_$bj_max_n_journals = dm_hcs_$get_n_journals (); 88 call FINISH (); 89 end; 90 91 else do; /* "Test" */ 92 93 call dm_per_system_$create (JOURNAL_SEG, dm_journal_segp); 94 dm_journal.n_journals = dm_system_data_$bj_max_n_journals; 95 dm_journal.max_held_pages_mem = MAX_DM_PAGES; 96 dm_journal.per_aste_pool (*).threshold = PER_ASTE_POOL (*); 97 dm_journal.free_list_relp = rel (addr (dm_journal.page_entry)); 98 dm_journal.wait_event = JOURNAL_WAIT_EVENT; 99 do journalx = 1 to dm_journal.n_journals; 100 dm_journal.per_journal (journalx).time_stamp = END_OF_TIME; 101 end; 102 do pagex = 1 to dm_journal.max_held_pages_mem - 1; 103 dm_journal.page_entry (pagex).fp = rel (addr (dm_journal.page_entry (pagex + 1))); 104 end; 105 end; 106 107 MAIN_RETURN: 108 return; 109 110 FINISH: 111 proc (); 112 113 call terminate_file_ (dm_journal_segp, (0), "0"b, p_code); 114 call cu_$level_set (save_level); 115 end FINISH; 116 117 ERROR_RETURN: 118 proc (); 119 120 call FINISH (); 121 goto MAIN_RETURN; 122 end ERROR_RETURN; 1 1 /* START OF: dm_journal_seg_.incl.pl1 October 1982 * * * * * * * * * * * * * * * * */ 1 2 /* modified June 1982 by M. Pandolf for more meters * * * * * * * */ 1 3 1 4 dcl dm_journal_seg_$ external; 1 5 1 6 dcl dm_journal_segp ptr; 1 7 dcl dm_per_journalp ptr; 1 8 dcl dm_per_journal_arrayp ptr; 1 9 dcl dm_page_entryp ptr; 1 10 1 11 dcl n_dm_journals fixed bin; 1 12 dcl max_dm_pages fixed bin; 1 13 1 14 1 15 dcl 1 dm_journal aligned based (dm_journal_segp), 1 16 1 17 2 lock bit (36) aligned, /* Lock for manipulating journal entries */ 1 18 2 wait_event bit (36) aligned, /* Wait Event for lock */ 1 19 2 notify_sw bit (1) aligned, 1 20 1 21 2 n_journals fixed bin, /* Number of journals */ 1 22 2 n_journals_inuse fixed bin, /* Number of journals in use now */ 1 23 2 max_held_pages_mem fixed bin, /* Maximum number of pages held in memory */ 1 24 2 n_held_pages_mem fixed bin, /* Number of pages held in memory */ 1 25 2 max_held_per_journal fixed bin, /* max_held_pages_mem / n_journals_inuse */ 1 26 2 per_aste_pool (0:3) aligned, 1 27 3 threshold fixed bin, /* Maximum number of active segments */ 1 28 3 n_active fixed bin, /* Number currently active */ 1 29 2 free_list_relp bit (18) aligned, /* Free entry list first ptr */ 1 30 2 synch_write_calls fixed bin (35), /* Number of calls to check write */ 1 31 2 synch_write_holds fixed bin (35), /* Number of times page held for call */ 1 32 2 synch_write_no_stamp 1 33 fixed bin (35), /* Number of times page had null DM stamp */ 1 34 2 synch_write_inv_vers 1 35 fixed bin (35), /* Number of times page had invalid DM stamp */ 1 36 2 synch_write_inv_ix 1 37 fixed bin (35), /* Number of times page had invalid BJ index */ 1 38 2 synch_write_inv_time 1 39 fixed bin (35), /* Number of times page had future time stamp */ 1 40 2 synch_write_tosses fixed bin (35), /* Number of times page tossed because of threshold */ 1 41 2 unlink_calls fixed bin (35), /* Number of calls to unlink all entries to a journal */ 1 42 2 unlink_steps fixed bin (35), /* Number of CMEs unlinked */ 1 43 2 activate_calls fixed bin (35), /* Number of times synch segment activated */ 1 44 2 deactivate_calls fixed bin (35), /* Number of times synch segment deactivated */ 1 45 2 activate_denied fixed bin (35), /* Number of times activation threshold exceeded */ 1 46 2 set_stamp_calls fixed bin (35), /* Number of times called to set time stamp */ 1 47 2 allocate_calls fixed bin (35), /* Number of times called to allocate a journal */ 1 48 2 free_calls fixed bin (35), /* Number of times called to free a journal */ 1 49 1 50 2 per_journal (n_dm_journals refer (dm_journal.n_journals)) aligned like dm_per_journal, 1 51 2 page_entry (max_dm_pages refer (dm_journal.max_held_pages_mem)) aligned like dm_page_entry; 1 52 1 53 1 54 dcl 1 dm_per_journal_array (dm_journal.n_journals) aligned like dm_per_journal based (dm_per_journal_arrayp); 1 55 1 56 dcl 1 dm_per_journal aligned based (dm_per_journalp), /* One entry per DM journal */ 1 57 2 time_stamp fixed bin (71), /* Pages before this time can be written */ 1 58 2 n_held fixed bin, /* Number of pages held in memory */ 1 59 2 uid bit (36) aligned, /* Unique ID for owner - ""b => not used */ 1 60 2 access_class bit (72) aligned, /* Access Class of Owner */ 1 61 2 entry_relp bit (18) aligned, /* Pointer to list of pages held for this journal */ 1 62 2 pad bit (36) aligned; 1 63 1 64 1 65 dcl 1 dm_page_entry aligned based (dm_page_entryp), 1 66 2 fp bit (18) unal, /* Forward pointer */ 1 67 2 bp bit (18) unal, /* Backward pointer */ 1 68 2 cme_relp bit (18) unal, /* Rel ptr -> CME */ 1 69 2 journal_relp bit (18) unal; /* Rel ptr -> dm_per_journal */ 1 70 1 71 1 72 /* END OF: dm_journal_seg_.incl.pl1 * * * * * * * * * * * * * * * * */ 1 73 123 124 /* BEGIN INCLUDE FILE ... access_mode_values.incl.pl1 2 2* 2 3* Values for the "access mode" argument so often used in hardcore 2 4* James R. Davis 26 Jan 81 MCR 4844 2 5* Added constants for SM access 4/28/82 Jay Pattin 2 6* Added text strings 03/19/85 Chris Jones 2 7**/ 2 8 2 9 2 10 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 2 11 dcl ( 2 12 N_ACCESS init ("000"b), 2 13 R_ACCESS init ("100"b), 2 14 E_ACCESS init ("010"b), 2 15 W_ACCESS init ("001"b), 2 16 RE_ACCESS init ("110"b), 2 17 REW_ACCESS init ("111"b), 2 18 RW_ACCESS init ("101"b), 2 19 S_ACCESS init ("100"b), 2 20 M_ACCESS init ("010"b), 2 21 A_ACCESS init ("001"b), 2 22 SA_ACCESS init ("101"b), 2 23 SM_ACCESS init ("110"b), 2 24 SMA_ACCESS init ("111"b) 2 25 ) bit (3) internal static options (constant); 2 26 2 27 /* The following arrays are meant to be accessed by doing either 1) bin (bit_value) or 2 28* 2) divide (bin_value, 2) to come up with an index into the array. */ 2 29 2 30 dcl SEG_ACCESS_MODE_NAMES (0:7) init ("null", "W", "E", "EW", "R", "RW", "RE", "REW") char (4) internal 2 31 static options (constant); 2 32 2 33 dcl DIR_ACCESS_MODE_NAMES (0:7) init ("null", "A", "M", "MA", "S", "SA", "SM", "SMA") char (4) internal 2 34 static options (constant); 2 35 2 36 dcl ( 2 37 N_ACCESS_BIN init (00000b), 2 38 R_ACCESS_BIN init (01000b), 2 39 E_ACCESS_BIN init (00100b), 2 40 W_ACCESS_BIN init (00010b), 2 41 RW_ACCESS_BIN init (01010b), 2 42 RE_ACCESS_BIN init (01100b), 2 43 REW_ACCESS_BIN init (01110b), 2 44 S_ACCESS_BIN init (01000b), 2 45 M_ACCESS_BIN init (00010b), 2 46 A_ACCESS_BIN init (00001b), 2 47 SA_ACCESS_BIN init (01001b), 2 48 SM_ACCESS_BIN init (01010b), 2 49 SMA_ACCESS_BIN init (01011b) 2 50 ) fixed bin (5) internal static options (constant); 2 51 2 52 /* END INCLUDE FILE ... access_mode_values.incl.pl1 */ 124 125 /* BEGIN INCLUDE FILE ... terminate_file.incl.pl1 */ 3 2 /* format: style2,^inddcls,idind32 */ 3 3 3 4 declare 1 terminate_file_switches based, 3 5 2 truncate bit (1) unaligned, 3 6 2 set_bc bit (1) unaligned, 3 7 2 terminate bit (1) unaligned, 3 8 2 force_write bit (1) unaligned, 3 9 2 delete bit (1) unaligned; 3 10 3 11 declare TERM_FILE_TRUNC bit (1) internal static options (constant) initial ("1"b); 3 12 declare TERM_FILE_BC bit (2) internal static options (constant) initial ("01"b); 3 13 declare TERM_FILE_TRUNC_BC bit (2) internal static options (constant) initial ("11"b); 3 14 declare TERM_FILE_TERM bit (3) internal static options (constant) initial ("001"b); 3 15 declare TERM_FILE_TRUNC_BC_TERM bit (3) internal static options (constant) initial ("111"b); 3 16 declare TERM_FILE_FORCE_WRITE bit (4) internal static options (constant) initial ("0001"b); 3 17 declare TERM_FILE_DELETE bit (5) internal static options (constant) initial ("00001"b); 3 18 3 19 /* END INCLUDE FILE ... terminate_file.incl.pl1 */ 125 126 127 end dm_init_from_hardcore_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/17/85 1328.5 dm_init_from_hardcore_.pl1 >spec>online>pbf-05/17/85>dm_init_from_hardcore_.pl1 123 1 09/07/83 1610.6 dm_journal_seg_.incl.pl1 >ldd>include>dm_journal_seg_.incl.pl1 124 2 04/11/85 1452.6 access_mode_values.incl.pl1 >ldd>include>access_mode_values.incl.pl1 125 3 04/06/83 1239.4 terminate_file.incl.pl1 >ldd>include>terminate_file.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. END_OF_TIME 000012 constant fixed bin(71,0) initial dcl 44 ref 100 JOURNAL_DIR 000011 constant char(4) initial unaligned dcl 45 set ref 82* JOURNAL_SEG 000005 constant char(15) initial unaligned dcl 46 set ref 82* 93* JOURNAL_WAIT_EVENT constant bit(36) initial dcl 47 ref 98 MAX_DM_PAGES constant fixed bin(17,0) initial dcl 48 ref 95 PER_ASTE_POOL 000001 constant fixed bin(17,0) initial array dcl 49 ref 96 R_ACCESS 000000 constant bit(3) initial unaligned dcl 2-11 set ref 82* addr builtin function dcl 68 ref 97 103 cleanup 000104 stack reference condition dcl 74 ref 80 84 cu_$level_get 000010 constant entry external dcl 53 ref 79 cu_$level_set 000012 constant entry external dcl 54 ref 81 83 114 dm_hcs_$get_n_journals 000014 constant entry external dcl 55 ref 87 dm_journal based structure level 1 dcl 1-15 dm_journal_segp 000112 automatic pointer dcl 1-6 set ref 82* 85 93* 94 95 96 97 97 98 99 100 102 103 103 113* dm_page_entry based structure level 1 dcl 1-65 dm_per_journal based structure level 1 dcl 1-56 dm_per_system_$create 000016 constant entry external dcl 56 ref 93 dm_system_data_$bj_max_n_journals 000026 external static fixed bin(17,0) dcl 63 set ref 87* 94 fp based bit(18) array level 3 packed unaligned dcl 1-15 set ref 103* free_list_relp 20 based bit(18) level 2 dcl 1-15 set ref 97* get_ring_ 000020 constant entry external dcl 57 ref 78 81 81 initiate_file_ 000022 constant entry external dcl 58 ref 82 journalx 000100 automatic fixed bin(17,0) dcl 38 set ref 99* 100* max_held_pages_mem 5 based fixed bin(17,0) level 2 dcl 1-15 set ref 95* 102 n_journals 3 based fixed bin(17,0) level 2 dcl 1-15 set ref 94* 97 99 103 103 null builtin function dcl 69 ref 85 p_code parameter fixed bin(35,0) dcl 34 set ref 29 76* 82* 86* 113* page_entry based structure array level 2 dcl 1-15 set ref 97 103 pagex 000101 automatic fixed bin(17,0) dcl 39 set ref 102* 103 103* per_aste_pool 10 based structure array level 2 dcl 1-15 per_journal 40 based structure array level 2 dcl 1-15 rel builtin function dcl 70 ref 97 103 save_level 000102 automatic fixed bin(17,0) dcl 40 set ref 79* 83* 114* sys_info$data_management_ringno 000030 external static fixed bin(17,0) dcl 64 ref 78 terminate_file_ 000024 constant entry external dcl 59 ref 113 threshold 10 based fixed bin(17,0) array level 3 dcl 1-15 set ref 96* time_stamp 40 based fixed bin(71,0) array level 3 dcl 1-15 set ref 100* wait_event 1 based bit(36) level 2 dcl 1-15 set ref 98* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. A_ACCESS internal static bit(3) initial unaligned dcl 2-11 A_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 DIR_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 2-33 E_ACCESS internal static bit(3) initial unaligned dcl 2-11 E_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 M_ACCESS internal static bit(3) initial unaligned dcl 2-11 M_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 N_ACCESS internal static bit(3) initial unaligned dcl 2-11 N_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 REW_ACCESS internal static bit(3) initial unaligned dcl 2-11 REW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 RE_ACCESS internal static bit(3) initial unaligned dcl 2-11 RE_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 RW_ACCESS internal static bit(3) initial unaligned dcl 2-11 RW_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 R_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 SA_ACCESS internal static bit(3) initial unaligned dcl 2-11 SA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 SEG_ACCESS_MODE_NAMES internal static char(4) initial array unaligned dcl 2-30 SMA_ACCESS internal static bit(3) initial unaligned dcl 2-11 SMA_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 SM_ACCESS internal static bit(3) initial unaligned dcl 2-11 SM_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 S_ACCESS internal static bit(3) initial unaligned dcl 2-11 S_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 TERM_FILE_BC internal static bit(2) initial unaligned dcl 3-12 TERM_FILE_DELETE internal static bit(5) initial unaligned dcl 3-17 TERM_FILE_FORCE_WRITE internal static bit(4) initial unaligned dcl 3-16 TERM_FILE_TERM internal static bit(3) initial unaligned dcl 3-14 TERM_FILE_TRUNC internal static bit(1) initial unaligned dcl 3-11 TERM_FILE_TRUNC_BC internal static bit(2) initial unaligned dcl 3-13 TERM_FILE_TRUNC_BC_TERM internal static bit(3) initial unaligned dcl 3-15 W_ACCESS internal static bit(3) initial unaligned dcl 2-11 W_ACCESS_BIN internal static fixed bin(5,0) initial dcl 2-36 dm_journal_seg_$ external static fixed bin(17,0) dcl 1-4 dm_page_entryp automatic pointer dcl 1-9 dm_per_journal_array based structure array level 1 dcl 1-54 dm_per_journal_arrayp automatic pointer dcl 1-8 dm_per_journalp automatic pointer dcl 1-7 max_dm_pages automatic fixed bin(17,0) dcl 1-12 n_dm_journals automatic fixed bin(17,0) dcl 1-11 terminate_file_switches based structure level 1 packed unaligned dcl 3-4 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 000413 constant entry internal dcl 117 ref 85 FINISH 000344 constant entry internal dcl 110 ref 80 88 120 MAIN_RETURN 000342 constant label dcl 107 ref 121 dm_init_from_hardcore_ 000035 constant entry external dcl 29 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 576 630 421 606 Length 1074 421 32 227 155 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME dm_init_from_hardcore_ 120 external procedure is an external procedure. on unit on line 80 64 on unit FINISH 84 internal procedure is called by several nonquick procedures. ERROR_RETURN internal procedure shares stack frame of external procedure dm_init_from_hardcore_. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME dm_init_from_hardcore_ 000100 journalx dm_init_from_hardcore_ 000101 pagex dm_init_from_hardcore_ 000102 save_level dm_init_from_hardcore_ 000112 dm_journal_segp dm_init_from_hardcore_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out call_int_this call_int_other return enable ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. cu_$level_get cu_$level_set dm_hcs_$get_n_journals dm_per_system_$create get_ring_ initiate_file_ terminate_file_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_system_data_$bj_max_n_journals sys_info$data_management_ringno LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 29 000032 76 000042 78 000044 79 000056 80 000064 81 000106 82 000126 83 000165 84 000174 85 000175 86 000202 87 000204 88 000213 89 000217 93 000220 94 000234 95 000240 96 000242 97 000257 98 000264 99 000266 100 000276 101 000303 102 000305 103 000317 104 000340 107 000342 110 000343 113 000351 114 000402 115 000412 117 000413 120 000414 121 000420 ----------------------------------------------------------- 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