COMPILATION LISTING OF SEGMENT graphic_compiler_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/18/82 1635.7 mst Thu Options: optimize map 1 /* *********************************************************** 2* * * 3* * * 4* * Copyright, (C) Honeywell Information Systems Inc., 1981 * 5* * * 6* * * 7* *********************************************************** */ 8 9 /* ****************************************************** 10* * * 11* * * 12* * Copyright (c) 1972 by Massachusetts Institute of * 13* * Technology and Honeywell Information Systems, Inc. * 14* * * 15* * * 16* ****************************************************** */ 17 18 graphic_compiler_: gc_: procedure; return; 19 20 /* Originally coded 7/20/73 by Lee J. Scheffler */ 21 /* Major rewrite 07/79 by C. D. Tavares-- added internal array linearization, 22* position roundoff tracking inside arrays, and premapping of objects inside 23* arrays. Also included entrypoint expand_string to replace functionality of 24* make_graphic_array_. */ 25 /* Modified 08/29/80 by CDT to fix bug where if a mode or mapping occurred 26* as last element of array, gc_ locked up and looped. Also modified it not to 27* put out trailing mode/mapping revocations in a top-level array. */ 28 /* Last modified 10/14/80 by CDT to understand about elements with trailing 29* zero coordinates unstored, and to add entrypoint prune_tree. */ 30 31 /* PARAMETERS */ 32 33 dcl (desired_switch pointer, /* I/O switch for output */ 34 display_name char (*), /* name of graphic symbol being displayed */ 35 display_node fixed bin (18), /* number of node being displayed */ 36 err_code fixed bin (35), /* error code */ 37 number_used fixed bin (21), /* number of input_chars used by expand_string */ 38 return_p pointer, /* pointer to returned string in return_string entry point */ 39 return_len fixed bin (21)) parameter; /* length of returned string */ 40 41 42 /* AUTOMATIC */ 43 44 dcl Array_header_chars char (2) aligned, 45 List_header_chars char (2) aligned, 46 Null_node_chars char (5) aligned, 47 abs_move_needed bit (1) aligned, 48 auto_temp_seg_ptr pointer initial (null), 49 char char (1), 50 copy_direct bit (1) aligned, 51 contents_p pointer, 52 datap pointer, 53 done bit (1) aligned, 54 effector_char char (1), 55 fixed_buffer (3) fixed bin, 56 float_buffer (3) float bin, 57 frame_ptr pointer, 58 graphic_output pointer, 59 i fixed bin, 60 ini fixed bin (21) init (1), /* index for input string */ 61 input_string char (*), /* string of MSGC to expand and recompile */ 62 item_environment_wall bit (1) aligned, 63 j fixed bin, 64 max_levels fixed bin, 65 must_put_out bit (1) aligned, 66 n_elements fixed bin, 67 node_no fixed bin (18), 68 node_p pointer, 69 outi fixed bin (21) init (1), /* index for output string */ 70 sym_len fixed bin, 71 sym_node fixed bin (18), 72 sym_p pointer, 73 sym_type fixed bin, 74 temp_length fixed bin (21), 75 temp_matrix (3, 3) float bin, 76 temp_ptr pointer, 77 temp_scaled (3) fixed bin (35, 6), 78 type fixed bin, 79 value_node fixed bin (18), 80 waiting_to_make_array bit (1) aligned automatic initial (""b), 81 /* informs lower levels not to waste time making graphic 82* arrays if someone above them is waiting to make one */ 83 84 wgs_p pointer; /* pointer to the current working graphic seg */ 85 86 dcl 1 control automatic, /* central repository of operation flags */ 87 2 (erase, 88 display, 89 return_string, 90 from_wgs) bit (1), 91 2 output_string_ptr pointer, 92 2 cur_switch pointer; 93 94 dcl 1 position automatic, 95 2 absolute bit (1) aligned, 96 2 desired (3) float bin, 97 2 current (3) fixed bin (35, 6); 98 99 100 /* ENTRIES */ 101 102 dcl get_temp_segment_ ext entry (char (*), pointer, fixed bin (35)), 103 get_system_free_area_ ext entry returns (pointer), 104 hcs_$truncate_seg entry (pointer, fixed bin (18), fixed bin (35)), 105 sub_err_ ext entry options (variable); 106 107 108 109 110 111 112 dcl (graphic_code_util_$encode_spi, 113 graphic_code_util_$encode_dpi, 114 graphic_code_util_$encode_uid) entry (dimension (*) fixed bin, fixed bin, pointer), 115 graphic_code_util_$encode_scl entry (dimension (*) float bin, fixed bin, pointer), 116 (graphic_code_util_$decode_spi, 117 graphic_code_util_$decode_dpi, 118 graphic_code_util_$decode_uid) entry (pointer, fixed bin, dimension (*) fixed bin), 119 (graphic_code_util_$decode_scl, 120 graphic_code_util_$decode_scl_nozero) entry (pointer, fixed bin, dimension (*) float bin); 121 122 dcl graphic_element_length_ entry (char (*), fixed bin (21)) returns (fixed bin), 123 graphic_manipulator_$segp entry (pointer, fixed bin (35)); 124 125 126 /* INTERNAL STATIC */ 127 128 dcl temp_seg_ptr pointer static initial (null); /* pointer to temp seg in which graphic string is compiled */ 129 130 dcl max_string_size fixed bin (21) static, 131 sys_area_p pointer static initial (null); 132 133 dcl tree_ptr pointer static initial (null); 134 135 dcl scaled_zeroes (3) fixed bin (35, 6) internal static initial ((3)0.0); 136 137 138 /* EXTERNAL STATIC */ 139 140 dcl (graphic_error_table_$no_wgs_yet, /* No graphic structure to compile yet */ 141 graphic_error_table_$recursive_structure, /* graphic structure is recursive */ 142 graphic_error_table_$compiler_error, /* no comment necessary */ 143 graphic_error_table_$bad_node, /* bad node type in graphic structure */ 144 graphic_error_table_$not_a_structure, /* malformed MSGC was input */ 145 graphic_error_table_$abs_pos_in_clipping) /* absolute position element within clipping domain */ 146 fixed bin (35) external static; 147 148 dcl (error_table_$out_of_sequence, 149 error_table_$smallarg) fixed bin (35) external static; 150 151 dcl sys_info$max_seg_size fixed bin (35) external; 152 153 154 /* BASED */ 155 156 dcl output_string char (max_string_size) based (output_string_ptr), /* compiled string */ 157 output_string_array (max_string_size) char (1) unaligned based (output_string_ptr), /* overlay of output_string */ 158 input_string_array (max_string_size) char (1) unaligned based (addr (input_string)), /* overlay of input_string */ 159 char_str char (max_string_size) based, 160 fixed_contents (n_elements) fixed bin based (contents_p), 161 float_contents (n_elements) float bin based (contents_p), 162 node_array (1) fixed bin based (addr (node_no)), /* To get around compiler bug */ 163 sys_area area based (sys_area_p), 164 dumaray based fixed bin dimension (1); /* 03/21/75 since symbol table processor doesn't like 165* use of (fixed bin) in array arg position */ 166 167 168 /* The tree is a pseudo stack used to keep track of not only the current position in the graphic tree structure 169* but also the current graphic environment when making arrays out of lists. */ 170 171 dcl 1 tree aligned based (tree_ptr), 172 2 level fixed bin init (1), /* Current list or array level */ 173 2 max_level fixed bin, 174 2 node (0 : max_levels refer (max_level)), /* Nodes in path of current compilation */ 175 3 trace aligned, 176 4 id fixed bin (18) init (0), /* unique id of list node at this level */ 177 4 idx fixed bin init (0), /* index in this list of next level node */ 178 4 max_idx fixed bin init (0), /* number of elements in this item */ 179 4 node_p pointer init (null), /* pointer to node in WGS */ 180 4 environment_wall bit (1), /* input array marker-- should never collapse past this level */ 181 4 output_array_sentinel bit (1), /* this level marks the boundary of the output array */ 182 4 precollapsed bit (1), /* the level above this has been collapsed but not popped */ 183 3 environment aligned, 184 4 intensity fixed bin, 185 4 linetype fixed bin, 186 4 sensitivity fixed bin, 187 4 blinking fixed bin, 188 4 color (3) fixed bin, 189 4 matrix (3, 3) float bin, /* linear transformation matrix for scaling and rotation */ 190 4 clipping_boundaries (3, 2) float bin, /* current boundaries of clipping effector (not used) */ 191 4 active aligned, 192 5 (transformation, clipping) bit (1), 193 3 this_level aligned, 194 4 scaling (3) float bin, 195 4 clipping (3, 2) float bin; 196 197 dcl 1 tree_frame aligned based (frame_ptr) like tree.node; 198 199 200 /* BUILTINS AND CONDITIONS */ 201 202 dcl (addr, cosd, fixed, float, length, mod, null, round, rtrim, sind, string, substr, sum, unspec) builtin; 203 204 dcl (cleanup, underflow) condition; 205 206 dcl subscriptrange condition; /* GET RID OF THIS BEFORE INSTALLATION */ 207 1 1 /* Begin include file ... graphic_comp_specs.incl.pl1 */ 1 2 1 3 /* Table of node lengths, etc., for compilation of graphic structures */ 1 4 1 5 dcl structural_effector_codes (0:35) char (1) unaligned /* refers to struc in graphic_code_dcl.incl.pl1 */ 1 6 defined (Graphic_Code_Structure.Setposition_char); 1 7 1 8 1 9 dcl no_args (0:31) fixed bin static options (constant) /* Number of arguments for each type of effector */ 1 10 initial /* Zero means an indeterminate but computable number */ 1 11 (3 /* setpos */, 3 /* setpt */, 3 /* vector */, 3 /* shift */, 1 12 3 /* point */, (3) -1 /* ILLEGAL */, 1 13 3 /* scale */, 3 /* rotate */, 6 /* clip */, (5) -1 /* ILLEGAL */, 1 14 1 /* intens */, 1 /* linetype */, 1 /* blink */, 1 /* sensitivity */, 1 15 3 /* color */, (3) -1 /* ILLEGAL */, 1 16 0 /* symbol */, 0 /* text */, 0 /* datablk */, (5) -0 /* ILLEGAL */); 1 17 1 18 1 19 dcl arg_types (0:31) fixed bin static options (constant) init /* format of character string for each effector */ 1 20 (3 /* sps SCL */, 3 /* spt SCL */, 3 /* vec SCL */, 3 /* sft SCL */, 1 21 3 /* pnt SCL */, (3) 0 /* ILLEGAL */, 1 22 3 /* scl SCL */, 2 /* rot DPI */, 3 /* clip SCL */, (5) 0 /* ILLEGAL */, 1 23 1 /* int SPI */, 1 /* lin SPI */, 1 /* blk SPI */, 1 /* sns SPI */, 1 24 1 /* color SPI */, (3) 0 /* ILLEGAL */, 1 25 5 /* sym T */, 5 /* text T */, 6 /* data D */, (5) 0 /* ILLEGAL */); 1 26 1 27 1 28 dcl Illegal_char char (1) aligned static init ("U") options (constant); /* Illegal character, "\525" */ 1 29 1 30 1 31 /* Effector argument format types */ 1 32 1 33 dcl 1 arg_formats aligned internal static options (constant), 1 34 2 SPI fixed bin (3) init (1), /* single precision (6 bit) integer */ 1 35 2 DPI fixed bin (3) init (2), /* double precision (12 bit) integer */ 1 36 2 SCL fixed bin (3) init (3), /* scaled fixed point (11,6) binary */ 1 37 2 UI fixed bin (3) init (4), /* unique id (18 bit) integer */ 1 38 2 T fixed bin (3) init (5), /* text (character string) */ 1 39 2 D fixed bin (3) init (6); /* bit string */ 1 40 1 41 1 42 /* Numbers of characters representing an argument, by type */ 1 43 1 44 dcl arg_lengths (6) fixed bin internal static options (constant) init 1 45 (1 /* SPI */, 2 /* DPI */, 3 /* SCL */, 3 /* UI */, 0 /* T */, 0 /* D */); 1 46 1 47 dcl (SPI_arg_length initial (1), 1 48 DPI_arg_length initial (2), 1 49 SCL_arg_length initial (3), 1 50 UI_arg_length initial (3)) fixed bin static options (constant); 1 51 1 52 /* This include file includes graphic_code_dcl.incl.pl1, appearing below. */ 1 53 2 1 /* -------- BEGIN include file graphic_code_dcl.incl.pl1 ---------- */ 2 2 2 3 /* The following structure maintains a nonobvious positional relationship 2 4* with respect to the LSM block types as defined by the graphic compiler. 2 5* It therefore has an intimiate and delicate relationship with certain tables 2 6* defined in graphic_comp_specs.incl.pl1. */ 2 7 2 8 dcl 1 Graphic_Code_Structure aligned static options (constant), 2 9 2 Dynamic_and_structural_effectors aligned, 2 10 3 (Pause_char initial ("$"), 2 11 Reference_char initial ("%"), 2 12 Increment_char initial ("&"), 2 13 Alter_char initial ("'"), 2 14 Node_begin_char initial ("("), 2 15 Node_end_char initial (")"), 2 16 Control_char initial ("*"), 2 17 Display_char initial ("+"), 2 18 Query_char initial (","), 2 19 Erase_char initial ("-"), 2 20 Synchronize_char initial ("."), 2 21 Delete_char initial ("/")) char (1) unaligned, 2 22 2 Graphic_effectors aligned, 2 23 3 (Setposition_char initial ("0"), 2 24 Setpoint_char initial ("1"), 2 25 Vector_char initial ("2"), 2 26 Shift_char initial ("3"), 2 27 Point_char initial ("4")) char (1) unaligned, 2 28 3 Illegal_pad char (3) unaligned initial ((3)"U"), 2 29 2 Mapping_effectors aligned, 2 30 3 (Scaling_char initial ("5"), 2 31 Rotation_char initial ("6"), 2 32 Clipping_char initial ("7")) char (1) unaligned, 2 33 3 Illegal_pad char (5) unaligned initial ((5)"U"), 2 34 2 Mode_effectors aligned, 2 35 3 (Intensity_char initial ("8"), 2 36 Linetype_char initial ("9"), 2 37 Sensitivity_char initial (";"), 2 38 Blinking_char initial (":"), 2 39 Color_char initial ("<")) char (1) unaligned, 2 40 3 Illegal_pad char (3) unaligned initial ((3)"U"), 2 41 2 Special_effectors aligned, 2 42 3 (Symbol_char initial ("="), 2 43 Text_char initial (">"), 2 44 Datablock_char initial ("?")) char (1) unaligned, 2 45 3 Illegal_pad char (9) unaligned initial ((9)"U"); 2 46 2 47 dcl 1 Graphic_Defaults aligned static options (constant), 2 48 2 Mode_defaults aligned, 2 49 3 Intensity_default fixed bin initial (7), 2 50 3 Linetype_default fixed bin initial (0), 2 51 3 Blinking_default fixed bin initial (0), 2 52 3 Sensitivity_default fixed bin initial (0), 2 53 3 Color_default (3) fixed bin initial ((3)16), 2 54 2 Mapping_defaults aligned, 2 55 3 Scaling_default (3) float bin initial ((3)1e0), 2 56 3 Rotation_default (3) fixed bin initial ((3)0), 2 57 3 Clipping_default (3, 2) fixed bin initial ((3) (-2048, 2048)), 2 58 2 Identity_matrix (3, 3) float bin initial (1e0, (3)0e0, 1e0, (3)0e0, 1e0); 2 59 2 60 dcl Graphic_Element_Lengths (32 : 63) aligned static options (constant) initial 2 61 ((4)-1, /* not used */ 2 62 1, /* pause */ 4, /* reference */ 9, /* increment */ 9, /* alter */ 2 63 5, /* node begin */ 1, /* node end */ 4, /* control */ 4, /* display */ 2 64 3, /* query */ 1, /* erase */ 1, /* synchronize */ 4, /* delete */ 2 65 10, /* setposition */ 10, /* setpoint */ 10, /* vector */ 10, /* shift */ 2 66 10, /* point */ 10, /* scaling */ 7, /* rotation */ 13, /* clipping */ 2 67 2, /* intensity */ 2, /* line type */ 2, /* blinking */ 2, /* sensitivity */ 2 68 4, /* color */ 0, /* symbol */ 0, /* text */ 0 /* data */); 2 69 2 70 dcl zero_node_id char (3) static initial ("@@@") options (constant); 2 71 2 72 dcl request_for_status char (1) static aligned initial ("") options (constant); 2 73 2 74 dcl (List_char initial ("@"), 2 75 Array_char initial ("A")) char (1) aligned static options (constant); 2 76 2 77 /* --------- END include file graphic_code_dcl.incl.pl1 ----------- */ 1 54 1 55 1 56 /* End include file ... graphic_comp_specs.incl.pl1 */ 208 209 3 1 /* --------------- BEGIN include file graphic_etypes.incl.pl1 --------------- */ 3 2 3 3 /* Types of position, mode, and other effectors for the 3 4* Multics General Graphic System */ 3 5 3 6 3 7 /* Null code */ 3 8 3 9 dcl (Null initial (-1), 3 10 3 11 /* Position codes */ 3 12 3 13 Setposition initial (0), 3 14 Setpoint initial (1), 3 15 Vector initial (2), 3 16 Shift initial (3), 3 17 Point initial (4), 3 18 3 19 /* Mode codes, with values where appropriate */ 3 20 3 21 Scaling initial (8), 3 22 Rotation initial (9), 3 23 Clipping initial (10), 3 24 3 25 Intensity initial (16), 3 26 Full_intensity initial (7), 3 27 Half_intensity initial (3), 3 28 Invisible initial (0), 3 29 3 30 Linetype initial (17), 3 31 Solid initial (0), 3 32 Dashed initial (1), 3 33 Dotted initial (2), 3 34 Dash_dotted initial (3), 3 35 Long_dashed initial (4), 3 36 3 37 Sensitivity initial (18), 3 38 Sensitive initial (1), 3 39 Insensitive initial (0), 3 40 3 41 Blink initial (19), 3 42 Steady initial (0), 3 43 Blinking initial (1), 3 44 3 45 Color initial (20), 3 46 3 47 Symbol initial (24), 3 48 3 49 /* Text code, with legal alignments */ 3 50 3 51 Text initial (25), 3 52 Upper_left initial (1), 3 53 Upper_center initial (2), 3 54 Upper_right initial (3), 3 55 Left initial (4), 3 56 Center initial (5), 3 57 Right initial (6), 3 58 Lower_left initial (7), 3 59 Lower_center initial (8), 3 60 Lower_right initial (9), 3 61 3 62 /* Datablock code */ 3 63 3 64 Datablock initial (26), 3 65 3 66 /* Structural effector codes */ 3 67 3 68 List initial (32), 3 69 Array initial (33), 3 70 3 71 /* Merge codes for gm_$get_struc and gm_$put_struc */ 3 72 3 73 On_dup_error initial (0), /* allow no name duplications */ 3 74 On_dup_source initial (1), /* on name dup, force move (use source copy) */ 3 75 On_dup_target_then_nulls initial (2), /* on name dup, use target copy, for nondup symbols create null ones */ 3 76 On_dup_target_then_source initial (3), /* on name dup, use target copy, for nondup symbols, use source copy */ 3 77 3 78 /* Device codes for graphic input devices */ 3 79 3 80 Terminal_program initial (0), 3 81 Keyboard initial (1), 3 82 Mouse initial (2), 3 83 Joystick initial (3), 3 84 Tablet_and_pen initial (4), 3 85 Light_pen initial (5), 3 86 Trackball initial (6), 3 87 Any_device initial (63)) /* 63 is equivalent to -1 in SPI */ 3 88 3 89 fixed bin internal static options (constant); 3 90 3 91 /* ---------------- END include file graphic_etypes.incl.pl1 ---------------- */ 210 211 4 1 /* Begin include file . . . graphic_templates.incl.pl1 */ 4 2 4 3 dcl Symboltable init (34) fixed bin internal static options (constant); 4 4 4 5 dcl effector_length (0:31) fixed bin static options (constant) initial 4 6 (4, 4, 4, 4, 4, (3) 0, 4 7 4, 4, 7, (5) 0, 4 8 2, 2, 2, 2, 4, (3) 0, /* numbers of words taken up by each flavor effector */ 4 9 (8) 0); 4 10 4 11 4 12 /* Structure of graphic effectors */ 4 13 4 14 dcl 1 effector based aligned, 4 15 2 effector_code fixed bin (6), 4 16 2 data (65535) fixed bin (35); 4 17 4 18 dcl 1 floating_effector based aligned, 4 19 2 effector_code fixed bin (6), 4 20 2 data (65535) float bin (27); 4 21 4 22 dcl 1 position_effector based aligned, 4 23 2 effector_code fixed bin (6), 4 24 2 xpos float bin, 4 25 2 ypos float bin, 4 26 2 zpos float bin; 4 27 4 28 dcl 1 scale_effector based aligned, 4 29 2 effector_code fixed bin (6), 4 30 2 xscale float bin, 4 31 2 yscale float bin, 4 32 2 zscale float bin; 4 33 4 34 dcl 1 rotate_effector based aligned, 4 35 2 effector_code fixed bin (6), 4 36 2 xangle float bin, 4 37 2 yangle float bin, 4 38 2 zangle float bin; 4 39 4 40 dcl 1 clipping_effector based aligned, 4 41 2 effector_code fixed bin (6), 4 42 2 delta_left float bin, 4 43 2 delta_right float bin, 4 44 2 delta_bottom float bin, 4 45 2 delta_top float bin, 4 46 2 delta_back float bin, 4 47 2 delta_front float bin; 4 48 4 49 dcl 1 modal_effector based aligned, 4 50 2 effector_code fixed bin (6), 4 51 2 mode fixed bin; 4 52 4 53 dcl 1 color_effector based aligned, 4 54 2 effector_code fixed bin (6), 4 55 2 red_intensity fixed bin, 4 56 2 green_intensity fixed bin, 4 57 2 blue_intensity fixed bin; 4 58 4 59 dcl 1 text_effector based aligned, 4 60 2 alignment fixed bin (8) unaligned, 4 61 2 text char (262140) unaligned; 4 62 4 63 /* End include file ... graphic_templates.incl.pl1 */ 212 213 5 1 /* Begin include file . . . lsm_formats.incl.pl1 */ 5 2 5 3 /* CONSTANTS */ 5 4 5 5 dcl (LSM_version_7 initial (7), /* current version, root is always symtab */ 5 6 LSM_version_6 initial (6)) /* root wasn't automatically symtab */ 5 7 fixed bin static options (constant); 5 8 5 9 dcl 1 lsm_constants aligned static options (constant), 5 10 2 n_types fixed bin initial (9), 5 11 2 types, 5 12 3 indirect_type initial (1), 5 13 3 fixed_type initial (2), 5 14 3 float_type initial (3), 5 15 3 bit_type initial (4), 5 16 3 char_type initial (5), 5 17 3 symtab_type initial (6), 5 18 3 symbol_type initial (7), 5 19 3 list_type initial (8), 5 20 3 array_type initial (9), 5 21 2 data_length_factors (9) initial (1, 1, 1, 36, 4, 1, 1, 1, 1), 5 22 2 max_allocation fixed bin initial (4095), 5 23 2 initial_component_slots fixed bin initial (8); 5 24 5 25 dcl lsm_segptr pointer; 5 26 5 27 dcl 1 lsm aligned based (lsm_segptr), /* declaration of head of lsm_ segment */ 5 28 2 version fixed bin, /* number of lsm_ version that created this seg */ 5 29 2 free fixed bin (18), /* word number of first free word in seg */ 5 30 2 root_symtab fixed bin (18), /* node number of the root symbol table */ 5 31 2 lock bit (36) aligned, 5 32 2 component_slots fixed bin, 5 33 2 components fixed bin, 5 34 2 pad (26) fixed bin (18), 5 35 2 component_ptrs (lsm_constants.initial_component_slots refer (lsm.component_slots)) pointer unaligned; 5 36 5 37 5 38 /* Formats of different node types used by lsm_ */ 5 39 5 40 dcl node_ptr pointer; 5 41 5 42 dcl 1 header aligned based (node_ptr), /* Used in all formats below */ 5 43 2 type fixed bin (6) unsigned unaligned, /* type of node */ 5 44 2 allocated_len fixed bin (12) unsigned unaligned, /* allocated length of data space */ 5 45 2 data_len fixed bin (18) unsigned unaligned; /* current length of data in block */ 5 46 /* (in appropriate units) */ 5 47 5 48 dcl 1 any_node aligned based (node_ptr), /* general node description */ 5 49 2 header like header aligned, 5 50 2 data_space (0 refer (any_node.allocated_len)) bit (36) aligned; 5 51 5 52 dcl 1 indirect_node aligned based (node_ptr), /* internal to lsm_ */ 5 53 2 header like header, 5 54 2 new_node fixed bin (18); /* numberof reallocated node */ 5 55 5 56 dcl 1 fixed_node aligned based (node_ptr), /* array of fixed bin (35) */ 5 57 2 header like header, 5 58 2 element (0 refer (fixed_node.data_len)) fixed bin (35); /* array of values */ 5 59 5 60 dcl 1 float_node aligned based (node_ptr), /* array of float binary (27) */ 5 61 2 header like header, 5 62 2 element (0 refer (float_node.data_len)) float bin (27); 5 63 5 64 dcl 1 bit_node aligned based (node_ptr), /* string of bits */ 5 65 2 header like header, 5 66 2 string bit (0 refer (bit_node.data_len)); /* bit string of max length */ 5 67 5 68 dcl 1 char_node aligned based (node_ptr), /* string of characters */ 5 69 2 header like header, 5 70 2 string char (0 refer (char_node.data_len)) unaligned; /* character string of max length */ 5 71 5 72 dcl 1 symtab_node aligned based (node_ptr), /* symbol table node */ 5 73 2 header like header, 5 74 2 bucket_root (0 : 1 refer (symtab_node.data_len)) fixed bin (18); 5 75 /* actually, it is (0 : data_len - 1), but there's no way to do */ 5 76 /* this with a refer option, and it's invalid not to use refer */ 5 77 5 78 dcl 1 symbol_node aligned based (node_ptr), /* symbol node */ 5 79 2 header like header, 5 80 2 name_node fixed bin (18), /* number of character string node containing symbol name */ 5 81 2 value_node fixed bin (18), /* number of node that is the "value" of this symbol */ 5 82 2 next_node fixed bin (18); /* number of next symbol node in this bucket chain */ 5 83 /* =0 if this is last node o chain */ 5 84 5 85 dcl 1 list_node aligned based (node_ptr), /* non-terminal list node */ 5 86 2 header like header, 5 87 2 node (0 refer (list_node.data_len)) fixed bin (18); /* numbers of nodes comprising this list */ 5 88 5 89 dcl 1 array_node aligned based (node_ptr), /* non-terminal list with terminal properties */ 5 90 2 header like header, 5 91 2 node (0 refer (array_node.data_len)) fixed bin (18); /* numbers of nodes comprising this array */ 5 92 5 93 5 94 /* End include file . . . lsm_formats.incl.pl1 */ 214 215 6 1 /* --------------- BEGIN include file iox_dcls.incl.pl1 --------------- */ 6 2 6 3 /* Written 05/04/78 by C. D. Tavares */ 6 4 /* Fixed declaration of iox_$find_iocb_n 05/07/80 by R. Holmstedt */ 6 5 6 6 dcl iox_$attach_name entry (char (*), pointer, char (*), pointer, fixed bin (35)), 6 7 iox_$attach_ptr entry (pointer, char (*), pointer, fixed bin (35)), 6 8 iox_$close entry (pointer, fixed bin (35)), 6 9 iox_$control entry (pointer, char (*), pointer, fixed bin (35)), 6 10 iox_$delete_record entry (pointer, fixed bin (35)), 6 11 iox_$destroy_iocb entry (pointer, fixed bin (35)), 6 12 iox_$detach_iocb entry (pointer, fixed bin (35)), 6 13 iox_$err_not_attached entry options (variable), 6 14 iox_$err_not_closed entry options (variable), 6 15 iox_$err_no_operation entry options (variable), 6 16 iox_$err_not_open entry options (variable), 6 17 iox_$find_iocb entry (char (*), pointer, fixed bin (35)), 6 18 iox_$find_iocb_n entry (fixed bin, ptr, fixed bin(35)), 6 19 iox_$get_chars entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 6 20 iox_$get_line entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 6 21 iox_$look_iocb entry (char (*), pointer, fixed bin (35)), 6 22 iox_$modes entry (pointer, char (*), char (*), fixed bin (35)), 6 23 iox_$move_attach entry (pointer, pointer, fixed bin (35)), 6 24 iox_$open entry (pointer, fixed bin, bit (1) aligned, fixed bin (35)), 6 25 iox_$position entry (pointer, fixed bin, fixed bin (21), fixed bin (35)), 6 26 iox_$propagate entry (pointer), 6 27 iox_$put_chars entry (pointer, pointer, fixed bin (21), fixed bin (35)), 6 28 iox_$read_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 6 29 iox_$read_length entry (pointer, fixed bin (21), fixed bin (35)), 6 30 iox_$read_record entry (pointer, pointer, fixed bin (21), fixed bin (21), fixed bin (35)), 6 31 iox_$rewrite_record entry (pointer, pointer, fixed bin (21), fixed bin (35)), 6 32 iox_$seek_key entry (pointer, char (256) varying, fixed bin (21), fixed bin (35)), 6 33 iox_$write_record entry (pointer, pointer, fixed bin (21), fixed bin (35)) ; 6 34 6 35 dcl (iox_$user_output, 6 36 iox_$user_input, 6 37 iox_$user_io, 6 38 iox_$error_output) external static pointer; 6 39 6 40 /* ---------------- END include file iox_dcls.incl.pl1 ---------------- */ 216 217 7 1 /* --------------- BEGIN include file lsm_entry_dcls.incl.pl1 --------------- */ 7 2 7 3 dcl lsm_$get_blk entry (ptr, fixed bin (18), fixed bin, fixed bin, ptr, fixed bin (35)), 7 4 lsm_$make_blk entry (ptr, fixed bin (18), fixed bin, fixed bin, ptr, fixed bin (35)), 7 5 lsm_$mk_char entry (ptr, char (*), fixed bin (18)), 7 6 lsm_$replace_blk entry (ptr, fixed bin (18), fixed bin (18), fixed bin (35)), 7 7 lsm_$replicate entry (ptr, fixed bin (18), fixed bin (18), fixed bin (35)), 7 8 lsm_$set_blk entry (ptr, fixed bin (18), fixed bin, fixed bin, ptr, fixed bin (35)); 7 9 7 10 dcl lsm_fs_$compact entry (ptr, fixed bin (18), fixed bin (35)), 7 11 lsm_fs_$free entry (ptr, fixed bin (35)), 7 12 lsm_fs_$init entry (ptr, fixed bin (35)), 7 13 lsm_fs_$init_seg entry (ptr, char (*), char (*), fixed bin, fixed bin (35)), 7 14 lsm_fs_$merge_symbol entry (ptr, ptr, fixed bin (18), bit (1), fixed bin, fixed bin (35)), 7 15 lsm_fs_$move_struc entry (ptr, ptr, fixed bin (18), fixed bin (18), fixed bin (35)), 7 16 lsm_fs_$pull entry (ptr, char (*), char (*), fixed bin (35)), 7 17 lsm_fs_$push entry (ptr, char (*), char (*), fixed bin (35)); 7 18 7 19 dcl lsm_sym_$find_table entry (pointer, fixed bin (18), fixed bin (35)), 7 20 lsm_sym_$sym_list entry (ptr, (*) fixed bin (18), fixed bin, fixed bin (35)), 7 21 lsm_sym_$symk entry (ptr, fixed bin, char (*), fixed bin (18), fixed bin (18), fixed bin (35)), 7 22 lsm_sym_$symn entry (ptr, fixed bin, fixed bin (18), fixed bin (18), fixed bin (18), fixed bin (35)); 7 23 7 24 dcl (Find_symbol initial (0), /* op codes for lsm_sym_$symk and lsm_sym_$symn */ 7 25 Find_or_create_symbol initial (1), 7 26 Create_symbol initial (2), 7 27 Delete_symbol initial (3)) fixed bin static options (constant); 7 28 7 29 dcl (Find_seg initial (0), /* Opcodes for lsm_fs_$init_seg */ 7 30 Create_seg initial (1), 7 31 Clear_seg initial (2)) fixed bin static options (constant); 7 32 7 33 /* ---------------- END include file lsm_entry_dcls.incl.pl1 ---------------- */ 218 219 220 /* ------------------------------------------------------------------------- */ 221 222 /* These entries display the substructure subordinate to a given node */ 223 224 225 /* This is the normal display entry point - it erases the screen first */ 226 227 display: d: entry (display_node, err_code); 228 229 control.erase, 230 control.display = "1"b; 231 control.return_string = "0"b; 232 control.cur_switch = null; 233 go to node_common; 234 235 display_switch: d_switch: entry (display_node, err_code, desired_switch); 236 237 control.erase, 238 control.display = "1"b; 239 control.return_string = "0"b; 240 control.cur_switch = desired_switch; 241 goto node_common; 242 243 244 /* These entry points do not erase the screen first */ 245 246 display_append: da: entry (display_node, err_code); 247 248 control.display = "1"b; 249 control.erase, 250 control.return_string = "0"b; 251 control.cur_switch = null; 252 go to node_common; 253 254 display_append_switch: da_switch: entry (display_node, err_code, desired_switch); 255 256 control.display = "1"b; 257 control.erase, 258 control.return_string = "0"b; 259 control.cur_switch = desired_switch; 260 goto node_common; 261 262 263 /* These entry points load the substructure subordinate to a node into the 264* terminal processor memory, but do not display it */ 265 266 load: l: entry (display_node, err_code); 267 268 control.display, 269 control.erase, 270 control.return_string = "0"b; 271 control.cur_switch = null; 272 goto node_common; 273 274 load_switch: l_switch: entry (display_node, err_code, desired_switch); 275 276 control.display, 277 control.erase, 278 control.return_string = "0"b; 279 control.cur_switch = desired_switch; 280 goto node_common; 281 282 283 /* Return the compiled string corresponding to the node */ 284 285 return_string: rs: entry (display_node, return_p, return_len, err_code); 286 control.display, 287 control.erase = "0"b; 288 control.return_string = "1"b; 289 go to node_common; 290 291 node_common: /* Common code for compilations starting with a node number */ 292 293 control.from_wgs = "1"b; 294 call initialize; /* Get ptr to current working graphic seg */ 295 296 on cleanup call cleaner_up; 297 298 call compile_node (display_node); /* Compile and dispatch it */ 299 300 call cleaner_up; 301 return; 302 303 /* These entries display the structure subordinate to a graphic symbol, given 304* its name. See comments on above similar entrypoints for explanation. */ 305 306 307 display_name: dn: entry (display_name, err_code); 308 309 control.erase, 310 control.display = "1"b; 311 control.return_string = "0"b; 312 control.cur_switch = null; 313 go to name_common; 314 315 display_name_switch: dn_switch: entry (display_name, err_code, desired_switch); 316 317 control.erase, 318 control.display = "1"b; 319 control.return_string = "0"b; 320 control.cur_switch = desired_switch; 321 goto name_common; 322 323 display_name_append: dna: entry (display_name, err_code); 324 325 control.display = "1"b; 326 control.erase, 327 control.return_string = "0"b; 328 control.cur_switch = null; 329 go to name_common; 330 331 display_name_append_switch: dna_switch: entry (display_name, err_code, desired_switch); 332 333 control.display = "1"b; 334 control.erase, 335 control.return_string = "0"b; 336 control.cur_switch = desired_switch; 337 goto name_common; 338 339 load_name: ln: entry (display_name, err_code); 340 341 control.display, 342 control.erase, 343 control.return_string = "0"b; 344 control.cur_switch = null; 345 goto name_common; 346 347 load_name_switch: ln_switch: entry (display_name, err_code, desired_switch); 348 349 control.display, 350 control.erase, 351 control.return_string = "0"b; 352 control.cur_switch = desired_switch; 353 goto name_common; 354 355 name_common: /* Common code for compilations starting with a symbol name */ 356 357 control.from_wgs = "1"b; 358 call initialize; 359 360 call lsm_sym_$symk (wgs_p, Find_symbol, display_name, sym_node, value_node, err_code); 361 if err_code ^= 0 then return; 362 363 on cleanup call cleaner_up; 364 365 call compile_node (value_node); 366 367 call cleaner_up; 368 369 return; 370 371 /* This entrypoint uses a graphic structure supplied as a string of MSGC as 372* opposed to a graphic structure in the WGS. It implements the "expand" 373* function found in GDT's. */ 374 375 expand_string: entry (input_string, number_used, return_p, return_len, err_code); 376 377 control.display, 378 control.erase, 379 control.from_wgs = "0"b; 380 control.return_string = "1"b; 381 control.cur_switch = null; 382 383 call initialize; 384 385 call compile_node (0); 386 387 number_used = ini - 1; 388 389 return; 390 391 392 /* Arbitrary entrypoints and exitpoints */ 393 394 /* Entry to return information about where in a graphic structure the last error occurred, 395* without having to know the format of the tree. */ 396 397 error_path: entry (top_level_node, struc_depth, index_array, err_code); 398 399 dcl (top_level_node fixed bin (18), 400 struc_depth fixed bin, 401 index_array fixed bin dimension (*)) parameter; 402 403 if tree_ptr = null then do; 404 err_code = error_table_$out_of_sequence; 405 return; 406 end; 407 408 struc_depth = tree.level - 1; /* Any leftover index on the last level is not interesting */ 409 top_level_node = tree.node (1).id; 410 411 if struc_depth > dim (index_array, 1) then do; 412 err_code = error_table_$smallarg; 413 return; 414 end; 415 416 do i = 1 to struc_depth; 417 index_array (lbound (index_array, 1) + i - 1) = tree.node (i).idx; 418 end; 419 420 err_code = 0; 421 return; 422 423 424 /* Entrypoint to reset the tree to minimal size. */ 425 426 prune_tree: entry (err_code); 427 428 err_code = 0; 429 if tree_ptr = null then return; 430 431 free tree in (sys_area); 432 tree_ptr = null; 433 return; 434 435 436 /* Various matrix-hacking entrypoints, since we have engulfed the old graphic_matrix_util_ within ourselves */ 437 438 make_matrix: entry (arg_rots, arg_scls, arg_matrix); 439 440 dcl arg_rots (3) fixed bin parameter, 441 arg_scls (3) float bin parameter, 442 arg_matrix (3, 3) float bin parameter; 443 444 call make_matrix (arg_rots, arg_scls, arg_matrix); 445 return; 446 447 448 449 multiply_3x3_x_3x3: entry (arg_lmatrix, arg_rmatrix, arg_matrix); 450 451 dcl (arg_lmatrix, arg_rmatrix) (3, 3) float bin parameter; 452 453 call multiply_3x3_x_3x3 (arg_lmatrix, arg_rmatrix, arg_matrix); 454 return; 455 456 multiply_3x3_x_1x3: entry (arg_lmatrix, arg_rvector, arg_vector); 457 458 dcl (arg_rvector, arg_vector) (3) float bin parameter; 459 460 call multiply_3x3_x_1x3 (arg_lmatrix, arg_rvector, arg_vector); 461 return; 462 463 sub_err_caller: proc (excuse); 464 465 dcl excuse char (*); 466 467 call sub_err_ (graphic_error_table_$compiler_error, "graphic_compiler_", "h", null, "", 468 "^a^/Please contact system maintenance personnel.", excuse); 469 goto non_local_return; 470 end sub_err_caller; 471 472 recursive_structure: 473 err_code = graphic_error_table_$recursive_structure; 474 goto non_local_return; 475 476 bad_type: err_code = graphic_error_table_$bad_node; 477 goto non_local_return; 478 479 not_valid_msgc: 480 err_code = graphic_error_table_$not_a_structure; 481 goto non_local_return; 482 483 non_local_return: 484 call cleaner_up; 485 return; 486 487 cleaner_up: proc; 488 489 if auto_temp_seg_ptr ^= null then 490 call hcs_$truncate_seg (auto_temp_seg_ptr, 0, 0); 491 return; 492 end cleaner_up; 493 494 compile_node: procedure (node_no_arg); 495 496 /* Internal procedure compiles the node and dispatches it */ 497 498 dcl node_no_arg fixed bin (18) parameter; 499 500 501 err_code = 0; 502 503 if control.return_string then output_string_ptr = return_p; 504 else output_string_ptr = auto_temp_seg_ptr; 505 506 List_header_chars = Node_begin_char || List_char; 507 Array_header_chars = Node_begin_char || Array_char; 508 Null_node_chars = List_header_chars || zero_node_id; 509 510 if control.erase then do; 511 substr (output_string, 1, length (Erase_char)) = Erase_char; 512 outi = length (Erase_char) + 1; /* Compilation starts at second char */ 513 end; 514 else outi = 1; 515 516 517 /* Here begins the actual compilation of the list structure */ 518 519 unspec (tree.node) = ""b; /* clear out the tree */ 520 521 tree.level = 0; 522 523 /* Initialize the base of the tree */ 524 525 frame_ptr = addr (tree.node (0)); 526 tree_frame.id, 527 tree_frame.idx, 528 tree_frame.max_idx = 0; 529 tree_frame.precollapsed = ""b; 530 tree_frame.environment_wall = "0"b; 531 tree_frame.environment.matrix = Identity_matrix; 532 tree_frame.environment.clipping_boundaries, 533 tree_frame.this_level.clipping = Clipping_default; 534 tree_frame.this_level.scaling = Scaling_default; 535 tree_frame.environment.intensity = Intensity_default; 536 tree_frame.environment.linetype = Linetype_default; 537 tree_frame.environment.sensitivity = Sensitivity_default; 538 tree_frame.environment.color = Color_default; 539 tree_frame.active = ""b; 540 541 if control.from_wgs then 542 node_no = node_no_arg; 543 544 else do; 545 if substr (input_string, 1, length (List_header_chars)) = List_header_chars then 546 ini = length (List_header_chars) + 1; 547 else if substr (input_string, 1, length (Array_header_chars)) = Array_header_chars then 548 ini = length (Array_header_chars) + 1; 549 else goto not_valid_msgc; 550 551 substr (output_string, outi, length (Array_header_chars)) = Array_header_chars; 552 outi = outi + length (Array_header_chars); 553 substr (output_string, outi, UI_arg_length) = substr (input_string, ini, UI_arg_length); 554 outi = outi + UI_arg_length; 555 556 call graphic_code_util_$decode_uid (addr (input_string_array (ini)), 1, node_array); 557 ini = ini + UI_arg_length; 558 end; 559 560 if ^control.from_wgs then do; 561 waiting_to_make_array = "1"b; 562 position.current, 563 position.desired = 0; 564 position.absolute = "0"b; 565 end; 566 567 call push_level (node_no, waiting_to_make_array); 568 569 tree_frame.output_array_sentinel = waiting_to_make_array; 570 571 572 /* Walk the tree, compiling each node and keeping track of the level and environment. */ 573 574 do while (tree.level > 0); 575 576 node_no = tree_frame.id; 577 578 /* Trace the structure, popping old detritus as necessary, until we get to a 579* new element to examine. */ 580 581 if control.from_wgs then 582 do while ((tree_frame.idx ^= 0) & (tree.level > 0)); /* find ONE node */ 583 584 if tree_frame.idx > tree_frame.max_idx then /* we're finished with this list */ 585 call pop_level; 586 587 else do; 588 node_no = tree_frame.node_p -> list_node.node (tree_frame.idx); 589 call push_level (node_no, "0"b); /* we don't know if it's an array yet */ 590 /* but if so the proper indicator will be set later, not now */ 591 end; 592 end; 593 594 else do; /* interpreting input MSGC */ 595 done = "0"b; 596 do while (^done); 597 if substr (input_string, ini, length (Node_end_char)) = Node_end_char then do; 598 ini = ini + length (Node_end_char); 599 call pop_level; 600 end; 601 602 else if substr (input_string, ini, 1) = Node_begin_char then do; 603 ini = ini + length (Node_begin_char); 604 item_environment_wall = (substr (input_string, ini, 1) = Array_char); 605 606 ini = ini + length (List_char); 607 call graphic_code_util_$decode_uid (addr (input_string_array (ini)), 1, node_array); 608 ini = ini + UI_arg_length; 609 610 call push_level (node_no, item_environment_wall); 611 end; 612 613 else done = "1"b; 614 615 if tree.level <= 0 then done = "1"b; 616 end; 617 end; 618 619 if tree.level <= 0 then goto Loop_end; /* done, drop out of loop */ 620 621 /* Now compile the new element we have just found. */ 622 623 if tree_frame.idx = 0 then tree_frame.idx = 1; 624 /* even terminal elements count */ 625 626 if node_no = 0 then 627 call compile_null_element; 628 629 else do; /* must actually compile this node */ 630 if control.from_wgs then 631 call find_node (node_no, type, node_ptr, contents_p, copy_direct, n_elements); 632 else call decode_effector (ini, type, node_ptr, contents_p, copy_direct, n_elements); 633 634 effector_char = structural_effector_codes (type); 635 636 if ^waiting_to_make_array then do; /* put out list header */ 637 if type = Array then do; /* this is an array itself */ 638 substr (output_string, outi, length (Array_header_chars)) = Array_header_chars; 639 outi = outi + length (Array_header_chars); 640 end; 641 else do; 642 substr (output_string, outi, length (List_header_chars)) = List_header_chars; 643 outi = outi + length (List_header_chars); 644 end; 645 646 call graphic_code_util_$encode_uid (node_array, 1, addr (output_string_array (outi))); 647 outi = outi + UI_arg_length; 648 end; 649 650 651 goto Type (type); 652 653 654 /* Array */ 655 656 Type (33): if ^waiting_to_make_array then do; /* no one above me is waiting to make one */ 657 waiting_to_make_array, 658 tree_frame.output_array_sentinel = "1"b; 659 position.current, position.desired = 0; 660 /* Until seeing abs pos, we will compute using rel pos */ 661 position.absolute = ""b; 662 end; 663 664 tree_frame.environment_wall = "1"b; 665 666 /* List */ 667 668 Type (32): tree_frame.idx = 1; /* array drops thru here */ 669 tree_frame.node_p = node_ptr; 670 tree_frame.max_idx = n_elements; 671 672 goto Type_end; 673 674 /* Symbol */ 675 676 Type (24): if ^waiting_to_make_array then do; 677 call find_node (node_ptr -> symbol_node.name_node, sym_type, sym_p, contents_p, copy_direct, sym_len); 678 679 substr (output_string, outi, length (effector_char)) = effector_char; 680 outi = outi + length (effector_char); 681 682 call graphic_code_util_$encode_dpi (addr (sym_len) -> dumaray, 1, 683 addr (output_string_array (outi))); 684 /* stick in char string length */ 685 outi = outi + DPI_arg_length; 686 687 substr (output_string, outi, sym_len) = sym_p -> char_node.string; 688 outi = outi + sym_len; 689 end; 690 691 /* Now masquerade as an unfinished array by simulating a push-pop and continuing */ 692 tree_frame.max_idx = 2; /* with 2 elements */ 693 tree_frame.idx = 2; /* and have already processed the first */ 694 tree_frame.node_p = node_ptr; 695 696 goto Type_end; 697 698 /* Positional effectors */ 699 700 Type (0): /* setposition */ 701 Type (1): /* setpoint */ 702 Type (2): /* vector */ 703 Type (3): /* shift */ 704 Type (4): /* point */ 705 if control.from_wgs then do; 706 float_buffer (*) = 0e0; 707 addr (float_buffer) -> float_contents (*) = 708 contents_p -> float_contents (*); 709 /* copy out the data, may be "short" */ 710 contents_p = addr (float_buffer); 711 end; 712 713 if waiting_to_make_array then do; 714 715 if tree_frame.active.transformation then 716 call multiply_3x3_x_1x3 (tree_frame.matrix, (float_buffer), float_buffer); 717 718 if type = Setpoint then abs_move_needed = "1"b; 719 else if type = Setposition then 720 if ^position.absolute then 721 abs_move_needed = "1"b; 722 else abs_move_needed = ""b; 723 else abs_move_needed = ""b; 724 725 if abs_move_needed then do; 726 727 /* Check for absolute positionings within relative clippings. No way to 728* do this correctly, so complain to the user. */ 729 730 if tree_frame.active.clipping then do; 731 err_code = graphic_error_table_$abs_pos_in_clipping; 732 goto non_local_return; 733 end; 734 735 position.absolute = "1"b; /* we know exactly where we want to go, */ 736 position.current, /* but we don't know exactly where we are NOW */ 737 position.desired = 0; /* so let's get to where we're going */ 738 must_put_out = "1"b; /* while we still remember how to get there */ 739 end; 740 741 else if tree_frame.environment.intensity = 0 then goto invisible; 742 /* no class, but efficiency critical here */ 743 else if type = Shift then do; 744 invisible: position.desired = position.desired + float_buffer; 745 must_put_out = ""b; /* skip everything else you can't see */ 746 end; 747 748 else must_put_out = "1"b; /* it's visible and relevant */ 749 750 if ^must_put_out then goto Type_end; 751 752 /* Before we do anything, first get to where we should be starting from. */ 753 754 if ^abs_move_needed then call get_to_cur_pos; 755 756 /* Now keep track of where the positions will be after we actually compile the element. */ 757 758 position.desired = position.desired + float_buffer; 759 float_buffer = position.desired - position.current; 760 temp_scaled = round (fixed (float_buffer, 35, 8), 6); 761 position.current = position.current + temp_scaled; 762 end; 763 764 call compile_simple_element (effector_char, type, contents_p); 765 goto Type_end; 766 767 /* Mapping Effectors */ 768 769 Type (8): /* scaling */ 770 if control.from_wgs then do; 771 float_buffer (*) = 1e-6; 772 addr (float_buffer) -> float_contents (*) = 773 contents_p -> float_contents (*); 774 /* copy out the data, may be "short" */ 775 contents_p = addr (float_buffer); 776 end; 777 778 if waiting_to_make_array then do; 779 call collapse_level; 780 781 do i = 1 to 3; 782 if float_buffer (i) = 0e0 then 783 float_buffer (i) = 1e-6; 784 end; 785 786 do i = 1 to 3; 787 do j = 1 to 3; 788 tree_frame.matrix (j, i) = tree_frame.matrix (j, i) 789 * float_buffer (i) / tree_frame.this_level.scaling (i); 790 end; 791 end; 792 793 tree_frame.this_level.scaling = float_buffer; 794 795 tree_frame.active.transformation = 796 (unspec (tree_frame.environment.matrix) ^= unspec (Identity_matrix)); 797 end; 798 799 else call compile_simple_element (effector_char, type, contents_p); 800 goto Type_end; 801 802 Type (9): /* rotation */ 803 if control.from_wgs then do; 804 float_buffer (*) = 0e0; 805 addr (float_buffer) -> float_contents (*) = 806 contents_p -> float_contents (*); 807 /* copy out the data, may be "short" */ 808 contents_p = addr (float_buffer); 809 end; 810 811 if waiting_to_make_array then do; 812 call collapse_level; 813 814 fixed_buffer (*) = float_buffer (*); 815 816 call make_matrix (fixed_buffer, tree_frame.this_level.scaling (*), temp_matrix (*, *)); 817 818 call multiply_3x3_x_3x3 (tree.node (tree.level - 1).matrix (*, *), 819 temp_matrix (*, *), tree_frame.matrix (*, *)); /* create new master matrix */ 820 821 tree_frame.active.transformation = 822 (unspec (tree_frame.environment.matrix) ^= unspec (Identity_matrix)); 823 end; 824 825 else call compile_simple_element (effector_char, type, contents_p); 826 goto Type_end; 827 828 Type (10): /* clipping */ 829 830 /* WRITE THIS CODE LATER */ 831 832 goto Type_end; 833 834 835 /* Modal effectors */ 836 837 Type (16): /* intensity */ 838 if waiting_to_make_array then do; 839 call collapse_level; 840 tree_frame.environment.intensity = fixed_contents (1); 841 end; 842 843 if tree_frame.environment.intensity > 0 then goto mode_common; 844 /* if not in array, will always be "visible" */ 845 else goto Type_end; 846 847 Type (17): /* linetype */ 848 if waiting_to_make_array then do; 849 call collapse_level; 850 tree_frame.environment.linetype = fixed_contents (1); 851 end; 852 853 goto mode_common; 854 855 Type (18): /* sensitivity */ 856 if waiting_to_make_array then do; 857 call collapse_level; 858 tree_frame.environment.sensitivity = fixed_contents (1); 859 end; 860 861 goto mode_common; 862 863 Type (19): /* blink */ 864 if waiting_to_make_array then do; 865 call collapse_level; 866 tree_frame.environment.blinking = fixed_contents (1); 867 end; 868 869 goto mode_common; 870 871 872 Type (20): /* color */ 873 if waiting_to_make_array then do; 874 call collapse_level; 875 tree_frame.environment.color = fixed_contents; 876 end; 877 878 mode_common: call compile_simple_element (effector_char, type, contents_p); 879 goto Type_end; 880 881 /* Text */ 882 883 Type (25): if tree_frame.environment.intensity = 0 then goto Type_end; 884 885 if waiting_to_make_array then call get_to_cur_pos; 886 call compile_text_element (effector_char, n_elements, contents_p, copy_direct); 887 goto Type_end; 888 889 /* Datablock */ 890 891 Type (26): call compile_data_block (effector_char, n_elements, contents_p, copy_direct); 892 goto Type_end; 893 894 /* These labels represent node types which are undefined. If we get here, something is wrong. */ 895 896 Type (5): 897 Type (6): 898 Type (7): 899 Type (11): 900 Type (12): 901 Type (13): 902 Type (14): 903 Type (15): 904 Type (21): 905 Type (22): 906 Type (23): 907 Type (27): 908 Type (28): 909 Type (29): 910 Type (30): 911 Type (31): goto bad_type; 912 913 Type_end: 914 end; 915 Loop_end: 916 end; 917 918 /* End the actual compilation of the list structure. */ 919 if display then do; /* If displaying... */ 920 substr (output_string, outi, length (Display_char)) = Display_char; /* ... then stick display command in */ 921 outi = outi + length (Display_char); 922 node_no = node_no_arg; 923 call graphic_code_util_$encode_uid (node_array, 1, addr (output_string_array (outi))); 924 /* Stick in top level node # */ 925 outi = outi + UI_arg_length; 926 end; 927 928 if control.return_string then /* If returning the compiled string... */ 929 return_len = outi - 1; /* Set the length of the string */ 930 931 else do; 932 write_it: if control.cur_switch = null then control.cur_switch = graphic_output; 933 934 call iox_$put_chars (control.cur_switch, addr (output_string), outi - 1, err_code); 935 /* Write it out */ 936 if err_code ^= 0 then return; 937 end; 938 939 return; 940 941 get_to_cur_pos: proc; 942 943 dcl float_temp (3) float bin; 944 945 float_temp = position.desired - position.current; 946 temp_scaled = round (fixed (float_temp, 35, 8), 6); 947 948 if unspec (temp_scaled) ^= unspec (scaled_zeroes) then 949 call compile_simple_element (Shift_char, Shift, addr (float_temp)); 950 951 position.current = position.current + temp_scaled; 952 end get_to_cur_pos; 953 954 push_level: proc (node_no, environment_wall); 955 956 dcl (node_no fixed bin (18), 957 environment_wall bit (1) aligned) parameter; 958 959 if tree.level + 1 > tree.max_level then call grow_tree; 960 tree.level = tree.level + 1; 961 frame_ptr = addr (tree.node (tree.level)); 962 tree_frame.id = node_no; 963 tree_frame.idx = 0; /* claim to be working on node itself */ 964 if control.from_wgs then 965 tree_frame.max_idx = 0; 966 else tree_frame.max_idx = max_string_size; /* impossibly large value */ 967 tree_frame.environment_wall = environment_wall; 968 tree_frame.node_p = null; 969 970 tree_frame.this_level.scaling = Scaling_default; 971 tree_frame.this_level.clipping = Clipping_default; 972 973 unspec (tree_frame.environment) = unspec (tree.node (tree.level - 1).environment); 974 975 return; 976 end push_level; 977 978 pop_level: proc; 979 980 dcl 1 prev_tree_frame like tree.node aligned based (prev_tree_framep); 981 982 dcl prev_tree_framep pointer; 983 984 if ^tree_frame.precollapsed then do; 985 986 if (waiting_to_make_array & ^tree_frame.output_array_sentinel) then do; 987 /* no need to reset environment if */ 988 /* all done or returning into list */ 989 990 prev_tree_framep = addr (tree.node (tree.level - 1)); 991 992 /* Pop out of the current graphic environment, restoring previous modes and mappings */ 993 /* Only modes need be explicitly restored, as we hack all the mappings ourselves */ 994 995 if tree_frame.environment.intensity ^= prev_tree_frame.environment.intensity then 996 if prev_tree_frame.environment.intensity > 0 then 997 call compile_simple_element (Intensity_char, Intensity, 998 addr (prev_tree_frame.environment.intensity)); 999 1000 if tree_frame.environment.linetype ^= prev_tree_frame.environment.linetype then 1001 call compile_simple_element (Linetype_char, Linetype, 1002 addr (prev_tree_frame.environment.linetype)); 1003 1004 if tree_frame.environment.sensitivity ^= prev_tree_frame.environment.sensitivity then 1005 call compile_simple_element (Sensitivity_char, Sensitivity, 1006 addr (prev_tree_frame.environment.sensitivity)); 1007 1008 if tree_frame.environment.blinking ^= prev_tree_frame.environment.blinking then 1009 call compile_simple_element (Blinking_char, Blinking, 1010 addr (prev_tree_frame.environment.blinking)); 1011 1012 if unspec (tree_frame.environment.color) ^= unspec (prev_tree_frame.environment.color) then 1013 call compile_simple_element (Color_char, Color, 1014 addr (prev_tree_frame.environment.color)); 1015 end; 1016 1017 tree_frame.environment_wall = ""b; /* force the collapse */ 1018 call collapse_level; 1019 end; 1020 1021 tree_frame.precollapsed = ""b; /* otherwise, mode or mapping as last element */ 1022 /* of array "locks" this frame forever */ 1023 1024 if ^waiting_to_make_array then do; 1025 substr (output_string, outi, 1) = Node_end_char; 1026 outi = outi + length (Node_end_char); 1027 end; 1028 1029 return; 1030 end pop_level; 1031 1032 collapse_level: proc; 1033 1034 if tree.level <= 0 then 1035 call sub_err_caller ("Attempt to pop past start of graphic tree."); 1036 1037 if tree_frame.precollapsed then return; 1038 1039 if tree_frame.environment_wall = "1"b then return; 1040 1041 /* Above occurs when attempt is made to collapse past a graphic array, which one shouldn't normally do. 1042* This will happen when expanding certain old-format MSGC where mappings could appear inside arrays. */ 1043 1044 if tree_frame.output_array_sentinel then do; 1045 call get_to_cur_pos; /* don't optimize trailing position changes away!! */ 1046 waiting_to_make_array = ""b; 1047 end; 1048 1049 unspec (tree_frame) = ""b; /* clear out level */ 1050 1051 tree.level = tree.level - 1; 1052 frame_ptr = addr (tree.node (tree.level)); 1053 1054 tree_frame.idx = tree_frame.idx + 1; 1055 /* move to next item in parent list */ 1056 tree_frame.precollapsed = "1"b; 1057 1058 return; 1059 end collapse_level; 1060 1061 /* Internal procedure to check that node is in bounds, determine its graphic type and obtain its length */ 1062 1063 find_node: procedure (node_no, type, node_ptr, contents_p, copy_direct, n_elements); 1064 1065 dcl (node_no fixed bin (18), 1066 type fixed bin, 1067 n_elements fixed bin, 1068 copy_direct bit (1) aligned, 1069 node_ptr pointer, 1070 contents_p pointer) parameter; 1071 1072 dcl lsm_type fixed bin; 1073 1074 copy_direct = ""b; /* always is for this entry */ 1075 1076 call lsm_$get_blk (wgs_p, node_no, lsm_type, n_elements, node_ptr, err_code); 1077 if err_code ^= 0 then go to non_local_return; 1078 1079 if lsm_type > lsm_constants.n_types then goto bad_type; 1080 if lsm_type < 1 then goto bad_type; 1081 1082 contents_p = addr (node_ptr -> any_node.data_space); 1083 1084 goto Type (lsm_type); 1085 1086 Type (8): type = List; 1087 return; 1088 1089 Type (9): type = Array; 1090 return; 1091 1092 Type (3): /* float */ 1093 Type (2): /* fixed */ 1094 type = contents_p -> effector.effector_code; 1095 if (type < Setposition) | (type > Color) then 1096 goto bad_type; 1097 1098 contents_p = addr (contents_p -> effector.data); 1099 n_elements = n_elements - 1; 1100 return; 1101 1102 Type (5): type = Text; /* char */ 1103 return; 1104 1105 Type (4): type = Datablock; /* bit */ 1106 contents_p = node_ptr; 1107 return; 1108 1109 Type (7): type = Symbol; 1110 return; 1111 1112 Type (6): goto bad_type; /* symtab */ 1113 end find_node; 1114 1115 decode_effector: proc (ini, type, node_p, contents_p, copy_direct, n_elements); 1116 1117 dcl (ini fixed bin (21), 1118 type fixed bin, 1119 node_p pointer, 1120 contents_p pointer, 1121 copy_direct bit (1) aligned, 1122 n_elements fixed bin) parameter; 1123 1124 dcl arg_type fixed bin; 1125 1126 dcl fixed_contents (3) fixed bin based (contents_p), 1127 float_contents (3) float bin based (contents_p); 1128 1129 node_p = null; /* always is from this entry */ 1130 copy_direct = ""b; /* generally the case but not always */ 1131 1132 char = substr (input_string, ini, 1); 1133 ini = ini + 1; 1134 datap = addr (input_string_array (ini)); 1135 1136 type = index (string (structural_effector_codes), char) - 1; 1137 if type < 0 then goto not_valid_msgc; 1138 n_elements = no_args (type); 1139 arg_type = arg_types (type); 1140 ini = ini + n_elements * arg_lengths (arg_type); 1141 1142 goto process (arg_type); 1143 1144 process (1): spi: contents_p = addr (fixed_buffer); 1145 call graphic_code_util_$decode_spi (datap, n_elements, fixed_contents); 1146 return; 1147 1148 process (2): dpi: contents_p = addr (float_buffer); 1149 call graphic_code_util_$decode_dpi (datap, n_elements, fixed_buffer); 1150 float_buffer (*) = fixed_buffer (*); 1151 return; 1152 1153 process (3): scl: contents_p = addr (float_buffer); 1154 if type = Scaling then 1155 call graphic_code_util_$decode_scl_nozero (datap, n_elements, float_contents); 1156 else begin; 1157 1158 /* forgive us this little while lie; graphic_code_util_ is written in ALM and 1159* couldn't care less about descriptors-- and this misdeclaration knocks 20% 1160* off this call, which is one of the two most heavily used in the program. */ 1161 1162 dcl graphic_code_util_$decode_scl entry (pointer, fixed bin, float bin dimension (3)); 1163 1164 call graphic_code_util_$decode_scl (datap, n_elements, float_contents); 1165 end; 1166 return; 1167 1168 process (5): t: process (6): d: 1169 n_elements = graphic_element_length_ (input_string, ini-1) - 1; 1170 ini = ini + n_elements; /* got bumped by zero above, do it right */ 1171 1172 if type = Symbol then contents_p = null; 1173 1174 else do; /* Text and Datablock */ 1175 copy_direct = "1"b; 1176 contents_p = datap; 1177 end; 1178 1179 return; 1180 1181 process (0): process (4): /* illegal and uid */ 1182 goto not_valid_msgc; 1183 1184 end decode_effector; 1185 1186 compile_null_element: proc; 1187 1188 /* compiles a null node, which is a pretty boring job. */ 1189 1190 if waiting_to_make_array then return; /* no use fouling the water */ 1191 substr (output_string, outi, length (Null_node_chars)) = Null_node_chars; 1192 outi = outi + length (Null_node_chars); 1193 return; 1194 end compile_null_element; 1195 1196 /* Internal procedure to compile a simple node */ 1197 1198 compile_simple_element: procedure (effector_char, node_type, contents_p); 1199 1200 dcl effector_char char (1) parameter, 1201 node_type fixed bin parameter, 1202 contents_p pointer parameter; 1203 1204 dcl fill_p pointer, 1205 arg_format fixed bin, 1206 fixed_contents (3) fixed bin based (contents_p), 1207 float_contents (3) float bin based (contents_p), 1208 temp_array (3) fixed bin, 1209 (nargs, nchars) fixed bin; 1210 1211 1212 if effector_char = Illegal_char then goto bad_type; 1213 substr (output_string, outi, 1) = effector_char; 1214 outi = outi + 1; 1215 1216 fill_p = addr (output_string_array (outi)); 1217 arg_format = arg_types (node_type); 1218 nargs = no_args (node_type); 1219 nchars = arg_lengths (arg_format) * nargs; 1220 1221 go to encode (arg_format); 1222 1223 1224 encode (1): spi: call graphic_code_util_$encode_spi (fixed_contents, nargs, fill_p); 1225 go to encode_common; 1226 1227 encode (2): dpi: temp_array = fixed (float_contents); /* Float to fixed conversion for floating point coordinates */ 1228 call graphic_code_util_$encode_dpi (temp_array, nargs, fill_p); 1229 go to encode_common; 1230 1231 encode (3): scl: begin; 1232 1233 /* See comment at "decode (3): scl:" above. */ 1234 1235 dcl graphic_code_util_$encode_scl entry (float bin dimension (3), fixed bin, pointer); 1236 1237 call graphic_code_util_$encode_scl (float_contents, nargs, fill_p); 1238 end; 1239 go to encode_common; 1240 1241 encode (4): uid: call graphic_code_util_$encode_uid (fixed_contents, nargs, fill_p); 1242 go to encode_common; 1243 1244 encode (5): t: encode (6): d: 1245 call sub_err_caller ("Attempt to encode text or datablock as simple effector."); 1246 1247 encode_common: outi = outi + nchars; 1248 1249 return; 1250 1251 end compile_simple_element; 1252 1253 /* Internal procedure to compile a text node */ 1254 1255 compile_text_element: procedure (effector_char, count, contents_p, copy_direct); 1256 1257 dcl effector_char char (1) parameter, 1258 count fixed bin parameter, 1259 contents_p pointer parameter, 1260 copy_direct bit (1) aligned; 1261 1262 dcl fixed_array (1) fixed bin, 1263 to_ptr pointer, 1264 direct_text_copy char (count) based; 1265 1266 substr (output_string, outi, 1) = effector_char; 1267 outi = outi + 1; 1268 1269 if copy_direct then do; 1270 to_ptr = addr (output_string_array (outi)); 1271 to_ptr -> direct_text_copy = contents_p -> direct_text_copy; 1272 outi = outi + count; 1273 return; 1274 end; 1275 1276 fixed_array (1) = fixed (contents_p -> text_effector.alignment, 17); 1277 call graphic_code_util_$encode_spi (fixed_array, 1, addr (output_string_array (outi))); 1278 outi = outi + SPI_arg_length; 1279 1280 fixed_array (1) = count - 1; 1281 call graphic_code_util_$encode_dpi (fixed_array, 1, addr (output_string_array (outi))); 1282 /* Stick in char string length */ 1283 outi = outi + DPI_arg_length; 1284 1285 1286 substr (output_string, outi, count - 1) = substr (contents_p -> text_effector.text, 1, count - 1); 1287 outi = outi + count -1; 1288 1289 return; 1290 end compile_text_element; 1291 1292 /* Internal procedure to compile a data_block node */ 1293 1294 compile_data_block: procedure (effector_char, count, contents_p, copy_direct); 1295 1296 dcl (effector_char char (1), 1297 count fixed bin, 1298 contents_p pointer, 1299 copy_direct bit (1) aligned) parameter; 1300 1301 dcl output_string_bit_array (max_string_size) bit (9) unaligned based (output_string_ptr), 1302 direct_datablock_copy char (count) based, 1303 bit_contents bit (count) based (bcp), 1304 bcp pointer, 1305 to_ptr pointer, 1306 fixed_array (1) fixed bin, 1307 one bit (3) unaligned init ("001"b), 1308 i fixed bin; 1309 1310 substr (output_string, outi, 1) = effector_char; 1311 outi = outi + 1; 1312 1313 if copy_direct then do; /* copy direct from old MSGC */ 1314 to_ptr = addr (output_string_array (outi)); 1315 to_ptr -> direct_datablock_copy = contents_p -> direct_datablock_copy; 1316 outi = outi + count; 1317 return; 1318 end; 1319 1320 fixed_array (1) = count; /* else assemble the data from the wgs */ 1321 call graphic_code_util_$encode_dpi (fixed_array, 1, addr (output_string_array (outi))); 1322 outi = outi + DPI_arg_length; 1323 1324 bcp = addr (contents_p -> bit_node.string); 1325 1326 do i = 1 to count -6 by 6; 1327 output_string_bit_array (outi) = one || substr (bit_contents, i, 6); 1328 outi = outi + 1; 1329 end; 1330 1331 output_string_bit_array (outi) = one || substr (bit_contents, i, mod (count, 6)); 1332 outi = outi + 1; 1333 1334 return; 1335 1336 end compile_data_block; 1337 1338 end compile_node; 1339 1340 /* Internal procedure gets pointer to current working graphic seg */ 1341 1342 initialize: procedure; 1343 1344 err_code = 0; 1345 1346 if control.from_wgs then do; 1347 call graphic_manipulator_$segp (wgs_p, err_code); /* Get a ptr to the w.g.s. */ 1348 if err_code ^= 0 then go to non_local_return; 1349 if wgs_p = null () then do; /* If no w.g.s. yet */ 1350 err_code = graphic_error_table_$no_wgs_yet; 1351 go to non_local_return; 1352 end; 1353 end; 1354 1355 else wgs_p = null; 1356 1357 if temp_seg_ptr = null then do; 1358 call get_temp_segment_ ("graphic_compiler_", temp_seg_ptr, err_code); 1359 if err_code ^= 0 then goto non_local_return; 1360 1361 max_string_size = sys_info$max_seg_size * 4; 1362 sys_area_p = get_system_free_area_ (); 1363 end; 1364 1365 if tree_ptr = null then call grow_tree; /* initialize tree */ 1366 1367 if ^control.return_string then do; 1368 if control.cur_switch = null then do; 1369 call iox_$look_iocb ("graphic_output", graphic_output, err_code); 1370 if err_code ^= 0 then goto non_local_return; 1371 end; 1372 1373 auto_temp_seg_ptr = temp_seg_ptr; 1374 end; 1375 1376 else auto_temp_seg_ptr = null; 1377 1378 end initialize; 1379 1380 grow_tree: proc; 1381 1382 dcl i fixed bin, 1383 current_node fixed bin (18); 1384 1385 if tree_ptr ^= null then do; 1386 current_node = tree.node (tree.level).id; 1387 1388 do i = tree.level - 1 to 1 by -1; 1389 if current_node = tree.node (i).id then goto recursive_structure; 1390 end; 1391 1392 max_levels = tree.max_level + 50; /* increase levels by 50 */ 1393 end; 1394 1395 else max_levels = 10; /* start with small tree */ 1396 1397 temp_ptr = tree_ptr; 1398 1399 allocate tree in (sys_area); /* get a bigger tree */ 1400 1401 if temp_ptr ^= null then do; /* if there is an old stack */ 1402 1403 unspec (tree_ptr -> tree) = unspec (temp_ptr -> tree); 1404 1405 free temp_ptr -> tree in (sys_area); /* get rid of it */ 1406 1407 end; 1408 1409 tree.max_level = max_levels; 1410 1411 end grow_tree; 1412 1413 1414 /* Various matrix-hacking routines, stolen from the standalone graphic_matrix_util_. */ 1415 1416 make_matrix: proc (rotations, scalings, matrix); /* construct a graphic rotation/scaling matrix */ 1417 1418 dcl rotations (3) fixed bin parameter, 1419 scalings (3) float bin parameter, 1420 matrix (3, 3) float bin parameter; 1421 1422 dcl (sx, cx, sy, cy, sz, cz) float bin; /* various sines and cosines */ 1423 1424 cx = cosd (float (rotations (1))); sx = sind (float (rotations (1))); /* get sines and */ 1425 cy = cosd (float (rotations (2))); sy = sind (float (rotations (2))); /* cosines of angles */ 1426 cz = cosd (float (rotations (3))); sz = sind (float (rotations (3))); /* for use later on */ 1427 1428 on underflow; /* We ignore these */ 1429 1430 /* take it on faith: this is a graphic rotation/scaling matrix */ 1431 1432 matrix (1, 1) = cz * cy * scalings (1); 1433 matrix (1, 2) = (-sz * cx + cz * sy * sx) * scalings (2); 1434 matrix (1, 3) = (sz * sx + cx * cz * sy) * scalings (3); 1435 matrix (2, 1) = cy * sz * scalings (1); 1436 matrix (2, 2) = (cz * cx + sx * sy * sz) * scalings (2); 1437 matrix (2, 3) = (-sx * cz + cx * sy * sz) * scalings (3); 1438 matrix (3, 1) = -sy * scalings (1); 1439 matrix (3, 2) = sx * cy * scalings (2); 1440 matrix (3, 3) = cy * cx * scalings (3); 1441 1442 return; 1443 1444 multiply_3x3_x_3x3: entry (left_matrix, right_matrix, matrix); /* is a comment really necessary? */ 1445 1446 dcl (left_matrix, right_matrix) (3, 3) float bin parameter; 1447 1448 dcl (i, j) fixed bin; 1449 1450 on underflow; 1451 1452 do i = 1 to 3; 1453 do j = 1 to 3; 1454 matrix (i, j) = sum (left_matrix (i, *) * right_matrix (*, j)); /* 'cause the CRC says. */ 1455 end; 1456 end; 1457 1458 return; 1459 1460 multiply_3x3_x_1x3: entry (left_matrix, right_vector, vector); 1461 1462 dcl (right_vector, vector) (3) float bin parameter; 1463 1464 on underflow; /* These are the bane of graphics programs */ 1465 do i = 1 to 3; 1466 vector (i) = sum (left_matrix (i, *) * right_vector); /* same principle */ 1467 end; 1468 1469 return; 1470 1471 end make_matrix; 1472 1473 end graphic_compiler_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/18/82 1625.3 graphic_compiler_.pl1 >dumps>old>recomp>graphic_compiler_.pl1 208 1 03/27/82 0439.2 graphic_comp_specs.incl.pl1 >ldd>include>graphic_comp_specs.incl.pl1 1-54 2 03/27/82 0439.2 graphic_code_dcl.incl.pl1 >ldd>include>graphic_code_dcl.incl.pl1 210 3 03/27/82 0439.2 graphic_etypes.incl.pl1 >ldd>include>graphic_etypes.incl.pl1 212 4 03/27/82 0439.2 graphic_templates.incl.pl1 >ldd>include>graphic_templates.incl.pl1 214 5 12/17/79 1708.9 lsm_formats.incl.pl1 >ldd>include>lsm_formats.incl.pl1 216 6 07/22/80 1335.1 iox_dcls.incl.pl1 >ldd>include>iox_dcls.incl.pl1 218 7 03/27/82 0439.3 lsm_entry_dcls.incl.pl1 >ldd>include>lsm_entry_dcls.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. Array constant fixed bin(17,0) initial dcl 3-9 ref 637 1089 Array_char 007005 constant char(1) initial dcl 2-74 ref 507 604 Array_header_chars 000100 automatic char(2) dcl 44 set ref 507* 547 547 547 551 551 552 638 638 639 Blinking 000170 constant fixed bin(17,0) initial dcl 3-9 set ref 1008* Blinking_char 7(27) 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 set ref 1008* Clipping_default 15 000014 constant fixed bin(17,0) initial array level 3 dcl 2-47 ref 532 971 Color 000164 constant fixed bin(17,0) initial dcl 3-9 set ref 1012* 1095 Color_char 10 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 set ref 1012* Color_default 4 000014 constant fixed bin(17,0) initial array level 3 dcl 2-47 ref 538 DPI_arg_length constant fixed bin(17,0) initial dcl 1-47 ref 685 1283 1322 Datablock constant fixed bin(17,0) initial dcl 3-9 ref 1105 Display_char 1(27) 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 ref 920 920 921 Dynamic_and_structural_effectors 000000 constant structure level 2 dcl 2-8 Erase_char 2(09) 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 ref 511 511 512 Find_symbol 000276 constant fixed bin(17,0) initial dcl 7-24 set ref 360* Graphic_Code_Structure 000000 constant structure level 1 dcl 2-8 Graphic_Defaults 000014 constant structure level 1 dcl 2-47 Graphic_effectors 3 000000 constant structure level 2 dcl 2-8 Identity_matrix 23 000014 constant float bin(27) initial array level 2 dcl 2-47 ref 531 795 821 Illegal_char 007006 constant char(1) initial dcl 1-28 ref 1212 Intensity 000166 constant fixed bin(17,0) initial dcl 3-9 set ref 995* Intensity_char 7 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 set ref 995* Intensity_default 000014 constant fixed bin(17,0) initial level 3 dcl 2-47 ref 535 Linetype 000302 constant fixed bin(17,0) initial dcl 3-9 set ref 1000* Linetype_char 7(09) 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 set ref 1000* Linetype_default 1 000014 constant fixed bin(17,0) initial level 3 dcl 2-47 ref 536 List constant fixed bin(17,0) initial dcl 3-9 ref 1086 List_char constant char(1) initial dcl 2-74 ref 506 606 List_header_chars 000101 automatic char(2) dcl 44 set ref 506* 508 545 545 545 642 642 643 Mapping_defaults 7 000014 constant structure level 2 dcl 2-47 Mode_defaults 000014 constant structure level 2 dcl 2-47 Mode_effectors 7 000000 constant structure level 2 dcl 2-8 Node_begin_char 1 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 ref 506 507 602 603 Node_end_char 1(09) 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 ref 597 597 598 1025 1026 Null_node_chars 000102 automatic char(5) dcl 44 set ref 508* 1191 1191 1192 SPI_arg_length constant fixed bin(17,0) initial dcl 1-47 ref 1278 Scaling constant fixed bin(17,0) initial dcl 3-9 ref 1154 Scaling_default 7 000014 constant float bin(27) initial array level 3 dcl 2-47 ref 534 970 Sensitivity 000165 constant fixed bin(17,0) initial dcl 3-9 set ref 1004* Sensitivity_char 7(18) 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 set ref 1004* Sensitivity_default 3 000014 constant fixed bin(17,0) initial level 3 dcl 2-47 ref 537 Setpoint constant fixed bin(17,0) initial dcl 3-9 ref 718 Setposition constant fixed bin(17,0) initial dcl 3-9 ref 719 1095 Setposition_char 3 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 ref 634 634 1136 1136 Shift 000176 constant fixed bin(17,0) initial dcl 3-9 set ref 743 948* Shift_char 3(27) 000000 constant char(1) initial level 3 packed unaligned dcl 2-8 set ref 948* Symbol constant fixed bin(17,0) initial dcl 3-9 ref 1109 1172 Text constant fixed bin(17,0) initial dcl 3-9 ref 1102 UI_arg_length constant fixed bin(17,0) initial dcl 1-47 ref 553 553 554 557 608 647 925 abs_move_needed 000104 automatic bit(1) dcl 44 set ref 718* 719* 722* 723* 725 754 absolute 000202 automatic bit(1) level 2 dcl 94 set ref 564* 661* 719 735* active 37 based structure level 3 dcl 197 set ref 539* addr builtin function dcl 202 ref 525 556 556 556 556 556 607 607 607 607 607 646 646 646 682 682 682 707 710 772 775 805 808 923 923 923 934 934 948 948 961 990 995 995 1000 1000 1004 1004 1008 1008 1012 1012 1052 1082 1098 1134 1134 1144 1148 1153 1216 1270 1277 1277 1281 1281 1314 1321 1321 1324 alignment based fixed bin(8,0) level 2 packed unaligned dcl 4-59 ref 1276 any_node based structure level 1 dcl 5-48 arg_format 000352 automatic fixed bin(17,0) dcl 1204 set ref 1217* 1219 1221 arg_lengths 000170 constant fixed bin(17,0) initial array dcl 1-44 ref 1140 1219 arg_lmatrix parameter float bin(27) array dcl 451 set ref 449 453* 456 460* arg_matrix parameter float bin(27) array dcl 440 set ref 438 444* 449 453* arg_rmatrix parameter float bin(27) array dcl 451 set ref 449 453* arg_rots parameter fixed bin(17,0) array dcl 440 set ref 438 444* arg_rvector parameter float bin(27) array dcl 458 set ref 456 460* arg_scls parameter float bin(27) array dcl 440 set ref 438 444* arg_type 000332 automatic fixed bin(17,0) dcl 1124 set ref 1139* 1140 1142 arg_types 000176 constant fixed bin(17,0) initial array dcl 1-19 ref 1139 1217 arg_vector parameter float bin(27) array dcl 458 set ref 456 460* auto_temp_seg_ptr 000106 automatic pointer initial dcl 44 set ref 44* 489 489* 504 1373* 1376* bcp 000402 automatic pointer dcl 1301 set ref 1324* 1327 1331 bit_contents based bit unaligned dcl 1301 ref 1327 1331 bit_node based structure level 1 dcl 5-64 blinking 14 based fixed bin(17,0) level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 866* 1008 blinking 14 based fixed bin(17,0) level 3 in structure "prev_tree_frame" dcl 980 in procedure "pop_level" set ref 1008 1008 1008 char 000110 automatic char(1) unaligned dcl 44 set ref 1132* 1136 char_node based structure level 1 dcl 5-68 cleanup 000212 stack reference condition dcl 204 ref 296 363 clipping 44 based float bin(27) array level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 532* 971* clipping 40 based bit(1) level 4 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 730 clipping_boundaries 31 based float bin(27) array level 3 dcl 197 set ref 532* color 15 based fixed bin(17,0) array level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 538* 875* 1012 color 15 based fixed bin(17,0) array level 3 in structure "prev_tree_frame" dcl 980 in procedure "pop_level" set ref 1012 1012 1012 contents_p parameter pointer dcl 1257 in procedure "compile_text_element" ref 1255 1271 1276 1286 contents_p parameter pointer dcl 1117 in procedure "decode_effector" set ref 1115 1144* 1145 1148* 1153* 1154 1164 1172* 1176* contents_p parameter pointer dcl 1296 in procedure "compile_data_block" ref 1294 1315 1324 contents_p 000112 automatic pointer dcl 44 in procedure "gc_" set ref 630* 632* 677* 707 710* 764* 772 775* 799* 805 808* 825* 840 850 858 866 875 878* 886* 891* contents_p parameter pointer dcl 1065 in procedure "find_node" set ref 1063 1082* 1092 1098* 1098 1106* contents_p parameter pointer dcl 1200 in procedure "compile_simple_element" ref 1198 1224 1227 1237 1241 control 000174 automatic structure level 1 unaligned dcl 86 copy_direct parameter bit(1) dcl 1117 in procedure "decode_effector" set ref 1115 1130* 1175* copy_direct parameter bit(1) dcl 1257 in procedure "compile_text_element" ref 1255 1269 copy_direct parameter bit(1) dcl 1065 in procedure "find_node" set ref 1063 1074* copy_direct 000111 automatic bit(1) dcl 44 in procedure "gc_" set ref 630* 632* 677* 886* 891* copy_direct parameter bit(1) dcl 1296 in procedure "compile_data_block" ref 1294 1313 cosd builtin function dcl 202 ref 1424 1425 1426 count parameter fixed bin(17,0) dcl 1296 in procedure "compile_data_block" ref 1294 1315 1315 1316 1320 1326 1327 1331 1331 count parameter fixed bin(17,0) dcl 1257 in procedure "compile_text_element" ref 1255 1271 1271 1272 1280 1286 1286 1287 cur_switch 4 000174 automatic pointer level 2 dcl 86 set ref 232* 240* 251* 259* 271* 279* 312* 320* 328* 336* 344* 352* 381* 932 932* 934* 1368 current 4 000202 automatic fixed bin(35,6) array level 2 dcl 94 set ref 562* 659* 736* 759 761* 761 945 951* 951 current_node 000427 automatic fixed bin(18,0) dcl 1382 set ref 1386* 1389 cx 000101 automatic float bin(27) dcl 1422 set ref 1424* 1433 1434 1436 1437 1440 cy 000103 automatic float bin(27) dcl 1422 set ref 1425* 1432 1435 1439 1440 cz 000105 automatic float bin(27) dcl 1422 set ref 1426* 1432 1433 1434 1436 1437 data 1 based fixed bin(35,0) array level 2 dcl 4-14 set ref 1098 data_len 0(18) based fixed bin(18,0) level 3 in structure "char_node" packed unsigned unaligned dcl 5-68 in procedure "gc_" ref 687 data_len 0(18) based fixed bin(18,0) level 3 in structure "bit_node" packed unsigned unaligned dcl 5-64 in procedure "gc_" ref 1324 data_space 1 based bit(36) array level 2 dcl 5-48 set ref 1082 datap 000114 automatic pointer dcl 44 set ref 1134* 1145* 1149* 1154* 1164* 1176 desired 1 000202 automatic float bin(27) array level 2 dcl 94 set ref 562* 659* 736* 744* 744 758* 758 759 945 desired_switch parameter pointer dcl 33 ref 235 235 240 254 254 259 274 274 279 315 315 320 331 331 336 347 347 352 direct_datablock_copy based char unaligned dcl 1301 set ref 1315* 1315 direct_text_copy based char unaligned dcl 1262 set ref 1271* 1271 display 0(01) 000174 automatic bit(1) level 2 packed unaligned dcl 86 set ref 229* 237* 248* 256* 268* 276* 286* 309* 317* 325* 333* 341* 349* 377* 919 display_name parameter char unaligned dcl 33 set ref 307 307 315 315 323 323 331 331 339 339 347 347 360* display_node parameter fixed bin(18,0) dcl 33 set ref 227 227 235 235 246 246 254 254 266 266 274 274 285 285 298* done 000116 automatic bit(1) dcl 44 set ref 595* 596 613* 615* dumaray based fixed bin(17,0) array dcl 156 set ref 682* effector based structure level 1 dcl 4-14 effector_char parameter char(1) unaligned dcl 1200 in procedure "compile_simple_element" ref 1198 1212 1213 effector_char 000117 automatic char(1) unaligned dcl 44 in procedure "gc_" set ref 634* 679 679 680 764* 799* 825* 878* 886* 891* effector_char parameter char(1) unaligned dcl 1257 in procedure "compile_text_element" ref 1255 1266 effector_char parameter char(1) unaligned dcl 1296 in procedure "compile_data_block" ref 1294 1310 effector_code based fixed bin(6,0) level 2 dcl 4-14 ref 1092 environment 11 based structure level 2 in structure "prev_tree_frame" dcl 980 in procedure "pop_level" environment 13 based structure array level 3 in structure "tree" dcl 171 in procedure "gc_" set ref 973 environment 11 based structure level 2 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 973* environment_wall 6 based bit(1) level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 530* 664* 967* 1017* 1039 environment_wall parameter bit(1) dcl 956 in procedure "push_level" ref 954 967 erase 000174 automatic bit(1) level 2 packed unaligned dcl 86 set ref 229* 237* 249* 257* 268* 276* 286* 309* 317* 326* 334* 341* 349* 377* 510 err_code parameter fixed bin(35,0) dcl 33 set ref 227 227 235 235 246 246 254 254 266 266 274 274 285 285 307 307 315 315 323 323 331 331 339 339 347 347 360* 361 375 397 404* 412* 420* 426 428* 472* 476* 479* 501* 731* 934* 936 1076* 1077 1344* 1347* 1348 1350* 1358* 1359 1369* 1370 error_table_$out_of_sequence 000066 external static fixed bin(35,0) dcl 148 ref 404 error_table_$smallarg 000070 external static fixed bin(35,0) dcl 148 ref 412 excuse parameter char unaligned dcl 465 set ref 463 467* fill_p 000350 automatic pointer dcl 1204 set ref 1216* 1224* 1228* 1237* 1241* fixed builtin function dcl 202 ref 760 946 1227 1276 fixed_array 000370 automatic fixed bin(17,0) array dcl 1262 in procedure "compile_text_element" set ref 1276* 1277* 1280* 1281* fixed_array 000406 automatic fixed bin(17,0) array dcl 1301 in procedure "compile_data_block" set ref 1320* 1321* fixed_buffer 000120 automatic fixed bin(17,0) array dcl 44 set ref 814* 816* 1144 1149* 1150 fixed_contents based fixed bin(17,0) array dcl 1126 in procedure "decode_effector" set ref 1145* fixed_contents based fixed bin(17,0) array dcl 156 in procedure "gc_" ref 840 850 858 866 875 fixed_contents based fixed bin(17,0) array dcl 1204 in procedure "compile_simple_element" set ref 1224* 1241* float builtin function dcl 202 ref 1424 1424 1425 1425 1426 1426 float_buffer 000123 automatic float bin(27) array dcl 44 set ref 706* 707 710 715 715* 744 758 759* 760 771* 772 775 782 782* 788 793 804* 805 808 814 1148 1150* 1153 float_contents based float bin(27) array dcl 156 in procedure "gc_" set ref 707* 707 772* 772 805* 805 float_contents based float bin(27) array dcl 1126 in procedure "decode_effector" set ref 1154* 1164* float_contents based float bin(27) array dcl 1204 in procedure "compile_simple_element" set ref 1227 1237* float_temp 000262 automatic float bin(27) array dcl 943 set ref 945* 946 948 948 frame_ptr 000126 automatic pointer dcl 44 set ref 525* 526 526 526 529 530 531 532 532 534 535 536 537 538 539 569 576 581 584 584 588 588 623 623 657 664 668 669 670 692 693 694 715 715 730 741 788 788 788 793 795 795 816 818 821 821 840 843 850 858 866 875 883 961* 962 963 964 966 967 968 970 971 973 984 986 995 1000 1004 1008 1012 1017 1021 1037 1039 1044 1049 1052* 1054 1054 1056 from_wgs 0(03) 000174 automatic bit(1) level 2 packed unaligned dcl 86 set ref 291* 355* 377* 541 560 581 630 700 769 802 964 1346 get_system_free_area_ 000022 constant entry external dcl 102 ref 1362 get_temp_segment_ 000020 constant entry external dcl 102 ref 1358 graphic_code_util_$decode_dpi 000040 constant entry external dcl 112 ref 1149 graphic_code_util_$decode_scl 000104 constant entry external dcl 1162 ref 1164 graphic_code_util_$decode_scl_nozero 000044 constant entry external dcl 112 ref 1154 graphic_code_util_$decode_spi 000036 constant entry external dcl 112 ref 1145 graphic_code_util_$decode_uid 000042 constant entry external dcl 112 ref 556 607 graphic_code_util_$encode_dpi 000032 constant entry external dcl 112 ref 682 1228 1281 1321 graphic_code_util_$encode_scl 000106 constant entry external dcl 1235 ref 1237 graphic_code_util_$encode_spi 000030 constant entry external dcl 112 ref 1224 1277 graphic_code_util_$encode_uid 000034 constant entry external dcl 112 ref 646 923 1241 graphic_element_length_ 000046 constant entry external dcl 122 ref 1168 graphic_error_table_$abs_pos_in_clipping 000064 external static fixed bin(35,0) dcl 140 ref 731 graphic_error_table_$bad_node 000060 external static fixed bin(35,0) dcl 140 ref 476 graphic_error_table_$compiler_error 000056 external static fixed bin(35,0) dcl 140 set ref 467* graphic_error_table_$no_wgs_yet 000052 external static fixed bin(35,0) dcl 140 ref 1350 graphic_error_table_$not_a_structure 000062 external static fixed bin(35,0) dcl 140 ref 479 graphic_error_table_$recursive_structure 000054 external static fixed bin(35,0) dcl 140 ref 472 graphic_manipulator_$segp 000050 constant entry external dcl 122 ref 1347 graphic_output 000130 automatic pointer dcl 44 set ref 932 1369* hcs_$truncate_seg 000024 constant entry external dcl 102 ref 489 header based structure level 2 in structure "char_node" dcl 5-68 in procedure "gc_" header based structure level 1 dcl 5-42 in procedure "gc_" header based structure level 2 in structure "bit_node" dcl 5-64 in procedure "gc_" i 000106 automatic fixed bin(17,0) dcl 1448 in procedure "make_matrix" set ref 1452* 1454 1454* 1465* 1466 1466* i 000410 automatic fixed bin(17,0) dcl 1301 in procedure "compile_data_block" set ref 1326* 1327* 1331 i 000132 automatic fixed bin(17,0) dcl 44 in procedure "gc_" set ref 416* 417 417* 781* 782 782* 786* 788 788 788 788* i 000426 automatic fixed bin(17,0) dcl 1382 in procedure "grow_tree" set ref 1388* 1389* id 2 based fixed bin(18,0) initial array level 4 in structure "tree" dcl 171 in procedure "gc_" set ref 409 1386 1389 1399* id based fixed bin(18,0) initial level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 526* 576 962* idx 1 based fixed bin(17,0) initial level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 526* 581 584 588 623 623* 668* 693* 963* 1054* 1054 idx 3 based fixed bin(17,0) initial array level 4 in structure "tree" dcl 171 in procedure "gc_" set ref 417 1399* index_array parameter fixed bin(17,0) array dcl 399 set ref 397 411 417* 417 ini 000133 automatic fixed bin(21,0) initial dcl 44 in procedure "gc_" set ref 44* 387 545* 547* 553 556 556 557* 557 597 598* 598 602 603* 603 604 606* 606 607 607 608* 608 632* ini parameter fixed bin(21,0) dcl 1117 in procedure "decode_effector" set ref 1115 1132 1133* 1133 1134 1140* 1140 1168 1170* 1170 input_string parameter char unaligned dcl 44 set ref 375 545 547 553 556 556 597 602 604 607 607 1132 1134 1168* input_string_array based char(1) array unaligned dcl 156 set ref 556 556 607 607 1134 intensity 11 based fixed bin(17,0) level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 535* 741 840* 843 883 995 intensity 11 based fixed bin(17,0) level 3 in structure "prev_tree_frame" dcl 980 in procedure "pop_level" set ref 995 995 995 995 iox_$look_iocb 000074 constant entry external dcl 6-6 ref 1369 iox_$put_chars 000076 constant entry external dcl 6-6 ref 934 item_environment_wall 000134 automatic bit(1) dcl 44 set ref 604* 610* j 000135 automatic fixed bin(17,0) dcl 44 in procedure "gc_" set ref 787* 788 788* j 000107 automatic fixed bin(17,0) dcl 1448 in procedure "make_matrix" set ref 1453* 1454 1454* left_matrix parameter float bin(27) array dcl 1446 ref 1444 1454 1460 1466 length builtin function dcl 202 ref 511 512 545 545 547 547 551 552 597 598 603 606 638 639 642 643 679 680 920 921 1026 1191 1192 level based fixed bin(17,0) initial level 2 dcl 171 set ref 408 521* 574 581 615 619 818 959 960* 960 961 973 990 1034 1051* 1051 1052 1386 1388 1399* linetype 12 based fixed bin(17,0) level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 536* 850* 1000 linetype 12 based fixed bin(17,0) level 3 in structure "prev_tree_frame" dcl 980 in procedure "pop_level" set ref 1000 1000 1000 list_node based structure level 1 dcl 5-85 lsm_$get_blk 000100 constant entry external dcl 7-3 ref 1076 lsm_constants 000050 constant structure level 1 dcl 5-9 lsm_sym_$symk 000102 constant entry external dcl 7-19 ref 360 lsm_type 000322 automatic fixed bin(17,0) dcl 1072 set ref 1076* 1079 1080 1084 matrix parameter float bin(27) array dcl 1418 in procedure "make_matrix" set ref 1416 1432* 1433* 1434* 1435* 1436* 1437* 1438* 1439* 1440* 1444 1454* matrix 22 based float bin(27) array level 4 in structure "tree" dcl 171 in procedure "gc_" set ref 818* matrix 20 based float bin(27) array level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 531* 715* 788* 788 795 818* 821 max_idx 4 based fixed bin(17,0) initial array level 4 in structure "tree" dcl 171 in procedure "gc_" set ref 1399* max_idx 2 based fixed bin(17,0) initial level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 526* 584 670* 692* 964* 966* max_level 1 based fixed bin(17,0) level 2 dcl 171 set ref 431 519 959 1392 1399* 1403 1403 1405 1409* max_levels 000136 automatic fixed bin(17,0) dcl 44 set ref 1392* 1395* 1399 1399 1409 max_string_size 000012 internal static fixed bin(21,0) dcl 130 set ref 511 551 553 638 642 679 687 920 934 934 966 1025 1191 1213 1266 1286 1310 1361* mod builtin function dcl 202 ref 1331 must_put_out 000137 automatic bit(1) dcl 44 set ref 738* 745* 748* 750 n_elements parameter fixed bin(17,0) dcl 1065 in procedure "find_node" set ref 1063 1076* 1099* 1099 n_elements 000140 automatic fixed bin(17,0) dcl 44 in procedure "gc_" set ref 630* 632* 670 707 772 805 875 886* 891* n_elements parameter fixed bin(17,0) dcl 1117 in procedure "decode_effector" set ref 1115 1138* 1140 1145* 1149* 1154* 1164* 1168* 1170 n_types 000050 constant fixed bin(17,0) initial level 2 dcl 5-9 ref 1079 name_node 1 based fixed bin(18,0) level 2 dcl 5-78 set ref 677* nargs 000356 automatic fixed bin(17,0) dcl 1204 set ref 1218* 1219 1224* 1228* 1237* 1241* nchars 000357 automatic fixed bin(17,0) dcl 1204 set ref 1219* 1247 no_args 000236 constant fixed bin(17,0) initial array dcl 1-9 ref 1138 1218 node 2 based structure array level 2 in structure "tree" dcl 171 in procedure "gc_" set ref 519* 525 961 990 1052 node 1 based fixed bin(18,0) array level 2 in structure "list_node" dcl 5-85 in procedure "gc_" ref 588 node_array based fixed bin(17,0) array dcl 156 set ref 556* 607* 646* 923* node_no parameter fixed bin(18,0) dcl 956 in procedure "push_level" ref 954 962 node_no 000141 automatic fixed bin(18,0) dcl 44 in procedure "gc_" set ref 541* 556 567* 576* 588* 589* 607 610* 626 630* 646 922* 923 node_no parameter fixed bin(18,0) dcl 1065 in procedure "find_node" set ref 1063 1076* node_no_arg parameter fixed bin(18,0) dcl 498 ref 494 541 922 node_p 4 based pointer initial level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 588 669* 694* 968* node_p 6 based pointer initial array level 4 in structure "tree" dcl 171 in procedure "gc_" set ref 1399* node_p parameter pointer dcl 1117 in procedure "decode_effector" set ref 1115 1129* node_ptr parameter pointer dcl 1065 in procedure "find_node" set ref 1063 1076* 1082 1106 node_ptr 000220 automatic pointer dcl 5-40 in procedure "gc_" set ref 630* 632* 669 677 694 node_type parameter fixed bin(17,0) dcl 1200 ref 1198 1217 1218 null builtin function dcl 202 ref 44 232 251 271 312 328 344 381 403 429 432 467 467 489 932 968 1129 1172 1349 1355 1357 1365 1368 1376 1385 1399 1401 number_used parameter fixed bin(21,0) dcl 33 set ref 375 387* one 000407 automatic bit(3) initial unaligned dcl 1301 set ref 1301* 1327 1331 outi 000142 automatic fixed bin(21,0) initial dcl 44 set ref 44* 512* 514* 551 552* 552 553 554* 554 638 639* 639 642 643* 643 646 646 647* 647 679 680* 680 682 682 685* 685 687 688* 688 920 921* 921 923 923 925* 925 928 934 1025 1026* 1026 1191 1192* 1192 1213 1214* 1214 1216 1247* 1247 1266 1267* 1267 1270 1272* 1272 1277 1277 1278* 1278 1281 1281 1283* 1283 1286 1287* 1287 1310 1311* 1311 1314 1316* 1316 1321 1321 1322* 1322 1327 1328* 1328 1331 1332* 1332 output_array_sentinel 7 based bit(1) level 3 dcl 197 set ref 569* 657* 986 1044 output_string based char unaligned dcl 156 set ref 511* 551* 553* 638* 642* 679* 687* 920* 934 934 1025* 1191* 1213* 1266* 1286* 1310* output_string_array based char(1) array unaligned dcl 156 set ref 646 646 682 682 923 923 1216 1270 1277 1277 1281 1281 1314 1321 1321 output_string_bit_array based bit(9) array unaligned dcl 1301 set ref 1327* 1331* output_string_ptr 2 000174 automatic pointer level 2 dcl 86 set ref 503* 504* 511 551 553 638 642 646 646 679 682 682 687 920 923 923 934 934 1025 1191 1213 1216 1266 1270 1277 1277 1281 1281 1286 1310 1314 1321 1321 1327 1331 position 000202 automatic structure level 1 unaligned dcl 94 precollapsed 10 based bit(1) level 3 dcl 197 set ref 529* 984 1021* 1037 1056* prev_tree_frame based structure level 1 dcl 980 prev_tree_framep 000304 automatic pointer dcl 982 set ref 990* 995 995 995 995 1000 1000 1000 1004 1004 1004 1008 1008 1008 1012 1012 1012 return_len parameter fixed bin(21,0) dcl 33 set ref 285 285 375 928* return_p parameter pointer dcl 33 ref 285 285 375 503 return_string 0(02) 000174 automatic bit(1) level 2 packed unaligned dcl 86 set ref 231* 239* 249* 257* 268* 276* 288* 311* 319* 326* 334* 341* 349* 380* 503 928 1367 right_matrix parameter float bin(27) array dcl 1446 ref 1444 1454 right_vector parameter float bin(27) array dcl 1462 ref 1460 1466 rotations parameter fixed bin(17,0) array dcl 1418 ref 1416 1424 1424 1425 1425 1426 1426 round builtin function dcl 202 ref 760 946 scaled_zeroes 000276 constant fixed bin(35,6) initial array dcl 135 ref 948 scaling 41 based float bin(27) array level 3 dcl 197 set ref 534* 788 793* 816* 970* scalings parameter float bin(27) array dcl 1418 ref 1416 1432 1433 1434 1435 1436 1437 1438 1439 1440 sensitivity 13 based fixed bin(17,0) level 3 in structure "prev_tree_frame" dcl 980 in procedure "pop_level" set ref 1004 1004 1004 sensitivity 13 based fixed bin(17,0) level 3 in structure "tree_frame" dcl 197 in procedure "gc_" set ref 537* 858* 1004 sind builtin function dcl 202 ref 1424 1425 1426 string 1 based bit level 2 in structure "bit_node" dcl 5-64 in procedure "gc_" set ref 1324 string builtin function dcl 202 in procedure "gc_" ref 1136 string 1 based char level 2 in structure "char_node" packed unaligned dcl 5-68 in procedure "gc_" ref 687 struc_depth parameter fixed bin(17,0) dcl 399 set ref 397 408* 411 416 structural_effector_codes defined char(1) array unaligned dcl 1-5 ref 634 1136 sub_err_ 000026 constant entry external dcl 102 ref 467 substr builtin function dcl 202 set ref 511* 545 547 551* 553* 553 597 602 604 638* 642* 679* 687* 920* 1025* 1132 1191* 1213* 1266* 1286* 1286 1310* 1327 1331 sum builtin function dcl 202 ref 1454 1466 sx 000100 automatic float bin(27) dcl 1422 set ref 1424* 1433 1434 1436 1437 1439 sy 000102 automatic float bin(27) dcl 1422 set ref 1425* 1433 1434 1436 1437 1438 sym_len 000143 automatic fixed bin(17,0) dcl 44 set ref 677* 682 687 688 sym_node 000144 automatic fixed bin(18,0) dcl 44 set ref 360* sym_p 000146 automatic pointer dcl 44 set ref 677* 687 sym_type 000150 automatic fixed bin(17,0) dcl 44 set ref 677* symbol_node based structure level 1 dcl 5-78 sys_area based area(1024) dcl 156 ref 431 1399 1405 sys_area_p 000014 internal static pointer initial dcl 130 set ref 431 1362* 1399 1405 sys_info$max_seg_size 000072 external static fixed bin(35,0) dcl 151 ref 1361 sz 000104 automatic float bin(27) dcl 1422 set ref 1426* 1433 1434 1435 1436 1437 temp_array 000353 automatic fixed bin(17,0) array dcl 1204 set ref 1227* 1228* temp_matrix 000151 automatic float bin(27) array dcl 44 set ref 816* 818* temp_ptr 000162 automatic pointer dcl 44 set ref 1397* 1401 1403 1405 temp_scaled 000164 automatic fixed bin(35,6) array dcl 44 set ref 760* 761 946* 948 951 temp_seg_ptr 000010 internal static pointer initial dcl 128 set ref 1357 1358* 1373 text 0(09) based char(262140) level 2 packed unaligned dcl 4-59 ref 1286 text_effector based structure level 1 dcl 4-59 this_level 41 based structure level 2 dcl 197 to_ptr 000404 automatic pointer dcl 1301 in procedure "compile_data_block" set ref 1314* 1315 to_ptr 000372 automatic pointer dcl 1262 in procedure "compile_text_element" set ref 1270* 1271 top_level_node parameter fixed bin(18,0) dcl 399 set ref 397 409* trace 2 based structure array level 3 in structure "tree" dcl 171 in procedure "gc_" trace based structure level 2 in structure "tree_frame" dcl 197 in procedure "gc_" transformation 37 based bit(1) level 4 dcl 197 set ref 715 795* 821* tree based structure level 1 dcl 171 set ref 431 1399 1403* 1403 1405 tree_frame based structure level 1 dcl 197 set ref 1049* tree_ptr 000016 internal static pointer initial dcl 133 set ref 403 408 409 417 429 431 432* 519 521 525 574 581 615 619 818 818 959 959 960 960 961 961 973 973 990 990 1034 1051 1051 1052 1052 1365 1385 1386 1386 1388 1389 1392 1397 1399* 1403 1409 type parameter fixed bin(17,0) dcl 1065 in procedure "find_node" set ref 1063 1086* 1089* 1092* 1095 1095 1102* 1105* 1109* type 000167 automatic fixed bin(17,0) dcl 44 in procedure "gc_" set ref 630* 632* 634 637 651 718 719 743 764* 799* 825* 878* type parameter fixed bin(17,0) dcl 1117 in procedure "decode_effector" set ref 1115 1136* 1137 1138 1139 1154 1172 underflow 000000 stack reference condition dcl 204 ref 1428 1450 1464 unspec builtin function dcl 202 set ref 519* 795 795 821 821 948 948 973* 973 1012 1012 1049* 1403* 1403 value_node 000170 automatic fixed bin(18,0) dcl 44 set ref 360* 365* vector parameter float bin(27) array dcl 1462 set ref 1460 1466* waiting_to_make_array 000171 automatic bit(1) initial dcl 44 set ref 44* 561* 567* 569 636 656 657* 676 713 778 811 837 847 855 863 872 885 986 1024 1046* 1190 wgs_p 000172 automatic pointer dcl 44 set ref 360* 1076* 1347* 1349 1355* zero_node_id 000167 constant char(3) initial unaligned dcl 2-70 ref 508 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Any_device internal static fixed bin(17,0) initial dcl 3-9 Blink internal static fixed bin(17,0) initial dcl 3-9 Center internal static fixed bin(17,0) initial dcl 3-9 Clear_seg internal static fixed bin(17,0) initial dcl 7-29 Clipping internal static fixed bin(17,0) initial dcl 3-9 Create_seg internal static fixed bin(17,0) initial dcl 7-29 Create_symbol internal static fixed bin(17,0) initial dcl 7-24 Dash_dotted internal static fixed bin(17,0) initial dcl 3-9 Dashed internal static fixed bin(17,0) initial dcl 3-9 Delete_symbol internal static fixed bin(17,0) initial dcl 7-24 Dotted internal static fixed bin(17,0) initial dcl 3-9 Find_or_create_symbol internal static fixed bin(17,0) initial dcl 7-24 Find_seg internal static fixed bin(17,0) initial dcl 7-29 Full_intensity internal static fixed bin(17,0) initial dcl 3-9 Graphic_Element_Lengths internal static fixed bin(17,0) initial array dcl 2-60 Half_intensity internal static fixed bin(17,0) initial dcl 3-9 Insensitive internal static fixed bin(17,0) initial dcl 3-9 Invisible internal static fixed bin(17,0) initial dcl 3-9 Joystick internal static fixed bin(17,0) initial dcl 3-9 Keyboard internal static fixed bin(17,0) initial dcl 3-9 LSM_version_6 internal static fixed bin(17,0) initial dcl 5-5 LSM_version_7 internal static fixed bin(17,0) initial dcl 5-5 Left internal static fixed bin(17,0) initial dcl 3-9 Light_pen internal static fixed bin(17,0) initial dcl 3-9 Long_dashed internal static fixed bin(17,0) initial dcl 3-9 Lower_center internal static fixed bin(17,0) initial dcl 3-9 Lower_left internal static fixed bin(17,0) initial dcl 3-9 Lower_right internal static fixed bin(17,0) initial dcl 3-9 Mouse internal static fixed bin(17,0) initial dcl 3-9 Null internal static fixed bin(17,0) initial dcl 3-9 On_dup_error internal static fixed bin(17,0) initial dcl 3-9 On_dup_source internal static fixed bin(17,0) initial dcl 3-9 On_dup_target_then_nulls internal static fixed bin(17,0) initial dcl 3-9 On_dup_target_then_source internal static fixed bin(17,0) initial dcl 3-9 Point internal static fixed bin(17,0) initial dcl 3-9 Right internal static fixed bin(17,0) initial dcl 3-9 Rotation internal static fixed bin(17,0) initial dcl 3-9 SCL_arg_length internal static fixed bin(17,0) initial dcl 1-47 Sensitive internal static fixed bin(17,0) initial dcl 3-9 Solid internal static fixed bin(17,0) initial dcl 3-9 Steady internal static fixed bin(17,0) initial dcl 3-9 Symboltable internal static fixed bin(17,0) initial dcl 4-3 Tablet_and_pen internal static fixed bin(17,0) initial dcl 3-9 Terminal_program internal static fixed bin(17,0) initial dcl 3-9 Trackball internal static fixed bin(17,0) initial dcl 3-9 Upper_center internal static fixed bin(17,0) initial dcl 3-9 Upper_left internal static fixed bin(17,0) initial dcl 3-9 Upper_right internal static fixed bin(17,0) initial dcl 3-9 Vector internal static fixed bin(17,0) initial dcl 3-9 arg_formats internal static structure level 1 dcl 1-33 array_node based structure level 1 dcl 5-89 char_str based char unaligned dcl 156 clipping_effector based structure level 1 dcl 4-40 color_effector based structure level 1 dcl 4-53 effector_length internal static fixed bin(17,0) initial array dcl 4-5 fixed_node based structure level 1 dcl 5-56 float_node based structure level 1 dcl 5-60 floating_effector based structure level 1 dcl 4-18 graphic_code_util_$decode_scl 000000 constant entry external dcl 112 graphic_code_util_$encode_scl 000000 constant entry external dcl 112 indirect_node based structure level 1 dcl 5-52 iox_$attach_name 000000 constant entry external dcl 6-6 iox_$attach_ptr 000000 constant entry external dcl 6-6 iox_$close 000000 constant entry external dcl 6-6 iox_$control 000000 constant entry external dcl 6-6 iox_$delete_record 000000 constant entry external dcl 6-6 iox_$destroy_iocb 000000 constant entry external dcl 6-6 iox_$detach_iocb 000000 constant entry external dcl 6-6 iox_$err_no_operation 000000 constant entry external dcl 6-6 iox_$err_not_attached 000000 constant entry external dcl 6-6 iox_$err_not_closed 000000 constant entry external dcl 6-6 iox_$err_not_open 000000 constant entry external dcl 6-6 iox_$error_output external static pointer dcl 6-35 iox_$find_iocb 000000 constant entry external dcl 6-6 iox_$find_iocb_n 000000 constant entry external dcl 6-6 iox_$get_chars 000000 constant entry external dcl 6-6 iox_$get_line 000000 constant entry external dcl 6-6 iox_$modes 000000 constant entry external dcl 6-6 iox_$move_attach 000000 constant entry external dcl 6-6 iox_$open 000000 constant entry external dcl 6-6 iox_$position 000000 constant entry external dcl 6-6 iox_$propagate 000000 constant entry external dcl 6-6 iox_$read_key 000000 constant entry external dcl 6-6 iox_$read_length 000000 constant entry external dcl 6-6 iox_$read_record 000000 constant entry external dcl 6-6 iox_$rewrite_record 000000 constant entry external dcl 6-6 iox_$seek_key 000000 constant entry external dcl 6-6 iox_$user_input external static pointer dcl 6-35 iox_$user_io external static pointer dcl 6-35 iox_$user_output external static pointer dcl 6-35 iox_$write_record 000000 constant entry external dcl 6-6 lsm based structure level 1 dcl 5-27 lsm_$make_blk 000000 constant entry external dcl 7-3 lsm_$mk_char 000000 constant entry external dcl 7-3 lsm_$replace_blk 000000 constant entry external dcl 7-3 lsm_$replicate 000000 constant entry external dcl 7-3 lsm_$set_blk 000000 constant entry external dcl 7-3 lsm_fs_$compact 000000 constant entry external dcl 7-10 lsm_fs_$free 000000 constant entry external dcl 7-10 lsm_fs_$init 000000 constant entry external dcl 7-10 lsm_fs_$init_seg 000000 constant entry external dcl 7-10 lsm_fs_$merge_symbol 000000 constant entry external dcl 7-10 lsm_fs_$move_struc 000000 constant entry external dcl 7-10 lsm_fs_$pull 000000 constant entry external dcl 7-10 lsm_fs_$push 000000 constant entry external dcl 7-10 lsm_segptr automatic pointer dcl 5-25 lsm_sym_$find_table 000000 constant entry external dcl 7-19 lsm_sym_$sym_list 000000 constant entry external dcl 7-19 lsm_sym_$symn 000000 constant entry external dcl 7-19 modal_effector based structure level 1 dcl 4-49 node_p automatic pointer dcl 44 position_effector based structure level 1 dcl 4-22 request_for_status internal static char(1) initial dcl 2-72 rotate_effector based structure level 1 dcl 4-34 rtrim builtin function dcl 202 scale_effector based structure level 1 dcl 4-28 subscriptrange 000000 stack reference condition dcl 206 symtab_node based structure level 1 dcl 5-72 temp_length automatic fixed bin(21,0) dcl 44 NAMES DECLARED BY EXPLICIT CONTEXT. Loop_end 004101 constant label dcl 915 ref 619 Type 000075 constant label array(0:33) dcl 656 in procedure "compile_node" ref 651 Type 000137 constant label array(2:9) dcl 1086 in procedure "find_node" ref 1084 Type_end 004101 constant label dcl 913 ref 672 696 750 765 800 826 828 845 879 883 887 892 bad_type 002163 constant label dcl 476 ref 896 1079 1080 1095 1112 1212 cleaner_up 002270 constant entry internal dcl 487 ref 296 300 363 367 483 collapse_level 004562 constant entry internal dcl 1032 ref 779 812 839 849 857 865 874 1018 compile_data_block 005555 constant entry internal dcl 1294 ref 891 compile_node 002317 constant entry internal dcl 494 ref 298 365 385 compile_null_element 005176 constant entry internal dcl 1186 ref 626 compile_simple_element 005213 constant entry internal dcl 1198 ref 764 799 825 878 948 995 1000 1004 1008 1012 compile_text_element 005403 constant entry internal dcl 1255 ref 886 d 005372 constant label dcl 1244 in procedure "compile_simple_element" d 005131 constant label dcl 1168 in procedure "decode_effector" d 000501 constant entry external dcl 227 d_switch 000543 constant entry external dcl 235 da 000605 constant entry external dcl 246 da_switch 000645 constant entry external dcl 254 decode_effector 004727 constant entry internal dcl 1115 ref 632 display 000515 constant entry external dcl 227 display_append 000621 constant entry external dcl 246 display_append_switch 000661 constant entry external dcl 254 display_name 001147 constant entry external dcl 307 display_name_append 001303 constant entry external dcl 323 display_name_append_switch 001357 constant entry external dcl 331 display_name_switch 001225 constant entry external dcl 315 display_switch 000557 constant entry external dcl 235 dn 001125 constant entry external dcl 307 dn_switch 001203 constant entry external dcl 315 dna 001261 constant entry external dcl 323 dna_switch 001335 constant entry external dcl 331 dpi 005026 constant label dcl 1148 in procedure "decode_effector" dpi 005272 constant label dcl 1227 in procedure "compile_simple_element" encode 000156 constant label array(6) dcl 1224 ref 1221 encode_common 005400 constant label dcl 1247 ref 1225 1229 1239 1242 error_path 001717 constant entry external dcl 397 expand_string 001644 constant entry external dcl 375 find_node 004630 constant entry internal dcl 1063 ref 630 677 gc_ 000456 constant entry external dcl 18 get_to_cur_pos 004212 constant entry internal dcl 941 ref 754 885 1045 graphic_compiler_ 000466 constant entry external dcl 18 grow_tree 006114 constant entry internal dcl 1380 ref 959 1365 initialize 005740 constant entry internal dcl 1342 ref 294 358 383 invisible 003432 constant label dcl 744 ref 741 l 000707 constant entry external dcl 266 l_switch 000747 constant entry external dcl 274 ln 001413 constant entry external dcl 339 ln_switch 001467 constant entry external dcl 347 load 000723 constant entry external dcl 266 load_name 001435 constant entry external dcl 339 load_name_switch 001511 constant entry external dcl 347 load_switch 000763 constant entry external dcl 274 make_matrix 006270 constant entry internal dcl 1416 in procedure "gc_" ref 444 816 make_matrix 002061 constant entry external dcl 438 mode_common 004060 constant label dcl 878 ref 843 853 861 869 multiply_3x3_x_1x3 002135 constant entry external dcl 456 multiply_3x3_x_1x3 006553 constant entry internal dcl 1460 in procedure "gc_" ref 460 715 multiply_3x3_x_3x3 002107 constant entry external dcl 449 multiply_3x3_x_3x3 006454 constant entry internal dcl 1444 in procedure "gc_" ref 453 818 name_common 001543 constant label dcl 355 ref 313 321 329 337 345 353 node_common 001060 constant label dcl 291 ref 233 241 252 260 272 280 289 non_local_return 002173 constant label dcl 483 ref 469 474 477 481 732 1077 1348 1351 1359 1370 not_valid_msgc 002167 constant label dcl 479 ref 547 1137 1181 pop_level 004410 constant entry internal dcl 978 ref 584 599 process 000147 constant label array(0:6) dcl 1144 ref 1142 prune_tree 002023 constant entry external dcl 426 push_level 004305 constant entry internal dcl 954 ref 567 589 610 recursive_structure 002157 constant label dcl 472 ref 1389 return_string 001034 constant entry external dcl 285 rs 001014 constant entry external dcl 285 scl 005064 constant label dcl 1153 in procedure "decode_effector" scl 005331 constant label dcl 1231 in procedure "compile_simple_element" spi 005002 constant label dcl 1144 in procedure "decode_effector" spi 005247 constant label dcl 1224 in procedure "compile_simple_element" sub_err_caller 002200 constant entry internal dcl 463 ref 1034 1244 t 005372 constant label dcl 1244 in procedure "compile_simple_element" t 005131 constant label dcl 1168 in procedure "decode_effector" uid 005347 constant label dcl 1241 write_it 004156 constant label dcl 932 NAMES DECLARED BY CONTEXT OR IMPLICATION. dim builtin function ref 411 index builtin function ref 1136 lbound builtin function ref 417 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 7756 10066 7010 7766 Length 10606 7010 110 504 746 10 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME gc_ 563 external procedure is an external procedure. on unit on line 296 64 on unit on unit on line 363 64 on unit sub_err_caller internal procedure shares stack frame of external procedure gc_. cleaner_up 74 internal procedure is called by several nonquick procedures. compile_node internal procedure shares stack frame of external procedure gc_. get_to_cur_pos internal procedure shares stack frame of external procedure gc_. push_level internal procedure shares stack frame of external procedure gc_. pop_level internal procedure shares stack frame of external procedure gc_. collapse_level internal procedure shares stack frame of external procedure gc_. find_node internal procedure shares stack frame of external procedure gc_. decode_effector internal procedure shares stack frame of external procedure gc_. begin block on line 1156 begin block shares stack frame of external procedure gc_. compile_null_element internal procedure shares stack frame of external procedure gc_. compile_simple_element internal procedure shares stack frame of external procedure gc_. begin block on line 1231 begin block shares stack frame of external procedure gc_. compile_text_element internal procedure shares stack frame of external procedure gc_. compile_data_block internal procedure shares stack frame of external procedure gc_. initialize internal procedure shares stack frame of external procedure gc_. grow_tree internal procedure shares stack frame of external procedure gc_. make_matrix 114 internal procedure enables or reverts conditions. on unit on line 1428 64 on unit on unit on line 1450 64 on unit on unit on line 1464 64 on unit STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 temp_seg_ptr gc_ 000012 max_string_size gc_ 000014 sys_area_p gc_ 000016 tree_ptr gc_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME gc_ 000100 Array_header_chars gc_ 000101 List_header_chars gc_ 000102 Null_node_chars gc_ 000104 abs_move_needed gc_ 000106 auto_temp_seg_ptr gc_ 000110 char gc_ 000111 copy_direct gc_ 000112 contents_p gc_ 000114 datap gc_ 000116 done gc_ 000117 effector_char gc_ 000120 fixed_buffer gc_ 000123 float_buffer gc_ 000126 frame_ptr gc_ 000130 graphic_output gc_ 000132 i gc_ 000133 ini gc_ 000134 item_environment_wall gc_ 000135 j gc_ 000136 max_levels gc_ 000137 must_put_out gc_ 000140 n_elements gc_ 000141 node_no gc_ 000142 outi gc_ 000143 sym_len gc_ 000144 sym_node gc_ 000146 sym_p gc_ 000150 sym_type gc_ 000151 temp_matrix gc_ 000162 temp_ptr gc_ 000164 temp_scaled gc_ 000167 type gc_ 000170 value_node gc_ 000171 waiting_to_make_array gc_ 000172 wgs_p gc_ 000174 control gc_ 000202 position gc_ 000220 node_ptr gc_ 000262 float_temp get_to_cur_pos 000304 prev_tree_framep pop_level 000322 lsm_type find_node 000332 arg_type decode_effector 000350 fill_p compile_simple_element 000352 arg_format compile_simple_element 000353 temp_array compile_simple_element 000356 nargs compile_simple_element 000357 nchars compile_simple_element 000370 fixed_array compile_text_element 000372 to_ptr compile_text_element 000402 bcp compile_data_block 000404 to_ptr compile_data_block 000406 fixed_array compile_data_block 000407 one compile_data_block 000410 i compile_data_block 000426 i grow_tree 000427 current_node grow_tree make_matrix 000100 sx make_matrix 000101 cx make_matrix 000102 sy make_matrix 000103 cy make_matrix 000104 sz make_matrix 000105 cz make_matrix 000106 i make_matrix 000107 j make_matrix THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_e_as r_ne_as alloc_bs call_ext_out_desc call_ext_out call_int_this call_int_other return fl2_to_fx1 bound_check_signal mod_fx1 enable shorten_stack ext_entry ext_entry_desc int_entry fl2_to_fxscaled round_fx1 sind cosd alloc_based free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. get_system_free_area_ get_temp_segment_ graphic_code_util_$decode_dpi graphic_code_util_$decode_scl graphic_code_util_$decode_scl_nozero graphic_code_util_$decode_spi graphic_code_util_$decode_uid graphic_code_util_$encode_dpi graphic_code_util_$encode_scl graphic_code_util_$encode_spi graphic_code_util_$encode_uid graphic_element_length_ graphic_manipulator_$segp hcs_$truncate_seg iox_$look_iocb iox_$put_chars lsm_$get_blk lsm_sym_$symk sub_err_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$out_of_sequence error_table_$smallarg graphic_error_table_$abs_pos_in_clipping graphic_error_table_$bad_node graphic_error_table_$compiler_error graphic_error_table_$no_wgs_yet graphic_error_table_$not_a_structure graphic_error_table_$recursive_structure sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 44 000445 18 000455 18 000474 227 000475 229 000526 231 000532 232 000534 233 000536 235 000537 237 000570 239 000574 240 000576 241 000602 246 000603 248 000632 249 000634 251 000640 252 000642 254 000643 256 000672 257 000674 259 000700 260 000704 266 000705 268 000734 271 000742 272 000744 274 000745 276 000774 279 001002 280 001006 285 001007 286 001051 288 001055 289 001057 291 001060 294 001062 296 001063 298 001105 300 001114 301 001120 307 001121 309 001166 311 001172 312 001174 313 001176 315 001177 317 001244 319 001250 320 001252 321 001256 323 001257 325 001322 326 001324 328 001330 329 001332 331 001333 333 001376 334 001400 336 001404 337 001410 339 001411 341 001454 344 001462 345 001464 347 001465 349 001530 352 001536 353 001542 355 001543 358 001545 360 001546 361 001604 363 001606 365 001630 367 001632 369 001636 375 001637 377 001667 380 001675 381 001677 383 001701 385 001702 387 001705 389 001711 397 001712 403 001730 404 001735 405 001737 408 001740 409 001744 411 001747 412 001760 413 001762 416 001763 417 001772 418 002014 420 002016 421 002017 426 002020 428 002034 429 002035 431 002042 432 002051 433 002054 438 002055 444 002067 445 002102 449 002103 453 002115 454 002130 456 002131 460 002143 461 002156 472 002157 474 002162 476 002163 477 002166 479 002167 481 002172 483 002173 485 002177 463 002200 467 002211 469 002266 487 002267 489 002275 491 002316 494 002317 501 002321 503 002322 504 002331 506 002333 507 002341 508 002344 510 002351 511 002354 512 002360 513 002362 514 002363 519 002365 521 002400 525 002401 526 002403 529 002406 530 002407 531 002410 532 002413 534 002466 535 002474 536 002476 537 002500 538 002502 539 002507 541 002511 545 002520 547 002533 551 002537 552 002544 553 002546 554 002554 556 002556 557 002610 560 002612 561 002615 562 002617 564 002641 567 002642 569 002644 574 002650 576 002653 581 002655 584 002666 588 002673 589 002675 592 002701 595 002703 596 002704 597 002706 598 002721 599 002722 600 002723 602 002724 603 002730 604 002731 606 002737 607 002740 608 002772 610 002774 611 002776 613 002777 615 003001 616 003006 619 003007 623 003012 626 003017 630 003023 632 003031 634 003033 636 003040 637 003043 638 003046 639 003053 640 003055 642 003056 643 003063 646 003065 647 003115 651 003117 656 003121 657 003124 659 003130 661 003152 664 003153 668 003156 669 003161 670 003163 672 003165 676 003166 677 003171 679 003212 680 003217 682 003220 685 003250 687 003252 688 003262 692 003264 693 003267 694 003270 696 003272 700 003273 706 003276 707 003307 710 003315 713 003317 715 003322 718 003344 719 003352 722 003361 723 003363 725 003364 730 003366 731 003371 732 003374 735 003375 736 003377 738 003421 739 003423 741 003424 743 003427 744 003432 745 003444 746 003445 748 003446 750 003450 754 003452 758 003455 759 003467 760 003505 761 003523 764 003536 765 003540 769 003541 771 003544 772 003555 775 003563 778 003565 779 003570 781 003571 782 003576 784 003603 786 003605 787 003612 788 003617 790 003630 791 003632 793 003634 795 003643 797 003650 799 003651 800 003653 802 003654 804 003657 805 003670 808 003676 811 003700 812 003703 814 003704 816 003716 818 003731 821 003754 823 003762 825 003763 826 003765 828 003766 837 003767 839 003772 840 003773 843 003776 845 004001 847 004002 849 004005 850 004006 853 004011 855 004012 857 004015 858 004016 861 004021 863 004022 865 004025 866 004026 869 004031 872 004032 874 004035 875 004036 878 004060 879 004062 883 004063 885 004066 886 004072 887 004074 891 004075 892 004077 896 004100 915 004101 919 004102 920 004105 921 004112 922 004113 923 004116 925 004145 928 004147 932 004156 934 004164 936 004206 939 004211 941 004212 945 004213 946 004231 948 004247 951 004271 952 004304 954 004305 959 004307 960 004316 961 004320 962 004325 963 004330 964 004331 966 004336 967 004340 968 004343 970 004345 971 004353 973 004377 975 004407 978 004410 984 004411 986 004414 990 004421 995 004427 1000 004440 1004 004463 1008 004506 1012 004531 1017 004543 1018 004545 1021 004546 1024 004550 1025 004553 1026 004560 1029 004561 1032 004562 1034 004563 1037 004574 1039 004600 1044 004604 1045 004606 1046 004607 1049 004610 1051 004614 1052 004617 1054 004624 1056 004625 1058 004627 1063 004630 1074 004632 1076 004633 1077 004655 1079 004657 1080 004662 1082 004664 1084 004671 1086 004672 1087 004674 1089 004675 1090 004677 1092 004700 1095 004702 1098 004705 1099 004707 1100 004711 1102 004712 1103 004714 1105 004715 1106 004717 1107 004722 1109 004723 1110 004725 1112 004726 1115 004727 1129 004731 1130 004733 1132 004734 1133 004743 1134 004744 1136 004754 1137 004764 1138 004765 1139 004767 1140 004772 1142 005001 1144 005002 1145 005004 1146 005025 1148 005026 1149 005030 1150 005051 1151 005063 1153 005064 1154 005066 1164 005113 1166 005130 1168 005131 1170 005161 1172 005162 1175 005170 1176 005172 1179 005174 1181 005175 1186 005176 1190 005177 1191 005203 1192 005210 1193 005212 1198 005213 1212 005215 1213 005222 1214 005227 1216 005230 1217 005235 1218 005241 1219 005243 1221 005246 1224 005247 1225 005271 1227 005272 1228 005307 1229 005330 1237 005331 1239 005346 1241 005347 1242 005371 1244 005372 1247 005400 1249 005402 1255 005403 1266 005405 1267 005413 1269 005414 1270 005417 1271 005424 1272 005433 1273 005435 1276 005436 1277 005442 1278 005472 1280 005473 1281 005477 1283 005530 1286 005532 1287 005550 1289 005554 1294 005555 1301 005557 1310 005561 1311 005567 1313 005570 1314 005573 1315 005600 1316 005607 1317 005611 1320 005612 1321 005614 1322 005644 1324 005646 1326 005653 1327 005663 1328 005702 1329 005703 1331 005706 1332 005735 1334 005737 1342 005740 1344 005741 1346 005742 1347 005745 1348 005756 1349 005760 1350 005764 1351 005767 1353 005770 1355 005771 1357 005773 1358 006000 1359 006023 1361 006025 1362 006031 1365 006037 1367 006045 1368 006050 1369 006054 1370 006103 1373 006105 1374 006110 1376 006111 1378 006113 1380 006114 1385 006115 1386 006122 1388 006127 1389 006135 1390 006144 1392 006147 1393 006154 1395 006155 1397 006157 1399 006161 1401 006231 1403 006234 1405 006254 1409 006262 1411 006266 1416 006267 1424 006275 1424 006304 1425 006310 1425 006320 1426 006324 1426 006334 1428 006340 1432 006355 1433 006362 1434 006376 1435 006407 1436 006413 1437 006424 1438 006436 1439 006442 1440 006446 1442 006452 1444 006453 1450 006461 1452 006476 1453 006503 1454 006510 1455 006545 1456 006547 1458 006551 1460 006552 1464 006560 1465 006575 1466 006602 1467 006631 1469 006633 ----------------------------------------------------------- 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