COMPILATION LISTING OF SEGMENT linus_modify_build_expr_tab Compiled by: Multics PL/I Compiler, Release 33a, of May 30, 1990 Compiled at: ACTC Technologies Inc. Compiled on: 10/14/90 0918.8 mdt Sun Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1990 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(90-04-30,Leskiw), approve(90-10-05,MCR8202), 16* audit(90-10-11,Bubric), install(90-10-14,MR12.4-1039): 17* Changes calls to assign_round_ from assign_ so that data is rounded. 18* END HISTORY COMMENTS */ 19 20 21 linus_modify_build_expr_tab: 22 proc (lcb_ptr, start_ptr, string_len, si_index, td_ptr, mod_lit_ptr, mod_lit_offset, si_ptr, code); 23 24 25 26 /* DESCRIPTION: 27* 28* This procedure is an Operator Precedence parser that is used by the select 29* clause translator and the modify request processor. 30* 31* 32* 33* HISTORY: 34* 35* 77-08-01 J. C. C. Jagernauth: Initially written. 36* 37* 80-01-11 Rickie E. Brinegar: Modified to use the entry 38* mdbm_util_$complex_data_class. 39* 40* 80-03-12 Rickie E. Brinegar: Modified to use temporary segment pointed to 41* by lcb.linus_area_ptr instead of getting system free area. 42* 43* 81-07-02 Rickie E. Brinegar: Removed the useless cleanup handler, added a 44* go to exit statement in the error procedure and a return statement after 45* the exit label. This is to correct TR9290. 46* 47* 81-07-13 Rickie E. Brinegar: Removed trappping of the conversion 48* condition. This is now relegated to the higher modules. 49* 50**/ 51 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 */ 52 53 2 1 /* BEGIN INCLUDE FILE linus_select_info.incl.pl1 */ 2 2 /* History: 77-07-29 J. A. Weeldreyer: Originally written. 2 3* Modified: 82-18-82 Dave Schimke: Added user_item.table_name 2 4**/ 2 5 dcl 1 select_info aligned based (si_ptr), /* info from LILA select clause */ 2 6 2 set_fn bit (1) unal, /* on if set fn to be applied */ 2 7 2 se_flags unal, /* flags pertaining to selection expr. */ 2 8 3 val_ret bit (1) unal, /* valid for retrieval */ 2 9 3 val_dtt bit (1) unal, /* valid for define_temp_table */ 2 10 3 val_del bit (1) unal, /* valid for delete */ 2 11 3 val_mod bit (1) unal, /* valid for modify */ 2 12 2 dup_flag bit (1) unal, /* on if dup explic. spec. somewhere */ 2 13 2 unique_flag bit (1) unal, /* on if unique explic. spec. somewhere */ 2 14 2 pad bit (29) unal, /* reserved */ 2 15 2 prior_sf_ptr ptr, /* pointer to set fns for prior eval. */ 2 16 2 se_ptr ptr, /* pointer to mrds selection expression */ 2 17 2 sel_items_ptr ptr, /* pointer to list of selected items */ 2 18 2 sel_items_len fixed bin, /* length in characters of list of selected items */ 2 19 2 se_len fixed bin (35), /* length of mrds sel. expr. */ 2 20 2 nsv_alloc fixed bin, /* no. of se. vals aloc. */ 2 21 2 nmi_alloc fixed bin, /* no. of mrds items alloc. */ 2 22 2 nui_alloc fixed bin, /* no. of user items alloc. */ 2 23 2 nsevals fixed bin, /* number of selection expr. vaules */ 2 24 2 n_mrds_items fixed bin, /* no. of items in mrds select list */ 2 25 2 n_user_items fixed bin, /* no. of items user will see */ 2 26 2 se_vals (nsv_init refer (select_info.nsv_alloc)), 2 27 3 arg_ptr ptr, 2 28 3 desc_ptr ptr, 2 29 2 mrds_item (nmi_init refer (select_info.nmi_alloc)), /* mrds select items */ 2 30 3 arg_ptr ptr, /* pointer to receiving field */ 2 31 3 bit_len fixed bin (35), /* bit length of receiving field */ 2 32 3 desc bit (36), /* descriptor for receiving field */ 2 33 3 assn_type fixed bin, /* type code for assign_ */ 2 34 3 assn_len fixed bin (35), /* length for assign_ */ 2 35 2 user_item (nui_init refer (select_info.nui_alloc)), /* user select item */ 2 36 3 name char (32) var, /* name for col. header */ 2 37 3 table_name char (32) var, /* name of containing linus table */ 2 38 3 item_type fixed bin, /* indicates type of item: 2 39* 1 => raw mrds, 2 40* 2 => expr. */ 2 41 3 rslt_desc bit (36), /* descriptor for expr. result */ 2 42 3 rslt_bit_len fixed bin (35), /* bit length of expr. result */ 2 43 3 rslt_assn_ptr ptr, /* pointer to expr. result storage loc. */ 2 44 3 rslt_assn_type fixed bin, /* assign_ type code of expr. result */ 2 45 3 rslt_assn_len fixed bin (35), /* assign_ length for expr. result */ 2 46 3 item_ptr ptr; /* pointer to item or expr. or applied set_func. structure */ 2 47 2 48 dcl (nsv_init, nmi_init, nui_init) fixed bin; 2 49 dcl si_ptr ptr; 2 50 2 51 /* END INCLUDE FILE linus_select_info.incl.pl1 */ 54 55 3 1 /* BEGIN INCLUDE FILE linus_expession.incl.pl1 -- jaw 6/29/77 */ 3 2 3 3 dcl 1 expression aligned based (ex_ptr), /* internal representation of an 3 4* arithmetic expr. Is in postfix polish form. */ 3 5 2 rslt_desc bit (36), /* descriptor for result */ 3 6 2 nelems fixed bin, /* no. of operators + no of operands */ 3 7 2 elem (nelems_init refer (expression.nelems)), 3 8 3 type fixed bin (4) unal, /* 1 => constant 3 9* 2 => linus variable 3 10* 3 => scalar function 3 11* 4 => set function 3 12* 5 => not used 3 13* 6 => data base item 3 14* 15 => operator */ 3 15 3 op_code fixed bin (3) unal, /* 1 => add 3 16* 2 => subtract 3 17* 3 => multiply 3 18* 4 => divide */ 3 19 3 reserved bit (27) unal, 3 20 3 desc bit (36), /* descriptor for item */ 3 21 3 bit_length fixed bin (35), /* bit length of item */ 3 22 3 assn_ptr ptr, /* assign_ pointer to item */ 3 23 3 assn_type fixed bin, /* assign_ type code for item */ 3 24 3 assn_len fixed bin (35), /* assign_ length for this item */ 3 25 3 fn_ptr ptr; /* pointer to function structure */ 3 26 3 27 dcl ex_ptr ptr; 3 28 dcl nelems_init fixed bin; 3 29 3 30 /* END INCLUDE FILE linus_expression.incl.pl1 */ 56 57 4 1 /* BEGIN INCLUDE FILE linus_token_data.incl.pl1 -- jaw 8/7/78 */ 4 2 4 3 dcl 1 token_data aligned based (td_ptr), /* data for lila tokens */ 4 4 2 key fixed bin (17) unal, /* key of token */ 4 5 2 must_free bit (1) unal, /* on if value must be freed */ 4 6 2 temp_tab bit (1) unal, /* on if temporary table */ 4 7 2 reserved bit (16) unal, 4 8 2 mvar char (32) var, /* mrds variable if identifier */ 4 9 2 lvar char (32) var, /* linus variable if identifier */ 4 10 2 length fixed bin (35), /* char length of token value */ 4 11 2 t_ptr ptr; /* points to token value */ 4 12 4 13 dcl ((NULL init (0)), 4 14 (RP init (1)), 4 15 (COL_SPEC init (2)), 4 16 (LINUS_VAR init (3)), 4 17 (CONST init (4)), 4 18 (SET_FN init (5)), 4 19 (SCAL_FN init (6)), 4 20 (LP init (7)), 4 21 (STAR init (8)), 4 22 (DIV init (9)), 4 23 (PLUS init (10)), 4 24 (MINUS init (11)), 4 25 (TAB_NAME init (12)), 4 26 (ROW_TAB_PAIR init (13)), 4 27 (UNION init (14)), 4 28 (INTER init (15)), 4 29 (DIFFER init (16)), 4 30 (ROW_DES init (17)), 4 31 (LB init (18)), 4 32 (RB init (19)), 4 33 (SELECT init (20)), 4 34 (NOT init (21)), 4 35 (AND init (22)), 4 36 (OR init (23)), 4 37 (EQ init (24)), 4 38 (NE init (25)), 4 39 (GT init (26)), 4 40 (GE init (27)), 4 41 (LT init (28)), 4 42 (LE init (29)), 4 43 (FROM init (30)), 4 44 (WHERE init (31)), 4 45 (DUP init (32)), 4 46 (UNIQUE init (33)), 4 47 (COMMA init (34))) fixed bin int static options (constant); 4 48 4 49 dcl td_ptr ptr; 4 50 4 51 /* END INCLUDE FILE linus_token_data.incl.pl1 */ 58 59 5 1 /* BEGIN INCLUDE FILE linus_variables.incl.pl1 -- jaw 7/19/77 */ 5 2 5 3 dcl 1 variables aligned based (lv_ptr), /* info for all variables */ 5 4 2 nvars_alloc fixed bin, /* no. var. slots alloc. */ 5 5 2 nvars fixed bin, /* no. of variables currently defined */ 5 6 2 var_info (nvars_init refer (variables.nvars_alloc)), 5 7 3 name char (32), /* name of variable */ 5 8 3 var_ptr ptr, /* ptr to curr. value */ 5 9 3 bit_len fixed bin (35), /* bit length of current value */ 5 10 3 assn_type fixed bin, /* assign_ type code of current value */ 5 11 3 assn_len fixed bin (35), /* assign_ length of current value */ 5 12 3 desc bit (36); /* descrptor of current value */ 5 13 5 14 dcl lv_ptr ptr; 5 15 dcl nvars_init fixed bin; 5 16 5 17 /* END INCLUDE FILE linus_variables.incl.pl1 */ 60 61 62 dcl expr_type (9) fixed bin (4) unal int static options (constant) init ( 63 /* Map token key to type or op_code */ 64 0, 6, /* Data base item */ 65 2, /* linus variable */ 66 1, /* constant */ 67 0, 3, /* multiply */ 68 4, /* divide */ 69 1, /* add */ 70 2); /* subtract */ 71 dcl CMPX_FD bit (36) aligned; 72 dcl CHAR_DESC bit (36) aligned; 73 dcl REAL_FD bit (36) aligned; 74 dcl FD59 bit (36) aligned int static options (constant) init ("100101000000000000000000000000111011"b); 75 /* Float decimal */ 76 dcl CFD59 bit (36) aligned int static options (constant) init ("100110000000000000000000000000111011"b); 77 78 /* Complex float decimal */ 79 dcl OPERATOR init (15) fixed bin (4) int static options (constant); 80 81 dcl prec_relations (0:9, 0:9) fixed bin (4) int static options (constant) init ( 82 /* 83* 1 = reduce_op [( .> ) E op_code E ] 84* 2 = reduce_paren [( .= ) (E)] 85* 3 = shift_token [( <. )] 86* 4 = end of expression [variable followed by variable] 87* 5 = shift only if this is the first item 88* 5 = reduce_var [reduce to E] 89* 8 = error [LP followed by invalid token] 90* 9 = make sure the first token shifted is not an operator or RP 91* 10 = make sure you are not reducing E + "" 92* 11 = end of expression 93* 94* the generic term "variable" is used to represent 95* one of the following: 96* column specification 97* linus variable 98* constant 99* set function result 100* scalar function result 101* 102* ROW and COLUMN names correspond in the table below */ 103 11, 8, (3) 6, 3, (4) 9, /* NULL 11 8 6 6 6 3 9 9 9 9 */ 104 (10) 2, /* RP 2 2 2 2 2 2 2 2 2 2 */ 105 (3) ((2) 5, (4) 4, (4) 5), /* COL_SPEC 5 5 4 4 4 4 5 5 5 5 */ 106 /* LINUS_VAR 5 5 4 4 4 4 5 5 5 5 */ 107 /* CONST 5 5 4 4 4 4 5 5 5 5 */ 108 8, 9, (4) 3, (4) 9,/* LP 8 9 3 3 3 3 9 9 9 9 */ 109 (2) (10, 1, (4) 3, (4) 1), /* STAR 10 1 3 3 3 3 1 1 1 1 */ 110 /* DIV 10 1 3 3 3 3 1 1 1 1 */ 111 (2) (10, 1, (6) 3, (2) 1)); /* PLUS 10 1 3 3 3 3 3 3 1 1 */ 112 /* MINUS 10 1 3 3 3 3 3 3 1 1 */ 113 114 dcl 1 arg_len_bits based, 115 2 pad bit (12) unal, 116 2 length bit (24) unal; /* arg_len for system standard argument list */ 117 118 dcl 1 stack aligned based (sk_ptr), 119 2 nargs fixed bin, 120 2 token_data (linus_data_$stk_depth refer (stack.nargs)), 121 3 key fixed bin (17) unal, 122 3 must_free bit (1) unal, 123 3 reduced bit (1) unal, /* On if item has been reduced */ 124 3 reserved bit (16) unal, 125 3 length fixed bin (35), 126 3 t_ptr ptr, 127 3 desc bit (36), 128 3 bit_length fixed bin (35), 129 3 assn_ptr ptr, 130 3 assn_type fixed bin, 131 3 assn_len fixed bin (35), 132 3 fn_ptr ptr, /* Pointer to function structure */ 133 3 type fixed bin (4) unal, 134 3 op_code fixed bin (3) unal; 135 136 dcl token_item char (token_data.length) based (token_data.t_ptr); 137 /* For shifting */ 138 dcl (i, j, k, temp_token_key, temp_stack_key, target_type, si_index, source_type, string_len, tos_key) fixed bin; 139 /* Points to first terminal on top of the work stack */ 140 141 dcl (bit_len, code, cs_len, icode, mod_lit_offset, previous_pos, source_length, start_pos, target_length) fixed bin (35); 142 143 dcl constant_string char (cs_len) based (cs_ptr); 144 145 dcl (cmpx, test) bit (1); 146 147 dcl (addr, bit, fixed, mod, null, rel, search, substr) builtin; 148 149 dcl ( 150 sk_ptr init (null), 151 cs_ptr init (null), 152 start_ptr, 153 mod_lit_ptr, 154 lit_ptr init (null) 155 ) ptr; 156 157 dcl expr_name (linus_data_$max_expr_items) char (32) init ((linus_data_$max_expr_items) (1)""); 158 159 dcl var_string bit (linus_data_$lit_string_size) based (mod_lit_ptr); 160 161 dcl ( 162 linus_data_$stk_depth, 163 linus_data_$lit_string_size, 164 linus_data_$max_expr_items, 165 sys_info$max_seg_size, 166 linus_error_$op_follow_lp, 167 linus_error_$too_many_expr_items, 168 linus_error_$mrds_item_not_def, 169 linus_error_$inv_expr 170 ) fixed bin (35) ext; 171 172 dcl linus_modify_gt entry (ptr, ptr, fixed bin, fixed bin (35), ptr, ptr, fixed bin (35)); 173 dcl linus_assign_data entry (bit (36), fixed bin, fixed bin (35)); 174 dcl assign_round_ entry (ptr, fixed bin, fixed bin (35), ptr, fixed bin, fixed bin (35)); 175 dcl work_area area based (linus_area_ptr); 176 dcl mdbm_util_$complex_data_class entry (ptr) returns (bit (1)); 177 178 sk_ptr, ex_ptr, cs_ptr = null; 179 180 start_pos = 1; /* starting position is always the first character */ 181 182 CHAR_DESC = "101010100000000000000000000000000000"b; 183 REAL_FD = "100101000000000000000000000000000000"b; 184 CMPX_FD = "100110000000000000000000000000000000"b; 185 nelems_init = linus_data_$stk_depth; /* For expression structure allocation */ 186 187 188 icode, code, tos_key = 0; /* Top of stack item that is not reduced */ 189 190 cmpx, test = "0"b; 191 lv_ptr = lcb.lv_ptr; /* Init linus_variables */ 192 193 allocate stack in (work_area); 194 stack.nargs = 0; /* Work stack is empty */ 195 allocate expression in (work_area); 196 expression.nelems = 0; /* Expression stack is empty */ 197 call get_token; 198 199 do while (^test); /* MAIN LOOP */ 200 if token_data.key > MINUS then 201 temp_token_key = NULL; /* invalid token */ 202 else temp_token_key = token_data.key; /* good token */ 203 if tos_key = 0 then 204 temp_stack_key = 0; 205 else temp_stack_key = stack.token_data.key (tos_key); 206 /* take key off stack */ 207 if ^test then do; 208 209 go to case (prec_relations (temp_stack_key, temp_token_key)); 210 211 case (1): 212 call reduce_op; /* E op E is on work stack */ 213 go to end_case; 214 215 case (2): 216 call reduce_paren; /* (E) is on work stack */ 217 go to end_case; 218 219 220 case (3): 221 call shift_token; /* place token on work stack */ 222 call get_token; 223 go to end_case; 224 225 case (4): 226 call reduce_var; /* end of expression -- variable followed by variable */ 227 if tos_key > 1 then 228 call reduce_op; /* After this call only E should be on work stack */ 229 test = "1"b; /* Exit */ 230 go to end_case; 231 232 case (5): 233 call reduce_var; /* place variable on expression stack */ 234 go to end_case; 235 236 case (6): 237 if tos_key ^= stack.nargs then 238 test = "1"b; 239 else do; /* shift */ 240 call shift_token; 241 call get_token; 242 end; 243 go to end_case; 244 245 case (8): 246 call error (linus_error_$inv_expr);/* LP followed by invalid token */ 247 go to end_case; 248 249 case (9): 250 if tos_key = stack.nargs then /* make sure the first token shifted is not an operator or RP */ 251 call error (linus_error_$op_follow_lp); 252 else do; 253 call shift_token; /* then place token on work stack */ 254 call get_token; 255 end; 256 go to end_case; 257 258 case (10): 259 if tos_key = stack.nargs then /* make sure you are not reducing E + "" */ 260 call error (linus_error_$inv_expr); 261 else call reduce_op; /* E op E is on work stack */ 262 go to end_case; 263 264 case (11): 265 test = "1"b; /* end of expression */ 266 267 end_case: 268 end; 269 end; /* END MAIN LOOP */ 270 271 if token_data.key ^= NULL then 272 start_pos = previous_pos; 273 if ^(stack.nargs = 1 & stack.token_data.reduced (1)) | start_pos <= string_len then do; 274 /* Make sure expression was good */ 275 ex_ptr = null; 276 call error (linus_error_$inv_expr); 277 end; 278 else do; 279 if expression.nelems = 1 then 280 expression.rslt_desc = expression.elem.desc (1); 281 /* only one item in expression */ 282 else if cmpx then 283 expression.rslt_desc = CFD59; /* Init to complex float decimal 59 */ 284 else expression.rslt_desc = FD59; /* Init to float decimal 59 */ 285 286 287 select_info.user_item.item_ptr (si_index) = ex_ptr; /* pass pointer to expression structure */ 288 select_info.user_item.rslt_desc (si_index) = expression.rslt_desc; 289 /* pass expression info in select_info.user_item.rslt_structure */ 290 call 291 linus_assign_data ((select_info.user_item.rslt_desc (si_index)), select_info.user_item.rslt_assn_type (si_index), 292 select_info.user_item.rslt_assn_len (si_index)); 293 294 call 295 alloc_lit (select_info.user_item.rslt_assn_type (si_index), select_info.user_item.rslt_assn_len (si_index), 296 select_info.user_item.rslt_assn_ptr (si_index), select_info.user_item.rslt_bit_len (si_index)); 297 end; 298 299 sk_ptr = null; 300 301 exit: 302 return; 303 304 get_token: 305 proc; 306 307 previous_pos = start_pos; 308 call linus_modify_gt (lcb_ptr, start_ptr, string_len, start_pos, td_ptr, si_ptr, code); 309 if icode ^= 0 then 310 call error (icode); 311 if token_data.key > CONST then 312 token_data.key = token_data.key - 2; /* this allows proper access to the 313* precedence table since set_fn and scal_fn were removed */ 314 315 end get_token; 316 317 shift_token: 318 proc; /* Push token data onto work stack */ 319 stack.nargs = stack.nargs + 1; /* push work stack */ 320 tos_key = stack.nargs; /* set top of stack index */ 321 stack.token_data.fn_ptr (stack.nargs) = null; 322 stack.token_data.reduced (stack.nargs) = "0"b; 323 if token_data.key > CONST then do; /* Item is an operator */ 324 stack.token_data.type (stack.nargs) = OPERATOR; 325 stack.token_data.op_code (stack.nargs) = expr_type (token_data.key); 326 end; 327 else do; /* item is not an operator */ 328 stack.token_data.op_code (stack.nargs) = NULL; 329 stack.token_data.type (stack.nargs) = expr_type (token_data.key); 330 end; 331 if token_data.key = LINUS_VAR then 332 call shift_linus_var; 333 else if token_data.key = CONST then 334 call shift_const; 335 else if token_data.key = COL_SPEC then 336 call shift_col_spec; 337 call shift_comm; 338 end shift_token; 339 340 reduce_op: 341 proc; /* E op_code E is on top of the work stack */ 342 call push_expression; 343 tos_key = tos_key - 2; 344 stack.nargs = stack.nargs - 2; /* point to E */ 345 end reduce_op; 346 347 348 reduce_paren: 349 proc; /* (E) is on top of the work stack */ 350 stack.token_data.reduced (tos_key), stack.token_data.reduced (tos_key - 2) = "1"b; 351 /* pushed */ 352 tos_key = tos_key - 3; 353 stack.nargs = stack.nargs - 2; 354 end reduce_paren; 355 356 357 reduce_var: 358 proc; /* a variable is on the work stack */ 359 call push_expression; /* place variable on expression stack */ 360 tos_key = tos_key - 1; 361 end reduce_var; 362 363 push_expression: 364 proc; /* Data is removed from the work stack and pushed onto the expression stack */ 365 stack.token_data.reduced (tos_key) = "1"b; /* Set flag to indicate that item was pushed */ 366 expression.nelems = expression.nelems + 1; /* Point to new top of stack */ 367 expression.elem.type (expression.nelems) = stack.token_data.type (tos_key); 368 /* Push data */ 369 expression.elem.op_code (expression.nelems) = stack.token_data.op_code (tos_key); 370 if expression.elem.type (expression.nelems) ^= OPERATOR then do; 371 expression.elem.desc (expression.nelems) = stack.token_data.desc (tos_key); 372 expression.elem.bit_length (expression.nelems) = stack.token_data.bit_length (tos_key); 373 expression.elem.assn_ptr (expression.nelems) = stack.token_data.assn_ptr (tos_key); 374 expression.elem.assn_type (expression.nelems) = stack.token_data.assn_type (tos_key); 375 expression.elem.assn_len (expression.nelems) = stack.token_data.assn_len (tos_key); 376 expression.elem.fn_ptr (expression.nelems) = stack.token_data.fn_ptr (tos_key); 377 end; 378 379 if stack.token_data.must_free (tos_key) then 380 stack.token_data.t_ptr (tos_key) = null; 381 if mdbm_util_$complex_data_class (addr (expression.elem.desc (expression.nelems))) then 382 cmpx = "1"b; 383 end push_expression; 384 385 shift_common: 386 proc (desc, bit_length, assn_ptr, assn_type, assn_len); 387 dcl desc bit (36) aligned; 388 dcl (bit_length, assn_len) fixed bin (35); 389 dcl assn_ptr ptr; 390 dcl assn_type fixed bin; 391 stack.token_data.desc (stack.nargs) = desc; 392 stack.token_data.bit_length (stack.nargs) = bit_length; 393 stack.token_data.assn_ptr (stack.nargs) = assn_ptr; 394 stack.token_data.assn_type (stack.nargs) = assn_type; 395 stack.token_data.assn_len (stack.nargs) = assn_len; 396 call shift_comm; 397 end shift_common; 398 399 400 shift_comm: 401 proc; 402 stack.token_data.key (stack.nargs) = token_data.key; 403 stack.token_data.must_free (stack.nargs) = token_data.must_free; 404 stack.token_data.length (stack.nargs) = token_data.length; 405 stack.token_data.t_ptr (stack.nargs) = token_data.t_ptr; 406 end shift_comm; 407 408 409 shift_linus_var: 410 proc; 411 i = token_data.length; 412 call 413 shift_common (variables.var_info.desc (i), variables.var_info.bit_len (i), variables.var_info.var_ptr (i), 414 variables.var_info.assn_type (i), variables.var_info.assn_len (i)); 415 end shift_linus_var; 416 417 shift_const: 418 proc; 419 420 dcl 1 token_data_temp like token_data; 421 422 dcl first_char char (1) based (token_data_temp.t_ptr); 423 dcl offset (10) bit (1) based; 424 dcl repl_factor char (repl_len) based (repl_ptr); 425 dcl constant_desc bit (36); 426 dcl one_repl_ch char (1) based (orc_ptr); 427 dcl one_source_ch char (1) based (osc_ptr); 428 429 dcl ( 430 ci_ptr init (null), 431 repl_ptr init (null), 432 orc_ptr init (null), 433 osc_ptr init (null), 434 source_ptr init (null) 435 ) ptr; 436 437 dcl k fixed bin; 438 439 440 dcl repl_flag bit (1); 441 442 dcl (repl_fac, repl_len, ci_len) fixed bin (35); 443 444 dcl RIGHT_PAREN char (1) int static options (constant) init (")"); 445 dcl LEFT_PAREN char (1) int static options (constant) init ("("); 446 dcl QUOTE char (1) int static options (constant) init (""""); 447 dcl BIT_DESC bit (36) init ("101001100000000000000000000000000000"b); 448 449 token_data_temp = token_data; 450 repl_flag = "0"b; 451 source_length = token_data.length; 452 source_ptr = token_data.t_ptr; 453 if (search (token_item, "i")) > 0 then 454 constant_desc = CMPX_FD; 455 else constant_desc = REAL_FD; 456 addr (constant_desc) -> arg_len_bits.length = substr (bit (token_data.length), 12, 24); 457 /* set length of float dec descriptor */ 458 if first_char = LEFT_PAREN then do; 459 repl_flag = "1"b; /* there is a replication factor */ 460 repl_ptr, token_data.t_ptr = addr (token_data.t_ptr -> offset (10)); 461 do j = 2 to token_data.length while (first_char ^= RIGHT_PAREN); 462 token_data.t_ptr = addr (token_data.t_ptr -> offset (10)); 463 end; 464 repl_len = j - 2; 465 token_data.length = token_data.length - j; 466 token_data.t_ptr = addr (token_data.t_ptr -> offset (10)); 467 token_data_temp = token_data; 468 repl_fac = fixed (repl_factor); 469 end; 470 if first_char = QUOTE then do; 471 ci_ptr, token_data_temp.t_ptr = addr (token_data_temp.t_ptr -> offset (10)); 472 do j = 2 to token_data_temp.length while (first_char ^= QUOTE); 473 token_data_temp.t_ptr = addr (token_data_temp.t_ptr -> offset (10)); 474 end; 475 ci_len = token_data_temp.length - 2; 476 if j = token_data_temp.length then 477 constant_desc = CHAR_DESC; 478 else do; 479 ci_len = token_data_temp.length - 1; 480 constant_desc = BIT_DESC; 481 end; 482 addr (constant_desc) -> arg_len_bits.length = addr (ci_len) -> arg_len_bits.length; 483 source_ptr = ci_ptr; 484 source_length = ci_len; 485 if repl_flag then do; 486 source_length, cs_len = repl_fac * ci_len; 487 addr (constant_desc) -> arg_len_bits.length = addr (cs_len) -> arg_len_bits.length; 488 allocate constant_string in (work_area); 489 source_ptr, orc_ptr = cs_ptr; 490 do j = 1 to repl_fac; /* to number of replication factor */ 491 osc_ptr = ci_ptr; 492 do k = 1 to ci_len; /* one for each character in string */ 493 one_repl_ch = one_source_ch; 494 orc_ptr = addr (orc_ptr -> offset (10)); 495 osc_ptr = addr (osc_ptr -> offset (10)); 496 end; 497 end; 498 end; 499 end; 500 call linus_assign_data (constant_desc, target_type, target_length); 501 /* returns type and length */ 502 call alloc_lit (target_type, target_length, lit_ptr, bit_len); 503 /* returns pointer to literal pool and bit length */ 504 addr (CHAR_DESC) -> arg_len_bits.length = substr (bit (token_data.length), 12, 24); 505 /* set length of char descriptor */ 506 call linus_assign_data ((CHAR_DESC), source_type, source_length); 507 /* returns type and length */ 508 call assign_round_ (lit_ptr, target_type, target_length, source_ptr, source_type, source_length); 509 call shift_common ((constant_desc), bit_len, lit_ptr, target_type, target_length); 510 511 if cs_ptr ^= null then 512 cs_ptr = null; 513 514 end shift_const; 515 516 shift_col_spec: 517 proc; /* index is passed in token_data_length */ 518 519 i = token_data.length; 520 if i = 0 | i > select_info.n_mrds_items then 521 call error (linus_error_$mrds_item_not_def); 522 do k = 1 to linus_data_$max_expr_items while (expr_name (k) ^= "" & expr_name (k) ^= select_info.user_item.name (i)); 523 end; 524 if k > linus_data_$max_expr_items then 525 call error (linus_error_$too_many_expr_items); 526 else if expr_name (k) = "" then 527 expr_name (k) = select_info.user_item.name (i); 528 call 529 shift_common (select_info.mrds_item.desc (i), select_info.mrds_item.bit_len (i), 530 lcb.si_ptr -> select_info.mrds_item.arg_ptr (i), select_info.mrds_item.assn_type (i), 531 select_info.mrds_item.assn_len (i)); 532 end shift_col_spec; 533 534 alloc_lit: 535 proc (type, length, lit_ptr, bit_len); 536 537 /* Procedure to allocate space for a literal in the literal string, given the assign_ 538* type code and length. A pointer and bit length are returned. */ 539 dcl type fixed bin; 540 dcl lit_ptr ptr; 541 dcl (length, bit_len, align_req, needed) fixed bin (35); 542 543 dcl 1 alen aligned based (addr (length)), 544 2 q fixed bin (17) unal, 545 2 p fixed bin (17) unal; 546 dcl align_array (45) fixed bin int static options (constant) init (0, 36, 547 /* real fixed bin short aligned */ 548 0, /* real fixed bin short unaligned */ 549 72, /* real fixed bin long aligned */ 550 0, /* real fixed bin long unaligned */ 551 36, /* real float bin short aligned */ 552 0, /* real float bin short unaligned */ 553 72, /* real float bin long aligned */ 554 0, /* real float bin long unaligned */ 555 72, /* complex fixed bin short aligned */ 556 0, /* complex fixed bin short unaligned */ 557 72, /* complex fixed bin long aligned */ 558 0, /* complex fixed bin long unaligned */ 559 72, /* complex float bin short aligned */ 560 0, /* complex float bin short unaligned */ 561 72, /* complex float bin long aligned */ 562 0, /* complex float bin long unaligned */ 563 36, /* real fixed dec aligned */ 564 9, /* real fixed dec unaligned */ 565 36, /* real float dec aligned */ 566 9, /* real float dec unaligned */ 567 36, /* complex fixed dec aligned */ 568 9, /* complex fixed dec unaligned */ 569 36, /* complex float dec aligned */ 570 9, /* complex float dec unaligned */ 571 (12) 0, 36, /* bit aligned */ 572 0, /* bit uanligned */ 573 36, /* var bit aligned */ 574 36, /* var bit unaligned */ 575 36, /* char aligned */ 576 9, /* char unaligned */ 577 36, /* var char aligned */ 578 36); /* var char unaligned */ 579 580 dcl bl_factors (45, 3) fixed bin (11) int static options (constant) init ((3) 0, 581 /* pad */ 582 0, 36, 0, /* real fixed bin short aligned */ 583 1, 1, 0, /* real fixed bin short unaligned */ 584 0, 72, 0, /* real fixed bin long aligned */ 585 1, 1, 0, /* real fixed bin long unal */ 586 0, 36, 0, /* real float bin short aligned */ 587 1, 9, 0, /* real float bin short unal */ 588 0, 72, 0, /* real float bin long aligned */ 589 1, 9, 0, /* real float bin long unal */ 590 0, 72, 0, /* complex fixed bin short aligned */ 591 2, 2, 0, /* complex fixed bin short unal */ 592 0, 144, 0, /* complex fixed bin long aligned */ 593 2, 2, 0, /* complex fixed bin long unal */ 594 0, 72, 0, /* complex float bin short aligned */ 595 2, 18, 0, /* complex float bin short unal */ 596 0, 144, 0, /* complex folat bin long aligned */ 597 2, 18, 0, /* complex float bin long unal */ 598 9, 9, 36, /* real fixed dec aligned */ 599 9, 9, 0, /* real fixed dec unal */ 600 9, 18, 36, /* real float dec aligned */ 601 9, 18, 0, /* real float dec unal */ 602 18, 18, 36, /* complex fixed dec aligned */ 603 18, 18, 0, /* complex fixed dec unal */ 604 18, 18, 36, /* complex float dec aligned */ 605 18, 36, 0, /* complex float dec unal */ 606 (36) 0, /* illegal types */ 607 1, 0, 36, /* bit aligned */ 608 1, 0, 0, /* bit unal */ 609 1, 36, 36, /* var bit aligned */ 610 1, 36, 36, /* var bit unal */ 611 9, 0, 36, /* char aligned */ 612 9, 0, 0, /* char unal */ 613 9, 36, 36, /* char var aligned */ 614 9, 36, 36); /* char var unal */ 615 dcl COMP_FLT_DEC fixed bin int static options (constant) init (25); 616 617 dcl var_array (0:linus_data_$lit_string_size - 1) bit (1) unal based (mod_lit_ptr); 618 619 if mod_lit_ptr = null then do; /* if literal pool not yet allocated */ 620 allocate var_string in (work_area); 621 var_string = "0"b; 622 mod_lit_offset = 0; 623 end; 624 625 align_req = align_array (type); /* find type of alignment needed */ 626 if align_req > 0 then do; /* if need to align */ 627 needed = align_req - mod (mod_lit_offset, align_req); 628 if needed < align_req then /* if need to adjust */ 629 mod_lit_offset = mod_lit_offset + needed; 630 end; /* aligning */ 631 632 lit_ptr = addr (var_array (mod_lit_offset)); 633 634 if type <= COMP_FLT_DEC then /* bit len for arith. type */ 635 bit_len = bl_factors (type, 1) * alen.p + bl_factors (type, 2); 636 else /* bit len for string type */ 637 bit_len = bl_factors (type, 1) * length + bl_factors (type, 2); 638 if bl_factors (type, 3) > 0 then do; /* if padding needed */ 639 needed = bl_factors (type, 3) - mod (bit_len, bl_factors (type, 3)); 640 if needed < bl_factors (type, 3) then /* if need to pad out */ 641 bit_len = bit_len + needed; 642 end; /* if padding */ 643 644 if mod_lit_offset + bit_len - 1 > linus_data_$lit_string_size then 645 lit_ptr = null; 646 else mod_lit_offset = mod_lit_offset + bit_len; /* keep offset current */ 647 648 return; 649 650 end alloc_lit; 651 652 653 654 error: 655 proc (inter_code); 656 657 dcl inter_code fixed bin (35); 658 659 code = inter_code; 660 661 go to exit; 662 663 end error; 664 665 666 end linus_modify_build_expr_tab; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/14/90 0915.0 linus_modify_build_expr_tab.pl1 >spec>install>1039>linus_modify_build_expr_tab.pl1 52 1 07/29/86 1248.4 linus_lcb.incl.pl1 >ldd>include>linus_lcb.incl.pl1 54 2 09/16/83 1438.0 linus_select_info.incl.pl1 >ldd>include>linus_select_info.incl.pl1 56 3 03/27/82 0534.5 linus_expression.incl.pl1 >ldd>include>linus_expression.incl.pl1 58 4 03/27/82 0534.5 linus_token_data.incl.pl1 >ldd>include>linus_token_data.incl.pl1 60 5 03/27/82 0534.5 linus_variables.incl.pl1 >ldd>include>linus_variables.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. BIT_DESC 000311 automatic bit(36) initial packed unaligned dcl 447 set ref 447* 480 CFD59 000443 constant bit(36) initial dcl 76 ref 282 CHAR_DESC 000107 automatic bit(36) dcl 72 set ref 182* 476 504 506 CMPX_FD 000106 automatic bit(36) dcl 71 set ref 184* 453 COL_SPEC constant fixed bin(17,0) initial dcl 4-13 ref 335 COMP_FLT_DEC constant fixed bin(17,0) initial dcl 615 ref 634 CONST constant fixed bin(17,0) initial dcl 4-13 ref 311 323 333 FD59 000444 constant bit(36) initial dcl 74 ref 284 LEFT_PAREN 003137 constant char(1) initial packed unaligned dcl 445 ref 458 LINUS_VAR constant fixed bin(17,0) initial dcl 4-13 ref 331 MINUS constant fixed bin(17,0) initial dcl 4-13 ref 200 NULL constant fixed bin(17,0) initial dcl 4-13 ref 200 271 328 OPERATOR constant fixed bin(4,0) initial dcl 79 ref 324 370 QUOTE 003136 constant char(1) initial packed unaligned dcl 446 ref 470 472 REAL_FD 000110 automatic bit(36) dcl 73 set ref 183* 455 RIGHT_PAREN 003140 constant char(1) initial packed unaligned dcl 444 ref 461 addr builtin function dcl 147 ref 381 381 456 460 462 466 471 473 482 482 487 487 494 495 504 632 634 alen based structure level 1 dcl 543 align_array 000222 constant fixed bin(17,0) initial array dcl 546 ref 625 align_req 000334 automatic fixed bin(35,0) dcl 541 set ref 625* 626 627 627 628 arg_len_bits based structure level 1 packed packed unaligned dcl 114 arg_ptr based pointer array level 3 dcl 2-5 set ref 528* assign_round_ 000032 constant entry external dcl 174 ref 508 assn_len 13 based fixed bin(35,0) array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 375 395* assn_len 16 based fixed bin(35,0) array level 3 in structure "variables" dcl 5-3 in procedure "linus_modify_build_expr_tab" set ref 412* assn_len based fixed bin(35,0) array level 3 in structure "select_info" dcl 2-5 in procedure "linus_modify_build_expr_tab" set ref 528* assn_len 11 based fixed bin(35,0) array level 3 in structure "expression" dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 375* assn_len parameter fixed bin(35,0) dcl 388 in procedure "shift_common" ref 385 395 assn_ptr 6 based pointer array level 3 in structure "expression" dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 373* assn_ptr parameter pointer dcl 389 in procedure "shift_common" ref 385 393 assn_ptr 10 based pointer array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 373 393* assn_type parameter fixed bin(17,0) dcl 390 in procedure "shift_common" ref 385 394 assn_type 10 based fixed bin(17,0) array level 3 in structure "expression" dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 374* assn_type 15 based fixed bin(17,0) array level 3 in structure "variables" dcl 5-3 in procedure "linus_modify_build_expr_tab" set ref 412* assn_type 12 based fixed bin(17,0) array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 374 394* assn_type based fixed bin(17,0) array level 3 in structure "select_info" dcl 2-5 in procedure "linus_modify_build_expr_tab" set ref 528* bit builtin function dcl 147 ref 456 504 bit_len based fixed bin(35,0) array level 3 in structure "select_info" dcl 2-5 in procedure "linus_modify_build_expr_tab" set ref 528* bit_len parameter fixed bin(35,0) dcl 541 in procedure "alloc_lit" set ref 534 634* 636* 639 640* 640 644 646 bit_len 000121 automatic fixed bin(35,0) dcl 141 in procedure "linus_modify_build_expr_tab" set ref 502* 509* bit_len 14 based fixed bin(35,0) array level 3 in structure "variables" dcl 5-3 in procedure "linus_modify_build_expr_tab" set ref 412* bit_length 4 based fixed bin(35,0) array level 3 in structure "expression" dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 372* bit_length parameter fixed bin(35,0) dcl 388 in procedure "shift_common" ref 385 392 bit_length 7 based fixed bin(35,0) array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 372 392* bl_factors 000013 constant fixed bin(11,0) initial array dcl 580 ref 634 634 636 636 638 639 639 640 ci_len 000310 automatic fixed bin(35,0) dcl 442 set ref 475* 479* 482 484 486 492 ci_ptr 000272 automatic pointer initial dcl 429 set ref 429* 471* 483 491 cmpx 000130 automatic bit(1) packed unaligned dcl 145 set ref 190* 282 381* code parameter fixed bin(35,0) dcl 141 set ref 21 188* 308* 659* constant_desc 000270 automatic bit(36) packed unaligned dcl 425 set ref 453* 455* 456 476* 480* 482 487 500* 509 constant_string based char packed unaligned dcl 143 ref 488 cs_len 000122 automatic fixed bin(35,0) dcl 141 set ref 486* 487 488 488 cs_ptr 000134 automatic pointer initial dcl 149 set ref 149* 178* 488* 489 511 511* desc 3 based bit(36) array level 3 in structure "expression" dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 279 371* 381 381 desc 6 based bit(36) array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 371 391* desc based bit(36) array level 3 in structure "select_info" dcl 2-5 in procedure "linus_modify_build_expr_tab" set ref 528* desc 17 based bit(36) array level 3 in structure "variables" dcl 5-3 in procedure "linus_modify_build_expr_tab" set ref 412* desc parameter bit(36) dcl 387 in procedure "shift_common" ref 385 391 elem 2 based structure array level 2 dcl 3-3 ex_ptr 000100 automatic pointer dcl 3-27 set ref 178* 195* 196 275* 279 279 279 282 284 287 288 366 366 367 367 369 369 370 370 371 371 372 372 373 373 374 374 375 375 376 376 381 381 381 381 expr_name 000140 automatic char(32) initial array packed unaligned dcl 157 set ref 157* 522 522 526 526* expr_type 000446 constant fixed bin(4,0) initial array packed unaligned dcl 62 ref 325 329 expression based structure level 1 dcl 3-3 set ref 195 first_char based char(1) packed unaligned dcl 422 ref 458 461 470 472 fixed builtin function dcl 147 ref 468 fn_ptr 12 based pointer array level 3 in structure "expression" dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 376* fn_ptr 14 based pointer array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 321* 376 i 000111 automatic fixed bin(17,0) dcl 138 set ref 411* 412 412 412 412 412 519* 520 520 522 526 528 528 528 528 528 icode 000123 automatic fixed bin(35,0) dcl 141 set ref 188* 309 309* inter_code parameter fixed bin(35,0) dcl 657 ref 654 659 item_ptr based pointer array level 3 dcl 2-5 set ref 287* j 000112 automatic fixed bin(17,0) dcl 138 set ref 461* 464 465 472* 476 490* k 000304 automatic fixed bin(17,0) dcl 437 in procedure "shift_const" set ref 492* k 000113 automatic fixed bin(17,0) dcl 138 in procedure "linus_modify_build_expr_tab" set ref 522* 522 522* 524 526 526 key based fixed bin(17,0) level 2 in structure "token_data" packed packed unaligned dcl 4-3 in procedure "linus_modify_build_expr_tab" set ref 200 202 271 311 311* 311 323 325 329 331 333 335 402 key 2 based fixed bin(17,0) array level 3 in structure "stack" packed packed unaligned dcl 118 in procedure "linus_modify_build_expr_tab" set ref 205 402* lcb based structure level 1 dcl 1-53 lcb_ptr parameter pointer dcl 1-121 set ref 21 191 193 195 308* 488 528 620 length 0(12) based bit(24) level 2 in structure "arg_len_bits" packed packed unaligned dcl 114 in procedure "linus_modify_build_expr_tab" set ref 456* 482* 482 487* 487 504* length 23 000242 automatic fixed bin(35,0) level 2 in structure "token_data_temp" dcl 420 in procedure "shift_const" set ref 472 475 476 479 length parameter fixed bin(35,0) dcl 541 in procedure "alloc_lit" set ref 534 634 636 length 3 based fixed bin(35,0) array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 404* length 23 based fixed bin(35,0) level 2 in structure "token_data" dcl 4-3 in procedure "linus_modify_build_expr_tab" set ref 404 411 451 453 456 461 465* 465 504 519 linus_area_ptr 60 based pointer level 2 dcl 1-53 ref 193 195 488 620 linus_assign_data 000030 constant entry external dcl 173 ref 290 500 506 linus_data_$lit_string_size 000012 external static fixed bin(35,0) dcl 161 ref 620 620 621 644 linus_data_$max_expr_items 000014 external static fixed bin(35,0) dcl 161 ref 157 157 522 524 linus_data_$stk_depth 000010 external static fixed bin(35,0) dcl 161 ref 185 193 193 linus_error_$inv_expr 000024 external static fixed bin(35,0) dcl 161 set ref 245* 258* 276* linus_error_$mrds_item_not_def 000022 external static fixed bin(35,0) dcl 161 set ref 520* linus_error_$op_follow_lp 000016 external static fixed bin(35,0) dcl 161 set ref 249* linus_error_$too_many_expr_items 000020 external static fixed bin(35,0) dcl 161 set ref 524* linus_modify_gt 000026 constant entry external dcl 172 ref 308 lit_ptr 000136 automatic pointer initial dcl 149 in procedure "linus_modify_build_expr_tab" set ref 149* 502* 508* 509* lit_ptr parameter pointer dcl 540 in procedure "alloc_lit" set ref 534 632* 644* lv_ptr 000104 automatic pointer dcl 5-14 in procedure "linus_modify_build_expr_tab" set ref 191* 412 412 412 412 412 lv_ptr 32 based pointer level 2 in structure "lcb" dcl 1-53 in procedure "linus_modify_build_expr_tab" ref 191 mdbm_util_$complex_data_class 000034 constant entry external dcl 176 ref 381 mod builtin function dcl 147 ref 627 639 mod_lit_offset parameter fixed bin(35,0) dcl 141 set ref 21 622* 627 628* 628 632 644 646* 646 mod_lit_ptr parameter pointer dcl 149 set ref 21 619 620* 621 632 mrds_item based structure array level 2 dcl 2-5 must_free 0(18) based bit(1) level 2 in structure "token_data" packed packed unaligned dcl 4-3 in procedure "linus_modify_build_expr_tab" ref 403 must_free 2(18) based bit(1) array level 3 in structure "stack" packed packed unaligned dcl 118 in procedure "linus_modify_build_expr_tab" set ref 379 403* n_mrds_items 16 based fixed bin(17,0) level 2 dcl 2-5 ref 520 name based varying char(32) array level 3 dcl 2-5 ref 522 526 nargs based fixed bin(17,0) level 2 dcl 118 set ref 193* 194* 236 249 258 273 319* 319 320 321 322 324 325 328 329 344* 344 353* 353 391 392 393 394 395 402 403 404 405 needed 000335 automatic fixed bin(35,0) dcl 541 set ref 627* 628 628 639* 640 640 nelems 1 based fixed bin(17,0) level 2 dcl 3-3 set ref 195* 196* 279 366* 366 367 369 370 371 372 373 374 375 376 381 381 nelems_init 000102 automatic fixed bin(17,0) dcl 3-28 set ref 185* 195 195 nmi_alloc 13 based fixed bin(17,0) level 2 dcl 2-5 ref 287 288 290 290 290 294 294 294 294 522 526 nsv_alloc 12 based fixed bin(17,0) level 2 dcl 2-5 ref 287 288 290 290 290 294 294 294 294 522 526 528 528 528 528 528 null builtin function dcl 147 ref 149 149 149 178 275 299 321 379 429 429 429 429 429 511 511 619 644 offset based bit(1) array packed unaligned dcl 423 set ref 460 462 466 471 473 494 495 one_repl_ch based char(1) packed unaligned dcl 426 set ref 493* one_source_ch based char(1) packed unaligned dcl 427 ref 493 op_code 2(05) based fixed bin(3,0) array level 3 in structure "expression" packed packed unaligned dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 369* op_code 16(05) based fixed bin(3,0) array level 3 in structure "stack" packed packed unaligned dcl 118 in procedure "linus_modify_build_expr_tab" set ref 325* 328* 369 orc_ptr 000276 automatic pointer initial dcl 429 set ref 429* 489* 493 494* 494 osc_ptr 000300 automatic pointer initial dcl 429 set ref 429* 491* 493 495* 495 p 0(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 543 ref 634 prec_relations 000277 constant fixed bin(4,0) initial array dcl 81 ref 209 previous_pos 000124 automatic fixed bin(35,0) dcl 141 set ref 271 307* reduced 2(19) based bit(1) array level 3 packed packed unaligned dcl 118 set ref 273 322* 350* 350* 365* repl_fac 000306 automatic fixed bin(35,0) dcl 442 set ref 468* 486 490 repl_factor based char packed unaligned dcl 424 ref 468 repl_flag 000305 automatic bit(1) packed unaligned dcl 440 set ref 450* 459* 485 repl_len 000307 automatic fixed bin(35,0) dcl 442 set ref 464* 468 repl_ptr 000274 automatic pointer initial dcl 429 set ref 429* 460* 468 rslt_assn_len based fixed bin(35,0) array level 3 dcl 2-5 set ref 290* 294* rslt_assn_ptr based pointer array level 3 dcl 2-5 set ref 294* rslt_assn_type based fixed bin(17,0) array level 3 dcl 2-5 set ref 290* 294* rslt_bit_len based fixed bin(35,0) array level 3 dcl 2-5 set ref 294* rslt_desc based bit(36) level 2 in structure "expression" dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 279* 282* 284* 288 rslt_desc based bit(36) array level 3 in structure "select_info" dcl 2-5 in procedure "linus_modify_build_expr_tab" set ref 288* 290 search builtin function dcl 147 ref 453 select_info based structure level 1 dcl 2-5 si_index parameter fixed bin(17,0) dcl 138 ref 21 287 288 290 290 290 294 294 294 294 si_ptr parameter pointer dcl 2-49 in procedure "linus_modify_build_expr_tab" set ref 21 287 288 290 290 290 294 294 294 294 308* 520 522 526 528 528 528 528 si_ptr 34 based pointer level 2 in structure "lcb" dcl 1-53 in procedure "linus_modify_build_expr_tab" ref 528 sk_ptr 000132 automatic pointer initial dcl 149 set ref 149* 178* 193* 194 205 236 249 258 273 273 299* 319 319 320 321 321 322 322 324 324 325 325 328 328 329 329 344 344 350 350 353 353 365 367 369 371 372 373 374 375 376 379 379 391 391 392 392 393 393 394 394 395 395 402 402 403 403 404 404 405 405 source_length 000125 automatic fixed bin(35,0) dcl 141 set ref 451* 484* 486* 506* 508* source_ptr 000302 automatic pointer initial dcl 429 set ref 429* 452* 483* 489* 508* source_type 000117 automatic fixed bin(17,0) dcl 138 set ref 506* 508* stack based structure level 1 dcl 118 set ref 193 start_pos 000126 automatic fixed bin(35,0) dcl 141 set ref 180* 271* 273 307 308* start_ptr parameter pointer dcl 149 set ref 21 308* string_len parameter fixed bin(17,0) dcl 138 set ref 21 273 308* substr builtin function dcl 147 ref 456 504 t_ptr 4 based pointer array level 3 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" set ref 379* 405* t_ptr 24 based pointer level 2 in structure "token_data" dcl 4-3 in procedure "linus_modify_build_expr_tab" set ref 405 452 453 460 460* 462* 462 466* 466 t_ptr 24 000242 automatic pointer level 2 in structure "token_data_temp" dcl 420 in procedure "shift_const" set ref 458 461 470 471 471* 472 473* 473 target_length 000127 automatic fixed bin(35,0) dcl 141 set ref 500* 502* 508* 509* target_type 000116 automatic fixed bin(17,0) dcl 138 set ref 500* 502* 508* 509* td_ptr parameter pointer dcl 4-49 set ref 21 200 202 271 308* 311 311 311 323 325 329 331 333 335 402 403 404 405 411 449 451 452 453 453 456 460 460 461 462 462 465 465 466 466 467 504 519 temp_stack_key 000115 automatic fixed bin(17,0) dcl 138 set ref 203* 205* 209 temp_token_key 000114 automatic fixed bin(17,0) dcl 138 set ref 200* 202* 209 test 000131 automatic bit(1) packed unaligned dcl 145 set ref 190* 199 207 229* 236* 264* token_data based structure level 1 dcl 4-3 in procedure "linus_modify_build_expr_tab" set ref 449 467 token_data 2 based structure array level 2 in structure "stack" dcl 118 in procedure "linus_modify_build_expr_tab" token_data_temp 000242 automatic structure level 1 unaligned dcl 420 set ref 449* 467* token_item based char packed unaligned dcl 136 ref 453 tos_key 000120 automatic fixed bin(17,0) dcl 138 set ref 188* 203 205 227 236 249 258 320* 343* 343 350 350 352* 352 360* 360 365 367 369 371 372 373 374 375 376 379 379 type parameter fixed bin(17,0) dcl 539 in procedure "alloc_lit" ref 534 625 634 634 634 636 636 638 639 639 640 type 2 based fixed bin(4,0) array level 3 in structure "expression" packed packed unaligned dcl 3-3 in procedure "linus_modify_build_expr_tab" set ref 367* 370 type 16 based fixed bin(4,0) array level 3 in structure "stack" packed packed unaligned dcl 118 in procedure "linus_modify_build_expr_tab" set ref 324* 329* 367 user_item based structure array level 2 dcl 2-5 var_array based bit(1) array packed unaligned dcl 617 set ref 632 var_info 2 based structure array level 2 dcl 5-3 var_ptr 12 based pointer array level 3 dcl 5-3 set ref 412* var_string based bit packed unaligned dcl 159 set ref 620 621* variables based structure level 1 dcl 5-3 work_area based area(1024) dcl 175 ref 193 195 488 620 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AND internal static fixed bin(17,0) initial dcl 4-13 COMMA internal static fixed bin(17,0) initial dcl 4-13 DIFFER internal static fixed bin(17,0) initial dcl 4-13 DIV internal static fixed bin(17,0) initial dcl 4-13 DUP internal static fixed bin(17,0) initial dcl 4-13 EQ internal static fixed bin(17,0) initial dcl 4-13 FROM internal static fixed bin(17,0) initial dcl 4-13 GE internal static fixed bin(17,0) initial dcl 4-13 GT internal static fixed bin(17,0) initial dcl 4-13 INTER internal static fixed bin(17,0) initial dcl 4-13 LB internal static fixed bin(17,0) initial dcl 4-13 LE internal static fixed bin(17,0) initial dcl 4-13 LP internal static fixed bin(17,0) initial dcl 4-13 LT internal static fixed bin(17,0) initial dcl 4-13 NE internal static fixed bin(17,0) initial dcl 4-13 NOT internal static fixed bin(17,0) initial dcl 4-13 OR internal static fixed bin(17,0) initial dcl 4-13 PLUS internal static fixed bin(17,0) initial dcl 4-13 RB internal static fixed bin(17,0) initial dcl 4-13 ROW_DES internal static fixed bin(17,0) initial dcl 4-13 ROW_TAB_PAIR internal static fixed bin(17,0) initial dcl 4-13 RP internal static fixed bin(17,0) initial dcl 4-13 SCAL_FN internal static fixed bin(17,0) initial dcl 4-13 SELECT internal static fixed bin(17,0) initial dcl 4-13 SET_FN internal static fixed bin(17,0) initial dcl 4-13 STAR internal static fixed bin(17,0) initial dcl 4-13 TAB_NAME internal static fixed bin(17,0) initial dcl 4-13 UNION internal static fixed bin(17,0) initial dcl 4-13 UNIQUE internal static fixed bin(17,0) initial dcl 4-13 WHERE internal static fixed bin(17,0) initial dcl 4-13 nmi_init automatic fixed bin(17,0) dcl 2-48 nsv_init automatic fixed bin(17,0) dcl 2-48 nui_init automatic fixed bin(17,0) dcl 2-48 nvars_init automatic fixed bin(17,0) dcl 5-15 rel builtin function dcl 147 sys_info$max_seg_size external static fixed bin(35,0) dcl 161 NAMES DECLARED BY EXPLICIT CONTEXT. alloc_lit 002521 constant entry internal dcl 534 ref 294 502 case 000000 constant label array(11) dcl 211 ref 209 end_case 000752 constant label dcl 267 ref 213 217 223 230 234 243 247 256 262 error 002674 constant entry internal dcl 654 ref 245 249 258 276 309 520 524 exit 001164 constant label dcl 301 ref 661 get_token 001165 constant entry internal dcl 304 ref 197 222 241 254 linus_modify_build_expr_tab 000467 constant entry external dcl 21 push_expression 001357 constant entry internal dcl 363 ref 342 359 reduce_op 001323 constant entry internal dcl 340 ref 211 227 261 reduce_paren 001332 constant entry internal dcl 348 ref 215 reduce_var 001352 constant entry internal dcl 357 ref 225 232 shift_col_spec 002275 constant entry internal dcl 516 ref 335 shift_comm 001506 constant entry internal dcl 400 ref 337 396 shift_common 001460 constant entry internal dcl 385 ref 412 509 528 shift_const 001562 constant entry internal dcl 417 ref 333 shift_linus_var 001533 constant entry internal dcl 409 ref 331 shift_token 001233 constant entry internal dcl 317 ref 220 240 253 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 3322 3360 3141 3332 Length 3670 3141 36 273 161 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_modify_build_expr_tab 520 external procedure is an external procedure. get_token internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. shift_token internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. reduce_op internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. reduce_paren internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. reduce_var internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. push_expression internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. shift_common internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. shift_comm internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. shift_linus_var internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. shift_const internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. shift_col_spec internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. alloc_lit internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. error internal procedure shares stack frame of external procedure linus_modify_build_expr_tab. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_modify_build_expr_tab 000100 ex_ptr linus_modify_build_expr_tab 000102 nelems_init linus_modify_build_expr_tab 000104 lv_ptr linus_modify_build_expr_tab 000106 CMPX_FD linus_modify_build_expr_tab 000107 CHAR_DESC linus_modify_build_expr_tab 000110 REAL_FD linus_modify_build_expr_tab 000111 i linus_modify_build_expr_tab 000112 j linus_modify_build_expr_tab 000113 k linus_modify_build_expr_tab 000114 temp_token_key linus_modify_build_expr_tab 000115 temp_stack_key linus_modify_build_expr_tab 000116 target_type linus_modify_build_expr_tab 000117 source_type linus_modify_build_expr_tab 000120 tos_key linus_modify_build_expr_tab 000121 bit_len linus_modify_build_expr_tab 000122 cs_len linus_modify_build_expr_tab 000123 icode linus_modify_build_expr_tab 000124 previous_pos linus_modify_build_expr_tab 000125 source_length linus_modify_build_expr_tab 000126 start_pos linus_modify_build_expr_tab 000127 target_length linus_modify_build_expr_tab 000130 cmpx linus_modify_build_expr_tab 000131 test linus_modify_build_expr_tab 000132 sk_ptr linus_modify_build_expr_tab 000134 cs_ptr linus_modify_build_expr_tab 000136 lit_ptr linus_modify_build_expr_tab 000140 expr_name linus_modify_build_expr_tab 000242 token_data_temp shift_const 000270 constant_desc shift_const 000272 ci_ptr shift_const 000274 repl_ptr shift_const 000276 orc_ptr shift_const 000300 osc_ptr shift_const 000302 source_ptr shift_const 000304 k shift_const 000305 repl_flag shift_const 000306 repl_fac shift_const 000307 repl_len shift_const 000310 ci_len shift_const 000311 BIT_DESC shift_const 000334 align_req alloc_lit 000335 needed alloc_lit THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out return_mac alloc_auto_adj mdfx1 ext_entry any_to_any_truncate_ op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. assign_round_ linus_assign_data linus_modify_gt mdbm_util_$complex_data_class THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. linus_data_$lit_string_size linus_data_$max_expr_items linus_data_$stk_depth linus_error_$inv_expr linus_error_$mrds_item_not_def linus_error_$op_follow_lp linus_error_$too_many_expr_items LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 21 000460 149 000474 157 000500 178 000527 180 000533 182 000535 183 000537 184 000541 185 000543 188 000545 190 000551 191 000553 193 000557 194 000575 195 000576 196 000612 197 000613 199 000614 200 000620 202 000632 203 000633 205 000637 207 000644 209 000646 211 000653 213 000654 215 000655 217 000656 220 000657 222 000660 223 000661 225 000662 227 000663 229 000667 230 000671 232 000672 234 000673 236 000674 240 000702 241 000703 243 000704 245 000705 247 000714 249 000715 253 000730 254 000731 256 000732 258 000733 261 000746 262 000747 264 000750 269 000752 271 000753 273 000762 275 000774 276 000776 277 001005 279 001006 282 001015 284 001022 287 001024 288 001045 290 001065 294 001110 299 001162 301 001164 304 001165 307 001166 308 001170 309 001214 311 001220 315 001232 317 001233 319 001234 320 001235 321 001237 322 001244 323 001246 324 001256 325 001262 326 001273 328 001274 329 001300 331 001305 333 001312 335 001316 337 001321 338 001322 340 001323 342 001324 343 001325 344 001327 345 001331 348 001332 350 001333 352 001345 353 001347 354 001351 357 001352 359 001353 360 001354 361 001356 363 001357 365 001360 366 001365 367 001367 369 001376 370 001402 371 001410 372 001413 373 001415 374 001417 375 001421 376 001426 379 001430 381 001435 383 001457 385 001460 391 001462 392 001467 393 001472 394 001475 395 001477 396 001504 397 001505 400 001506 402 001507 403 001517 404 001523 405 001527 406 001532 409 001533 411 001534 412 001541 415 001561 417 001562 429 001563 447 001571 449 001573 450 001632 451 001633 452 001634 453 001635 455 001653 456 001655 458 001664 459 001671 460 001673 461 001701 462 001720 463 001727 464 001731 465 001733 466 001744 467 001750 468 002006 470 002021 471 002026 472 002034 473 002050 474 002054 475 002056 476 002064 479 002072 480 002100 482 002102 483 002104 484 002106 485 002110 486 002112 487 002116 488 002120 489 002132 490 002134 491 002143 492 002145 493 002155 494 002162 495 002166 496 002171 497 002173 500 002175 502 002210 504 002212 506 002224 508 002241 509 002262 511 002266 514 002274 516 002275 519 002276 520 002303 522 002317 523 002365 524 002367 526 002402 528 002442 532 002520 534 002521 619 002523 620 002530 621 002544 622 002551 625 002552 626 002556 627 002557 628 002571 632 002577 634 002604 636 002620 638 002626 639 002633 640 002643 644 002651 646 002671 648 002673 654 002674 659 002676 661 002701 ----------------------------------------------------------- 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