COMPILATION LISTING OF SEGMENT linus_lila_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 0920.0 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(86-01-13,Dupuis), approve(86-05-23,MCR7404), audit(86-07-23,GWMay), 16* install(86-07-29,MR12.0-1106): 17* 85-04-24 Al Dupuis: To correct a subscriptrange when expressions like 18* "select a+b from temporary_relation" were being processed. 19* 2) change(90-04-23,Leskiw), approve(90-10-05,MCR8202), 20* audit(90-10-11,Bubric), install(90-10-14,MR12.4-1039): 21* Changed calls to assign_round_ from assign_ so that data is rounded. 22* END HISTORY COMMENTS */ 23 24 25 linus_lila_build_expr_tab: 26 proc (lcb_ptr, lsh_ptr, td_ptr, ed_ptr, code); 27 28 /* DESCRIPTION: 29* 30* This procedure is an Operator Precedence parser that is used by the select 31* clause translator. 32* 33* 34* 35* HISTORY: 36* 37* 77-08-01 J. C. C. Jagernauth: Initially written. 38* 39* 78-04-01 J. C. C. Jagernauth: Modified to update ls_set when new mrds 40* items are encountered and eliminate the internal procedure "set_table_name". 41* 42* 78-06-01 J. C. C. Jagernauth: Modified to verify that expressions begin 43* with column specifications. 44* 45* 78-08-01 J. A. Weeldreyer: Modified to conform to new token data. 46* 47* 79-02-01 J. C. C. Jagernauth: Modified to access version 4 resultant 48* information. 49* 50* 80-01-08 Rickie E. Brinegar: Modified to pass linus_lila_alloc_lit a 51* descriptor pointer instead of an assign_ descriptor type and eliminate the 52* assign_ length parameter. 53* 54* 80-04-13 Rickie E. Brinegar: Modified to use a work area defined on 55* lcb.lila_area_ptr instead of getting system free area. 56* 57* 80-09-16 Rickie E. Brinegar: modified to use linus_rel_array instead of 58* making calls to dsl_$get_rslt_info. 59* 60* 81-02-03 Rickie E. Brinegar: The rel builtin was added to the declarations. 61* Changed to use the modified linus_rel_array structure. 62* 63* 81-06-19 Rickie E. Brinegar: Removed calls to dsl_$get_(temp rslt)_desc. 64* 65* 81-07-13 Rickie E. Brinegar: Removed trapping of the conversion condition. 66* This is now relegated to higher level routines. 67* 68* 81-09-17 Rickie E. Brinegar: Moved the incrementing of stack.nargs from 69* shift_function to both shift_setf and shift_sclf to eliminate subscript 70* range conditions. 71* 72* 81-11-06 Rickie E. Brinegar: Removed mdbm_util_$number_data_class as it 73* was only being used in conjunction with mdbm_util_$complex_data_class, 74* which makes all of the necessary determinations without the need of 75* checking to see if it is in the number data class. Added the unspec 76* builtin to intialize the ef_data structure. 77* 78* 82-02-09 Bertley G. Moberg: To allow expressions as the last element in 79* a scalar function argument list 80* 81* 82* ********* COMMENTS ABOUT CODE TO BE DELETED ********* 83* 84* The code marked for deletion was inserted 85* to make sure that all expressions begin with a column specification 86* 87* ********* END DELETED CODE COMMENTS ********* 88**/ 89 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 */ 90 91 2 1 /* BEGIN INCLUDE FILE linus_expession.incl.pl1 -- jaw 6/29/77 */ 2 2 2 3 dcl 1 expression aligned based (ex_ptr), /* internal representation of an 2 4* arithmetic expr. Is in postfix polish form. */ 2 5 2 rslt_desc bit (36), /* descriptor for result */ 2 6 2 nelems fixed bin, /* no. of operators + no of operands */ 2 7 2 elem (nelems_init refer (expression.nelems)), 2 8 3 type fixed bin (4) unal, /* 1 => constant 2 9* 2 => linus variable 2 10* 3 => scalar function 2 11* 4 => set function 2 12* 5 => not used 2 13* 6 => data base item 2 14* 15 => operator */ 2 15 3 op_code fixed bin (3) unal, /* 1 => add 2 16* 2 => subtract 2 17* 3 => multiply 2 18* 4 => divide */ 2 19 3 reserved bit (27) unal, 2 20 3 desc bit (36), /* descriptor for item */ 2 21 3 bit_length fixed bin (35), /* bit length of item */ 2 22 3 assn_ptr ptr, /* assign_ pointer to item */ 2 23 3 assn_type fixed bin, /* assign_ type code for item */ 2 24 3 assn_len fixed bin (35), /* assign_ length for this item */ 2 25 3 fn_ptr ptr; /* pointer to function structure */ 2 26 2 27 dcl ex_ptr ptr; 2 28 dcl nelems_init fixed bin; 2 29 2 30 /* END INCLUDE FILE linus_expression.incl.pl1 */ 92 93 3 1 /* BEGIN INCLUDE FILE linus_ef_data.incl.pl1 -- jaw 7/21/77 */ 3 2 3 3 dcl 1 ef_data aligned based (ed_ptr), /* structure for passing expr. and fun. data among programs */ 3 4 2 var_name char (32), /* name of tuple variable */ 3 5 2 bit_length fixed bin (35), /* bit length of result */ 3 6 2 desc bit (36), /* descriptor of result */ 3 7 2 assn_ptr ptr, /* pointer to result value */ 3 8 2 assn_type fixed bin, /* assign_ type code of result */ 3 9 2 assn_len fixed bin (35), /* assign_ length */ 3 10 2 nmrds_items fixed bin, /* number of mrds items returned */ 3 11 2 mrds_items (linus_data_$max_expr_items), /* previously unselected mrds items referenced 3 12* in the expression */ 3 13 3 attr_name char (32), /* name of attribute */ 3 14 3 domain_name char (32), /* domain of attribute */ 3 15 3 bit_length fixed bin (35), /* attrib. bit length */ 3 16 3 desc bit (36), /* attrib. descriptor */ 3 17 3 assn_ptr ptr, /* pointer to receiving field of attr. */ 3 18 3 assn_type fixed bin, /* assign_ type code of attr */ 3 19 3 assn_len fixed bin (35), /* assign_ length for attr. */ 3 20 2 ef_ptr ptr; /* pointer to expr. status */ 3 21 3 22 dcl ed_ptr ptr; 3 23 3 24 /* END INCLUDE FILE linus_ef_data.incl.pl1 */ 94 95 4 1 /* BEGIN INCLUDE FILE linus_ls_block.incl.pl1 -- jaw 8/7/78 */ 4 2 4 3 dcl 1 ls_block aligned based (lsb_ptr), /* lila stack frame for outer lila block */ 5 1 /* BEGIN INCLUDE FILE linus_ls_common.incl.pl1 -- jaw 7/12/77 */ 5 2 5 3 2 type fixed bin, /* type of frame: 5 4* 1 => header, 5 5* 2 => set value, 5 6* 3 => lila set, 5 7* 4 => lila block */ 5 8 2 back_ptr ptr, /* pointer to previous frame */ 5 9 2 fwd_ptr ptr, /* pointer to next frame */ 5 10 5 11 /* END INCLUDE FILE linus_ls_common.incl.pl1 */ 4 4 4 5 2 reserved bit (36) unal, 4 6 2 ib_level fixed bin, /* current depth of inner blocks */ 4 7 2 nrs_chars fixed bin, /* total chars. in range strings */ 4 8 2 nritems fixed bin, /* current number of range items */ 4 9 2 range_items (linus_data_$max_range_items), 4 10 3 tup_var char (32) var, /* name of linus tuple variable */ 4 11 3 mrds_var char (32) var, /* name of mrds tuple variable */ 4 12 3 rel_name char (32) var, /* name of relation */ 4 13 3 rel_index fixed bin (35), /* rel. index if temp tab */ 4 14 3 level fixed bin, /* level of block generating item */ 4 15 3 arg_ptr ptr, 4 16 3 desc_ptr ptr, 4 17 2 nselects fixed bin, /* number of select items currently defined */ 4 18 2 sel_items (mrds_data_$max_select_items) char (mrds_data_$max_token_size) var, /* the mrds select items */ 4 19 2 nprops fixed bin, /* number of operators in pred stack */ 4 20 2 pred_op_stack (linus_data_$max_pred_stack_size), 4 21 3 key fixed bin (17) unal, 4 22 3 p_cnt fixed bin (17) unal, /* current paren count */ 4 23 2 pred_pcnt fixed bin, /* current paren. count in predicate */ 4 24 2 term_op fixed bin, /* rel. op. for current term */ 4 25 2 nterms fixed bin, /* no. of terms currently in term stack */ 4 26 2 dflt_ritem fixed bin, /* index of range item to be used for default */ 4 27 2 nrange_args fixed bin, /* no. of args for temp rel indexes */ 4 28 2 rs_hd_ptr ptr, /* pointer to head of range strings */ 4 29 2 term_hd_ptr ptr, /* pointer to top item in term stack */ 4 30 2 leaf_ptr (2) ptr; /* ptr to mrds block for each leaf of current term */ 4 31 4 32 dcl lsb_ptr ptr; 4 33 4 34 /* END INCLUDE FILE linus_ls_block.incl.pl1 */ 96 97 6 1 /* BEGIN INCLUDE FILE linus_ls_header.incl.pl1 -- jaw 7/28/77 */ 6 2 6 3 dcl 1 ls_header aligned based (lsh_ptr), /* header for LILA stack */ 7 1 /* BEGIN INCLUDE FILE linus_ls_common.incl.pl1 -- jaw 7/12/77 */ 7 2 7 3 2 type fixed bin, /* type of frame: 7 4* 1 => header, 7 5* 2 => set value, 7 6* 3 => lila set, 7 7* 4 => lila block */ 7 8 2 back_ptr ptr, /* pointer to previous frame */ 7 9 2 fwd_ptr ptr, /* pointer to next frame */ 7 10 7 11 /* END INCLUDE FILE linus_ls_common.incl.pl1 */ 6 4 6 5 2 cur_ptr ptr, /* pointer to current frame */ 6 6 2 src_ptr ptr, /* pointer to LILA source string */ 6 7 2 trans_failed bit (1) unal, /* on if translate failed */ 6 8 2 from_token bit (1) unal, /* on if the calling routine is linus_lila_from */ 6 9 2 reserved bit (34) unal, 6 10 2 cur_pos fixed bin (35), /* current position in source string */ 6 11 2 line_data (0 : lcb.lila_count), /* data for each source line */ 6 12 3 lno char (4), /* line number */ 6 13 3 last_char fixed bin (35); /* index of last char */ 6 14 6 15 dcl lsh_ptr ptr; 6 16 6 17 /* END INCLUDE FILE linus_ls_header.incl.pl1 */ 98 99 8 1 /* BEGIN INCLUDE FILE linus_ls_set.incl.pl1 -- jaw 7/27/78 */ 8 2 8 3 dcl 1 ls_set aligned based (lss_ptr), /* lila stack frame for lila set */ 9 1 /* BEGIN INCLUDE FILE linus_ls_common.incl.pl1 -- jaw 7/12/77 */ 9 2 9 3 2 type fixed bin, /* type of frame: 9 4* 1 => header, 9 5* 2 => set value, 9 6* 3 => lila set, 9 7* 4 => lila block */ 9 8 2 back_ptr ptr, /* pointer to previous frame */ 9 9 2 fwd_ptr ptr, /* pointer to next frame */ 9 10 9 11 /* END INCLUDE FILE linus_ls_common.incl.pl1 */ 8 4 8 5 2 nselects fixed bin, /* number of items selected */ 8 6 2 nblocks fixed bin, /* number of lila blocks in stack */ 8 7 2 nops fixed bin, /* number of set operators in stack */ 8 8 2 op_stack (linus_data_$max_set_stack_size), /* the set op stack */ 8 9 3 br_cnt fixed bin (17) unal, /* bracket count of oper. */ 8 10 3 key fixed bin (17) unal, /* token key of operator */ 8 11 2 br_cnt fixed bin, /* current bracket count */ 8 12 2 dup_flag bit (1) unal, /* on if DUP encountered */ 8 13 2 unique_flag bit (1) unal, /* on if UNIQUE encountered */ 8 14 2 rb_flag bit (1) unal, /* on if right bracket allowed */ 8 15 2 lb_flag bit (1) unal, /* on if left bracket allowed */ 8 16 2 setop_flag bit (1) unal, /* on if set op allowed */ 8 17 2 select_flag bit (1) unal, /* on if lila block allowed */ 8 18 2 end_flag bit (1) unal, /* on if end of set allowed */ 8 19 2 first_block bit (1) unal, /* on if no lila block yet processed */ 8 20 2 inv_setop bit (1) unal, /* on if a lila block cannot be included in a set oper. */ 8 21 2 reserved bit (9) unal, 8 22 2 var_ind fixed bin (17) unal, /* number for next generated variable */ 8 23 2 domain_info (mrds_data_$max_select_items), /* domain info for each selected attr. */ 8 24 3 name char (32), /* domain name */ 8 25 3 bit_length fixed bin (35), /* bit length of domain */ 8 26 3 desc bit (36), /* descriptor for domain */ 8 27 3 assn_ptr ptr, /* ptr to receiving field for this attr. */ 8 28 3 assn_type fixed bin, /* assign_ type code for this domain */ 8 29 3 assn_len fixed bin (35), /* assign_ length for this domain */ 8 30 2 si_ptr ptr, /* pointer to select info structure */ 8 31 2 blk_hd_ptr ptr; /* pointer to top item of block stack */ 8 32 8 33 dcl lss_ptr ptr; 8 34 8 35 /* END INCLUDE FILE linus_ls_set.incl.pl1 */ 100 101 10 1 /* BEGIN INCLUDE FILE -- linus_rel_array.incl.pl1 -- reb 09/09/80 10 2* 10 3* 80-09-09 Rickie E. Brinegar: Initially written. 10 4* 10 5* 81-01-29 Rickie E. Brinegar: changed to comform to standards for include 10 6* files. 10 7* 10 8**/ 10 9 10 10 dcl 1 linus_rel_array based (linus_rel_array_ptr), 10 11 2 num_of_rels fixed bin, 10 12 2 rels (num_of_rels_init refer (linus_rel_array.num_of_rels)), 10 13 3 rel_name char (32), 10 14 3 rslt_info_ptr ptr; 10 15 10 16 dcl linus_rel_array_ptr ptr; 10 17 10 18 dcl num_of_rels_init fixed bin init (0); 10 19 10 20 /* END INCLUDE FILE linus_rel_array.incl.pl1 */ 10 21 102 103 11 1 /* BEGIN INCLUDE FILE linus_token_data.incl.pl1 -- jaw 8/7/78 */ 11 2 11 3 dcl 1 token_data aligned based (td_ptr), /* data for lila tokens */ 11 4 2 key fixed bin (17) unal, /* key of token */ 11 5 2 must_free bit (1) unal, /* on if value must be freed */ 11 6 2 temp_tab bit (1) unal, /* on if temporary table */ 11 7 2 reserved bit (16) unal, 11 8 2 mvar char (32) var, /* mrds variable if identifier */ 11 9 2 lvar char (32) var, /* linus variable if identifier */ 11 10 2 length fixed bin (35), /* char length of token value */ 11 11 2 t_ptr ptr; /* points to token value */ 11 12 11 13 dcl ((NULL init (0)), 11 14 (RP init (1)), 11 15 (COL_SPEC init (2)), 11 16 (LINUS_VAR init (3)), 11 17 (CONST init (4)), 11 18 (SET_FN init (5)), 11 19 (SCAL_FN init (6)), 11 20 (LP init (7)), 11 21 (STAR init (8)), 11 22 (DIV init (9)), 11 23 (PLUS init (10)), 11 24 (MINUS init (11)), 11 25 (TAB_NAME init (12)), 11 26 (ROW_TAB_PAIR init (13)), 11 27 (UNION init (14)), 11 28 (INTER init (15)), 11 29 (DIFFER init (16)), 11 30 (ROW_DES init (17)), 11 31 (LB init (18)), 11 32 (RB init (19)), 11 33 (SELECT init (20)), 11 34 (NOT init (21)), 11 35 (AND init (22)), 11 36 (OR init (23)), 11 37 (EQ init (24)), 11 38 (NE init (25)), 11 39 (GT init (26)), 11 40 (GE init (27)), 11 41 (LT init (28)), 11 42 (LE init (29)), 11 43 (FROM init (30)), 11 44 (WHERE init (31)), 11 45 (DUP init (32)), 11 46 (UNIQUE init (33)), 11 47 (COMMA init (34))) fixed bin int static options (constant); 11 48 11 49 dcl td_ptr ptr; 11 50 11 51 /* END INCLUDE FILE linus_token_data.incl.pl1 */ 104 105 12 1 /* BEGIN INCLUDE FILE linus_variables.incl.pl1 -- jaw 7/19/77 */ 12 2 12 3 dcl 1 variables aligned based (lv_ptr), /* info for all variables */ 12 4 2 nvars_alloc fixed bin, /* no. var. slots alloc. */ 12 5 2 nvars fixed bin, /* no. of variables currently defined */ 12 6 2 var_info (nvars_init refer (variables.nvars_alloc)), 12 7 3 name char (32), /* name of variable */ 12 8 3 var_ptr ptr, /* ptr to curr. value */ 12 9 3 bit_len fixed bin (35), /* bit length of current value */ 12 10 3 assn_type fixed bin, /* assign_ type code of current value */ 12 11 3 assn_len fixed bin (35), /* assign_ length of current value */ 12 12 3 desc bit (36); /* descrptor of current value */ 12 13 12 14 dcl lv_ptr ptr; 12 15 dcl nvars_init fixed bin; 12 16 12 17 /* END INCLUDE FILE linus_variables.incl.pl1 */ 106 107 13 1 /* BEGIN INCLUDE FILE mrds_rslt_info.incl.pl1 rgl 07/22/77 */ 13 2 13 3 /* Modified by R. Lackey 09/20/76 to handle inverted attributes */ 13 4 13 5 /* Modified by D. Woodka 06/28/82 to fix size condition */ 13 6 13 7 dcl 1 rslt_info aligned based (rslt_ptr), /* resultant information description */ 13 8 2 num_attr fixed bin, /* number of attributes in view */ 13 9 2 num_key_attr fixed bin, /* number of key attributes in data relation */ 13 10 2 key_length fixed bin (35), /* length in bits of key portion of tuple */ 13 11 2 retrieve bit (1) unal, /* retrieve permitted = "1"b */ 13 12 2 modify bit (1) unal, /* modify permitted = "1"b */ 13 13 2 store bit (1) unal, /* store permitted = "1"b */ 13 14 2 delete bit (1) unal, /* delete permitted = "1"b */ 13 15 2 total_key bit (1) unal, /* on if view includes the total key */ 13 16 2 inversion bit (1) unal, /* On if this view contains any inverted attributes */ 13 17 2 reserved bit (30) unal, /* reserved for future use */ 13 18 2 attr (rslt_alloc refer (rslt_info.num_attr)), /* per attribute info */ 13 19 3 attr_name char (32), /* name of attribute */ 13 20 3 domain_name char (32), /* name of underlying domain */ 13 21 3 attr_length fixed bin (18), /* length of attribute data in bits */ 13 22 3 attr_index fixed bin (24), /* index to bit_offset in dbcbrw */ 13 23 3 descriptor bit (36) aligned, /* attribute description */ 13 24 3 key_flag bit (1) unal, /* key attribute = "1"b */ 13 25 3 inver_flag bit (1) unal, /* On if this attribute is inverted */ 13 26 3 unused bit (34) unal, /* reserved for future use */ 13 27 3 key_attr_order fixed bin, /* order no. of this key attr. */ 13 28 3 inver_iocb_index fixed bin; /* Index to inversion iocb in dbcbw */ 13 29 13 30 13 31 13 32 dcl rslt_ptr ptr; 13 33 13 34 dcl rslt_alloc fixed bin; 13 35 13 36 /* END INCLUDE FILE mrds_rslt_info.incl.pl1 */ 13 37 108 109 110 111 dcl expr_type (11) fixed bin (4) unal int static options (constant) init ( 112 /* Map token key to type or op_code */ 113 0, 6, /* Data base item */ 114 2, /* linus variable */ 115 1, /* constant */ 116 4, /* set function */ 117 3, /* scalar function */ 118 0, 3, /* multiply */ 119 4, /* divide */ 120 1, /* add */ 121 2); /* subtract */ 122 123 dcl CHAR_DESC bit (36) aligned; 124 125 dcl REAL_FD bit (36) aligned; 126 127 dcl CMPX_FD bit (36) aligned; 128 129 dcl FD59 bit (36) aligned int static options (constant) 130 init ("100101000000000000000000000000111011"b); /* Float decimal */ 131 132 dcl CFD59 bit (36) aligned int static options (constant) 133 init ("100110000000000000000000000000111011"b); /* Complex float decimal */ 134 135 dcl ( 136 EXPR_SET_FN init (4), 137 OPERATOR init (15), 138 EXPR_SCAL_FN init (3) 139 ) fixed bin (4) int static options (constant); 140 141 dcl prec_relations (0:11, 0:11) fixed bin (4) int static 142 options (constant) init (/* 143* 1 = reduce_op [( .> ) E op_code E ] 144* 2 = reduce_paren [( .= ) (E)] 145* 3 = shift_token [( <. )] 146* 4 = end of expression [variable followed by variable] 147* 5 = reduce_var [reduce to E] 148* 6 = call set func. then shift_setf 149* 7 = call scalar func. then shift_sclf 150* no need to push expression stack. 151* 8 = error [LP followed by invalid token] 152* 9 = make sure the first token shifted is not an operator or RP 153* 10 = make sure you are not reducing E + "" 154* 11 = end of expression 155* 156* the generic term "variable" is used to represent 157* one of the following: 158* column specification 159* linus variable 160* constant 161* set function result 162* scalar function result 163* 164* ROW and COLUMN names correspond in the table below */ 165 11, 11, (3) 3, 6, 7, 3, (4) 9, /* NULL 11 11 3 3 3 6 7 3 9 9 9 9 */ 166 (12) 2, /* RP 2 2 2 2 2 2 2 2 2 2 2 2 */ 167 (5) ((2) 5, (6) 4, (4) 5), /* COL_SPEC 5 5 4 4 4 4 4 4 5 5 5 5 */ 168 /* LINUS_VAR 5 5 4 4 4 4 4 4 5 5 5 5 */ 169 /* CONST 5 5 4 4 4 4 4 4 5 5 5 5 */ 170 /* SET_FN 5 5 4 4 4 4 4 4 5 5 5 5 */ 171 /* SCAL_FN 5 5 4 4 4 4 4 4 5 5 5 5 */ 172 8, 9, (3) 3, 6, 7, 3, (4) 9, /* LP 8 9 3 3 3 6 7 3 9 9 9 9 */ 173 (2) (10, 1, (3) 3, 6, 7, 3, (4) 1), /* STAR 10 1 3 3 3 6 7 3 1 1 1 1 */ 174 /* DIV 10 1 3 3 3 6 7 3 1 1 1 1 */ 175 (2) (10, 1, (3) 3, 6, 7, (3) 3, (2) 1)); /* PLUS 10 1 3 3 3 6 7 3 3 3 1 1 */ 176 /* MINUS 10 1 3 3 3 6 7 3 3 3 1 1 */ 177 178 dcl 1 arg_len_bits based, 179 2 pad bit (12) unal, 180 2 length bit (24) unal; /* arg_len for system standard argument list */ 181 182 dcl 1 stack aligned based (sk_ptr), 183 2 nargs fixed bin, 184 2 token_data (linus_data_$stk_depth refer (stack.nargs)), 185 3 key fixed bin (17) unal, 186 3 must_free bit (1) unal, 187 3 reduced bit (1) unal, /* On if item has been reduced */ 188 3 reserved bit (16) unal, 189 3 length fixed bin (35), 190 3 t_ptr ptr, 191 3 desc bit (36), 192 3 bit_length fixed bin (35), 193 3 assn_ptr ptr, 194 3 assn_type fixed bin, 195 3 assn_len fixed bin (35), 196 3 fn_ptr ptr, /* Pointer to function structure */ 197 3 type fixed bin (4) unal, 198 3 op_code fixed bin (3) unal; 199 200 dcl token_item char (token_data.length) based (token_data.t_ptr); 201 /* For shifting */ 202 203 dcl (i, j, source_type, target_type, temp_token_key, temp_stack_key, tos_key) 204 fixed bin; /* Points to first terminal on top of the work stack */ 205 206 dcl (bit_len, code, cs_len, icode, source_length, target_length) fixed 207 bin (35); 208 209 dcl constant_string char (cs_len) based (cs_ptr); 210 211 dcl ( 212 test, /* ********* BEGIN DELETE ********* */ 213 first_token, /* ********* END DELETE ********* */ 214 cmpx 215 ) bit (1); 216 217 218 dcl (addr, bit, fixed, null, rel, search, substr, unspec) builtin; 219 220 dcl ( 221 cs_ptr init (null), 222 lit_ptr init (null), 223 sk_ptr init (null) 224 ) ptr; 225 226 dcl 1 ef_d like ef_data; 227 228 dcl ( 229 linus_data_$max_expr_items, 230 linus_data_$max_pred_stack_size, 231 linus_data_$max_range_items, 232 linus_data_$max_set_stack_size, 233 linus_data_$stk_depth, 234 linus_error_$expr_ovfl, 235 linus_error_$first_expr_item, 236 linus_error_$inv_expr, 237 linus_error_$inv_tup_var, 238 linus_error_$op_follow_lp, 239 linus_error_$select_list_ovfl, 240 linus_error_$token_type_null, 241 mrds_data_$max_token_size, 242 mrds_data_$max_select_items, 243 sys_info$max_seg_size 244 ) fixed bin (35) ext; 245 246 dcl assign_round_ 247 entry (ptr, fixed bin, fixed bin (35), ptr, fixed bin, fixed bin (35)); 248 dcl linus_assign_data entry (bit (36), fixed bin, fixed bin (35)); 249 dcl linus_lila_alloc_lit entry (ptr, ptr, ptr, fixed bin (35)); 250 dcl linus_lila_error entry (ptr, ptr, fixed bin (35), char (*)); 251 dcl linus_lila_get_token entry (ptr, ptr, fixed bin (35), ptr, fixed bin (35)); 252 dcl linus_lila_scal_fn entry (ptr, ptr, ptr, ptr, fixed bin (35)); 253 dcl linus_lila_set_fn entry (ptr, ptr, ptr, ptr, fixed bin (35)); 254 dcl mdbm_util_$complex_data_class entry (ptr) returns (bit (1)); 255 256 dcl work_area area (sys_info$max_seg_size) based (lcb.lila_area_ptr); 257 258 sk_ptr, ex_ptr, cs_ptr, rslt_ptr = null; 259 260 linus_rel_array_ptr = lcb.rel_array_ptr; 261 262 unspec (ef_d) = "0"b; 263 264 CHAR_DESC = "101010100000000000000000000000000000"b; 265 REAL_FD = "100101000000000000000000000000000000"b; 266 CMPX_FD = "100110000000000000000000000000000000"b; 267 nelems_init = linus_data_$stk_depth; /* For expression structure allocation */ 268 ef_data.nmrds_items, icode, code, tos_key = 0; /* Top of stack item that is not reduced */ 269 ef_data.var_name = ""; 270 cmpx, test = "0"b; 271 first_token = "1"b; 272 lv_ptr = lcb.lv_ptr; /* Init linus_variables */ 273 allocate stack in (work_area); 274 unspec (stack) = "0"b; 275 stack.nargs = 0; /* Work stack is empty */ 276 allocate expression in (work_area); 277 unspec (expression) = "0"b; 278 expression.nelems = 0; /* Expression stack is empty */ 279 lsb_ptr = ls_header.cur_ptr; 280 lss_ptr = ls_block.back_ptr; 281 282 /* ********* BEGIN DELETE ********* */ 283 284 if token_data.key > RP & token_data.key < SET_FN then do; 285 first_token = "0"b; /* we have the first token */ 286 if token_data.key ^= COL_SPEC then /* first token of expression must be column spec */ 287 call error (linus_error_$first_expr_item, ""); 288 end; 289 290 /* ********* END DELETE ********* */ 291 292 do while (^test); /* MAIN LOOP */ 293 if token_data.key > MINUS then 294 temp_token_key = NULL; /* invalid token */ 295 else temp_token_key = token_data.key; /* good token */ 296 if tos_key = 0 then 297 temp_stack_key = 0; 298 else temp_stack_key = stack.token_data.key (tos_key); 299 /* take key off stack */ 300 301 go to case (prec_relations (temp_stack_key, temp_token_key)); 302 303 case (1): 304 call reduce_op; /* E op E is on work stack */ 305 go to end_case; 306 307 case (2): 308 call reduce_paren; /* (E) is on work stack */ 309 go to end_case; 310 311 312 case (3): 313 call shift_token; /* place token on work stack */ 314 call get_token; 315 go to end_case; 316 317 case (4): 318 call reduce_var; /* end of expression -- variable followed by variable */ 319 if tos_key > 1 then 320 call reduce_op; /* After this call only E should be on work stack */ 321 test = "1"b; /* Exit */ 322 go to end_case; 323 324 case (5): 325 call reduce_var; /* place variable on expression stack */ 326 go to end_case; 327 328 case (6): 329 call linus_lila_set_fn (lcb_ptr, lsh_ptr, td_ptr, addr (ef_d), icode); 330 /* build set function table */ 331 call update_efdata; 332 call shift_setf; /* Push set function result on work stack */ 333 call get_token; 334 go to end_case; 335 336 case (7): 337 call linus_lila_scal_fn (lcb_ptr, lsh_ptr, td_ptr, addr (ef_d), icode); 338 /* build scalar function table */ 339 call update_efdata; 340 call shift_sclf; /* Push scalar function result on work stack */ 341 call get_token; 342 go to end_case; 343 344 case (8): 345 call error (linus_error_$inv_expr, ""); /* LP followed by invalid token */ 346 go to end_case; 347 348 case (9): 349 if tos_key = stack.nargs then /* make sure the first token shifted is not an operator or RP */ 350 call error (linus_error_$op_follow_lp, ""); 351 else do; 352 call shift_token; /* then place token on work stack */ 353 call get_token; 354 end; 355 go to end_case; 356 357 case (10): 358 if tos_key = stack.nargs then /* make sure you are not reducing E + "" */ 359 call error (linus_error_$inv_expr, ""); 360 else call reduce_op; /* E op E is on work stack */ 361 go to end_case; 362 363 case (11): 364 test = "1"b; /* end of expression */ 365 366 end_case: 367 end; /* END MAIN LOOP */ 368 369 if ^(stack.nargs = 1 & stack.token_data.reduced (1)) then 370 /* 371* Make sure expression was good */ 372 call error (linus_error_$inv_expr, ""); 373 374 if expression.nelems = 1 then 375 expression.rslt_desc = expression.elem.desc (1); /* only one item in expression */ 376 else if cmpx then 377 expression.rslt_desc = CFD59; /* Init to complex float decimal 59 */ 378 else expression.rslt_desc = FD59; /* Init to float decimal 59 */ 379 380 ef_data.ef_ptr = ex_ptr; /* pass pointer to expression structure */ 381 ef_data.desc = expression.rslt_desc; /* pass expression info in ef_data structure */ 382 call 383 linus_assign_data ((ef_data.desc), ef_data.assn_type, ef_data.assn_len) 384 ; 385 call 386 linus_lila_alloc_lit (lcb_ptr, addr (ef_data.desc), ef_data.assn_ptr, 387 ef_data.bit_length); 388 sk_ptr = null; 389 rslt_ptr = null; 390 391 392 393 get_token: 394 proc; 395 396 call 397 linus_lila_get_token (lcb_ptr, lsh_ptr, ls_header.cur_pos, td_ptr, 398 icode); 399 if token_data.key = NULL then 400 call error (linus_error_$token_type_null, ""); 401 402 /* ********* BEGIN DELETE ********* */ 403 404 if first_token then /* is this first data token ? */ 405 if token_data.key > RP & token_data.key < SET_FN then do; 406 first_token = "0"b; 407 if token_data.key ^= COL_SPEC then 408 call error (linus_error_$first_expr_item, ""); 409 end; 410 411 /* ********* END DELETE ********* */ 412 413 if icode ^= 0 then 414 call error (icode, ""); 415 416 end get_token; 417 418 update_efdata: 419 proc; 420 421 422 if ef_d.var_name ^= "" then do; 423 if ef_data.var_name = "" then 424 ef_data.var_name = ef_d.var_name; 425 if ef_data.var_name ^= ef_d.var_name then 426 call error (linus_error_$inv_tup_var, ""); 427 end; 428 ef_data.bit_length = ef_d.bit_length; 429 ef_data.desc = ef_d.desc; 430 ef_data.assn_ptr = ef_d.assn_ptr; 431 ef_data.assn_type = ef_d.assn_type; 432 ef_data.assn_len = ef_d.assn_len; 433 ef_data.ef_ptr = ef_d.ef_ptr; 434 if ef_data.nmrds_items >= linus_data_$max_expr_items then 435 call error (linus_error_$expr_ovfl, ""); 436 if ef_d.nmrds_items ^= 0 then 437 do i = 1 to ef_d.nmrds_items; 438 ef_data.nmrds_items = ef_data.nmrds_items + 1; 439 ef_data.mrds_items.attr_name (ef_data.nmrds_items) = 440 ef_d.mrds_items.attr_name (i); 441 ef_data.mrds_items.domain_name (ef_data.nmrds_items) = 442 ef_d.mrds_items.domain_name (i); 443 ef_data.mrds_items.bit_length (ef_data.nmrds_items) = 444 ef_d.mrds_items.bit_length (i); 445 ef_data.mrds_items.desc (ef_data.nmrds_items) = 446 ef_d.mrds_items.desc (i); 447 ef_data.mrds_items.assn_ptr (ef_data.nmrds_items) = 448 ef_d.mrds_items.assn_ptr (i); 449 ef_data.mrds_items.assn_type (ef_data.nmrds_items) = 450 ef_d.mrds_items.assn_type (i); 451 ef_data.mrds_items.assn_len (ef_data.nmrds_items) = 452 ef_d.mrds_items.assn_len (i); 453 end; 454 455 end update_efdata; 456 457 shift_token: 458 proc; /* Push token data onto work stack */ 459 stack.nargs = stack.nargs + 1; /* push work stack */ 460 tos_key = stack.nargs; /* set top of stack index */ 461 stack.token_data.fn_ptr (stack.nargs) = null; 462 stack.token_data.reduced (stack.nargs) = "0"b; 463 if token_data.key > LP then do; /* Item is an operator */ 464 stack.token_data.type (stack.nargs) = OPERATOR; 465 stack.token_data.op_code (stack.nargs) = expr_type (token_data.key); 466 end; 467 else do; /* item is not an operator */ 468 stack.token_data.op_code (stack.nargs) = NULL; 469 stack.token_data.type (stack.nargs) = expr_type (token_data.key); 470 end; 471 if token_data.key = LINUS_VAR then 472 call shift_linus_var; 473 else if token_data.key = CONST then 474 call shift_const; 475 else if token_data.key = COL_SPEC then 476 call shift_col_spec; 477 call shift_comm; 478 end shift_token; 479 480 shift_sclf: 481 proc; /* push scalar function data onto work stack */ 482 483 token_data.key = 6; /* reset key */ 484 stack.nargs = stack.nargs + 1; 485 stack.token_data.type (stack.nargs) = EXPR_SCAL_FN; /* type is known */ 486 stack.token_data.fn_ptr (stack.nargs) = ef_data.ef_ptr; 487 call shift_function; 488 end shift_sclf; 489 490 shift_setf: 491 proc; /* push set function data onto work stack */ 492 493 token_data.key = 5; /* reset key */ 494 stack.nargs = stack.nargs + 1; 495 stack.token_data.type (stack.nargs) = EXPR_SET_FN; 496 stack.token_data.fn_ptr (stack.nargs) = ef_data.ef_ptr; 497 call shift_function; 498 end shift_setf; 499 500 reduce_op: 501 proc; /* E op_code E is on top of the work stack */ 502 call push_expression; 503 tos_key = tos_key - 2; 504 stack.nargs = stack.nargs - 2; /* point to E */ 505 end reduce_op; 506 507 reduce_paren: 508 proc; /* (E) is on top of the work stack */ 509 stack.token_data.reduced (tos_key), 510 stack.token_data.reduced (tos_key - 2) = "1"b; /* pushed */ 511 tos_key = tos_key - 3; 512 stack.nargs = stack.nargs - 2; 513 end reduce_paren; 514 515 reduce_var: 516 proc; /* a variable is on the work stack */ 517 call push_expression; /* place variable on expression stack */ 518 tos_key = tos_key - 1; 519 end reduce_var; 520 521 push_expression: 522 proc; /* Data is removed from the work stack and pushed onto the expression stack */ 523 stack.token_data.reduced (tos_key) = "1"b; /* Set flag to indicate that item was pushed */ 524 expression.nelems = expression.nelems + 1; /* Point to new top of stack */ 525 expression.elem.type (expression.nelems) = 526 stack.token_data.type (tos_key); /* Push data */ 527 expression.elem.op_code (expression.nelems) = 528 stack.token_data.op_code (tos_key); 529 if expression.elem.type (expression.nelems) ^= OPERATOR then do; 530 expression.elem.desc (expression.nelems) = 531 stack.token_data.desc (tos_key); 532 expression.elem.bit_length (expression.nelems) = 533 stack.token_data.bit_length (tos_key); 534 expression.elem.assn_ptr (expression.nelems) = 535 stack.token_data.assn_ptr (tos_key); 536 expression.elem.assn_type (expression.nelems) = 537 stack.token_data.assn_type (tos_key); 538 expression.elem.assn_len (expression.nelems) = 539 stack.token_data.assn_len (tos_key); 540 expression.elem.fn_ptr (expression.nelems) = 541 stack.token_data.fn_ptr (tos_key); 542 end; 543 544 if stack.token_data.must_free (tos_key) then 545 stack.token_data.t_ptr = null; 546 if mdbm_util_$complex_data_class ( 547 addr (expression.elem.desc (expression.nelems))) then 548 cmpx = "1"b; 549 end push_expression; 550 551 shift_function: 552 proc; /* push token data onto work stack */ 553 tos_key = stack.nargs; 554 stack.token_data.op_code (stack.nargs) = NULL; 555 stack.token_data.reduced (stack.nargs) = "0"b; 556 call 557 shift_common (ef_data.desc, ef_data.bit_length, ef_data.assn_ptr, 558 ef_data.assn_type, ef_data.assn_len); 559 end shift_function; 560 561 shift_common: 562 proc (desc, bit_length, assn_ptr, assn_type, assn_len); 563 dcl desc bit (36) aligned; 564 dcl (bit_length, assn_len) fixed bin (35); 565 dcl assn_ptr ptr; 566 dcl assn_type fixed bin; 567 stack.token_data.desc (stack.nargs) = desc; 568 stack.token_data.bit_length (stack.nargs) = bit_length; 569 stack.token_data.assn_ptr (stack.nargs) = assn_ptr; 570 stack.token_data.assn_type (stack.nargs) = assn_type; 571 stack.token_data.assn_len (stack.nargs) = assn_len; 572 call shift_comm; 573 end shift_common; 574 575 shift_comm: 576 proc; 577 stack.token_data.key (stack.nargs) = token_data.key; 578 stack.token_data.must_free (stack.nargs) = token_data.must_free; 579 stack.token_data.length (stack.nargs) = token_data.length; 580 stack.token_data.t_ptr (stack.nargs) = token_data.t_ptr; 581 end shift_comm; 582 583 shift_linus_var: 584 proc; 585 586 do i = 1 to variables.nvars 587 while (variables.var_info.name (i) ^= token_item); 588 end; /* find linus variable */ 589 call 590 shift_common (variables.var_info.desc (i), 591 variables.var_info.bit_len (i), variables.var_info.var_ptr (i), 592 variables.var_info.assn_type (i), variables.var_info.assn_len (i)); 593 end shift_linus_var; 594 595 shift_const: 596 proc; 597 598 dcl 1 token_data_temp like token_data; 599 600 dcl first_char char (1) based (token_data_temp.t_ptr); 601 dcl offset (10) bit (1) based; 602 dcl repl_factor char (repl_len) based (repl_ptr); 603 dcl constant_desc bit (36); 604 dcl one_repl_ch char (1) based (orc_ptr); 605 dcl one_source_ch char (1) based (osc_ptr); 606 607 dcl ( 608 ci_ptr init (null), 609 repl_ptr init (null), 610 orc_ptr init (null), 611 osc_ptr init (null), 612 source_ptr init (null) 613 ) ptr; 614 615 dcl k fixed bin; 616 617 618 dcl repl_flag bit (1); 619 620 dcl (repl_fac, repl_len, ci_len) fixed bin (35); 621 622 dcl RIGHT_PAREN char (1) int static options (constant) init (")"); 623 dcl LEFT_PAREN char (1) int static options (constant) init ("("); 624 dcl QUOTE char (1) int static options (constant) init (""""); 625 dcl BIT_DESC bit (36) init ("101001100000000000000000000000000000"b); 626 627 token_data_temp = token_data; 628 repl_flag = "0"b; 629 source_length = token_data.length; 630 source_ptr = token_data.t_ptr; 631 if (search (token_item, "i")) > 0 then 632 constant_desc = CMPX_FD; 633 else constant_desc = REAL_FD; 634 addr (constant_desc) -> arg_len_bits.length = 635 substr (bit (token_data.length), 12, 24); /* set length of float dec descriptor */ 636 if first_char = LEFT_PAREN then do; 637 repl_flag = "1"b; /* there is a replication factor */ 638 repl_ptr, token_data.t_ptr = addr (token_data.t_ptr -> offset (10)); 639 do j = 2 to token_data.length while (first_char ^= RIGHT_PAREN); 640 token_data.t_ptr = addr (token_data.t_ptr -> offset (10)); 641 end; 642 repl_len = j - 2; 643 token_data.length = token_data.length - j; 644 token_data.t_ptr = addr (token_data.t_ptr -> offset (10)); 645 token_data_temp = token_data; 646 repl_fac = fixed (repl_factor); 647 end; 648 if first_char = QUOTE then do; 649 ci_ptr, token_data_temp.t_ptr = 650 addr (token_data_temp.t_ptr -> offset (10)); 651 do j = 2 to token_data_temp.length while (first_char ^= QUOTE); 652 token_data_temp.t_ptr = addr (token_data_temp.t_ptr -> offset (10)); 653 end; 654 ci_len = token_data_temp.length - 2; 655 if j = token_data_temp.length then 656 constant_desc = CHAR_DESC; 657 else do; 658 ci_len = token_data_temp.length - 1; 659 constant_desc = BIT_DESC; 660 end; 661 addr (constant_desc) -> arg_len_bits.length = 662 addr (ci_len) -> arg_len_bits.length; 663 source_ptr = ci_ptr; 664 source_length = ci_len; 665 if repl_flag then do; 666 source_length, cs_len = repl_fac * ci_len; 667 addr (constant_desc) -> arg_len_bits.length = 668 addr (cs_len) -> arg_len_bits.length; 669 allocate constant_string in (work_area); 670 source_ptr, orc_ptr = cs_ptr; 671 do j = 1 to repl_fac; /* to number of replication factor */ 672 osc_ptr = ci_ptr; 673 do k = 1 to ci_len; /* one for each character in string */ 674 one_repl_ch = one_source_ch; 675 orc_ptr = addr (orc_ptr -> offset (10)); 676 osc_ptr = addr (osc_ptr -> offset (10)); 677 end; 678 end; 679 end; 680 end; 681 call linus_assign_data (constant_desc, target_type, target_length); 682 /* returns type and length */ 683 call 684 linus_lila_alloc_lit (lcb_ptr, addr (constant_desc), lit_ptr, bit_len); 685 /* returns pointer to literal pool and bit length */ 686 addr (CHAR_DESC) -> arg_len_bits.length = 687 substr (bit (token_data.length), 12, 24); /* set length of char descriptor */ 688 call linus_assign_data ((CHAR_DESC), source_type, source_length); 689 /* returns type and length */ 690 call 691 assign_round_ (lit_ptr, target_type, target_length, source_ptr, source_type, 692 source_length); 693 call 694 shift_common ((constant_desc), bit_len, lit_ptr, target_type, 695 target_length); 696 697 if cs_ptr ^= null then do; 698 cs_ptr = null; 699 cs_ptr = null; 700 end; 701 702 end shift_const; 703 704 shift_col_spec: 705 proc; 706 707 dcl (i, j) fixed bin; 708 709 dcl rel_name char (32); 710 711 do i = 1 to ls_block.nselects 712 while (token_data.mvar || "." || token_item ^= ls_block.sel_items (i)); 713 end; /* check if already selected */ 714 if ef_data.var_name = " " then 715 ef_data.var_name = token_data.mvar; 716 if token_data.mvar ^= ef_data.var_name then 717 call error (linus_error_$inv_tup_var, ""); 718 if i <= ls_block.nselects then do; 719 call 720 shift_common (ls_set.domain_info.desc (i), 721 ls_set.domain_info.bit_length (i), ls_set.domain_info.assn_ptr (i), 722 ls_set.domain_info.assn_type (i), ls_set.domain_info.assn_len (i)); 723 end; 724 else do; /* get rel_name from ls_block */ 725 do i = 1 to ls_block.nritems 726 while (token_data.mvar ^= ls_block.range_items.mrds_var (i)); 727 end; 728 if ls_block.range_items.rel_name (i) = ".V." then 729 rel_name = linus_rel_array.rels.rel_name (ls_block.range_items.rel_index (i)); 730 else rel_name = ls_block.range_items.rel_name (i); 731 do j = 1 to linus_rel_array.num_of_rels 732 while (linus_rel_array.rels.rel_name (j) ^= rel_name); 733 end; 734 rslt_ptr = linus_rel_array.rels.rslt_info_ptr (j); 735 do j = 1 to rslt_info.num_attr 736 while (token_item ^= rslt_info.attr.attr_name (j)); 737 end; /* find info for attribute selected */ 738 call 739 linus_assign_data ((rslt_info.attr.descriptor (j)), source_type, 740 source_length); 741 call 742 linus_lila_alloc_lit (lcb_ptr, addr (rslt_info.attr.descriptor (j)), 743 lit_ptr, bit_len); 744 call 745 shift_common (rslt_info.attr.descriptor (j), bit_len, lit_ptr, 746 source_type, source_length); 747 748 /* pass mrds items data in ef_data and update ls_block & ls_set */ 749 750 ef_data.nmrds_items = ef_data.nmrds_items + 1; 751 if ls_block.nselects >= mrds_data_$max_select_items then 752 call error (linus_error_$select_list_ovfl, ""); 753 else do; 754 ls_block.nselects = ls_block.nselects + 1; 755 ls_block.sel_items (ls_block.nselects) = 756 token_data.mvar || "." || token_item; 757 end; 758 ls_set.nselects = ls_set.nselects + 1; 759 if ls_set.nselects > mrds_data_$max_select_items then 760 call error (linus_error_$select_list_ovfl, ""); 761 ef_data.mrds_items.attr_name (ef_data.nmrds_items) = token_item; 762 ls_set.domain_info.bit_length (ls_set.nselects), 763 ef_data.mrds_items.bit_length (ef_data.nmrds_items) = bit_len; 764 ls_set.domain_info.assn_ptr (ls_set.nselects), 765 ef_data.mrds_items.assn_ptr (ef_data.nmrds_items) = lit_ptr; 766 ls_set.domain_info.assn_type (ls_set.nselects), 767 ef_data.mrds_items.assn_type (ef_data.nmrds_items) = source_type; 768 ls_set.domain_info.assn_len (ls_set.nselects), 769 ef_data.mrds_items.assn_len (ef_data.nmrds_items) = source_length; 770 ls_set.domain_info.desc (ls_set.nselects), 771 ef_data.mrds_items.desc (ef_data.nmrds_items) = 772 rslt_info.attr.descriptor (j); 773 ls_set.domain_info.name (ls_set.nselects), 774 ef_data.mrds_items.domain_name (ef_data.nmrds_items) = 775 rslt_info.attr.domain_name (j); 776 end; 777 778 end shift_col_spec; 779 780 error: 781 proc (err_code, string); 782 783 dcl err_code fixed bin (35); 784 dcl string char (*); 785 786 call linus_lila_error (lcb_ptr, lsh_ptr, err_code, string); 787 788 end error; 789 790 end linus_lila_build_expr_tab; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/14/90 0915.0 linus_lila_build_expr_tab.pl1 >spec>install>1039>linus_lila_build_expr_tab.pl1 90 1 07/29/86 1248.4 linus_lcb.incl.pl1 >ldd>include>linus_lcb.incl.pl1 92 2 03/27/82 0534.5 linus_expression.incl.pl1 >ldd>include>linus_expression.incl.pl1 94 3 03/27/82 0534.5 linus_ef_data.incl.pl1 >ldd>include>linus_ef_data.incl.pl1 96 4 03/27/82 0534.5 linus_ls_block.incl.pl1 >ldd>include>linus_ls_block.incl.pl1 4-4 5 03/27/82 0534.5 linus_ls_common.incl.pl1 >ldd>include>linus_ls_common.incl.pl1 98 6 11/23/82 1427.2 linus_ls_header.incl.pl1 >ldd>include>linus_ls_header.incl.pl1 6-4 7 03/27/82 0534.5 linus_ls_common.incl.pl1 >ldd>include>linus_ls_common.incl.pl1 100 8 03/27/82 0534.5 linus_ls_set.incl.pl1 >ldd>include>linus_ls_set.incl.pl1 8-4 9 03/27/82 0534.5 linus_ls_common.incl.pl1 >ldd>include>linus_ls_common.incl.pl1 102 10 03/27/82 0534.5 linus_rel_array.incl.pl1 >ldd>include>linus_rel_array.incl.pl1 104 11 03/27/82 0534.5 linus_token_data.incl.pl1 >ldd>include>linus_token_data.incl.pl1 106 12 03/27/82 0534.5 linus_variables.incl.pl1 >ldd>include>linus_variables.incl.pl1 108 13 10/14/83 1709.0 mrds_rslt_info.incl.pl1 >ldd>include>mrds_rslt_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. BIT_DESC 000355 automatic bit(36) initial packed unaligned dcl 625 set ref 625* 659 CFD59 000233 constant bit(36) initial dcl 132 ref 376 CHAR_DESC 000120 automatic bit(36) dcl 123 set ref 264* 655 686 688 CMPX_FD 000122 automatic bit(36) dcl 127 set ref 266* 631 COL_SPEC constant fixed bin(17,0) initial dcl 11-13 ref 286 407 475 CONST constant fixed bin(17,0) initial dcl 11-13 ref 473 EXPR_SCAL_FN constant fixed bin(4,0) initial dcl 135 ref 485 EXPR_SET_FN constant fixed bin(4,0) initial dcl 135 ref 495 FD59 000234 constant bit(36) initial dcl 129 ref 378 LEFT_PAREN 004147 constant char(1) initial packed unaligned dcl 623 ref 636 LINUS_VAR constant fixed bin(17,0) initial dcl 11-13 ref 471 LP constant fixed bin(17,0) initial dcl 11-13 ref 463 MINUS constant fixed bin(17,0) initial dcl 11-13 ref 293 NULL constant fixed bin(17,0) initial dcl 11-13 ref 293 399 468 554 OPERATOR constant fixed bin(4,0) initial dcl 135 ref 464 529 QUOTE 004146 constant char(1) initial packed unaligned dcl 624 ref 648 651 REAL_FD 000121 automatic bit(36) dcl 125 set ref 265* 633 RIGHT_PAREN 004150 constant char(1) initial packed unaligned dcl 622 ref 639 RP constant fixed bin(17,0) initial dcl 11-13 ref 284 404 SET_FN constant fixed bin(17,0) initial dcl 11-13 ref 284 404 addr builtin function dcl 218 ref 328 328 336 336 385 385 546 546 634 638 640 644 649 652 661 661 667 667 675 676 683 683 686 741 741 arg_len_bits based structure level 1 packed packed unaligned dcl 178 assign_round_ 000042 constant entry external dcl 246 ref 690 assn_len 11 based fixed bin(35,0) array level 3 in structure "expression" dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 538* assn_len based fixed bin(35,0) array level 3 in structure "ls_set" dcl 8-3 in procedure "linus_lila_build_expr_tab" set ref 719* 768* assn_len parameter fixed bin(35,0) dcl 564 in procedure "shift_common" ref 561 571 assn_len 15 based fixed bin(35,0) level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 382* 432* 556* assn_len 16 based fixed bin(35,0) array level 3 in structure "variables" dcl 12-3 in procedure "linus_lila_build_expr_tab" set ref 589* assn_len 45 based fixed bin(35,0) array level 3 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 451* 768* assn_len 45 000150 automatic fixed bin(35,0) array level 3 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 451 assn_len 13 based fixed bin(35,0) array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 538 571* assn_len 15 000150 automatic fixed bin(35,0) level 2 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 432 assn_ptr 12 000150 automatic pointer level 2 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 430 assn_ptr parameter pointer dcl 565 in procedure "shift_common" ref 561 569 assn_ptr based pointer array level 3 in structure "ls_set" dcl 8-3 in procedure "linus_lila_build_expr_tab" set ref 719* 764* assn_ptr 42 000150 automatic pointer array level 3 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 447 assn_ptr 12 based pointer level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 385* 430* 556* assn_ptr 10 based pointer array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 534 569* assn_ptr 6 based pointer array level 3 in structure "expression" dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 534* assn_ptr 42 based pointer array level 3 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 447* 764* assn_type 12 based fixed bin(17,0) array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 536 570* assn_type 10 based fixed bin(17,0) array level 3 in structure "expression" dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 536* assn_type 15 based fixed bin(17,0) array level 3 in structure "variables" dcl 12-3 in procedure "linus_lila_build_expr_tab" set ref 589* assn_type 14 based fixed bin(17,0) level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 382* 431* 556* assn_type parameter fixed bin(17,0) dcl 566 in procedure "shift_common" ref 561 570 assn_type 14 000150 automatic fixed bin(17,0) level 2 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 431 assn_type based fixed bin(17,0) array level 3 in structure "ls_set" dcl 8-3 in procedure "linus_lila_build_expr_tab" set ref 719* 766* assn_type 44 000150 automatic fixed bin(17,0) array level 3 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 449 assn_type 44 based fixed bin(17,0) array level 3 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 449* 766* attr 4 based structure array level 2 dcl 13-7 attr_name 4 based char(32) array level 3 in structure "rslt_info" dcl 13-7 in procedure "linus_lila_build_expr_tab" ref 735 attr_name 20 000150 automatic char(32) array level 3 in structure "ef_d" packed packed unaligned dcl 226 in procedure "linus_lila_build_expr_tab" set ref 439 attr_name 20 based char(32) array level 3 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 439* 761* back_ptr 2 based pointer level 2 dcl 4-3 ref 280 bit builtin function dcl 218 ref 634 686 bit_len 000132 automatic fixed bin(35,0) dcl 206 in procedure "linus_lila_build_expr_tab" set ref 683* 693* 741* 744* 762 bit_len 14 based fixed bin(35,0) array level 3 in structure "variables" dcl 12-3 in procedure "linus_lila_build_expr_tab" set ref 589* bit_length parameter fixed bin(35,0) dcl 564 in procedure "shift_common" ref 561 568 bit_length based fixed bin(35,0) array level 3 in structure "ls_set" dcl 8-3 in procedure "linus_lila_build_expr_tab" set ref 719* 762* bit_length 10 based fixed bin(35,0) level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 385* 428* 556* bit_length 4 based fixed bin(35,0) array level 3 in structure "expression" dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 532* bit_length 40 based fixed bin(35,0) array level 3 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 443* 762* bit_length 10 000150 automatic fixed bin(35,0) level 2 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 428 bit_length 40 000150 automatic fixed bin(35,0) array level 3 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 443 bit_length 7 based fixed bin(35,0) array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 532 568* ci_len 000354 automatic fixed bin(35,0) dcl 620 set ref 654* 658* 661 664 666 673 ci_ptr 000336 automatic pointer initial dcl 607 set ref 607* 649* 663 672 cmpx 000141 automatic bit(1) packed unaligned dcl 211 set ref 270* 376 546* code parameter fixed bin(35,0) dcl 206 set ref 25 268* constant_desc 000334 automatic bit(36) packed unaligned dcl 603 set ref 631* 633* 634 655* 659* 661 667 681* 683 683 693 constant_string based char packed unaligned dcl 209 ref 669 cs_len 000133 automatic fixed bin(35,0) dcl 206 set ref 666* 667 669 669 cs_ptr 000142 automatic pointer initial dcl 220 set ref 220* 258* 669* 670 697 698* 699* cur_pos 13 based fixed bin(35,0) level 2 dcl 6-3 set ref 396* cur_ptr 6 based pointer level 2 dcl 6-3 ref 279 desc 41 000150 automatic bit(36) array level 3 in structure "ef_d" packed packed unaligned dcl 226 in procedure "linus_lila_build_expr_tab" set ref 445 desc 17 based bit(36) array level 3 in structure "variables" dcl 12-3 in procedure "linus_lila_build_expr_tab" set ref 589* desc parameter bit(36) dcl 563 in procedure "shift_common" ref 561 567 desc 6 based bit(36) array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 530 567* desc 41 based bit(36) array level 3 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 445* 770* desc 11 based bit(36) level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 381* 382 385 385 429* 556* desc 11 000150 automatic bit(36) level 2 in structure "ef_d" packed packed unaligned dcl 226 in procedure "linus_lila_build_expr_tab" set ref 429 desc 3 based bit(36) array level 3 in structure "expression" dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 374 530* 546 546 desc based bit(36) array level 3 in structure "ls_set" dcl 8-3 in procedure "linus_lila_build_expr_tab" set ref 719* 770* descriptor 26 based bit(36) array level 3 dcl 13-7 set ref 738 741 741 744* 770 domain_info based structure array level 2 dcl 8-3 domain_name 14 based char(32) array level 3 in structure "rslt_info" dcl 13-7 in procedure "linus_lila_build_expr_tab" ref 773 domain_name 30 000150 automatic char(32) array level 3 in structure "ef_d" packed packed unaligned dcl 226 in procedure "linus_lila_build_expr_tab" set ref 441 domain_name 30 based char(32) array level 3 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 441* 773* ed_ptr parameter pointer dcl 3-22 ref 25 268 269 380 381 382 382 382 385 385 385 385 423 423 425 428 429 430 431 432 433 434 438 438 439 439 441 441 443 443 445 445 447 447 449 449 451 451 486 496 556 556 556 556 556 714 714 716 750 750 761 761 762 762 764 764 766 766 768 768 770 770 773 773 ef_d 000150 automatic structure level 1 unaligned dcl 226 set ref 262* 328 328 336 336 ef_data based structure level 1 dcl 3-3 ef_ptr 000150 automatic pointer level 2 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 433 ef_ptr based pointer level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 380* 433* 486 496 elem 2 based structure array level 2 dcl 2-3 err_code parameter fixed bin(35,0) dcl 783 set ref 780 786* ex_ptr 000100 automatic pointer dcl 2-27 set ref 258* 276* 277 278 374 374 374 376 378 380 381 524 524 525 525 527 527 529 529 530 530 532 532 534 534 536 536 538 538 540 540 546 546 546 546 expr_type 000236 constant fixed bin(4,0) initial array packed unaligned dcl 111 ref 465 469 expression based structure level 1 dcl 2-3 set ref 276 277* first_char based char(1) packed unaligned dcl 600 ref 636 639 648 651 first_token 000140 automatic bit(1) packed unaligned dcl 211 set ref 271* 285* 404 406* fixed builtin function dcl 218 ref 646 fn_ptr 12 based pointer array level 3 in structure "expression" dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 540* fn_ptr 14 based pointer array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 461* 486* 496* 540 i 000123 automatic fixed bin(17,0) dcl 203 in procedure "linus_lila_build_expr_tab" set ref 436* 439 441 443 445 447 449 451* 586* 586* 589 589 589 589 589 i 000370 automatic fixed bin(17,0) dcl 707 in procedure "shift_col_spec" set ref 711* 711* 718 719 719 719 719 719 725* 725* 728 728 730 icode 000134 automatic fixed bin(35,0) dcl 206 set ref 268* 328* 336* 396* 413 413* j 000371 automatic fixed bin(17,0) dcl 707 in procedure "shift_col_spec" set ref 731* 731* 734 735* 735* 738 741 741 744 770 773 j 000124 automatic fixed bin(17,0) dcl 203 in procedure "linus_lila_build_expr_tab" set ref 639* 642 643 651* 655 671* k 000350 automatic fixed bin(17,0) dcl 615 set ref 673* key based fixed bin(17,0) level 2 in structure "token_data" packed packed unaligned dcl 11-3 in procedure "linus_lila_build_expr_tab" set ref 284 284 286 293 295 399 404 404 407 463 465 469 471 473 475 483* 493* 577 key 2 based fixed bin(17,0) array level 3 in structure "stack" packed packed unaligned dcl 182 in procedure "linus_lila_build_expr_tab" set ref 298 577* lcb based structure level 1 dcl 1-53 lcb_ptr parameter pointer dcl 1-121 set ref 25 260 272 273 276 328* 336* 385* 396* 669 683* 741* 786* length 23 000306 automatic fixed bin(35,0) level 2 in structure "token_data_temp" dcl 598 in procedure "shift_const" set ref 651 654 655 658 length 0(12) based bit(24) level 2 in structure "arg_len_bits" packed packed unaligned dcl 178 in procedure "linus_lila_build_expr_tab" set ref 634* 661* 661 667* 667 686* length 3 based fixed bin(35,0) array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 579* length 23 based fixed bin(35,0) level 2 in structure "token_data" dcl 11-3 in procedure "linus_lila_build_expr_tab" set ref 579 586 629 631 634 639 643* 643 686 711 735 755 761 lila_area_ptr 62 based pointer level 2 dcl 1-53 ref 273 276 669 linus_assign_data 000044 constant entry external dcl 248 ref 382 681 688 738 linus_data_$max_expr_items 000010 external static fixed bin(35,0) dcl 228 ref 226 380 433 434 486 496 linus_data_$max_range_items 000012 external static fixed bin(35,0) dcl 228 ref 711 711 718 751 754 754 755 755 linus_data_$max_set_stack_size 000014 external static fixed bin(35,0) dcl 228 ref 719 719 719 719 719 762 764 766 768 770 773 linus_data_$stk_depth 000016 external static fixed bin(35,0) dcl 228 ref 267 273 273 linus_error_$expr_ovfl 000020 external static fixed bin(35,0) dcl 228 set ref 434* linus_error_$first_expr_item 000022 external static fixed bin(35,0) dcl 228 set ref 286* 407* linus_error_$inv_expr 000024 external static fixed bin(35,0) dcl 228 set ref 344* 357* 369* linus_error_$inv_tup_var 000026 external static fixed bin(35,0) dcl 228 set ref 425* 716* linus_error_$op_follow_lp 000030 external static fixed bin(35,0) dcl 228 set ref 348* linus_error_$select_list_ovfl 000032 external static fixed bin(35,0) dcl 228 set ref 751* 759* linus_error_$token_type_null 000034 external static fixed bin(35,0) dcl 228 set ref 399* linus_lila_alloc_lit 000046 constant entry external dcl 249 ref 385 683 741 linus_lila_error 000050 constant entry external dcl 250 ref 786 linus_lila_get_token 000052 constant entry external dcl 251 ref 396 linus_lila_scal_fn 000054 constant entry external dcl 252 ref 336 linus_lila_set_fn 000056 constant entry external dcl 253 ref 328 linus_rel_array based structure level 1 unaligned dcl 10-10 linus_rel_array_ptr 000110 automatic pointer dcl 10-16 set ref 260* 728 731 731 734 lit_ptr 000144 automatic pointer initial dcl 220 set ref 220* 683* 690* 693* 741* 744* 764 ls_block based structure level 1 dcl 4-3 ls_header based structure level 1 dcl 6-3 ls_set based structure level 1 dcl 8-3 lsb_ptr 000104 automatic pointer dcl 4-32 set ref 279* 280 711 711 718 725 725 728 728 730 751 754 754 755 755 lsh_ptr parameter pointer dcl 6-15 set ref 25 279 328* 336* 396* 396 786* lss_ptr 000106 automatic pointer dcl 8-33 set ref 280* 719 719 719 719 719 758 758 759 762 762 764 764 766 766 768 768 770 770 773 773 lv_ptr 32 based pointer level 2 in structure "lcb" dcl 1-53 in procedure "linus_lila_build_expr_tab" ref 272 lv_ptr 000114 automatic pointer dcl 12-14 in procedure "linus_lila_build_expr_tab" set ref 272* 586 586 589 589 589 589 589 mdbm_util_$complex_data_class 000060 constant entry external dcl 254 ref 546 mrds_data_$max_select_items 000040 external static fixed bin(35,0) dcl 228 ref 751 759 mrds_data_$max_token_size 000036 external static fixed bin(35,0) dcl 228 ref 711 711 755 755 755 mrds_items 20 000150 automatic structure array level 2 in structure "ef_d" unaligned dcl 226 in procedure "linus_lila_build_expr_tab" mrds_items 20 based structure array level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" mrds_var 23 based varying char(32) array level 3 dcl 4-3 ref 725 must_free 0(18) based bit(1) level 2 in structure "token_data" packed packed unaligned dcl 11-3 in procedure "linus_lila_build_expr_tab" ref 578 must_free 2(18) based bit(1) array level 3 in structure "stack" packed packed unaligned dcl 182 in procedure "linus_lila_build_expr_tab" set ref 544 578* mvar 1 based varying char(32) level 2 dcl 11-3 ref 711 714 716 725 755 name 2 based char(32) array level 3 in structure "variables" dcl 12-3 in procedure "linus_lila_build_expr_tab" ref 586 name based char(32) array level 3 in structure "ls_set" dcl 8-3 in procedure "linus_lila_build_expr_tab" set ref 773* nargs based fixed bin(17,0) level 2 dcl 182 set ref 273* 274 275* 348 357 369 459* 459 460 461 462 464 465 468 469 484* 484 485 486 494* 494 495 496 504* 504 512* 512 544 553 554 555 567 568 569 570 571 577 578 579 580 nelems 1 based fixed bin(17,0) level 2 dcl 2-3 set ref 276* 277 278* 374 524* 524 525 527 529 530 532 534 536 538 540 546 546 nelems_init 000102 automatic fixed bin(17,0) dcl 2-28 set ref 267* 276 276 nmrds_items 16 based fixed bin(17,0) level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 268* 434 438* 438 439 441 443 445 447 449 451 750* 750 761 762 764 766 768 770 773 nmrds_items 16 000150 automatic fixed bin(17,0) level 2 in structure "ef_d" dcl 226 in procedure "linus_lila_build_expr_tab" set ref 436 436 nritems 11 based fixed bin(17,0) level 2 dcl 4-3 ref 725 nselects 6 based fixed bin(17,0) level 2 in structure "ls_set" dcl 8-3 in procedure "linus_lila_build_expr_tab" set ref 758* 758 759 762 764 766 768 770 773 nselects based fixed bin(17,0) level 2 in structure "ls_block" dcl 4-3 in procedure "linus_lila_build_expr_tab" set ref 711 718 751 754* 754 755 null builtin function dcl 218 ref 220 220 220 258 388 389 461 544 607 607 607 607 607 697 698 699 num_attr based fixed bin(17,0) level 2 dcl 13-7 ref 735 num_of_rels based fixed bin(17,0) level 2 dcl 10-10 ref 731 num_of_rels_init 000112 automatic fixed bin(17,0) initial dcl 10-18 set ref 10-18* nvars 1 based fixed bin(17,0) level 2 dcl 12-3 ref 586 offset based bit(1) array packed unaligned dcl 601 set ref 638 640 644 649 652 675 676 one_repl_ch based char(1) packed unaligned dcl 604 set ref 674* one_source_ch based char(1) packed unaligned dcl 605 ref 674 op_code 16(05) based fixed bin(3,0) array level 3 in structure "stack" packed packed unaligned dcl 182 in procedure "linus_lila_build_expr_tab" set ref 465* 468* 527 554* op_code 2(05) based fixed bin(3,0) array level 3 in structure "expression" packed packed unaligned dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 527* orc_ptr 000342 automatic pointer initial dcl 607 set ref 607* 670* 674 675* 675 osc_ptr 000344 automatic pointer initial dcl 607 set ref 607* 672* 674 676* 676 prec_relations 000013 constant fixed bin(4,0) initial array dcl 141 ref 301 range_items 12 based structure array level 2 dcl 4-3 reduced 2(19) based bit(1) array level 3 packed packed unaligned dcl 182 set ref 369 462* 509* 509* 523* 555* rel_array_ptr 66 based pointer level 2 dcl 1-53 ref 260 rel_index 45 based fixed bin(35,0) array level 3 dcl 4-3 ref 728 rel_name 2 based char(32) array level 3 in structure "linus_rel_array" packed packed unaligned dcl 10-10 in procedure "linus_lila_build_expr_tab" ref 728 731 rel_name 000372 automatic char(32) packed unaligned dcl 709 in procedure "shift_col_spec" set ref 728* 730* 731 rel_name 34 based varying char(32) array level 3 in structure "ls_block" dcl 4-3 in procedure "linus_lila_build_expr_tab" ref 728 730 rels 2 based structure array level 2 unaligned dcl 10-10 repl_fac 000352 automatic fixed bin(35,0) dcl 620 set ref 646* 666 671 repl_factor based char packed unaligned dcl 602 ref 646 repl_flag 000351 automatic bit(1) packed unaligned dcl 618 set ref 628* 637* 665 repl_len 000353 automatic fixed bin(35,0) dcl 620 set ref 642* 646 repl_ptr 000340 automatic pointer initial dcl 607 set ref 607* 638* 646 rslt_desc based bit(36) level 2 dcl 2-3 set ref 374* 376* 378* 381 rslt_info based structure level 1 dcl 13-7 rslt_info_ptr 12 based pointer array level 3 dcl 10-10 ref 734 rslt_ptr 000116 automatic pointer dcl 13-32 set ref 258* 389* 734* 735 735 738 741 741 744 770 773 search builtin function dcl 218 ref 631 sel_items based varying char array level 2 dcl 4-3 set ref 711 755* sk_ptr 000146 automatic pointer initial dcl 220 set ref 220* 258* 273* 274 275 298 348 357 369 369 388* 459 459 460 461 461 462 462 464 464 465 465 468 468 469 469 484 484 485 485 486 486 494 494 495 495 496 496 504 504 509 509 512 512 523 525 527 530 532 534 536 538 540 544 544 553 554 554 555 555 567 567 568 568 569 569 570 570 571 571 577 577 578 578 579 579 580 580 source_length 000135 automatic fixed bin(35,0) dcl 206 set ref 629* 664* 666* 688* 690* 738* 744* 768 source_ptr 000346 automatic pointer initial dcl 607 set ref 607* 630* 663* 670* 690* source_type 000125 automatic fixed bin(17,0) dcl 203 set ref 688* 690* 738* 744* 766 stack based structure level 1 dcl 182 set ref 273 274* string parameter char packed unaligned dcl 784 set ref 780 786* substr builtin function dcl 218 ref 634 686 t_ptr 24 based pointer level 2 in structure "token_data" dcl 11-3 in procedure "linus_lila_build_expr_tab" set ref 580 586 630 631 638 638* 640* 640 644* 644 711 735 755 761 t_ptr 24 000306 automatic pointer level 2 in structure "token_data_temp" dcl 598 in procedure "shift_const" set ref 636 639 648 649 649* 651 652* 652 t_ptr 4 based pointer array level 3 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" set ref 544* 580* target_length 000136 automatic fixed bin(35,0) dcl 206 set ref 681* 690* 693* target_type 000126 automatic fixed bin(17,0) dcl 203 set ref 681* 690* 693* td_ptr parameter pointer dcl 11-49 set ref 25 284 284 286 293 295 328* 336* 396* 399 404 404 407 463 465 469 471 473 475 483 493 577 578 579 580 586 586 627 629 630 631 631 634 638 638 639 640 640 643 643 644 644 645 686 711 711 711 714 716 725 735 735 755 755 755 761 761 temp_stack_key 000130 automatic fixed bin(17,0) dcl 203 set ref 296* 298* 301 temp_token_key 000127 automatic fixed bin(17,0) dcl 203 set ref 293* 295* 301 test 000137 automatic bit(1) packed unaligned dcl 211 set ref 270* 292 321* 363* token_data based structure level 1 dcl 11-3 in procedure "linus_lila_build_expr_tab" set ref 627 645 token_data 2 based structure array level 2 in structure "stack" dcl 182 in procedure "linus_lila_build_expr_tab" token_data_temp 000306 automatic structure level 1 unaligned dcl 598 set ref 627* 645* token_item based char packed unaligned dcl 200 ref 586 631 711 735 755 761 tos_key 000131 automatic fixed bin(17,0) dcl 203 set ref 268* 296 298 319 348 357 460* 503* 503 509 509 511* 511 518* 518 523 525 527 530 532 534 536 538 540 544 553* type 16 based fixed bin(4,0) array level 3 in structure "stack" packed packed unaligned dcl 182 in procedure "linus_lila_build_expr_tab" set ref 464* 469* 485* 495* 525 type 2 based fixed bin(4,0) array level 3 in structure "expression" packed packed unaligned dcl 2-3 in procedure "linus_lila_build_expr_tab" set ref 525* 529 unspec builtin function dcl 218 set ref 262* 274* 277* var_info 2 based structure array level 2 dcl 12-3 var_name 000150 automatic char(32) level 2 in structure "ef_d" packed packed unaligned dcl 226 in procedure "linus_lila_build_expr_tab" set ref 422 423 425 var_name based char(32) level 2 in structure "ef_data" dcl 3-3 in procedure "linus_lila_build_expr_tab" set ref 269* 423 423* 425 714 714* 716 var_ptr 12 based pointer array level 3 dcl 12-3 set ref 589* variables based structure level 1 dcl 12-3 work_area based area dcl 256 ref 273 276 669 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. AND internal static fixed bin(17,0) initial dcl 11-13 COMMA internal static fixed bin(17,0) initial dcl 11-13 DIFFER internal static fixed bin(17,0) initial dcl 11-13 DIV internal static fixed bin(17,0) initial dcl 11-13 DUP internal static fixed bin(17,0) initial dcl 11-13 EQ internal static fixed bin(17,0) initial dcl 11-13 FROM internal static fixed bin(17,0) initial dcl 11-13 GE internal static fixed bin(17,0) initial dcl 11-13 GT internal static fixed bin(17,0) initial dcl 11-13 INTER internal static fixed bin(17,0) initial dcl 11-13 LB internal static fixed bin(17,0) initial dcl 11-13 LE internal static fixed bin(17,0) initial dcl 11-13 LT internal static fixed bin(17,0) initial dcl 11-13 NE internal static fixed bin(17,0) initial dcl 11-13 NOT internal static fixed bin(17,0) initial dcl 11-13 OR internal static fixed bin(17,0) initial dcl 11-13 PLUS internal static fixed bin(17,0) initial dcl 11-13 RB internal static fixed bin(17,0) initial dcl 11-13 ROW_DES internal static fixed bin(17,0) initial dcl 11-13 ROW_TAB_PAIR internal static fixed bin(17,0) initial dcl 11-13 SCAL_FN internal static fixed bin(17,0) initial dcl 11-13 SELECT internal static fixed bin(17,0) initial dcl 11-13 STAR internal static fixed bin(17,0) initial dcl 11-13 TAB_NAME internal static fixed bin(17,0) initial dcl 11-13 UNION internal static fixed bin(17,0) initial dcl 11-13 UNIQUE internal static fixed bin(17,0) initial dcl 11-13 WHERE internal static fixed bin(17,0) initial dcl 11-13 linus_data_$max_pred_stack_size external static fixed bin(35,0) dcl 228 nvars_init automatic fixed bin(17,0) dcl 12-15 rel builtin function dcl 218 rslt_alloc automatic fixed bin(17,0) dcl 13-34 sys_info$max_seg_size external static fixed bin(35,0) dcl 228 NAMES DECLARED BY EXPLICIT CONTEXT. case 000000 constant label array(11) dcl 303 ref 301 end_case 000703 constant label dcl 366 ref 305 309 315 322 326 334 342 346 355 361 error 003654 constant entry internal dcl 780 ref 286 344 348 357 369 399 407 413 425 434 716 751 759 get_token 001024 constant entry internal dcl 393 ref 314 333 341 353 linus_lila_build_expr_tab 000257 constant entry external dcl 25 push_expression 001551 constant entry internal dcl 521 ref 502 517 reduce_op 001515 constant entry internal dcl 500 ref 303 319 360 reduce_paren 001524 constant entry internal dcl 507 ref 307 reduce_var 001544 constant entry internal dcl 515 ref 317 324 shift_col_spec 002601 constant entry internal dcl 704 ref 475 shift_comm 001751 constant entry internal dcl 575 ref 477 572 shift_common 001723 constant entry internal dcl 561 ref 556 589 693 719 744 shift_const 002047 constant entry internal dcl 595 ref 473 shift_function 001666 constant entry internal dcl 551 ref 487 497 shift_linus_var 001776 constant entry internal dcl 583 ref 471 shift_sclf 001427 constant entry internal dcl 480 ref 340 shift_setf 001462 constant entry internal dcl 490 ref 332 shift_token 001337 constant entry internal dcl 457 ref 312 352 update_efdata 001131 constant entry internal dcl 418 ref 331 339 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 4454 4536 4153 4464 Length 5246 4153 62 474 300 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME linus_lila_build_expr_tab 592 external procedure is an external procedure. get_token internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. update_efdata internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_token internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_sclf internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_setf internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. reduce_op internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. reduce_paren internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. reduce_var internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. push_expression internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_function internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_common internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_comm internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_linus_var internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_const internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. shift_col_spec internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. error internal procedure shares stack frame of external procedure linus_lila_build_expr_tab. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME linus_lila_build_expr_tab 000100 ex_ptr linus_lila_build_expr_tab 000102 nelems_init linus_lila_build_expr_tab 000104 lsb_ptr linus_lila_build_expr_tab 000106 lss_ptr linus_lila_build_expr_tab 000110 linus_rel_array_ptr linus_lila_build_expr_tab 000112 num_of_rels_init linus_lila_build_expr_tab 000114 lv_ptr linus_lila_build_expr_tab 000116 rslt_ptr linus_lila_build_expr_tab 000120 CHAR_DESC linus_lila_build_expr_tab 000121 REAL_FD linus_lila_build_expr_tab 000122 CMPX_FD linus_lila_build_expr_tab 000123 i linus_lila_build_expr_tab 000124 j linus_lila_build_expr_tab 000125 source_type linus_lila_build_expr_tab 000126 target_type linus_lila_build_expr_tab 000127 temp_token_key linus_lila_build_expr_tab 000130 temp_stack_key linus_lila_build_expr_tab 000131 tos_key linus_lila_build_expr_tab 000132 bit_len linus_lila_build_expr_tab 000133 cs_len linus_lila_build_expr_tab 000134 icode linus_lila_build_expr_tab 000135 source_length linus_lila_build_expr_tab 000136 target_length linus_lila_build_expr_tab 000137 test linus_lila_build_expr_tab 000140 first_token linus_lila_build_expr_tab 000141 cmpx linus_lila_build_expr_tab 000142 cs_ptr linus_lila_build_expr_tab 000144 lit_ptr linus_lila_build_expr_tab 000146 sk_ptr linus_lila_build_expr_tab 000150 ef_d linus_lila_build_expr_tab 000306 token_data_temp shift_const 000334 constant_desc shift_const 000336 ci_ptr shift_const 000340 repl_ptr shift_const 000342 orc_ptr shift_const 000344 osc_ptr shift_const 000346 source_ptr shift_const 000350 k shift_const 000351 repl_flag shift_const 000352 repl_fac shift_const 000353 repl_len shift_const 000354 ci_len shift_const 000355 BIT_DESC shift_const 000370 i shift_col_spec 000371 j shift_col_spec 000372 rel_name shift_col_spec THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. alloc_char_temp cat_realloc_chars call_ext_out_desc call_ext_out return_mac alloc_auto_adj mpfx2 shorten_stack ext_entry any_to_any_truncate_op_alloc_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. assign_round_ linus_assign_data linus_lila_alloc_lit linus_lila_error linus_lila_get_token linus_lila_scal_fn linus_lila_set_fn mdbm_util_$complex_data_class THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. linus_data_$max_expr_items linus_data_$max_range_items linus_data_$max_set_stack_size linus_data_$stk_depth linus_error_$expr_ovfl linus_error_$first_expr_item linus_error_$inv_expr linus_error_$inv_tup_var linus_error_$op_follow_lp linus_error_$select_list_ovfl linus_error_$token_type_null mrds_data_$max_select_items mrds_data_$max_token_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 25 000252 10 18 000264 220 000265 226 000271 258 000303 260 000310 262 000315 264 000324 265 000326 266 000330 267 000332 268 000334 269 000342 270 000345 271 000347 272 000351 273 000353 274 000371 275 000401 276 000402 277 000416 278 000426 279 000427 280 000434 284 000436 285 000445 286 000446 292 000465 293 000470 295 000502 296 000503 298 000507 301 000514 303 000521 305 000522 307 000523 309 000524 312 000525 314 000526 315 000527 317 000530 319 000531 321 000535 322 000537 324 000540 326 000541 328 000542 331 000563 332 000564 333 000565 334 000566 336 000567 339 000610 340 000611 341 000612 342 000613 344 000614 346 000631 348 000632 352 000653 353 000654 355 000655 357 000656 360 000677 361 000700 363 000701 366 000703 369 000704 374 000730 376 000737 378 000744 380 000746 381 000757 382 000763 385 000776 388 001020 389 001022 790 001023 393 001024 396 001025 399 001047 404 001071 406 001103 407 001104 413 001123 416 001130 418 001131 422 001132 423 001137 425 001151 428 001172 429 001200 430 001202 431 001204 432 001210 433 001212 434 001230 436 001251 438 001263 439 001267 441 001302 443 001310 445 001314 447 001316 449 001320 451 001327 453 001334 455 001336 457 001337 459 001340 460 001341 461 001343 462 001350 463 001352 464 001362 465 001366 466 001377 468 001400 469 001404 471 001411 473 001416 475 001422 477 001425 478 001426 480 001427 483 001430 484 001435 485 001436 486 001444 487 001460 488 001461 490 001462 493 001463 494 001470 495 001471 496 001477 497 001513 498 001514 500 001515 502 001516 503 001517 504 001521 505 001523 507 001524 509 001525 511 001537 512 001541 513 001543 515 001544 517 001545 518 001546 519 001550 521 001551 523 001552 524 001557 525 001561 527 001570 529 001574 530 001602 532 001605 534 001607 536 001611 538 001613 540 001620 544 001622 546 001642 549 001665 551 001666 553 001667 554 001671 555 001676 556 001701 559 001722 561 001723 567 001725 568 001732 569 001735 570 001740 571 001742 572 001747 573 001750 575 001751 577 001752 578 001762 579 001766 580 001772 581 001775 583 001776 586 001777 588 002023 589 002025 593 002046 595 002047 607 002050 625 002056 627 002060 628 002117 629 002120 630 002121 631 002122 633 002140 634 002142 636 002151 637 002156 638 002160 639 002166 640 002206 641 002215 642 002217 643 002221 644 002232 645 002236 646 002274 648 002307 649 002314 651 002322 652 002336 653 002342 654 002344 655 002352 658 002360 659 002366 661 002370 663 002372 664 002374 665 002376 666 002400 667 002404 669 002406 670 002420 671 002422 672 002431 673 002433 674 002443 675 002450 676 002454 677 002457 678 002461 681 002463 683 002476 686 002516 688 002530 690 002545 693 002566 697 002572 698 002576 702 002600 704 002601 711 002602 713 002674 714 002677 716 002714 718 002740 719 002750 723 003043 725 003044 727 003067 728 003071 730 003114 731 003120 733 003136 734 003140 735 003145 737 003171 738 003173 741 003213 744 003234 750 003253 751 003257 754 003304 755 003306 757 003363 758 003364 759 003366 761 003406 762 003423 764 003470 766 003532 768 003551 770 003571 773 003634 778 003653 780 003654 786 003665 788 003714 ----------------------------------------------------------- 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