COMPILATION LISTING OF SEGMENT linus_open Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 07/29/86 0952.8 mst Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 12 /****^ HISTORY COMMENTS: 13* 1) change(86-01-10,Dupuis), approve(86-01-10,MCR7188), audit(86-07-23,GWMay), 14* install(86-07-29,MR12.0-1106): 15* Corrected the following problems: (1) No usage message when 0 args are 16* supplied. (2) No usage message when 1 arg is supplied. (3) No usage 17* message when more than 2 args are supplied, and an incorrect message 18* is printed. (4) No usage message when an invalid opening mode is supplied. 19* 2) change(86-01-10,Dupuis), approve(86-05-23,MCR7404), audit(86-07-23,GWMay), 20* install(86-07-29,MR12.0-1106): 21* Changed to work as an active request and cleaned up minor problems. 22* Returns true if database could be opened, false otherwise. 23* END HISTORY COMMENTS */ 24 25 26 linus_open: 27 proc (sci_ptr, lcb_ptr); 28 29 /* DESCRIPTION: 30* 31* The data base is opened in the user specified mode via a call to dsl_$open. 32* Multiple data base opens are not allowed. 33* 34* LINUS request: open data_path mode, o data_path mode 35* 36* data_path is the pathname of a MRDS data base or a data submodel associated 37* with that data data base. 38* 39* mode is one of the following: 40* 41* retrieval, r 42* update, u 43* exclusive_retrieval, er 44* exclusive_update, eu 45* 46* 47* HISTORY: 48* 49* 77-03-01 J. C. C. Jagernauth: Initially written. 50* 51* 78-09-01 J. C. C. Jagernauth: Modified for MR7.0. 52* 53* 79-11-28 Rickie E. Brinegar: Modified to determine old or new data models 54* from the data model headers through the rm_db_info structure. 55* 56* 79-12-18 Rickie E. Brinegar: Modified to set scope for exclusive opening 57* modes, and to require an opening mode. 58* 59* 80-03-12 Rickie E. Brinegar: Modified to use the temporary segment defined 60* on lcb.linus_area_ptr rather than getting system free area. 61* 62* 80-06-01 Jim Gray : Modified to capture a bad opening mode itself, instead 63* of passing a phony mode to dsl_$open, and getting a error message that has 64* little meaning to the linus user. 65* 66* 80-12-22 Jim Gray : changed r-u scope file modes to r-s-m-d usage now that 67* mrds handles these modes for real. Also added use of 68* mrds_opening_modes_.incl 69* 70* 80-12-31 Jim Gray : added init of touched bit in scope_data structure. 71* 72* 81-01-12 Jim Gray : changed handling of touched bit now that part of flags 73* section of scope_data. 74* 75* 81-01-27 Jim Gray : removed reference to mdbm_data_$current_version, and 76* replace with a constant instead. 77* 78* 81-05-12 Rickie E. Brinegar: Modified to not call mdbm_util_$get_rslt_info 79* to get the version number but to use dsl_$get_db_version instead. 80* mdbm_util_$get_rslt_info should not be available outside of MRDS for 81* security reasons. 82* 83* 81-05-13 Rickie E. Brinegar: Added the code to set the secured_db and 84* administrator bits in lcb structure. 85* 86* 81-06-19 Rickie E. Brinegar: Removed call to dsl_$get_rels. 87* 88* 81-11-16 Rickie E. Brinegar: added timing of dsl calls. 89* 90* 82-02-05 Paul W. Benjamin: ssu_ conversion 91* 92* 83-02-04 Al Dupuis: Changed call to com_err_ to ssu_$print_message. 93* 94**/ 95 1 1 /* BEGIN INCLUDE FILE linus_lcb.incl.pl1 -- jaw 8/30/77 */ 1 2 1 3 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(86-04-23,Dupuis), approve(86-05-23,MCR7188), audit(86-07-23,GWMay), 1 7* install(86-07-29,MR12.0-1106): 1 8* Added general_work_area_ptr and renamed sfr_ptr to 1 9* force_retrieve_scope_ptr. 1 10* END HISTORY COMMENTS */ 1 11 1 12 1 13 /* HISTORY: 1 14* 1 15* 78-09-29 J. C. C. Jagernauth: Modified for MR7.0. 1 16* 1 17* 81-05-11 Rickie E. Brinegar: added security bit and andministrator bit as 1 18* a part of the attribute level control work. 1 19* 1 20* 81-06-17 Rickie E. Brinegar: deleted the sd_ptr as a part of removing the 1 21* scope_data structure from LINUS. LINUS now depends totally on MRDS for 1 22* scope information. 1 23* 1 24* 81-11-11 Rickie E. Brinegar: added the timing bit and three fields for 1 25* retaining various vcpu times to be collected when in timing mode. The 1 26* times to be collected are: LINUS parsing time, LINUS processing time, and 1 27* MRDS processing time. 1 28* 1 29* 82-01-15 DJ Schimke: Added the build_increment and build_start fields as 1 30* part of the line numbering implementation. This allows for possible later 1 31* LINUS control of the build defaults. 1 32* 1 33* 82-03-01 Paul W. Benjamin: Removed linus_prompt_chars_ptr, as that 1 34* information is now retained by ssu_. Removed parse_timer as no longer 1 35* meaningful. Added linus_version. Added iteration bit. Added 6 entry 1 36* variables for ssu_ replaceable procedures. Added actual_input_iocbp. 1 37* 1 38* 82-06-23 Al Dupuis: Added subsystem_control_info_ptr, 1 39* subsystem_invocation_level, and selection_expression_identifier. 1 40* 1 41* 82-08-26 DJ Schimke: Added report_control_info_ptr, and 1 42* table_control_info_ptr. 1 43* 1 44* 82-10-19 DJ Schimke: Added ssu_abort_line. 1 45* 1 46* 83-06-06 Bert Moberg: Added print_search_order (pso) and no_optimize (no_ot) 1 47* 1 48* 83-04-07 DJ Schimke: Added temp_seg_info_ptr. 1 49* 1 50* 83-08-26 Al Dupuis: Added query_temp_segment_ptr. 1 51**/ 1 52 1 53 dcl 1 lcb aligned based (lcb_ptr), /* LINUS control block */ 1 54 2 db_index fixed bin (35), /* index of open data base, or 0 */ 1 55 2 rb_len fixed bin (21), /* length of request buffer */ 1 56 2 lila_count fixed bin (35), /* number of LILA text lines */ 1 57 2 lila_chars fixed bin (35), /* number of LILA source test chars */ 1 58 2 trans_id fixed bin (35), /* used by checkpoint and rollback facilities (MR7.0) */ 1 59 2 lila_fn char (32) unal, /* entry name of lila data file */ 1 60 2 prompt_flag bit (1) unal, /* on if in prompt mode */ 1 61 2 test_flag bit (1) unal, /* on if in test mode */ 1 62 2 new_version bit (1) unal init (1), /* on for new version data base (MR7.0) */ 1 63 2 secured_db bit (1) unal, /* on if the db is in a secure state */ 1 64 2 administrator bit (1) unal, /* on if the user is a db administrator */ 1 65 2 timing_mode bit (1) unal, /* on if timing is to be done */ 1 66 2 iteration bit (1) unal, /* interpret parens as iteration sets */ 1 67 2 pso_flag bit (1) unal, /* add print_search_order to select */ 1 68 2 no_ot_flag bit (1) unal, /* add no_optimize to select */ 1 69 2 reserved bit (27) unal, 1 70 2 liocb_ptr ptr, /* iocb ptr for lila file */ 1 71 2 rb_ptr ptr, /* ptr to request buffer */ 1 72 2 is_ptr ptr, /* iocb ptr for currentinput stream switch */ 1 73 2 cal_ptr ptr, /* ptr to current arg list for invoke (or null) */ 1 74 2 ttn_ptr ptr, /* pointer to table info structure */ 1 75 2 force_retrieve_scope_info_ptr ptr, /* structure pointer to force retrieve scope operation */ 1 76 2 lv_ptr ptr, /* pointer linus variables */ 1 77 2 si_ptr ptr, /* pointer to select_info structure */ 1 78 2 setfi_ptr ptr, /* pointer to set function information */ 1 79 2 sclfi_ptr ptr, /* pointer to user declared scalar fun. names */ 1 80 2 ivs_ptr ptr, /* pointer to stack of invoke iocb pointers */ 1 81 2 lit_ptr ptr, /* pointer to literal pool */ 1 82 2 lvv_ptr ptr, /* pointer to linus variable alloc. pool */ 1 83 2 rd_ptr ptr, /* point to readied files mode information (MR7.0) */ 1 84 2 rt_ptr ptr, /* point to table of relation names and their readied modes 1 85* (MR7.0) */ 1 86 2 actual_input_iocbp ptr, /* ptr to input while in macros */ 1 87 2 lila_promp_chars_ptr ptr, /* pointer to the prompt characters for lila */ 1 88 2 linus_area_ptr ptr, /* LINUS temporary segment pointer */ 1 89 2 lila_area_ptr ptr, /* LILA temporary segment pointer */ 1 90 2 i_o_area_ptr ptr, /* temporary segment pointer used by write, print, create_list */ 1 91 2 rel_array_ptr ptr, /* ptr to array of names rslt info structure 1 92* for current lila expression */ 1 93 2 unused_timer float bin (63), /* future expansion */ 1 94 2 request_time float bin (63), /* How much request time was spent 1 95* in LINUS. (-1 = user has just enabled 1 96* timing, do not report) */ 1 97 2 mrds_time float bin (63), /* How much time was spent in MRDS */ 1 98 2 build_increment fixed bin, /* default increment for build mode */ 1 99 2 build_start fixed bin, /* default start count for build mode */ 1 100 2 linus_version char (4), /* current version of LINUS */ 1 101 2 subsystem_control_info_ptr ptr, /* the same ptr passed by ssu_ to each request procedure */ 1 102 2 subsystem_invocation_level fixed bin, /* identifies this invocation of LINUS */ 1 103 2 selection_expression_identifier fixed bin, /* identifies the current processed selection expression */ 1 104 2 report_control_info_ptr ptr, /* pointer to linus_report_control_info structure */ 1 105 2 table_control_info_ptr ptr, /* pointer to linus_table control structure */ 1 106 2 temp_seg_info_ptr ptr, /* pointer to linus_temp_seg_mgr control structure */ 1 107 2 query_temp_segment_ptr ptr, /* points to temp seg used for manipulating query */ 1 108 2 general_work_area_ptr ptr, /* a freeing area for general use */ 1 109 2 word_pad (6) bit (36) unal, 1 110 /* procedures that will be optionally */ 1 111 /* replaced by the user. Saved so they */ 1 112 /* can be reinstated if desired. */ 1 113 2 ssu_abort_line entry options (variable), 1 114 2 ssu_post_request_line variable entry (ptr), 1 115 2 ssu_pre_request_line variable entry (ptr), 1 116 1 117 2 curr_lit_offset fixed bin (35), /* index of first free bit in lit. pool */ 1 118 2 curr_lv_val_offset fixed bin (35), /* index of first free bit lv. val. pool */ 1 119 2 static_area area (sys_info$max_seg_size - fixed (rel (addr (lcb.static_area))) + 1); 1 120 1 121 dcl lcb_ptr ptr; 1 122 1 123 /* END INCLUDE FILE linus_lcb.incl.pl1 */ 96 97 2 1 /* BEGIN INCLUDE FILE linus_char_argl.incl.pl1 -- jaw 2/11/77 */ 2 2 2 3 /* HISTORY: 2 4* 2 5* 82-02-05 Paul W. Benjamin: Changed arg_len to fixed bin (21). 2 6* 2 7**/ 2 8 2 9 dcl 1 char_argl aligned based (ca_ptr), /* structure for general char. arg. list */ 2 10 2 nargs fixed bin, /* number of args */ 2 11 2 arg (nargs_init refer (char_argl.nargs)), 2 12 3 arg_ptr ptr, /* ptr to first char. of arg */ 2 13 3 arg_len fixed bin (21); /* no. of chars. in arg */ 2 14 2 15 dcl ca_ptr ptr; 2 16 dcl nargs_init fixed bin; 2 17 2 18 /* END INCLUDE FILE linus_char_argl.incl.pl1 */ 98 99 3 1 /* BEGIN INCLUDE FILE linus_ready_data.incl.pl1 -- jccj 9/29/78 */ 3 2 3 3 dcl 1 ready_data aligned based (rd_ptr), 3 4 2 mode fixed bin, 3 5 2 nfiles fixed bin, 3 6 2 file (rd_nfiles_init refer (ready_data.nfiles)), 3 7 3 name char (32) unal, 3 8 3 active bit (1) unal; 3 9 3 10 dcl rd_ptr ptr; 3 11 dcl rd_nfiles_init fixed bin; 3 12 3 13 /* END INCLUDE FILE linus_ready_data.incl.pl1 */ 100 101 4 1 /* BEGIN INCLUDE FILE linus_ready_table.incl.pl1 -- jccj 10/10/78 */ 4 2 4 3 dcl 1 ready_table aligned based (rt_ptr), 4 4 2 ntabs fixed bin, 4 5 2 tab (ntabs_init refer (ready_table.ntabs)), 4 6 3 name char (32) unal, 4 7 3 active bit (1) unal; 4 8 4 9 dcl rt_ptr ptr; 4 10 dcl ntabs_init fixed bin; 4 11 4 12 /* END INCLUDE FILE linus_ready_table.incl.pl1 */ 102 103 5 1 /* BEGIN INCLUDE FILE linus_scal_fn_info.incl.pl1 -- jaw 6/23/77 */ 5 2 5 3 dcl 1 scal_fn_info aligned based (sclfi_ptr), /* names of user-dcl scalar functions */ 5 4 2 fwd_ptr ptr, /* pointer tonext name in list */ 5 5 2 name char (32); /* function name */ 5 6 5 7 dcl sclfi_ptr ptr; 5 8 5 9 /* END INCLUDE FILE linus_scal_fn_info.incl.pl1 */ 104 105 6 1 /* BEGIN INCLUDE FILE linus_set_fn_info.incl.pl1 -- jaw 6/16/77 6 2* 6 3* 81-10-26 Rickie E. Brinegar: Changed the entry pointer to entry variables 6 4* and added bits to define whether or not the entry variables had been set. 6 5* Renamed the structure from set_fn_info to linus_set_fn_info and the pointer 6 6* that it was based on from setfi_ptr to linus_set_fn_info_ptr. 6 7* 6 8* 81-11-05 Rickie E. Brinegar: Changed the entry pointers to entry variables 6 9* and added bit switches to determine when the entries have or have not been 6 10* set. Renamed the set_fn_info structure to linus_set_fn_info, the setfi_ptr 6 11* to linus_set_fn_info_ptr, and nset_fn_info_init_args to 6 12* initial_number_of_set_fn_info_args. 6 13* 6 14**/ 6 15 6 16 dcl 1 linus_set_fn_info aligned based (linus_set_fn_info_ptr), 6 17 /* set function info block */ 6 18 2 fwd_ptr ptr, /* pointer too next function in list */ 6 19 2 name char (32), /* name of function */ 6 20 2 assign_entry entry variable, /* pointer to assign entry */ 6 21 2 calc_entry entry variable, /* pointer to calc entry */ 6 22 2 info_entry entry variable, /* pointer to info entry, if var. fun. */ 6 23 2 init_entry entry variable, /* pointer to initialization entry */ 6 24 2 flags, 6 25 3 assign_entry_set bit (1) unaligned, /* 0 => null, 1 => not null */ 6 26 3 calc_entry_set bit (1) unaligned, /* 0 => null, 1 => not null */ 6 27 3 info_entry_set bit (1) unaligned, /* 0 => null, 1 => not null */ 6 28 3 init_entry_set bit (1) unaligned, /* 0 => null, 1 => not null */ 6 29 3 pad_bits bit (32) unaligned, 6 30 2 rslt_desc bit (36), /* descriptor of result of fixed fun */ 6 31 2 nargs fixed bin, /* no of input args of calc entry */ 6 32 2 arg_desc (initial_number_of_set_fn_info_args refer (linus_set_fn_info.nargs)) bit (36); /* descriptor 6 33* for each input arg */ 6 34 6 35 dcl linus_set_fn_info_ptr ptr; 6 36 dcl initial_number_of_set_fn_info_args fixed bin; 6 37 6 38 /* END INCLUDE FILE linus_set_fn_info.incl.pl1 */ 106 107 7 1 /* BEGIN INCLUDE FILE mrds_model_relations.incl.pl1 7 2* 7 3* Created October, 1975 for release in MR 4.0 */ 7 4 7 5 dcl 1 model_relations based (mr_ptr), /* structure to return names of all relations in a model */ 7 6 2 nrels fixed bin (10), /* number of relations */ 7 7 2 relation_name (num_relations_alloc refer (model_relations.nrels)) char (32); /* relation names */ 7 8 7 9 dcl num_relations_alloc fixed bin (10); /* number of relations in model for allocation purposes */ 7 10 7 11 dcl mr_ptr ptr; 7 12 7 13 /* END INCLUDE FILE mrds_model_relations.incl.pl1 */ 7 14 108 109 8 1 /* START OF: mrds_opening_modes_.incl.pl1 * * * * * * * * * * * * * * * * */ 8 2 8 3 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 8 4 /* */ 8 5 /* Name: mrds_opening_modes_.incl.pl1 */ 8 6 /* */ 8 7 /* Defines named constants which can be used in calls to dsl_$open when opening a MRDS */ 8 8 /* data base. */ 8 9 /* */ 8 10 /* Status */ 8 11 /* 0) Created by: Gary C. Dixon; January 22, 1979 */ 8 12 /* */ 8 13 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 8 14 8 15 dcl (RETRIEVAL init(1), 8 16 UPDATE init(2), 8 17 EXCLUSIVE_RETRIEVAL init(3), 8 18 EXCLUSIVE_UPDATE init(4)) fixed bin(35) int static options(constant); 8 19 8 20 /* END OF: mrds_opening_modes_.incl.pl1 * * * * * * * * * * * * * * * * */ 8 21 110 111 9 1 /* BEGIN mrds_security_info.incl.pl1 -- reb, 81-05-13 */ 9 2 9 3 /* DESCRIPTION: 9 4* 9 5* The reason for this structure is to return security related information to 9 6* the user. 9 7* 9 8* 9 9* HISTORY: 9 10* 9 11* 81-05-13 Rickie E. Brinegar: Originally written. 9 12* 9 13**/ 9 14 9 15 dcl 1 mrds_security_info based (mrds_security_info_ptr), 9 16 2 db_secure bit (1) unal, /* ON => database is in a secure state */ 9 17 2 administrator bit (1) unal, /* ON => user is currently an administrator */ 9 18 2 pad bit (34) unal; /* reserved for future use */ 9 19 9 20 dcl mrds_security_info_ptr ptr; 9 21 9 22 /* END mdbm_rm_db_info.incl.pl1 */ 9 23 112 113 114 dcl sci_ptr ptr; /* needed by ssu_ */ 115 dcl ( 116 db_version, 117 i, 118 j, 119 open_mode, 120 retrieval_mode init (2) 121 ) fixed bin; 122 123 dcl code fixed bin (35); 124 125 dcl error_codes (2) fixed bin (35); 126 127 dcl initial_mrds_vclock float bin (63); 128 129 dcl cleanup condition; 130 dcl cleanup_has_been_signalled bit (1) aligned; 131 132 dcl ( 133 data_model_ptr init (null), 134 free_setfi_ptr init (null), 135 last_setfi_ptr init (null) 136 ) ptr; 137 138 dcl mode char (char_argl.arg.arg_len (2)) based (char_argl.arg.arg_ptr (2)); 139 /* Mode for linus open */ 140 dcl open_mode_value (9) fixed bin int static options (constant) init ( 141 /* Codes for valid open modes */ 142 1, 1, 2, 2, 3, 3, 4, 4, 5); /* 5 is the only invalid open mode */ 143 dcl opened_mode char (20); /* need to call dsl_$get_pn */ 144 dcl path_name char (char_argl.arg.arg_len (1)) 145 based (char_argl.arg.arg_ptr (1)); /* Path_Name for linus open */ 146 147 dcl ( 148 db_path_name, /* the absolute path name of the db */ 149 out_path_name 150 ) char (168); /* a dummy argument to dsl_$get_db_version */ 151 152 dcl valid_open_mode (8) char (19) int static options (constant) init ( 153 /* Valid open modes */ 154 "r", "retrieval", "u", "update", "er", "exclusive_retrieval", "eu", 155 "exclusive_update"); 156 157 dcl active_request_flag bit (1) aligned; 158 dcl return_value char (return_value_length) varying based (return_value_ptr); 159 dcl return_value_length fixed bin (21); 160 dcl return_value_ptr ptr; 161 162 dcl (addr, fixed, hbound, null, rel, vclock) builtin; 163 164 dcl ( 165 linus_error_$cant_ref_fun, /* Linus error codes */ 166 linus_error_$inv_mode, 167 linus_error_$no_input_arg, 168 linus_error_$too_few_args, 169 linus_error_$too_many_dbs, 170 mrds_error_$db_busy, 171 mrds_error_$quiesced_db, 172 sys_info$max_seg_size 173 ) ext fixed bin (35); 174 175 dcl error_table_$too_many_args fixed bin(35) ext static; 176 dcl dsl_$close entry() options(variable); 177 dcl dsl_$declare entry options (variable); 178 dcl dsl_$get_db_version 179 entry (char (168), char (168), fixed bin, fixed bin (35)); 180 dcl dsl_$get_rslt_rels entry (fixed bin (35), ptr, ptr, fixed bin (35)); 181 dcl dsl_$get_pn entry (fixed bin (35), char (168), char (20), fixed bin (35)); 182 dcl dsl_$get_security_info entry (fixed bin (35), ptr, ptr, fixed bin (35)); 183 dcl dsl_$open entry options (variable); /* MRDS Subroutine */ 184 dcl linus_stifle_mrds_sub_error entry ((*) fixed bin(35)); 185 dcl ssu_$abort_line entry options (variable); 186 dcl ssu_$return_arg entry (ptr, fixed bin, bit(1) aligned, ptr, fixed bin(21)); 187 dcl ssu_$arg_ptr entry (ptr, fixed bin, ptr, fixed bin (21)); 188 dcl ssu_$print_message entry() options(variable); 189 dcl sub_error_ condition; 190 dcl USAGE char (36) internal static options (constant) init ( 191 "^/Usage: open pathname opening_mode"); 192 193 194 ca_ptr = null; 195 mr_ptr = null; 196 197 on cleanup begin; 198 cleanup_has_been_signalled = "1"b; 199 call clean_up; 200 end; 201 202 lcb.trans_id, rd_nfiles_init = 0; 203 call ssu_$return_arg (sci_ptr, nargs_init, 204 active_request_flag, return_value_ptr, return_value_length); 205 if active_request_flag 206 then return_value = "false"; 207 if lcb.db_index ^= 0 then 208 call ssu_$abort_line (sci_ptr, linus_error_$too_many_dbs); /* Only one data base can 209* be open */ 210 if nargs_init = 0 then 211 call ssu_$abort_line (sci_ptr, linus_error_$no_input_arg, USAGE); /* Some argument must 212* be passed */ 213 if nargs_init < 2 then 214 call ssu_$abort_line (sci_ptr, linus_error_$too_few_args, USAGE); 215 if nargs_init > 2 then 216 call ssu_$abort_line (sci_ptr, error_table_$too_many_args, USAGE); 217 allocate char_argl in (lcb.static_area); 218 do i = 1 to 2; 219 call ssu_$arg_ptr (sci_ptr, i, char_argl.arg.arg_ptr (i), char_argl.arg.arg_len (i)); 220 end; 221 do i = 1 to 8 while (mode ^= valid_open_mode (i));/* Find open mode */ 222 end; 223 if i > hbound (valid_open_mode, 1) then 224 call 225 ssu_$abort_line (sci_ptr, linus_error_$inv_mode, 226 "Unrecognizable opening mode ^a.^a", mode, USAGE); 227 open_mode = open_mode_value (i); /* Set open mode for MRDS call */ 228 if active_request_flag 229 then do; 230 error_codes (1) = mrds_error_$db_busy; 231 error_codes (2) = mrds_error_$quiesced_db; 232 on sub_error_ call linus_stifle_mrds_sub_error (error_codes); 233 end; 234 if lcb.timing_mode then 235 initial_mrds_vclock = vclock; 236 call dsl_$open (path_name, lcb.db_index, open_mode, code); 237 /* Try to open data base */ 238 if lcb.timing_mode then 239 lcb.mrds_time = lcb.mrds_time + (vclock - initial_mrds_vclock); 240 if active_request_flag 241 then revert sub_error_; 242 if code ^= 0 243 then if active_request_flag & (code = mrds_error_$db_busy | code = mrds_error_$quiesced_db) 244 then do; 245 call clean_up; 246 return; 247 end; 248 else call ssu_$abort_line (sci_ptr, code); 249 else if active_request_flag 250 then return_value = "true"; 251 else; 252 253 if lcb.timing_mode then 254 initial_mrds_vclock = vclock; 255 call dsl_$get_pn (lcb.db_index, db_path_name, opened_mode, code); 256 if lcb.timing_mode then 257 lcb.mrds_time = lcb.mrds_time + (vclock - initial_mrds_vclock); 258 if code ^= 0 then 259 call ssu_$abort_line (sci_ptr, code); 260 261 if lcb.timing_mode then 262 initial_mrds_vclock = vclock; 263 call dsl_$get_db_version (db_path_name, out_path_name, db_version, code); 264 if lcb.timing_mode then 265 lcb.mrds_time = lcb.mrds_time + (vclock - initial_mrds_vclock); 266 if code ^= 0 then 267 call ssu_$abort_line (sci_ptr, code); 268 if db_version > 3 then 269 lcb.new_version = "1"b; 270 else lcb.new_version = "0"b; 271 272 if lcb.timing_mode then 273 initial_mrds_vclock = vclock; 274 call 275 dsl_$get_security_info (lcb.db_index, lcb.linus_area_ptr, 276 mrds_security_info_ptr, code); 277 if lcb.timing_mode then 278 lcb.mrds_time = lcb.mrds_time + (vclock - initial_mrds_vclock); 279 if code ^= 0 then 280 call ssu_$abort_line (sci_ptr, code); 281 lcb.administrator = mrds_security_info.administrator; 282 lcb.secured_db = mrds_security_info.db_secure; 283 284 if lcb.sclfi_ptr ^= null then do; /* Declare user defined scalar functions */ 285 sclfi_ptr = lcb.sclfi_ptr; 286 do while (sclfi_ptr ^= null); 287 if lcb.timing_mode then 288 initial_mrds_vclock = vclock; 289 call dsl_$declare (lcb.db_index, scal_fn_info.name, code); 290 if lcb.timing_mode then 291 lcb.mrds_time = lcb.mrds_time + (vclock - initial_mrds_vclock); 292 if code ^= 0 then 293 call ssu_$abort_line (sci_ptr, code); 294 sclfi_ptr = scal_fn_info.fwd_ptr; 295 end; 296 end; 297 298 if lcb.setfi_ptr ^= null then do; 299 free_setfi_ptr = null; 300 last_setfi_ptr = lcb.setfi_ptr; 301 linus_set_fn_info_ptr = lcb.setfi_ptr; 302 do linus_set_fn_info_ptr = lcb.setfi_ptr 303 repeat linus_set_fn_info.fwd_ptr 304 while (linus_set_fn_info.fwd_ptr ^= null); 305 if ^linus_set_fn_info.init_entry_set then do; 306 call 307 ssu_$print_message (linus_error_$cant_ref_fun, "open", 308 "^/The set function ^a does not have an ""_init"" entry ^/point and has been removed from the declared set functions list." 309 , linus_set_fn_info.name); 310 if lcb.setfi_ptr = last_setfi_ptr then do; 311 lcb.setfi_ptr = linus_set_fn_info.fwd_ptr; 312 last_setfi_ptr = linus_set_fn_info.fwd_ptr; 313 end; 314 linus_set_fn_info.fwd_ptr = free_setfi_ptr; 315 free_setfi_ptr = linus_set_fn_info_ptr; 316 end; 317 else last_setfi_ptr = linus_set_fn_info_ptr; 318 end; 319 do linus_set_fn_info_ptr = free_setfi_ptr repeat free_setfi_ptr 320 while (free_setfi_ptr ^= null); 321 free_setfi_ptr = linus_set_fn_info.fwd_ptr; 322 free linus_set_fn_info; 323 end; 324 end; 325 326 lcb.rt_ptr, lcb.rd_ptr = null; 327 328 if lcb.timing_mode then 329 initial_mrds_vclock = vclock; 330 call dsl_$get_rslt_rels (lcb.db_index, lcb.linus_area_ptr, mr_ptr, code); 331 if lcb.timing_mode then 332 lcb.mrds_time = lcb.mrds_time + (vclock - initial_mrds_vclock); 333 if code ^= 0 then 334 call ssu_$abort_line (sci_ptr, code); 335 336 call init_ready_data; 337 call init_ready_table; 338 339 return; 340 341 init_ready_data: 342 proc; 343 344 /* fill ready_data structure */ 345 346 rd_nfiles_init = model_relations.nrels; 347 allocate ready_data in (lcb.static_area); 348 lcb.rd_ptr = rd_ptr; 349 ready_data.mode = RETRIEVAL; 350 351 do j = 1 to model_relations.nrels; 352 ready_data.file.name (j) = model_relations.relation_name (j); 353 ready_data.file.active (j) = "0"b; 354 end; 355 356 357 end init_ready_data; 358 359 init_ready_table: 360 proc; 361 362 ntabs_init = model_relations.nrels; 363 allocate ready_table in (lcb.static_area); 364 lcb.rt_ptr = rt_ptr; 365 do i = 1 to ntabs_init; 366 ready_table.tab.name (i) = model_relations.relation_name (i); 367 ready_table.tab.active (i) = "0"b; 368 end; 369 mr_ptr = null; 370 371 end init_ready_table; 372 373 clean_up: 374 proc; 375 376 if ca_ptr ^= null 377 then free char_argl; 378 if lcb.db_index ^= 0 & cleanup_has_been_signalled 379 then call dsl_$close (lcb.db_index, code); 380 381 end clean_up; 382 383 384 end linus_open; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 07/29/86 0937.1 linus_open.pl1 >special_ldd>install>MR12.0-1106>linus_open.pl1 96 1 07/29/86 0937.8 linus_lcb.incl.pl1 >special_ldd>install>MR12.0-1106>linus_lcb.incl.pl1 98 2 11/23/82 1327.3 linus_char_argl.incl.pl1 >ldd>include>linus_char_argl.incl.pl1 100 3 11/23/82 1327.2 linus_ready_data.incl.pl1 >ldd>include>linus_ready_data.incl.pl1 102 4 03/27/82 0434.5 linus_ready_table.incl.pl1 >ldd>include>linus_ready_table.incl.pl1 104 5 03/27/82 0434.5 linus_scal_fn_info.incl.pl1 >ldd>include>linus_scal_fn_info.incl.pl1 106 6 11/23/82 1327.2 linus_set_fn_info.incl.pl1 >ldd>include>linus_set_fn_info.incl.pl1 108 7 10/14/83 1608.4 mrds_model_relations.incl.pl1 >ldd>include>mrds_model_relations.incl.pl1 110 8 10/14/83 1608.6 mrds_opening_modes_.incl.pl1 >ldd>include>mrds_opening_modes_.incl.pl1 112 9 10/14/83 1608.9 mrds_security_info.incl.pl1 >ldd>include>mrds_security_info.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. RETRIEVAL constant fixed bin(35,0) initial dcl 8-15 ref 349 USAGE 000000 constant char(36) initial unaligned dcl 190 set ref 210* 213* 215* 223* active 12 based bit(1) array level 3 in structure "ready_data" packed unaligned dcl 3-3 in procedure "linus_open" set ref 353* active 11 based bit(1) array level 3 in structure "ready_table" packed unaligned dcl 4-3 in procedure "linus_open" set ref 367* active_request_flag 000305 automatic bit(1) dcl 157 set ref 203* 205 228 240 242 249 administrator 15(04) based bit(1) level 2 in structure "lcb" packed unaligned dcl 1-53 in procedure "linus_open" set ref 281* administrator 0(01) based bit(1) level 2 in structure "mrds_security_info" packed unaligned dcl 9-15 in procedure "linus_open" ref 281 arg 2 based structure array level 2 dcl 2-9 arg_len 4 based fixed bin(21,0) array level 3 dcl 2-9 set ref 219* 221 223 223 236 236 arg_ptr 2 based pointer array level 3 dcl 2-9 set ref 219* 221 223 236 ca_ptr 000100 automatic pointer dcl 2-15 set ref 194* 217* 219 219 221 221 223 223 223 236 236 236 376 376 char_argl based structure level 1 dcl 2-9 set ref 217 376 cleanup 000136 stack reference condition dcl 129 ref 197 cleanup_has_been_signalled 000144 automatic bit(1) dcl 130 set ref 198* 378 code 000131 automatic fixed bin(35,0) dcl 123 set ref 236* 242 242 242 248* 255* 258 258* 263* 266 266* 274* 279 279* 289* 292 292* 330* 333 333* 378* data_model_ptr 000146 automatic pointer initial dcl 132 set ref 132* db_index based fixed bin(35,0) level 2 dcl 1-53 set ref 207 236* 255* 274* 289* 330* 378 378* db_path_name 000161 automatic char(168) unaligned dcl 147 set ref 255* 263* db_secure based bit(1) level 2 packed unaligned dcl 9-15 ref 282 db_version 000124 automatic fixed bin(17,0) dcl 115 set ref 263* 268 dsl_$close 000030 constant entry external dcl 176 ref 378 dsl_$declare 000032 constant entry external dcl 177 ref 289 dsl_$get_db_version 000034 constant entry external dcl 178 ref 263 dsl_$get_pn 000040 constant entry external dcl 181 ref 255 dsl_$get_rslt_rels 000036 constant entry external dcl 180 ref 330 dsl_$get_security_info 000042 constant entry external dcl 182 ref 274 dsl_$open 000044 constant entry external dcl 183 ref 236 error_codes 000132 automatic fixed bin(35,0) array dcl 125 set ref 230* 231* 232* error_table_$too_many_args 000026 external static fixed bin(35,0) dcl 175 set ref 215* file 2 based structure array level 2 dcl 3-3 flags 32 based structure level 2 dcl 6-16 free_setfi_ptr 000150 automatic pointer initial dcl 132 set ref 132* 299* 314 315* 319 319 321* 323 fwd_ptr based pointer level 2 in structure "linus_set_fn_info" dcl 6-16 in procedure "linus_open" set ref 302 311 312 314* 318 321 fwd_ptr based pointer level 2 in structure "scal_fn_info" dcl 5-3 in procedure "linus_open" ref 294 hbound builtin function dcl 162 ref 223 i 000125 automatic fixed bin(17,0) dcl 115 set ref 218* 219* 219 219* 221* 221* 223 227 365* 366 366 367* init_entry_set 32(03) based bit(1) level 3 packed unaligned dcl 6-16 ref 305 initial_mrds_vclock 000134 automatic float bin(63) dcl 127 set ref 234* 238 253* 256 261* 264 272* 277 287* 290 328* 331 j 000126 automatic fixed bin(17,0) dcl 115 set ref 351* 352 352 353* last_setfi_ptr 000152 automatic pointer initial dcl 132 set ref 132* 300* 310 312* 317* lcb based structure level 1 dcl 1-53 lcb_ptr parameter pointer dcl 1-121 ref 26 202 207 217 234 236 238 238 238 253 255 256 256 256 261 264 264 264 268 270 272 274 274 277 277 277 281 282 284 285 287 289 290 290 290 298 300 301 302 310 311 326 326 328 330 330 331 331 331 347 348 363 364 378 378 linus_area_ptr 60 based pointer level 2 dcl 1-53 set ref 274* 330* linus_error_$cant_ref_fun 000010 external static fixed bin(35,0) dcl 164 set ref 306* linus_error_$inv_mode 000012 external static fixed bin(35,0) dcl 164 set ref 223* linus_error_$no_input_arg 000014 external static fixed bin(35,0) dcl 164 set ref 210* linus_error_$too_few_args 000016 external static fixed bin(35,0) dcl 164 set ref 213* linus_error_$too_many_dbs 000020 external static fixed bin(35,0) dcl 164 set ref 207* linus_set_fn_info based structure level 1 dcl 6-16 set ref 322 linus_set_fn_info_ptr 000116 automatic pointer dcl 6-35 set ref 301* 302* 302* 305 306 311 312 314 315 317* 318 319* 321 322* linus_stifle_mrds_sub_error 000046 constant entry external dcl 184 ref 232 mode based char unaligned dcl 138 in procedure "linus_open" set ref 221 223* mode based fixed bin(17,0) level 2 in structure "ready_data" dcl 3-3 in procedure "linus_open" set ref 349* model_relations based structure level 1 unaligned dcl 7-5 mr_ptr 000120 automatic pointer dcl 7-11 set ref 195* 330* 346 351 352 362 366 369* mrds_error_$db_busy 000022 external static fixed bin(35,0) dcl 164 ref 230 242 mrds_error_$quiesced_db 000024 external static fixed bin(35,0) dcl 164 ref 231 242 mrds_security_info based structure level 1 packed unaligned dcl 9-15 mrds_security_info_ptr 000122 automatic pointer dcl 9-20 set ref 274* 281 282 mrds_time 74 based float bin(63) level 2 dcl 1-53 set ref 238* 238 256* 256 264* 264 277* 277 290* 290 331* 331 name 2 based char(32) array level 3 in structure "ready_data" packed unaligned dcl 3-3 in procedure "linus_open" set ref 352* name 2 based char(32) level 2 in structure "linus_set_fn_info" dcl 6-16 in procedure "linus_open" set ref 306* name 2 based char(32) level 2 in structure "scal_fn_info" dcl 5-3 in procedure "linus_open" set ref 289* name 1 based char(32) array level 3 in structure "ready_table" packed unaligned dcl 4-3 in procedure "linus_open" set ref 366* nargs 34 based fixed bin(17,0) level 2 in structure "linus_set_fn_info" dcl 6-16 in procedure "linus_open" ref 322 nargs based fixed bin(17,0) level 2 in structure "char_argl" dcl 2-9 in procedure "linus_open" set ref 217* 376 nargs_init 000102 automatic fixed bin(17,0) dcl 2-16 set ref 203* 210 213 215 217 217 new_version 15(02) based bit(1) initial level 2 packed unaligned dcl 1-53 set ref 268* 270* nfiles 1 based fixed bin(17,0) level 2 dcl 3-3 set ref 347* nrels based fixed bin(10,0) level 2 dcl 7-5 ref 346 351 362 ntabs based fixed bin(17,0) level 2 dcl 4-3 set ref 363* ntabs_init 000112 automatic fixed bin(17,0) dcl 4-10 set ref 362* 363 363 365 null builtin function dcl 162 ref 132 132 132 194 195 284 286 298 299 302 319 326 369 376 open_mode 000127 automatic fixed bin(17,0) dcl 115 set ref 227* 236* open_mode_value 000057 constant fixed bin(17,0) initial array dcl 140 ref 227 opened_mode 000154 automatic char(20) unaligned dcl 143 set ref 255* out_path_name 000233 automatic char(168) unaligned dcl 147 set ref 263* path_name based char unaligned dcl 144 set ref 236* rd_nfiles_init 000106 automatic fixed bin(17,0) dcl 3-11 set ref 202* 346* 347 347 rd_ptr 000104 automatic pointer dcl 3-10 in procedure "linus_open" set ref 347* 348 349 352 353 rd_ptr 50 based pointer level 2 in structure "lcb" dcl 1-53 in procedure "linus_open" set ref 326* 348* ready_data based structure level 1 dcl 3-3 set ref 347 ready_table based structure level 1 dcl 4-3 set ref 363 relation_name 1 based char(32) array level 2 packed unaligned dcl 7-5 ref 352 366 retrieval_mode 000130 automatic fixed bin(17,0) initial dcl 115 set ref 115* return_value based varying char dcl 158 set ref 205* 249* return_value_length 000306 automatic fixed bin(21,0) dcl 159 set ref 203* 205 249 return_value_ptr 000310 automatic pointer dcl 160 set ref 203* 205 249 rt_ptr 52 based pointer level 2 in structure "lcb" dcl 1-53 in procedure "linus_open" set ref 326* 364* rt_ptr 000110 automatic pointer dcl 4-9 in procedure "linus_open" set ref 363* 364 366 367 scal_fn_info based structure level 1 dcl 5-3 sci_ptr parameter pointer dcl 114 set ref 26 203* 207* 210* 213* 215* 219* 223* 248* 258* 266* 279* 292* 333* sclfi_ptr 000114 automatic pointer dcl 5-7 in procedure "linus_open" set ref 285* 286 289 294* 294 sclfi_ptr 40 based pointer level 2 in structure "lcb" dcl 1-53 in procedure "linus_open" ref 284 285 secured_db 15(03) based bit(1) level 2 packed unaligned dcl 1-53 set ref 282* setfi_ptr 36 based pointer level 2 dcl 1-53 set ref 298 300 301 302 310 311* ssu_$abort_line 000050 constant entry external dcl 185 ref 207 210 213 215 223 248 258 266 279 292 333 ssu_$arg_ptr 000054 constant entry external dcl 187 ref 219 ssu_$print_message 000056 constant entry external dcl 188 ref 306 ssu_$return_arg 000052 constant entry external dcl 186 ref 203 static_area 144 based area level 2 dcl 1-53 ref 217 347 363 sub_error_ 000312 stack reference condition dcl 189 ref 232 240 tab 1 based structure array level 2 dcl 4-3 timing_mode 15(05) based bit(1) level 2 packed unaligned dcl 1-53 ref 234 238 253 256 261 264 272 277 287 290 328 331 trans_id 4 based fixed bin(35,0) level 2 dcl 1-53 set ref 202* valid_open_mode 000011 constant char(19) initial array unaligned dcl 152 ref 221 223 vclock builtin function dcl 162 ref 234 238 253 256 261 264 272 277 287 290 328 331 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. EXCLUSIVE_RETRIEVAL internal static fixed bin(35,0) initial dcl 8-15 EXCLUSIVE_UPDATE internal static fixed bin(35,0) initial dcl 8-15 UPDATE internal static fixed bin(35,0) initial dcl 8-15 addr builtin function dcl 162 fixed builtin function dcl 162 initial_number_of_set_fn_info_args automatic fixed bin(17,0) dcl 6-36 num_relations_alloc automatic fixed bin(10,0) dcl 7-9 rel builtin function dcl 162 sys_info$max_seg_size external static fixed bin(35,0) dcl 164 NAMES DECLARED BY EXPLICIT CONTEXT. clean_up 001704 constant entry internal dcl 373 ref 199 245 init_ready_data 001552 constant entry internal dcl 341 ref 336 init_ready_table 001630 constant entry internal dcl 359 ref 337 linus_open 000174 constant entry external dcl 26 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2240 2320 1751 2250 Length 2740 1751 60 404 266 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_open 306 external procedure is an external procedure. on unit on line 197 64 on unit on unit on line 232 70 on unit init_ready_data internal procedure shares stack frame of external procedure linus_open. init_ready_table internal procedure shares stack frame of external procedure linus_open. clean_up 74 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_open 000100 ca_ptr linus_open 000102 nargs_init linus_open 000104 rd_ptr linus_open 000106 rd_nfiles_init linus_open 000110 rt_ptr linus_open 000112 ntabs_init linus_open 000114 sclfi_ptr linus_open 000116 linus_set_fn_info_ptr linus_open 000120 mr_ptr linus_open 000122 mrds_security_info_ptr linus_open 000124 db_version linus_open 000125 i linus_open 000126 j linus_open 000127 open_mode linus_open 000130 retrieval_mode linus_open 000131 code linus_open 000132 error_codes linus_open 000134 initial_mrds_vclock linus_open 000144 cleanup_has_been_signalled linus_open 000146 data_model_ptr linus_open 000150 free_setfi_ptr linus_open 000152 last_setfi_ptr linus_open 000154 opened_mode linus_open 000161 db_path_name linus_open 000233 out_path_name linus_open 000305 active_request_flag linus_open 000306 return_value_length linus_open 000310 return_value_ptr linus_open 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 alloc_based free_based vclock THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. dsl_$close dsl_$declare dsl_$get_db_version dsl_$get_pn dsl_$get_rslt_rels dsl_$get_security_info dsl_$open linus_stifle_mrds_sub_error ssu_$abort_line ssu_$arg_ptr ssu_$print_message ssu_$return_arg THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$too_many_args linus_error_$cant_ref_fun linus_error_$inv_mode linus_error_$no_input_arg linus_error_$too_few_args linus_error_$too_many_dbs mrds_error_$db_busy mrds_error_$quiesced_db LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 26 000170 115 000201 132 000203 194 000207 195 000210 197 000211 198 000225 199 000230 200 000235 202 000236 203 000243 205 000262 207 000276 210 000317 213 000343 215 000370 217 000415 218 000431 219 000437 220 000457 221 000461 222 000477 223 000501 227 000545 228 000550 230 000553 231 000556 232 000560 234 000606 236 000620 238 000650 240 000664 242 000670 245 000701 246 000705 248 000706 249 000725 253 000740 255 000752 256 000767 258 001003 261 001023 263 001035 264 001052 266 001066 268 001106 270 001117 272 001124 274 001135 277 001152 279 001166 281 001206 282 001215 284 001220 285 001224 286 001226 287 001232 289 001244 290 001265 292 001301 294 001321 295 001324 298 001325 299 001334 300 001336 301 001340 302 001341 305 001346 306 001352 310 001404 311 001413 312 001416 314 001421 315 001423 316 001425 317 001426 318 001427 319 001433 321 001442 322 001445 323 001452 326 001455 328 001465 330 001476 331 001513 333 001527 336 001547 337 001550 339 001551 341 001552 346 001553 347 001555 348 001571 349 001575 351 001577 352 001607 353 001622 354 001625 357 001627 359 001630 362 001631 363 001633 364 001647 365 001653 366 001661 367 001674 368 001676 369 001700 371 001702 373 001703 376 001711 378 001723 381 001746 ----------------------------------------------------------- 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