ASSEMBLY LISTING OF SEGMENT >special_ldd>install>MR12.0-1206>basic_operators_.alm ASSEMBLED ON: 11/05/86 1048.9 mst Wed OPTIONS USED: list ASSEMBLED BY: ALM Version 6.7 October 1986 ASSEMBLER CREATED: 10/08/86 1557.5 mst Wed  1 " ***********************************************************  2 " * *  3 " * Copyright, (C) Honeywell Information Systems Inc., 1982 *  4 " * *  5 " * Copyright (c) 1972 by Massachusetts Institute of *  6 " * Technology and Honeywell Information Systems, Inc. *  7 " * *  8 " ***********************************************************  9  10 "  11 " Operators segment for Multics BASIC  12 " Inital Version: Spring 1973 by BLW  13 " Modified: 18 March 1974 by BLW to fix bug 017  14 " Modified: 28 March 1974 by BLW to fix bugs 018 & 021 15 " Modified: 19 July 1974 by BLW to fix bugs 034, 034, 035, & 041  16 " Modified: 5 August 1974 by BLW to preserve EAQ around string assignment  17 " Modified: 16 August 1974 by BLW to fix bug 046  18 " Modified: 27 August 1974 by BLW to fix bug 047  19 " Modified: 9 July by J.M. Broughton for debuggers to find op return loc  20 " Modified: 30 April 1976 by MBW to add macros for extended precision and fix bugs 060, 062  21 " Modified: 8 December 1976 by MBW to correct references to string segment 22 " Modified: 24 January 1977 by MBW to fix bugs 063 and 065 23 " Modified: 26 January 1977 by MBW to pass char strings as char (*) to non-basic progs 24 " Modified: 14 July 1977 by MBW to convert to alm and fix bug 075 (ep list assign) 25 " Modified: 23 September 1977 by MBW to fix bugs 078 and 079  26 " Modified: 25 May 1978 by MBW to fix bug 081  27 " Modified: 24 November 1980 by MBW to fix bugs 087 and 091  28 " Modified: 1 April 1980 by MBW to reference strings thru pr5 and call functions with pr3  29 " Modified: 15 July 1981 by MBW to fix bug 098 (using temp3 to store return loc)  30 " Modified: 11 September 1981 by MBW to fix bug 102 (string data relocation)  31 " Modified: 15 May 1984 by DWL to document use of sst$ for mid$  32 " Modified: 22 May 1984 by DWL to add left$  33 " Modified: 23 May 1984 by DWL to add right$  34 "  35 tempd print_using_ptr  36 "  37 tempd abort_label(2),conversion_label(2),size_label(2),on_units(6) 38 tempd program_header,text_base_ptr,string_segment  39 tempd fcb_pt  40 tempd arglist1(2),runtime_arglist(2)  41 tempd cpu_start,determinant  42 temp fcb(17),file_number,number,pdl,program_header_offset  43 temp numeric_data_pos,string_data_pos,random  44 temp math_block,last_frame,next_frame,number_read,pu_pos,pu_length 45 temp definitions,fn_temp1,fn_temp2,entryname,flags,string_value  46 tempd temp1,temp2,temp3  47 "  48 " temp3 doubles as the return pt to the actual program when a call is  49 " performed, its location must be the same as for ep basic for use by debuggers 50 "  000102 51 bool program_header_equ,102 should be equal to program_header  000200 52 equ args,128  000040 53 equ math_block_size,32 size of storage block for math routines 54 "  55 include stack_header  1-1 " BEGIN INCLUDE FILE ... stack_header.incl.alm 3/72 Bill Silver  1-2 "  1-3 " modified 7/76 by M. Weaver for *system links and more system use of areas 1-4 " modified 3/77 by M. Weaver to add rnt_ptr  1-5 " modified 7/77 by S. Webber to add run_unit_depth and assign_linkage_ptr  1-6 " modified 6/83 by J. Ives to add trace_frames and in_trace.  1-7  1-8 " HISTORY COMMENTS: 1-9 " 1) change(86-06-24,DGHowe), approve(86-06-24,MCR7396),  1-10 " audit(86-08-05,Schroth), install(86-11-03,MR12.0-1206):  1-11 " added the heap_header_ptr definition  1-12 " 2) change(86-08-12,Kissel), approve(86-08-12,MCR7473),  1-13 " audit(86-10-10,Fawcett), install(86-11-03,MR12.0-1206):  1-14 " Modified to support control point management. These changes were 1-15 " actually made in February 1985 by G. Palter.  1-16 " 3) change(86-10-22,Fawcett), approve(86-10-22,MCR7473),  1-17 " audit(86-10-22,Farley), install(86-11-03,MR12.0-1206):  1-18 " Remove the old_lot pointer and replace it with cpm_data_ptr. Use the 18  1-19 " bit pad after cur_lot_size for the cpm_enabled. This was done to save 1-20 " some space int the stack header and change the cpd_ptr unal to  1-21 " cpm_data_ptr (ITS pair).  1-22 " END HISTORY COMMENTS 1-23  000004 1-24 equ stack_header.cpm_data_ptr,4 ptr to control point for this stack  000006 1-25 equ stack_header.combined_stat_ptr,6 ptr to separate static area  1-26  000010 1-27 equ stack_header.clr_ptr,8 ptr to area containing linkage sections  000012 1-28 equ stack_header.max_lot_size,10 number of words allowed in lot (DU)  000012 1-29 equ stack_header.main_proc_invoked,10 nonzero if main proc was invoked in run unit (DL)  000012 1-30 equ stack_header.run_unit_depth,10 number of active run units stacked (DL) 000013 1-31 equ stack_header.cur_lot_size,11 DU number of words (entries) in lot  000013 1-32 equ stack_header.cpm_enabled,11 DL non-zero if control point management is enabled  000014 1-33 equ stack_header.system_free_ptr,12 ptr to system storage area 000016 1-34 equ stack_header.user_free_ptr,14 ptr to user storage area  1-35  000020 1-36 equ stack_header.parent_ptr,16 ptr to parent stack or null  000022 1-37 equ stack_header.stack_begin_ptr,18 ptr to first stack frame  000024 1-38 equ stack_header.stack_end_ptr,20 ptr to next useable stack frame 000026 1-39 equ stack_header.lot_ptr,22 ptr to the lot for the current ring  1-40  000030 1-41 equ stack_header.signal_ptr,24 ptr to signal proc for current ring  000032 1-42 equ stack_header.bar_mode_sp,26 value of sp before entering bar mode  000034 1-43 equ stack_header.pl1_operators_ptr,28 ptr: pl1_operators_$operator_table  000036 1-44 equ stack_header.call_op_ptr,30 ptr to standard call operator 1-45  000040 1-46 equ stack_header.push_op_ptr,32 ptr to standard push operator 000042 1-47 equ stack_header.return_op_ptr,34 ptr to standard return operator 000044 1-48 equ stack_header.ret_no_pop_op_ptr,36 ptr: stand. return/ no pop operator  000046 1-49 equ stack_header.entry_op_ptr,38 ptr to standard entry operator  1-50  000050 1-51 equ stack_header.trans_op_tv_ptr,40 ptr to table of translator operator ptrs  000052 1-52 equ stack_header.isot_ptr,42 pointer to ISOT  000054 1-53 equ stack_header.sct_ptr,44 pointer to System Condition Table 000056 1-54 equ stack_header.unwinder_ptr,46 pointer to unwinder for current ring 1-55  000060 1-56 equ stack_header.sys_link_info_ptr,48 ptr to *system link name table  000062 1-57 equ stack_header.rnt_ptr,50 ptr to reference name table  000064 1-58 equ stack_header.ect_ptr,52 ptr to event channel table  000066 1-59 equ stack_header.assign_linkage_ptr,54 ptr to area for hcs_$assign_linkage calls  000070 1-60 equ stack_header.heap_header_ptr,56 ptr to heap header.  000072 1-61 equ stack_header.trace_frames,58 stack of trace_catch_ frames 000073 1-62 equ stach_header.trace_top_ptr,59 trace pointer  000074 1-63 equ stack_header.in_trace,60 trace antirecurse bit  000100 1-64 equ stack_header_end,64 length of stack header  1-65  1-66  1-67  1-68  000000 1-69 equ trace_frames.count,0 number of trace frames on stack  000001 1-70 equ trace_frames.top_ptr,1 packed pointer to top one  1-71  1-72 " The following constant is an offset within the pl1 operators table.  1-73 " It references a transfer vector table.  1-74  000551 1-75 bool tv_offset,551 1-76  1-77  1-78 " The following constants are offsets within this transfer vector table.  1-79  001170 1-80 equ call_offset,tv_offset+271  001171 1-81 equ push_offset,tv_offset+272  001172 1-82 equ return_offset,tv_offset+273  001173 1-83 equ return_no_pop_offset,tv_offset+274 001174 1-84 equ entry_offset,tv_offset+275 1-85  1-86  1-87 " END INCLUDE FILE stack_header.incl.alm  56 include stack_frame  2-1 "  2-2 " BEGIN INCLUDE FILE ... stack_frame.incl.alm 6/72 RBS  2-3 "  2-4 " Modified: 16 Dec 1977, D. Levin - to add fio_ps_ptr  2-5 " Modified: 3 Feb 1978, P. Krupp - to add run_unit_manager_bit & main_proc_bit 2-6 " Modified: 21 March 1978, D. Levin - change fio_ps_ptr to support_ptr  2-7 "  000020 2-8 equ stack_frame.prev_sp,16 000020 2-9 equ stack_frame.condition_word,16  000022 2-10 equ stack_frame.next_sp,18 000022 2-11 equ stack_frame.signaller_word,18  000024 2-12 equ stack_frame.return_ptr,20  000026 2-13 equ stack_frame.entry_ptr,22  000030 2-14 equ stack_frame.operator_ptr,24  000030 2-15 equ stack_frame.lp_ptr,24  000032 2-16 equ stack_frame.arg_ptr,26 000034 2-17 equ stack_frame.static_ptr,28  000035 2-18 equ stack_frame.support_ptr,29 " only used by fortran I/O  000036 2-19 equ stack_frame.on_unit_rel_ptrs,30  000037 2-20 equ stack_frame.operator_ret_ptr,31  000037 2-21 equ stack_frame.translator_id,31  000040 2-22 equ stack_frame.regs,32  000060 2-23 equ stack_frame.min_length,48  000020 2-24 equ stack_frame.flag_word,16  020000 2-25 bool stack_frame.main_proc_bit,020000 (DL) 010000 2-26 bool stack_frame.run_unit_manager,010000 (DL)  004000 2-27 bool stack_frame.signal_bit,004000 (DL)  002000 2-28 bool stack_frame.crawl_out_bit,002000 (DL) 001000 2-29 bool stack_frame.signaller_bit,001000 (DL) 000400 2-30 bool stack_frame.link_trap_bit,000400 (DL) 000200 2-31 bool stack_frame.support_bit,000200 (DL)  000100 2-32 bool stack_frame.condition_bit,000100 (DL) 2-33  2-34 "  2-35 " END INCLUDE FILE ... stack_frame.incl.alm  2-36 "  57 "  000010 58 link sp_sqr,|[square_root_]  000012 59 link sp_cos,|[cosine_radians_]  000014 60 link sp_sin,|[sine_radians_]  000016 61 link sp_tan,|[tangent_radians_]  000020 62 link sp_cot,|[cotangent_radians_]  000022 63 link sp_atn,|[arc_tangent_radians_]  000024 64 link sp_exp,|[exponential_]  000026 65 link sp_log,|[log_base_e_] 000030 66 link sp_pwr,|[single_power_single_]  000032 67 link sp_clg,|[log_base_10_]  000034 68 link ep_sqr,|[double_square_root_]  000036 69 link ep_cos,|[double_cosine_radians_]  000040 70 link ep_sin,|[double_sine_radians_]  000042 71 link ep_tan,|[double_tangent_radians_]  000044 72 link ep_cot,|[double_cotangent_radians_] 000046 73 link ep_atn,|[double_arc_tangent_radians_]  000050 74 link ep_exp,|[double_exponential_]  000052 75 link ep_log,|[double_log_base_e_]  000054 76 link ep_pwr,|[double_power_double_]  000056 77 link ep_clg,|[double_log_base_10_]  78 "  79 " definition of basic program header  80 "  000000 81 equ bph.version,0  000001 82 equ bph.numeric_storage,1  000002 83 equ bph.string_storage,2  000003 84 equ bph.numeric_data,3 000004 85 equ bph.string_data,4  000005 86 equ bph.incoming_args,5  000006 87 equ bph.outgoing_args,6  000007 88 equ bph.numeric_scalars,7  000010 89 equ bph.string_scalars,8  000011 90 equ bph.numeric_arrays,9  000012 91 equ bph.string_arrays,10  000013 92 equ bph.functions,11  000014 93 equ bph.statement_map,12  000015 94 equ bph.precision_ind,13  000015 95 equ bph.definitions,13 96 "  97 " definition of basic array dope  98 "  000000 99 equ array_dope.data,0  000002 100 equ array_dope.original_bounds,2  000004 101 equ array_dope.current_bounds,4  102 "  103 " definitiion of basic array symbols  104 "  000000 105 equ array_symbol.name,0  000000 106 equ array_symbol.location,0  000001 107 equ array_symbol.offset,1  000002 108 equ array_symbol.bounds,2  000003 109 equ array_symbol_size,3  400000 110 bool array_symbol_param,400000 111 "  112 " definition of definition block  113 "  000000 114 equ def_head.forward,0 0-17  000000 115 equ def_head.backward,0 18-35 116 "  000000 117 equ def.forward,0 0-17  000000 118 equ def.backward,0 18-35  000001 119 equ def.value,1 0-17  000001 120 equ def.flags,1 18-32 000001 121 equ def.class,1 33-35 000002 122 equ def.symbol,2 0-17 000002 123 equ def.segname,2 18-35  124 "  400000 125 bool def_flag.new,400000 dl  200000 126 bool def_flag.ignore,200000 dl 100000 127 bool def_flag.entry,100000 dl  040000 128 bool def_flag.retain,040000 dl 020000 129 bool def_flag.descriptors,020000 dl  130 "  131 " definition of on-unit body  132 "  000000 133 equ on_name,0  000002 134 equ on_body,2  000004 135 equ on_size,4  000005 136 equ on_next,5  137 "  000040 138 bool blank,40  139 "  000400 140 equ pdl_size,256  000400 141 equ fn_size,256  000100 142 equ fn_extend_size,64  143 "  414000 144 bool n_scalar_type,414000  414100 145 bool n_list_type,414100  414200 146 bool n_table_type,414200  524000 147 bool char_type,524000  530000 148 bool vs_char_type,530000  149 "  775777 150 bool erase_packed_bit,775777  020000 151 bool ignore_handler,020000 757777 152 bool use_handler,757777  153 "  000100 154 bool dim_1,000100  000200 155 bool dim_2,000200  156 "  000000 157 equ descriptor.type,0  000001 158 equ descriptor.lower_1,1  000002 159 equ descriptor.upper_1,2  000003 160 equ descriptor.multiplier_1,3  000004 161 equ descriptor.lower_2,4  000005 162 equ descriptor.upper_2,5  000006 163 equ descriptor.multiplier_2,6  164 "  627000 165 bool eax7,627000  166 "  167 "  168 " macros for code which is different for single and double precision  169 "  170 macro transfer_vector  1 171 &1operator_table:  2 172 zero 0 0 3 173 tra &1string_assign 1 4 174 tra string_concatenate 2  5 175 tra string_compare 3  6 176 tra len_fun 4  7 177 tra pos_fun 5  8 178 tra chr_fun 6  9 179 tra clk_fun 7  10 180 tra dat_fun 8  11 181 tra usr_fun 9  12 182 tra str_fun 10  13 183 tra seg_fun 11  14 184 tra sst_fun 12, also used by mid$  15 185 tra &1max_fun 13 16 186 tra &1min_fun 14 17 187 tra change_from_string 15 18 188 tra change_to_string 16  19 189 tra argcnt 17  20 190 tra argval 18  21 191 zero 0 22 192 tra stop_op 20  23 193 tra on_op 21 24 194 tra gosub_op 22  25 195 tra on_gosub_op 23  26 196 tra sub_call_op 24  27 197 tra std_sub_call_op 25  28 198 tra return_op 26 29 199 tra sub_exit_op 27  30 200 tra &1fun_call_op 28  31 201 tra &1global_fun_call_op 29  32 202 tra &1fun_return_op 30  33 203 tra &1list_sub_op 31  34 204 tra &1table_sub_op 32 35 205 tra &1inv_table_sub_op 33 36 206 tra error_in_statement 34 37 207 tra missing_line 35  38 208 tra unclosed_for 36  39 209 zero 0 37  40 210 tra undefined_function 38 41 211 tra subend_op 39 42 212 tra use_tty 40  43 213 tra setup_fcb 41 44 214 tra scratch 42  45 215 tra margin 43  46 216 tra reset_data 44 47 217 tra numeric_write 45  48 218 tra string_write 46  49 219 tra &1numeric_read 47 50 220 tra string_read 48  51 221 tra numeric_print 49  52 222 tra string_print 50  53 223 tra print_new_line 51 54 224 tra tab_for_comma 52  55 225 tra tab_fun 53  56 226 tra spc_fun 54  57 227 tra check_eof 55 58 228 tra &1numeric_input 56  59 229 tra string_input 57  60 230 tra linput 58  61 231 tra end_input 59 62 232 tra lof_fun 60  63 233 tra loc_fun 61  64 234 tra mar_fun 62  65 235 tra &1numeric_data_read 63  66 236 tra string_data_read 64  67 237 tra per_fun 65  68 238 tra typ_fun 66  69 239 tra use_fcb 67  70 240 tra print_using_start 68  71 241 tra print_using_end 69  72 242 tra &1print_using_numeric 70  73 243 tra print_using_string 71 74 244 tra hps_fun 72  75 245 tra lin_fun 73  76 246 tra tst_fun 74  77 247 tra num_fun 75  78 248 tra file_fun 76  79 249 tra end_print 77 80 250 tra reset_ascii 78  81 251 tra reset_random 79  82 252 tra abs_fun 80  83 253 tra int_fun 81  84 254 tra &1mod_fun 82 85 255 tra randomize 83 86 256 tra rnd_fun 84  87 257 tra sgn_fun 85  88 258 tra tim_fun 86  89 259 tra &1val_fun 87 90 260 tra &1sqr_fun 88 91 261 tra &1cos_fun 89 92 262 tra &1sin_fun 90 93 263 tra &1cot_fun 91 94 264 tra &1tan_fun 92 95 265 tra &1atn_fun 93 96 266 tra &1exp_fun 94 97 267 tra &1log_fun 95 98 268 tra &1clg_fun 96 99 269 tra &1pwr_fun 97 100 270 tra &1pwri_fun 98 101 271 zero 0 102 272 tra det_fun 100  103 273 tra &1con_fun 101  104 274 tra &1idn_fun 102  105 275 tra inv_fun 103  106 276 tra &1trn_fun 104  107 277 tra &1zer_fun 105  108 278 tra nul_fun 106  109 279 tra list_redim_op 107 110 280 tra table_redim_op 108  111 281 tra inv_table_redim_op 109  112 282 tra mat_numeric_input 110 113 283 tra mat_string_input 111  114 284 tra mat_numeric_print 112 115 285 tra mat_string_print 113  116 286 tra mat_numeric_read 114  117 287 tra mat_string_read 115  118 288 tra mat_numeric_write 116 119 289 tra mat_string_write 117  120 290 tra mat_linput_op 118 121 291 tra mat_numeric_data_read 119  122 292 tra mat_string_data_read 120  123 293 tra mat_print_using_numeric 121  124 294 tra mat_print_using_string 122 125 295 tra &1mat_assign_numeric 123  126 296 tra &1mat_add 124  127 297 tra &1mat_sub 125  128 298 tra &1mat_scalar_mult 126 129 299 tra &1dot_product 127 130 300 tra mat_assign_string 128 131 301 tra mat_mult_vm 129  132 302 tra mat_mult_mv 130  133 303 tra mat_mult_mm 131  134 304 tra setdigits_op 132  135 305 tra ep_sqr_fun 133  136 306 tra ep_cos_fun 134  137 307 tra ep_sin_fun 135  138 308 tra ep_cot_fun 136  139 309 tra ep_tan_fun 137  140 310 tra ep_atn_fun 138  141 311 tra ep_exp_fun 139  142 312 tra ep_log_fun 140  143 313 tra ep_clg_fun 141  144 314 tra ep_pwr_fun 142  145 315 tra ep_pwri_fun 143  146 316 tra ep_mod_fun 144  147 317 tra &1new_fun_call_op 145 148 318 tra &1new_global_fun_call_op 146  149 319 tra &1new_fun_return_op 147  150 320 tra new_string_data_read 148  151 321 tra left_fun 149 152 322 tra right_fun 150  153 323 &end  324 macro string_assign  1 325 " string assignment, entered with pointer to lhs in bb and pointer to rhs in ab 2 326 "  3 327 &1string_assign:  4 328 &2 temp1 save EAQ 5 329 ldq 10,dl  6 330 "  7 331 &1ss1: tsx0 invoke_runtime  8 332 &1ss2: &3 temp1 9 333 tra text_base_ptr,*7  10 334 &end  335 macro max  1 336 "  2 337 " operator to return max(arg1,arg2,...,argn)  3 338 " entered with  4 339 " ldq n,dl 5 340 " tsx7 ap|max_fun  6 341 " fld arg1 7 342 " fld arg2 8 343 " ...  9 344 " fld argn 10 345 "  11 346 &1max_fun:  12 347 epp2 text_base_ptr,*7 get ptr to arg list  13 348 eax0 0,ql save number of args 14 349 eax1 0,ql save return point  15 350 xec pr2|-1,0 get last arg 16 351 &1max1: sbx0 1,du count down  17 352 tze pr2|0,1 return with result in eaq 18 353 &2 temp1  19 354 xec pr2|-1,0 get next arg 20 355 &3 temp1  21 356 tpl 2,ic  22 357 &4 temp1  23 358 tra &1max1 24 359 &end  360 macro min  1 361 "  2 362 " operator to return min(arg1,arg,...,argn) 3 363 " entered with same calling sequence as max 4 364 "  5 365 &1min_fun:  6 366 epp2 text_base_ptr,*7  7 367 eax0 0,ql  8 368 eax1 0,ql  9 369 xec pr2|-1,0  10 370 &1min1: sbx0 1,du  11 371 tze pr2|0,1  12 372 &2 temp1  13 373 xec pr2|-1,0  14 374 &3 temp1  15 375 tmi 2,ic  16 376 &4 temp1  17 377 tra &1min1 18 378 "  19 379 &end  380 "  381 macro fun_call_op  1 382 "  2 383 " operator to call a user defined function, entered with  3 384 " epplb entry  4 385 " tsx7 fun_call_op 5 386 " vfd 36/fun_call_word 6 387 " fld arg1 numeric  7 388 " eppab arg2 string  8 389 " entry point is  9 390 " entry: vfd 36/fun_call_word  10 391 " vfd 36/fun_local_word  11 392 " [first executable instruction]  12 393 "  13 394 &1fun_call_op:  14 395 stx4 fn_temp1 use current display as next fn display  15 396 sprplp fn_temp2 use current value as next value of program header pt  16 397 "  17 398 " at this point:  18 399 " lp -> current program header 19 400 " fn_temp1 = new function display value  20 401 " fn_temp2 = packed ptr to new program header  21 402 "  22 403 &1fun_call: 23 404 sprplp temp1  24 405 ldq temp1  25 406 stq pdl,id put current program header pt on pdl  26 407 ttn pdl_full  27 408 eppbp text_base_ptr,*7 get ptr to fun call word  28 409 ldq lb|0 get expected call word  29 410 cmpq bp|0 check with actual  30 411 tnz fn_call_error error if not the same  31 412 lda 0,dl get number of args  32 413 lls 5  33 414 sta temp1 save  34 415 eppap bp|1,al get ptr to return loc  35 416 sprpap temp2  36 417 ldq temp2  37 418 stq pdl,id put on pdl 38 419 ttn pdl_full  39 420 stx4 pdl,id put fn display on pdl 40 421 ttn pdl_full  41 422 stx6 pdl,id put current frame offset on pdl  42 423 ttn pdl_full  43 424 stz pdl,id put in fence of 0  44 425 ttn pdl_full  45 426 ldq lb|1 get local word  46 427 lda 0,dl get number of locals 47 428 lls 5  48 429 sta temp2 save  49 430 ada temp1 get number args + locals  50 431 ada 2,dl add 1 for return arg + 1 to make even  51 432 ana =o777776,dl make multiple of 2 52 433 lls &4 53 434 ldx7 next_frame get next frame offset  54 435 ada next_frame update next frame offset  55 436 sta next_frame 56 437 cmpa last_frame have we exceeded available space  57 438 tmoz &1fc1 58 439 eppap sb|stack_header.stack_end_ptr,* get ptr to end of stack  59 440 eppap ap|fn_extend_size extend stack  60 441 spriap sb|stack_header.stack_end_ptr  61 442 spriap sp|stack_frame.next_sp  62 443 eaa fn_extend_size 63 444 asa last_frame 64 445 &1fc1: eax1 &2 init arg copy loop  65 446 eax2 1 66 447 eppap sp|0,7 get ptr to next frame  67 448 stz ap|0 init return value  68 449 lxl0 temp1 get number of args 69 450 tze &1fc5 skip if zero  70 451 ldq lb|0 get call word  71 452 lls 5 shift to position  72 453 &1fc2: qls 1 check next arg  73 454 stq temp3  74 455 tmi &1fc4 minus means string arg  75 456 xec bp|0,2 load the arg value 76 457 &3 ap|0,1 and save in frame  77 458 &1fc3: adx1 &2,du account for position 78 459 adx2 1,du  79 460 sbx0 1,du count down  80 461 tze &1fc5 and skip if no more args  81 462 ldq temp3 do next arg 82 463 tra &1fc2  83 464 &1fc4: xec bp|0,2 string arg, get ptr  84 465 epp3 ap|0,1 get ptr to target 85 466 stz 3|0 clear string temp (important!)  86 467 ldq 10,dl get action code 87 468 epplp sp|stack_frame.lp_ptr,*  88 469 call |[basic_runtime_](runtime_arglist)  89 470 epplp program_header,* 90 471 tra &1fc3 go do next arg  91 472 ife &1,sp_ 92 473 sp_fc5: lxl0 temp2 get number of locals  93 474 ifend  94 475 ife &1,ep_ 95 476 ep_fc5: ldq temp2 get number of locals 96 477 qls 1 double for number of words  97 478 eax0 0,ql  98 479 ifend  99 480 tze &1fc7 skip if no locals  100 481 &1fc6: stz ap|0,1 zero local  101 482 sbx0 1,du  102 483 tze &1fc7  103 484 adx1 1,du  104 485 tra &1fc6  105 486 &1fc7: eppap &1operator_table restore ptr to operators  106 487 ldx4 fn_temp1 get new fn display  107 488 eax6 0,7 get new fn offset  108 489 lprplp fn_temp2 get new program header pt 109 490 sprilp program_header  110 491 spbplp text_base_ptr set text base ptr also  111 492 eax7 lp|0 set program header offset  112 493 stx7 program_header_offset 113 494 tra lb|2 and enter function  114 495 &end  496 "  497 macro global_fun_call_op  1 498 "  2 499 " operator to call global function  3 500 " epplb entry_info 4 501 " tsx7 global_fun_call_op  5 502 " vfd 36/fun_call_word 6 503 " fld arg1 numeric  7 504 " eppab arg2 string  8 505 " entry info is 9 506 " word 0 packed ptr to entry pt  10 507 " word 1 packed ptr to stack frame of parent  11 508 "  12 509 &1global_fun_call_op:  13 510 eaa sp|0 get rel(parent stack) - rel(our stack)  14 511 neg 0  15 512 sta fn_temp1  16 513 lxl0 lb|1  17 514 asx0 fn_temp1 save as new display value  18 515 lprpbp lb|1 get ptr to parent stack frame of fun  19 516 eppbp bp|program_header_equ,* load ptr to program header  20 517 sprpbp fn_temp2 save packed ptr to program header 21 518 lprplb lb|0 get ptr to entry pt  22 519 tra &1fun_call join common code  23 520 &end  521 "  522 macro fun_return_op  1 523 "  2 524 " operator to return from function, entered with  3 525 " epplb entry  4 526 " tsx7 fun_return_op  5 527 "  6 528 &1fun_return_op:  7 529 ldq pdl,di pop pdl  8 530 ttn fn_return_error  9 531 tnz &1fun_return_op skip gosub return  10 532 eppap sp|0,6 get ptr to this frame  11 533 eax1 &2 init arg, local loop  12 534 ldq lb|0 get call word  13 535 lda 0,dl extract number of args  14 536 lls 5  15 537 eax0 0,al  16 538 tze &1fr3 skip if no args 17 539 &1fr1: qls 1 check next arg  18 540 tpl &1fr2 plus means numeric  19 541 stq temp2  20 542 eppab ap|0,1 get ptr to string word  21 543 ldq 28,dl  22 544 epplp sp|stack_frame.lp_ptr,*  23 545 call |[basic_runtime_](runtime_arglist)  24 546 epplp program_header,* 25 547 ldq temp2  26 548 &1fr2: adx1 &2,du  27 549 sbx0 1,du check next arg  28 550 tnz &1fr1  29 551 &1fr3: ldq lb|1 get local word 30 552 lda 0,dl  31 553 lls 5 get number of locals  32 554 eax0 0,al  33 555 tze &1fr6 skip if none  34 556 &1fr4: qls 1  35 557 tpl &1fr5  36 558 stq temp2  37 559 eppab ap|0,1 get ptr to string word  38 560 ldq 28,dl  39 561 epplp sp|stack_frame.lp_ptr,*  40 562 call |[basic_runtime_](runtime_arglist)  41 563 epplp program_header,* 42 564 ldq temp2  43 565 &1fr5: sbx0 1,du  44 566 tze &1fr6  45 567 adx1 &2,du 46 568 tra &1fr4  47 569 &1fr6: stx6 next_frame reset end of stack  48 570 ldx6 pdl,di pop function stack  49 571 ldx4 pdl,di restore display from pdl  50 572 ldq lb|0 check mode of return value  51 573 qls 5  52 574 tmi &1fr7 minus is string 53 575 &3 ap|0 load numeric value  54 576 tra &1fr8 and return  55 577 &1fr7: eppab string_value set string ptr  56 578 szn ab|0 is string_value word zero  57 579 tze &1fr7a yes, don't have to deallocate it  58 580 ldq 28,dl no, deallocate it  59 581 epplp sp|stack_frame.lp_ptr,*  60 582 call |[basic_runtime_](runtime_arglist)  61 583 &1fr7a: ldq ap|0 get function value  62 584 stq ab|0 set string value 63 585 fld =0.0,du get 0 numeric value  64 586 &1fr8: eppap &1operator_table restore ptr to operators  65 587 lprpbp pdl,di get return pt from pdl  66 588 lprplp pdl,di get program header pt from pdl  67 589 sprilp program_header restore stack frame  68 590 spbplp text_base_ptr  69 591 eax7 lp|0 set program header offset  70 592 stx7 program_header_offset 71 593 fcmp =0.0,du set indicators  72 594 tra bp|0 return to caller 73 595 &end  596 "  597 macro new_fun_call_op  1 598 "  2 599 " operator to call a user defined function, entered with  3 600 " epp3 entry  4 601 " tsx7 fun_call_op 5 602 " vfd 36/fun_call_word 6 603 " fld arg1 numeric  7 604 " eppab arg2 string  8 605 " entry point is  9 606 " entry: vfd 36/fun_call_word  10 607 " vfd 36/fun_local_word  11 608 " [first executable instruction]  12 609 "  13 610 &1new_fun_call_op:  14 611 stx4 fn_temp1 use current display as next fn display  15 612 sprplp fn_temp2 use current value as next value of program header pt  16 613 "  17 614 " at this point:  18 615 " lp -> current program header 19 616 " fn_temp1 = new function display value  20 617 " fn_temp2 = packed ptr to new program header  21 618 "  22 619 &1new_fun_call: 23 620 sprplp temp1  24 621 ldq temp1  25 622 stq pdl,id put current program header pt on pdl  26 623 ttn pdl_full  27 624 eppbp text_base_ptr,*7 get ptr to fun call word  28 625 ldq pr3|0 get expected call word  29 626 cmpq bp|0 check with actual  30 627 tnz fn_call_error error if not the same  31 628 lda 0,dl get number of args  32 629 lls 5  33 630 sta temp1 save  34 631 eppap bp|1,al get ptr to return loc  35 632 sprpap temp2  36 633 ldq temp2  37 634 stq pdl,id put on pdl 38 635 ttn pdl_full  39 636 stx4 pdl,id put fn display on pdl 40 637 ttn pdl_full  41 638 stx6 pdl,id put current frame offset on pdl  42 639 ttn pdl_full  43 640 stz pdl,id put in fence of 0  44 641 ttn pdl_full  45 642 ldq pr3|1 get local word  46 643 lda 0,dl get number of locals 47 644 lls 5  48 645 sta temp2 save  49 646 ada temp1 get number args + locals  50 647 ada 2,dl add 1 for return arg + 1 to make even  51 648 ana =o777776,dl make multiple of 2 52 649 lls &4 53 650 ldx7 next_frame get next frame offset  54 651 ada next_frame update next frame offset  55 652 sta next_frame 56 653 cmpa last_frame have we exceeded available space  57 654 tmoz &1nfc1  58 655 eppap sb|stack_header.stack_end_ptr,* get ptr to end of stack  59 656 eppap ap|fn_extend_size extend stack  60 657 spriap sb|stack_header.stack_end_ptr  61 658 spriap sp|stack_frame.next_sp  62 659 eaa fn_extend_size 63 660 asa last_frame 64 661 &1nfc1: spri3 temp3 save, may need pr3 for string handling 65 662 eax1 &2 init arg copy loop  66 663 eax2 1 67 664 eppap sp|0,7 get ptr to next frame  68 665 stz ap|0 init return value  69 666 lxl0 temp1 get number of args 70 667 tze &1nfc5 skip if zero  71 668 ldq pr3|0 get call word  72 669 lls 5 shift to position  73 670 &1nfc2: qls 1 check next arg  74 671 stq temp2+1  75 672 tmi &1nfc4 minus means string arg 76 673 xec bp|0,2 load the arg value 77 674 &3 ap|0,1 and save in frame  78 675 &1nfc3: adx1 &2,du account for position  79 676 adx2 1,du  80 677 sbx0 1,du count down  81 678 tze &1nfc5 and skip if no more args  82 679 ldq temp2+1 do next arg  83 680 tra &1nfc2 84 681 &1nfc4: xec bp|0,2 string arg, get ptr 85 682 epp3 ap|0,1 get ptr to target 86 683 stz pr3|0 clear string temp (important!)  87 684 ldq 10,dl get action code 88 685 epplp sp|stack_frame.lp_ptr,*  89 686 call |[basic_runtime_](runtime_arglist)  90 687 epplp program_header,* 91 688 tra &1nfc3 go do next arg 92 689 ife &1,sp_ 93 690 sp_nfc5: lxl0 temp2 get number of locals  94 691 ifend  95 692 ife &1,ep_ 96 693 ep_nfc5: ldq temp2 get number of locals  97 694 qls 1 double for number of words  98 695 eax0 0,ql  99 696 ifend  100 697 tze &1nfc7 skip if no locals  101 698 &1nfc6: stz ap|0,1 zero local  102 699 sbx0 1,du  103 700 tze &1nfc7 104 701 adx1 1,du  105 702 tra &1nfc6 106 703 &1nfc7: eppap &1operator_table restore ptr to operators 107 704 ldx4 fn_temp1 get new fn display  108 705 eax6 0,7 get new fn offset  109 706 lprplp fn_temp2 get new program header pt 110 707 sprilp program_header  111 708 spbplp text_base_ptr set text base ptr also  112 709 eax7 lp|0 set program header offset  113 710 stx7 program_header_offset 114 711 epp3 temp3,* restore ptr to entry 115 712 tra pr3|2 and enter function  116 713 &end  714 "  715 macro new_global_fun_call_op  1 716 "  2 717 " operator to call global function  3 718 " epp3 entry_info  4 719 " tsx7 global_fun_call_op  5 720 " vfd 36/fun_call_word 6 721 " fld arg1 numeric  7 722 " eppab arg2 string  8 723 " entry info is 9 724 " word 0 packed ptr to entry pt  10 725 " word 1 packed ptr to stack frame of parent  11 726 "  12 727 &1new_global_fun_call_op:  13 728 eaa sp|0 get rel(parent stack) - rel(our stack)  14 729 neg 0  15 730 sta fn_temp1  16 731 lxl0 pr3|1 17 732 asx0 fn_temp1 save as new display value  18 733 lprpbp pr3|1 get ptr to parent stack frame of fun 19 734 eppbp bp|program_header_equ,* load ptr to program header  20 735 sprpbp fn_temp2 save packed ptr to program header 21 736 lprp3 pr3|0 get ptr to entry pt  22 737 tra &1new_fun_call join common code  23 738 &end  739 "  740 macro new_fun_return_op  1 741 "  2 742 " operator to return from function, entered with  3 743 " epp3 entry  4 744 " tsx7 fun_return_op  5 745 "  6 746 &1new_fun_return_op:  7 747 ldq pdl,di pop pdl  8 748 ttn fn_return_error  9 749 tnz &1new_fun_return_op skip gosub return  10 750 eppap sp|0,6 get ptr to this frame  11 751 eax1 &2 init arg, local loop  12 752 ldq pr3|0 get call word  13 753 lda 0,dl extract number of args  14 754 lls 5  15 755 eax0 0,al  16 756 tze &1nfr3 skip if no args  17 757 &1nfr1: qls 1 check next arg  18 758 tpl &1nfr2 plus means numeric 19 759 stq temp2  20 760 eppab ap|0,1 get ptr to string word  21 761 ldq 28,dl  22 762 epplp sp|stack_frame.lp_ptr,*  23 763 call |[basic_runtime_](runtime_arglist)  24 764 epplp program_header,* 25 765 ldq temp2  26 766 &1nfr2: adx1 &2,du  27 767 sbx0 1,du check next arg  28 768 tnz &1nfr1 29 769 &1nfr3: ldq pr3|1 get local word  30 770 lda 0,dl  31 771 lls 5 get number of locals  32 772 eax0 0,al  33 773 tze &1nfr6 skip if none  34 774 &1nfr4: qls 1  35 775 tpl &1nfr5 36 776 stq temp2  37 777 eppab ap|0,1 get ptr to string word  38 778 ldq 28,dl  39 779 epplp sp|stack_frame.lp_ptr,*  40 780 call |[basic_runtime_](runtime_arglist)  41 781 epplp program_header,* 42 782 ldq temp2  43 783 &1nfr5: sbx0 1,du  44 784 tze &1nfr6 45 785 adx1 &2,du 46 786 tra &1nfr4 47 787 &1nfr6: stx6 next_frame reset end of stack  48 788 ldx6 pdl,di pop function stack  49 789 ldx4 pdl,di restore display from pdl  50 790 ldq pr3|0 check mode of return value  51 791 qls 5  52 792 tmi &1nfr7 minus is string  53 793 &3 ap|0 load numeric value  54 794 tra &1nfr8 and return 55 795 &1nfr7: eppab string_value set string ptr  56 796 szn ab|0 is string_value word zero  57 797 tze &1nfr7a yes, don't have to deallocate it  58 798 ldq 28,dl no, deallocate it  59 799 epplp sp|stack_frame.lp_ptr,*  60 800 call |[basic_runtime_](runtime_arglist)  61 801 &1nfr7a: ldq ap|0 get function value  62 802 stq ab|0 set string value 63 803 fld =0.0,du get 0 numeric value  64 804 &1nfr8: eppap &1operator_table restore ptr to operators 65 805 lprpbp pdl,di get return pt from pdl  66 806 lprplp pdl,di get program header pt from pdl  67 807 sprilp program_header restore stack frame  68 808 spbplp text_base_ptr  69 809 eax7 lp|0 set program header offset  70 810 stx7 program_header_offset 71 811 fcmp =0.0,du set indicators  72 812 tra bp|0 return to caller 73 813 &end  814 "  815 macro list_sub_op  1 816 "  2 817 " validate list subscript, for x(i) 3 818 " fld i  4 819 " eppbp x_dope 5 820 " tsx7 list_sub_op 6 821 "  7 822 &1list_sub_op:  8 823 ufa =71b25,du convert to integer in ql  9 824 cmpq bp|array_dope.current_bounds  10 825 trc subscript_error  11 826 ife &1,ep_ 12 827 qls 1 13 828 ifend  14 829 eppbp bp|array_dope.data,*ql get ptr to element  15 830 tra text_base_ptr,*7 and return  16 831 &end  832 "  833 macro table_sub_op 1 834 "  2 835 " validate table subscript, for x(i,j)  3 836 " fld i  4 837 " eppbp x_dope 5 838 " tsx7 table_sub_op  6 839 " fld j  7 840 "  8 841 &1table_sub_op: 9 842 ufa =71b25,du convert to integer in qu  10 843 cmpq bp|array_dope.current_bounds  11 844 trc subscript_error  12 845 mpy bp|array_dope.current_bounds+1 13 846 stq temp1  14 847 xec text_base_ptr,*7  15 848 ufa =71b25,du  16 849 cmpq bp|array_dope.current_bounds+1  17 850 trc subscript_error  18 851 adlq temp1 19 852 ife &1,ep_ 20 853 qls 1  21 854 ifend  22 855 eppbp bp|array_dope.data,*ql  23 856 adx7 1,du  24 857 tra text_base_ptr,*7  25 858 &end  859 "  860 macro inv_table_sub_op 1 861 "  2 862 " validate table subscript, for x(i,j)  3 863 " fld j  4 864 " eppbp x_dope 5 865 " tsx7 inv_table_sub_op  6 866 " fld i  7 867 "  8 868 &1inv_table_sub_op: 9 869 ufa =71b25,du  10 870 cmpq bp|array_dope.current_bounds+1  11 871 trc subscript_error  12 872 stq temp1  13 873 xec text_base_ptr,*7  14 874 ufa =71b25,du  15 875 cmpq bp|array_dope.current_bounds  16 876 trc subscript_error  17 877 mpy bp|array_dope.current_bounds+1 18 878 adlq temp1 19 879 ife &1,ep_ 20 880 qls 1  21 881 ifend  22 882 eppbp bp|array_dope.data,*ql  23 883 adx7 1,du  24 884 tra text_base_ptr,*7  25 885 &end  886 "  887 macro numeric_read 1 888 "  2 889 " operator to read numeric value, return value in EAQ  3 890 "  4 891 &1numeric_read: 5 892 ldq 35,dl reading random file 6 893 &1nr1: tsx0 invoke_runtime  7 894 &2 temp1  8 895 tra text_base_ptr,*7  9 896 &end  897 "  898 macro numeric_data_read  1 899 "  2 900 &1numeric_data_read:  3 901 lxl0 numeric_data_pos  4 902 cmpx0 numeric_data_pos 5 903 trc out_of_data  6 904 &2 text_base_ptr,*0  7 905 adx0 &3,du 8 906 sxl0 numeric_data_pos  9 907 tra text_base_ptr,*7  10 908 &end  909 "  910 macro numeric_input  1 911 "  2 912 " input numeric value, result left in EAQ  3 913 "  4 914 &1numeric_input:  5 915 ldq 14,dl  6 916 tsx0 invoke_runtime  7 917 &2 temp1  8 918 tra text_base_ptr,*7  9 919 &end  920 "  921 macro print_using_numeric  1 922 "  2 923 &1print_using_numeric:  3 924 &2 temp1  4 925 ldq 57,dl  5 926 tra call_runtime  6 927 &end  928 "  929 macro mod_fun  1 930 "  2 931 " mod  3 932 " fld a  4 933 " tsx7 mod_fun 5 934 " fld b  6 935 "  7 936 &1mod_fun:  8 937 &2 temp1 save a  9 938 xec text_base_ptr,*7 get b 10 939 tze &1mf1 return a if b = 0  11 940 &2 temp2  12 941 &3 temp1 a/b  13 942 ufa =71b25,du  14 943 fad =71b25,du int(a/b)  15 944 &4 temp2 int(a/b)*b  16 945 fneg 0 -int(a/b)*b  17 946 &1mf1: adx7 1,du  18 947 &5 temp1 a-int(a/b)*b 19 948 tra text_base_ptr,*7  20 949 &end  950 "  951 macro val_fun  1 952 "  2 953 " val(a$)  3 954 "  4 955 &1val_fun:  5 956 ldq 27,dl  6 957 tra &1nr1  7 958 &end  959 "  960 macro math_functions  1 961 "  2 962 " math functions  3 963 " fld x  4 964 " tsx7 math_function  5 965 "  6 966 &1sqr_fun:  7 967 eax0 &1sqr 8 968 "  9 969 &1fun2: lprp2 math_block get ptr to storage block for math routines 10 970 epp3 text_base_ptr,*7 store return location  11 971 spri3 temp3 in case we get error  12 972 epplp sp|stack_frame.lp_ptr,*  13 973 stx4 sp|stack_frame.regs+2 save in case used by function  14 974 sxl7 sp|stack_frame.regs+3 save for error handler  15 975 fad =0.0,du set indicators  16 976 tsp3 lp|0,0*  17 977 ldx4 sp|stack_frame.regs+2 restore x4 for user function  18 978 lxl7 sp|stack_frame.regs+3 in case of error  19 979 epp0 &1operator_table in case there was a math error  20 980 epplp program_header,* 21 981 fad =0.0,du set indicators  22 982 tra text_base_ptr,*7  23 983 "  24 984 &1cos_fun:  25 985 eax0 &1cos 26 986 tra &1fun2 27 987 "  28 988 &1sin_fun:  29 989 eax0 &1sin 30 990 tra &1fun2 31 991 "  32 992 &1cot_fun:  33 993 eax0 &1cot 34 994 tra &1fun2 35 995 "  36 996 &1tan_fun:  37 997 eax0 &1tan 38 998 tra &1fun2 39 999 "  40 1000 &1atn_fun:  41 1001 eax0 &1atn 42 1002 tra &1fun2 43 1003 "  44 1004 &1exp_fun:  45 1005 eax0 &1exp 46 1006 tra &1fun2 47 1007 "  48 1008 &1log_fun:  49 1009 eax0 &1log 50 1010 tra &1fun2 51 1011 "  52 1012 &1clg_fun:  53 1013 eax0 &1clg 54 1014 tra &1fun2 55 1015 "  56 1016 &end  1017 "  1018 macro power_functions  1 1019 "  2 1020 " operator to evaluate a ** b, entered with 3 1021 " fld a  4 1022 " tsx0 pwr_fun 5 1023 " fld b  6 1024 "  7 1025 &1pwr_fun:  8 1026 &2 temp1 save a  9 1027 xec text_base_ptr,*7 get b 10 1028 &2 temp2 and save it  11 1029 &1fun3: eax0 &1pwr  12 1030 "  13 1031 &3 temp1  14 1032 epp1 temp2 15 1033 adx7 1,du  16 1034 tra &1fun2 17 1035 "  18 1036 " operator to evaluate a ** b, entered with 19 1037 " fld b  20 1038 " tsx0 pwri_fun  21 1039 " fld a  22 1040 "  23 1041 &1pwri_fun: 24 1042 &2 temp2 save b  25 1043 xec text_base_ptr,*7 get a 26 1044 &2 temp1 and save it  27 1045 tra &1fun3 join pwr code  28 1046 "  29 1047 &end  1048 "  1049 macro zer_con_funs 1 1050 "  2 1051 " operators to do  3 1052 " mat A = zer  4 1053 " mat A = con  5 1054 " entered with pr2 pointing at dope for A.  6 1055 "  7 1056 &1zer_fun:  8 1057 &2 &3 get value  9 1058 tra &1con_fun+1  10 1059 "  11 1060 &1con_fun:  12 1061 &2 &4 get value  13 1062 "  14 1063 lxl1 2|array_dope.current_bounds  15 1064 sbx1 1,du get row bound  16 1065 tmoz array_error  17 1066 lxl2 2|array_dope.current_bounds+1 18 1067 tmi &1con_list 19 1068 sbx2 1,du get col bound  20 1069 tmoz array_error  21 1070 epp2 2|array_dope.data,*  22 1071 ife &1,sp_ 23 1072 eax3 2,2  24 1073 ifend  25 1074 ife &1,ep_ 26 1075 eaq 2,2  27 1076 qls 1  28 1077 eax3 0,qu  29 1078 xec 0,0  30 1079 ifend  31 1080 stx2 temp3 save col bound 32 1081 &1ct1: ldx2 temp3 col = col bound  33 1082 &1ct2: &5 2|0,3 set A(row,col) 34 1083 adx3 &6,du 35 1084 sbx2 1,du col = col - 1  36 1085 tpnz &1ct2 37 1086 adx3 &6,du skip over col 0  38 1087 sbx1 1,du row = row - 1  39 1088 tpnz &1ct1 40 1089 tra text_base_ptr,*7  41 1090 "  42 1091 &1con_list: 43 1092 epp2 2|array_dope.data,*  44 1093 ife &1,ep_ 45 1094 eaq 0,1  46 1095 qls 1  47 1096 eax1 0,qu  48 1097 xec 0,0  49 1098 ifend  50 1099 &5 2|0,1 set all but 0 element  51 1100 sbx1 &6,du 52 1101 tpnz -2,ic 53 1102 tra text_base_ptr,*7  54 1103 "  55 1104 ife &1,ep_ 56 1105 load0: fld =0.0,du  57 1106 load1: fld =1.0,du  58 1107 ifend  59 1108 "  60 1109 &end  1110 "  1111 macro idn_fun  1 1112 "  2 1113 " operator to do  3 1114 " mat A = idn  4 1115 " entered with pr2 -> dope for A  5 1116 "  6 1117 &1idn_fun:  7 1118 ldq 2|array_dope.current_bounds  8 1119 cmpq 2|array_dope.current_bounds+1 9 1120 tnz array_error matrix must be square  10 1121 eax1 -1,ql 11 1122 tmoz array_error  12 1123 eax2 0,1  13 1124 epp2 2|array_dope.data,*  14 1125 ife &1,sp_ 15 1126 eax3 2,2  16 1127 ifend  17 1128 ife &1,ep_ 18 1129 eaq 2,2  19 1130 qls 1  20 1131 eax3 0,qu  21 1132 ifend  22 1133 stx2 temp3 23 1134 &1id1: ldx2 temp3  24 1135 stx1 temp2 25 1136 &1id2: &2 =0.0d0 assume 0 element  26 1137 cmpx2 temp2 is row = col  27 1138 tnz 2,ic  28 1139 &2 =1.0d0 yes, get 1  29 1140 &3 2|0,3  30 1141 adx3 &4,du 31 1142 sbx2 1,du  32 1143 tpnz &1id2 33 1144 adx3 &4,du 34 1145 sbx1 1,du  35 1146 tpnz &1id1 36 1147 tra text_base_ptr,*7  37 1148 "  38 1149 &end  1150 "  1151 macro mat_assign_numeric  1 1152 "  2 1153 " operator to do mat A = B  3 1154 " entered with pr2 -> dope for A and pr1 -> dope for B  4 1155 "  5 1156 &1mat_assign_numeric:  6 1157 eax0 &1nop 7 1158 ldaq 1|array_dope.current_bounds  8 1159 cmpq 0,dl  9 1160 tmi &1list_assign  10 1161 &1table_assign: 11 1162 mpy 1|array_dope.current_bounds  12 1163 stq temp3  13 1164 ldq 2|array_dope.original_bounds  14 1165 mpy 2|array_dope.original_bounds+1 15 1166 cmpq temp3 16 1167 tmi redim_error  17 1168 ldaq 1|array_dope.current_bounds  18 1169 eax1 -1,al 19 1170 tmoz array_error  20 1171 eax2 -1,ql 21 1172 tmoz array_error  22 1173 staq 2|array_dope.current_bounds  23 1174 epp2 2|array_dope.data,*  24 1175 epp1 1|array_dope.data,*  25 1176 ife &1,sp_ 26 1177 eax3 2,2  27 1178 ifend  28 1179 ife &1,ep_ 29 1180 eaq 2,2  30 1181 qls 1  31 1182 eax3 0,qu  32 1183 ifend  33 1184 stx2 temp3 34 1185 &1ta1: ldx2 temp3  35 1186 &1ta2: &2 1|0,3 36 1187 xec 0,0  37 1188 &3 2|0,3  38 1189 adx3 &4,du 39 1190 sbx2 1,du  40 1191 tpnz &1ta2 41 1192 adx3 &4,du 42 1193 sbx1 1,du  43 1194 tpnz &1ta1 44 1195 tra text_base_ptr,*7  45 1196 "  46 1197 &1list_assign:  47 1198 cmpa 2|array_dope.original_bounds  48 1199 tpnz redim_error  49 1200 sta 2|array_dope.current_bounds  50 1201 ife &1,ep_ 51 1202 als 1  52 1203 ifend  53 1204 eax3 -&4,al  54 1205 tmoz array_error  55 1206 epp1 1|array_dope.data,*  56 1207 epp2 2|array_dope.data,*  57 1208 &2 1|0,3  58 1209 xec 0,0  59 1210 &3 2|0,3  60 1211 sbx3 &4,du 61 1212 tpnz -4,ic 62 1213 tra text_base_ptr,*7  63 1214 "  64 1215 &end  1216 "  1217 "  1218 macro mat_add_sub  1 1219 "  2 1220 " operator to do  3 1221 " mat A = B + C  4 1222 " mat A = B - C  5 1223 " entered with pr2 -> dope for A, pr1 -> dope for B,  6 1224 " pr3 -> dope for C 7 1225 "  8 1226 &1mat_add:  9 1227 eax0 &1fad 10 1228 tra &1mat_sub+1  11 1229 "  12 1230 &1mat_sub:  13 1231 eax0 &1fsb 14 1232 "  15 1233 ldaq 1|array_dope.current_bounds  16 1234 cmpq 0,dl  17 1235 tmi &1list_sub 18 1236 cmpaq 3|array_dope.current_bounds  19 1237 tnz array_error  20 1238 epp3 3|array_dope.data,*  21 1239 tra &1table_assign 22 1240 "  23 1241 &1list_sub: 24 1242 cmpa 3|array_dope.current_bounds  25 1243 tnz array_error  26 1244 epp3 3|array_dope.data,*  27 1245 tra &1list_assign  28 1246 "  29 1247 &end  1248 "  1249 macro mat_scalar_mult  1 1250 "  2 1251 " operator to do  3 1252 " mat A = (expression)*B  4 1253 " entered with expression in EAQ, pr2 -> dope for A and 5 1254 " pr1 -> dope for B 6 1255 "  7 1256 &1mat_scalar_mult:  8 1257 &2 temp1  9 1258 eax0 &1fmp 10 1259 tra &1mat_assign_numeric+1 11 1260 "  12 1261 &1nop: nop 0,du 13 1262 &1fad: fad 3|0,3  14 1263 &1fsb: fsb 3|0,3  15 1264 &1fmp: fmp temp1  16 1265 "  17 1266 &end  1267 "  1268 macro dot_product  1 1269 "  2 1270 " operator to form  3 1271 " mat dot_product = A * B  4 1272 " entered with pr1 -> dope for A and pr3 -> dope for B  5 1273 " returns with value in EAQ 6 1274 "  7 1275 &1dot_product:  8 1276 lda 1|array_dope.current_bounds  9 1277 cmpa 3|array_dope.current_bounds  10 1278 tnz array_error  11 1279 ada -&2,dl 12 1280 eax1 0,al store bounds for indexing  13 1281 tmoz array_error  14 1282 epp1 1|array_dope.data,*  15 1283 epp3 3|array_dope.data,*  16 1284 fld =0.0,du  17 1285 &1dot: dfst temp1  18 1286 &3 1|0,1  19 1287 &4 3|0,1  20 1288 dfad temp1 21 1289 sbx1 &2,du 22 1290 tpnz &1dot 23 1291 &5 =0.0,du set indicators 24 1292 tra text_base_ptr,*7  25 1293 "  26 1294 &end  1295 "  1296 macro trn_fun  1 1297 "  2 1298 " operator to do  3 1299 " mat A = trn(B)  4 1300 "  5 1301 &1trn_fun:  6 1302 ldq 1|array_dope.current_bounds+1  7 1303 tmi &1mat_assign_numeric  8 1304 mpy 1|array_dope.current_bounds  9 1305 stq temp3  10 1306 ldq 2|array_dope.original_bounds  11 1307 mpy 2|array_dope.original_bounds+1 12 1308 cmpq temp3 13 1309 tmi redim_error  14 1310 lda 1|array_dope.current_bounds+1  15 1311 ldq 1|array_dope.current_bounds  16 1312 staq 2|array_dope.current_bounds  17 1313 ldq 2,dl  18 1314 tra call_matrix  19 1315 "  20 1316 &end  1317 "  1318 "  1319 " Run-time transfer vector for Multics BASIC  1320 " Following locations cannot be changed since they are directly referenced  1321 " from compiled programs  1322 "  1323 transfer_vector sp_  000000 sp_operator_table:  000000 aa 000000 000000 zero 0 0 000001 0a 000456 7100 00 tra sp_string_assign 1  000002 0a 000463 7100 00 tra string_concatenate 2  000003 0a 000465 7100 00 tra string_compare 3  000004 0a 000514 7100 00 tra len_fun 4  000005 0a 000527 7100 00 tra pos_fun 5  000006 0a 000534 7100 00 tra chr_fun 6  000007 0a 000537 7100 00 tra clk_fun 7  000010 0a 000541 7100 00 tra dat_fun 8  000011 0a 000543 7100 00 tra usr_fun 9  000012 0a 000545 7100 00 tra str_fun 10  000013 0a 000556 7100 00 tra seg_fun 11  000014 0a 000564 7100 00 tra sst_fun 12, also used by mid$  000015 0a 000572 7100 00 tra sp_max_fun 13  000016 0a 000606 7100 00 tra sp_min_fun 14  000017 0a 000622 7100 00 tra change_from_string 15 000020 0a 000625 7100 00 tra change_to_string 16  000021 0a 000630 7100 00 tra argcnt 17  000022 0a 000633 7100 00 tra argval 18  000023 aa 000000 000000 zero 0 000024 0a 000663 7100 00 tra stop_op 20  000025 0a 000673 7100 00 tra on_op 21 000026 0a 000702 7100 00 tra gosub_op 22  000027 0a 000707 7100 00 tra on_gosub_op 23  000030 0a 000721 7100 00 tra sub_call_op 24  000031 0a 000721 7100 00 tra std_sub_call_op 25  000032 0a 001323 7100 00 tra return_op 26 000033 0a 001327 7100 00 tra sub_exit_op 27  000034 0a 004461 7100 00 tra sp_fun_call_op 28 000035 0a 004615 7100 00 tra sp_global_fun_call_op 29  000036 0a 004627 7100 00 tra sp_fun_return_op 30  000037 0a 001630 7100 00 tra sp_list_sub_op 31 000040 0a 001635 7100 00 tra sp_table_sub_op 32  000041 0a 001652 7100 00 tra sp_inv_table_sub_op 33  000042 0a 001674 7100 00 tra error_in_statement 34 000043 0a 001676 7100 00 tra missing_line 35  000044 0a 001700 7100 00 tra unclosed_for 36  000045 aa 000000 000000 zero 0 37  000046 0a 001702 7100 00 tra undefined_function 38 000047 0a 000663 7100 00 tra subend_op 39 000050 0a 001704 7100 00 tra use_tty 40  000051 0a 001711 7100 00 tra setup_fcb 41 000052 0a 001732 7100 00 tra scratch 42  000053 0a 001734 7100 00 tra margin 43  000054 0a 001737 7100 00 tra reset_data 44 000055 0a 001742 7100 00 tra numeric_write 45  000056 0a 001745 7100 00 tra string_write 46  000057 0a 001747 7100 00 tra sp_numeric_read 47  000060 0a 001764 7100 00 tra string_read 48  000061 0a 001776 7100 00 tra numeric_print 49  000062 0a 002012 7100 00 tra string_print 50  000063 0a 002014 7100 00 tra print_new_line 51 000064 0a 002016 7100 00 tra tab_for_comma 52  000065 0a 002020 7100 00 tra tab_fun 53  000066 0a 002023 7100 00 tra spc_fun 54  000067 0a 002051 7100 00 tra check_eof 55 000070 0a 002026 7100 00 tra sp_numeric_input 56  000071 0a 002032 7100 00 tra string_input 57  000072 0a 002034 7100 00 tra linput 58  000073 0a 002036 7100 00 tra end_input 59 000074 0a 002040 7100 00 tra lof_fun 60  000075 0a 002043 7100 00 tra loc_fun 61  000076 0a 002046 7100 00 tra mar_fun 62  000077 0a 001753 7100 00 tra sp_numeric_data_read 63  000100 0a 002765 7100 00 tra string_data_read 64  000101 0a 002054 7100 00 tra per_fun 65  000102 0a 002057 7100 00 tra typ_fun 66  000103 0a 001725 7100 00 tra use_fcb 67  000104 0a 002062 7100 00 tra print_using_start 68  000105 0a 002064 7100 00 tra print_using_end 69  000106 0a 002066 7100 00 tra sp_print_using_numeric 70  000107 0a 002071 7100 00 tra print_using_string 71 000110 0a 002073 7100 00 tra hps_fun 72  000111 0a 002076 7100 00 tra lin_fun 73  000112 0a 002077 7100 00 tra tst_fun 74  000113 0a 002101 7100 00 tra num_fun 75  000114 0a 002103 7100 00 tra file_fun 76  000115 0a 002115 7100 00 tra end_print 77 000116 0a 002106 7100 00 tra reset_ascii 78  000117 0a 002110 7100 00 tra reset_random 79  000120 0a 002117 7100 00 tra abs_fun 80  000121 0a 002123 7100 00 tra int_fun 81  000122 0a 002135 7100 00 tra sp_mod_fun 82  000123 0a 002151 7100 00 tra randomize 83 000124 0a 002165 7100 00 tra rnd_fun 84  000125 0a 002200 7100 00 tra sgn_fun 85  000126 0a 002206 7100 00 tra tim_fun 86  000127 0a 002225 7100 00 tra sp_val_fun 87  000130 0a 002227 7100 00 tra sp_sqr_fun 88  000131 0a 002246 7100 00 tra sp_cos_fun 89  000132 0a 002250 7100 00 tra sp_sin_fun 90  000133 0a 002252 7100 00 tra sp_cot_fun 91  000134 0a 002254 7100 00 tra sp_tan_fun 92  000135 0a 002256 7100 00 tra sp_atn_fun 93  000136 0a 002260 7100 00 tra sp_exp_fun 94  000137 0a 002262 7100 00 tra sp_log_fun 95  000140 0a 002264 7100 00 tra sp_clg_fun 96  000141 0a 002266 7100 00 tra sp_pwr_fun 97  000142 0a 002276 7100 00 tra sp_pwri_fun 98  000143 aa 000000 000000 zero 0 000144 0a 002302 7100 00 tra det_fun 100  000145 0a 002312 7100 00 tra sp_con_fun 101  000146 0a 002343 7100 00 tra sp_idn_fun 102  000147 0a 002535 7100 00 tra inv_fun 103  000150 0a 002565 7100 00 tra sp_trn_fun 104  000151 0a 002310 7100 00 tra sp_zer_fun 105  000152 0a 002643 7100 00 tra nul_fun 106  000153 0a 002645 7100 00 tra list_redim_op 107 000154 0a 002656 7100 00 tra table_redim_op 108  000155 0a 002702 7100 00 tra inv_table_redim_op 109  000156 0a 002715 7100 00 tra mat_numeric_input 110 000157 0a 002717 7100 00 tra mat_string_input 111  000160 0a 002721 7100 00 tra mat_numeric_print 112 000161 0a 002726 7100 00 tra mat_string_print 113  000162 0a 002730 7100 00 tra mat_numeric_read 114  000163 0a 002732 7100 00 tra mat_string_read 115  000164 0a 002734 7100 00 tra mat_numeric_write 116 000165 0a 002736 7100 00 tra mat_string_write 117  000166 0a 002740 7100 00 tra mat_linput_op 118 000167 0a 002742 7100 00 tra mat_numeric_data_read 119  000170 0a 002744 7100 00 tra mat_string_data_read 120  000171 0a 002746 7100 00 tra mat_print_using_numeric 121  000172 0a 002750 7100 00 tra mat_print_using_string 122 000173 0a 002372 7100 00 tra sp_mat_assign_numeric 123  000174 0a 002467 7100 00 tra sp_mat_add 124  000175 0a 002471 7100 00 tra sp_mat_sub 125  000176 0a 002505 7100 00 tra sp_mat_scalar_mult 126  000177 0a 002514 7100 00 tra sp_dot_product 127  000200 0a 002446 7100 00 tra mat_assign_string 128 000201 0a 002602 7100 00 tra mat_mult_vm 129  000202 0a 002613 7100 00 tra mat_mult_mv 130  000203 0a 002624 7100 00 tra mat_mult_mm 131  000204 0a 002752 7100 00 tra setdigits_op 132  000205 0a 004147 7100 00 tra ep_sqr_fun 133  000206 0a 004166 7100 00 tra ep_cos_fun 134  000207 0a 004170 7100 00 tra ep_sin_fun 135  000210 0a 004172 7100 00 tra ep_cot_fun 136  000211 0a 004174 7100 00 tra ep_tan_fun 137  000212 0a 004176 7100 00 tra ep_atn_fun 138  000213 0a 004200 7100 00 tra ep_exp_fun 139  000214 0a 004202 7100 00 tra ep_log_fun 140  000215 0a 004204 7100 00 tra ep_clg_fun 141  000216 0a 004206 7100 00 tra ep_pwr_fun 142  000217 0a 004216 7100 00 tra ep_pwri_fun 143  000220 0a 004131 7100 00 tra ep_mod_fun 144  000221 0a 001330 7100 00 tra sp_new_fun_call_op 145  000222 0a 001470 7100 00 tra sp_new_global_fun_call_op 146  000223 0a 001502 7100 00 tra sp_new_fun_return_op 147  000224 0a 001766 7100 00 tra new_string_data_read 148  000225 0a 000550 7100 00 tra left_fun 149 000226 0a 000553 7100 00 tra right_fun 150  1324 transfer_vector ep_  000227 ep_operator_table:  000227 aa 000000 000000 zero 0 0 000230 0a 003512 7100 00 tra ep_string_assign 1  000231 0a 000463 7100 00 tra string_concatenate 2  000232 0a 000465 7100 00 tra string_compare 3  000233 0a 000514 7100 00 tra len_fun 4  000234 0a 000527 7100 00 tra pos_fun 5  000235 0a 000534 7100 00 tra chr_fun 6  000236 0a 000537 7100 00 tra clk_fun 7  000237 0a 000541 7100 00 tra dat_fun 8  000240 0a 000543 7100 00 tra usr_fun 9  000241 0a 000545 7100 00 tra str_fun 10  000242 0a 000556 7100 00 tra seg_fun 11  000243 0a 000564 7100 00 tra sst_fun 12, also used by mid$  000244 0a 003517 7100 00 tra ep_max_fun 13  000245 0a 003533 7100 00 tra ep_min_fun 14  000246 0a 000622 7100 00 tra change_from_string 15 000247 0a 000625 7100 00 tra change_to_string 16  000250 0a 000630 7100 00 tra argcnt 17  000251 0a 000633 7100 00 tra argval 18  000252 aa 000000 000000 zero 0 000253 0a 000663 7100 00 tra stop_op 20  000254 0a 000673 7100 00 tra on_op 21 000255 0a 000702 7100 00 tra gosub_op 22  000256 0a 000707 7100 00 tra on_gosub_op 23  000257 0a 000721 7100 00 tra sub_call_op 24  000260 0a 000721 7100 00 tra std_sub_call_op 25  000261 0a 001323 7100 00 tra return_op 26 000262 0a 001327 7100 00 tra sub_exit_op 27  000263 0a 004753 7100 00 tra ep_fun_call_op 28 000264 0a 005111 7100 00 tra ep_global_fun_call_op 29  000265 0a 005123 7100 00 tra ep_fun_return_op 30  000266 0a 004045 7100 00 tra ep_list_sub_op 31 000267 0a 004053 7100 00 tra ep_table_sub_op 32  000270 0a 004071 7100 00 tra ep_inv_table_sub_op 33  000271 0a 001674 7100 00 tra error_in_statement 34 000272 0a 001676 7100 00 tra missing_line 35  000273 0a 001700 7100 00 tra unclosed_for 36  000274 aa 000000 000000 zero 0 37  000275 0a 001702 7100 00 tra undefined_function 38 000276 0a 000663 7100 00 tra subend_op 39 000277 0a 001704 7100 00 tra use_tty 40  000300 0a 001711 7100 00 tra setup_fcb 41 000301 0a 001732 7100 00 tra scratch 42  000302 0a 001734 7100 00 tra margin 43  000303 0a 001737 7100 00 tra reset_data 44 000304 0a 001742 7100 00 tra numeric_write 45  000305 0a 001745 7100 00 tra string_write 46  000306 0a 004107 7100 00 tra ep_numeric_read 47  000307 0a 001764 7100 00 tra string_read 48  000310 0a 001776 7100 00 tra numeric_print 49  000311 0a 002012 7100 00 tra string_print 50  000312 0a 002014 7100 00 tra print_new_line 51 000313 0a 002016 7100 00 tra tab_for_comma 52  000314 0a 002020 7100 00 tra tab_fun 53  000315 0a 002023 7100 00 tra spc_fun 54  000316 0a 002051 7100 00 tra check_eof 55 000317 0a 004122 7100 00 tra ep_numeric_input 56  000320 0a 002032 7100 00 tra string_input 57  000321 0a 002034 7100 00 tra linput 58  000322 0a 002036 7100 00 tra end_input 59 000323 0a 002040 7100 00 tra lof_fun 60  000324 0a 002043 7100 00 tra loc_fun 61  000325 0a 002046 7100 00 tra mar_fun 62  000326 0a 004113 7100 00 tra ep_numeric_data_read 63  000327 0a 002765 7100 00 tra string_data_read 64  000330 0a 002054 7100 00 tra per_fun 65  000331 0a 002057 7100 00 tra typ_fun 66  000332 0a 001725 7100 00 tra use_fcb 67  000333 0a 002062 7100 00 tra print_using_start 68  000334 0a 002064 7100 00 tra print_using_end 69  000335 0a 004126 7100 00 tra ep_print_using_numeric 70  000336 0a 002071 7100 00 tra print_using_string 71 000337 0a 002073 7100 00 tra hps_fun 72  000340 0a 002076 7100 00 tra lin_fun 73  000341 0a 002077 7100 00 tra tst_fun 74  000342 0a 002101 7100 00 tra num_fun 75  000343 0a 002103 7100 00 tra file_fun 76  000344 0a 002115 7100 00 tra end_print 77 000345 0a 002106 7100 00 tra reset_ascii 78  000346 0a 002110 7100 00 tra reset_random 79  000347 0a 002117 7100 00 tra abs_fun 80  000350 0a 002123 7100 00 tra int_fun 81  000351 0a 004131 7100 00 tra ep_mod_fun 82  000352 0a 002151 7100 00 tra randomize 83 000353 0a 002165 7100 00 tra rnd_fun 84  000354 0a 002200 7100 00 tra sgn_fun 85  000355 0a 002206 7100 00 tra tim_fun 86  000356 0a 004145 7100 00 tra ep_val_fun 87  000357 0a 004147 7100 00 tra ep_sqr_fun 88  000360 0a 004166 7100 00 tra ep_cos_fun 89  000361 0a 004170 7100 00 tra ep_sin_fun 90  000362 0a 004172 7100 00 tra ep_cot_fun 91  000363 0a 004174 7100 00 tra ep_tan_fun 92  000364 0a 004176 7100 00 tra ep_atn_fun 93  000365 0a 004200 7100 00 tra ep_exp_fun 94  000366 0a 004202 7100 00 tra ep_log_fun 95  000367 0a 004204 7100 00 tra ep_clg_fun 96  000370 0a 004206 7100 00 tra ep_pwr_fun 97  000371 0a 004216 7100 00 tra ep_pwri_fun 98  000372 aa 000000 000000 zero 0 000373 0a 002302 7100 00 tra det_fun 100  000374 0a 004224 7100 00 tra ep_con_fun 101  000375 0a 004266 7100 00 tra ep_idn_fun 102  000376 0a 002535 7100 00 tra inv_fun 103  000377 0a 004444 7100 00 tra ep_trn_fun 104  000400 0a 004222 7100 00 tra ep_zer_fun 105  000401 0a 002643 7100 00 tra nul_fun 106  000402 0a 002645 7100 00 tra list_redim_op 107 000403 0a 002656 7100 00 tra table_redim_op 108  000404 0a 002702 7100 00 tra inv_table_redim_op 109  000405 0a 002715 7100 00 tra mat_numeric_input 110 000406 0a 002717 7100 00 tra mat_string_input 111  000407 0a 002721 7100 00 tra mat_numeric_print 112 000410 0a 002726 7100 00 tra mat_string_print 113  000411 0a 002730 7100 00 tra mat_numeric_read 114  000412 0a 002732 7100 00 tra mat_string_read 115  000413 0a 002734 7100 00 tra mat_numeric_write 116 000414 0a 002736 7100 00 tra mat_string_write 117  000415 0a 002740 7100 00 tra mat_linput_op 118 000416 0a 002742 7100 00 tra mat_numeric_data_read 119  000417 0a 002744 7100 00 tra mat_string_data_read 120  000420 0a 002746 7100 00 tra mat_print_using_numeric 121  000421 0a 002750 7100 00 tra mat_print_using_string 122 000422 0a 004317 7100 00 tra ep_mat_assign_numeric 123  000423 0a 004376 7100 00 tra ep_mat_add 124  000424 0a 004400 7100 00 tra ep_mat_sub 125  000425 0a 004414 7100 00 tra ep_mat_scalar_mult 126  000426 0a 004423 7100 00 tra ep_dot_product 127  000427 0a 002446 7100 00 tra mat_assign_string 128 000430 0a 002602 7100 00 tra mat_mult_vm 129  000431 0a 002613 7100 00 tra mat_mult_mv 130  000432 0a 002624 7100 00 tra mat_mult_mm 131  000433 0a 002752 7100 00 tra setdigits_op 132  000434 0a 004147 7100 00 tra ep_sqr_fun 133  000435 0a 004166 7100 00 tra ep_cos_fun 134  000436 0a 004170 7100 00 tra ep_sin_fun 135  000437 0a 004172 7100 00 tra ep_cot_fun 136  000440 0a 004174 7100 00 tra ep_tan_fun 137  000441 0a 004176 7100 00 tra ep_atn_fun 138  000442 0a 004200 7100 00 tra ep_exp_fun 139  000443 0a 004202 7100 00 tra ep_log_fun 140  000444 0a 004204 7100 00 tra ep_clg_fun 141  000445 0a 004206 7100 00 tra ep_pwr_fun 142  000446 0a 004216 7100 00 tra ep_pwri_fun 143  000447 0a 004131 7100 00 tra ep_mod_fun 144  000450 0a 003547 7100 00 tra ep_new_fun_call_op 145  000451 0a 003707 7100 00 tra ep_new_global_fun_call_op 146  000452 0a 003721 7100 00 tra ep_new_fun_return_op 147  000453 0a 001766 7100 00 tra new_string_data_read 148  000454 0a 000550 7100 00 tra left_fun 149 000455 0a 000553 7100 00 tra right_fun 150  1325 "  1326 " End of section which cannot be modified  1327 "  1328 " string operations and functions  1329 "  1330 string_assign sp_,fst,fld  " string assignment, entered with pointer to lhs in bb and pointer to rhs in ab "  000456 sp_string_assign:  000456 aa 6 00172 4551 00 fst temp1 save EAQ  000457 aa 000012 2360 07 ldq 10,dl  "  000460 0a 003450 7000 00 sp_ss1: tsx0 invoke_runtime 000461 aa 6 00172 4311 00 sp_ss2: fld temp1  000462 aa 6 00104 7101 77 tra text_base_ptr,*7  1331 "  1332 " concatenate, entered with pointer to left side in ab and pointer to right side in bb  1333 "  000463 1334 string_concatenate: 000463 aa 000014 2360 07 1335 ldq 12,dl  000464 0a 002000 7100 00 1336 tra call_runtime  1337 "  1338 " string comparison, entered with pointer to lhs in ab and pointer to rhs in bb 1339 "  000465 1340 string_compare: 000465 aa 1 00000 2351 00 1341 lda ab|0 is lhs constant? 000466 aa 777777 3150 03 1342 cana =o777777,du  000467 0a 000474 6000 00 1343 tze sc1 yes, skip 000470 aa 6 00106 3511 20 1344 epbpab string_segment,* get ptr to beg of string segment  000471 aa 1 00000 3515 01 1345 eppab ab|0,au variable, get ptr to varying string 000472 aa 1 00001 3515 00 1346 eppab ab|1 000473 aa 1 00000 2351 00 1347 lda ab|0 and pickup variable length  000474 aa 3 00000 2361 00 1348 sc1: ldq bb|0 is rhs constant? 000475 aa 777777 3160 03 1349 canq =o777777,du  000476 0a 000503 6000 00 1350 tze sc2 yes, skip 000477 aa 6 00106 3531 20 1351 epbpbb string_segment,* get ptr to beg of string segment  000500 aa 3 00000 3535 02 1352 eppbb bb|0,qu variable, get ptr to varying string 000501 aa 3 00001 3535 00 1353 eppbb bb|1 000502 aa 3 00000 2361 00 1354 ldq bb|0 and pickup variable length  000503 aa 0 40140 1065 40 1355 sc2: cmpc (pr,rl),(pr,rl),fill(blank)  000504 aa 300001 000006 1356 desc9a bb|1,ql 000505 aa 100001 000005 1357 desc9a ab|1,al 000506 aa 6 00104 6001 77 1358 tze text_base_ptr,*7 return if =  000507 aa 000003 6030 04 1359 trc 3,ic convert carry indicator into negative indicator  000510 aa 000001 2360 07 1360 ldq 1,dl turn off negative indicator  000511 aa 6 00104 7101 77 1361 tra text_base_ptr,*7  000512 aa 000001 3360 07 1362 lcq 1,dl set negative indicator  000513 aa 6 00104 7101 77 1363 tra text_base_ptr,*7  1364 "  1365 " return length of string pointed at by ab  1366 "  000514 1367 len_fun:  000514 aa 1 00000 2351 00 1368 lda ab|0 get string word  000515 0a 000523 6000 00 1369 tze len1 zero means null string  000516 aa 777777 3150 03 1370 cana =o777777,du is this constant  000517 0a 000523 6000 00 1371 tze len1 yes, length already in a 000520 aa 6 00106 3511 20 1372 epbpab string_segment,* no, get ptr to string block  000521 aa 1 00000 3515 01 1373 eppab ab|0,au  000522 aa 1 00001 2351 00 1374 lda ab|1 and pick up length from that 000523 aa 106000 4110 03 1375 len1: lde =35b25,du float length  000524 aa 000000 2360 07 1376 ldq 0,dl  000525 aa 400000 4750 03 1377 fad =0.0,du  000526 aa 6 00104 7101 77 1378 tra text_base_ptr,*7 and return  1379 "  1380 " pos(a$,b$,n), a$ in ab, b$ in bb, n in EAQ  1381 "  000527 aa 6 00172 4551 00 1382 pos_fun: fst temp1  000530 aa 000021 2360 07 1383 ldq 17,dl  000531 0a 003450 7000 00 1384 pos1: tsx0 invoke_runtime  000532 aa 6 00172 4311 00 1385 pos2: fld temp1 000533 aa 6 00104 7101 77 1386 tra text_base_ptr,*7  1387 "  1388 " chr$(x)  1389 "  000534 aa 6 00172 4551 00 1390 chr_fun: fst temp1  000535 aa 000022 2360 07 1391 ldq 18,dl  000536 0a 002000 7100 00 1392 tra call_runtime  1393 "  1394 " clk$  1395 "  000537 aa 000023 2360 07 1396 clk_fun: ldq 19,dl  000540 0a 002000 7100 00 1397 tra call_runtime  1398 "  1399 " dat$  1400 "  000541 aa 000024 2360 07 1401 dat_fun: ldq 20,dl  000542 0a 002000 7100 00 1402 tra call_runtime  1403 "  1404 " usr$  1405 "  000543 aa 000025 2360 07 1406 usr_fun: ldq 21,dl  000544 0a 002000 7100 00 1407 tra call_runtime  1408 "  1409 " str$(x)  1410 "  000545 aa 6 00172 4571 00 1411 str_fun: dfst temp1 000546 aa 000026 2360 07 1412 ldq 22,dl  000547 0a 002000 7100 00 1413 tra call_runtime  1414 "  1415 " left$(a$,i), a$ in ab, i in EAQ  1416 "  000550 aa 6 00172 4551 00 1417 left_fun: fst temp1 000551 aa 000206 2360 07 1418 ldq 134,dl 000552 0a 002000 7100 00 1419 tra call_runtime  1420 "  1421 " right$(a$,i), a$ in ab, i in EAQ  1422 "  000553 1423 right_fun:  000553 aa 6 00172 4551 00 1424 fst temp1  000554 aa 000207 2360 07 1425 ldq 135,dl 000555 0a 002000 7100 00 1426 tra call_runtime  1427 "  1428 " seg$(a$,i,j), a$ in ab, i in EAQ, j at text_base_ptr,7*  1429 "  000556 aa 6 00172 4551 00 1430 seg_fun: fst temp1  000557 aa 6 00104 7161 77 1431 xec text_base_ptr,*7  000560 aa 6 00174 4551 00 1432 fst temp2  000561 aa 000027 2360 07 1433 ldq 23,dl  000562 aa 000001 0670 03 1434 adx7 1,du  000563 0a 002000 7100 00 1435 tra call_runtime  1436 "  1437 " sst(a$,i,n) and mid$(a$,i,n)  1438 "  000564 1439 sst_fun:  000564 aa 6 00172 4551 00 1440 mid_fun: fst temp1  000565 aa 6 00104 7161 77 1441 xec text_base_ptr,*7  000566 aa 6 00174 4551 00 1442 fst temp2  000567 aa 000030 2360 07 1443 ldq 24,dl  000570 aa 000001 0670 03 1444 adx7 1,du  000571 0a 002000 7100 00 1445 tra call_runtime  1446 "  1447 max sp_,fst,fcmp,fld  "  " operator to return max(arg1,arg2,...,argn)  " entered with  " ldq n,dl " tsx7 ap|max_fun  " fld arg1 " fld arg2 " ...  " fld argn "  000572 sp_max_fun: 000572 aa 6 00104 3521 77 epp2 text_base_ptr,*7 get ptr to arg list  000573 aa 000000 6200 06 eax0 0,ql save number of args 000574 aa 000000 6210 06 eax1 0,ql save return point  000575 aa 2 77777 7161 10 xec pr2|-1,0 get last arg 000576 aa 000001 1600 03 sp_max1: sbx0 1,du count down  000577 aa 2 00000 6001 11 tze pr2|0,1 return with result in eaq 000600 aa 6 00172 4551 00 fst temp1  000601 aa 2 77777 7161 10 xec pr2|-1,0 get next arg 000602 aa 6 00172 5151 00 fcmp temp1 000603 aa 000002 6050 04 tpl 2,ic  000604 aa 6 00172 4311 00 fld temp1  000605 0a 000576 7100 00 tra sp_max1  1448 "  1449 min sp_,fst,fcmp,fld  "  " operator to return min(arg1,arg,...,argn) " entered with same calling sequence as max "  000606 sp_min_fun: 000606 aa 6 00104 3521 77 epp2 text_base_ptr,*7  000607 aa 000000 6200 06 eax0 0,ql  000610 aa 000000 6210 06 eax1 0,ql  000611 aa 2 77777 7161 10 xec pr2|-1,0  000612 aa 000001 1600 03 sp_min1: sbx0 1,du  000613 aa 2 00000 6001 11 tze pr2|0,1  000614 aa 6 00172 4551 00 fst temp1  000615 aa 2 77777 7161 10 xec pr2|-1,0  000616 aa 6 00172 5151 00 fcmp temp1 000617 aa 000002 6040 04 tmi 2,ic  000620 aa 6 00172 4311 00 fld temp1  000621 0a 000612 7100 00 tra sp_min1  "  1450 "  1451 " operators to change from string to numeric array, and vice versa  1452 " entered with pr1 -> string, pr2 -> array, element size in eaq 1453 "  000622 1454 change_from_string: 000622 aa 6 00172 4551 00 1455 fst temp1  000623 aa 000053 2360 07 1456 ldq 43,dl  000624 0a 002000 7100 00 1457 tra call_runtime  1458 "  000625 1459 change_to_string:  000625 aa 6 00172 4551 00 1460 fst temp1  000626 aa 000054 2360 07 1461 ldq 44,dl  000627 0a 002000 7100 00 1462 tra call_runtime  1463 "  1464 " function to return number of Multics arguments of current subprogram  1465 "  000630 aa 6 00032 2351 20 1466 argcnt: lda sp|stack_frame.arg_ptr,* get 2*n_args in au 000631 aa 000023 7310 00 1467 ars 18+1  000632 0a 000523 7100 00 1468 tra len1 go float result and return  1469 "  1470 " arg$(x) returns string for argument number x or "" if specified  1471 " argument doesn't exist  1472 "  000633 aa 106000 4350 03 1473 argval: ufa =35b25,du fix arg number  000634 0a 000661 6044 00 1474 tmoz return_null_string return null if invalid number  000635 aa 000001 7350 00 1475 als 1  000636 aa 000000 6210 05 1476 eax1 0,al save 2*arg number  000637 aa 6 00032 3521 20 1477 epp2 sp|stack_frame.arg_ptr,* get arglist ptr  000640 aa 2 00000 1011 00 1478 cmpx1 2|0 check arg desired  000641 0a 000661 6054 00 1479 tpnz return_null_string return null if arg number too bit  000642 aa 2 00001 2351 00 1480 lda 2|1 are there any descriptors 000643 0a 000661 6000 00 1481 tze return_null_string nope  000644 aa 2 00000 3515 01 1482 epp1 2|0,au get ptr to descriptors  000645 aa 2 00000 7201 00 1483 lxl0 2|0 is there extra ptr in middle of arg list 000646 aa 000010 3000 03 1484 canx0 8,du 000647 aa 000002 6000 04 1485 tze 2,ic  000650 aa 1 00002 3515 00 1486 epp1 1|2 yes, skip over extra ptr 000651 aa 1 00000 2351 31 1487 lda 1|0,1* get descriptor 000652 aa 007777 3750 07 1488 ana =o7777,dl extract size  000653 aa 010000 1150 07 1489 cmpa =4096,dl use max of 4095 chars  000654 aa 000002 6040 04 1490 tmi 2,ic  000655 aa 007777 2350 07 1491 lda =4095,dl  000656 aa 2 00000 3521 31 1492 epp2 2|0,1* get ptr to string 000657 aa 000101 2360 07 1493 ldq 65,dl  000660 0a 002000 7100 00 1494 tra call_runtime go setup string value 1495 "  000661 1496 return_null_string: 000661 0a 005250 3514 00 1497 epp1 =0  000662 aa 6 00104 7101 77 1498 tra text_base_ptr,*7  1499 "  1500 " control operations  1501 "  000663 1502 subend_op:  000663 1503 stop_op:  000663 aa 000001 2360 07 1504 ldq 1,dl get stop code  000664 0a 003450 7000 00 1505 tsx0 invoke_runtime  1506 "  000665 aa 000000 0110 03 1507 even  000666 aa 7 00024 6521 00 1508 sprisp sb|stack_header.stack_end_ptr  000667 aa 6 00020 3721 20 1509 eppsp sp|stack_frame.prev_sp,* 000670 aa 6 00000 3731 00 1510 epbpsb sp|0  000671 aa 6 00030 3501 20 1511 eppap sp|stack_frame.operator_ptr,*  000672 aa 6 00024 6101 00 1512 rtcd sp|stack_frame.return_ptr 1513 "  1514 " operator to do on statement, entered with 1515 " fld number  1516 " tsx7 on_op  1517 " dec number_of_transfers+1  1518 " tra l1-*,ic  1519 " tra l2-*,ic  1520 " ...  1521 "  000673 1522 on_op:  000673 aa 106000 4350 03 1523 ufa =35b25,du fix number in al  000674 0a 000700 6044 00 1524 tmoz on_error  000675 aa 6 00104 3521 77 1525 eppbp text_base_ptr,*7 000676 aa 2 00000 1151 00 1526 cmpa bp|0 make sure transfer is valid 000677 aa 2 00000 6045 05 1527 tmoz bp|0,al  1528 "  000700 aa 000145 2360 07 1529 on_error: ldq 101,dl go print error and abort run  000701 0a 001670 7100 00 1530 tra error1 1531 "  1532 " operator to do gosub statement  1533 " eppbp location  1534 " tsx7 gosub_op  1535 "  000702 1536 gosub_op:  000702 aa 6 00151 7471 56 1537 stx7 pdl,id save return address  000703 0a 000705 6064 00 1538 ttn pdl_full  000704 aa 2 00000 7101 00 1539 tra bp|0 and then transfer to routine 1540 "  000705 1541 pdl_full:  000705 aa 000202 2360 07 1542 ldq 130,dl 000706 0a 001670 7100 00 1543 tra error1 1544 "  1545 " operator to do on with gosub  1546 " fld number  1547 " tsx7 on_gosub_op 1548 " dec number_of_transfers+1  1549 " tra l1-*,ic  1550 " tra l2-*,ic  1551 " ...  1552 "  000707 1553 on_gosub_op:  000707 aa 106000 4350 03 1554 ufa =35b25,du fix number in al  000710 0a 000700 6044 00 1555 tmoz on_error  000711 aa 6 00104 3515 77 1556 eppab text_base_ptr,*7 000712 aa 1 00000 1151 00 1557 cmpa ab|0  000713 0a 000700 6054 00 1558 tpnz on_error make sure number in range  000714 aa 1 00000 3521 05 1559 eppbp ab|0,al get ptr to transfer 000715 aa 2 00000 0521 00 1560 adwpbp bp|0 remove ic modification  000716 aa 1 00000 2351 00 1561 lda ab|0 get number of transfers  000717 aa 1 00000 6271 05 1562 eax7 ab|0,al compute return point 000720 0a 000702 7100 00 1563 tra gosub_op and join gosub code  1564 "  1565 " subprogram call operator  1566 " epp1 subprogram_name 1567 " tsx7 call_op 1568 " vfd 18/2*n_args,54/0 1569 " itb arg1 1570 " itb arg2 1571 " ...  1572 " itb argn 1573 " where byte1 of word1 of itb gives arg type  1574 "  000721 1575 sub_call_op:  000721 1576 std_sub_call_op:  000721 aa 1 00000 2351 00 1577 lda 1|0 is string constant  000722 aa 777777 3150 03 1578 cana =o777777,du  000723 0a 000730 6000 00 1579 tze sco1 yes, skip  000724 aa 6 00106 3511 20 1580 epbp1 string_segment,* get ptr to beg of string segment  000725 aa 1 00000 3515 01 1581 epp1 1|0,au get ptr to string value  000726 aa 1 00001 3515 00 1582 epp1 1|1  000727 aa 1 00000 2351 00 1583 lda 1|0 get string length 000730 aa 6 00050 2515 00 1584 sco1: spri1 print_using_ptr save ptr to name of entry  1585 "  1586 " pr1 points at name of entry to be called, length of name in al  1587 " search definitions chain of this segment first  1588 "  000731 aa 6 00164 7621 00 1589 lprp2 definitions get ptr to definitions  000732 aa 2 00000 2221 00 1590 ldx2 2|def_head.forward get offset of first def  000733 1591 check_def:  000733 aa 2 00001 2361 12 1592 ldq 2|def.flags,2  000734 aa 100000 3160 07 1593 canq def_flag.entry,dl skip if not entry def  000735 0a 000754 6000 00 1594 tze next_def  000736 aa 2 00002 2231 12 1595 ldx3 2|def.symbol,2 get ptr to acc for symbol  000737 aa 2 00000 3535 13 1596 epp3 2|0,3 000740 aa 3 00000 2361 00 1597 ldq 3|0 extract acc size  000741 aa 000033 7320 00 1598 qrs 27 000742 aa 0 40140 1065 40 1599 cmpc (pr,rl),(pr,rl),fill(blank) check names  000743 aa 100001 000005 1600 desc9a 1|1,al  000744 aa 300000 200006 1601 desc9a 3|0(1),ql  000745 0a 000754 6010 00 1602 tnz next_def  1603 "  1604 " found the definition, make sure class = 0 1605 "  000746 aa 2 00001 2361 12 1606 ldq 2|def.class,2  000747 aa 000007 3760 07 1607 anq 7,dl  000750 0a 000754 6010 00 1608 tnz next_def  000751 aa 2 00001 2361 12 1609 ldq 2|def.value,2 get ptr to entry 000752 aa 6 00104 3521 62 1610 epp2 text_base_ptr,*qu 000753 0a 000772 7100 00 1611 tra have_entry 1612 "  1613 " go on to next definition  1614 "  000754 aa 2 00000 2221 12 1615 next_def: ldx2 2|def.forward,2  000755 aa 2 00000 2341 12 1616 szn 2|0,2 is this trailer of 0  000756 0a 000733 6010 00 1617 tnz check_def no, keep looking  1618 "  1619 " call runtime to find entry  1620 "  000757 aa 6 00030 3701 20 1621 epplp sp|stack_frame.lp_ptr,*  000760 aa 6 00000 2541 00 1622 call |[basic_find_proc_](runtime_arglist)  000761 aa 6 00116 3501 00 000762 4a 4 00060 3521 20 000763 aa 6 00040 7531 00 000764 aa 7 00036 6701 20 000765 aa 6 00000 1731 00 000766 aa 6 00040 0731 00 000767 aa 6 00102 3701 20 1623 epplp program_header,* 000770 aa 000000 1160 07 1624 cmpq 0,dl  000771 0a 001321 6010 00 1625 tnz subprogram_not_found  1626 "  1627 " ptr to entry is in pr2, special handling needed if not BASIC  1628 " check number of arguments supplied against number wanted  1629 "  000772 1630 have_entry: 000772 aa 6 00104 3501 77 1631 epp0 text_base_ptr,*7 get ptr to arglist  000773 aa 020000 6210 00 1632 eax1 ignore_handler  000774 aa 6 00170 2411 00 1633 orsx1 flags calling prog not interested in conditions 000775 aa 2 00000 7201 00 1634 lxl0 2|0 get opcode from entry word  000776 aa 627000 1000 03 1635 cmpx0 eax7,du is this eax7  000777 0a 001076 6010 00 1636 tnz not_basic no, can't possibly be basic 001000 aa 2 77777 2351 00 1637 lda 2|-1 get word containing descriptor in upper  001001 aa 400000 3150 07 1638 cana =o400000,dl is this basic entry  001002 0a 001076 6000 00 1639 tze not_basic  001003 aa 2 00003 2351 00 1640 lda 2|3 basic, get ptr to program header of new entry 001004 aa 2 77777 3515 05 1641 epp1 2|-1,al  001005 aa 1 00005 7201 00 1642 lxl0 1|bph.incoming_args get 2*n_args wanted  001006 aa 0 00000 1001 00 1643 cmpx0 0|0 compare with number supplied  001007 0a 001311 6010 00 1644 tnz wrong_number_of_args  001010 aa 1 00005 2201 00 1645 ldx0 1|bph.incoming_args get ptr to arg type array 001011 aa 1 00000 3515 10 1646 epp1 1|0,0 1647 "  1648 " extend our stack frame to include all of frame of called sub  1649 "  001012 1650 segdef call_op_begin denotes section of code where x7 nonvalid 001012 1651 call_op_begin:  001012 aa 2 00000 2271 00 1652 ldx7 2|0 get stack size  001013 aa 001040 6230 17 1653 eax3 pdl_size+math_block_size+fn_size,7 ead space for pdl and fn frames  001014 aa 7 00024 3535 20 1654 epp3 sb|stack_header.stack_end_ptr,*  001015 aa 3 00000 3701 13 1655 epp4 3|0,3 001016 aa 7 00024 6501 00 1656 spri4 sb|stack_header.stack_end_ptr  001017 aa 6 00022 6501 00 1657 spri4 sp|stack_frame.next_sp  001020 aa 3 00022 6501 00 1658 spri4 pr3|stack_frame.next_sp set now so we can reuse pr4  1659 "  1660 " pr3 points at where new frame will be, sp still points at old frame  1661 " now copy args into new frame and check type of each arg as we do it  1662 " Note: pr5, x4 and x6 may be referenced by arg ITB(s)  1663 "  001021 aa 000000 6200 00 1664 eax0 0 001022 aa 000000 6210 00 1665 eax1 0 001023 1666 arg_copy:  001023 aa 0 00000 1001 00 1667 cmpx0 0|0 are we done 001024 0a 001037 6050 00 1668 tpl arg_copy_done yes  001025 aa 0 00002 3701 10 1669 epp4 0|2,0 get ptr to arg ITB pair  001026 aa 0 00111 1065 00 1670 cmpc (pr),(pr,x1) check arg type  001027 aa 400000 200001 1671 desc9a pr4|0(1),1  001030 aa 100000 000001 1672 desc9a pr1|0,1 001031 0a 001313 6010 00 1673 tnz wrong_arg_type error if mismatch  001032 aa 4 00000 3701 20 1674 epp4 pr4|0,* arg ok, get ptr to arg  001033 aa 3 00200 6501 10 1675 spri4 3|args,0 store ptr in new frame 001034 aa 000002 0600 03 1676 adx0 2,du update for next arg 001035 aa 000001 0610 03 1677 adx1 1,du  001036 0a 001023 7100 00 1678 tra arg_copy and repeat until done  001037 1679 arg_copy_done:  001037 aa 0 00002 3701 10 1680 epp4 0|2,0 get ptr to return location 001040 aa 6 00176 6501 00 1681 spri4 temp3 save for use when we return  001041 aa 6 00000 3701 00 1682 epp4 sp|0 save ptr to current stack frame 001042 aa 2 00003 3521 00 1683 epp2 2|3 fake "tsp2" for subsequent entry code  001043 aa 3 00020 6521 00 1684 sprisp 3|stack_frame.prev_sp set up new frame  001044 aa 6 00022 2535 00 1685 spri3 sp|stack_frame.next_sp  001045 1686 segdef new_frame denotes section where in new stack  001045 1687 new_frame:  001045 aa 3 00000 3721 00 1688 eppsp 3|0 stack frame now belongs to called sub  001046 aa 6 00170 4501 00 1689 stz flags clear flags 001047 aa 6 00032 2501 00 1690 spri0 sp|stack_frame.arg_ptr  001050 aa 6 00172 4501 00 1691 stz temp1  001051 aa 6 00172 7401 00 1692 stx0 temp1 save 2*n_args in upper 001052 aa 777600 6360 17 1693 eaq -args,7 compute number of words to zero  001053 aa 6 00172 1761 00 1694 sbq temp1 adjusting for ptr words 001054 0a 001062 6000 00 1695 tze sub_go skip if nothing to zero  001055 aa 6 00200 3515 10 1696 epp1 sp|args,0 001056 aa 000002 7360 00 1697 qls 2  001057 aa 000140 1004 00 1698 mlr (),(pr,rl),fill(0) 001060 aa 000000 000000 1699 vfd 36/0  001061 aa 100000 000002 1700 desc9a 1|0,qu  1701 "  001062 aa 6 00040 7531 00 1702 sub_go: sreg sp|stack_frame.regs  001063 aa 4 00024 3571 00 1703 stcd pr4|stack_frame.return_ptr set real return ptr in old frame  001064 0a 003022 7100 00 1704 tra init_stack join standard entry sequence  001065 1705 segdef call_op_end 001065 1706 call_op_end:  1707 "  1708 " control returns here after subprogram finishes, return to real caller 1709 "  001065 aa 6 00102 3701 20 1710 sub_done: epp4 program_header,* 001066 aa 4 00002 2231 00 1711 ldx3 pr4|bph.string_storage  001067 aa 6 00000 3715 13 1712 epp5 sp|0,3 load to start of string vars 001070 aa 4 00015 2251 00 1713 ldx5 pr4|bph.precision_ind 001071 0a 003211 7160 15 1714 xec load_op_tbl_ptr,5  001072 aa 6 00040 0731 00 1715 lreg sp|stack_frame.regs  001073 aa 757777 6210 00 1716 eax1 use_handler turn off ignore flag 001074 aa 6 00170 3411 00 1717 ansx1 flags so we will handle conditions again  001075 aa 6 00176 7101 20 1718 tra temp3,*  1719 "  1720 "  1721 " this procedure being called is not written in basic, we'll have to  1722 " generate a standard Multics argument list. extend stack by enough  1723 " to hold an arg pointer and a desc pointer for each argument.  1724 "  001076 1725 not_basic:  001076 aa 0 00000 2351 00 1726 lda 0|0 get number of args * 2  001077 0a 001304 6000 00 1727 tze no_args easy if no args  001100 aa 7 00024 3535 20 1728 epp3 sb|stack_header.stack_end_ptr,*  001101 aa 3 00002 3515 01 1729 epp1 3|2,au get ptr to where descriptor ptrs will go  001102 aa 000001 7350 00 1730 als 1  001103 aa 000021 0750 03 1731 ada 2+15,du form 4*n_args+2 and make multiple of 16  001104 aa 777760 3750 03 1732 ana =o7777760,du  001105 aa 6 00165 7551 00 1733 sta fn_temp1 save size of extension in upper  001106 aa 7 00025 0551 00 1734 asa sb|stack_header.stack_end_ptr+1 extend stack  001107 aa 6 00023 0551 00 1735 asa sp|stack_frame.next_sp+1  1736 "  1737 " at this point:  1738 " pr0 -> arg list in basic program 1739 " pr1 -> where descriptors should go  1740 " pr2 -> entry point of procedure being called 1741 " pr3 -> where argument list should go 1742 " pr5 -> where string variables are stored 1743 "  001110 aa 6 00176 2521 00 1744 spri2 temp3 save so can use pr2 as a temp 001111 aa 000000 6200 00 1745 eax0 0 init arg copy loop 001112 aa 000000 6210 00 1746 eax1 0 amount of free space is 0  001113 aa 4 00015 2251 00 1747 ldx5 4|bph.precision_ind  1748 "  001114 aa 0 00000 1001 00 1749 ac_loop: cmpx0 0|0 have all args been copied?  001115 0a 001264 6050 00 1750 tpl ac_done yes, skip 001116 aa 0 00002 2361 10 1751 ldq 0|2,0 extract arg type code  001117 aa 000022 7720 00 1752 qrl 18 001120 aa 000077 3760 07 1753 anq =o77,dl  001121 aa 0 00002 3521 30 1754 epp2 0|2,0* get ptr to basic arg  001122 0a 001121 7100 06 1755 tra *-1,ql dispatch to handle arg type  001123 0a 001134 7100 00 1756 tra n_scalar  001124 0a 001141 7100 00 1757 tra s_scalar  001125 0a 001174 7100 00 1758 tra n_list 001126 0a 001256 7100 00 1759 tra s_list 001127 0a 001221 7100 00 1760 tra n_table  001130 0a 001256 7100 00 1761 tra s_table  001131 0a 001260 7100 00 1762 tra n_fun  001132 0a 001260 7100 00 1763 tra s_fun  001133 0a 001262 7100 00 1764 tra file  1765 "  1766 " arg is numeric scalar, pass ptr directly to arg and use  1767 " constant float bin(27) descriptor 1768 "  001134 aa 3 00002 2521 10 1769 n_scalar: spri2 3|2,0 save arg ptr 001135 0a 001307 3520 15 1770 epp2 float_bin_desc,5  001136 aa 1 00000 2521 10 1771 spri2 1|0,0 save desc ptr 001137 aa 000002 0600 03 1772 adx0 2,du go do next arg  001140 0a 001114 7100 00 1773 tra ac_loop  1774 "  1775 " arg is string scalar, treat as char(*) where * is 1776 " current length  1777 "  001141 aa 000102 2360 07 1778 s_scalar: ldq 66,dl go call runtime to make string value unique  001142 aa 6 00166 5441 00 1779 sprp4 fn_temp2  001143 aa 6 00030 3701 20 1780 epp4 sp|stack_frame.lp_ptr,*  001144 aa 6 00000 2541 00 1781 call |[basic_runtime_](runtime_arglist)  001145 aa 6 00116 3501 00 001146 4a 4 00062 3521 20 001147 aa 6 00040 7531 00 001150 aa 7 00036 6701 20 001151 aa 6 00000 1731 00 001152 aa 6 00040 0731 00 001153 aa 6 00166 7641 00 1782 lprp4 fn_temp2  001154 aa 2 00000 2351 00 1783 lda pr2|0 get string word 001155 aa 6 00106 3525 20 1784 epbp2 string_segment,* get ptr to beg of string segment  001156 aa 2 00000 3521 01 1785 epp2 pr2|0,au get ptr to string block 001157 aa 2 00002 3521 00 1786 epp2 pr2|2 get ptr to chars  001160 aa 3 00002 2521 10 1787 spri2 pr3|2,0 save arg ptr  001161 aa 000001 1010 03 1788 cmpx1 1,du is there one word in free block  001162 aa 000002 6050 04 1789 tpl 2,ic yes, skip  001163 0a 001250 7020 00 1790 tsx2 extend_by_16 no, extend stack by 16  001164 aa 2 77777 2361 00 1791 ldq pr2|-1 get string length  001165 aa 524000 2760 03 1792 orq char_type,du make descriptor  001166 aa 4 00000 7561 00 1793 stq 4|0 save descriptor in free space 001167 aa 1 00000 6501 10 1794 spri4 1|0,0 store ptr to descriptor  001170 aa 4 00001 3701 00 1795 epp4 4|1 update free space ptr  001171 aa 000001 1610 03 1796 sbx1 1,du and free space count  001172 aa 000002 0600 03 1797 adx0 2,du go do next arg  001173 0a 001114 7100 00 1798 tra ac_loop  1799 "  1800 " arg is numeric list, treat as (*) float bin  1801 "  001174 aa 000004 1010 03 1802 n_list: cmpx1 4,du are there 4 words free  001175 aa 000002 6050 04 1803 tpl 2,ic  001176 0a 001250 7020 00 1804 tsx2 extend_by_16 no, extend stack by 16  001177 0a 001307 2360 15 1805 ldq float_bin_desc,5  001200 aa 000100 2760 03 1806 orq dim_1,du insert dim flag in descriptor  001201 aa 4 00000 7561 00 1807 stq 4|descriptor.type  001202 aa 4 00001 4501 00 1808 stz 4|descriptor.lower_1 lb1 = 0  001203 aa 2 00004 2361 00 1809 ldq pr2|array_dope.current_bounds  001204 aa 000001 1760 07 1810 sbq 1,dl  001205 aa 4 00002 7561 00 1811 stq 4|descriptor.upper_1 ub1 = our upper bound 001206 0a 001217 7160 15 1812 xec s1b,5  001207 aa 4 00003 7561 00 1813 stq 4|descriptor.multiplier_1 m1 = 1  001210 aa 1 00000 6501 10 1814 spri4 1|0,0 save ptr to descriptor  001211 aa 4 00004 3701 00 1815 epp4 4|4 adjust free space  001212 aa 000004 1610 03 1816 sbx1 4,du  001213 aa 2 00000 3521 20 1817 n_list_1: epp2 pr2|array_dope.data,* get ptr to data  001214 aa 3 00002 2521 10 1818 spri2 3|2,0 save arg ptr  001215 aa 000002 0600 03 1819 adx0 2,du update for next arg 001216 0a 001114 7100 00 1820 tra ac_loop  001217 aa 000001 2360 07 1821 s1b: ldq 1,dl  001220 aa 000002 2360 07 1822 ldq 2,dl  1823 "  1824 " arg is numeric table, treat as(*,*) float bin 1825 "  001221 aa 000007 1010 03 1826 n_table: cmpx1 7,du are there 7 words free 001222 aa 000002 6050 04 1827 tpl 2,ic  001223 0a 001250 7020 00 1828 tsx2 extend_by_16 no, extend stack by 16  001224 0a 001307 2360 00 1829 ldq float_bin_desc 001225 aa 000200 2760 03 1830 orq dim_2,du insert dim flag in descriptor  001226 aa 4 00000 7561 00 1831 stq 4|descriptor.type  001227 aa 4 00001 4501 00 1832 stz 4|descriptor.lower_1 lb1 = 0  001230 aa 2 00005 2361 00 1833 ldq pr2|array_dope.current_bounds+1  001231 aa 000000 7360 15 1834 qls 0,5  001232 aa 4 00006 7561 00 1835 stq 4|descriptor.multiplier_2 m2 = ub1 + 1 001233 aa 000000 7320 15 1836 qrs 0,5  001234 aa 000001 1760 07 1837 sbq 1,dl  001235 aa 4 00002 7561 00 1838 stq 4|descriptor.upper_1 ub1 = our 2nd upper  001236 0a 001217 7160 15 1839 xec s1b,5  001237 aa 4 00003 7561 00 1840 stq 4|descriptor.multiplier_1 m1 = 1  001240 aa 4 00004 4501 00 1841 stz 4|descriptor.lower_2 lb2 = 0  001241 aa 2 00004 2361 00 1842 ldq pr2|array_dope.current_bounds  001242 aa 000001 1760 07 1843 sbq 1,dl  001243 aa 4 00005 7561 00 1844 stq 4|descriptor.upper_2 ub2 = our 1st upper  001244 aa 1 00000 6501 10 1845 spri4 1|0,0 save ptr to descriptor  001245 aa 4 00007 3701 00 1846 epp4 4|7 update free space  001246 aa 000007 1610 03 1847 sbx1 7,du  001247 0a 001213 7100 00 1848 tra n_list_1  1849 "  1850 " extend stack by 16 words  1851 "  001250 1852 extend_by_16:  001250 aa 7 00024 3701 20 1853 epp4 sb|stack_header.stack_end_ptr,* get ptr to end of stack  001251 aa 000020 6210 00 1854 eax1 16 extend stack by 16 words  001252 aa 7 00025 0411 00 1855 asx1 sb|stack_header.stack_end_ptr+1  001253 aa 6 00023 0411 00 1856 asx1 sp|stack_frame.next_sp+1  001254 aa 6 00165 0411 00 1857 asx1 fn_temp1 remember additional exension  001255 aa 000000 7100 12 1858 tra 0,2 return  1859 "  1860 " a string list or table is invalid 1861 "  001256 1862 s_list: 001256 aa 000231 2360 07 1863 s_table: ldq 153,dl 001257 0a 001314 7100 00 1864 tra error2 1865 "  1866 " a string or numeric function is invalid  1867 "  001260 1868 n_fun:  001260 aa 000232 2360 07 1869 s_fun: ldq 154,dl  001261 0a 001314 7100 00 1870 tra error2 1871 "  1872 " a file is invalid 1873 "  001262 aa 000233 2360 07 1874 file: ldq 155,dl  001263 0a 001314 7100 00 1875 tra error2 1876 "  1877 " all args have been copied, finish up new arg list and make call  1878 "  001264 aa 0 00000 2351 00 1879 ac_done: lda 0|0 get 2*n_args  001265 aa 000000 6360 01 1880 eaq 0,au indicate descriptors present 001266 aa 000004 2750 07 1881 ora 4,dl insert pl1 code  001267 aa 3 00000 7571 00 1882 staq 3|0 set head of new arg list 001270 aa 3 00000 3521 00 1883 epp2 pr3|0 get ptr to new arg list in temp  001271 aa 0 00002 3535 10 1884 epp3 pr0|2,0 get ptr to return point  001272 aa 2 00000 3501 00 1885 epp0 pr2|0 copy ptr to new arg list  001273 aa 6 00176 3521 20 1886 epp2 temp3,* restore pr2 for actual call  001274 1887 non_basic_go:  001274 aa 6 00176 2535 00 1888 spri3 temp3  001275 aa 6 00040 7531 00 1889 sreg sp|stack_frame.regs  001276 aa 6 00024 3571 00 1890 stcd sp|stack_frame.return_ptr 001277 aa 2 00000 7131 00 1891 callsp 2|0 jump to proc  1892 "  1893 " return from called proc  1894 "  001300 aa 6 00165 3201 00 1895 lcx0 fn_temp1 get - extension size  001301 aa 7 00025 0401 00 1896 asx0 sb|stack_header.stack_end_ptr+1 remove stack extension  001302 aa 6 00023 0401 00 1897 asx0 sp|stack_frame.next_sp+1  001303 0a 001065 7100 00 1898 tra sub_done  1899 "  1900 " call has no args  1901 "  001304 aa 0 00002 3535 00 1902 no_args: epp3 pr0|2 get ptr to real return pt  001305 aa 6 00165 4501 00 1903 stz fn_temp1 stack not extended  001306 0a 001274 7100 00 1904 tra non_basic_go use same arg ptr  1905 "  001307 1906 float_bin_desc: 001307 aa 414000 000033 1907 oct 414000000033  001310 aa 420000 000077 1908 oct 420000000077  1909 "  001311 1910 wrong_number_of_args:  001311 aa 000226 2360 07 1911 ldq 150,dl 001312 0a 001314 7100 00 1912 tra error2 1913 "  001313 1914 wrong_arg_type: 001313 aa 000227 2360 07 1915 ldq 151,dl 1916 "  001314 aa 6 00150 7561 00 1917 error2: stq number  001315 aa 6 00050 3515 20 1918 epp1 print_using_ptr,* get ptr to name of subprogram  001316 aa 000002 2360 07 1919 ldq 2,dl  001317 0a 003450 7000 00 1920 tsx0 invoke_runtime  001320 0a 000663 7100 00 1921 tra stop_op  1922 "  001321 1923 subprogram_not_found:  001321 aa 000230 2360 07 1924 ldq 152,dl 001322 0a 001314 7100 00 1925 tra error2 1926 "  1927 " operator to do gosub return  1928 "  001323 1929 return_op:  001323 aa 6 00151 2361 54 1930 ldq pdl,di pop pdl  001324 aa 6 00104 6011 62 1931 tnz text_base_ptr,*qu it is return point if non-zero  1932 "  001325 aa 000146 2360 07 1933 ldq 102,dl error, return without gosub  001326 0a 001670 7100 00 1934 tra error1 go print error and abort run  1935 "  001327 1936 sub_exit_op:  001327 0a 002775 7100 00 1937 tra not_yet  1938 "  1939 new_fun_call_op sp_,1,fst,18  "  " operator to call a user defined function, entered with  " epp3 entry  " tsx7 fun_call_op " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry point is  " entry: vfd 36/fun_call_word  " vfd 36/fun_local_word  " [first executable instruction]  "  001330 sp_new_fun_call_op: 001330 aa 6 00165 7441 00 stx4 fn_temp1 use current display as next fn display  001331 aa 6 00166 5441 00 sprplp fn_temp2 use current value as next value of program header pt  "  " at this point:  " lp -> current program header " fn_temp1 = new function display value  " fn_temp2 = packed ptr to new program header  "  001332 sp_new_fun_call:  001332 aa 6 00172 5441 00 sprplp temp1  001333 aa 6 00172 2361 00 ldq temp1  001334 aa 6 00151 7561 56 stq pdl,id put current program header pt on pdl  001335 0a 000705 6064 00 ttn pdl_full  001336 aa 6 00104 3521 77 eppbp text_base_ptr,*7 get ptr to fun call word  001337 aa 3 00000 2361 00 ldq pr3|0 get expected call word  001340 aa 2 00000 1161 00 cmpq bp|0 check with actual  001341 0a 001466 6010 00 tnz fn_call_error error if not the same  001342 aa 000000 2350 07 lda 0,dl get number of args  001343 aa 000005 7370 00 lls 5  001344 aa 6 00172 7551 00 sta temp1 save  001345 aa 2 00001 3501 05 eppap bp|1,al get ptr to return loc  001346 aa 6 00174 5401 00 sprpap temp2  001347 aa 6 00174 2361 00 ldq temp2  001350 aa 6 00151 7561 56 stq pdl,id put on pdl 001351 0a 000705 6064 00 ttn pdl_full  001352 aa 6 00151 7441 56 stx4 pdl,id put fn display on pdl 001353 0a 000705 6064 00 ttn pdl_full  001354 aa 6 00151 7461 56 stx6 pdl,id put current frame offset on pdl  001355 0a 000705 6064 00 ttn pdl_full  001356 aa 6 00151 4501 56 stz pdl,id put in fence of 0  001357 0a 000705 6064 00 ttn pdl_full  001360 aa 3 00001 2361 00 ldq pr3|1 get local word  001361 aa 000000 2350 07 lda 0,dl get number of locals 001362 aa 000005 7370 00 lls 5  001363 aa 6 00174 7551 00 sta temp2 save  001364 aa 6 00172 0751 00 ada temp1 get number args + locals  001365 aa 000002 0750 07 ada 2,dl add 1 for return arg + 1 to make even  001366 aa 777776 3750 07 ana =o777776,dl make multiple of 2 001367 aa 000022 7370 00 lls 18 001370 aa 6 00160 2271 00 ldx7 next_frame get next frame offset  001371 aa 6 00160 0751 00 ada next_frame update next frame offset  001372 aa 6 00160 7551 00 sta next_frame 001373 aa 6 00157 1151 00 cmpa last_frame have we exceeded available space  001374 0a 001403 6044 00 tmoz sp_nfc1  001375 aa 7 00024 3501 20 eppap sb|stack_header.stack_end_ptr,* get ptr to end of stack  001376 aa 0 00100 3501 00 eppap ap|fn_extend_size extend stack  001377 aa 7 00024 2501 00 spriap sb|stack_header.stack_end_ptr  001400 aa 6 00022 2501 00 spriap sp|stack_frame.next_sp  001401 aa 000100 6350 00 eaa fn_extend_size 001402 aa 6 00157 0551 00 asa last_frame 001403 aa 6 00176 2535 00 sp_nfc1: spri3 temp3 save, may need pr3 for string handling  001404 aa 000001 6210 00 eax1 1 init arg copy loop 001405 aa 000001 6220 00 eax2 1 001406 aa 6 00000 3501 17 eppap sp|0,7 get ptr to next frame  001407 aa 0 00000 4501 00 stz ap|0 init return value  001410 aa 6 00172 7201 00 lxl0 temp1 get number of args 001411 0a 001445 6000 00 tze sp_nfc5 skip if zero  001412 aa 3 00000 2361 00 ldq pr3|0 get call word  001413 aa 000005 7370 00 lls 5 shift to position  001414 aa 000001 7360 00 sp_nfc2: qls 1 check next arg  001415 aa 6 00175 7561 00 stq temp2+1  001416 0a 001427 6040 00 tmi sp_nfc4 minus means string arg  001417 aa 2 00000 7161 12 xec bp|0,2 load the arg value 001420 aa 0 00000 4551 11 fst ap|0,1 and save in frame  001421 aa 000001 0610 03 sp_nfc3: adx1 1,du account for position  001422 aa 000001 0620 03 adx2 1,du  001423 aa 000001 1600 03 sbx0 1,du count down  001424 0a 001445 6000 00 tze sp_nfc5 and skip if no more args  001425 aa 6 00175 2361 00 ldq temp2+1 do next arg  001426 0a 001414 7100 00 tra sp_nfc2  001427 aa 2 00000 7161 12 sp_nfc4: xec bp|0,2 string arg, get ptr  001430 aa 0 00000 3535 11 epp3 ap|0,1 get ptr to target 001431 aa 3 00000 4501 00 stz pr3|0 clear string temp (important!)  001432 aa 000012 2360 07 ldq 10,dl get action code 001433 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  001434 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  001435 aa 6 00116 3501 00 001436 4a 4 00062 3521 20 001437 aa 6 00040 7531 00 001440 aa 7 00036 6701 20 001441 aa 6 00000 1731 00 001442 aa 6 00040 0731 00 001443 aa 6 00102 3701 20 epplp program_header,* 001444 0a 001421 7100 00 tra sp_nfc3 go do next arg  001445 aa 6 00174 7201 00 sp_nfc5: lxl0 temp2 get number of locals  001446 0a 001454 6000 00 tze sp_nfc7 skip if no locals 001447 aa 0 00000 4501 11 sp_nfc6: stz ap|0,1 zero local 001450 aa 000001 1600 03 sbx0 1,du  001451 0a 001454 6000 00 tze sp_nfc7  001452 aa 000001 0610 03 adx1 1,du  001453 0a 001447 7100 00 tra sp_nfc6  001454 0a 000000 3500 00 sp_nfc7: eppap sp_operator_table restore ptr to operators  001455 aa 6 00165 2241 00 ldx4 fn_temp1 get new fn display  001456 aa 000000 6260 17 eax6 0,7 get new fn offset  001457 aa 6 00166 7641 00 lprplp fn_temp2 get new program header pt 001460 aa 6 00102 6501 00 sprilp program_header  001461 aa 6 00104 6505 00 spbplp text_base_ptr set text base ptr also  001462 aa 4 00000 6271 00 eax7 lp|0 set program header offset  001463 aa 6 00152 7471 00 stx7 program_header_offset 001464 aa 6 00176 3535 20 epp3 temp3,* restore ptr to entry 001465 aa 3 00002 7101 00 tra pr3|2 and enter function  1940 "  001466 1941 fn_call_error:  001466 aa 000200 2360 07 1942 ldq 128,dl 001467 0a 001670 7100 00 1943 tra error1 1944 "  1945 "  1946 new_global_fun_call_op sp_ "  " operator to call global function  " epp3 entry_info  " tsx7 global_fun_call_op  " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry info is " word 0 packed ptr to entry pt  " word 1 packed ptr to stack frame of parent  "  001470 sp_new_global_fun_call_op:  001470 aa 6 00000 6351 00 eaa sp|0 get rel(parent stack) - rel(our stack)  001471 aa 000000 5310 00 neg 0  001472 aa 6 00165 7551 00 sta fn_temp1  001473 aa 3 00001 7201 00 lxl0 pr3|1 001474 aa 6 00165 0401 00 asx0 fn_temp1 save as new display value  001475 aa 3 00001 7621 00 lprpbp pr3|1 get ptr to parent stack frame of fun 001476 aa 2 00102 3521 20 eppbp bp|program_header_equ,* load ptr to program header  001477 aa 6 00166 5421 00 sprpbp fn_temp2 save packed ptr to program header 001500 aa 3 00000 7631 00 lprp3 pr3|0 get ptr to entry pt  001501 0a 001332 7100 00 tra sp_new_fun_call join common code  1947 "  1948 new_fun_return_op sp_,1,fld  "  " operator to return from function, entered with  " epp3 entry  " tsx7 fun_return_op  "  001502 sp_new_fun_return_op:  001502 aa 6 00151 2361 54 ldq pdl,di pop pdl  001503 0a 001626 6064 00 ttn fn_return_error  001504 0a 001502 6010 00 tnz sp_new_fun_return_op skip gosub return 001505 aa 6 00000 3501 16 eppap sp|0,6 get ptr to this frame  001506 aa 000001 6210 00 eax1 1 init arg, local loop  001507 aa 3 00000 2361 00 ldq pr3|0 get call word  001510 aa 000000 2350 07 lda 0,dl extract number of args  001511 aa 000005 7370 00 lls 5  001512 aa 000000 6200 05 eax0 0,al  001513 0a 001536 6000 00 tze sp_nfr3 skip if no args  001514 aa 000001 7360 00 sp_nfr1: qls 1 check next arg  001515 0a 001533 6050 00 tpl sp_nfr2 plus means numeric  001516 aa 6 00174 7561 00 stq temp2  001517 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  001520 aa 000034 2360 07 ldq 28,dl  001521 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  001522 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  001523 aa 6 00116 3501 00 001524 4a 4 00062 3521 20 001525 aa 6 00040 7531 00 001526 aa 7 00036 6701 20 001527 aa 6 00000 1731 00 001530 aa 6 00040 0731 00 001531 aa 6 00102 3701 20 epplp program_header,* 001532 aa 6 00174 2361 00 ldq temp2  001533 aa 000001 0610 03 sp_nfr2: adx1 1,du  001534 aa 000001 1600 03 sbx0 1,du check next arg  001535 0a 001514 6010 00 tnz sp_nfr1  001536 aa 3 00001 2361 00 sp_nfr3: ldq pr3|1 get local word  001537 aa 000000 2350 07 lda 0,dl  001540 aa 000005 7370 00 lls 5 get number of locals  001541 aa 000000 6200 05 eax0 0,al  001542 0a 001566 6000 00 tze sp_nfr6 skip if none  001543 aa 000001 7360 00 sp_nfr4: qls 1  001544 0a 001562 6050 00 tpl sp_nfr5  001545 aa 6 00174 7561 00 stq temp2  001546 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  001547 aa 000034 2360 07 ldq 28,dl  001550 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  001551 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  001552 aa 6 00116 3501 00 001553 4a 4 00062 3521 20 001554 aa 6 00040 7531 00 001555 aa 7 00036 6701 20 001556 aa 6 00000 1731 00 001557 aa 6 00040 0731 00 001560 aa 6 00102 3701 20 epplp program_header,* 001561 aa 6 00174 2361 00 ldq temp2  001562 aa 000001 1600 03 sp_nfr5: sbx0 1,du  001563 0a 001566 6000 00 tze sp_nfr6  001564 aa 000001 0610 03 adx1 1,du  001565 0a 001543 7100 00 tra sp_nfr4  001566 aa 6 00160 7461 00 sp_nfr6: stx6 next_frame reset end of stack 001567 aa 6 00151 2261 54 ldx6 pdl,di pop function stack  001570 aa 6 00151 2241 54 ldx4 pdl,di restore display from pdl  001571 aa 3 00000 2361 00 ldq pr3|0 check mode of return value  001572 aa 000005 7360 00 qls 5  001573 0a 001576 6040 00 tmi sp_nfr7 minus is string  001574 aa 0 00000 4311 00 fld ap|0 load numeric value  001575 0a 001615 7100 00 tra sp_nfr8 and return  001576 aa 6 00171 3515 00 sp_nfr7: eppab string_value set string ptr  001577 aa 1 00000 2341 00 szn ab|0 is string_value word zero  001600 0a 001612 6000 00 tze sp_nfr7a yes, don't have to deallocate it 001601 aa 000034 2360 07 ldq 28,dl no, deallocate it  001602 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  001603 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  001604 aa 6 00116 3501 00 001605 4a 4 00062 3521 20 001606 aa 6 00040 7531 00 001607 aa 7 00036 6701 20 001610 aa 6 00000 1731 00 001611 aa 6 00040 0731 00 001612 aa 0 00000 2361 00 sp_nfr7a: ldq ap|0 get function value  001613 aa 1 00000 7561 00 stq ab|0 set string value 001614 aa 400000 4310 03 fld =0.0,du get 0 numeric value  001615 0a 000000 3500 00 sp_nfr8: eppap sp_operator_table restore ptr to operators  001616 aa 6 00151 7621 54 lprpbp pdl,di get return pt from pdl  001617 aa 6 00151 7641 54 lprplp pdl,di get program header pt from pdl  001620 aa 6 00102 6501 00 sprilp program_header restore stack frame  001621 aa 6 00104 6505 00 spbplp text_base_ptr  001622 aa 4 00000 6271 00 eax7 lp|0 set program header offset  001623 aa 6 00152 7471 00 stx7 program_header_offset 001624 aa 400000 5150 03 fcmp =0.0,du set indicators  001625 aa 2 00000 7101 00 tra bp|0 return to caller 1949 "  001626 1950 fn_return_error:  001626 aa 000201 2360 07 1951 ldq 129,dl 001627 0a 001670 7100 00 1952 tra error1 1953 "  1954 list_sub_op sp_  "  " validate list subscript, for x(i) " fld i  " eppbp x_dope " tsx7 list_sub_op "  001630 sp_list_sub_op: 001630 aa 216000 4350 03 ufa =71b25,du convert to integer in ql  001631 aa 2 00004 1161 00 cmpq bp|array_dope.current_bounds  001632 0a 001667 6030 00 trc subscript_error  001633 aa 2 00000 3521 66 eppbp bp|array_dope.data,*ql get ptr to element  001634 aa 6 00104 7101 77 tra text_base_ptr,*7 and return  1955 "  1956 table_sub_op sp_  "  " validate table subscript, for x(i,j)  " fld i  " eppbp x_dope " tsx7 table_sub_op  " fld j  "  001635 sp_table_sub_op:  001635 aa 216000 4350 03 ufa =71b25,du convert to integer in qu  001636 aa 2 00004 1161 00 cmpq bp|array_dope.current_bounds  001637 0a 001667 6030 00 trc subscript_error  001640 aa 2 00005 4021 00 mpy bp|array_dope.current_bounds+1 001641 aa 6 00172 7561 00 stq temp1  001642 aa 6 00104 7161 77 xec text_base_ptr,*7  001643 aa 216000 4350 03 ufa =71b25,du  001644 aa 2 00005 1161 00 cmpq bp|array_dope.current_bounds+1  001645 0a 001667 6030 00 trc subscript_error  001646 aa 6 00172 0361 00 adlq temp1 001647 aa 2 00000 3521 66 eppbp bp|array_dope.data,*ql  001650 aa 000001 0670 03 adx7 1,du  001651 aa 6 00104 7101 77 tra text_base_ptr,*7  1957 "  1958 inv_table_sub_op sp_  "  " validate table subscript, for x(i,j)  " fld j  " eppbp x_dope " tsx7 inv_table_sub_op  " fld i  "  001652 sp_inv_table_sub_op:  001652 aa 216000 4350 03 ufa =71b25,du  001653 aa 2 00005 1161 00 cmpq bp|array_dope.current_bounds+1  001654 0a 001667 6030 00 trc subscript_error  001655 aa 6 00172 7561 00 stq temp1  001656 aa 6 00104 7161 77 xec text_base_ptr,*7  001657 aa 216000 4350 03 ufa =71b25,du  001660 aa 2 00004 1161 00 cmpq bp|array_dope.current_bounds  001661 0a 001667 6030 00 trc subscript_error  001662 aa 2 00005 4021 00 mpy bp|array_dope.current_bounds+1 001663 aa 6 00172 0361 00 adlq temp1 001664 aa 2 00000 3521 66 eppbp bp|array_dope.data,*ql  001665 aa 000001 0670 03 adx7 1,du  001666 aa 6 00104 7101 77 tra text_base_ptr,*7  1959 "  001667 1960 subscript_error:  001667 aa 000144 2360 07 1961 ldq 100,dl 1962 "  001670 aa 6 00150 7561 00 1963 error1: stq number  001671 aa 000002 2360 07 1964 ldq 2,dl  001672 0a 003450 7000 00 1965 tsx0 invoke_runtime  001673 0a 000663 7100 00 1966 tra stop_op  1967 "  001674 1968 error_in_statement: 001674 aa 000157 2360 07 1969 ldq 111,dl 001675 0a 001670 7100 00 1970 tra error1 1971 "  001676 1972 missing_line:  001676 aa 000160 2360 07 1973 ldq 112,dl 001677 0a 001670 7100 00 1974 tra error1 1975 "  001700 1976 unclosed_for:  001700 aa 000161 2360 07 1977 ldq 113,dl 001701 0a 001670 7100 00 1978 tra error1 1979 "  001702 1980 undefined_function: 001702 aa 000177 2360 07 1981 ldq 127,dl 001703 0a 001670 7100 00 1982 tra error1 1983 "  1984 " I/O operations  1985 "  001704 1986 use_tty:  001704 aa 000000 2250 03 1987 ldx5 =0,du 001705 aa 6 00147 4451 00 1988 sxl5 file_number  001706 aa 6 00126 7621 00 1989 lprpbp fcb set fcb_pt 001707 aa 6 00110 2521 00 1990 spribp fcb_pt  001710 aa 6 00104 7101 77 1991 tra text_base_ptr,*7  1992 "  1993 " operator to set up fcb, entered with file number in eaq  1994 "  001711 1995 setup_fcb:  001711 aa 106000 4350 03 1996 ufa =35b25,du fix file number 001712 0a 001730 6040 00 1997 tmi invalid_file_number  001713 aa 000020 1150 07 1998 cmpa 16,dl complain if bad  001714 0a 001730 6054 00 1999 tpnz invalid_file_number  001715 aa 000000 6250 05 2000 eax5 0,al  001716 aa 6 00147 4451 00 2001 sxl5 file_number  001717 aa 6 00126 2361 05 2002 ldq fcb,al 001720 0a 005251 1160 00 2003 cmpq =o007777000001  001721 0a 001730 6000 00 2004 tze invalid_file_number error if null  001722 aa 6 00126 7621 05 2005 lprpbp fcb,al  001723 aa 6 00110 2521 00 2006 spribp fcb_pt set fcb_pt  001724 aa 6 00104 7101 77 2007 tra text_base_ptr,*7 and return  2008 "  2009 " operator to store ptr to parameter fcb. entered with fcb ptr 2010 " in pr2 and file number in eaq 2011 "  001725 2012 use_fcb:  001725 aa 106000 4350 03 2013 ufa =35b25,du  001726 aa 6 00126 5421 05 2014 sprpbp fcb,al  001727 aa 6 00104 7101 77 2015 tra text_base_ptr,*7  2016 "  001730 2017 invalid_file_number:  001730 aa 000207 2360 07 2018 ldq 135,dl 001731 0a 001670 7100 00 2019 tra error1 2020 "  2021 " operator to scratch file  2022 "  001732 2023 scratch:  001732 aa 000037 2360 07 2024 ldq 31,dl  001733 0a 002000 7100 00 2025 tra call_runtime  2026 "  2027 " operator to set file margin, entered with margin in eaq  2028 "  001734 2029 margin: 001734 aa 6 00172 4551 00 2030 fst temp1  001735 aa 000036 2360 07 2031 ldq 30,dl  001736 0a 002000 7100 00 2032 tra call_runtime  2033 "  2034 " reset reading of data 2035 "  001737 2036 reset_data: 001737 aa 6 00102 3515 20 2037 eppab program_header,* 001740 0a 003462 7000 00 2038 tsx0 init_data 001741 aa 6 00104 7101 77 2039 tra text_base_ptr,*7  2040 "  2041 " operator to write numeric value in eaq into random file  2042 "  001742 2043 numeric_write:  001742 aa 6 00172 4571 00 2044 dfst temp1 001743 aa 000042 2360 07 2045 ldq 34,dl  001744 0a 002000 7100 00 2046 tra call_runtime  2047 "  2048 " operator to write string value specified by ab into random file  2049 "  001745 2050 string_write:  001745 aa 000044 2360 07 2051 ldq 36,dl  001746 0a 002000 7100 00 2052 tra call_runtime  2053 "  2054 numeric_read sp_,fld  "  " operator to read numeric value, return value in EAQ  "  001747 sp_numeric_read:  001747 aa 000043 2360 07 ldq 35,dl reading random file 001750 0a 003450 7000 00 sp_nr1: tsx0 invoke_runtime 001751 aa 6 00172 4311 00 fld temp1  001752 aa 6 00104 7101 77 tra text_base_ptr,*7  2055 "  2056 numeric_data_read sp_,fld,1  "  001753 sp_numeric_data_read:  001753 aa 6 00153 7201 00 lxl0 numeric_data_pos  001754 aa 6 00153 1001 00 cmpx0 numeric_data_pos 001755 0a 001762 6030 00 trc out_of_data  001756 aa 6 00104 4311 70 fld text_base_ptr,*0  001757 aa 000001 0600 03 adx0 1,du  001760 aa 6 00153 4401 00 sxl0 numeric_data_pos  001761 aa 6 00104 7101 77 tra text_base_ptr,*7  2057 "  001762 2058 out_of_data:  001762 aa 000147 2360 07 2059 ldq 103,dl go print error and abort trun  001763 0a 001670 7100 00 2060 tra error1 2061 "  2062 " operator to read string value, return string ptr in ab  2063 "  001764 2064 string_read:  001764 aa 000045 2360 07 2065 ldq 37,dl reading random file 001765 0a 002000 7100 00 2066 tra call_runtime  2067 "  001766 2068 new_string_data_read:  001766 aa 6 00154 7201 00 2069 lxl0 string_data_pos  001767 aa 6 00154 1001 00 2070 cmpx0 string_data_pos  001770 0a 001762 6030 00 2071 trc out_of_data  001771 aa 6 00104 2361 70 2072 ldq text_base_ptr,*0  001772 aa 000001 0600 03 2073 adx0 1,du  001773 aa 6 00154 4401 00 2074 sxl0 string_data_pos  001774 aa 6 00102 3515 66 2075 eppab program_header,*ql  001775 aa 6 00104 7101 77 2076 tra text_base_ptr,*7  2077 "  2078 " print numeric value in eaq  2079 "  001776 2080 numeric_print:  001776 aa 6 00172 4571 00 2081 dfst temp1 001777 aa 000003 2360 07 2082 ldq 3,dl  2083 "  002000 2084 call_runtime:  002000 aa 6 00030 3701 20 2085 epplp sp|stack_frame.lp_ptr,*  002001 aa 6 00000 2541 00 2086 call |[basic_runtime_](runtime_arglist)  002002 aa 6 00116 3501 00 002003 4a 4 00062 3521 20 002004 aa 6 00040 7531 00 002005 aa 7 00036 6701 20 002006 aa 6 00000 1731 00 002007 aa 6 00040 0731 00 002010 aa 6 00102 3701 20 2087 epplp program_header,* 002011 aa 6 00104 7101 77 2088 tra text_base_ptr,*7  2089 "  002012 2090 string_print:  002012 aa 000004 2360 07 2091 ldq 4,dl  002013 0a 002000 7100 00 2092 tra call_runtime  2093 "  2094 " finish current line  2095 "  002014 2096 print_new_line: 002014 aa 000007 2360 07 2097 ldq 7,dl  002015 0a 002000 7100 00 2098 tra call_runtime  2099 "  2100 " move to next column which is multiple of 15  2101 "  002016 2102 tab_for_comma:  002016 aa 000005 2360 07 2103 ldq 5,dl  002017 0a 002000 7100 00 2104 tra call_runtime  2105 "  2106 " tab to column whose value is in eaq  2107 "  002020 2108 tab_fun:  002020 aa 6 00172 4551 00 2109 fst temp1  002021 aa 000010 2360 07 2110 ldq 8,dl  002022 0a 002000 7100 00 2111 tra call_runtime  2112 "  2113 " space by number of columns given in eaq  2114 "  002023 2115 spc_fun:  002023 aa 6 00172 4551 00 2116 fst temp1  002024 aa 000011 2360 07 2117 ldq 9,dl  002025 0a 002000 7100 00 2118 tra call_runtime  2119 "  2120 numeric_input sp_,fld  "  " input numeric value, result left in EAQ  "  002026 sp_numeric_input:  002026 aa 000016 2360 07 ldq 14,dl  002027 0a 003450 7000 00 tsx0 invoke_runtime  002030 aa 6 00172 4311 00 fld temp1  002031 aa 6 00104 7101 77 tra text_base_ptr,*7  2121 "  2122 " input string value, pointer to result left in ab  2123 "  002032 2124 string_input:  002032 aa 000017 2360 07 2125 ldq 15,dl  002033 0a 002000 7100 00 2126 tra call_runtime  2127 "  002034 2128 linput: 002034 aa 000015 2360 07 2129 ldq 13,dl  002035 0a 002000 7100 00 2130 tra call_runtime  2131 "  2132 " terminate current input statement 2133 "  002036 2134 end_input:  002036 aa 000020 2360 07 2135 ldq 16,dl  002037 0a 002000 7100 00 2136 tra call_runtime  2137 "  002040 2138 lof_fun:  002040 aa 6 00172 4551 00 2139 fst temp1  002041 aa 000046 2360 07 2140 ldq 38,dl  002042 0a 000531 7100 00 2141 tra pos1  2142 "  002043 2143 loc_fun:  002043 aa 6 00172 4551 00 2144 fst temp1  002044 aa 000047 2360 07 2145 ldq 39,dl  002045 0a 000531 7100 00 2146 tra pos1  2147 "  002046 2148 mar_fun:  002046 aa 6 00172 4551 00 2149 fst temp1  002047 aa 000050 2360 07 2150 ldq 40,dl  002050 0a 000531 7100 00 2151 tra pos1  2152 "  002051 2153 check_eof:  002051 aa 6 00172 4551 00 2154 fst temp1  002052 aa 000051 2360 07 2155 ldq 41,dl  002053 0a 000531 7100 00 2156 tra pos1  2157 "  002054 2158 per_fun:  002054 aa 6 00172 4551 00 2159 fst temp1  002055 aa 000100 2360 07 2160 ldq 64,dl  002056 0a 000531 7100 00 2161 tra pos1  2162 "  002057 2163 typ_fun:  002057 aa 6 00172 4551 00 2164 fst temp1  002060 aa 000052 2360 07 2165 ldq 42,dl  002061 0a 000531 7100 00 2166 tra pos1  2167 "  002062 2168 print_using_start:  002062 aa 000070 2360 07 2169 ldq 56,dl  002063 0a 002000 7100 00 2170 tra call_runtime  2171 "  002064 2172 print_using_end:  002064 aa 000073 2360 07 2173 ldq 59,dl  002065 0a 002000 7100 00 2174 tra call_runtime  2175 "  2176 print_using_numeric sp_,fst  "  002066 sp_print_using_numeric: 002066 aa 6 00172 4551 00 fst temp1  002067 aa 000071 2360 07 ldq 57,dl  002070 0a 002000 7100 00 tra call_runtime  2177 "  002071 2178 print_using_string: 002071 aa 000072 2360 07 2179 ldq 58,dl  002072 0a 002000 7100 00 2180 tra call_runtime  2181 "  2182 " hps  2183 "  002073 2184 hps_fun:  002073 aa 6 00172 4551 00 2185 fst temp1  002074 aa 000031 2360 07 2186 ldq 25,dl  002075 0a 000531 7100 00 2187 tra pos1  2188 "  002076 2189 lin_fun:  002076 0a 002775 7100 00 2190 tra not_yet  2191 "  2192 " tst(a$)  2193 "  002077 2194 tst_fun:  002077 aa 000032 2360 07 2195 ldq 26,dl  002100 0a 000531 7100 00 2196 tra pos1  2197 "  002101 2198 num_fun:  002101 aa 6 00161 2351 00 2199 lda number_read  002102 0a 000523 7100 00 2200 tra len1  2201 "  2202 " operator to "open" file, entered with file name specified by pr(1)  2203 " and file number in eaq  2204 "  002103 2205 file_fun:  002103 aa 6 00172 4551 00 2206 fst temp1  002104 aa 000035 2360 07 2207 ldq 29,dl  002105 0a 002000 7100 00 2208 tra call_runtime  2209 "  002106 2210 reset_ascii:  002106 aa 000040 2360 07 2211 ldq 32,dl  002107 0a 002000 7100 00 2212 tra call_runtime  2213 "  002110 2214 reset_random:  002110 aa 6 00147 7251 00 2215 lxl5 file_number file 0 means internal data  002111 0a 001737 6000 00 2216 tze reset_data 002112 aa 6 00172 4551 00 2217 fst temp1  002113 aa 000041 2360 07 2218 ldq 33,dl  002114 0a 002000 7100 00 2219 tra call_runtime  2220 "  002115 2221 end_print:  002115 aa 000006 2360 07 2222 ldq 6,dl  002116 0a 002000 7100 00 2223 tra call_runtime  2224 "  2225 " Numeric functions 2226 "  2227 " absolute value  2228 " fld x  2229 " tsx7 abs_fun 2230 "  002117 2231 abs_fun:  002117 aa 400000 4750 03 2232 fad =0.0,du make sure indicators are set right  002120 aa 6 00104 6051 77 2233 tpl text_base_ptr,*7  002121 aa 000000 5130 00 2234 fneg 0 002122 aa 6 00104 7101 77 2235 tra text_base_ptr,*7  2236 "  2237 " integer part  2238 " fld x  2239 " tsx7 int_fun 2240 "  002123 2241 int_fun:  002123 aa 6 00172 4551 00 2242 fst temp1 save for range check  002124 aa 216000 4350 03 2243 ufa =71b25,du get integer in AQ  002125 aa 216000 4750 03 2244 fad =71b25,du float again 002126 aa 6 00104 6011 77 2245 tnz text_base_ptr,*7 if non-zero, all done 002127 aa 6 00172 4311 00 2246 fld temp1 must check arg for range -.5 to 0  002130 aa 000003 6040 04 2247 tmi 3,ic if arg negative, answer is -1.0  002131 aa 400000 4310 03 2248 fld =0.0,du answer is really 0.0  002132 aa 6 00104 7101 77 2249 tra text_base_ptr,*7 return  002133 aa 001000 4310 03 2250 fld =-1.0,du  002134 aa 6 00104 7101 77 2251 tra text_base_ptr,*7 return  2252 "  2253 mod_fun sp_,fst,fdi,fmp,fad  "  " mod  " fld a  " tsx7 mod_fun " fld b  "  002135 sp_mod_fun: 002135 aa 6 00172 4551 00 fst temp1 save a  002136 aa 6 00104 7161 77 xec text_base_ptr,*7 get b 002137 0a 002146 6000 00 tze sp_mf1 return a if b = 0  002140 aa 6 00174 4551 00 fst temp2  002141 aa 6 00172 5251 00 fdi temp1 a/b 002142 aa 216000 4350 03 ufa =71b25,du  002143 aa 216000 4750 03 fad =71b25,du int(a/b)  002144 aa 6 00174 4611 00 fmp temp2 int(a/b)*b  002145 aa 000000 5130 00 fneg 0 -int(a/b)*b  002146 aa 000001 0670 03 sp_mf1: adx7 1,du  002147 aa 6 00172 4751 00 fad temp1 a-int(a/b)*b  002150 aa 6 00104 7101 77 tra text_base_ptr,*7  2254 "  002151 2255 randomize:  002151 aa 6 00030 3701 20 2256 epplp sp|stack_frame.lp_ptr,*  002152 aa 6 00000 2541 00 2257 call |[clock_](arglist1)  002153 aa 6 00112 3501 00 002154 4a 4 00064 3521 20 002155 aa 6 00040 7531 00 002156 aa 7 00036 6701 20 002157 aa 6 00000 1731 00 002160 aa 6 00040 0731 00 002161 aa 6 00102 3701 20 2258 epplp program_header,* 002162 aa 6 00173 2361 00 2259 ldq temp1+1 use low-order clock value 002163 aa 6 00155 7561 00 2260 stq random 002164 aa 6 00104 7101 77 2261 tra text_base_ptr,*7 and return  2262 "  2263 " operator to return pseudo-random number in eaq  2264 "  002165 2265 rnd_fun:  002165 aa 6 00155 2361 00 2266 ldq random get last random number 002166 0a 003502 4020 00 2267 mpy random_multiplier  002167 0a 003503 0330 00 2268 adl random_addend  002170 aa 000000 1160 07 2269 cmpq 0,dl  002171 aa 000002 6050 04 2270 tpl 2,ic make sure it is positive 002172 aa 400000 6760 03 2271 erq =o400000,du  002173 aa 6 00155 7561 00 2272 stq random save for next time 002174 aa 000000 2350 07 2273 lda 0,dl treat as binary fraction 002175 aa 110000 4110 03 2274 lde =36b25,du  002176 aa 400000 4750 03 2275 fad =0.0,du float it  002177 aa 6 00104 7101 77 2276 tra text_base_ptr,*7 and return  2277 "  2278 " signum  2279 " fld x  2280 " tsx7 sgn_fun 2281 "  002200 2282 sgn_fun:  002200 aa 6 00104 6001 77 2283 tze text_base_ptr,*7  002201 aa 000003 6040 04 2284 tmi 3,ic  002202 aa 002400 4310 03 2285 fld =1.0,du  002203 aa 6 00104 7101 77 2286 tra text_base_ptr,*7  002204 aa 001000 4310 03 2287 fld =-1.0,du  002205 aa 6 00104 7101 77 2288 tra text_base_ptr,*7  2289 "  002206 2290 tim_fun:  002206 aa 6 00030 3701 20 2291 epplp sp|stack_frame.lp_ptr,*  002207 aa 6 00000 2541 00 2292 call |[virtual_cpu_time_](arglist1) 002210 aa 6 00112 3501 00 002211 4a 4 00066 3521 20 002212 aa 6 00040 7531 00 002213 aa 7 00036 6701 20 002214 aa 6 00000 1731 00 002215 aa 6 00040 0731 00 002216 aa 6 00102 3701 20 2293 epplp program_header,* 002217 aa 6 00172 2371 00 2294 ldaq temp1 002220 aa 6 00122 1771 00 2295 sbaq cpu_start 002221 aa 216000 4110 03 2296 lde =71b25,du  002222 aa 400000 4750 03 2297 fad =0.0,du  002223 0a 005252 5650 00 2298 fdv =1.0e6 002224 aa 6 00104 7101 77 2299 tra text_base_ptr,*7  2300 "  2301 val_fun sp_  "  " val(a$)  "  002225 sp_val_fun: 002225 aa 000033 2360 07 ldq 27,dl  002226 0a 001750 7100 00 tra sp_nr1 2302 "  2303 math_functions sp_ "  " math functions  " fld x  " tsx7 math_function  "  002227 sp_sqr_fun: 002227 2a 000010 6200 00 eax0 sp_sqr  "  002230 aa 6 00156 7621 00 sp_fun2: lprp2 math_block get ptr to storage block for math routines  002231 aa 6 00104 3535 77 epp3 text_base_ptr,*7 store return location  002232 aa 6 00176 2535 00 spri3 temp3 in case we get error  002233 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  002234 aa 6 00042 7441 00 stx4 sp|stack_frame.regs+2 save in case used by function  002235 aa 6 00043 4471 00 sxl7 sp|stack_frame.regs+3 save for error handler  002236 aa 400000 4750 03 fad =0.0,du set indicators  002237 aa 4 00000 2731 30 tsp3 lp|0,0*  002240 aa 6 00042 2241 00 ldx4 sp|stack_frame.regs+2 restore x4 for user function  002241 aa 6 00043 7271 00 lxl7 sp|stack_frame.regs+3 in case of error  002242 0a 000000 3500 00 epp0 sp_operator_table in case there was a math error  002243 aa 6 00102 3701 20 epplp program_header,* 002244 aa 400000 4750 03 fad =0.0,du set indicators  002245 aa 6 00104 7101 77 tra text_base_ptr,*7  "  002246 sp_cos_fun: 002246 2a 000012 6200 00 eax0 sp_cos  002247 0a 002230 7100 00 tra sp_fun2  "  002250 sp_sin_fun: 002250 2a 000014 6200 00 eax0 sp_sin  002251 0a 002230 7100 00 tra sp_fun2  "  002252 sp_cot_fun: 002252 2a 000020 6200 00 eax0 sp_cot  002253 0a 002230 7100 00 tra sp_fun2  "  002254 sp_tan_fun: 002254 2a 000016 6200 00 eax0 sp_tan  002255 0a 002230 7100 00 tra sp_fun2  "  002256 sp_atn_fun: 002256 2a 000022 6200 00 eax0 sp_atn  002257 0a 002230 7100 00 tra sp_fun2  "  002260 sp_exp_fun: 002260 2a 000024 6200 00 eax0 sp_exp  002261 0a 002230 7100 00 tra sp_fun2  "  002262 sp_log_fun: 002262 2a 000026 6200 00 eax0 sp_log  002263 0a 002230 7100 00 tra sp_fun2  "  002264 sp_clg_fun: 002264 2a 000032 6200 00 eax0 sp_clg  002265 0a 002230 7100 00 tra sp_fun2  "  2304 "  2305 power_functions sp_,fst,fld  "  " operator to evaluate a ** b, entered with " fld a  " tsx0 pwr_fun " fld b  "  002266 sp_pwr_fun: 002266 aa 6 00172 4551 00 fst temp1 save a  002267 aa 6 00104 7161 77 xec text_base_ptr,*7 get b 002270 aa 6 00174 4551 00 fst temp2 and save it 002271 2a 000030 6200 00 sp_fun3: eax0 sp_pwr  "  002272 aa 6 00172 4311 00 fld temp1  002273 aa 6 00174 3515 00 epp1 temp2 002274 aa 000001 0670 03 adx7 1,du  002275 0a 002230 7100 00 tra sp_fun2  "  " operator to evaluate a ** b, entered with " fld b  " tsx0 pwri_fun  " fld a  "  002276 sp_pwri_fun:  002276 aa 6 00174 4551 00 fst temp2 save b  002277 aa 6 00104 7161 77 xec text_base_ptr,*7 get a 002300 aa 6 00172 4551 00 fst temp1 and save it 002301 0a 002271 7100 00 tra sp_fun3 join pwr code "  2306 "  2307 " matrix functions  2308 "  002302 2309 det_fun:  002302 aa 6 00124 2341 00 2310 szn determinant make sure inv was called  002303 0a 002306 6000 00 2311 tze array_error  002304 aa 6 00124 4331 00 2312 dfld determinant  002305 aa 6 00104 7101 77 2313 tra text_base_ptr,*7  2314 "  002306 2315 array_error:  002306 aa 000213 2360 07 2316 ldq 139,dl 002307 0a 001670 7100 00 2317 tra error1 2318 "  2319 zer_con_funs sp_,fld,(=0.0,du),(=1.0,du),fst,1 "  " operators to do  " mat A = zer  " mat A = con  " entered with pr2 pointing at dope for A.  "  002310 sp_zer_fun: 002310 aa 400000 4310 03 fld =0.0,du get value 002311 0a 002313 7100 00 tra sp_con_fun+1  "  002312 sp_con_fun: 002312 aa 002400 4310 03 fld =1.0,du get value "  002313 aa 2 00004 7211 00 lxl1 2|array_dope.current_bounds  002314 aa 000001 1610 03 sbx1 1,du get row bound  002315 0a 002306 6044 00 tmoz array_error  002316 aa 2 00005 7221 00 lxl2 2|array_dope.current_bounds+1 002317 0a 002336 6040 00 tmi sp_con_list  002320 aa 000001 1620 03 sbx2 1,du get col bound  002321 0a 002306 6044 00 tmoz array_error  002322 aa 2 00000 3521 20 epp2 2|array_dope.data,*  002323 aa 000002 6230 12 eax3 2,2  002324 aa 6 00176 7421 00 stx2 temp3 save col bound 002325 aa 6 00176 2221 00 sp_ct1: ldx2 temp3 col = col bound 002326 aa 2 00000 4551 13 sp_ct2: fst 2|0,3 set A(row,col)  002327 aa 000001 0630 03 adx3 1,du  002330 aa 000001 1620 03 sbx2 1,du col = col - 1  002331 0a 002326 6054 00 tpnz sp_ct2  002332 aa 000001 0630 03 adx3 1,du skip over col 0 002333 aa 000001 1610 03 sbx1 1,du row = row - 1  002334 0a 002325 6054 00 tpnz sp_ct1  002335 aa 6 00104 7101 77 tra text_base_ptr,*7  "  002336 sp_con_list:  002336 aa 2 00000 3521 20 epp2 2|array_dope.data,*  002337 aa 2 00000 4551 11 fst 2|0,1 set all but 0 element  002340 aa 000001 1610 03 sbx1 1,du  002341 aa 777776 6054 04 tpnz -2,ic 002342 aa 6 00104 7101 77 tra text_base_ptr,*7  "  "  2320 "  2321 idn_fun sp_,fld,fst,1  "  " operator to do  " mat A = idn  " entered with pr2 -> dope for A  "  002343 sp_idn_fun: 002343 aa 2 00004 2361 00 ldq 2|array_dope.current_bounds  002344 aa 2 00005 1161 00 cmpq 2|array_dope.current_bounds+1 002345 0a 002306 6010 00 tnz array_error matrix must be square  002346 aa 777777 6210 06 eax1 -1,ql 002347 0a 002306 6044 00 tmoz array_error  002350 aa 000000 6220 11 eax2 0,1  002351 aa 2 00000 3521 20 epp2 2|array_dope.data,*  002352 aa 000002 6230 12 eax3 2,2  002353 aa 6 00176 7421 00 stx2 temp3 002354 aa 6 00176 2221 00 sp_id1: ldx2 temp3  002355 aa 6 00174 7411 00 stx1 temp2 002356 0a 005254 4310 00 sp_id2: fld =0.0d0 assume 0 element  002357 aa 6 00174 1021 00 cmpx2 temp2 is row = col  002360 aa 000002 6010 04 tnz 2,ic  002361 0a 005256 4310 00 fld =1.0d0 yes, get 1 002362 aa 2 00000 4551 13 fst 2|0,3  002363 aa 000001 0630 03 adx3 1,du  002364 aa 000001 1620 03 sbx2 1,du  002365 0a 002356 6054 00 tpnz sp_id2  002366 aa 000001 0630 03 adx3 1,du  002367 aa 000001 1610 03 sbx1 1,du  002370 0a 002354 6054 00 tpnz sp_id1  002371 aa 6 00104 7101 77 tra text_base_ptr,*7  "  2322 "  2323 mat_assign_numeric sp_,fld,fst,1  "  " operator to do mat A = B  " entered with pr2 -> dope for A and pr1 -> dope for B  "  002372 sp_mat_assign_numeric:  002372 0a 002510 6200 00 eax0 sp_nop  002373 aa 1 00004 2371 00 ldaq 1|array_dope.current_bounds  002374 aa 000000 1160 07 cmpq 0,dl  002375 0a 002431 6040 00 tmi sp_list_assign 002376 sp_table_assign:  002376 aa 1 00004 4021 00 mpy 1|array_dope.current_bounds  002377 aa 6 00176 7561 00 stq temp3  002400 aa 2 00002 2361 00 ldq 2|array_dope.original_bounds  002401 aa 2 00003 4021 00 mpy 2|array_dope.original_bounds+1 002402 aa 6 00176 1161 00 cmpq temp3 002403 0a 002654 6040 00 tmi redim_error  002404 aa 1 00004 2371 00 ldaq 1|array_dope.current_bounds  002405 aa 777777 6210 05 eax1 -1,al 002406 0a 002306 6044 00 tmoz array_error  002407 aa 777777 6220 06 eax2 -1,ql 002410 0a 002306 6044 00 tmoz array_error  002411 aa 2 00004 7571 00 staq 2|array_dope.current_bounds  002412 aa 2 00000 3521 20 epp2 2|array_dope.data,*  002413 aa 1 00000 3515 20 epp1 1|array_dope.data,*  002414 aa 000002 6230 12 eax3 2,2  002415 aa 6 00176 7421 00 stx2 temp3 002416 aa 6 00176 2221 00 sp_ta1: ldx2 temp3  002417 aa 1 00000 4311 13 sp_ta2: fld 1|0,3  002420 aa 000000 7160 10 xec 0,0  002421 aa 2 00000 4551 13 fst 2|0,3  002422 aa 000001 0630 03 adx3 1,du  002423 aa 000001 1620 03 sbx2 1,du  002424 0a 002417 6054 00 tpnz sp_ta2  002425 aa 000001 0630 03 adx3 1,du  002426 aa 000001 1610 03 sbx1 1,du  002427 0a 002416 6054 00 tpnz sp_ta1  002430 aa 6 00104 7101 77 tra text_base_ptr,*7  "  002431 sp_list_assign: 002431 aa 2 00002 1151 00 cmpa 2|array_dope.original_bounds  002432 0a 002654 6054 00 tpnz redim_error  002433 aa 2 00004 7551 00 sta 2|array_dope.current_bounds  002434 aa 777777 6230 05 eax3 -1,al 002435 0a 002306 6044 00 tmoz array_error  002436 aa 1 00000 3515 20 epp1 1|array_dope.data,*  002437 aa 2 00000 3521 20 epp2 2|array_dope.data,*  002440 aa 1 00000 4311 13 fld 1|0,3  002441 aa 000000 7160 10 xec 0,0  002442 aa 2 00000 4551 13 fst 2|0,3  002443 aa 000001 1630 03 sbx3 1,du  002444 aa 777774 6054 04 tpnz -4,ic 002445 aa 6 00104 7101 77 tra text_base_ptr,*7  "  2324 "  2325 " operator to do  2326 " mat a$ = b$  2327 "  002446 2328 mat_assign_string:  002446 aa 1 00004 2371 00 2329 ldaq 1|array_dope.current_bounds  002447 aa 000000 1160 07 2330 cmpq 0,dl  002450 0a 002463 6040 00 2331 tmi string_list_assign 002451 aa 1 00005 4021 00 2332 mpy 1|array_dope.current_bounds+1  002452 aa 6 00176 7561 00 2333 stq temp3  002453 aa 2 00002 2361 00 2334 ldq 2|array_dope.original_bounds  002454 aa 2 00003 4021 00 2335 mpy 2|array_dope.original_bounds+1 002455 aa 6 00176 1161 00 2336 cmpq temp3 002456 0a 002654 6040 00 2337 tmi redim_error  002457 aa 1 00004 2371 00 2338 ldaq 1|array_dope.current_bounds  002460 aa 2 00004 7571 00 2339 staq 2|array_dope.current_bounds  002461 aa 000077 2360 07 2340 mas: ldq 63,dl  002462 0a 002000 7100 00 2341 tra call_runtime  2342 "  002463 2343 string_list_assign: 002463 aa 2 00002 1151 00 2344 cmpa 2|array_dope.original_bounds  002464 0a 002654 6054 00 2345 tpnz redim_error  002465 aa 2 00004 7551 00 2346 sta 2|array_dope.current_bounds  002466 0a 002461 7100 00 2347 tra mas  2348 "  2349 mat_add_sub sp_  "  " operator to do  " mat A = B + C  " mat A = B - C  " entered with pr2 -> dope for A, pr1 -> dope for B,  " pr3 -> dope for C "  002467 sp_mat_add: 002467 0a 002511 6200 00 eax0 sp_fad  002470 0a 002472 7100 00 tra sp_mat_sub+1  "  002471 sp_mat_sub: 002471 0a 002512 6200 00 eax0 sp_fsb  "  002472 aa 1 00004 2371 00 ldaq 1|array_dope.current_bounds  002473 aa 000000 1160 07 cmpq 0,dl  002474 0a 002501 6040 00 tmi sp_list_sub  002475 aa 3 00004 1171 00 cmpaq 3|array_dope.current_bounds  002476 0a 002306 6010 00 tnz array_error  002477 aa 3 00000 3535 20 epp3 3|array_dope.data,*  002500 0a 002376 7100 00 tra sp_table_assign  "  002501 sp_list_sub:  002501 aa 3 00004 1151 00 cmpa 3|array_dope.current_bounds  002502 0a 002306 6010 00 tnz array_error  002503 aa 3 00000 3535 20 epp3 3|array_dope.data,*  002504 0a 002431 7100 00 tra sp_list_assign "  2350 "  2351 mat_scalar_mult sp_,fst  "  " operator to do  " mat A = (expression)*B  " entered with expression in EAQ, pr2 -> dope for A and " pr1 -> dope for B "  002505 sp_mat_scalar_mult: 002505 aa 6 00172 4551 00 fst temp1  002506 0a 002513 6200 00 eax0 sp_fmp  002507 0a 002373 7100 00 tra sp_mat_assign_numeric+1  "  002510 aa 000000 0110 03 sp_nop: nop 0,du  002511 aa 3 00000 4751 13 sp_fad: fad 3|0,3  002512 aa 3 00000 5751 13 sp_fsb: fsb 3|0,3  002513 aa 6 00172 4611 00 sp_fmp: fmp temp1  "  2352 "  2353 dot_product sp_,1,fld,fmp,fcmp "  " operator to form  " mat dot_product = A * B  " entered with pr1 -> dope for A and pr3 -> dope for B  " returns with value in EAQ "  002514 sp_dot_product: 002514 aa 1 00004 2351 00 lda 1|array_dope.current_bounds  002515 aa 3 00004 1151 00 cmpa 3|array_dope.current_bounds  002516 0a 002306 6010 00 tnz array_error  002517 aa 777777 0750 07 ada -1,dl  002520 aa 000000 6210 05 eax1 0,al store bounds for indexing  002521 0a 002306 6044 00 tmoz array_error  002522 aa 1 00000 3515 20 epp1 1|array_dope.data,*  002523 aa 3 00000 3535 20 epp3 3|array_dope.data,*  002524 aa 400000 4310 03 fld =0.0,du  002525 aa 6 00172 4571 00 sp_dot: dfst temp1  002526 aa 1 00000 4311 11 fld 1|0,1  002527 aa 3 00000 4611 11 fmp 3|0,1  002530 aa 6 00172 4771 00 dfad temp1 002531 aa 000001 1610 03 sbx1 1,du  002532 0a 002525 6054 00 tpnz sp_dot  002533 aa 400000 5150 03 fcmp =0.0,du set indicators  002534 aa 6 00104 7101 77 tra text_base_ptr,*7  "  2354 "  2355 " operator to do  2356 " mat A = inv(B)  2357 "  002535 2358 inv_fun:  002535 aa 1 00004 2361 00 2359 ldq 1|array_dope.current_bounds  002536 aa 1 00005 1161 00 2360 cmpq 1|array_dope.current_bounds+1 002537 0a 002306 6010 00 2361 tnz array_error must be sequare  002540 aa 1 00005 4021 00 2362 mpy 1|array_dope.current_bounds+1  002541 aa 6 00176 7561 00 2363 stq temp3  002542 aa 2 00002 2361 00 2364 ldq 2|array_dope.original_bounds  002543 aa 2 00003 4021 00 2365 mpy 2|array_dope.original_bounds+1 002544 aa 6 00176 1161 00 2366 cmpq temp3 002545 0a 002654 6040 00 2367 tmi redim_error  002546 aa 1 00004 2371 00 2368 ldaq 1|array_dope.current_bounds  002547 aa 2 00004 7571 00 2369 staq 2|array_dope.current_bounds  002550 aa 000001 2360 07 2370 ldq 1,dl  2371 "  002551 2372 call_matrix:  002551 aa 6 00030 3701 20 2373 epplp sp|stack_frame.lp_ptr,*  002552 aa 6 00000 2541 00 2374 call |[basic_matrix_](runtime_arglist)  002553 aa 6 00116 3501 00 002554 4a 4 00070 3521 20 002555 aa 6 00040 7531 00 002556 aa 7 00036 6701 20 002557 aa 6 00000 1731 00 002560 aa 6 00040 0731 00 002561 aa 6 00102 3701 20 2375 epplp program_header,* 002562 aa 000000 1160 07 2376 cmpq 0,dl  002563 0a 001670 6010 00 2377 tnz error1 002564 aa 6 00104 7101 77 2378 tra text_base_ptr,*7  2379 "  2380 trn_fun sp_  "  " operator to do  " mat A = trn(B)  "  002565 sp_trn_fun: 002565 aa 1 00005 2361 00 ldq 1|array_dope.current_bounds+1  002566 0a 002372 6040 00 tmi sp_mat_assign_numeric  002567 aa 1 00004 4021 00 mpy 1|array_dope.current_bounds  002570 aa 6 00176 7561 00 stq temp3  002571 aa 2 00002 2361 00 ldq 2|array_dope.original_bounds  002572 aa 2 00003 4021 00 mpy 2|array_dope.original_bounds+1 002573 aa 6 00176 1161 00 cmpq temp3 002574 0a 002654 6040 00 tmi redim_error  002575 aa 1 00005 2351 00 lda 1|array_dope.current_bounds+1  002576 aa 1 00004 2361 00 ldq 1|array_dope.current_bounds  002577 aa 2 00004 7571 00 staq 2|array_dope.current_bounds  002600 aa 000002 2360 07 ldq 2,dl  002601 0a 002551 7100 00 tra call_matrix  "  2381 "  2382 " operator to do  2383 " mat A = B * C  2384 " when A and B are vectors and C is a matrix  2385 "  002602 2386 mat_mult_vm:  002602 aa 1 00004 2361 00 2387 ldq 1|array_dope.current_bounds  002603 aa 3 00004 1161 00 2388 cmpq 3|array_dope.current_bounds  002604 0a 002306 6010 00 2389 tnz array_error  002605 aa 3 00005 2361 00 2390 ldq 3|array_dope.current_bounds+1  002606 aa 2 00002 1161 00 2391 cmpq 2|array_dope.original_bounds  002607 0a 002654 6054 00 2392 tpnz redim_error  002610 aa 2 00004 7561 00 2393 stq 2|array_dope.current_bounds  002611 aa 000003 2360 07 2394 ldq 3,dl  002612 0a 002551 7100 00 2395 tra call_matrix  2396 "  2397 " operator to do  2398 " mat A = B * C  2399 " when A and C are vectors and B is a matrix  2400 "  002613 2401 mat_mult_mv:  002613 aa 1 00005 2361 00 2402 ldq 1|array_dope.current_bounds+1  002614 aa 3 00004 1161 00 2403 cmpq 3|array_dope.current_bounds  002615 0a 002306 6010 00 2404 tnz array_error  002616 aa 1 00004 2361 00 2405 ldq 1|array_dope.current_bounds  002617 aa 2 00002 1161 00 2406 cmpq 2|array_dope.original_bounds  002620 0a 002654 6054 00 2407 tpnz redim_error  002621 aa 2 00004 7561 00 2408 stq 2|array_dope.current_bounds  002622 aa 000004 2360 07 2409 ldq 4,dl  002623 0a 002551 7100 00 2410 tra call_matrix  2411 "  2412 " operator to do  2413 " mat A = B * C  2414 " when A, B and C are all matrices  2415 "  002624 2416 mat_mult_mm:  002624 aa 1 00005 2361 00 2417 ldq 1|array_dope.current_bounds+1  002625 aa 3 00004 1161 00 2418 cmpq 3|array_dope.current_bounds  002626 0a 002306 6010 00 2419 tnz array_error  002627 aa 1 00004 2361 00 2420 ldq 1|array_dope.current_bounds  002630 aa 3 00005 4021 00 2421 mpy 3|array_dope.current_bounds+1  002631 aa 6 00176 7561 00 2422 stq temp3  002632 aa 2 00002 2361 00 2423 ldq 2|array_dope.original_bounds  002633 aa 2 00003 4021 00 2424 mpy 2|array_dope.original_bounds+1 002634 aa 6 00176 1161 00 2425 cmpq temp3 002635 0a 002654 6040 00 2426 tmi redim_error  002636 aa 1 00004 2351 00 2427 lda 1|array_dope.current_bounds  002637 aa 3 00005 2361 00 2428 ldq 3|array_dope.current_bounds+1  002640 aa 2 00004 7571 00 2429 staq 2|array_dope.current_bounds  002641 aa 000005 2360 07 2430 ldq 5,dl  002642 0a 002551 7100 00 2431 tra call_matrix  2432 "  002643 2433 nul_fun:  002643 aa 000076 2360 07 2434 ldq 62,dl  002644 0a 002000 7100 00 2435 tra call_runtime  2436 "  2437 " operator to redimension list  2438 " epp2 dope  2439 " fld new_bound  2440 " tsx7 list_redim  2441 "  002645 2442 list_redim_op:  002645 aa 106000 4350 03 2443 ufa =35b25,du fix bound  002646 0a 002654 6044 00 2444 tmoz redim_error  002647 aa 000001 0750 07 2445 ada 1,dl get number of elements  002650 aa 2 00002 1151 00 2446 cmpa bp|array_dope.original_bounds 002651 0a 002654 6054 00 2447 tpnz redim_error  002652 aa 2 00004 7551 00 2448 sta bp|array_dope.current_bounds  002653 aa 6 00104 7101 77 2449 tra text_base_ptr,*7  2450 "  002654 2451 redim_error:  002654 aa 000211 2360 07 2452 ldq 137,dl 002655 0a 001670 7100 00 2453 tra error1 2454 "  2455 " operator to redimension table 2456 " epp2 dope  2457 " fld new_bound1  2458 " tsx7 table_redim 2459 " fld new_bound2  2460 "  002656 2461 table_redim_op: 002656 aa 216000 4350 03 2462 ufa =71b25,du  002657 0a 002654 6044 00 2463 tmoz redim_error  002660 aa 000001 0760 07 2464 adq 1,dl  002661 aa 6 00172 7561 00 2465 stq temp1  002662 aa 6 00104 7161 77 2466 xec text_base_ptr,*7  002663 aa 216000 4350 03 2467 ufa =71b25,du  002664 0a 002654 6044 00 2468 tmoz redim_error  002665 aa 000001 0760 07 2469 adq 1,dl  002666 aa 6 00174 7561 00 2470 stq temp2  002667 aa 6 00172 4021 00 2471 mpy temp1  002670 aa 6 00176 7561 00 2472 redim: stq temp3  002671 aa 2 00002 2361 00 2473 ldq bp|array_dope.original_bounds  002672 aa 2 00003 4021 00 2474 mpy bp|array_dope.original_bounds+1  002673 aa 6 00176 1161 00 2475 cmpq temp3 002674 0a 002654 6040 00 2476 tmi redim_error  002675 aa 6 00172 2351 00 2477 lda temp1  002676 aa 6 00174 2361 00 2478 ldq temp2  002677 aa 2 00004 7571 00 2479 staq bp|array_dope.current_bounds  002700 aa 000001 0670 03 2480 adx7 1,du  002701 aa 6 00104 7101 77 2481 tra text_base_ptr,*7  2482 "  2483 " operator to redimension table inversely  2484 " epp2 dope  2485 " fld new_bound2  2486 " tsx7 inv_table_redim 2487 " fld new_bound1  2488 "  002702 2489 inv_table_redim_op: 002702 aa 216000 4350 03 2490 ufa =71b25,du  002703 0a 002654 6044 00 2491 tmoz redim_error  002704 aa 000001 0760 07 2492 adq 1,dl  002705 aa 6 00174 7561 00 2493 stq temp2  002706 aa 6 00104 7161 77 2494 xec text_base_ptr,*7  002707 aa 216000 4350 03 2495 ufa =71b25,du  002710 0a 002654 6044 00 2496 tmoz redim_error  002711 aa 000001 0760 07 2497 adq 1,dl  002712 aa 6 00172 7561 00 2498 stq temp1  002713 aa 6 00174 4021 00 2499 mpy temp2  002714 0a 002670 7100 00 2500 tra redim  2501 "  2502 " matrix I/O operators entered with pr2 -> dope 2503 "  002715 2504 mat_numeric_input:  002715 aa 000055 2360 07 2505 ldq 45,dl  002716 0a 002722 7100 00 2506 tra mnp  2507 "  002717 2508 mat_string_input:  002717 aa 000056 2360 07 2509 ldq 46,dl  002720 0a 002722 7100 00 2510 tra mnp  2511 "  002721 2512 mat_numeric_print:  002721 aa 000057 2360 07 2513 ldq 47,dl  002722 aa 6 00104 2351 77 2514 mnp: lda text_base_ptr,*7 get format control | redim switch 002723 0a 003450 7000 00 2515 tsx0 invoke_runtime  002724 aa 000001 0670 03 2516 adx7 1,du  002725 aa 6 00104 7101 77 2517 tra text_base_ptr,*7  2518 "  002726 2519 mat_string_print:  002726 aa 000060 2360 07 2520 ldq 48,dl  002727 0a 002722 7100 00 2521 tra mnp  2522 "  002730 2523 mat_numeric_read:  002730 aa 000061 2360 07 2524 ldq 49,dl  002731 0a 002000 7100 00 2525 tra call_runtime  2526 "  002732 2527 mat_string_read:  002732 aa 000062 2360 07 2528 ldq 50,dl  002733 0a 002000 7100 00 2529 tra call_runtime  2530 "  002734 2531 mat_numeric_write:  002734 aa 000063 2360 07 2532 ldq 51,dl  002735 0a 002000 7100 00 2533 tra call_runtime  2534 "  002736 2535 mat_string_write:  002736 aa 000064 2360 07 2536 ldq 52,dl  002737 0a 002000 7100 00 2537 tra call_runtime  2538 "  002740 2539 mat_linput_op:  002740 aa 000067 2360 07 2540 ldq 55,dl  002741 0a 002000 7100 00 2541 tra call_runtime  2542 "  002742 2543 mat_numeric_data_read:  002742 aa 000065 2360 07 2544 ldq 53,dl  002743 0a 002000 7100 00 2545 tra call_runtime  2546 "  002744 2547 mat_string_data_read:  002744 aa 000066 2360 07 2548 ldq 54,dl  002745 0a 002000 7100 00 2549 tra call_runtime  2550 "  002746 2551 mat_print_using_numeric:  002746 aa 000074 2360 07 2552 ldq 60,dl  002747 0a 002000 7100 00 2553 tra call_runtime  2554 "  002750 2555 mat_print_using_string: 002750 aa 000075 2360 07 2556 ldq 61,dl  002751 0a 002000 7100 00 2557 tra call_runtime  2558 "  2559 " operator to reset default number length  2560 "  002752 2561 setdigits_op:  002752 aa 106000 4350 03 2562 ufa =35b25,du convert to integer  002753 0a 002761 6044 00 2563 tmoz invalid_number_length 002754 aa 000023 1150 07 2564 cmpa 19,dl 002755 0a 002761 6054 00 2565 tpnz invalid_number_length 002756 aa 000000 6210 05 2566 eax1 0,al  002757 aa 6 00170 4411 00 2567 sxl1 flags 002760 aa 6 00104 7101 77 2568 tra text_base_ptr,*7  2569 "  002761 2570 invalid_number_length:  002761 aa 000246 2360 07 2571 ldq 166,dl 002762 aa 6 00150 7561 00 2572 stq number 002763 aa 000002 2360 07 2573 ldq 2,dl  002764 0a 002000 7100 00 2574 tra call_runtime  2575 "  002765 2576 string_data_read:  002765 aa 6 00154 7201 00 2577 lxl0 string_data_pos  002766 aa 6 00154 1001 00 2578 cmpx0 string_data_pos  002767 0a 001762 6030 00 2579 trc out_of_data  002770 aa 6 00104 2361 70 2580 ldq text_base_ptr,*0  002771 aa 000001 0600 03 2581 adx0 1,du  002772 aa 6 00154 4401 00 2582 sxl0 string_data_pos  002773 aa 6 00104 3515 66 2583 eppab text_base_ptr,*ql  002774 aa 6 00104 7101 77 2584 tra text_base_ptr,*7  2585 "  002775 aa 000143 2360 07 2586 not_yet: ldq 99,dl  002776 0a 001670 7100 00 2587 tra error1 2588 "  002777 2589 segdef enter_proc  002777 2590 enter_proc: 002777 aa 400000 2350 03 2591 lda =o400000,du indicate called from non-basic 003000 aa 000000 6360 17 2592 eaq 0,7 don't get extra space at end of frame 003001 0a 003004 7100 00 2593 tra save  2594 "  003002 2595 segdef enter_main  003002 2596 enter_main: 003002 aa 200000 2350 03 2597 lda =o200000,du indicate main program  003003 aa 001040 6360 17 2598 eaq pdl_size+math_block_size+fn_size,7 add extra space at end of frame 2599 "  003004 aa 7 00024 3535 20 2600 save: eppbb sb|stack_header.stack_end_ptr,* 003005 aa 3 00020 6521 00 2601 sprisp bb|stack_frame.prev_sp  003006 aa 3 00000 3515 02 2602 eppab bb|0,qu  003007 aa 3 00022 2515 00 2603 spriab bb|stack_frame.next_sp  003010 aa 7 00024 2515 00 2604 spriab sb|stack_header.stack_end_ptr  003011 aa 3 00000 3721 00 2605 eppsp bb|0 003012 aa 6 00032 2501 00 2606 spriap sp|stack_frame.arg_ptr  003013 aa 6 00170 7551 00 2607 sta flags initialize flags  2608 "  2609 " zero out user area in stack  2610 "  003014 aa 777600 6360 17 2611 eaq -args,7 compute number of words to zero  003015 0a 003022 6000 00 2612 tze init_stack skip if no variables  003016 aa 000002 7360 00 2613 qls 2 get number of chars 003017 aa 000140 1004 00 2614 mlr (),(pr,rl),fill(0) 003020 aa 000000 000000 2615 vfd 36/0  003021 aa 600200 000002 2616 desc9a sp|args,qu  2617 "  2618 " setup entry ptr and language type code in stack frame 2619 "  003022 2620 init_stack: 003022 aa 2 77775 3121 00 2621 eawpbp bp|-3  003023 aa 6 00026 2521 00 2622 spribp sp|stack_frame.entry_ptr  003024 aa 6 00104 2525 00 2623 spbpbp text_base_ptr  003025 aa 000005 2350 03 2624 lda 5,du  003026 aa 6 00037 7551 00 2625 sta sp|stack_frame.translator_id  2626 "  2627 " setup ptr to basic program header  2628 "  003027 aa 2 00003 2351 00 2629 lda bp|3  003030 aa 2 77777 3515 05 2630 eppab bp|-1,al 003031 aa 6 00102 2515 00 2631 spriab program_header  003032 aa 1 00000 6351 00 2632 eaa ab|0 save in case program is bound  003033 aa 6 00152 7551 00 2633 sta program_header_offset  2634 "  2635 " initialize precision indicator  2636 "  003034 aa 000001 2250 03 2637 ldx5 1,du  003035 aa 1 00015 0651 00 2638 adx5 ab|bph.precision_ind  003036 aa 6 00147 7451 00 2639 stx5 file_number  003037 aa 000001 1650 03 2640 sbx5 1,du restore precision indicator 2641 "  2642 " initialize digit count  2643 "  003040 aa 000006 2210 03 2644 ldx1 6,du  003041 aa 6 00170 4411 00 2645 sxl1 flags 2646 "  2647 " get ptr to definitions section  2648 "  003042 aa 1 00015 7211 00 2649 lxl1 ab|bph.definitions  003043 aa 000003 6000 04 2650 tze 3,ic zero means regular object  003044 aa 1 00000 3501 11 2651 eppap ab|0,1 non-zero means defs relative to header  003045 aa 000004 7100 04 2652 tra 4,ic  003046 aa 1 00000 2131 00 2653 epaq ab|0 have object segment, get linkage ptr  003047 aa 7 00026 7641 61 2654 lprplp sb|stack_header.lot_ptr,*au 003050 aa 4 00000 3501 20 2655 eppap lp|0,* get ptr to defs from head of linkage 003051 aa 6 00164 5401 00 2656 sprpap definitions save definitions ptr  2657 "  2658 " store ptr to acc string giving name of this subprogram  2659 "  003052 aa 2 77777 2351 00 2660 lda bp|-1 get def offset in au  003053 aa 0 00002 2351 01 2661 lda ap|def.symbol,au get acc offset in au  003054 aa 0 00000 3701 01 2662 epp4 ap|0,au get ptr to acc  003055 aa 6 00167 5441 00 2663 sprp4 entryname and save  2664 "  2665 " store ptr to our linkage section  2666 "  003056 0a 003056 2130 00 2667 epaq * 003057 aa 7 00026 7641 61 2668 lprplp sb|stack_header.lot_ptr,*au 003060 aa 6 00030 6501 00 2669 sprilp sp|stack_frame.lp_ptr  2670 "  2671 " set up abort label  2672 "  003061 0a 000663 3500 00 2673 eppap stop_op  003062 aa 6 00052 2501 00 2674 spriap abort_label 003063 aa 6 00054 6521 00 2675 sprisp abort_label+2  2676 "  2677 " initialize conversion_label & size_label to "null"  2678 "  003064 aa 6 00056 4501 00 2679 stz conversion_label  003065 aa 6 00062 4501 00 2680 stz size_label 2681 "  2682 " establish default handler and cleanup procedures  2683 "  003066 aa 6 00000 6351 00 2684 eaa sp|0 get offset of this frame 003067 aa 000000 5310 00 2685 neg 0 get -offset 003070 aa 6 00066 3535 00 2686 eppbb on_units get ptr to first unit  003071 aa 3 00005 4501 00 2687 stz bb|on_next clear next ptr  003072 0a 003504 3500 00 2688 eppap cleanup fill in name  003073 aa 3 00000 2501 00 2689 spriap bb|on_name  003074 aa 000007 2360 07 2690 ldq 7,dl and length  003075 aa 3 00004 7561 00 2691 stq bb|on_size 003076 4a 4 00072 3501 20 2692 eppap |[cleanup] fill in body ptr  003077 aa 3 00002 2501 00 2693 spriap bb|on_body  003100 aa 3 00000 6221 01 2694 eax2 bb|0,au get offset of this unit relative to frame  003101 aa 3 00006 3535 00 2695 eppbb bb|6 get ptr to next unit  003102 aa 3 00005 4501 00 2696 stz bb|on_next set next ptr  003103 aa 3 00005 7421 00 2697 stx2 bb|on_next  003104 0a 003506 3500 00 2698 eppap unclaimed_signal fill in name  003105 aa 3 00000 2501 00 2699 spriap bb|on_name  003106 aa 000020 2360 07 2700 ldq 16,dl and length  003107 aa 3 00004 7561 00 2701 stq bb|on_size 003110 4a 4 00074 3501 20 2702 eppap |[default] fill in body ptr  003111 aa 3 00002 2501 00 2703 spriap bb|on_body  003112 aa 3 00000 6221 01 2704 eax2 bb|0,au get offset of this unit relative to frame  003113 aa 6 00036 4501 00 2705 stz sp|stack_frame.on_unit_rel_ptrs  003114 aa 6 00036 7421 00 2706 stx2 sp|stack_frame.on_unit_rel_ptrs establish chain  003115 aa 000100 2350 07 2707 lda =o100,dl turn on flag that says chain exists  003116 aa 6 00020 2551 00 2708 orsa sp|stack_frame.prev_sp  2709 "  2710 " setup arglist for use in calling basic_runtime_ & basic_matrix_  2711 " and arglist for calling virtual_cpu_time_ 2712 "  003117 aa 6 00172 3501 00 2713 eppap temp1  003120 aa 6 00114 2501 00 2714 spriap arglist1+2  003121 aa 6 00054 3501 00 2715 eppap abort_label+2  003122 aa 6 00120 2501 00 2716 spriap runtime_arglist+2  003123 aa 004000 4310 07 2717 fld 1*2048,dl  003124 aa 6 00112 7571 00 2718 staq arglist1  003125 aa 6 00116 7571 00 2719 staq runtime_arglist  2720 "  2721 " call basic_runtime_ to do any further initialization  2722 "  003126 aa 000000 2360 07 2723 ldq 0,dl  003127 aa 6 00000 2541 00 2724 call |[basic_runtime_](runtime_arglist)  003130 aa 6 00116 3501 00 003131 4a 4 00062 3521 20 003132 aa 6 00040 7531 00 003133 aa 7 00036 6701 20 003134 aa 6 00000 1731 00 003135 aa 6 00040 0731 00 2725 "  2726 " set up array dope 2727 "  003136 aa 1 00011 2351 00 2728 lda ab|bph.numeric_arrays  003137 0a 003427 7000 00 2729 tsx0 setup_arrays  003140 aa 1 00012 2351 00 2730 lda ab|bph.string_arrays  003141 0a 003427 7000 00 2731 tsx0 setup_arrays  2732 "  2733 " initialize random number generator  2734 "  003142 0a 003501 2350 00 2735 lda initial_random 003143 aa 6 00155 7551 00 2736 sta random 2737 "  2738 " indicate inv not called  2739 "  003144 aa 6 00124 4501 00 2740 stz determinant  2741 "  2742 " init num function 2743 "  003145 aa 6 00161 4501 00 2744 stz number_read  2745 "  2746 " convert arg list if we were called from non-basic program 2747 "  003146 aa 6 00170 2341 00 2748 szn flags  003147 0a 003213 6040 00 2749 tmi call_from_non_basic  2750 "  2751 " set up push down list at end of stack 2752 "  003150 2753 setup_pdl:  003150 aa 6 00000 3501 17 2754 eppap sp|0,7 get ptr to start of pdl  003151 aa 0 00000 6351 00 2755 eaa ap|0 get offset  003152 aa 040000 2750 07 2756 ora pdl_size*64,dl form tally word 003153 aa 6 00151 7551 00 2757 sta pdl and save  2758 "  2759 " store word of zeros so we can detect return without gosub 2760 "  003154 aa 6 00151 4501 56 2761 stz pdl,id 2762 "  2763 " initialize math block and function frame area 2764 "  003155 aa 6 00000 6351 00 2765 eaa sp|0 get offset of this stack frame  003156 aa 6 00172 7551 00 2766 sta temp1 and save  003157 aa 0 00400 3501 00 2767 eppap ap|pdl_size get ptr to end of pdl  003160 aa 6 00156 5401 00 2768 sprpap math_block save ptr to math block  003161 aa 0 00040 3501 00 2769 eppap ap|math_block_size skip over math block  003162 aa 0 00000 6351 00 2770 eaa ap|0 get offset  003163 aa 6 00172 1751 00 2771 sba temp1 relative to start of frame  003164 aa 6 00160 7551 00 2772 sta next_frame 003165 aa 000400 0750 03 2773 ada fn_size,du 003166 aa 6 00157 7551 00 2774 sta last_frame 2775 "  2776 " initialize numeric and string data position  2777 "  003167 0a 003462 7000 00 2778 tsx0 init_data 2779 "  2780 " all done with initialization, start user program  2781 "  003170 aa 6 00000 2541 00 2782 call |[virtual_cpu_time_](arglist1) 003171 aa 6 00112 3501 00 003172 4a 4 00066 3521 20 003173 aa 6 00040 7531 00 003174 aa 7 00036 6701 20 003175 aa 6 00000 1731 00 003176 aa 6 00040 0731 00 003177 aa 6 00172 2371 00 2783 ldaq temp1 003200 aa 6 00122 7571 00 2784 staq cpu_start 2785 "  2786 "  003201 aa 6 00102 3701 20 2787 epplp program_header,* 003202 aa 4 00002 2231 00 2788 ldx3 pr4|bph.string_storage  003203 aa 6 00000 3715 13 2789 epp5 sp|0,3 load ptr to start of string variables 003204 aa 4 00015 2251 00 2790 ldx5 pr4|bph.precision_ind 003205 0a 003211 7160 15 2791 xec load_op_tbl_ptr,5 get ptr to correct op table  003206 aa 000000 6240 00 2792 eax4 0 init fn display  003207 aa 000000 6260 00 2793 eax6 0 init fn frame offset  003210 aa 2 00004 7101 00 2794 tra bp|4 start program  2795 "  003211 2796 load_op_tbl_ptr:  003211 0a 000000 3500 00 2797 epp0 sp_operator_table 003212 0a 000227 3500 00 2798 epp0 ep_operator_table 2799 "  003213 2800 call_from_non_basic:  003213 aa 6 00165 4501 00 2801 stz fn_temp1 init extension count 003214 aa 1 00005 7201 00 2802 lxl0 1|bph.incoming_args get number of args expected * 2  003215 0a 003263 6000 00 2803 tze args_thru trivial if no args expected 003216 aa 6 00032 3501 20 2804 epp0 sp|stack_frame.arg_ptr,* get ptr to our arglist  003217 aa 0 00000 1001 00 2805 cmpx0 0|0 compare against number provided 003220 0a 003407 6010 00 2806 tnz incorrect_number_of_args complain if wrong number of args  003221 aa 0 00001 2361 00 2807 ldq 0|1 are descriptors present  003222 0a 003417 6000 00 2808 tze no_descriptors no, complain  003223 aa 0 00002 3535 02 2809 epp3 0|2,qu get ptr to start of descriptors  003224 aa 0 00000 7201 00 2810 lxl0 0|0 is there an extra ptr in arglist 003225 aa 000010 3000 03 2811 canx0 8,du 003226 aa 000002 6000 04 2812 tze 2,ic  003227 aa 3 00002 3535 00 2813 epp3 3|2 yes, skip over extra ptr 003230 aa 1 00005 2201 00 2814 ldx0 1|bph.incoming_args get ptr to arg type array 003231 aa 1 00000 3515 10 2815 epp1 1|0,0 003232 aa 000000 6200 00 2816 eax0 0 init list position 003233 aa 000000 6210 00 2817 eax1 0 zero free space initially  003234 aa 777777 6230 00 2818 eax3 -1 init arg count  2819 "  2820 " at this point 2821 " pr0 -> arglist  2822 " pr3 -> descriptors  2823 " process each arg and convert to appropriate basic type  2824 "  003235 aa 0 00000 1001 00 2825 loop_ac: cmpx0 0|0 are we done with args  003236 0a 003260 6050 00 2826 tpl args_done yes, go finish up  003237 aa 000001 0630 03 2827 adx3 1,du update arg position 003240 aa 3 00000 3715 30 2828 epp5 3|0,0* get ptr to descriptor 003241 aa 5 00000 2241 00 2829 ldx4 5|0 get lhs of descriptor  003242 aa 0 00100 1015 13 2830 mrl (pr,x3),(pr),fill(0) extract type code for this arg  003243 aa 100000 000001 2831 desc9a 1|0,1  003244 aa 600166 000004 2832 desc9a fn_temp2,4  003245 aa 6 00166 2351 00 2833 lda fn_temp2 get expected type  003246 0a 003245 7100 05 2834 tra *-1,al and dispatch on it 003247 0a 003270 7100 00 2835 tra scalar_n  003250 0a 003276 7100 00 2836 tra scalar_s  003251 0a 003344 7100 00 2837 tra list_n 003252 0a 003421 7100 00 2838 tra list_s 003253 0a 003371 7100 00 2839 tra table_n  003254 0a 003421 7100 00 2840 tra table_s  003255 0a 003423 7100 00 2841 tra fun_n  003256 0a 003423 7100 00 2842 tra fun_s  003257 0a 003425 7100 00 2843 tra file1  2844 "  2845 " all args transformed, update x7 by amount stack was extended  2846 " extend stack to get space for pdl, math block, and functions  2847 " and rejoin normal code  2848 "  003260 2849 args_done:  003260 aa 6 00102 3515 20 2850 epp1 program_header,* restore program header ptr  003261 aa 6 00026 3521 20 2851 epp2 sp|stack_frame.entry_ptr,* restore ptr to entry point 003262 aa 6 00030 3701 20 2852 epp4 sp|stack_frame.lp_ptr,* restore ptr to our linkage  2853 "  003263 2854 args_thru:  003263 aa 6 00165 0671 00 2855 adx7 fn_temp1  003264 aa 001040 6210 00 2856 eax1 pdl_size+math_block_size+fn_size  003265 aa 7 00025 0411 00 2857 asx1 sb|stack_header.stack_end_ptr+1  003266 aa 6 00023 0411 00 2858 asx1 sp|stack_frame.next_sp+1  003267 0a 003150 7100 00 2859 tra setup_pdl  2860 "  2861 "  2862 " expected arg is numeric scalar  2863 "  003270 2864 scalar_n:  003270 aa 414000 1040 03 2865 cmpx4 n_scalar_type,du check type from descriptor  003271 0a 003411 6010 00 2866 tnz incorrect_arg_type 003272 aa 0 00002 3715 30 2867 epp5 0|2,0* type ok, get ptr to variable  003273 aa 6 00200 6515 10 2868 spri5 sp|args,0 store ptr to arg  003274 aa 000002 0600 03 2869 adx0 2,du and go do next arg  003275 0a 003235 7100 00 2870 tra loop_ac  2871 "  2872 " expected arg is string scalar 2873 "  003276 2874 scalar_s:  003276 aa 5 00000 2351 00 2875 lda 5|0 get descriptor size  003277 aa 777777 3750 07 2876 ana =o777777,dl  003300 aa 0 00002 3521 30 2877 epp2 0|2,0* get ptr to characters 003301 aa 010000 1150 07 2878 cmpa 4096,dl complain if length too long  003302 0a 003411 6050 00 2879 tpl incorrect_arg_type 003303 aa 000002 1010 03 2880 cmpx1 2,du get space for string word  003304 aa 000002 6050 04 2881 tpl 2,ic  003305 0a 001250 7020 00 2882 tsx2 extend_by_16  003306 aa 4 00001 7551 00 2883 sta 4|1 save descriptor size  003307 aa 775777 3640 03 2884 anx4 erase_packed_bit,du erase packed bit in descriptor lhs  003310 aa 524000 1040 03 2885 cmpx4 char_type,du skip if arg is non-varying  003311 0a 003317 6000 00 2886 tze convert_string 003312 aa 530000 1040 03 2887 cmpx4 vs_char_type,du complain if not varying  003313 0a 003411 6010 00 2888 tnz incorrect_arg_type 2889 "  2890 " arg is varying char string  2891 "  003314 aa 2 77777 2351 00 2892 lda 2|-1 get current length  003315 aa 000001 6240 00 2893 eax4 1 remember varying  003316 aa 4 00001 7441 00 2894 stx4 4|1  2895 "  003317 2896 convert_string: 003317 aa 6 00200 6501 10 2897 spri4 sp|args,0 args is our string word  003320 aa 000002 1610 03 2898 sbx1 2,du account for space  003321 aa 000101 2360 07 2899 ldq 65,dl go to run-time to make string value 003322 aa 6 00166 5411 00 2900 sprp1 fn_temp2 pr1 will get changed by basic_runtime_, so save it 003323 aa 6 00030 3701 20 2901 epp4 sp|stack_frame.lp_ptr,*  003324 aa 6 00000 2541 00 2902 call |[basic_runtime_](runtime_arglist)  003325 aa 6 00116 3501 00 003326 4a 4 00062 3521 20 003327 aa 6 00040 7531 00 003330 aa 7 00036 6701 20 003331 aa 6 00000 1731 00 003332 aa 6 00040 0731 00 003333 aa 6 00200 3701 30 2903 epp4 sp|args,0* restore free ptr  003334 aa 6 00032 3501 20 2904 epp0 sp|stack_frame.arg_ptr,* restore arglist ptr  003335 aa 1 00000 2361 00 2905 ldq 1|0 get string word  003336 aa 4 00000 7561 00 2906 stq 4|0 and save  003337 aa 1 00000 4501 00 2907 stz 1|0 prevent deallocation  003340 aa 6 00166 7611 00 2908 lprp1 fn_temp2 003341 aa 4 00002 3701 00 2909 epp4 4|2 account for space  003342 aa 000002 0600 03 2910 adx0 2,du and go do next arg  003343 0a 003235 7100 00 2911 tra loop_ac  2912 "  2913 " arg is numeric list  2914 "  003344 aa 414100 1040 03 2915 list_n: cmpx4 n_list_type,du check type 003345 0a 003411 6010 00 2916 tnz incorrect_arg_type 003346 aa 5 00003 2361 00 2917 ldq 5|descriptor.multiplier_1 make sure array is connected 003347 aa 000001 1160 07 2918 cmpq 1,dl  003350 0a 003411 6010 00 2919 tnz incorrect_arg_type 003351 aa 5 00002 2351 00 2920 lda 5|descriptor.upper_1 fill in bounds  003352 aa 5 00001 1751 00 2921 sba 5|descriptor.lower_1  003353 aa 000001 0750 07 2922 ada 1,dl  003354 aa 000001 3360 07 2923 lcq 1,dl  003355 2924 set_dope:  003355 aa 000006 1010 03 2925 cmpx1 6,du get dope space 003356 aa 000002 6050 04 2926 tpl 2,ic  003357 0a 001250 7020 00 2927 tsx2 extend_by_16  003360 aa 4 00002 7571 00 2928 staq 4|array_dope.original_bounds  003361 aa 4 00004 7571 00 2929 staq 4|array_dope.current_bounds  003362 aa 0 00002 3521 30 2930 epp2 0|2,0* get ptr to data  003363 aa 4 00000 2521 00 2931 spri2 4|array_dope.data save in dope vector  003364 aa 6 00200 6501 10 2932 spri4 sp|args,0 arg points to dope vector 003365 aa 4 00006 3701 00 2933 epp4 4|6 account for free space used  003366 aa 000006 1610 03 2934 sbx1 6,du  003367 aa 000002 0600 03 2935 adx0 2,du go do next arg  003370 0a 003235 7100 00 2936 tra loop_ac  2937 "  2938 " arg is numeric table  2939 "  003371 2940 table_n:  003371 aa 414200 1040 03 2941 cmpx4 n_table_type,du check type  003372 0a 003411 6010 00 2942 tnz incorrect_arg_type 003373 aa 5 00003 2361 00 2943 ldq 5|descriptor.multiplier_1 make sure array is connected 003374 aa 000001 1160 07 2944 cmpq 1,dl  003375 0a 003411 6010 00 2945 tnz incorrect_arg_type 003376 aa 5 00002 2361 00 2946 ldq 5|descriptor.upper_1  003377 aa 5 00001 1761 00 2947 sbq 5|descriptor.lower_1  003400 aa 000001 0760 07 2948 adq 1,dl  003401 aa 5 00006 1161 00 2949 cmpq 5|descriptor.multiplier_2 003402 0a 003411 6010 00 2950 tnz incorrect_arg_type 003403 aa 5 00005 2351 00 2951 lda 5|descriptor.upper_2  003404 aa 5 00004 1751 00 2952 sba 5|descriptor.lower_2  003405 aa 000001 0750 07 2953 ada 1,dl  003406 0a 003355 7100 00 2954 tra set_dope  2955 "  003407 2956 incorrect_number_of_args:  003407 aa 000240 2360 07 2957 ldq 160,dl 003410 0a 003412 7100 00 2958 tra error3 2959 "  003411 2960 incorrect_arg_type: 003411 aa 000241 2360 07 2961 ldq 161,dl 003412 aa 6 00150 7561 00 2962 error3: stq number  003413 aa 6 00167 7611 00 2963 lprp1 entryname  003414 aa 000002 2360 07 2964 ldq 2,dl  003415 0a 003450 7000 00 2965 tsx0 invoke_runtime  003416 0a 000663 7100 00 2966 tra stop_op  2967 "  003417 2968 no_descriptors: 003417 aa 000242 2360 07 2969 ldq 162,dl 003420 0a 003412 7100 00 2970 tra error3 2971 "  003421 2972 list_s: 003421 2973 table_s:  003421 aa 000243 2360 07 2974 ldq 163,dl 003422 0a 003412 7100 00 2975 tra error3 2976 "  003423 2977 fun_n:  003423 2978 fun_s:  003423 aa 000244 2360 07 2979 ldq 164,dl 003424 0a 003412 7100 00 2980 tra error3 2981 "  003425 aa 000245 2360 07 2982 file1: ldq 165,dl  003426 0a 003412 7100 00 2983 tra error3 2984 "  2985 " int subroutine to setup array dope  2986 "  003427 2987 setup_arrays:  003427 aa 000000 6000 10 2988 tze 0,0  003430 aa 1 00000 3501 01 2989 eppap ab|0,au get ptr to start of array_symbols  2990 "  003431 2991 array_loop: 003431 aa 0 00000 2351 00 2992 lda ap|0 get 1st word of array symbol 003432 aa 000000 6000 10 2993 tze 0,0 zero means done  003433 aa 400000 3150 07 2994 cana array_symbol_param,dl 003434 0a 003446 6010 00 2995 tnz next_array skip if parameter  003435 aa 6 00000 3715 05 2996 epplb sp|0,al get ptr to array dope  003436 aa 0 00001 2361 00 2997 ldq ap|array_symbol.offset 003437 aa 6 00000 3535 06 2998 eppbb sp|0,ql get ptr to actual data location 003440 aa 5 00000 2535 00 2999 spribb lb|array_dope.data set data ptr 003441 aa 0 00002 2351 00 3000 lda ap|array_symbol.bounds get bounds in upper,lower  003442 aa 000022 7330 00 3001 lrs 18 unpack 003443 aa 000022 7320 00 3002 qrs 18 003444 aa 5 00004 7571 00 3003 staq lb|array_dope.current_bounds  003445 aa 5 00002 7571 00 3004 staq lb|array_dope.original_bounds 003446 3005 next_array: 003446 aa 0 00003 3501 00 3006 eppap ap|array_symbol_size do next array symbol  003447 0a 003431 7100 00 3007 tra array_loop 003450 3008 segdef end_entry_ops  003450 3009 end_entry_ops:  3010 "  3011 " int subroutine to call runtime  3012 "  003450 3013 invoke_runtime: 003450 aa 6 00030 3701 20 3014 epplp sp|stack_frame.lp_ptr,*  003451 aa 6 00000 2541 00 3015 call |[basic_runtime_](runtime_arglist)  003452 aa 6 00116 3501 00 003453 4a 4 00062 3521 20 003454 aa 6 00040 7531 00 003455 aa 7 00036 6701 20 003456 aa 6 00000 1731 00 003457 aa 6 00040 0731 00 003460 aa 6 00102 3701 20 3016 epplp program_header,* 003461 aa 000000 7100 10 3017 tra 0,0  3018 "  3019 " int subroutine to initialize data reading 3020 "  003462 3021 init_data:  003462 aa 1 00003 2211 00 3022 ldx1 ab|bph.numeric_data  003463 aa 6 00152 0611 00 3023 adx1 program_header_offset 003464 aa 6 00153 4411 00 3024 sxl1 numeric_data_pos  003465 aa 1 00003 7211 00 3025 lxl1 ab|bph.numeric_data  003466 aa 1 00003 0611 00 3026 adx1 ab|bph.numeric_data  003467 aa 6 00152 0611 00 3027 adx1 program_header_offset 003470 aa 6 00153 7411 00 3028 stx1 numeric_data_pos  3029 "  003471 aa 1 00004 2211 00 3030 ldx1 ab|bph.string_data  003472 aa 6 00152 0611 00 3031 adx1 program_header_offset 003473 aa 6 00154 4411 00 3032 sxl1 string_data_pos  003474 aa 1 00004 7211 00 3033 lxl1 ab|bph.string_data  003475 aa 1 00004 0611 00 3034 adx1 ab|bph.string_data  003476 aa 6 00152 0611 00 3035 adx1 program_header_offset 003477 aa 6 00154 7411 00 3036 stx1 string_data_pos  3037 "  003500 aa 000000 7100 10 3038 tra 0,0  3039 "  3040 " constants for random number generator 3041 "  003501 3042 initial_random: 003501 aa 201451 444176 3043 oct 201451444176  3044 "  003502 3045 random_multiplier:  003502 aa 312416 161755 3046 dec 27182818285  3047 "  003503 3048 random_addend:  003503 aa 352042 177407 3049 dec 31415926535  3050 "  003504 aa 143 154 145 141 3051 cleanup: aci "cleanup"  003505 aa 156 165 160 000 3052 "  003506 3053 unclaimed_signal:  003506 aa 165 156 143 154 3054 aci "unclaimed_signal" 003507 aa 141 151 155 145 003510 aa 144 137 163 151 003511 aa 147 156 141 154 3055 "  3056 " extended precision operators that are different from single precision operators  3057 "  3058 string_assign ep_,dfst,dfld  " string assignment, entered with pointer to lhs in bb and pointer to rhs in ab "  003512 ep_string_assign:  003512 aa 6 00172 4571 00 dfst temp1 save EAQ  003513 aa 000012 2360 07 ldq 10,dl  "  003514 0a 003450 7000 00 ep_ss1: tsx0 invoke_runtime 003515 aa 6 00172 4331 00 ep_ss2: dfld temp1  003516 aa 6 00104 7101 77 tra text_base_ptr,*7  3059 "  3060 max ep_,dfst,dfcmp,dfld  "  " operator to return max(arg1,arg2,...,argn)  " entered with  " ldq n,dl " tsx7 ap|max_fun  " fld arg1 " fld arg2 " ...  " fld argn "  003517 ep_max_fun: 003517 aa 6 00104 3521 77 epp2 text_base_ptr,*7 get ptr to arg list  003520 aa 000000 6200 06 eax0 0,ql save number of args 003521 aa 000000 6210 06 eax1 0,ql save return point  003522 aa 2 77777 7161 10 xec pr2|-1,0 get last arg 003523 aa 000001 1600 03 ep_max1: sbx0 1,du count down  003524 aa 2 00000 6001 11 tze pr2|0,1 return with result in eaq 003525 aa 6 00172 4571 00 dfst temp1 003526 aa 2 77777 7161 10 xec pr2|-1,0 get next arg 003527 aa 6 00172 5171 00 dfcmp temp1  003530 aa 000002 6050 04 tpl 2,ic  003531 aa 6 00172 4331 00 dfld temp1 003532 0a 003523 7100 00 tra ep_max1  3061 "  3062 min ep_,dfst,dfcmp,dfld  "  " operator to return min(arg1,arg,...,argn) " entered with same calling sequence as max "  003533 ep_min_fun: 003533 aa 6 00104 3521 77 epp2 text_base_ptr,*7  003534 aa 000000 6200 06 eax0 0,ql  003535 aa 000000 6210 06 eax1 0,ql  003536 aa 2 77777 7161 10 xec pr2|-1,0  003537 aa 000001 1600 03 ep_min1: sbx0 1,du  003540 aa 2 00000 6001 11 tze pr2|0,1  003541 aa 6 00172 4571 00 dfst temp1 003542 aa 2 77777 7161 10 xec pr2|-1,0  003543 aa 6 00172 5171 00 dfcmp temp1  003544 aa 000002 6040 04 tmi 2,ic  003545 aa 6 00172 4331 00 dfld temp1 003546 0a 003537 7100 00 tra ep_min1  "  3063 "  3064 new_fun_call_op ep_,2,dfst,19  "  " operator to call a user defined function, entered with  " epp3 entry  " tsx7 fun_call_op " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry point is  " entry: vfd 36/fun_call_word  " vfd 36/fun_local_word  " [first executable instruction]  "  003547 ep_new_fun_call_op: 003547 aa 6 00165 7441 00 stx4 fn_temp1 use current display as next fn display  003550 aa 6 00166 5441 00 sprplp fn_temp2 use current value as next value of program header pt  "  " at this point:  " lp -> current program header " fn_temp1 = new function display value  " fn_temp2 = packed ptr to new program header  "  003551 ep_new_fun_call:  003551 aa 6 00172 5441 00 sprplp temp1  003552 aa 6 00172 2361 00 ldq temp1  003553 aa 6 00151 7561 56 stq pdl,id put current program header pt on pdl  003554 0a 000705 6064 00 ttn pdl_full  003555 aa 6 00104 3521 77 eppbp text_base_ptr,*7 get ptr to fun call word  003556 aa 3 00000 2361 00 ldq pr3|0 get expected call word  003557 aa 2 00000 1161 00 cmpq bp|0 check with actual  003560 0a 001466 6010 00 tnz fn_call_error error if not the same  003561 aa 000000 2350 07 lda 0,dl get number of args  003562 aa 000005 7370 00 lls 5  003563 aa 6 00172 7551 00 sta temp1 save  003564 aa 2 00001 3501 05 eppap bp|1,al get ptr to return loc  003565 aa 6 00174 5401 00 sprpap temp2  003566 aa 6 00174 2361 00 ldq temp2  003567 aa 6 00151 7561 56 stq pdl,id put on pdl 003570 0a 000705 6064 00 ttn pdl_full  003571 aa 6 00151 7441 56 stx4 pdl,id put fn display on pdl 003572 0a 000705 6064 00 ttn pdl_full  003573 aa 6 00151 7461 56 stx6 pdl,id put current frame offset on pdl  003574 0a 000705 6064 00 ttn pdl_full  003575 aa 6 00151 4501 56 stz pdl,id put in fence of 0  003576 0a 000705 6064 00 ttn pdl_full  003577 aa 3 00001 2361 00 ldq pr3|1 get local word  003600 aa 000000 2350 07 lda 0,dl get number of locals 003601 aa 000005 7370 00 lls 5  003602 aa 6 00174 7551 00 sta temp2 save  003603 aa 6 00172 0751 00 ada temp1 get number args + locals  003604 aa 000002 0750 07 ada 2,dl add 1 for return arg + 1 to make even  003605 aa 777776 3750 07 ana =o777776,dl make multiple of 2 003606 aa 000023 7370 00 lls 19 003607 aa 6 00160 2271 00 ldx7 next_frame get next frame offset  003610 aa 6 00160 0751 00 ada next_frame update next frame offset  003611 aa 6 00160 7551 00 sta next_frame 003612 aa 6 00157 1151 00 cmpa last_frame have we exceeded available space  003613 0a 003622 6044 00 tmoz ep_nfc1  003614 aa 7 00024 3501 20 eppap sb|stack_header.stack_end_ptr,* get ptr to end of stack  003615 aa 0 00100 3501 00 eppap ap|fn_extend_size extend stack  003616 aa 7 00024 2501 00 spriap sb|stack_header.stack_end_ptr  003617 aa 6 00022 2501 00 spriap sp|stack_frame.next_sp  003620 aa 000100 6350 00 eaa fn_extend_size 003621 aa 6 00157 0551 00 asa last_frame 003622 aa 6 00176 2535 00 ep_nfc1: spri3 temp3 save, may need pr3 for string handling  003623 aa 000002 6210 00 eax1 2 init arg copy loop 003624 aa 000001 6220 00 eax2 1 003625 aa 6 00000 3501 17 eppap sp|0,7 get ptr to next frame  003626 aa 0 00000 4501 00 stz ap|0 init return value  003627 aa 6 00172 7201 00 lxl0 temp1 get number of args 003630 0a 003664 6000 00 tze ep_nfc5 skip if zero  003631 aa 3 00000 2361 00 ldq pr3|0 get call word  003632 aa 000005 7370 00 lls 5 shift to position  003633 aa 000001 7360 00 ep_nfc2: qls 1 check next arg  003634 aa 6 00175 7561 00 stq temp2+1  003635 0a 003646 6040 00 tmi ep_nfc4 minus means string arg  003636 aa 2 00000 7161 12 xec bp|0,2 load the arg value 003637 aa 0 00000 4571 11 dfst ap|0,1 and save in frame 003640 aa 000002 0610 03 ep_nfc3: adx1 2,du account for position  003641 aa 000001 0620 03 adx2 1,du  003642 aa 000001 1600 03 sbx0 1,du count down  003643 0a 003664 6000 00 tze ep_nfc5 and skip if no more args  003644 aa 6 00175 2361 00 ldq temp2+1 do next arg  003645 0a 003633 7100 00 tra ep_nfc2  003646 aa 2 00000 7161 12 ep_nfc4: xec bp|0,2 string arg, get ptr  003647 aa 0 00000 3535 11 epp3 ap|0,1 get ptr to target 003650 aa 3 00000 4501 00 stz pr3|0 clear string temp (important!)  003651 aa 000012 2360 07 ldq 10,dl get action code 003652 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  003653 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  003654 aa 6 00116 3501 00 003655 4a 4 00062 3521 20 003656 aa 6 00040 7531 00 003657 aa 7 00036 6701 20 003660 aa 6 00000 1731 00 003661 aa 6 00040 0731 00 003662 aa 6 00102 3701 20 epplp program_header,* 003663 0a 003640 7100 00 tra ep_nfc3 go do next arg  003664 aa 6 00174 2361 00 ep_nfc5: ldq temp2 get number of locals  003665 aa 000001 7360 00 qls 1 double for number of words  003666 aa 000000 6200 06 eax0 0,ql  003667 0a 003675 6000 00 tze ep_nfc7 skip if no locals 003670 aa 0 00000 4501 11 ep_nfc6: stz ap|0,1 zero local 003671 aa 000001 1600 03 sbx0 1,du  003672 0a 003675 6000 00 tze ep_nfc7  003673 aa 000001 0610 03 adx1 1,du  003674 0a 003670 7100 00 tra ep_nfc6  003675 0a 000227 3500 00 ep_nfc7: eppap ep_operator_table restore ptr to operators  003676 aa 6 00165 2241 00 ldx4 fn_temp1 get new fn display  003677 aa 000000 6260 17 eax6 0,7 get new fn offset  003700 aa 6 00166 7641 00 lprplp fn_temp2 get new program header pt 003701 aa 6 00102 6501 00 sprilp program_header  003702 aa 6 00104 6505 00 spbplp text_base_ptr set text base ptr also  003703 aa 4 00000 6271 00 eax7 lp|0 set program header offset  003704 aa 6 00152 7471 00 stx7 program_header_offset 003705 aa 6 00176 3535 20 epp3 temp3,* restore ptr to entry 003706 aa 3 00002 7101 00 tra pr3|2 and enter function  3065 "  3066 new_global_fun_call_op ep_ "  " operator to call global function  " epp3 entry_info  " tsx7 global_fun_call_op  " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry info is " word 0 packed ptr to entry pt  " word 1 packed ptr to stack frame of parent  "  003707 ep_new_global_fun_call_op:  003707 aa 6 00000 6351 00 eaa sp|0 get rel(parent stack) - rel(our stack)  003710 aa 000000 5310 00 neg 0  003711 aa 6 00165 7551 00 sta fn_temp1  003712 aa 3 00001 7201 00 lxl0 pr3|1 003713 aa 6 00165 0401 00 asx0 fn_temp1 save as new display value  003714 aa 3 00001 7621 00 lprpbp pr3|1 get ptr to parent stack frame of fun 003715 aa 2 00102 3521 20 eppbp bp|program_header_equ,* load ptr to program header  003716 aa 6 00166 5421 00 sprpbp fn_temp2 save packed ptr to program header 003717 aa 3 00000 7631 00 lprp3 pr3|0 get ptr to entry pt  003720 0a 003551 7100 00 tra ep_new_fun_call join common code  3067 "  3068 new_fun_return_op ep_,2,dfld  "  " operator to return from function, entered with  " epp3 entry  " tsx7 fun_return_op  "  003721 ep_new_fun_return_op:  003721 aa 6 00151 2361 54 ldq pdl,di pop pdl  003722 0a 001626 6064 00 ttn fn_return_error  003723 0a 003721 6010 00 tnz ep_new_fun_return_op skip gosub return 003724 aa 6 00000 3501 16 eppap sp|0,6 get ptr to this frame  003725 aa 000002 6210 00 eax1 2 init arg, local loop  003726 aa 3 00000 2361 00 ldq pr3|0 get call word  003727 aa 000000 2350 07 lda 0,dl extract number of args  003730 aa 000005 7370 00 lls 5  003731 aa 000000 6200 05 eax0 0,al  003732 0a 003755 6000 00 tze ep_nfr3 skip if no args  003733 aa 000001 7360 00 ep_nfr1: qls 1 check next arg  003734 0a 003752 6050 00 tpl ep_nfr2 plus means numeric  003735 aa 6 00174 7561 00 stq temp2  003736 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  003737 aa 000034 2360 07 ldq 28,dl  003740 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  003741 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  003742 aa 6 00116 3501 00 003743 4a 4 00062 3521 20 003744 aa 6 00040 7531 00 003745 aa 7 00036 6701 20 003746 aa 6 00000 1731 00 003747 aa 6 00040 0731 00 003750 aa 6 00102 3701 20 epplp program_header,* 003751 aa 6 00174 2361 00 ldq temp2  003752 aa 000002 0610 03 ep_nfr2: adx1 2,du  003753 aa 000001 1600 03 sbx0 1,du check next arg  003754 0a 003733 6010 00 tnz ep_nfr1  003755 aa 3 00001 2361 00 ep_nfr3: ldq pr3|1 get local word  003756 aa 000000 2350 07 lda 0,dl  003757 aa 000005 7370 00 lls 5 get number of locals  003760 aa 000000 6200 05 eax0 0,al  003761 0a 004005 6000 00 tze ep_nfr6 skip if none  003762 aa 000001 7360 00 ep_nfr4: qls 1  003763 0a 004001 6050 00 tpl ep_nfr5  003764 aa 6 00174 7561 00 stq temp2  003765 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  003766 aa 000034 2360 07 ldq 28,dl  003767 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  003770 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  003771 aa 6 00116 3501 00 003772 4a 4 00062 3521 20 003773 aa 6 00040 7531 00 003774 aa 7 00036 6701 20 003775 aa 6 00000 1731 00 003776 aa 6 00040 0731 00 003777 aa 6 00102 3701 20 epplp program_header,* 004000 aa 6 00174 2361 00 ldq temp2  004001 aa 000001 1600 03 ep_nfr5: sbx0 1,du  004002 0a 004005 6000 00 tze ep_nfr6  004003 aa 000002 0610 03 adx1 2,du  004004 0a 003762 7100 00 tra ep_nfr4  004005 aa 6 00160 7461 00 ep_nfr6: stx6 next_frame reset end of stack 004006 aa 6 00151 2261 54 ldx6 pdl,di pop function stack  004007 aa 6 00151 2241 54 ldx4 pdl,di restore display from pdl  004010 aa 3 00000 2361 00 ldq pr3|0 check mode of return value  004011 aa 000005 7360 00 qls 5  004012 0a 004015 6040 00 tmi ep_nfr7 minus is string  004013 aa 0 00000 4331 00 dfld ap|0 load numeric value  004014 0a 004034 7100 00 tra ep_nfr8 and return  004015 aa 6 00171 3515 00 ep_nfr7: eppab string_value set string ptr  004016 aa 1 00000 2341 00 szn ab|0 is string_value word zero  004017 0a 004031 6000 00 tze ep_nfr7a yes, don't have to deallocate it 004020 aa 000034 2360 07 ldq 28,dl no, deallocate it  004021 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  004022 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  004023 aa 6 00116 3501 00 004024 4a 4 00062 3521 20 004025 aa 6 00040 7531 00 004026 aa 7 00036 6701 20 004027 aa 6 00000 1731 00 004030 aa 6 00040 0731 00 004031 aa 0 00000 2361 00 ep_nfr7a: ldq ap|0 get function value  004032 aa 1 00000 7561 00 stq ab|0 set string value 004033 aa 400000 4310 03 fld =0.0,du get 0 numeric value  004034 0a 000227 3500 00 ep_nfr8: eppap ep_operator_table restore ptr to operators  004035 aa 6 00151 7621 54 lprpbp pdl,di get return pt from pdl  004036 aa 6 00151 7641 54 lprplp pdl,di get program header pt from pdl  004037 aa 6 00102 6501 00 sprilp program_header restore stack frame  004040 aa 6 00104 6505 00 spbplp text_base_ptr  004041 aa 4 00000 6271 00 eax7 lp|0 set program header offset  004042 aa 6 00152 7471 00 stx7 program_header_offset 004043 aa 400000 5150 03 fcmp =0.0,du set indicators  004044 aa 2 00000 7101 00 tra bp|0 return to caller 3069 "  3070 list_sub_op ep_  "  " validate list subscript, for x(i) " fld i  " eppbp x_dope " tsx7 list_sub_op "  004045 ep_list_sub_op: 004045 aa 216000 4350 03 ufa =71b25,du convert to integer in ql  004046 aa 2 00004 1161 00 cmpq bp|array_dope.current_bounds  004047 0a 001667 6030 00 trc subscript_error  004050 aa 000001 7360 00 qls 1 004051 aa 2 00000 3521 66 eppbp bp|array_dope.data,*ql get ptr to element  004052 aa 6 00104 7101 77 tra text_base_ptr,*7 and return  3071 "  3072 table_sub_op ep_  "  " validate table subscript, for x(i,j)  " fld i  " eppbp x_dope " tsx7 table_sub_op  " fld j  "  004053 ep_table_sub_op:  004053 aa 216000 4350 03 ufa =71b25,du convert to integer in qu  004054 aa 2 00004 1161 00 cmpq bp|array_dope.current_bounds  004055 0a 001667 6030 00 trc subscript_error  004056 aa 2 00005 4021 00 mpy bp|array_dope.current_bounds+1 004057 aa 6 00172 7561 00 stq temp1  004060 aa 6 00104 7161 77 xec text_base_ptr,*7  004061 aa 216000 4350 03 ufa =71b25,du  004062 aa 2 00005 1161 00 cmpq bp|array_dope.current_bounds+1  004063 0a 001667 6030 00 trc subscript_error  004064 aa 6 00172 0361 00 adlq temp1 004065 aa 000001 7360 00 qls 1  004066 aa 2 00000 3521 66 eppbp bp|array_dope.data,*ql  004067 aa 000001 0670 03 adx7 1,du  004070 aa 6 00104 7101 77 tra text_base_ptr,*7  3073 "  3074 inv_table_sub_op ep_  "  " validate table subscript, for x(i,j)  " fld j  " eppbp x_dope " tsx7 inv_table_sub_op  " fld i  "  004071 ep_inv_table_sub_op:  004071 aa 216000 4350 03 ufa =71b25,du  004072 aa 2 00005 1161 00 cmpq bp|array_dope.current_bounds+1  004073 0a 001667 6030 00 trc subscript_error  004074 aa 6 00172 7561 00 stq temp1  004075 aa 6 00104 7161 77 xec text_base_ptr,*7  004076 aa 216000 4350 03 ufa =71b25,du  004077 aa 2 00004 1161 00 cmpq bp|array_dope.current_bounds  004100 0a 001667 6030 00 trc subscript_error  004101 aa 2 00005 4021 00 mpy bp|array_dope.current_bounds+1 004102 aa 6 00172 0361 00 adlq temp1 004103 aa 000001 7360 00 qls 1  004104 aa 2 00000 3521 66 eppbp bp|array_dope.data,*ql  004105 aa 000001 0670 03 adx7 1,du  004106 aa 6 00104 7101 77 tra text_base_ptr,*7  3075 "  3076 numeric_read ep_,dfld  "  " operator to read numeric value, return value in EAQ  "  004107 ep_numeric_read:  004107 aa 000043 2360 07 ldq 35,dl reading random file 004110 0a 003450 7000 00 ep_nr1: tsx0 invoke_runtime 004111 aa 6 00172 4331 00 dfld temp1 004112 aa 6 00104 7101 77 tra text_base_ptr,*7  3077 "  3078 numeric_data_read ep_,dfld,2  "  004113 ep_numeric_data_read:  004113 aa 6 00153 7201 00 lxl0 numeric_data_pos  004114 aa 6 00153 1001 00 cmpx0 numeric_data_pos 004115 0a 001762 6030 00 trc out_of_data  004116 aa 6 00104 4331 70 dfld text_base_ptr,*0  004117 aa 000002 0600 03 adx0 2,du  004120 aa 6 00153 4401 00 sxl0 numeric_data_pos  004121 aa 6 00104 7101 77 tra text_base_ptr,*7  3079 "  3080 numeric_input ep_,dfld "  " input numeric value, result left in EAQ  "  004122 ep_numeric_input:  004122 aa 000016 2360 07 ldq 14,dl  004123 0a 003450 7000 00 tsx0 invoke_runtime  004124 aa 6 00172 4331 00 dfld temp1 004125 aa 6 00104 7101 77 tra text_base_ptr,*7  3081 "  3082 print_using_numeric ep_,dfst  "  004126 ep_print_using_numeric: 004126 aa 6 00172 4571 00 dfst temp1 004127 aa 000071 2360 07 ldq 57,dl  004130 0a 002000 7100 00 tra call_runtime  3083 "  3084 mod_fun ep_,dfst,dfdi,dfmp,dfad  "  " mod  " fld a  " tsx7 mod_fun " fld b  "  004131 ep_mod_fun: 004131 aa 6 00172 4571 00 dfst temp1 save a 004132 aa 6 00104 7161 77 xec text_base_ptr,*7 get b 004133 0a 004142 6000 00 tze ep_mf1 return a if b = 0  004134 aa 6 00174 4571 00 dfst temp2 004135 aa 6 00172 5271 00 dfdi temp1 a/b  004136 aa 216000 4350 03 ufa =71b25,du  004137 aa 216000 4750 03 fad =71b25,du int(a/b)  004140 aa 6 00174 4631 00 dfmp temp2 int(a/b)*b 004141 aa 000000 5130 00 fneg 0 -int(a/b)*b  004142 aa 000001 0670 03 ep_mf1: adx7 1,du  004143 aa 6 00172 4771 00 dfad temp1 a-int(a/b)*b  004144 aa 6 00104 7101 77 tra text_base_ptr,*7  3085 "  3086 val_fun ep_  "  " val(a$)  "  004145 ep_val_fun: 004145 aa 000033 2360 07 ldq 27,dl  004146 0a 004110 7100 00 tra ep_nr1 3087 "  3088 math_functions ep_ "  " math functions  " fld x  " tsx7 math_function  "  004147 ep_sqr_fun: 004147 2a 000034 6200 00 eax0 ep_sqr  "  004150 aa 6 00156 7621 00 ep_fun2: lprp2 math_block get ptr to storage block for math routines  004151 aa 6 00104 3535 77 epp3 text_base_ptr,*7 store return location  004152 aa 6 00176 2535 00 spri3 temp3 in case we get error  004153 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  004154 aa 6 00042 7441 00 stx4 sp|stack_frame.regs+2 save in case used by function  004155 aa 6 00043 4471 00 sxl7 sp|stack_frame.regs+3 save for error handler  004156 aa 400000 4750 03 fad =0.0,du set indicators  004157 aa 4 00000 2731 30 tsp3 lp|0,0*  004160 aa 6 00042 2241 00 ldx4 sp|stack_frame.regs+2 restore x4 for user function  004161 aa 6 00043 7271 00 lxl7 sp|stack_frame.regs+3 in case of error  004162 0a 000227 3500 00 epp0 ep_operator_table in case there was a math error  004163 aa 6 00102 3701 20 epplp program_header,* 004164 aa 400000 4750 03 fad =0.0,du set indicators  004165 aa 6 00104 7101 77 tra text_base_ptr,*7  "  004166 ep_cos_fun: 004166 2a 000036 6200 00 eax0 ep_cos  004167 0a 004150 7100 00 tra ep_fun2  "  004170 ep_sin_fun: 004170 2a 000040 6200 00 eax0 ep_sin  004171 0a 004150 7100 00 tra ep_fun2  "  004172 ep_cot_fun: 004172 2a 000044 6200 00 eax0 ep_cot  004173 0a 004150 7100 00 tra ep_fun2  "  004174 ep_tan_fun: 004174 2a 000042 6200 00 eax0 ep_tan  004175 0a 004150 7100 00 tra ep_fun2  "  004176 ep_atn_fun: 004176 2a 000046 6200 00 eax0 ep_atn  004177 0a 004150 7100 00 tra ep_fun2  "  004200 ep_exp_fun: 004200 2a 000050 6200 00 eax0 ep_exp  004201 0a 004150 7100 00 tra ep_fun2  "  004202 ep_log_fun: 004202 2a 000052 6200 00 eax0 ep_log  004203 0a 004150 7100 00 tra ep_fun2  "  004204 ep_clg_fun: 004204 2a 000056 6200 00 eax0 ep_clg  004205 0a 004150 7100 00 tra ep_fun2  "  3089 "  3090 power_functions ep_,dfst,dfld  "  " operator to evaluate a ** b, entered with " fld a  " tsx0 pwr_fun " fld b  "  004206 ep_pwr_fun: 004206 aa 6 00172 4571 00 dfst temp1 save a 004207 aa 6 00104 7161 77 xec text_base_ptr,*7 get b 004210 aa 6 00174 4571 00 dfst temp2 and save it  004211 2a 000054 6200 00 ep_fun3: eax0 ep_pwr  "  004212 aa 6 00172 4331 00 dfld temp1 004213 aa 6 00174 3515 00 epp1 temp2 004214 aa 000001 0670 03 adx7 1,du  004215 0a 004150 7100 00 tra ep_fun2  "  " operator to evaluate a ** b, entered with " fld b  " tsx0 pwri_fun  " fld a  "  004216 ep_pwri_fun:  004216 aa 6 00174 4571 00 dfst temp2 save b 004217 aa 6 00104 7161 77 xec text_base_ptr,*7 get a 004220 aa 6 00172 4571 00 dfst temp1 and save it  004221 0a 004211 7100 00 tra ep_fun3 join pwr code "  3091 "  3092 zer_con_funs ep_,eax0,load0,load1,dfst,2  "  " operators to do  " mat A = zer  " mat A = con  " entered with pr2 pointing at dope for A.  "  004222 ep_zer_fun: 004222 0a 004264 6200 00 eax0 load0 get value  004223 0a 004225 7100 00 tra ep_con_fun+1  "  004224 ep_con_fun: 004224 0a 004265 6200 00 eax0 load1 get value  "  004225 aa 2 00004 7211 00 lxl1 2|array_dope.current_bounds  004226 aa 000001 1610 03 sbx1 1,du get row bound  004227 0a 002306 6044 00 tmoz array_error  004230 aa 2 00005 7221 00 lxl2 2|array_dope.current_bounds+1 004231 0a 004253 6040 00 tmi ep_con_list  004232 aa 000001 1620 03 sbx2 1,du get col bound  004233 0a 002306 6044 00 tmoz array_error  004234 aa 2 00000 3521 20 epp2 2|array_dope.data,*  004235 aa 000002 6360 12 eaq 2,2  004236 aa 000001 7360 00 qls 1  004237 aa 000000 6230 02 eax3 0,qu  004240 aa 000000 7160 10 xec 0,0  004241 aa 6 00176 7421 00 stx2 temp3 save col bound 004242 aa 6 00176 2221 00 ep_ct1: ldx2 temp3 col = col bound 004243 aa 2 00000 4571 13 ep_ct2: dfst 2|0,3 set A(row,col)  004244 aa 000002 0630 03 adx3 2,du  004245 aa 000001 1620 03 sbx2 1,du col = col - 1  004246 0a 004243 6054 00 tpnz ep_ct2  004247 aa 000002 0630 03 adx3 2,du skip over col 0 004250 aa 000001 1610 03 sbx1 1,du row = row - 1  004251 0a 004242 6054 00 tpnz ep_ct1  004252 aa 6 00104 7101 77 tra text_base_ptr,*7  "  004253 ep_con_list:  004253 aa 2 00000 3521 20 epp2 2|array_dope.data,*  004254 aa 000000 6360 11 eaq 0,1  004255 aa 000001 7360 00 qls 1  004256 aa 000000 6210 02 eax1 0,qu  004257 aa 000000 7160 10 xec 0,0  004260 aa 2 00000 4571 11 dfst 2|0,1 set all but 0 element  004261 aa 000002 1610 03 sbx1 2,du  004262 aa 777776 6054 04 tpnz -2,ic 004263 aa 6 00104 7101 77 tra text_base_ptr,*7  "  004264 aa 400000 4310 03 load0: fld =0.0,du  004265 aa 002400 4310 03 load1: fld =1.0,du  "  3093 "  3094 idn_fun ep_,dfld,dfst,2  "  " operator to do  " mat A = idn  " entered with pr2 -> dope for A  "  004266 ep_idn_fun: 004266 aa 2 00004 2361 00 ldq 2|array_dope.current_bounds  004267 aa 2 00005 1161 00 cmpq 2|array_dope.current_bounds+1 004270 0a 002306 6010 00 tnz array_error matrix must be square  004271 aa 777777 6210 06 eax1 -1,ql 004272 0a 002306 6044 00 tmoz array_error  004273 aa 000000 6220 11 eax2 0,1  004274 aa 2 00000 3521 20 epp2 2|array_dope.data,*  004275 aa 000002 6360 12 eaq 2,2  004276 aa 000001 7360 00 qls 1  004277 aa 000000 6230 02 eax3 0,qu  004300 aa 6 00176 7421 00 stx2 temp3 004301 aa 6 00176 2221 00 ep_id1: ldx2 temp3  004302 aa 6 00174 7411 00 stx1 temp2 004303 0a 005254 4330 00 ep_id2: dfld =0.0d0 assume 0 element  004304 aa 6 00174 1021 00 cmpx2 temp2 is row = col  004305 aa 000002 6010 04 tnz 2,ic  004306 0a 005256 4330 00 dfld =1.0d0 yes, get 1  004307 aa 2 00000 4571 13 dfst 2|0,3 004310 aa 000002 0630 03 adx3 2,du  004311 aa 000001 1620 03 sbx2 1,du  004312 0a 004303 6054 00 tpnz ep_id2  004313 aa 000002 0630 03 adx3 2,du  004314 aa 000001 1610 03 sbx1 1,du  004315 0a 004301 6054 00 tpnz ep_id1  004316 aa 6 00104 7101 77 tra text_base_ptr,*7  "  3095 "  3096 mat_assign_numeric ep_,dfld,dfst,2 "  " operator to do mat A = B  " entered with pr2 -> dope for A and pr1 -> dope for B  "  004317 ep_mat_assign_numeric:  004317 0a 004417 6200 00 eax0 ep_nop  004320 aa 1 00004 2371 00 ldaq 1|array_dope.current_bounds  004321 aa 000000 1160 07 cmpq 0,dl  004322 0a 004360 6040 00 tmi ep_list_assign 004323 ep_table_assign:  004323 aa 1 00004 4021 00 mpy 1|array_dope.current_bounds  004324 aa 6 00176 7561 00 stq temp3  004325 aa 2 00002 2361 00 ldq 2|array_dope.original_bounds  004326 aa 2 00003 4021 00 mpy 2|array_dope.original_bounds+1 004327 aa 6 00176 1161 00 cmpq temp3 004330 0a 002654 6040 00 tmi redim_error  004331 aa 1 00004 2371 00 ldaq 1|array_dope.current_bounds  004332 aa 777777 6210 05 eax1 -1,al 004333 0a 002306 6044 00 tmoz array_error  004334 aa 777777 6220 06 eax2 -1,ql 004335 0a 002306 6044 00 tmoz array_error  004336 aa 2 00004 7571 00 staq 2|array_dope.current_bounds  004337 aa 2 00000 3521 20 epp2 2|array_dope.data,*  004340 aa 1 00000 3515 20 epp1 1|array_dope.data,*  004341 aa 000002 6360 12 eaq 2,2  004342 aa 000001 7360 00 qls 1  004343 aa 000000 6230 02 eax3 0,qu  004344 aa 6 00176 7421 00 stx2 temp3 004345 aa 6 00176 2221 00 ep_ta1: ldx2 temp3  004346 aa 1 00000 4331 13 ep_ta2: dfld 1|0,3  004347 aa 000000 7160 10 xec 0,0  004350 aa 2 00000 4571 13 dfst 2|0,3 004351 aa 000002 0630 03 adx3 2,du  004352 aa 000001 1620 03 sbx2 1,du  004353 0a 004346 6054 00 tpnz ep_ta2  004354 aa 000002 0630 03 adx3 2,du  004355 aa 000001 1610 03 sbx1 1,du  004356 0a 004345 6054 00 tpnz ep_ta1  004357 aa 6 00104 7101 77 tra text_base_ptr,*7  "  004360 ep_list_assign: 004360 aa 2 00002 1151 00 cmpa 2|array_dope.original_bounds  004361 0a 002654 6054 00 tpnz redim_error  004362 aa 2 00004 7551 00 sta 2|array_dope.current_bounds  004363 aa 000001 7350 00 als 1  004364 aa 777776 6230 05 eax3 -2,al 004365 0a 002306 6044 00 tmoz array_error  004366 aa 1 00000 3515 20 epp1 1|array_dope.data,*  004367 aa 2 00000 3521 20 epp2 2|array_dope.data,*  004370 aa 1 00000 4331 13 dfld 1|0,3 004371 aa 000000 7160 10 xec 0,0  004372 aa 2 00000 4571 13 dfst 2|0,3 004373 aa 000002 1630 03 sbx3 2,du  004374 aa 777774 6054 04 tpnz -4,ic 004375 aa 6 00104 7101 77 tra text_base_ptr,*7  "  3097 "  3098 mat_add_sub ep_  "  " operator to do  " mat A = B + C  " mat A = B - C  " entered with pr2 -> dope for A, pr1 -> dope for B,  " pr3 -> dope for C "  004376 ep_mat_add: 004376 0a 004420 6200 00 eax0 ep_fad  004377 0a 004401 7100 00 tra ep_mat_sub+1  "  004400 ep_mat_sub: 004400 0a 004421 6200 00 eax0 ep_fsb  "  004401 aa 1 00004 2371 00 ldaq 1|array_dope.current_bounds  004402 aa 000000 1160 07 cmpq 0,dl  004403 0a 004410 6040 00 tmi ep_list_sub  004404 aa 3 00004 1171 00 cmpaq 3|array_dope.current_bounds  004405 0a 002306 6010 00 tnz array_error  004406 aa 3 00000 3535 20 epp3 3|array_dope.data,*  004407 0a 004323 7100 00 tra ep_table_assign  "  004410 ep_list_sub:  004410 aa 3 00004 1151 00 cmpa 3|array_dope.current_bounds  004411 0a 002306 6010 00 tnz array_error  004412 aa 3 00000 3535 20 epp3 3|array_dope.data,*  004413 0a 004360 7100 00 tra ep_list_assign "  3099 "  3100 mat_scalar_mult ep_,dfst  "  " operator to do  " mat A = (expression)*B  " entered with expression in EAQ, pr2 -> dope for A and " pr1 -> dope for B "  004414 ep_mat_scalar_mult: 004414 aa 6 00172 4571 00 dfst temp1 004415 0a 004422 6200 00 eax0 ep_fmp  004416 0a 004320 7100 00 tra ep_mat_assign_numeric+1  "  004417 aa 000000 0110 03 ep_nop: nop 0,du  004420 aa 3 00000 4751 13 ep_fad: fad 3|0,3  004421 aa 3 00000 5751 13 ep_fsb: fsb 3|0,3  004422 aa 6 00172 4611 00 ep_fmp: fmp temp1  "  3101 "  3102 dot_product ep_,2,dfld,dfmp,dfcmp  "  " operator to form  " mat dot_product = A * B  " entered with pr1 -> dope for A and pr3 -> dope for B  " returns with value in EAQ "  004423 ep_dot_product: 004423 aa 1 00004 2351 00 lda 1|array_dope.current_bounds  004424 aa 3 00004 1151 00 cmpa 3|array_dope.current_bounds  004425 0a 002306 6010 00 tnz array_error  004426 aa 777776 0750 07 ada -2,dl  004427 aa 000000 6210 05 eax1 0,al store bounds for indexing  004430 0a 002306 6044 00 tmoz array_error  004431 aa 1 00000 3515 20 epp1 1|array_dope.data,*  004432 aa 3 00000 3535 20 epp3 3|array_dope.data,*  004433 aa 400000 4310 03 fld =0.0,du  004434 aa 6 00172 4571 00 ep_dot: dfst temp1  004435 aa 1 00000 4331 11 dfld 1|0,1 004436 aa 3 00000 4631 11 dfmp 3|0,1 004437 aa 6 00172 4771 00 dfad temp1 004440 aa 000002 1610 03 sbx1 2,du  004441 0a 004434 6054 00 tpnz ep_dot  004442 aa 400000 5170 03 dfcmp =0.0,du set indicators  004443 aa 6 00104 7101 77 tra text_base_ptr,*7  "  3103 "  3104 trn_fun ep_  "  " operator to do  " mat A = trn(B)  "  004444 ep_trn_fun: 004444 aa 1 00005 2361 00 ldq 1|array_dope.current_bounds+1  004445 0a 004317 6040 00 tmi ep_mat_assign_numeric  004446 aa 1 00004 4021 00 mpy 1|array_dope.current_bounds  004447 aa 6 00176 7561 00 stq temp3  004450 aa 2 00002 2361 00 ldq 2|array_dope.original_bounds  004451 aa 2 00003 4021 00 mpy 2|array_dope.original_bounds+1 004452 aa 6 00176 1161 00 cmpq temp3 004453 0a 002654 6040 00 tmi redim_error  004454 aa 1 00005 2351 00 lda 1|array_dope.current_bounds+1  004455 aa 1 00004 2361 00 ldq 1|array_dope.current_bounds  004456 aa 2 00004 7571 00 staq 2|array_dope.current_bounds  004457 aa 000002 2360 07 ldq 2,dl  004460 0a 002551 7100 00 tra call_matrix  "  3105 "  3106 fun_call_op sp_,1,fst,18  "  " operator to call a user defined function, entered with  " epplb entry  " tsx7 fun_call_op " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry point is  " entry: vfd 36/fun_call_word  " vfd 36/fun_local_word  " [first executable instruction]  "  004461 sp_fun_call_op: 004461 aa 6 00165 7441 00 stx4 fn_temp1 use current display as next fn display  004462 aa 6 00166 5441 00 sprplp fn_temp2 use current value as next value of program header pt  "  " at this point:  " lp -> current program header " fn_temp1 = new function display value  " fn_temp2 = packed ptr to new program header  "  004463 sp_fun_call:  004463 aa 6 00172 5441 00 sprplp temp1  004464 aa 6 00172 2361 00 ldq temp1  004465 aa 6 00151 7561 56 stq pdl,id put current program header pt on pdl  004466 0a 000705 6064 00 ttn pdl_full  004467 aa 6 00104 3521 77 eppbp text_base_ptr,*7 get ptr to fun call word  004470 aa 5 00000 2361 00 ldq lb|0 get expected call word  004471 aa 2 00000 1161 00 cmpq bp|0 check with actual  004472 0a 001466 6010 00 tnz fn_call_error error if not the same  004473 aa 000000 2350 07 lda 0,dl get number of args  004474 aa 000005 7370 00 lls 5  004475 aa 6 00172 7551 00 sta temp1 save  004476 aa 2 00001 3501 05 eppap bp|1,al get ptr to return loc  004477 aa 6 00174 5401 00 sprpap temp2  004500 aa 6 00174 2361 00 ldq temp2  004501 aa 6 00151 7561 56 stq pdl,id put on pdl 004502 0a 000705 6064 00 ttn pdl_full  004503 aa 6 00151 7441 56 stx4 pdl,id put fn display on pdl 004504 0a 000705 6064 00 ttn pdl_full  004505 aa 6 00151 7461 56 stx6 pdl,id put current frame offset on pdl  004506 0a 000705 6064 00 ttn pdl_full  004507 aa 6 00151 4501 56 stz pdl,id put in fence of 0  004510 0a 000705 6064 00 ttn pdl_full  004511 aa 5 00001 2361 00 ldq lb|1 get local word  004512 aa 000000 2350 07 lda 0,dl get number of locals 004513 aa 000005 7370 00 lls 5  004514 aa 6 00174 7551 00 sta temp2 save  004515 aa 6 00172 0751 00 ada temp1 get number args + locals  004516 aa 000002 0750 07 ada 2,dl add 1 for return arg + 1 to make even  004517 aa 777776 3750 07 ana =o777776,dl make multiple of 2 004520 aa 000022 7370 00 lls 18 004521 aa 6 00160 2271 00 ldx7 next_frame get next frame offset  004522 aa 6 00160 0751 00 ada next_frame update next frame offset  004523 aa 6 00160 7551 00 sta next_frame 004524 aa 6 00157 1151 00 cmpa last_frame have we exceeded available space  004525 0a 004534 6044 00 tmoz sp_fc1  004526 aa 7 00024 3501 20 eppap sb|stack_header.stack_end_ptr,* get ptr to end of stack  004527 aa 0 00100 3501 00 eppap ap|fn_extend_size extend stack  004530 aa 7 00024 2501 00 spriap sb|stack_header.stack_end_ptr  004531 aa 6 00022 2501 00 spriap sp|stack_frame.next_sp  004532 aa 000100 6350 00 eaa fn_extend_size 004533 aa 6 00157 0551 00 asa last_frame 004534 aa 000001 6210 00 sp_fc1: eax1 1 init arg copy loop  004535 aa 000001 6220 00 eax2 1 004536 aa 6 00000 3501 17 eppap sp|0,7 get ptr to next frame  004537 aa 0 00000 4501 00 stz ap|0 init return value  004540 aa 6 00172 7201 00 lxl0 temp1 get number of args 004541 0a 004575 6000 00 tze sp_fc5 skip if zero  004542 aa 5 00000 2361 00 ldq lb|0 get call word  004543 aa 000005 7370 00 lls 5 shift to position  004544 aa 000001 7360 00 sp_fc2: qls 1 check next arg  004545 aa 6 00176 7561 00 stq temp3  004546 0a 004557 6040 00 tmi sp_fc4 minus means string arg 004547 aa 2 00000 7161 12 xec bp|0,2 load the arg value 004550 aa 0 00000 4551 11 fst ap|0,1 and save in frame  004551 aa 000001 0610 03 sp_fc3: adx1 1,du account for position 004552 aa 000001 0620 03 adx2 1,du  004553 aa 000001 1600 03 sbx0 1,du count down  004554 0a 004575 6000 00 tze sp_fc5 and skip if no more args  004555 aa 6 00176 2361 00 ldq temp3 do next arg 004556 0a 004544 7100 00 tra sp_fc2 004557 aa 2 00000 7161 12 sp_fc4: xec bp|0,2 string arg, get ptr 004560 aa 0 00000 3535 11 epp3 ap|0,1 get ptr to target 004561 aa 3 00000 4501 00 stz 3|0 clear string temp (important!)  004562 aa 000012 2360 07 ldq 10,dl get action code 004563 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  004564 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  004565 aa 6 00116 3501 00 004566 4a 4 00062 3521 20 004567 aa 6 00040 7531 00 004570 aa 7 00036 6701 20 004571 aa 6 00000 1731 00 004572 aa 6 00040 0731 00 004573 aa 6 00102 3701 20 epplp program_header,* 004574 0a 004551 7100 00 tra sp_fc3 go do next arg 004575 aa 6 00174 7201 00 sp_fc5: lxl0 temp2 get number of locals  004576 0a 004604 6000 00 tze sp_fc7 skip if no locals  004577 aa 0 00000 4501 11 sp_fc6: stz ap|0,1 zero local  004600 aa 000001 1600 03 sbx0 1,du  004601 0a 004604 6000 00 tze sp_fc7 004602 aa 000001 0610 03 adx1 1,du  004603 0a 004577 7100 00 tra sp_fc6 004604 0a 000000 3500 00 sp_fc7: eppap sp_operator_table restore ptr to operators  004605 aa 6 00165 2241 00 ldx4 fn_temp1 get new fn display  004606 aa 000000 6260 17 eax6 0,7 get new fn offset  004607 aa 6 00166 7641 00 lprplp fn_temp2 get new program header pt 004610 aa 6 00102 6501 00 sprilp program_header  004611 aa 6 00104 6505 00 spbplp text_base_ptr set text base ptr also  004612 aa 4 00000 6271 00 eax7 lp|0 set program header offset  004613 aa 6 00152 7471 00 stx7 program_header_offset 004614 aa 5 00002 7101 00 tra lb|2 and enter function  3107 "  3108 global_fun_call_op sp_ "  " operator to call global function  " epplb entry_info " tsx7 global_fun_call_op  " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry info is " word 0 packed ptr to entry pt  " word 1 packed ptr to stack frame of parent  "  004615 sp_global_fun_call_op:  004615 aa 6 00000 6351 00 eaa sp|0 get rel(parent stack) - rel(our stack)  004616 aa 000000 5310 00 neg 0  004617 aa 6 00165 7551 00 sta fn_temp1  004620 aa 5 00001 7201 00 lxl0 lb|1  004621 aa 6 00165 0401 00 asx0 fn_temp1 save as new display value  004622 aa 5 00001 7621 00 lprpbp lb|1 get ptr to parent stack frame of fun  004623 aa 2 00102 3521 20 eppbp bp|program_header_equ,* load ptr to program header  004624 aa 6 00166 5421 00 sprpbp fn_temp2 save packed ptr to program header 004625 aa 5 00000 7651 00 lprplb lb|0 get ptr to entry pt  004626 0a 004463 7100 00 tra sp_fun_call join common code  3109 "  3110 fun_return_op sp_,1,fld  "  " operator to return from function, entered with  " epplb entry  " tsx7 fun_return_op  "  004627 sp_fun_return_op:  004627 aa 6 00151 2361 54 ldq pdl,di pop pdl  004630 0a 001626 6064 00 ttn fn_return_error  004631 0a 004627 6010 00 tnz sp_fun_return_op skip gosub return 004632 aa 6 00000 3501 16 eppap sp|0,6 get ptr to this frame  004633 aa 000001 6210 00 eax1 1 init arg, local loop  004634 aa 5 00000 2361 00 ldq lb|0 get call word  004635 aa 000000 2350 07 lda 0,dl extract number of args  004636 aa 000005 7370 00 lls 5  004637 aa 000000 6200 05 eax0 0,al  004640 0a 004663 6000 00 tze sp_fr3 skip if no args  004641 aa 000001 7360 00 sp_fr1: qls 1 check next arg  004642 0a 004660 6050 00 tpl sp_fr2 plus means numeric 004643 aa 6 00174 7561 00 stq temp2  004644 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  004645 aa 000034 2360 07 ldq 28,dl  004646 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  004647 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  004650 aa 6 00116 3501 00 004651 4a 4 00062 3521 20 004652 aa 6 00040 7531 00 004653 aa 7 00036 6701 20 004654 aa 6 00000 1731 00 004655 aa 6 00040 0731 00 004656 aa 6 00102 3701 20 epplp program_header,* 004657 aa 6 00174 2361 00 ldq temp2  004660 aa 000001 0610 03 sp_fr2: adx1 1,du  004661 aa 000001 1600 03 sbx0 1,du check next arg  004662 0a 004641 6010 00 tnz sp_fr1 004663 aa 5 00001 2361 00 sp_fr3: ldq lb|1 get local word  004664 aa 000000 2350 07 lda 0,dl  004665 aa 000005 7370 00 lls 5 get number of locals  004666 aa 000000 6200 05 eax0 0,al  004667 0a 004713 6000 00 tze sp_fr6 skip if none  004670 aa 000001 7360 00 sp_fr4: qls 1  004671 0a 004707 6050 00 tpl sp_fr5 004672 aa 6 00174 7561 00 stq temp2  004673 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  004674 aa 000034 2360 07 ldq 28,dl  004675 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  004676 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  004677 aa 6 00116 3501 00 004700 4a 4 00062 3521 20 004701 aa 6 00040 7531 00 004702 aa 7 00036 6701 20 004703 aa 6 00000 1731 00 004704 aa 6 00040 0731 00 004705 aa 6 00102 3701 20 epplp program_header,* 004706 aa 6 00174 2361 00 ldq temp2  004707 aa 000001 1600 03 sp_fr5: sbx0 1,du  004710 0a 004713 6000 00 tze sp_fr6 004711 aa 000001 0610 03 adx1 1,du  004712 0a 004670 7100 00 tra sp_fr4 004713 aa 6 00160 7461 00 sp_fr6: stx6 next_frame reset end of stack  004714 aa 6 00151 2261 54 ldx6 pdl,di pop function stack  004715 aa 6 00151 2241 54 ldx4 pdl,di restore display from pdl  004716 aa 5 00000 2361 00 ldq lb|0 check mode of return value  004717 aa 000005 7360 00 qls 5  004720 0a 004723 6040 00 tmi sp_fr7 minus is string  004721 aa 0 00000 4311 00 fld ap|0 load numeric value  004722 0a 004742 7100 00 tra sp_fr8 and return 004723 aa 6 00171 3515 00 sp_fr7: eppab string_value set string ptr  004724 aa 1 00000 2341 00 szn ab|0 is string_value word zero  004725 0a 004737 6000 00 tze sp_fr7a yes, don't have to deallocate it  004726 aa 000034 2360 07 ldq 28,dl no, deallocate it  004727 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  004730 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  004731 aa 6 00116 3501 00 004732 4a 4 00062 3521 20 004733 aa 6 00040 7531 00 004734 aa 7 00036 6701 20 004735 aa 6 00000 1731 00 004736 aa 6 00040 0731 00 004737 aa 0 00000 2361 00 sp_fr7a: ldq ap|0 get function value  004740 aa 1 00000 7561 00 stq ab|0 set string value 004741 aa 400000 4310 03 fld =0.0,du get 0 numeric value  004742 0a 000000 3500 00 sp_fr8: eppap sp_operator_table restore ptr to operators  004743 aa 6 00151 7621 54 lprpbp pdl,di get return pt from pdl  004744 aa 6 00151 7641 54 lprplp pdl,di get program header pt from pdl  004745 aa 6 00102 6501 00 sprilp program_header restore stack frame  004746 aa 6 00104 6505 00 spbplp text_base_ptr  004747 aa 4 00000 6271 00 eax7 lp|0 set program header offset  004750 aa 6 00152 7471 00 stx7 program_header_offset 004751 aa 400000 5150 03 fcmp =0.0,du set indicators  004752 aa 2 00000 7101 00 tra bp|0 return to caller 3111 "  3112 fun_call_op ep_,2,dfst,19  "  " operator to call a user defined function, entered with  " epplb entry  " tsx7 fun_call_op " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry point is  " entry: vfd 36/fun_call_word  " vfd 36/fun_local_word  " [first executable instruction]  "  004753 ep_fun_call_op: 004753 aa 6 00165 7441 00 stx4 fn_temp1 use current display as next fn display  004754 aa 6 00166 5441 00 sprplp fn_temp2 use current value as next value of program header pt  "  " at this point:  " lp -> current program header " fn_temp1 = new function display value  " fn_temp2 = packed ptr to new program header  "  004755 ep_fun_call:  004755 aa 6 00172 5441 00 sprplp temp1  004756 aa 6 00172 2361 00 ldq temp1  004757 aa 6 00151 7561 56 stq pdl,id put current program header pt on pdl  004760 0a 000705 6064 00 ttn pdl_full  004761 aa 6 00104 3521 77 eppbp text_base_ptr,*7 get ptr to fun call word  004762 aa 5 00000 2361 00 ldq lb|0 get expected call word  004763 aa 2 00000 1161 00 cmpq bp|0 check with actual  004764 0a 001466 6010 00 tnz fn_call_error error if not the same  004765 aa 000000 2350 07 lda 0,dl get number of args  004766 aa 000005 7370 00 lls 5  004767 aa 6 00172 7551 00 sta temp1 save  004770 aa 2 00001 3501 05 eppap bp|1,al get ptr to return loc  004771 aa 6 00174 5401 00 sprpap temp2  004772 aa 6 00174 2361 00 ldq temp2  004773 aa 6 00151 7561 56 stq pdl,id put on pdl 004774 0a 000705 6064 00 ttn pdl_full  004775 aa 6 00151 7441 56 stx4 pdl,id put fn display on pdl 004776 0a 000705 6064 00 ttn pdl_full  004777 aa 6 00151 7461 56 stx6 pdl,id put current frame offset on pdl  005000 0a 000705 6064 00 ttn pdl_full  005001 aa 6 00151 4501 56 stz pdl,id put in fence of 0  005002 0a 000705 6064 00 ttn pdl_full  005003 aa 5 00001 2361 00 ldq lb|1 get local word  005004 aa 000000 2350 07 lda 0,dl get number of locals 005005 aa 000005 7370 00 lls 5  005006 aa 6 00174 7551 00 sta temp2 save  005007 aa 6 00172 0751 00 ada temp1 get number args + locals  005010 aa 000002 0750 07 ada 2,dl add 1 for return arg + 1 to make even  005011 aa 777776 3750 07 ana =o777776,dl make multiple of 2 005012 aa 000023 7370 00 lls 19 005013 aa 6 00160 2271 00 ldx7 next_frame get next frame offset  005014 aa 6 00160 0751 00 ada next_frame update next frame offset  005015 aa 6 00160 7551 00 sta next_frame 005016 aa 6 00157 1151 00 cmpa last_frame have we exceeded available space  005017 0a 005026 6044 00 tmoz ep_fc1  005020 aa 7 00024 3501 20 eppap sb|stack_header.stack_end_ptr,* get ptr to end of stack  005021 aa 0 00100 3501 00 eppap ap|fn_extend_size extend stack  005022 aa 7 00024 2501 00 spriap sb|stack_header.stack_end_ptr  005023 aa 6 00022 2501 00 spriap sp|stack_frame.next_sp  005024 aa 000100 6350 00 eaa fn_extend_size 005025 aa 6 00157 0551 00 asa last_frame 005026 aa 000002 6210 00 ep_fc1: eax1 2 init arg copy loop  005027 aa 000001 6220 00 eax2 1 005030 aa 6 00000 3501 17 eppap sp|0,7 get ptr to next frame  005031 aa 0 00000 4501 00 stz ap|0 init return value  005032 aa 6 00172 7201 00 lxl0 temp1 get number of args 005033 0a 005067 6000 00 tze ep_fc5 skip if zero  005034 aa 5 00000 2361 00 ldq lb|0 get call word  005035 aa 000005 7370 00 lls 5 shift to position  005036 aa 000001 7360 00 ep_fc2: qls 1 check next arg  005037 aa 6 00176 7561 00 stq temp3  005040 0a 005051 6040 00 tmi ep_fc4 minus means string arg 005041 aa 2 00000 7161 12 xec bp|0,2 load the arg value 005042 aa 0 00000 4571 11 dfst ap|0,1 and save in frame 005043 aa 000002 0610 03 ep_fc3: adx1 2,du account for position 005044 aa 000001 0620 03 adx2 1,du  005045 aa 000001 1600 03 sbx0 1,du count down  005046 0a 005067 6000 00 tze ep_fc5 and skip if no more args  005047 aa 6 00176 2361 00 ldq temp3 do next arg 005050 0a 005036 7100 00 tra ep_fc2 005051 aa 2 00000 7161 12 ep_fc4: xec bp|0,2 string arg, get ptr 005052 aa 0 00000 3535 11 epp3 ap|0,1 get ptr to target 005053 aa 3 00000 4501 00 stz 3|0 clear string temp (important!)  005054 aa 000012 2360 07 ldq 10,dl get action code 005055 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  005056 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  005057 aa 6 00116 3501 00 005060 4a 4 00062 3521 20 005061 aa 6 00040 7531 00 005062 aa 7 00036 6701 20 005063 aa 6 00000 1731 00 005064 aa 6 00040 0731 00 005065 aa 6 00102 3701 20 epplp program_header,* 005066 0a 005043 7100 00 tra ep_fc3 go do next arg 005067 aa 6 00174 2361 00 ep_fc5: ldq temp2 get number of locals 005070 aa 000001 7360 00 qls 1 double for number of words  005071 aa 000000 6200 06 eax0 0,ql  005072 0a 005100 6000 00 tze ep_fc7 skip if no locals  005073 aa 0 00000 4501 11 ep_fc6: stz ap|0,1 zero local  005074 aa 000001 1600 03 sbx0 1,du  005075 0a 005100 6000 00 tze ep_fc7 005076 aa 000001 0610 03 adx1 1,du  005077 0a 005073 7100 00 tra ep_fc6 005100 0a 000227 3500 00 ep_fc7: eppap ep_operator_table restore ptr to operators  005101 aa 6 00165 2241 00 ldx4 fn_temp1 get new fn display  005102 aa 000000 6260 17 eax6 0,7 get new fn offset  005103 aa 6 00166 7641 00 lprplp fn_temp2 get new program header pt 005104 aa 6 00102 6501 00 sprilp program_header  005105 aa 6 00104 6505 00 spbplp text_base_ptr set text base ptr also  005106 aa 4 00000 6271 00 eax7 lp|0 set program header offset  005107 aa 6 00152 7471 00 stx7 program_header_offset 005110 aa 5 00002 7101 00 tra lb|2 and enter function  3113 "  3114 global_fun_call_op ep_ "  " operator to call global function  " epplb entry_info " tsx7 global_fun_call_op  " vfd 36/fun_call_word " fld arg1 numeric  " eppab arg2 string  " entry info is " word 0 packed ptr to entry pt  " word 1 packed ptr to stack frame of parent  "  005111 ep_global_fun_call_op:  005111 aa 6 00000 6351 00 eaa sp|0 get rel(parent stack) - rel(our stack)  005112 aa 000000 5310 00 neg 0  005113 aa 6 00165 7551 00 sta fn_temp1  005114 aa 5 00001 7201 00 lxl0 lb|1  005115 aa 6 00165 0401 00 asx0 fn_temp1 save as new display value  005116 aa 5 00001 7621 00 lprpbp lb|1 get ptr to parent stack frame of fun  005117 aa 2 00102 3521 20 eppbp bp|program_header_equ,* load ptr to program header  005120 aa 6 00166 5421 00 sprpbp fn_temp2 save packed ptr to program header 005121 aa 5 00000 7651 00 lprplb lb|0 get ptr to entry pt  005122 0a 004755 7100 00 tra ep_fun_call join common code  3115 "  3116 fun_return_op ep_,2,dfld  "  " operator to return from function, entered with  " epplb entry  " tsx7 fun_return_op  "  005123 ep_fun_return_op:  005123 aa 6 00151 2361 54 ldq pdl,di pop pdl  005124 0a 001626 6064 00 ttn fn_return_error  005125 0a 005123 6010 00 tnz ep_fun_return_op skip gosub return 005126 aa 6 00000 3501 16 eppap sp|0,6 get ptr to this frame  005127 aa 000002 6210 00 eax1 2 init arg, local loop  005130 aa 5 00000 2361 00 ldq lb|0 get call word  005131 aa 000000 2350 07 lda 0,dl extract number of args  005132 aa 000005 7370 00 lls 5  005133 aa 000000 6200 05 eax0 0,al  005134 0a 005157 6000 00 tze ep_fr3 skip if no args  005135 aa 000001 7360 00 ep_fr1: qls 1 check next arg  005136 0a 005154 6050 00 tpl ep_fr2 plus means numeric 005137 aa 6 00174 7561 00 stq temp2  005140 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  005141 aa 000034 2360 07 ldq 28,dl  005142 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  005143 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  005144 aa 6 00116 3501 00 005145 4a 4 00062 3521 20 005146 aa 6 00040 7531 00 005147 aa 7 00036 6701 20 005150 aa 6 00000 1731 00 005151 aa 6 00040 0731 00 005152 aa 6 00102 3701 20 epplp program_header,* 005153 aa 6 00174 2361 00 ldq temp2  005154 aa 000002 0610 03 ep_fr2: adx1 2,du  005155 aa 000001 1600 03 sbx0 1,du check next arg  005156 0a 005135 6010 00 tnz ep_fr1 005157 aa 5 00001 2361 00 ep_fr3: ldq lb|1 get local word  005160 aa 000000 2350 07 lda 0,dl  005161 aa 000005 7370 00 lls 5 get number of locals  005162 aa 000000 6200 05 eax0 0,al  005163 0a 005207 6000 00 tze ep_fr6 skip if none  005164 aa 000001 7360 00 ep_fr4: qls 1  005165 0a 005203 6050 00 tpl ep_fr5 005166 aa 6 00174 7561 00 stq temp2  005167 aa 0 00000 3515 11 eppab ap|0,1 get ptr to string word  005170 aa 000034 2360 07 ldq 28,dl  005171 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  005172 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  005173 aa 6 00116 3501 00 005174 4a 4 00062 3521 20 005175 aa 6 00040 7531 00 005176 aa 7 00036 6701 20 005177 aa 6 00000 1731 00 005200 aa 6 00040 0731 00 005201 aa 6 00102 3701 20 epplp program_header,* 005202 aa 6 00174 2361 00 ldq temp2  005203 aa 000001 1600 03 ep_fr5: sbx0 1,du  005204 0a 005207 6000 00 tze ep_fr6 005205 aa 000002 0610 03 adx1 2,du  005206 0a 005164 7100 00 tra ep_fr4 005207 aa 6 00160 7461 00 ep_fr6: stx6 next_frame reset end of stack  005210 aa 6 00151 2261 54 ldx6 pdl,di pop function stack  005211 aa 6 00151 2241 54 ldx4 pdl,di restore display from pdl  005212 aa 5 00000 2361 00 ldq lb|0 check mode of return value  005213 aa 000005 7360 00 qls 5  005214 0a 005217 6040 00 tmi ep_fr7 minus is string  005215 aa 0 00000 4331 00 dfld ap|0 load numeric value  005216 0a 005236 7100 00 tra ep_fr8 and return 005217 aa 6 00171 3515 00 ep_fr7: eppab string_value set string ptr  005220 aa 1 00000 2341 00 szn ab|0 is string_value word zero  005221 0a 005233 6000 00 tze ep_fr7a yes, don't have to deallocate it  005222 aa 000034 2360 07 ldq 28,dl no, deallocate it  005223 aa 6 00030 3701 20 epplp sp|stack_frame.lp_ptr,*  005224 aa 6 00000 2541 00 call |[basic_runtime_](runtime_arglist)  005225 aa 6 00116 3501 00 005226 4a 4 00062 3521 20 005227 aa 6 00040 7531 00 005230 aa 7 00036 6701 20 005231 aa 6 00000 1731 00 005232 aa 6 00040 0731 00 005233 aa 0 00000 2361 00 ep_fr7a: ldq ap|0 get function value  005234 aa 1 00000 7561 00 stq ab|0 set string value 005235 aa 400000 4310 03 fld =0.0,du get 0 numeric value  005236 0a 000227 3500 00 ep_fr8: eppap ep_operator_table restore ptr to operators  005237 aa 6 00151 7621 54 lprpbp pdl,di get return pt from pdl  005240 aa 6 00151 7641 54 lprplp pdl,di get program header pt from pdl  005241 aa 6 00102 6501 00 sprilp program_header restore stack frame  005242 aa 6 00104 6505 00 spbplp text_base_ptr  005243 aa 4 00000 6271 00 eax7 lp|0 set program header offset  005244 aa 6 00152 7471 00 stx7 program_header_offset 005245 aa 400000 5150 03 fcmp =0.0,du set indicators  005246 aa 2 00000 7101 00 tra bp|0 return to caller 3117 "  005247 3118 segdef end_basic_operators 005247 3119 end_basic_operators:  3120 end  LITERALS 005250 aa 000000 000000 005251 aa 007777 000001 005252 aa 050750 220000 005254 aa 400000 000000 005255 aa 000000 000000 005256 aa 002400 000000 005257 aa 000000 000000 NAME DEFINITIONS FOR ENTRY POINTS AND SEGDEFS 005260 5a 000003 000000 005261 5a 000100 600000 005262 aa 000000 000000 005263 55 000013 000002 005264 5a 000002 400003 005265 55 000006 000013 005266 aa 020 142 141 163 005267 aa 151 143 137 157 005270 aa 160 145 162 141 005271 aa 164 157 162 163 005272 aa 137 000 000 000 005273 55 000023 000003 005274 0a 005247 400000 005275 55 000016 000003 005276 aa 023 145 156 144 end_basic_operators 005277 aa 137 142 141 163 005300 aa 151 143 137 157 005301 aa 160 145 162 141 005302 aa 164 157 162 163 005303 55 000032 000013 005304 0a 003450 400000 005305 55 000026 000003 005306 aa 015 145 156 144 end_entry_ops  005307 aa 137 145 156 164 005310 aa 162 171 137 157 005311 aa 160 163 000 000 005312 55 000040 000023 005313 0a 003002 400000 005314 55 000035 000003 005315 aa 012 145 156 164 enter_main  005316 aa 145 162 137 155 005317 aa 141 151 156 000 005320 55 000046 000032 005321 0a 002777 400000 005322 55 000043 000003 005323 aa 012 145 156 164 enter_proc  005324 aa 145 162 137 160 005325 aa 162 157 143 000 005326 55 000054 000040 005327 0a 001065 400000 005330 55 000051 000003 005331 aa 013 143 141 154 call_op_end 005332 aa 154 137 157 160 005333 aa 137 145 156 144 005334 55 000062 000046 005335 0a 001045 400000 005336 55 000057 000003 005337 aa 011 156 145 167 new_frame  005340 aa 137 146 162 141 005341 aa 155 145 000 000 005342 55 000071 000054 005343 0a 001012 400000 005344 55 000065 000003 005345 aa 015 143 141 154 call_op_begin  005346 aa 154 137 157 160 005347 aa 137 142 145 147 005350 aa 151 156 000 000 005351 55 000002 000062 005352 6a 000000 400002 005353 55 000074 000003 005354 aa 014 163 171 155 symbol_table  005355 aa 142 157 154 137 005356 aa 164 141 142 154 005357 aa 145 000 000 000 DEFINITIONS HASH TABLE  005360 aa 000000 000015 005361 5a 000062 000000 005362 5a 000054 000000 005363 aa 000000 000000 005364 5a 000023 000000 005365 aa 000000 000000 005366 aa 000000 000000 005367 5a 000071 000000 005370 aa 000000 000000 005371 5a 000032 000000 005372 5a 000040 000000 005373 5a 000046 000000 005374 aa 000000 000000 005375 5a 000013 000000 EXTERNAL NAMES  005376 aa 007 144 145 146 default 005377 aa 141 165 154 164 005400 aa 007 143 154 145 cleanup 005401 aa 141 156 165 160 005402 aa 015 142 141 163 basic_matrix_  005403 aa 151 143 137 155 005404 aa 141 164 162 151 005405 aa 170 137 000 000 005406 aa 021 166 151 162 virtual_cpu_time_  005407 aa 164 165 141 154 005410 aa 137 143 160 165 005411 aa 137 164 151 155 005412 aa 145 137 000 000 005413 aa 006 143 154 157 clock_  005414 aa 143 153 137 000 005415 aa 016 142 141 163 basic_runtime_  005416 aa 151 143 137 162 005417 aa 165 156 164 151 005420 aa 155 145 137 000 005421 aa 020 142 141 163 basic_find_proc_  005422 aa 151 143 137 146 005423 aa 151 156 144 137 005424 aa 160 162 157 143 005425 aa 137 000 000 000 005426 aa 023 144 157 165 double_log_base_10_ 005427 aa 142 154 145 137 005430 aa 154 157 147 137 005431 aa 142 141 163 145 005432 aa 137 061 060 137 005433 aa 024 144 157 165 double_power_double_  005434 aa 142 154 145 137 005435 aa 160 157 167 145 005436 aa 162 137 144 157 005437 aa 165 142 154 145 005440 aa 137 000 000 000 005441 aa 022 144 157 165 double_log_base_e_  005442 aa 142 154 145 137 005443 aa 154 157 147 137 005444 aa 142 141 163 145 005445 aa 137 145 137 000 005446 aa 021 144 157 165 double_logarithm_  005447 aa 142 154 145 137 005450 aa 154 157 147 141 005451 aa 162 151 164 150 005452 aa 155 137 000 000 005453 aa 023 144 157 165 double_exponential_ 005454 aa 142 154 145 137 005455 aa 145 170 160 157 005456 aa 156 145 156 164 005457 aa 151 141 154 137 005460 aa 033 144 157 165 double_arc_tangent_radians_ 005461 aa 142 154 145 137 005462 aa 141 162 143 137 005463 aa 164 141 156 147 005464 aa 145 156 164 137 005465 aa 162 141 144 151 005466 aa 141 156 163 137 005467 aa 023 144 157 165 double_arc_tangent_ 005470 aa 142 154 145 137 005471 aa 141 162 143 137 005472 aa 164 141 156 147 005473 aa 145 156 164 137 005474 aa 031 144 157 165 double_cotangent_radians_  005475 aa 142 154 145 137 005476 aa 143 157 164 141 005477 aa 156 147 145 156 005500 aa 164 137 162 141 005501 aa 144 151 141 156 005502 aa 163 137 000 000 005503 aa 027 144 157 165 double_tangent_radians_ 005504 aa 142 154 145 137 005505 aa 164 141 156 147 005506 aa 145 156 164 137 005507 aa 162 141 144 151 005510 aa 141 156 163 137 005511 aa 024 144 157 165 double_sine_radians_  005512 aa 142 154 145 137 005513 aa 163 151 156 145 005514 aa 137 162 141 144 005515 aa 151 141 156 163 005516 aa 137 000 000 000 005517 aa 026 144 157 165 double_cosine_radians_  005520 aa 142 154 145 137 005521 aa 143 157 163 151 005522 aa 156 145 137 162 005523 aa 141 144 151 141 005524 aa 156 163 137 000 005525 aa 014 144 157 165 double_sine_  005526 aa 142 154 145 137 005527 aa 163 151 156 145 005530 aa 137 000 000 000 005531 aa 023 144 157 165 double_square_root_ 005532 aa 142 154 145 137 005533 aa 163 161 165 141 005534 aa 162 145 137 162 005535 aa 157 157 164 137 005536 aa 014 154 157 147 log_base_10_  005537 aa 137 142 141 163 005540 aa 145 137 061 060 005541 aa 137 000 000 000 005542 aa 024 163 151 156 single_power_single_  005543 aa 147 154 145 137 005544 aa 160 157 167 145 005545 aa 162 137 163 151 005546 aa 156 147 154 145 005547 aa 137 000 000 000 005550 aa 006 160 157 167 power_  005551 aa 145 162 137 000 005552 aa 013 154 157 147 log_base_e_ 005553 aa 137 142 141 163 005554 aa 145 137 145 137 005555 aa 012 154 157 147 logarithm_  005556 aa 141 162 151 164 005557 aa 150 155 137 000 005560 aa 014 145 170 160 exponential_  005561 aa 157 156 145 156 005562 aa 164 151 141 154 005563 aa 137 000 000 000 005564 aa 024 141 162 143 arc_tangent_radians_  005565 aa 137 164 141 156 005566 aa 147 145 156 164 005567 aa 137 162 141 144 005570 aa 151 141 156 163 005571 aa 137 000 000 000 005572 aa 014 141 162 143 arc_tangent_  005573 aa 137 164 141 156 005574 aa 147 145 156 164 005575 aa 137 000 000 000 005576 aa 022 143 157 164 cotangent_radians_  005577 aa 141 156 147 145 005600 aa 156 164 137 162 005601 aa 141 144 151 141 005602 aa 156 163 137 000 005603 aa 020 164 141 156 tangent_radians_  005604 aa 147 145 156 164 005605 aa 137 162 141 144 005606 aa 151 141 156 163 005607 aa 137 000 000 000 005610 aa 010 164 141 156 tangent_  005611 aa 147 145 156 164 005612 aa 137 000 000 000 005613 aa 015 163 151 156 sine_radians_  005614 aa 145 137 162 141 005615 aa 144 151 141 156 005616 aa 163 137 000 000 005617 aa 017 143 157 163 cosine_radians_ 005620 aa 151 156 145 137 005621 aa 162 141 144 151 005622 aa 141 156 163 137 005623 aa 005 163 151 156 sine_  005624 aa 145 137 000 000 005625 aa 014 163 161 165 square_root_  005626 aa 141 162 145 137 005627 aa 162 157 157 164 005630 aa 137 000 000 000 NO TRAP POINTER WORDS  TYPE PAIR BLOCKS  005631 aa 000004 000000 005632 55 000135 000116 005633 aa 000004 000000 005634 55 000135 000120 005635 aa 000004 000000 005636 55 000122 000122 005637 aa 000004 000000 005640 55 000126 000126 005641 aa 000004 000000 005642 55 000133 000133 005643 aa 000004 000000 005644 55 000135 000135 005645 aa 000004 000000 005646 55 000141 000141 005647 aa 000004 000000 005650 55 000166 000146 005651 aa 000004 000000 005652 55 000270 000153 005653 aa 000004 000000 005654 55 000166 000161 005655 aa 000004 000000 005656 55 000173 000173 005657 aa 000004 000000 005660 55 000207 000200 005661 aa 000004 000000 005662 55 000330 000214 005663 aa 000004 000000 005664 55 000330 000223 005665 aa 000004 000000 005666 55 000245 000231 005667 aa 000004 000000 005670 55 000245 000237 005671 aa 000004 000000 005672 55 000251 000251 005673 aa 000004 000000 005674 55 000275 000256 005675 aa 000004 000000 005676 55 000270 000262 005677 aa 000004 000000 005700 55 000275 000272 005701 aa 000004 000000 005702 55 000300 000300 005703 aa 000004 000000 005704 55 000312 000304 005705 aa 000004 000000 005706 55 000330 000316 005707 aa 000004 000000 005710 55 000330 000323 005711 aa 000004 000000 005712 55 000343 000333 005713 aa 000004 000000 005714 55 000343 000337 005715 aa 000004 000000 005716 55 000345 000345 005717 aa 000001 000000 005720 aa 000000 000000 INTERNAL EXPRESSION WORDS 005721 5a 000351 000000 005722 5a 000353 000000 005723 5a 000355 000000 005724 5a 000357 000000 005725 5a 000361 000000 005726 5a 000363 000000 005727 5a 000365 000000 005730 5a 000367 000000 005731 5a 000371 000000 005732 5a 000373 000000 005733 5a 000375 000000 005734 5a 000377 000000 005735 5a 000401 000000 005736 5a 000403 000000 005737 5a 000405 000000 005740 5a 000407 000000 005741 5a 000411 000000 005742 5a 000413 000000 005743 5a 000415 000000 005744 5a 000417 000000 005745 5a 000421 000000 005746 5a 000423 000000 005747 5a 000425 000000 005750 5a 000427 000000 005751 5a 000431 000000 005752 5a 000433 000000 005753 5a 000435 000000 LINKAGE INFORMATION 000000 aa 000000 000000 000001 0a 005260 000000 000002 aa 000000 000000 000003 aa 000000 000000 000004 aa 000000 000000 000005 aa 000000 000000 000006 22 000010 000076 000007 a2 000000 000000 000010 9a 777770 0000 46 square_root_|square_root_  000011 5a 000473 0000 00 000012 9a 777766 0000 46 sine_|cosine_radians_  000013 5a 000472 0000 00 000014 9a 777764 0000 46 sine_|sine_radians_ 000015 5a 000471 0000 00 000016 9a 777762 0000 46 tangent_|tangent_radians_  000017 5a 000470 0000 00 000020 9a 777760 0000 46 tangent_|cotangent_radians_ 000021 5a 000467 0000 00 000022 9a 777756 0000 46 arc_tangent_|arc_tangent_radians_  000023 5a 000466 0000 00 000024 9a 777754 0000 46 exponential_|exponential_  000025 5a 000465 0000 00 000026 9a 777752 0000 46 logarithm_|log_base_e_  000027 5a 000464 0000 00 000030 9a 777750 0000 46 power_|single_power_single_ 000031 5a 000463 0000 00 000032 9a 777746 0000 46 logarithm_|log_base_10_ 000033 5a 000462 0000 00 000034 9a 777744 0000 46 double_square_root_|double_square_root_ 000035 5a 000461 0000 00 000036 9a 777742 0000 46 double_sine_|double_cosine_radians_ 000037 5a 000460 0000 00 000040 9a 777740 0000 46 double_sine_|double_sine_radians_  000041 5a 000457 0000 00 000042 9a 777736 0000 46 tangent_|double_tangent_radians_  000043 5a 000456 0000 00 000044 9a 777734 0000 46 tangent_|double_cotangent_radians_  000045 5a 000455 0000 00 000046 9a 777732 0000 46 double_arc_tangent_|double_arc_tangent_radians_ 000047 5a 000454 0000 00 000050 9a 777730 0000 46 double_exponential_|double_exponential_ 000051 5a 000453 0000 00 000052 9a 777726 0000 46 double_logarithm_|double_log_base_e_  000053 5a 000452 0000 00 000054 9a 777724 0000 46 power_|double_power_double_ 000055 5a 000451 0000 00 000056 9a 777722 0000 46 double_logarithm_|double_log_base_10_  000057 5a 000450 0000 00 000060 9a 777720 0000 46 basic_find_proc_|basic_find_proc_  000061 5a 000447 0000 00 000062 9a 777716 0000 46 basic_runtime_|basic_runtime_  000063 5a 000446 0000 00 000064 9a 777714 0000 46 clock_|clock_  000065 5a 000445 0000 00 000066 9a 777712 0000 46 virtual_cpu_time_|virtual_cpu_time_ 000067 5a 000444 0000 00 000070 9a 777710 0000 46 basic_matrix_|basic_matrix_ 000071 5a 000443 0000 00 000072 9a 777706 0000 46 basic_runtime_|cleanup  000073 5a 000442 0000 00 000074 9a 777704 0000 46 basic_runtime_|default  000075 5a 000441 0000 00 SYMBOL INFORMATION SYMBOL TABLE HEADER  000000 aa 000000 000001 000001 aa 163171 155142 000002 aa 164162 145145 000003 aa 000000 000004 000004 aa 000000 114732 000005 aa 732732 062314 000006 aa 000000 114775 000007 aa 671321 527621 000010 aa 141154 155040 000011 aa 040040 040040 000012 aa 000024 000040 000013 aa 000034 000040 000014 aa 000044 000100 000015 aa 000002 000002 000016 aa 000064 000000 000017 aa 000000 000561 000020 aa 000000 000147 000021 aa 000000 000535 000022 aa 000551 000147 000023 aa 000064 000000 000024 aa 101114 115040 000025 aa 126145 162163 000026 aa 151157 156040 000027 aa 040066 056067 000030 aa 040040 117143 000031 aa 164157 142145 000032 aa 162040 061071 000033 aa 070066 040040 000034 aa 107112 157150 000035 aa 156163 157156 000036 aa 056123 171163 000037 aa 115141 151156 000040 aa 164056 141040 000041 aa 040040 040040 000042 aa 040040 040040 000043 aa 040040 040040 000044 aa 154151 163164 000045 aa 040040 040040 000046 aa 040040 040040 000047 aa 040040 040040 000050 aa 040040 040040 000051 aa 040040 040040 000052 aa 040040 040040 000053 aa 040040 040040 000054 aa 040040 040040 000055 aa 040040 040040 000056 aa 040040 040040 000057 aa 040040 040040 000060 aa 040040 040040 000061 aa 040040 040040 000062 aa 040040 040040 000063 aa 040040 040040 000064 aa 000000 000001 000065 aa 000000 000003 000066 aa 000102 000065 000067 aa 147740 446347 000070 aa 000000 114774 000071 aa 461273 600000 000072 aa 000120 000066 000073 aa 147714 750316 000074 aa 000000 114774 000075 aa 453561 000000 000076 aa 000136 000041 000077 aa 052721 247134 000100 aa 000000 105272 000101 aa 317215 400000 000102 aa 076163 160145 >special_ldd>install>MR12.0-1206>basic_operators_.alm  000103 aa 143151 141154 000104 aa 137154 144144 000105 aa 076151 156163 000106 aa 164141 154154 000107 aa 076115 122061 000110 aa 062056 060055 000111 aa 061062 060066 000112 aa 076142 141163 000113 aa 151143 137157 000114 aa 160145 162141 000115 aa 164157 162163 000116 aa 137056 141154 000117 aa 155040 040040 000120 aa 076163 160145 >special_ldd>install>MR12.0-1206>stack_header.incl.alm  000121 aa 143151 141154 000122 aa 137154 144144 000123 aa 076151 156163 000124 aa 164141 154154 000125 aa 076115 122061 000126 aa 062056 060055 000127 aa 061062 060066 000130 aa 076163 164141 000131 aa 143153 137150 000132 aa 145141 144145 000133 aa 162056 151156 000134 aa 143154 056141 000135 aa 154155 040040 000136 aa 076154 144144 >ldd>include>stack_frame.incl.alm  000137 aa 076151 156143 000140 aa 154165 144145 000141 aa 076163 164141 000142 aa 143153 137146 000143 aa 162141 155145 000144 aa 056151 156143 000145 aa 154056 141154 000146 aa 155040 040040 MULTICS ASSEMBLY CROSS REFERENCE LISTING Value Symbol Source file Line number  52 abort_label basic_operators_: 37, 2674, 2675, 2715. 2117 abs_fun basic_operators_: 1323, 1324, 2231.  1264 ac_done basic_operators_: 1750, 1879. 1114 ac_loop basic_operators_: 1749, 1773, 1798, 1820. arc_tangent_ basic_operators_: 63.  arc_tangent_radians_ basic_operators_: 63.  630 argcnt basic_operators_: 1323, 1324, 1466.  112 arglist1 basic_operators_: 40, 2257, 2292, 2714, 2718, 2782. 200 args basic_operators_: 52, 1675, 1693, 1696, 2611, 2616, 2868, 2897, 2903, 2932. 3260 args_done basic_operators_: 2826, 2849. 3263 args_thru basic_operators_: 2803, 2854. 633 argval basic_operators_: 1323, 1324, 1473.  1023 arg_copy basic_operators_: 1666, 1678. 1037 arg_copy_done basic_operators_: 1668, 1679. 4 array_dope.current_bounds basic_operators_: 101, 1809, 1833, 1842, 1954, 1956, 1958, 2319, 2321, 2323,  2329, 2332, 2338, 2339, 2346, 2349, 2353, 2359, 2360, 2362,  2368, 2369, 2380, 2387, 2388, 2390, 2393, 2402, 2403, 2405,  2408, 2417, 2418, 2420, 2421, 2427, 2428, 2429, 2448, 2479,  2929, 3003, 3070, 3072, 3074, 3092, 3094, 3096, 3098, 3102, 3104. 0 array_dope.data basic_operators_: 99, 1817, 1954, 1956, 1958, 2319, 2321, 2323, 2349, 2353, 2931,  2999, 3070, 3072, 3074, 3092, 3094, 3096, 3098, 3102.  2 array_dope.original_bounds basic_operators_: 100, 2323, 2334, 2335, 2344, 2364, 2365, 2380, 2391, 2406,  2423, 2424, 2446, 2473, 2474, 2928, 3004, 3096, 3104. 2306 array_error basic_operators_: 2311, 2315, 2319, 2321, 2323, 2349, 2353, 2361, 2389, 2404, 2419,  3092, 3094, 3096, 3098, 3102.  3431 array_loop basic_operators_: 2991, 3007. 2 array_symbol.bounds basic_operators_: 108, 3000. 0 array_symbol.location basic_operators_: 106.  0 array_symbol.name basic_operators_: 105.  1 array_symbol.offset basic_operators_: 107, 2997. 400000 array_symbol_param basic_operators_: 110, 2994. 3 array_symbol_size basic_operators_: 109, 3006. basic_find_proc_ basic_operators_: 1622.  basic_matrix_ basic_operators_: 2374.  basic_runtime_ basic_operators_: 1781, 1939, 1948, 2086, 2692, 2702, 2724, 2902, 3015, 3064, 3068,  3106, 3110, 3112, 3116. 40 blank basic_operators_: 138, 1355, 1599.  15 bph.definitions basic_operators_: 95, 2649. 13 bph.functions basic_operators_: 92.  5 bph.incoming_args basic_operators_: 86, 1642, 1645, 2802, 2814.  11 bph.numeric_arrays basic_operators_: 90, 2728. 3 bph.numeric_data basic_operators_: 84, 3022, 3025, 3026. 7 bph.numeric_scalars basic_operators_: 88.  1 bph.numeric_storage basic_operators_: 82.  6 bph.outgoing_args basic_operators_: 87.  15 bph.precision_ind basic_operators_: 94, 1713, 1747, 2638, 2790.  14 bph.statement_map basic_operators_: 93.  12 bph.string_arrays basic_operators_: 91, 2730. 4 bph.string_data basic_operators_: 85, 3030, 3033, 3034. 10 bph.string_scalars basic_operators_: 89.  2 bph.string_storage basic_operators_: 83, 1711, 2788.  0 bph.version basic_operators_: 81.  3213 call_from_non_basic basic_operators_: 2749, 2800. 2551 call_matrix basic_operators_: 2372, 2380, 2395, 2410, 2431, 3104. 1170 call_offset stack_header: 80.  1012 call_op_begin basic_operators_: 1650, 1651. 1065 call_op_end basic_operators_: 1705, 1706. 2000 call_runtime basic_operators_: 1336, 1392, 1397, 1402, 1407, 1413, 1419, 1426, 1435, 1445, 1457,  1462, 1494, 2025, 2032, 2046, 2052, 2066, 2084, 2092, 2098, 2104,  2111, 2118, 2126, 2130, 2136, 2170, 2174, 2176, 2180, 2208, 2212,  2219, 2223, 2341, 2435, 2525, 2529, 2533, 2537, 2541, 2545, 2549,  2553, 2557, 2574, 3082. 622 change_from_string basic_operators_: 1323, 1324, 1454.  625 change_to_string basic_operators_: 1323, 1324, 1459.  524000 char_type basic_operators_: 147, 1792, 2885.  733 check_def basic_operators_: 1591, 1617. 2051 check_eof basic_operators_: 1323, 1324, 2153.  534 chr_fun basic_operators_: 1323, 1324, 1390.  3504 cleanup basic_operators_: 2688, 2692, 3051.  537 clk_fun basic_operators_: 1323, 1324, 1396.  clock_ basic_operators_: 2257.  56 conversion_label basic_operators_: 37, 2679. 3317 convert_string basic_operators_: 2886, 2896. cosine_radians_ basic_operators_: 59.  cotangent_radians_ basic_operators_: 62.  122 cpu_start basic_operators_: 41, 2295, 2784.  541 dat_fun basic_operators_: 1323, 1324, 1401.  0 def.backward basic_operators_: 118.  1 def.class basic_operators_: 121, 1606. 1 def.flags basic_operators_: 120, 1592. 0 def.forward basic_operators_: 117, 1615. 2 def.segname basic_operators_: 123.  2 def.symbol basic_operators_: 122, 1595, 2661.  1 def.value basic_operators_: 119, 1609. default basic_operators_: 2702.  164 definitions basic_operators_: 45, 1589, 2656.  20000 def_flag.descriptors basic_operators_: 129.  100000 def_flag.entry basic_operators_: 127, 1593. 200000 def_flag.ignore basic_operators_: 126.  400000 def_flag.new basic_operators_: 125.  40000 def_flag.retain basic_operators_: 128.  0 def_head.backward basic_operators_: 115.  0 def_head.forward basic_operators_: 114, 1590. 1 descriptor.lower_1 basic_operators_: 158, 1808, 1832, 2921, 2947.  4 descriptor.lower_2 basic_operators_: 161, 1841, 2952.  3 descriptor.multiplier_1 basic_operators_: 160, 1813, 1840, 2917, 2943.  6 descriptor.multiplier_2 basic_operators_: 163, 1835, 2949.  0 descriptor.type basic_operators_: 157, 1807, 1831.  2 descriptor.upper_1 basic_operators_: 159, 1811, 1838, 2920, 2946.  5 descriptor.upper_2 basic_operators_: 162, 1844, 2951.  124 determinant basic_operators_: 41, 2310, 2312, 2740. 2302 det_fun basic_operators_: 1323, 1324, 2309.  100 dim_1 basic_operators_: 154, 1806. 200 dim_2 basic_operators_: 155, 1830. double_arc_tangent_ basic_operators_: 73.  double_arc_tangent_radians_ basic_operators_: 73. double_cosine_radians_ basic_operators_: 69.  double_cotangent_radians_ basic_operators_: 72. double_exponential_ basic_operators_: 74.  double_logarithm_ basic_operators_: 75, 77. double_log_base_10_ basic_operators_: 77.  double_log_base_e_ basic_operators_: 75.  double_power_double_ basic_operators_: 76.  double_sine_ basic_operators_: 69, 70. double_sine_radians_ basic_operators_: 70.  double_square_root_ basic_operators_: 68.  double_tangent_radians_ basic_operators_: 71.  627000 eax7 basic_operators_: 165, 1635. 5247 end_basic_operators basic_operators_: 3118, 3119. 3450 end_entry_ops basic_operators_: 3008, 3009. 2036 end_input basic_operators_: 1323, 1324, 2134.  2115 end_print basic_operators_: 1323, 1324, 2221.  3002 enter_main basic_operators_: 2595, 2596. 2777 enter_proc basic_operators_: 2589, 2590. 167 entryname basic_operators_: 45, 2663, 2963.  1174 entry_offset stack_header: 84.  46 ep_atn basic_operators_: 73, 3088. 4176 ep_atn_fun basic_operators_: 1323, 1324, 3088.  56 ep_clg basic_operators_: 77, 3088. 4204 ep_clg_fun basic_operators_: 1323, 1324, 3088.  4224 ep_con_fun basic_operators_: 1324, 3092. 4253 ep_con_list basic_operators_: 3092.  36 ep_cos basic_operators_: 69, 3088. 4166 ep_cos_fun basic_operators_: 1323, 1324, 3088.  44 ep_cot basic_operators_: 72, 3088. 4172 ep_cot_fun basic_operators_: 1323, 1324, 3088.  4242 ep_ct1 basic_operators_: 3092.  4243 ep_ct2 basic_operators_: 3092.  4434 ep_dot basic_operators_: 3102.  4423 ep_dot_product basic_operators_: 1324, 3102. 50 ep_exp basic_operators_: 74, 3088. 4200 ep_exp_fun basic_operators_: 1323, 1324, 3088.  4420 ep_fad basic_operators_: 3098, 3100. 5026 ep_fc1 basic_operators_: 3112.  5036 ep_fc2 basic_operators_: 3112.  5043 ep_fc3 basic_operators_: 3112.  5051 ep_fc4 basic_operators_: 3112.  5067 ep_fc5 basic_operators_: 3112.  5073 ep_fc6 basic_operators_: 3112.  5100 ep_fc7 basic_operators_: 3112.  4422 ep_fmp basic_operators_: 3100.  5135 ep_fr1 basic_operators_: 3116.  5154 ep_fr2 basic_operators_: 3116.  5157 ep_fr3 basic_operators_: 3116.  5164 ep_fr4 basic_operators_: 3116.  5203 ep_fr5 basic_operators_: 3116.  5207 ep_fr6 basic_operators_: 3116.  5217 ep_fr7 basic_operators_: 3116.  5233 ep_fr7a basic_operators_: 3116.  5236 ep_fr8 basic_operators_: 3116.  4421 ep_fsb basic_operators_: 3098, 3100. 4150 ep_fun2 basic_operators_: 3088, 3090. 4211 ep_fun3 basic_operators_: 3090.  4755 ep_fun_call basic_operators_: 3112, 3114. 4753 ep_fun_call_op basic_operators_: 1324, 3112. 5123 ep_fun_return_op basic_operators_: 1324, 3116. 5111 ep_global_fun_call_op basic_operators_: 1324, 3114. 4301 ep_id1 basic_operators_: 3094.  4303 ep_id2 basic_operators_: 3094.  4266 ep_idn_fun basic_operators_: 1324, 3094. 4071 ep_inv_table_sub_op basic_operators_: 1324, 3074. 4360 ep_list_assign basic_operators_: 3096, 3098. 4410 ep_list_sub basic_operators_: 3098.  4045 ep_list_sub_op basic_operators_: 1324, 3070. 52 ep_log basic_operators_: 75, 3088. 4202 ep_log_fun basic_operators_: 1323, 1324, 3088.  4376 ep_mat_add basic_operators_: 1324, 3098. 4317 ep_mat_assign_numeric basic_operators_: 1324, 3096, 3100, 3104. 4414 ep_mat_scalar_mult basic_operators_: 1324, 3100. 4400 ep_mat_sub basic_operators_: 1324, 3098. 3523 ep_max1 basic_operators_: 3060.  3517 ep_max_fun basic_operators_: 1324, 3060. 4142 ep_mf1 basic_operators_: 3084.  3537 ep_min1 basic_operators_: 3062.  3533 ep_min_fun basic_operators_: 1324, 3062. 4131 ep_mod_fun basic_operators_: 1323, 1324, 3084.  3551 ep_new_fun_call basic_operators_: 3064, 3066. 3547 ep_new_fun_call_op basic_operators_: 1324, 3064. 3721 ep_new_fun_return_op basic_operators_: 1324, 3068. 3707 ep_new_global_fun_call_op basic_operators_: 1324, 3066.  3622 ep_nfc1 basic_operators_: 3064.  3633 ep_nfc2 basic_operators_: 3064.  3640 ep_nfc3 basic_operators_: 3064.  3646 ep_nfc4 basic_operators_: 3064.  3664 ep_nfc5 basic_operators_: 3064.  3670 ep_nfc6 basic_operators_: 3064.  3675 ep_nfc7 basic_operators_: 3064.  3733 ep_nfr1 basic_operators_: 3068.  3752 ep_nfr2 basic_operators_: 3068.  3755 ep_nfr3 basic_operators_: 3068.  3762 ep_nfr4 basic_operators_: 3068.  4001 ep_nfr5 basic_operators_: 3068.  4005 ep_nfr6 basic_operators_: 3068.  4015 ep_nfr7 basic_operators_: 3068.  4031 ep_nfr7a basic_operators_: 3068.  4034 ep_nfr8 basic_operators_: 3068.  4417 ep_nop basic_operators_: 3096, 3100. 4110 ep_nr1 basic_operators_: 3076, 3086. 4113 ep_numeric_data_read basic_operators_: 1324, 3078. 4122 ep_numeric_input basic_operators_: 1324, 3080. 4107 ep_numeric_read basic_operators_: 1324, 3076. 227 ep_operator_table basic_operators_: 1324, 2798, 3064, 3068, 3088, 3112, 3116.  4126 ep_print_using_numeric basic_operators_: 1324, 3082. 54 ep_pwr basic_operators_: 76, 3090. 4216 ep_pwri_fun basic_operators_: 1323, 1324, 3090.  4206 ep_pwr_fun basic_operators_: 1323, 1324, 3090.  40 ep_sin basic_operators_: 70, 3088. 4170 ep_sin_fun basic_operators_: 1323, 1324, 3088.  34 ep_sqr basic_operators_: 68, 3088. 4147 ep_sqr_fun basic_operators_: 1323, 1324, 3088.  3514 ep_ss1 basic_operators_: 3058.  3515 ep_ss2 basic_operators_: 3058.  3512 ep_string_assign basic_operators_: 1324, 3058. 4345 ep_ta1 basic_operators_: 3096.  4346 ep_ta2 basic_operators_: 3096.  4323 ep_table_assign basic_operators_: 3096, 3098. 4053 ep_table_sub_op basic_operators_: 1324, 3072. 42 ep_tan basic_operators_: 71, 3088. 4174 ep_tan_fun basic_operators_: 1323, 1324, 3088.  4444 ep_trn_fun basic_operators_: 1324, 3104. 4145 ep_val_fun basic_operators_: 1324, 3086. 4222 ep_zer_fun basic_operators_: 1324, 3092. 775777 erase_packed_bit basic_operators_: 150, 2884. 1670 error1 basic_operators_: 1530, 1543, 1934, 1943, 1952, 1963, 1970, 1974, 1978, 1982, 2019,  2060, 2317, 2377, 2453, 2587.  1314 error2 basic_operators_: 1864, 1870, 1875, 1912, 1917, 1925. 3412 error3 basic_operators_: 2958, 2962, 2970, 2975, 2980, 2983. 1674 error_in_statement basic_operators_: 1323, 1324, 1968.  exponential_ basic_operators_: 64.  1250 extend_by_16 basic_operators_: 1790, 1804, 1828, 1852, 2882, 2927. 126 fcb basic_operators_: 42, 1989, 2002, 2005, 2014.  110 fcb_pt basic_operators_: 39, 1990, 2006.  1262 file basic_operators_: 1764, 1874. 3425 file1 basic_operators_: 2843, 2982. 2103 file_fun basic_operators_: 1323, 1324, 2205.  147 file_number basic_operators_: 42, 1988, 2001, 2215, 2639.  170 flags basic_operators_: 45, 1633, 1689, 1717, 2567, 2607, 2645, 2748. 1307 float_bin_desc basic_operators_: 1770, 1805, 1829, 1906. 1466 fn_call_error basic_operators_: 1939, 1941, 3064, 3106, 3112.  100 fn_extend_size basic_operators_: 142, 1939, 3064, 3106, 3112.  1626 fn_return_error basic_operators_: 1948, 1950, 3068, 3110, 3116.  400 fn_size basic_operators_: 141, 1653, 2598, 2773, 2856.  165 fn_temp1 basic_operators_: 45, 1733, 1857, 1895, 1903, 1939, 1946, 2801, 2855, 3064, 3066,  3106, 3108, 3112, 3114. 166 fn_temp2 basic_operators_: 45, 1779, 1782, 1939, 1946, 2832, 2833, 2900, 2908, 3064, 3066,  3106, 3108, 3112, 3114. 3423 fun_n basic_operators_: 2841, 2977. 3423 fun_s basic_operators_: 2842, 2978. 702 gosub_op basic_operators_: 1323, 1324, 1536, 1563. 772 have_entry basic_operators_: 1611, 1630. 2073 hps_fun basic_operators_: 1323, 1324, 2184.  20000 ignore_handler basic_operators_: 151, 1632. 3411 incorrect_arg_type basic_operators_: 2866, 2879, 2888, 2916, 2919, 2942, 2945, 2950, 2960.  3407 incorrect_number_of_args basic_operators_: 2806, 2956.  3501 initial_random basic_operators_: 2735, 3042. 3462 init_data basic_operators_: 2038, 2778, 3021.  3022 init_stack basic_operators_: 1704, 2612, 2620.  2123 int_fun basic_operators_: 1323, 1324, 2241.  1730 invalid_file_number basic_operators_: 1997, 1999, 2004, 2017. 2761 invalid_number_length basic_operators_: 2563, 2565, 2570.  3450 invoke_runtime basic_operators_: 1330, 1384, 1505, 1920, 1965, 2054, 2120, 2515, 2965, 3013, 3058,  3076, 3080. 2535 inv_fun basic_operators_: 1323, 1324, 2358.  2702 inv_table_redim_op basic_operators_: 1323, 1324, 2489.  157 last_frame basic_operators_: 44, 1939, 2774, 3064, 3106, 3112. 550 left_fun basic_operators_: 1323, 1324, 1417.  523 len1 basic_operators_: 1369, 1371, 1375, 1468, 2200.  514 len_fun basic_operators_: 1323, 1324, 1367.  2034 linput basic_operators_: 1323, 1324, 2128.  2076 lin_fun basic_operators_: 1323, 1324, 2189.  3344 list_n basic_operators_: 2837, 2915. 2645 list_redim_op basic_operators_: 1323, 1324, 2442.  3421 list_s basic_operators_: 2838, 2972. 4264 load0 basic_operators_: 3092.  4265 load1 basic_operators_: 3092.  3211 load_op_tbl_ptr basic_operators_: 1714, 2791, 2796.  2043 loc_fun basic_operators_: 1323, 1324, 2143.  2040 lof_fun basic_operators_: 1323, 1324, 2138.  logarithm_ basic_operators_: 65, 67. log_base_10_ basic_operators_: 67.  log_base_e_ basic_operators_: 65.  3235 loop_ac basic_operators_: 2825, 2870, 2911, 2936. 1734 margin basic_operators_: 1323, 1324, 2029.  2046 mar_fun basic_operators_: 1323, 1324, 2148.  2461 mas basic_operators_: 2340, 2347. 156 math_block basic_operators_: 44, 2303, 2768, 3088. 40 math_block_size basic_operators_: 53, 1653, 2598, 2769, 2856.  2446 mat_assign_string basic_operators_: 1323, 1324, 2328.  2740 mat_linput_op basic_operators_: 1323, 1324, 2539.  2624 mat_mult_mm basic_operators_: 1323, 1324, 2416.  2613 mat_mult_mv basic_operators_: 1323, 1324, 2401.  2602 mat_mult_vm basic_operators_: 1323, 1324, 2386.  2742 mat_numeric_data_read basic_operators_: 1323, 1324, 2543.  2715 mat_numeric_input basic_operators_: 1323, 1324, 2504.  2721 mat_numeric_print basic_operators_: 1323, 1324, 2512.  2730 mat_numeric_read basic_operators_: 1323, 1324, 2523.  2734 mat_numeric_write basic_operators_: 1323, 1324, 2531.  2746 mat_print_using_numeric basic_operators_: 1323, 1324, 2551.  2750 mat_print_using_string basic_operators_: 1323, 1324, 2555.  2744 mat_string_data_read basic_operators_: 1323, 1324, 2547.  2717 mat_string_input basic_operators_: 1323, 1324, 2508.  2726 mat_string_print basic_operators_: 1323, 1324, 2519.  2732 mat_string_read basic_operators_: 1323, 1324, 2527.  2736 mat_string_write basic_operators_: 1323, 1324, 2535.  564 mid_fun basic_operators_: 1440.  1676 missing_line basic_operators_: 1323, 1324, 1972.  2722 mnp basic_operators_: 2506, 2510, 2514, 2521. 1045 new_frame basic_operators_: 1686, 1687. 1766 new_string_data_read basic_operators_: 1323, 1324, 2068.  3446 next_array basic_operators_: 2995, 3005. 754 next_def basic_operators_: 1594, 1602, 1608, 1615. 160 next_frame basic_operators_: 44, 1939, 1948, 2772, 3064, 3068, 3106, 3110, 3112, 3116. 1274 non_basic_go basic_operators_: 1887, 1904. 1076 not_basic basic_operators_: 1636, 1639, 1725.  2775 not_yet basic_operators_: 1937, 2190, 2586.  1304 no_args basic_operators_: 1727, 1902. 3417 no_descriptors basic_operators_: 2808, 2968. 2643 nul_fun basic_operators_: 1323, 1324, 2433.  150 number basic_operators_: 42, 1917, 1963, 2572, 2962.  161 number_read basic_operators_: 44, 2199, 2744.  153 numeric_data_pos basic_operators_: 43, 2056, 3024, 3028, 3078.  1776 numeric_print basic_operators_: 1323, 1324, 2080.  1742 numeric_write basic_operators_: 1323, 1324, 2043.  2101 num_fun basic_operators_: 1323, 1324, 2198.  1260 n_fun basic_operators_: 1762, 1868. 1174 n_list basic_operators_: 1758, 1802. 1213 n_list_1 basic_operators_: 1817, 1848. 414100 n_list_type basic_operators_: 145, 2915. 1134 n_scalar basic_operators_: 1756, 1769. 414000 n_scalar_type basic_operators_: 144, 2865. 1221 n_table basic_operators_: 1760, 1826. 414200 n_table_type basic_operators_: 146, 2941. 2 on_body basic_operators_: 134, 2693, 2703.  700 on_error basic_operators_: 1524, 1529, 1555, 1558. 707 on_gosub_op basic_operators_: 1323, 1324, 1553.  0 on_name basic_operators_: 133, 2689, 2699.  5 on_next basic_operators_: 136, 2687, 2696, 2697. 673 on_op basic_operators_: 1323, 1324, 1522.  4 on_size basic_operators_: 135, 2691, 2701.  66 on_units basic_operators_: 37, 2686. 1762 out_of_data basic_operators_: 2056, 2058, 2071, 2579, 3078.  151 pdl basic_operators_: 42, 1537, 1930, 1939, 1948, 2757, 2761, 3064, 3068, 3106, 3110,  3112, 3116. 705 pdl_full basic_operators_: 1538, 1541, 1939, 3064, 3106, 3112. 400 pdl_size basic_operators_: 140, 1653, 2598, 2756, 2767, 2856. 2054 per_fun basic_operators_: 1323, 1324, 2158.  531 pos1 basic_operators_: 1384, 2141, 2146, 2151, 2156, 2161, 2166, 2187, 2196.  532 pos2 basic_operators_: 1385.  527 pos_fun basic_operators_: 1323, 1324, 1382.  power_ basic_operators_: 66, 76. 2014 print_new_line basic_operators_: 1323, 1324, 2096.  2064 print_using_end basic_operators_: 1323, 1324, 2172.  50 print_using_ptr basic_operators_: 35, 1584, 1918.  2062 print_using_start basic_operators_: 1323, 1324, 2168.  2071 print_using_string basic_operators_: 1323, 1324, 2178.  102 program_header basic_operators_: 38, 1623, 1710, 1939, 1948, 2037, 2075, 2087, 2258, 2293, 2303,  2375, 2631, 2787, 2850, 3016, 3064, 3068, 3088, 3106, 3110, 3112, 3116. 102 program_header_equ basic_operators_: 51, 1946, 3066, 3108, 3114.  152 program_header_offset basic_operators_: 42, 1939, 1948, 2633, 3023, 3027, 3031, 3035, 3064, 3068, 3106,  3110, 3112, 3116.  1171 push_offset stack_header: 81.  163 pu_length basic_operators_: 44.  162 pu_pos basic_operators_: 44.  155 random basic_operators_: 43, 2260, 2266, 2272, 2736.  2151 randomize basic_operators_: 1323, 1324, 2255.  3503 random_addend basic_operators_: 2268, 3048. 3502 random_multiplier basic_operators_: 2267, 3045. 2670 redim basic_operators_: 2472, 2500. 2654 redim_error basic_operators_: 2323, 2337, 2345, 2367, 2380, 2392, 2407, 2426, 2444, 2447, 2451,  2463, 2468, 2476, 2491, 2496, 3096, 3104.  2106 reset_ascii basic_operators_: 1323, 1324, 2210.  1737 reset_data basic_operators_: 1323, 1324, 2036, 2216. 2110 reset_random basic_operators_: 1323, 1324, 2214.  1173 return_no_pop_offset stack_header: 83.  661 return_null_string basic_operators_: 1474, 1479, 1481, 1496. 1172 return_offset stack_header: 82.  1323 return_op basic_operators_: 1323, 1324, 1929.  553 right_fun basic_operators_: 1323, 1324, 1423.  2165 rnd_fun basic_operators_: 1323, 1324, 2265.  116 runtime_arglist basic_operators_: 40, 1622, 1781, 1939, 1948, 2086, 2374, 2716, 2719, 2724, 2902,  3015, 3064, 3068, 3106, 3110, 3112, 3116.  1217 s1b basic_operators_: 1812, 1821, 1839.  3004 save basic_operators_: 2593, 2600. 474 sc1 basic_operators_: 1343, 1348. 503 sc2 basic_operators_: 1350, 1355. 3270 scalar_n basic_operators_: 2835, 2864. 3276 scalar_s basic_operators_: 2836, 2874. 730 sco1 basic_operators_: 1579, 1584. 1732 scratch basic_operators_: 1323, 1324, 2023.  556 seg_fun basic_operators_: 1323, 1324, 1430.  2752 setdigits_op basic_operators_: 1323, 1324, 2561.  3427 setup_arrays basic_operators_: 2729, 2731, 2987.  1711 setup_fcb basic_operators_: 1323, 1324, 1995.  3150 setup_pdl basic_operators_: 2753, 2859. 3355 set_dope basic_operators_: 2924, 2954. 2200 sgn_fun basic_operators_: 1323, 1324, 2282.  sine_ basic_operators_: 59, 60. sine_radians_ basic_operators_: 60.  single_power_single_ basic_operators_: 66.  62 size_label basic_operators_: 37, 2680. 2023 spc_fun basic_operators_: 1323, 1324, 2115.  22 sp_atn basic_operators_: 63, 2303. 2256 sp_atn_fun basic_operators_: 1323, 2303. 32 sp_clg basic_operators_: 67, 2303. 2264 sp_clg_fun basic_operators_: 1323, 2303. 2312 sp_con_fun basic_operators_: 1323, 2319. 2336 sp_con_list basic_operators_: 2319.  12 sp_cos basic_operators_: 59, 2303. 2246 sp_cos_fun basic_operators_: 1323, 2303. 20 sp_cot basic_operators_: 62, 2303. 2252 sp_cot_fun basic_operators_: 1323, 2303. 2325 sp_ct1 basic_operators_: 2319.  2326 sp_ct2 basic_operators_: 2319.  2525 sp_dot basic_operators_: 2353.  2514 sp_dot_product basic_operators_: 1323, 2353. 24 sp_exp basic_operators_: 64, 2303. 2260 sp_exp_fun basic_operators_: 1323, 2303. 2511 sp_fad basic_operators_: 2349, 2351. 4534 sp_fc1 basic_operators_: 3106.  4544 sp_fc2 basic_operators_: 3106.  4551 sp_fc3 basic_operators_: 3106.  4557 sp_fc4 basic_operators_: 3106.  4575 sp_fc5 basic_operators_: 3106.  4577 sp_fc6 basic_operators_: 3106.  4604 sp_fc7 basic_operators_: 3106.  2513 sp_fmp basic_operators_: 2351.  4641 sp_fr1 basic_operators_: 3110.  4660 sp_fr2 basic_operators_: 3110.  4663 sp_fr3 basic_operators_: 3110.  4670 sp_fr4 basic_operators_: 3110.  4707 sp_fr5 basic_operators_: 3110.  4713 sp_fr6 basic_operators_: 3110.  4723 sp_fr7 basic_operators_: 3110.  4737 sp_fr7a basic_operators_: 3110.  4742 sp_fr8 basic_operators_: 3110.  2512 sp_fsb basic_operators_: 2349, 2351. 2230 sp_fun2 basic_operators_: 2303, 2305. 2271 sp_fun3 basic_operators_: 2305.  4463 sp_fun_call basic_operators_: 3106, 3108. 4461 sp_fun_call_op basic_operators_: 1323, 3106. 4627 sp_fun_return_op basic_operators_: 1323, 3110. 4615 sp_global_fun_call_op basic_operators_: 1323, 3108. 2354 sp_id1 basic_operators_: 2321.  2356 sp_id2 basic_operators_: 2321.  2343 sp_idn_fun basic_operators_: 1323, 2321. 1652 sp_inv_table_sub_op basic_operators_: 1323, 1958. 2431 sp_list_assign basic_operators_: 2323, 2349. 2501 sp_list_sub basic_operators_: 2349.  1630 sp_list_sub_op basic_operators_: 1323, 1954. 26 sp_log basic_operators_: 65, 2303. 2262 sp_log_fun basic_operators_: 1323, 2303. 2467 sp_mat_add basic_operators_: 1323, 2349. 2372 sp_mat_assign_numeric basic_operators_: 1323, 2323, 2351, 2380. 2505 sp_mat_scalar_mult basic_operators_: 1323, 2351. 2471 sp_mat_sub basic_operators_: 1323, 2349. 576 sp_max1 basic_operators_: 1447.  572 sp_max_fun basic_operators_: 1323, 1447. 2146 sp_mf1 basic_operators_: 2253.  612 sp_min1 basic_operators_: 1449.  606 sp_min_fun basic_operators_: 1323, 1449. 2135 sp_mod_fun basic_operators_: 1323, 2253. 1332 sp_new_fun_call basic_operators_: 1939, 1946. 1330 sp_new_fun_call_op basic_operators_: 1323, 1939. 1502 sp_new_fun_return_op basic_operators_: 1323, 1948. 1470 sp_new_global_fun_call_op basic_operators_: 1323, 1946.  1403 sp_nfc1 basic_operators_: 1939.  1414 sp_nfc2 basic_operators_: 1939.  1421 sp_nfc3 basic_operators_: 1939.  1427 sp_nfc4 basic_operators_: 1939.  1445 sp_nfc5 basic_operators_: 1939.  1447 sp_nfc6 basic_operators_: 1939.  1454 sp_nfc7 basic_operators_: 1939.  1514 sp_nfr1 basic_operators_: 1948.  1533 sp_nfr2 basic_operators_: 1948.  1536 sp_nfr3 basic_operators_: 1948.  1543 sp_nfr4 basic_operators_: 1948.  1562 sp_nfr5 basic_operators_: 1948.  1566 sp_nfr6 basic_operators_: 1948.  1576 sp_nfr7 basic_operators_: 1948.  1612 sp_nfr7a basic_operators_: 1948.  1615 sp_nfr8 basic_operators_: 1948.  2510 sp_nop basic_operators_: 2323, 2351. 1750 sp_nr1 basic_operators_: 2054, 2301. 1753 sp_numeric_data_read basic_operators_: 1323, 2056. 2026 sp_numeric_input basic_operators_: 1323, 2120. 1747 sp_numeric_read basic_operators_: 1323, 2054. 0 sp_operator_table basic_operators_: 1323, 1939, 1948, 2303, 2797, 3106, 3110.  2066 sp_print_using_numeric basic_operators_: 1323, 2176. 30 sp_pwr basic_operators_: 66, 2305. 2276 sp_pwri_fun basic_operators_: 1323, 2305. 2266 sp_pwr_fun basic_operators_: 1323, 2305. 14 sp_sin basic_operators_: 60, 2303. 2250 sp_sin_fun basic_operators_: 1323, 2303. 10 sp_sqr basic_operators_: 58, 2303. 2227 sp_sqr_fun basic_operators_: 1323, 2303. 460 sp_ss1 basic_operators_: 1330.  461 sp_ss2 basic_operators_: 1330.  456 sp_string_assign basic_operators_: 1323, 1330. 2416 sp_ta1 basic_operators_: 2323.  2417 sp_ta2 basic_operators_: 2323.  2376 sp_table_assign basic_operators_: 2323, 2349. 1635 sp_table_sub_op basic_operators_: 1323, 1956. 16 sp_tan basic_operators_: 61, 2303. 2254 sp_tan_fun basic_operators_: 1323, 2303. 2565 sp_trn_fun basic_operators_: 1323, 2380. 2225 sp_val_fun basic_operators_: 1323, 2301. 2310 sp_zer_fun basic_operators_: 1323, 2319. square_root_ basic_operators_: 58.  564 sst_fun basic_operators_: 1323, 1324, 1439.  73 stach_header.trace_top_ptr stack_header: 62. 32 stack_frame.arg_ptr basic_operators_: 1466, 1477, 1690, 2606, 2804, 2904, stack_frame: 16. 100 stack_frame.condition_bit stack_frame: 32.  20 stack_frame.condition_word stack_frame: 9.  2000 stack_frame.crawl_out_bit stack_frame: 28.  26 stack_frame.entry_ptr basic_operators_: 2622, 2851, stack_frame: 13. 20 stack_frame.flag_word stack_frame: 24. 400 stack_frame.link_trap_bit stack_frame: 30.  30 stack_frame.lp_ptr basic_operators_: 1621, 1780, 1939, 1948, 2085, 2256, 2291, 2303, 2373, 2669, 2852,  2901, 3014, 3064, 3068, 3088, 3106, 3110, 3112, 3116,  stack_frame: 15. 20000 stack_frame.main_proc_bit stack_frame: 25.  60 stack_frame.min_length stack_frame: 23. 22 stack_frame.next_sp basic_operators_: 1657, 1658, 1685, 1735, 1856, 1897, 1939, 2603, 2858, 3064, 3106,  3112,  stack_frame: 10. 36 stack_frame.on_unit_rel_ptrs basic_operators_: 2705, 2706,  stack_frame: 19.  30 stack_frame.operator_ptr basic_operators_: 1511, stack_frame: 14.  37 stack_frame.operator_ret_ptr stack_frame: 20.  20 stack_frame.prev_sp basic_operators_: 1509, 1684, 2601, 2708, stack_frame: 8. 40 stack_frame.regs basic_operators_: 1702, 1715, 1889, 2303, 3088,  stack_frame: 22. 24 stack_frame.return_ptr basic_operators_: 1512, 1703, 1890,  stack_frame: 12. 10000 stack_frame.run_unit_manager stack_frame: 26.  1000 stack_frame.signaller_bit stack_frame: 29.  22 stack_frame.signaller_word stack_frame: 11.  4000 stack_frame.signal_bit stack_frame: 27. 34 stack_frame.static_ptr stack_frame: 17. 200 stack_frame.support_bit stack_frame: 31. 35 stack_frame.support_ptr stack_frame: 18. 37 stack_frame.translator_id basic_operators_: 2625, stack_frame: 21.  66 stack_header.assign_linkage_ptr stack_header: 59.  32 stack_header.bar_mode_sp stack_header: 42. 36 stack_header.call_op_ptr stack_header: 44. 10 stack_header.clr_ptr stack_header: 27.  6 stack_header.combined_stat_ptr stack_header: 25.  4 stack_header.cpm_data_ptr stack_header: 24. 13 stack_header.cpm_enabled stack_header: 32. 13 stack_header.cur_lot_size stack_header: 31. 64 stack_header.ect_ptr stack_header: 58.  46 stack_header.entry_op_ptr stack_header: 49. 70 stack_header.heap_header_ptr stack_header: 60. 74 stack_header.in_trace stack_header: 63.  52 stack_header.isot_ptr stack_header: 52.  26 stack_header.lot_ptr basic_operators_: 2654, 2668, stack_header: 39.  12 stack_header.main_proc_invoked stack_header: 29.  12 stack_header.max_lot_size stack_header: 28. 20 stack_header.parent_ptr stack_header: 36.  34 stack_header.pl1_operators_ptr stack_header: 43.  40 stack_header.push_op_ptr stack_header: 46. 42 stack_header.return_op_ptr stack_header: 47. 44 stack_header.ret_no_pop_op_ptr stack_header: 48.  62 stack_header.rnt_ptr stack_header: 57.  12 stack_header.run_unit_depth stack_header: 30. 54 stack_header.sct_ptr stack_header: 53.  30 stack_header.signal_ptr stack_header: 41.  22 stack_header.stack_begin_ptr stack_header: 37. 24 stack_header.stack_end_ptr basic_operators_: 1508, 1654, 1656, 1728, 1734, 1853, 1855, 1896, 1939, 2600,  2604, 2857, 3064, 3106, 3112, stack_header: 38. 14 stack_header.system_free_ptr stack_header: 33. 60 stack_header.sys_link_info_ptr stack_header: 56.  72 stack_header.trace_frames stack_header: 61. 50 stack_header.trans_op_tv_ptr stack_header: 51. 56 stack_header.unwinder_ptr stack_header: 54. 16 stack_header.user_free_ptr stack_header: 34. 100 stack_header_end stack_header: 64.  721 std_sub_call_op basic_operators_: 1323, 1324, 1576.  663 stop_op basic_operators_: 1323, 1324, 1503, 1921, 1966, 2673, 2966.  465 string_compare basic_operators_: 1323, 1324, 1340.  463 string_concatenate basic_operators_: 1323, 1324, 1334.  154 string_data_pos basic_operators_: 43, 2069, 2070, 2074, 2577, 2578, 2582, 3032, 3036.  2765 string_data_read basic_operators_: 1323, 1324, 2576.  2032 string_input basic_operators_: 1323, 1324, 2124.  2463 string_list_assign basic_operators_: 2331, 2343. 2012 string_print basic_operators_: 1323, 1324, 2090.  1764 string_read basic_operators_: 1323, 1324, 2064.  106 string_segment basic_operators_: 38, 1344, 1351, 1372, 1580, 1784. 171 string_value basic_operators_: 45, 1948, 3068, 3110, 3116.  1745 string_write basic_operators_: 1323, 1324, 2050.  545 str_fun basic_operators_: 1323, 1324, 1411.  663 subend_op basic_operators_: 1323, 1324, 1502.  1321 subprogram_not_found basic_operators_: 1625, 1923. 1667 subscript_error basic_operators_: 1954, 1956, 1958, 1960, 3070, 3072, 3074.  721 sub_call_op basic_operators_: 1323, 1324, 1575.  1065 sub_done basic_operators_: 1710, 1898. 1327 sub_exit_op basic_operators_: 1323, 1324, 1936.  1062 sub_go basic_operators_: 1695, 1702. 1260 s_fun basic_operators_: 1763, 1869. 1256 s_list basic_operators_: 1759, 1862. 1141 s_scalar basic_operators_: 1757, 1778. 1256 s_table basic_operators_: 1761, 1863. 3371 table_n basic_operators_: 2839, 2940. 2656 table_redim_op basic_operators_: 1323, 1324, 2461.  3421 table_s basic_operators_: 2840, 2973. 2016 tab_for_comma basic_operators_: 1323, 1324, 2102.  2020 tab_fun basic_operators_: 1323, 1324, 2108.  tangent_ basic_operators_: 61, 62, 71, 72. tangent_radians_ basic_operators_: 61.  172 temp1 basic_operators_: 46, 1330, 1382, 1385, 1390, 1411, 1417, 1424, 1430, 1440, 1447,  1449, 1455, 1460, 1691, 1692, 1694, 1939, 1956, 1958, 2030, 2044,  2054, 2081, 2109, 2116, 2120, 2139, 2144, 2149, 2154, 2159, 2164,  2176, 2185, 2206, 2217, 2242, 2246, 2253, 2259, 2294, 2305, 2351,  2353, 2465, 2471, 2477, 2498, 2713, 2766, 2771, 2783, 3058, 3060,  3062, 3064, 3072, 3074, 3076, 3080, 3082, 3084, 3090, 3100, 3102,  3106, 3112. 174 temp2 basic_operators_: 46, 1432, 1442, 1939, 1948, 2253, 2305, 2321, 2470, 2478, 2493,  2499, 3064, 3068, 3084, 3090, 3094, 3106, 3110, 3112, 3116. 176 temp3 basic_operators_: 46, 1681, 1718, 1744, 1886, 1888, 1939, 2303, 2319, 2321, 2323,  2333, 2336, 2363, 2366, 2380, 2422, 2425, 2472, 2475, 3064, 3088,  3092, 3094, 3096, 3104, 3106, 3112. 104 text_base_ptr basic_operators_: 38, 1330, 1358, 1361, 1363, 1378, 1386, 1431, 1441, 1447, 1449,  1498, 1525, 1556, 1610, 1631, 1931, 1939, 1948, 1954, 1956, 1958,  1991, 2007, 2015, 2039, 2054, 2056, 2072, 2076, 2088, 2120, 2233,  2235, 2245, 2249, 2251, 2253, 2261, 2276, 2283, 2286, 2288, 2299,  2303, 2305, 2313, 2319, 2321, 2323, 2353, 2378, 2449, 2466, 2481,  2494, 2514, 2517, 2568, 2580, 2583, 2584, 2623, 3058, 3060, 3062,  3064, 3068, 3070, 3072, 3074, 3076, 3078, 3080, 3084, 3088, 3090,  3092, 3094, 3096, 3102, 3106, 3110, 3112, 3116. 2206 tim_fun basic_operators_: 1323, 1324, 2290.  0 trace_frames.count stack_header: 69.  1 trace_frames.top_ptr stack_header: 70.  2077 tst_fun basic_operators_: 1323, 1324, 2194.  551 tv_offset stack_header: 75, 80, 81, 82, 83, 84. 2057 typ_fun basic_operators_: 1323, 1324, 2163.  3506 unclaimed_signal basic_operators_: 2698, 3053. 1700 unclosed_for basic_operators_: 1323, 1324, 1976.  1702 undefined_function basic_operators_: 1323, 1324, 1980.  1725 use_fcb basic_operators_: 1323, 1324, 2012.  757777 use_handler basic_operators_: 152, 1716. 1704 use_tty basic_operators_: 1323, 1324, 1986.  543 usr_fun basic_operators_: 1323, 1324, 1406.  virtual_cpu_time_ basic_operators_: 2292, 2782. 530000 vs_char_type basic_operators_: 148, 2887. 1313 wrong_arg_type basic_operators_: 1673, 1914. 1311 wrong_number_of_args basic_operators_: 1644, 1910. NO FATAL ERRORS  ----------------------------------------------------------- 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