2 ! OUTPUT 2 USING "#,K";"<lf>INDENT<cr>REN 2,2<cr><lf>RE-STORE ""/RAMBO/DEMO/SGEN_CAL""<cr>" 4 ! 6 END 8 ! 10 ! PAGE -> 12 !*********************************************************************** 14 Appl_appl:SUB Appl_appl 16 !************************************************************************ 18 !* This routine contains all the commons used in the calibration example. 20 !* It is needed by the application loader to handle commons. 22 !************************************************************************ 24 COM /Cal_buf_info/ Disp_choices$(1:2,1:63)[20] 26 COM /Cal_data/ REAL Data_header(1:63,1:10),INTEGER Ovld_buffer(1:63) 28 COM /Cal_input_info/ INTEGER Num_inputs,Input_labels$(1:63)[20] 30 COM /Cal_plot_xaxis/ REAL Start_freq,Stop_freq,INTEGER Num_freq_points 32 COM /Cal_error/ INTEGER Skip_c1_cal 34 ! 36 SUBEXIT 38 ! 40 SUBEND 42 ! 44 Cal_common:SUB Cal_common 46 !************************************************************************ 48 !* This subroutine provides access to common variables. To do this, 50 !* type in 'CALL CAL_COMMON' from the keyboard. When through, press 52 !* continue. Some local variables are provided for convenience. 54 !* Since this subroutine provides no functionality and can be deleted if 56 !* desired. 58 !************************************************************************ 60 COM /Cal_buf_info/ Disp_choices$(*) 62 COM /Cal_data/ REAL Data_header(*),INTEGER Ovld_buffer(*) 64 COM /Cal_input_info/ INTEGER Num_inputs,Input_labels$(*) 66 COM /Cal_plot_xaxis/ REAL Start_freq,Stop_freq,INTEGER Num_freq_points 68 COM /Cal_error/ INTEGER Skip_c1_cal 70 INTEGER I,J,K,L,M,N 72 REAL A,B,C,D,E,F 74 DIM A$[200],B$[200],C$[200] 76 ! 78 PAUSE 80 SUBEXIT 82 SUBEND 84 ! 86 Appl_init:SUB Appl_init 88 !*********************************************************************** 90 !* This subroutine should be called before running the calibration 92 !* example for the first time or if the configuration has been changed. 94 !*********************************************************************** 96 COM /Cal_error/ INTEGER Skip_c1_cal 98 ! 100 !Get number of input modules and their names: 102 Cal_get_labels 104 ! 106 !Initialize for calibration pass C1. 108 IF NOT Skip_c1_cal THEN 110 Lib_c1_init 112 END IF 114 ! 116 SUBEXIT 118 SUBEND 120! 122 Appl_main:SUB Appl_main(REAL Init) 124 !*********************************************************************** 126 !* This subroutine does a simple calibration on all active input modules 128 !* and plots the results. It can be used as an example of how the 130 !* calibration routines can be accessed. 132 !*********************************************************************** 134 COM /Cal_data/ REAL Data_header(*),INTEGER Ovld_buffer(*) 136 COM /Cal_plot_xaxis/ REAL Start_freq,Stop_freq,INTEGER Num_freq_points 138 COM /Cal_error/ INTEGER Skip_c1_cal 140 INTEGER Do_a_cal,Display_changed,Valid_data,Buf_allocated,Replot 142 INTEGER Leave_me,Plot_erased,Axs_interruptus 144 ! 146 !Setup up initial softkeys: 148 GOSUB Cal_main_keys 150 ! 152 IF Init THEN CALL Appl_init 154 Cal_disp_spread 156 Start_freq=0. 158 Stop_freq=52223.9999 !Hz 160 Num_freq_points=256 162 Cal_update 164 ! 166 !Initialize the flags: 168 Do_a_cal=1 170 Display_changed=1 172 Valid_data=0 174 Buf_allocated=0 176 Replot=0 178 Plot_erased=0 180 Axs_interruptus=0 182 ! 184 REPEAT 186 IF Display_changed THEN 188 Cal_update 190 ! 192 !Allocate enough memory to do the requested plots: 194 IF Buf_allocated THEN 196 DEALLOCATE Plot_buffer(*) 198 Buf_allocated=0 200 END IF 202 ALLOCATE REAL Plot_buffer(1:FNDisp_num_plots,0:Num_freq_points-1) 204 Buf_allocated=1 206 IF Valid_data THEN 208 Disp_plot_axis 210 Axs_interruptus=FNUser_key_press 212 Cal_make_plot(Plot_buffer(*)) 214 Replot=1 216 Display_changed=0 218 Plot_erased=0 220 END IF 222 END IF 224 ! 226 IF Display_changed OR Plot_erased OR Axs_interruptus THEN 228 Disp_plot_axis 230 Axs_interruptus=FNUser_key_press 232 IF Valid_data THEN 234 Replot=1 236 END IF 238 Display_changed=0 240 Plot_erased=0 242 END IF 244 ! 246 IF Do_a_cal THEN 248 !Take away key 7 until calibration is complete: 250 ON KEY 7 LABEL "" GOSUB Cal_dummy 252 Valid_data=0 254 IF NOT Skip_c1_cal THEN 256 Lib_c1_do_cal(0) 258 END IF 260 Cal_make_plot(Plot_buffer(*)) 262 Do_a_cal=0 264 Valid_data=1 266 Replot=1 268 !Put up key 7 again: 270 ON KEY 7 LABEL FNUser_keylabel$("AGAIN") CALL User_key7isr 272 END IF 274 ! 276 IF Replot AND Valid_data THEN 278 Disp_plot_data(Plot_buffer(*),Data_header(*)) 280 Replot=0 282 END IF 284 ! 286 IF Valid_data THEN 288 DISP "Calibration Results" 290 END IF 292 ! 294 WHILE FNUser_key_press 296 DISP "" 298 Cal_do_main(Do_a_cal,Display_changed,Plot_erased,Leave_me,Axs_interruptus,Plot_buffer(*)) 300 END WHILE 302 ! 304 UNTIL Leave_me 306 DISP "" 308 SUBEXIT 310 ! 312 Cal_dummy:! 314 RETURN 316 ! 318 Cal_main_keys:! 320 ON KEY 0 LABEL "" GOSUB Cal_dummy 322 ON KEY 1 LABEL "" CALL User_key1isr 324 ON KEY 2 LABEL "" CALL User_key2isr 326 ON KEY 3 LABEL FNUser_keylabel$("DISPLAY SETUP") CALL User_key3isr 328 ON KEY 4 LABEL "" CALL User_key4isr 330 ON KEY 5 LABEL FNUser_keylabel$("HELP") CALL User_key5isr 332 ON KEY 6 LABEL FNUser_keylabel$("MARKER") CALL User_key6isr 334 ON KEY 7 LABEL "" GOSUB Cal_dummy 336 ON KEY 8 LABEL FNUser_keylabel$("EXIT") CALL User_key8isr 338 ON KEY 9 LABEL "" GOSUB Cal_dummy 340 RETURN 342 ! 344 SUBEND 346! 348 Cal_update:SUB Cal_update 350 !*********************************************************************** 352 !* This subroutine initializes the grids for the plot routines. This 354 !* routine should also be called if different plots have been selected 356 !* in the display spreadsheet. 358 !*********************************************************************** 360 COM /Cal_buf_info/ Disp_choices$(*) 362 COM /Cal_data/ REAL Data_header(*),INTEGER Ovld_buffer(*) 364 COM /Cal_plot_xaxis/ REAL Start_freq,Stop_freq,INTEGER Num_freq_points 366 COM /Cal_input_info/ INTEGER Num_inputs,Input_labels$(*) 368 COM /Cal_error/ INTEGER Skip_c1_cal 370 INTEGER Plot_num,Num_plots,Buffer_num 372 DIM Type$[20] 374 ! 376 !Allocate memory for plot setups: 378 Num_plots=FNDisp_num_plots 380 ALLOCATE REAL Plot_to_buf(1:Num_plots) 382 ALLOCATE X_units$(1:Num_plots)[10],Y_units$(1:Num_plots)[10] 384 ALLOCATE REAL Start_x(1:Num_plots),Per_bin_x(1:Num_plots) 386 ALLOCATE REAL Start_bin(1:Num_plots),Num_bins(1:Num_plots) 388 ALLOCATE REAL Y_def_max(1:Num_plots),Y_def_min(1:Num_plots) 390 ! 392 MAT Data_header= (0) 394 ! 396 !All x-axis units are usually the same: 398 MAT X_units$= ("Hz") 400 MAT Start_x= (Start_freq) 402 MAT Per_bin_x= ((Stop_freq-Start_freq)/(Num_freq_points-1)) 404 MAT Start_bin= (0.) !Start plotting at bin 0. 406 MAT Num_bins= (Num_freq_points) 408 ! 410 !Set up plot-specific stuff: 412 FOR Plot_num=1 TO Num_plots 414 Input_num=FNDisp_choice((Plot_num),1) 416 Plot_to_buf(Plot_num)=Plot_num 418 Type$=Disp_choices$(2,FNDisp_choice((Plot_num),2)) 420 IF Input_num>Num_inputs OR Skip_c1_cal THEN 422 !Digital filter correction plot requested: 424 SELECT Type$ 426 CASE "Phase" 428 Y_units$(Plot_num)="Deg" 430 Y_def_min(Plot_num)=-350 432 Y_def_max(Plot_num)=0 434 CASE ELSE 436 Y_units$(Plot_num)="dB" 438 Y_def_min(Plot_num)=-.35 440 Y_def_max(Plot_num)=.05 442 END SELECT 444 Start_x(Plot_num)=0. 446 Per_bin_x(Plot_num)=(2.^16)/256. 448 Start_bin(Plot_num)=0. !Start plotting at bin 0. 450 Num_bins(Plot_num)=256. 452 ! 454 ELSE 456 !Anti-alias filter cal plot requested: 458 SELECT Type$ 460 CASE "Phase" 462 Y_units$(Plot_num)="Deg" 464 Y_def_min(Plot_num)=-40 466 Y_def_max(Plot_num)=90 468 CASE ELSE 470 Y_units$(Plot_num)="dB" 472 Y_def_min(Plot_num)=-.4 474 Y_def_max(Plot_num)=.4 476 END SELECT 478 END IF 480 ! 482 Data_header(Plot_num,1)=0 !Data offset. 484 Data_header(Plot_num,2)=1. !Data scale factor. 486 NEXT Plot_num 488 ! 490 Disp_plot_set(Plot_to_buf(*),X_units$(*),Y_units$(*),Start_x(*),Per_bin_x(*),Start_bin(*),Num_bins(*),Y_def_max(*),Y_def_min(*)) 492 ! 494 SUBEXIT 496 SUBEND 498! 500 Cal_do_main:SUB Cal_do_main(INTEGER Do_a_cal,Disp_modified,Plot_erased,Leave_me,Axs_interruptus,REAL Plot_buffer(*)) 502 !********************************************************************* 504 !* This subroutine handles the main softkeys. 506 !* 508 !* The following variable is an input to this routine: 510 !* Axs_interruptus: true if axis generation was interrupted. 512 !* 514 !* The following variables are returned: 516 !* Do_a_cal: true if another calibration cycle is requested. 518 !* Disp_modified: true if a change requires a different display. 520 !* Plot_erased: true if plots were erased by a spreadsheet or ?. 522 !* Leave_me: true if exit key pressed. 524 !* Axs_interruptus: true if axis generation was interrupted. 526 !********************************************************************* 528 COM /Cal_data/ REAL Data_header(*),INTEGER Ovld_buffer(*) 530 REAL Dummy_any_mod,Dummy_major_mod 532 INTEGER Any_mod,Major_mod,Minor_mod,Key_num 534 ! 536 Key_num=FNUser_get_key 538 ! 540 SELECT Key_num 542 CASE 3 544 ON KEY Key_num LABEL FNUser_keylabel$("MAIN") CALL User_key3isr 546 CALL Disp_spread(Dummy_any_mod,Dummy_major_mod) 548 OFF KEY Key_num 550 Any_mod=Dummy_any_mod 552 Major_mod=Dummy_major_mod 554 Minor_mod=Any_mod AND NOT Major_mod 556 Disp_modified=Major_mod 558 ! 560 !Y-axis change only; don't need to re-compute plot data; 562 !just need to call Disp_plot_set again: 564 IF Minor_mod THEN CALL Cal_update 566 ! 568 Plot_erased=1 570 CASE 5 572 Cal_help 574 Plot_erased=1 576 CASE 6 578 ON KEY Key_num LABEL FNUser_keylabel$("MAIN") CALL User_key6isr 580 ON KEY 5 LABEL "" CALL Cal_do_naught 582 IF Axs_interruptus THEN 584 Disp_plot_axis 586 Axs_interruptus=FNUser_key_press 588 END IF 590 CALL Disp_do_mkr(Plot_buffer(*),Data_header(*),0) 592 OFF KEY Key_num 594 CASE 7 596 Do_a_cal=1 598 CASE 8 600 Leave_me=1 602 END SELECT 604 ! 606 IF FNUser_key_press THEN 608 IF FNUser_check_key=Key_num THEN Key_num=FNUser_get_key 610 END IF 612 ! 614 SUBEXIT 616 SUBEND 618! 620 Cal_make_plot:SUB Cal_make_plot(REAL Plot_buffer(*)) 622 !********************************************************************** 624 !* This subroutine creates a plot array and fills it with appropriate 626 !* data as selected in the display spreadsheet. 628 !********************************************************************** 630 COM /Cal_buf_info/ Disp_choices$(*) 632 COM /Cal_data/ REAL Data_header(*),INTEGER Ovld_buffer(*) 634 COM /Cal_plot_xaxis/ REAL Start_freq,Stop_freq,INTEGER Num_freq_points 636 COM /Cal_input_info/ INTEGER Num_inputs,Input_labels$(*) 638 COM /Cal_error/ INTEGER Skip_c1_cal 640 INTEGER Num_plots,Plot_num,I,Input_num,Zoom 642 REAL Span,Y 644 DIM Type$[20] 646 ! 648 Span=51200. !Hz 650 Zoom=0 !Zoom off. 652 ! 654 !Find out how many plot to do: 656 Num_plots=FNDisp_num_plots 658 ! 660 !Allocate a temporary array: 662 Df_block_size=INT((LGT(Num_freq_points)/LGT(2.))+.5) 664 ALLOCATE Temp(0:Num_freq_points-1) 666 ALLOCATE Df_temp(0:255) 668 ! 670 !Get the C1 calibration overload buffer array: 672 Lib_c1_gme_ovld(Ovld_buffer(*)) 674 ! 676 !Fill the plot buffer: 678 FOR Plot_num=1 TO Num_plots 680 Input_num=FNDisp_choice((Plot_num),1) 682 Type$=Disp_choices$(2,FNDisp_choice((Plot_num),2)) 684 ! 686 IF Input_num>Num_inputs OR Skip_c1_cal THEN 688 ! 690 !Digital filter correction plot requested: 692 SELECT Type$ 694 CASE "Phase" 696 DISP "Doing phase interpolation for digital filter . . ." 698 Lib_df_phase((Span),Df_temp(*),(Zoom)) 700 DISP "" 702 FOR I=0 TO 255 704 Plot_buffer(Plot_num,I)=Df_temp(I) 706 NEXT I 708 CASE ELSE 710 DISP "Doing magnitude interpolation for digital filter . . ." 712 Lib_df_mag((Span),Df_temp(*),(Zoom)) 714 DISP "" 716 FOR I=0 TO 255 718 Y=Df_temp(I) 720 IF Y<1.E-10 THEN Y=1.E-10 722 Plot_buffer(Plot_num,I)=10.*LGT(Y) 724 NEXT I 726 END SELECT 728 !Clear overflow flag if set for this plot: 730 Data_header(Plot_num,3)=0. 732 ELSE 734 ! 736 !Anti-alias filter cal plot requested: 738 SELECT Type$ 740 CASE "Phase" 742 DISP "Doing phase interpolation for "&Input_labels$(Input_num)&" . . ." 744 Lib_c1_make_pha(Temp(*),Start_freq,Stop_freq,Input_num) 746 DISP "" 748 FOR I=0 TO Num_freq_points-1 750 Plot_buffer(Plot_num,I)=Temp(I) 752 NEXT I 754 CASE ELSE 756 DISP "Doing magnitude interpolation for "&Input_labels$(Input_num)&" . . ." 758 Lib_c1_make_mag(Temp(*),Start_freq,Stop_freq,Input_num) 760 DISP "" 762 FOR I=0 TO Num_freq_points-1 764 Y=Temp(I) 766 IF Y<1.E-10 THEN Y=1.E-10 768 Plot_buffer(Plot_num,I)=10.*LGT(Y) 770 NEXT I 772 END SELECT 774 !Set overload flags so that plot routine knows to display 'OVLD': 776 Data_header(Plot_num,3)=BIT(Ovld_buffer(Input_num),7) 778 END IF 780 NEXT Plot_num 782 ! 784 SUBEXIT 786 SUBEND 788! 790 Cal_disp_spread:SUB Cal_disp_spread 792 !*********************************************************************** 794 !* This subroutine initializes the display spreadsheet for the 796 !* calibration example plot selection. 798 !*********************************************************************** 800 COM /Cal_buf_info/ Disp_choices$(*) 802 COM /Cal_input_info/ INTEGER Num_inputs,Input_labels$(*) 804 COM /Cal_error/ INTEGER Skip_c1_cal 806 ! 808 INTEGER Module_index,Num_cols 810 ! 812 !Setup display routines with input labels: 814 Num_cols=2 816 ALLOCATE Disp_titles$(1:Num_cols,1:2)[20] 818 ALLOCATE Disp_prompt$(1:Num_cols)[80] 820 ALLOCATE Disp_width(1:Num_cols) 822 ! 824 MAT Disp_titles$= ("") 826 Disp_titles$(1,1)="Correction" 828 Disp_titles$(1,2)="For" 830 Disp_titles$(2,1)="Trace" 832 Disp_titles$(2,2)="Type" 834 Disp_prompt$(1)="Enter module label or 'Digital Filter'" 836 Disp_prompt$(2)="Enter trace type: Magnitude or Phase" 838 Disp_width(1)=20 840 Disp_width(2)=11 842 MAT Disp_choices$= ("") 844 ! 846 IF Skip_c1_cal THEN 848 Disp_choices$(1,1)="Digital Filter" 850 ELSE 852 FOR Module_index=1 TO Num_inputs 854 Disp_choices$(1,Module_index)=Input_labels$(Module_index) 856 NEXT Module_index 858 Disp_choices$(1,Num_inputs+1)="Digital Filter" 860 END IF 862 ! 864 Disp_choices$(2,1)="Magnitude" 866 Disp_choices$(2,2)="Phase" 868 ! 870 !Initialize display spreadsheet: 872 Disp_spread_set(Disp_titles$(*),Disp_prompt$(*),Disp_width(*),Disp_choices$(*)) 874 ! 876 SUBEXIT 878 SUBEND 880 ! 882 Cal_get_labels:SUB Cal_get_labels 884 !*********************************************************************** 886 !* This subroutine sets up the Input_labels$ array with the names of all 888 !* the active input channels as set up in the configuration spreadsheet; 890 !* Num_inputs is set to the number of active inputs. 892 !*********************************************************************** 894 COM /Cal_input_info/ INTEGER Num_inputs,Input_labels$(*) 896 COM /Cal_error/ INTEGER Skip_c1_cal 898 INTEGER Num_sources 900 REAL Dummy 902 ! 904 Skip_c1_cal=0 906 ! 908 !Get number of SOURCE modules: 910 Cnfg_labels("ALL SOURCE",Input_labels$(*),Dummy) 912 Num_sources=Dummy 914 IF Num_sources<1 THEN 916 User_error("Warning: No active source modules found; can't calibrate AA filters.") 918 Skip_c1_cal=1 920 END IF 922 ! 924 !Get number of INPUT modules and their names: 926 Cnfg_labels("ALL INPUT",Input_labels$(*),Dummy) 928 Num_inputs=Dummy 930 IF Num_inputs<1 THEN 932 User_error("Warning: There are no active inputs to calibrate.") 934 Skip_c1_cal=1 936 END IF 938 ! 940 SUBEXIT 942 SUBEND 944 ! 946 Cal_do_naught:SUB Cal_do_naught 948 !********************************************************************* 950 !* This subroutine is self-documenting. 952 !********************************************************************* 954 SUBEXIT 956 SUBEND 958! 960 Dummy:SUB Dummy 962 SUBEND 964 ! 966 Cal_help:SUB Cal_help 968 !********************************************************************* 970 !* This subroutine prints out the 'help' message for the calibration 972 !* example. 974 !********************************************************************* 976 ! 978 DIM A$[160] 980 RESTORE Ds_help_page1 982 GOSUB Ds_show_page 984 RESTORE Ds_help_page2 986 GOSUB Ds_show_page 988 RESTORE Ds_help_page3 990 GOSUB Ds_show_page 992 RESTORE Ds_help_page4 994 GOSUB Ds_show_page 996 SUBEXIT 998 Ds_show_page:READ A$ 1000 User_clr_scr 1002 WHILE A$<>"***END***" 1004 OUTPUT CRT;A$ 1006 READ A$ 1008 END WHILE 1010 OUTPUT KBD USING "#,K";"ÿ#Yÿ<" 1012 INPUT "Type 'Y' to continue, anything else to leave...",A$ 1014 IF UPC$(A$[1;1])<>"Y" THEN SUBEXIT 1016 RETURN 1018 Ds_help_page1: ! 1020 DATA " Help for Calibration Example" 1022 DATA "" 1024 DATA "The Calibration examples uses the library calibration routines to" 1026 DATA "do a simple calibration of the 'null path' range of the input" 1028 DATA "channels. It then calls interpolation routines to generate " 1030 DATA "correction traces and plots them. The correction trace plots are" 1032 DATA "in large part the anti-alias filter responses. It is also possible" 1034 DATA "to show a plot of the digitial filter correction trace." 1036 DATA "" 1038 DATA " DISPLAY SETUP calls up the spreadsheet to select plots" 1040 DATA " HELP calls up this message" 1042 DATA " MARKER enters a mode that allows reading plot data values" 1044 DATA " AGAIN executes the calibration measurements again" 1046 DATA " EXIT leaves the Calibration Example" 1048 DATA "" 1050 DATA "***END***" 1052 Ds_help_page2: ! 1054 DATA " Help for Calibration Example - Page 2" 1056 DATA "" 1058 DATA "DISPLAY softkey and spreadsheet:" 1060 DATA " RESET sets plot selections and scaling to their defaults" 1062 DATA " PREV, NEXT can be used instead of keyboard entry" 1064 DATA "" 1066 DATA "This spreadsheet allows the number of plots and plot scaling" 1068 DATA "to be changed for the Calibration Example displays." 1070 DATA " CORRECTION FOR input channel label or 'Digital Filter'" 1072 DATA " TRACE TYPE magnitude or phase" 1074 DATA " Y AXIS MIN, MAX allows changes in Y axis scaling" 1076 DATA " RECALL TRACE 1,2 recalls stored traces (see MARKER softkey)" 1078 DATA "" 1080 DATA "The input channels are referred to by a label. To change the" 1082 DATA "default label assigments, press the EXIT softkey and press the" 1084 DATA "CNFG softkey to bring up the configuration spreadsheet." 1086 DATA "***END***" 1088 Ds_help_page3: ! 1090 DATA " Help for Calibration Example - Page 3" 1092 DATA "" 1094 DATA "MARKER softkey:" 1096 DATA "This softkeys puts a cursor up on the plots allowing the " 1098 DATA "direct readout of plot data values. It also calls up another" 1100 DATA "set of softkeys:" 1102 DATA "" 1104 DATA " MARKER TO X enter the x-axis value of the cursor" 1106 DATA " MARKER TO MIN puts the cursor on the smallest Y value" 1108 DATA " MARKER TO MAX puts the cursor on the largest Y value" 1110 DATA " STORE TRACE stores the trace the cursor is on to a file" 1112 DATA " (Recall them with the DISPLAY SETUP spreadsheet)" 1114 DATA " MAIN returns to plot level of Digital Scope" 1116 DATA " PREVIOUS, NEXT TRACE moves cursor to the desired trace" 1118 DATA "" 1120 DATA "Use the arrow keys, knob or mouse to move the cursor around." 1122 DATA "***END***" 1124 Ds_help_page4: ! 1126 DATA " Help for Calibration Example - Page 4" 1128 DATA "" 1130 DATA "EXIT softkey:" 1132 DATA "Use this softkey to leave the Calibration Example before running" 1134 DATA "another application." 1136 DATA "" 1138 DATA "Also, use this softkey to gain access to the CNFG spreadsheet to" 1140 DATA "change the labels associated with any of the hardware modules." 1142 DATA "***END***" 1144 SUBEND 1146 Meas_meas:SUB Meas_meas 1148 !********************************************************************* 1150 !* Calibration example has no measurement spreadsheet. This 1152 !* subroutine is still needed for the application loader, though. 1154 !********************************************************************* 1156 ! 1158 SUBEXIT 1160 SUBEND 1162! 1164 Meas_init:SUB Meas_init 1166 !********************************************************************* 1168 !* Calibration example has no measurement spreadsheet. This 1170 !* subroutine is still needed for the application loader, though. 1172 !********************************************************************* 1174 ! 1176 SUBEXIT 1178 SUBEND 1180! 1182 Meas_save:SUB Meas_save(@File,REAL Ok) 1184 !********************************************************************* 1186 !* Calibration example has no measurement spreadsheet. This 1188 !* subroutine is still needed for the application loader, though. 1190 !********************************************************************* 1192 ! 1194 SUBEXIT 1196 SUBEND 1198! 1200 Meas_load:SUB Meas_load(@File,REAL Ok) 1202 !********************************************************************* 1204 !* Calibration example has no measurement spreadsheet. This 1206 !* subroutine is still needed for the application loader, though. 1208 !********************************************************************* 1210 ! 1212 SUBEXIT 1214 SUBEND 1216!