IMD 1.16: 29/05/2007 18:42:38 FOGCPM.071 -06-00 86 --FOGCPM0713-DPLOT BASSCOTT DOC CGPLOT BAS= PLOT3 BAS4BCSQUASHBAS.BCSQUASHCOM !"#$%&'()*+,-.BCSQUASHCOM/0-CPM071 DOCBCSQUASHDOC)123456INVTRIG BAS7INVTRIG DSC8MULTREG BAS9:;<=>?@ABCDEFGHMULTREG BASIJMULTREG DOC%KLMNOSCTOVC BAS"PQRSTSCTOVC DOC UVWXVCTOSC BAS%YZ[\]VCTOSC DOC^_`aVMAP2 BASybcdefghijklmnopqVMAP2 COMrstuvwxyz{|}~VMAP2 COMvVMAP2 DOC6LISTINGSBASkLISTINGSDSC This is the release date of the disk. VCTOSC BAS YVCTOSC DOC ^ VMAP2 BAS b<VMAP2 COM r{MAP2 COM ;VMAP2 DOC LISTINGSBAS 5LISTINGSDSC MULTREG .BAS EE 8E 18176 142 MULTREG .DOC C8 5D 4736 37 SCTOVC .BAS 4F 6A 4352 34 SCTOVC .DOC 2A C1 4096 32 VCTOSC .BAS 55 76 4736 37 VCTOSC .DOC 36 62 3328 26 VMAP2 .BAS 9E 40 15488 121 VMAP2 .COM BD AD 31488 246 VMAP2 .DOC 4C 22 6912 54 LISTINGS.BAS F5 FA 13696 107 LISTINGS.DSC 93 CF 384 3 This is the disk name. 10 REM PROGRAM TO PRODUCE 3D PLOTS ON RADIO SHACK 20 REM CGP-115 PLOTTERS. ASSUMES PLOTTER IS ON 30 REM SERIAL PORT. TRY VALUES OF 50,50,900 AND 40 REM 1.05 FOR X,Y STEPS, CUTOFF AND MULTILPIER 50 REM FOR INITIAL RUNS. ANSWER "Y" TO OTHER 60 REM QUESTIONS....FUNCTION PLOTTER IS IN LINES 70 REM 500 TO 530 AND MAY BE CHANGED FOR OTHER SHAPES 80 REM Bob Scott May 83 90 DIM Y(2401) 100 PRINT "PRESS RETURN WHEN PLOTTER READY":INPUT AZ$ 110 POKE 3,(PEEK(3) AND 63) OR 64 120 K1=180/3.1415927# 130 C1=COS(30/K1):C2=SIN(30/K1):C3=COS(150/K1):C4=SIN(150/K1) 140 LPRINT CHR$(18):LPRINT "M240,-240" 150 LPRINT "I" 160 PRINT CHR$(26);"ENTER X,Y STEPS,Y-CUTOFF,Y-AXIS MULTIPLIER: " 170 INPUT F,G,J,H 180 PRINT "TOP VIEW (Y/N)" ; 190 INPUT A$:IF A$="N" THEN W=1 ELSE W=-1 200 PRINT "BLANKING (Y/N) "; 210 INPUT A$:IF A$="N" THEN V=-1 ELSE V=1 220 FOR A=1 TO 2401:Y(A)=-1200*V:NEXT 230 FOR Z=-600 TO 600 STEP G 240 C=1 250 FOR X=-600 TO 600 STEP G 260 GOSUB 500 270 GOSUB 550 280 C=2 290 IF S>=0 THEN 310 300 C=-2 310 NEXT X 320 NEXT Z 330 FOR A=1 TO 2401:Y(A)=-1200*V:NEXT 340 FOR X=-600 TO 600 STEP G 350 C=1 360 FOR Z=-600 TO 600 STEP F 370 GOSUB 500 380 GOSUB 550 390 C=2 400 IF S>=0 THEN 420 410 C=-2 420 NEXT Z 430 NEXT X 440 LPRINT "M-240,-200" 450 LPRINT CHR$(17) 460 LLIST 500-520 470 PRINT:PRINT:PRINT "DONE" 480 POKE 3,(PEEK(3) AND 63) OR 128 490 STOP 500 R=SQR(X*X+Z*Z) 510 DR=R/K1 520 Y1=SIN(DR)/DR*600*H 530 IF Y1>J THEN Y1=J 540 RETURN 550 A=0:B=0:S=1 560 A=C1*X+A 570 B=C2*X+B 580 A=C3*Z+A 590 B=C4*Z+B 600 B=Y1+B 610 A=INT(A) 620 B=INT(B) 630 IF A<-1200 OR B<-1200 OR A>1200 OR B>1200 THEN 850 640 IF I<0 THEN 740 650 IF Y(A+1201)<=B THEN 730 660 C=1 670 S=-1 680 RETURN 690 IF Y(A+1201)=>B THEN 730 700 C=1 710 S=-1 720 RETURN 730 Y(A+1201)=B 740 IF C=1 OR C=-2 THEN 790 750 XX=A/5:YY=B/5 760 PRINT USING "X = ####.## Y = ####.##";XX,YY 770 LPRINT "D";XX;",";YY 780 RETURN 790 XX=A/5:YY=B/5 800 PRINT CHR$(&H1B);CHR$(&H29); 810 PRINT USING "X = ####.## Y = ####.##";XX,YY; 820 PRINT CHR$(&H1B);CHR$(&H28) 830 LPRINT "M";XX;",";YY 840 RETURN 850 C=1 860 S=-1 870 RETURN  Y = ####.##";XX,YY; 820 PRINT CHR$(&H1B);CHR$(&H28) 830 LPRINT "M"; C=-2 420 NEXT Z 430 NEXT X 440 LPRINT "M-240,-200" 450 LPRINT CHR$(17) 460 LLIST 500-520 470 PRINT:PRINT:PRINT "DONE" 480 POKE 3,(PEEK(3) AND 63) OR 128 490 STOP 500 R=SQR(X*X+Z*Z) 510 DR=R/K1 520 Y1=SIN(DR)/DR*600*H 530 IF Y1>J THEN Y1=J 540 RETURN 550 A=0:B=0:S=1 560 A=C1*X+A 570 B=C2*X+B 580 A=C3*Z+A 590 B=C4*Z+B 600 B=Y1+B 610 A=INT(A) 620 B=INT(B) 630 IF A<-1200 OR B<-1200 OR A>1200 OR B>1200 THEN 850 640 IF I<0 THEN 740 650 IF Y(A+1201)<=B THEN 730 660 C=1 670 S=-1 680 RETURN 690 IF Y(A+1201)=>B THEN 730 700 C=1 710 S=-1 720 RETURN 730 Y(A+1201)=B 740 IF C=1 OR C=-2 THEN 790 750 XX=A/5:YY=B/5 760 PRINT USING "X = ####.## Y = ####.##";XX,YY 770 LPRINT "D";XX;",";YY 780 RETURN 790 XX=A/5:YY=B/5 800 PRINT Documentation of Programs Submitted to FOG by Bob Scott The following programs were written by me to drive my Radio Shack CGP-115 plotter...most have an IOBYTE Poke to set the BASIC printer to the Serial Port. If you have yours hooked up to the parallel port, delete the (POKE 3,whatever) statement near the start of the program. 3-DPLOT.BAS: Produces a "3D" plot on the plotter. It is set for a function similar to sin(x)/x, but can be easily changed for other functions. See the January 83 FOGHORN for an example of the output (my review of the CGP-115, pg 18) PLOT3.BAS: Allows users to plot data on a nice coordinate grid, and label axes, number axes, and add a legend. Coordinate grid can be EDGE (left side and bottom of the plot) or ZERO CENTER (a crosshair type of axis, useful for +/- type data. Line types can be selected from solid (TYPE 0) to a coarse dash line (TYPE 15). Multiple data curves can be plotted on a single set of axes, each of differing color and type. Also individual points may be plotted, and data amy be read from a file, or entered from the keyboard. Program is self- prompting. The prompts may be a bit cryptic, but a couple of trial runs should familiarize you with the operation. Assumes plotter is set up for 40 Char/Line default. If using a data file, have X,Y data pairs separated by commas on each line. (WordStar N option recommended for creating these.) Example: 2,3 4,5 Etc. Remember to start in column one, and make sure you don't have a blank line at the end of the file. Although progrm asks for number of points, it won't crash if you specify too many when doing a file input. CGPLOT.BAS: A modification of a general purpose polynomial curve fit program from the FOG library. It now produces a pretty plot of the function in red, and your data points in green. Handy for a quick visual check of goodness-of-fit or inter- polating data. The following program is not CGP-115 plotter related. INVTRIG.BAS: Is a short MBASIC subroutine I wrote to perform arccosine and arcsine functions, since MBASIC dosen't support such things. Just tack it on to your program that needs it. See the listing for calling instructions. Enjoy! Bob Scott Silicon Valley Chapter FOG July 1983 eparated by commas on each line. (WordStar N option recommended for creating these.) Example: 2,3 4,5 Etc. Remember to start in column one, and make sure you don't have a blank line at the end of the file. Although progrm asks for number of points, it won't crash if you specify too many when doing a file input. CGPLOT.BAS: A modification of a general purpose polynomial curve fit program from the FOG library. It now produces a pretty plot of the function in red, and your data points in green. Handy for a quick visual check of goodness-of-fit or inter- polating data. The fo10 REM 20 REM POLYNOMIAL CURVFIT 30 REM By Ralph Johnson 1-1982 40 REM 50 REM MODIFIED BY BOB SCOTT MAR 1983 60 REM TO DRIVE THE RADIO SHACK CGP-115 70 REM PRINTER/PLOTTER. PROGRAM NOW 80 REM PRIVIDES GRAPHIC CURVE OUTPUT 90 REM AND PLOTS INPUT DATA points. 100 PRINT "PRESS RETURN WHEN PLOTTER READY":INPUT AZ$ 101 POKE 3,(PEEK(3) AND 63) OR 64 110 REM MAIN PROGRAM 120 GOSUB 260 REM SET UP ARRAYS 130 GOSUB 390 REM INPUT DATA 140 GOSUB 680 REM CLEAR AND LOAD ARRAYS 150 GOSUB 870 REM SIMUL. EQS. SOLUTION 160 GOSUB 1340 REM SUM OF ERRORS SQRD 170 GOSUB 1470 REM OUTPUT 180 GOTO 1750 REM DECISIONS 190 GOSUB 1890 REM EVALUATE 200 GOSUB 2220 REM PLOT 210 GOTO 1750 220 REM END MAIN 230 REM 240 REM SET UP ARRAY MEMORY 250 REM 260 DIM A(20,20),B(20),C(20),X(20),Y(20) 270 DIM XX(120),YY(120),Q(45),YZ(20) 280 REM GREETING 290 PRINT CHR$(&H1A) 300 PRINT "******* POLYNOMIAL CURVE FIT *******" 310 PRINT:PRINT 320 PRINT" THIS PROGRAM PERFORMS A LEAST SQUARED" 330 PRINT"CURVE FIT FOR A GENERAL POLYNOMIAL IN X AND Y" 340 PRINT"IT WILL ALSO EVALUATE AND PLOT THE FUNCTION" 350 PRINT"IF YOU WISH" 360 PRINT:PRINT:PRINT 370 RETURN 380 REM END SETUP MEMORY 390 REM INPUT SUBROUTINE 400 REM RESET ARRAYS 410 FOR I%=0 TO 20 420 B(I%)=0 430 Q(I%)=0 440 NEXT I% 450 IF Z% =2 THEN GOTO 570 460 INPUT"HOW MANY DATA PTS. ARE THERE";DATAPTS% 470 PRINT CHR$(&H1A) 480 FOR I%=1 TO 5 490 PRINT 500 NEXT I% 510 PRINT"NOW INPUT THE DATA.":PRINT:PRINT 520 FOR I%=1 TO DATAPTS% 530 PRINT"X(";I%;"), Y(";I%;")"; 540 INPUT X(I%),Y(I%) 550 NEXT I% 560 REM 570 INPUT"WHAT ORDER FIT WOULD YOU LIKE";ORDER% 580 N%=ORDER%+1 590 REM 600 REM VALIDITY CHECK 610 REM 620 IF ORDER%>=DATAPTS% THEN PRINT"NOT ENOUGH DATA FOR THAT ORDER FIT": GOTO 570 630 PRINT CHR$(&H1A) 640 RETURN 650 REM END INPUT 660 REM MATRIX LOAD 670 REM GENERATE VALUES FOR ARRAY 680 FOR I%=0 TO ORDER%*2 690 FOR J%=1 TO DATAPTS% 700 Q(I%)=X(J%)^I%+Q(I%) 710 NEXT J% 720 Q(I%)=2*Q(I%) 730 NEXT I% 740 REM LOAD 750 FOR I%=0 TO ORDER% 760 FOR J%=0 TO ORDER% 770 A(I%+1,J%+1)=Q(I%+J%) 780 NEXT J% 790 NEXT I% 800 FOR I%=0 TO ORDER% 810 FOR J%=1 TO DATAPTS% 820 B(I%+1)=2*X(J%)^I%*Y(J%)+B(I%+1) 830 NEXT J% 840 NEXT I% 850 RETURN 860 REM END MATRIX LOAD 870 REM SIMULTANEOUS EQU SOLN 880 FLAG%=0 890 IF N%<>0 THEN GOTO 930 900 IF A(1,1)=0 THEN FLAG%=1: RETURN 910 X(1)=B(1)/A(1,1) 920 RETURN 930 M%=N%-1 940 FOR I%=1 TO M% 950 H=ABS(A(I%,I%)) 960 L%=I% 970 I1%=I%+1 980 FOR J%=I1% TO N% 990 IF ABS(A(J%,I%)) < H THEN 1020 1000 H=ABS(A(J%,I%)) 1010 L%=J% 1020 NEXT J% 1030 IF H=0 THEN FLAG%=1: RETURN 1040 IF L%=I% THEN 1130 1050 FOR J%=1 TO N% 1060 G=A(L%,J%) 1070 A(L%,J%)=A(I%,J%) 1080 A(I%,J%)=G 1090 NEXT J% 1100 G=B(L%) 1110 B(L%)=B(I%) 1120 B(I%)=G 1130 FOR J%=I1% TO N% 1140 T=A(J%,I%)/A(I%,I%) 1150 FOR K%=I1% TO N% 1160 A(J%,K%)=A(J%,K%)-T*A(I%,K%) 1170 NEXT K% 1180 B(J%)=B(J%)-T*B(I%) 1190 NEXT J% 1200 NEXT I% 1210 IF A(N%,N%)=0 THEN FLAG%=1: RETURN 1220 C(N%)=B(N%)/A(N%,N%) 1230 I%=N%-1 1240 S=0 1250 I1%=I%+1 1260 FOR J%=I1% TO N% 1270 S=S+A(I%,J%)*C(J%) 1280 NEXT J% 1290 C(I%)=(B(I%)-S)/A(I%,I%) 1300 I%=I%-1 1310 IF I%>0 THEN 1240 1320 RETURN 1330 REM END SIMULTANEOUS EQU 1340 REM SUM OF ERRORS SQRD 1350 FOR I%=1 TO DATAPTS% 1360 YZ(I%)=0 1370 NEXT I% 1380 E=0 1390 FOR I%=1 TO DATAPTS% 1400 FOR J%=1 TO N% 1410 YZ(I%)=C(J%)*X(I%)^(J%-1)+YZ(I%) 1420 NEXT J% 1430 E=E+(Y(I%)-YZ(I%))^2 1440 NEXT I% 1450 RETURN 1460 REM END SUM ERRORS SQRD 1470 REM OUTPUT STATEMENTS 1480 IF FLAG%=1 THEN PRINT "AMBIGUOUS DATA. NO SOLUTION FOUND":RETURN 1490 PRINT"LIST OF COEFFICIENTS":PRINT 1500 PRINT"POWER OF X","COEFFICIENT":PRINT 1510 FOR I%=N% TO 1 STEP -1 1520 PRINT "X^";I%-1,C(I%) 1530 NEXT I% 1540 PRINT "SUM OF ERRORS SQRD=";E 1550 PRINT 1560 FOR I%=1 TO DATAPTS% 1570 PRINT"X=";X(I%),"Y=";YZ(I%),"DESIRED Y:";Y(I%) 1580 NEXT I% 1590 REM Printer 1600 PRINT:PRINT 1610 INPUT "Do you want a print out of this (y/n)";PR$ 1620 IF PR$<>"y" AND PR$<>"Y" THEN GOTO 1740 1630 LPRINT "LIST OF COEFFICIENTS": LPRINT " " 1640 LPRINT " ": LPRINT "POWER OF X", "COEFFICIENT": LPRINT" " 1650 FOR I%=N% TO 1 STEP -1 1660 LPRINT "X^";I%-1,C(I%) 1670 NEXT I% 1680 LPRINT : LPRINT "SUM OF ERRORS SQRD=";E 1690 LPRINT" " 1700 FOR I%=1 TO DATAPTS% 1710 LPRINT "x=";X(I%),"y=";YZ(I%):LPRINT " ","Desired y:";Y(I%) 1720 NEXT I% 1730 RETURN 1740 REM end output 1750 REM OPTIONS 1760 REM 1770 INPUT"HIT ENTER TO CONTINUE";A$ 1780 PRINT CHR$(&H1A): PRINT: PRINT 1790 PRINT"Enter the desired option": PRINT: PRINT 1800 PRINT" 1)EVALUATE THE FUNCTION" 1810 PRINT" 2)TRY A DIFFERENT ORDER FIT" 1820 PRINT" 3)TRY A NEW DATA SET" 1830 PRINT" 4)EXIT THE PROGRAM" 1840 PRINT" 5)PLOT THE FUNCTION VS DATA" 1850 PRINT:INPUT"Enter your choice";Z% 1860 ON Z% GOTO 190,130,130,1870,2220 1870 POKE 3,(PEEK(3) AND 63) OR 128 1871 STOP 1880 REM END OPTIONS 1890 REM EVALUATE 1900 INPUT"SELECT THE RANGE YOU WANT TO EVALUATE min,max";XINIT,XFIN 1910 INCR=(XFIN-XINIT)/120 1920 ZO=0 1930 FOR I%=0 TO 120 1940 XX(I%)=XINIT+INCR*I% 1950 YY(I%)=0 1960 FOR J%=1 TO N% 1970 YY(I%)=C(J%)*XX(I%)^(J%-1)+YY(I%) 1980 NEXT J% 1990 IF I%=0 THEN YMIN=YY(0):YMAX=YMIN 2000 IF YY(I%)>YMAX THEN YMAX=YY(I%) 2010 IF YY(I%)"Y" AND PR$<>"y" THEN RETURN 2140 LPRINT"X and Y values" : LPRINT " " 2150 LPRINT"X","Y","X","Y" 2160 FOR I%=0 TO 60 STEP 6 2170 LPRINT XX(I%),YY(I%),XX(I%+60),YY(I%+60) 2180 NEXT I% 2190 LPRINT" " 2200 LPRINT "Y MIN=";YMIN,"Y MAX=";YMAX 2210 RETURN 2220 REM PLOT 2230 INPUT "PLOTTER READY ";AN$ 2240 IF AN$="N" OR AN$="n" THEN RETURN 2250 PRINT CHR$(26);"****** PLOTTING ******" 2260 XMAX=-9E+25 2270 YMAX=-9E+25 2280 XMIN=9E+25 2290 YMIN=9E+25 2300 FOR I%=1 TO DATAPTS% 2310 IF X(I%)>XMAX THEN XMAX=X(I%) 2320 IF Y(I%)>YMAX THEN YMAX=Y(I%) 2330 IF X(I%)NTIC THEN NTIC=ABS(YMAX) 2730 LPRINT "C1" 2740 LPRINT "M";480-(LEN(STR$(XMAX))*15);",";10 2750 LPRINT "P";XMAX 2760 LPRINT "M10,480" 2770 LPRINT "P";YMAX 2780 LPRINT "H" 2785 LPRINT "C0" 2790 LPRINT "A" 2800 LPRINT 2810 LPRINT "X TIC INTERVAL=";XMAX/24 2820 LPRINT "Y TIC INTERVAL=";YMAX/24 2830 LPRINT "ORIGIN=";XMIN;",";YMIN 2840 GOTO 1780  LPRINT "X TIC INTERV.99 2480 XSCALE=480/(XMAX+XOFF)*.99 2490 SCALE=YSCALE 2500 IF XSCALE50 THEN NPOINT=50 380 : PRINT CHR$(26) 390 : PRINT "SELECT PLOT COLOR:" 400 : PRINT " 0 - BLACK" 410 : PRINT " 1 - BLUE " 420 : PRINT " 2 - GREEN" 430 : PRINT " 3 - RED " 440 : INPUT IPEN 450 : PRINT:PRINT 460 : INPUT "LINE TYPE (0-15)"; ILINE 470 : REM 480 : REM 490 : REM ALL USER PARAMETERS INPUT 500 : REM NOW GET THE DATA 510 : REM 520 : REM 530 : PRINT CHR$(26) 540 : INPUT "ENTER DATA FROM KEYBOARD? ";AN$ 550 : IF AN$<>"N" THEN GOTO 630 560 : INPUT "DATA FILE NAME? ";FI$ 570 : OPEN "I",1,FI$ 580 : FOR I=1 TO NPOINT 590 : IF EOF(1) THEN NPOINT=I-1: GOTO 680 600 : INPUT #1, D(I,1),D(I,2) 610 : NEXT I 620 : GOTO 680 630 : PRINT "INPUT DATA IN X,Y ORDER, SEPARATED BY A COMMA" 640 : FOR I=1 TO NPOINT 650 : PRINT "DATA POINT ";I; 660 : INPUT D (I,1),D (I,2) 670 : NEXT I 680 : PRINT CHR$(7);CHR$(26):IF ISECOND THEN GOTO 1440 690 : PRINT "PLOTTING....PLEASE WAIT" 700 : LPRINT:LPRINT 710 : LPRINT:LPRINT 720 : K=(40-LEN(TI$))/2 'SET UP SPACES 730 : LPRINT SPACE$(K);LEFT$(TI$,40) 'PRINT CENTERED TITLE 740 : LPRINT CHR$(18) 'TOGGLE TO GRAPHICS MODE 750 : LPRINT "R0,-450" 760 : LPRINT "R20,0" 'LEFT MARGIN FOR Y-AXIS LABEL 770 : LPRINT "I" 'SET ORIGIN HERE 780 : LPRINT "Q3" 'SET VERTICAL PRINT 790 : LPRINT "H" 800 : K=(40-LEN(VT$))/2 810 : LPRINT "P";SPACE$(K);VT$ 'PRINT Y-AXIS LABEL 820 : LPRINT "H" 830 : LPRINT "Q0" 'SET HORIZONTAL PRT 840 : LPRINT "M-10,-40" 850 : K=(40-LEN(HT$))/2 860 : LPRINT "P";SPACE$(K);LEFT$(HT$,40) 'PRINT X-AXIS LABEL 870 : LPRINT "H" 880 : PRINT "COMPUTING SCALING FACTORS" 890 : REM 900 : REM 910 : XSCALE=460/ABS(XMAX-XMIN) 920 : YSCALE=460/ABS(YMAX-YMIN) 930 : REM 940 : REM DRAW COORDINATE AXIS REQUESTED 950 : REM 960 : REM ZERO CENTER AXIS 970 : REM 980 : IF IEDGE OR XMIN>0 AND YMIN>0 THEN GOTO 1210 990 : LPRINT "M";ABS(XMIN)*XSCALE;",0" 1000 : LPRINT "X0,46,10" 1010 : LPRINT "M0,";ABS(YMIN)*YSCALE 1020 : LPRINT "X1,46,10" 1030 : LPRINT "H" 1040 : LPRINT "X0,460,1" 1050 : LPRINT "H" 1060 : LPRINT "X1,460,1" 1070 : LPRINT "M";ABS(XMIN)*XSCALE+5;",0" 1080 : LPRINT "S0" 1090 : FOR I=0 TO 10 1100 : LPRINT "P";YMIN+(YMAX-YMIN)/10*I 1110 : LPRINT "M";ABS(XMIN)*XSCALE+5;",";46*(I+1) 1120 : NEXT I 1130 : LPRINT "M0,";ABS(YMIN)*YSCALE-10 1140 : FOR I=0 TO 10 1150 : LPRINT "P";XMIN+(XMAX-XMIN)/10*I 1160 : LPRINT "M";46*(I+1)-15;",";ABS(YMIN)*YSCALE-10 1170 : NEXT I 1180 : XOFF=-XMIN*XSCALE 1190 : YOFF=-YMIN*YSCALE 1200 : GOTO 1430 1210 : REM 1220 : REM EDGE AXIS 1230 : REM 1240 : LPRINT "X0,46,10" 1250 : LPRINT "H" 1260 : LPRINT "X1,46,10" 1270 : LPRINT "H" 1280 : LPRINT "M5,0" 1290 : LPRINT "S0" 1300 : FOR I=0 TO 10 1310 : LPRINT "P";YMIN+(YMAX-YMIN)/10*I 1320 : LPRINT "M5,";46*(I+1) 1330 : NEXT I 1340 : LPRINT "H" 1350 : LPRINT "M-10,-20" 1360 : FOR I=0 TO 10 1370 : LPRINT "P";XMIN+(XMAX-XMIN)/10*I 1380 : LPRINT "M";46*(I+1)-10;",-20" 1390 : NEXT I 1400 : XOFF=-XMIN*XSCALE 1410 : YOFF=-YMIN*YSCALE 1420 : REM 1430 : REM NOW READY TO PLOT DATA POINTS AS SPECIFIED 1440 : REM 1450 : LPRINT "C";IPEN 1460 : CLOSE 1470 : LPRINT "L";ILINE 1480 : LPRINT "M";D(1,1)*XSCALE+XOFF;",";D(1,2)*YSCALE+YOFF 1490 : LPRINT "S1" 1500 : IF LPLOT <> 1 THEN LPRINT "P*" 1510 : FOR I=2 TO NPOINT 1520 : XX=D(I,1)*XSCALE+XOFF 1530 : YY=D(I,2)*YSCALE+YOFF 1540 : IF LPLOT THEN LPRINT "D";XX;",";YY :GOTO 1560 1550 : LPRINT "M";XX;",";YY : LPRINT "P*" 1560 : NEXT I 1570 : LPRINT "H" 1580 : REM 1590 : REM CHECK FOR MORE DATA 1600 : REM 1610 : PRINT CHR$(26):ISECOND=1 1620 : INPUT "ANOTHER CURVE ON THIS PLOT? (Y/N)"; AN$ 1630 : IF AN$="Y" THEN GOTO 340 1640 : INPUT "OVERLAY A REFERENCE GRID? (Y/N)";AN$ 1650 : IF AN$<>"Y" THEN GOTO 1820 1660 : INPUT "GRID DENSITY? (1-40, 10 NORMAL)";IGRID 1670 : INPUT "GRID LINE TYPE (0-15)";IGLIN 1680 : LPRINT "L";IGLIN:LPRINT "C0" 1690 : LPRINT "H":IDIR=1 1700 : FOR I=1 TO IGRID 1710 : LPRINT "R";460/IGRID;",0" 1720 : LPRINT "J0,";465*IDIR 1730 : IDIR=IDIR*-1 1740 : NEXT I 1750 : LPRINT "H":IDIR=1 1760 : FOR I=1 TO IGRID 1770 : LPRINT "R0,";460/IGRID 1780 : LPRINT "J";465*IDIR;",0" 1790 : IDIR=IDIR*-1 1800 : NEXT I 1810 : LPRINT "L";ILINE 1820 : REM 1830 : REM PRINT FINAL DATA 1840 : REM 1850 : LPRINT "S1" 'LARGE LETTERS 1860 : LPRINT "M0,-50" 'KICK OUT SOME PAPER 1870 : LPRINT "A" 'OUT OF GRAPHICS MODE 1880 : REM 1890 : REM GET USER LINE LABELS 1900 : REM 1910 : INPUT "FURTHER LABELING ? (Y/N)"; AN$ 1920 : IF AN$="N" THEN GOTO 2090 1930 : PRINT CHR$(26) 1940 : PRINT "SELECT COLOR" 1950 : PRINT " 0 BLACK" 1960 : PRINT " 1 BLUE " 1970 : PRINT " 2 GREEN" 1980 : PRINT " 3 RED " 1990 : PRINT :PRINT 2000 : INPUT IPEN 2010 : LPRINT CHR$(18) 2020 : LPRINT "C";IPEN 2030 : LPRINT "A"; 2040 : INPUT "INPUT LABEL";LA$ 2050 : K=(40-LEN(LA$))/2 2060 : LPRINT SPACE$(K);LEFT$(LA$,40) 2070 : GOTO 1910 2080 : REM 2090 : REM CLOSE OUT 2100 : REM 2110 : LPRINT CHR$(18) 2120 : LPRINT "C0" 2130 : LPRINT "A" 2140 : POKE 3,128 2150 : END : REM CLOSE OUT 2100 : REM 2110 : LPRINT CHR$(18) 2120 : LPRINT "C0" 2130 : LPRINT "A: IDIR=IDIR*-1 1800 : NEXT I 1810 : LPRINT "L";ILINE 1820 : REM 1830 : REM PRINT FINAL DATA 1840 : REM 1850 : LPRINT "S1" 'LARGE LETTERS 1860 : LPRINT "M0,-50" 'KICK OUT SOME PAPER 1870 : LPRINT "A" 'OUT OF GRAPHICS MODE 1880 : REM 1890 : REM GET USER LINE LABELS 1900 : REM 1910 : INPUT "FURTHER LABELING ? (Y/N)"; AN$ 1920 : IF AN$="N" THEN GOTO 2090 1930 : PRINT CHR$(26) 1940 : PRINT "SELECT COLOR" 1950 : PRINT " 0 BLACK" 1960 : PRINT " 1 BLUE " 197010 REM BCSQUASH.BAS Version 1.0 10/28/83 15 ' COPYRIGHT (C) 1983 BY GREGORY C. DAHL 20 ' THIS PROGRAM REMOVES FROM A BASIC PROGRAM 30 ' ALL COMMENTS BEGINNING WITH A SINGLE QUOTE 40 ' AND MOST EXTRANEOUS BLANKS. 45 ' THE BASIC PROGRAM MUST HAVE BEEN SAVED IN 48 ' ASCII, I.E., SAVE "PROGRAM",A 50 ' 55 ' DETAILED INSTRUCTIONS ARE GIVEN IN BCSQUASH.DOC 60 ' 70 DEFINT A-Z 100 COMP = 0 ' FLAG FOR COMPILED VERSION 210 IF COMP THEN N=350 ELSE N= 80 ' BLINK SPEED 215 WIDTH 52 220 PRINT CHR$(&H1A); 230 PRINT TAB(16)"BCSQUASH (ver. 1.0)":PRINT 240 PRINT TAB(7)"COPYRIGHT (C) 1983 BY GREGORY C. DAHL 250 IF COMP THEN PRINT TAB(6)CHR$(&H1B)CHR$(&H29)"PORTIONS COPYRIGHTED BY MICROSOFT, 1981"CHR$(&H1B)CHR$(&H28) ELSE PRINT 260 PRINT" This program is "CHR$(&H1B)CHR$(&H6C)"USER SUPPORTED SOFTWARE."CHR$(&H1B)CHR$(&H6D)" If you 270 PRINT" find it useful and wish to encourage the develop- 280 PRINT" ment of new programs, you are invited to send a 290 PRINT" contribution to the author: 300 PRINT TAB(17) "Gregory C. Dahl 310 PRINT TAB(17)"4050 Arroyo Trail 320 PRINT TAB(17)"Carmel, CA 93923 330 PRINT" All contributors sending $10 or more will receive 340 PRINT" a diskette with the latest version of this program 350 PRINT" and its documentation, as well as other programs 360 PRINT" by the same author. Contribute as much as you feel 370 PRINT" the program is worth to you, and send your comments 380 PRINT" too! Be sure to specify double or single density 390 PRINT" and the name of the program you want. 398 PRINT CHR$(&H1B)CHR$(&H29)" (Offer subject to change without notice)" CHR$(&H1B)CHR$(&H28) 410 PRINT" This program is copyrighted and may not be sold 420 PRINT" for profit without written permission from the 430 PRINT" author. However, free copies may be made and 440 PRINT" distributed without limitation. Pass it around! 450 PRINT " Press any key to continue..."; 460 FOR I=1 TO N:A$=INKEY$:IF A$<>""THEN 500 ELSE NEXT I 470 PRINT CHR$(13)"  "CHR$(13); 480 FOR I=1 TO N:A$=INKEY$:IF A$<>""THEN 500 ELSE NEXT I 490 GOTO 450 500 PRINT CHR$(&H1A):PRINT:PRINT 503 IF COMP THEN PRINT ELSE PRINT TAB(8)CHR$(&H1B)CHR$(&H29)"ALSO AVAILABLE IN A COMPILED VERSION":PRINT TAB(12)"WHICH RUNS ABOUT 30% FASTER"CHR$(&H1B)CHR$(&H28) 506 PRINT 510 PRINT:PRINT" DRIVE B: IS ASSUMED UNLESS OTHERWISE SPECIFIED 520 PRINT CHR$(&H22)+"WRITE"+CHR$(&H22)+" FILE IS ASSUMED TYPE .SQ UNLESS SPECIFIED 530 PRINT:PRINT 540 LINE INPUT " FILE TO READ FROM: ";F1$ 550 PRINT:PRINT 560 LINE INPUT " FILE TO WRITE TO: ";F2$ 570 FOR I=1 TO LEN(F1$):IF ASC(MID$(F1$,I))>&H60 THEN MID$(F1$,I,1)=CHR$(ASC(MID$(F1$,I))-&H20) 580 NEXT I 590 FOR I=1 TO LEN(F2$):IF ASC(MID$(F2$,I))>&H60 THEN MID$(F2$,I,1)=CHR$(ASC(MID$(F2$,I))-&H20) 600 NEXT I 610 IF INSTR(1,F1$,":")=0 THEN F1$="B:"+F1$ 620 IF INSTR(1,F2$,":")=0 THEN F2$="B:"+F2$ 630 IF INSTR(1,F2$,".")=0 THEN F2$=F2$+".SQ" 640 IF F1$=F2$ THEN PRINT:PRINT"WAKE UP! WRITE FILE MUST BE DIFFERENT":PRINT" FROM READ FILE.":STOP 650 N1=0:N2=0 2050 WIDTH 51 'SET SCREEN DISPLAY WIDTH FOR OSBORNE 1 2060 OPEN "I",1,F1$ 2070 OPEN "O",2,F2$ 2080 PRINT CHR$(&H1A); 2090 LINE INPUT#1, S$ 2100 N1=N1+LEN(S$)+2 'COMMULATIVE FILE LENGTH (INCLUDING CR LF AFTER EACH LINE) 2110 PRINT CHR$(27)"="CHR$(34)CHR$(33)"LINE BEING PROCESSED IS:":PRINT:PRINT:PRINT S$+STRING$(255-LEN(S$)," ") 'RESET CURSOR POSITION AND DISPLAY LINE BEING PROCESSED 2120 FOR N = 2 TO 8 : IF MID$(S$,N,1)=" " THEN 2240 ELSE NEXT N 2130 ' SUBROUTINE FOR DELETING BLANKS 2140 IF MID$(S$,B,1)=" " THEN S$=LEFT$(S$,B-1)+RIGHT$(S$,LEN(S$)-B):E=E-1:GOTO 2140 'DELETE LEADING BLANKS 2150 IF E<=B THEN RETURN 2160 IF MID$(S$,E,1)=" " THEN S$=LEFT$(S$,E-1)+RIGHT$(S$,LEN(S$)-E):E=E-1:GOTO 2160 'DELETE TRAILING BLANKS 2165 RETURN 2170 M=INSTR(B,S$,C$) :IF M=0 OR M>=E THEN RETURN 2180 ' TAKE OUT BLANKS BEFORE AND AFTER CHARACTER 2190 IF MID$(S$,M-1,1)=" " THEN S$=LEFT$(S$,M-2)+RIGHT$(S$,LEN(S$)-M+1):M=M-1:E=E-1:GOTO 2190 2200 IF MID$(S$,M+1,1)=" " THEN S$=LEFT$(S$,M)+RIGHT$(S$,LEN(S$)-M-1):E=E-1:GOTO 2200 2210 M=INSTR(M+1,S$,C$) :IF M<>0 AND M<=E THEN 2190 2220 RETURN 2230 ' 2240 B=N+1 'BEGINNING POINTER FOR DELETIONS 2250 Q=INSTR(B,S$,CHR$(&H22)):IF Q=0 THEN E=LEN(S$) ELSE E=Q-1 'ENDING POINTER FOR DELETIONS BEFORE " OR END OF LINE 2260 SQ=INSTR(B,S$,"'"):IF SQ<>0 THEN IF E>SQ-1 THEN E=SQ-1 'SET ENDING POINTER AT SINGLE QUOTE LESS ONE 2270 RM = INSTR(B,S$,"REM"):IF RM<>0 THEN IF E>RM-1 THEN E=RM-1 'SET ENDING POINTER BEFORE REM 2280 IF E 2300 'FIND CLOSE QUOTE, SET NEW BEGINNING AND ENDING POINTERS 2310 IF Q=0 OR E>=LEN(S$)-3 THEN 2350 2320 Q=INSTR(E+2,S$,CHR$(&H22)) 2330 IF Q=0 THEN 2350 'NO CLOSING QUOTE 2340 B=Q+1 :GOTO 2250 2350 SQ = INSTR(E,S$,CHR$(39)) 'CHECK FOR SINGLE QUOTE 2360 RM = INSTR(E,S$,"REM"):IF RM=0 THEN RM=1000 'CHECK FOR REM 2370 IF SQ=0 OR SQ>RM THEN 2400 2380 IF SQ=N+1 THEN 2420 2390 S$=LEFT$(S$,SQ-1) 'ELIMINATE FROM ' TO RIGHT 2400 PRINT#2, S$ 2410 N2=N2+LEN(S$)+2 'COMMULATIVE FILE LENGTH AFTER COMPRESSION 2420 PRINT CHR$(27)"="CHR$(45)CHR$(35); 'SET CURSOR POSITION 2430 PRINT TAB(10)"FILE LENGTH BEFORE: "N1" CHARACTERS 2440 PRINT TAB(10)"FILE LENGTH AFTER: "N2" CHARACTERS 2450 PRINT TAB(10) "SAVINGS "N1-N2" CHARACTERS 2460 IF EOF(1) THEN 2470 ELSE 2090 2470 CLOSE 2480 PRINT " A "(1-N2/N1)*100" PERCENT SAVING IN ASCII 2490 PRINT " (more in MBASIC format!) 2090 2470 CLOSE 2480 PRINT " A "(">":GOSUB 2170 'DELETE BLANKS BEFORE AND AFTER = : , + - / * ( ) < > 2300 'FIND CLOSE QUOTE, SET NEW BEGINNING AND ENDING POINTERS 2310 IF Q=0 OR E>=LEN(S$)-3 THEN 2350 2320 Q=INSTR(E+2,S$,CHR$(&H22)) 2330 IF Q=0 THEN 2350 'NO CLOSING QUOTE 2340 B=Q+1K+"6# x+:`i!_ÑY7K͂!" * |y!^" !P" !4g&!!!C!87!N7!C!7* |!C!!!)!!!!!(!7!N7!!!!l!!!!!m!!7!w7!D7!%7!C!7!C!7!C!7!7!~7!I7!7!7!7!}7!!!)!!L!!!(!7!7!7!7!7!V* "!=͇ !N"*#"**z|Q}|%! !!,! !* "!Ô͇ !N"*#"**z|}||!!7!N7!N7* |!N7#!C!!!)!!7! C! !!!(!7!N7!N7! 7!"!! !!"!!!~ !7!N7!N7!a ͌!ͯ!N7!N7!D ͌!ͯ!""!*!z!"|)*!z!"!* *#"**z| }|Ұ!""!a*!z!"|6)]*!z!"!* *#"**z|u}|!@ ̈́"|™; !!͇ !@ ̈́"|¹; !!͇ !7 ̈́"|!1 !͇ !"!N7! 7! 7!"!"#!3g&! $7!L7! $7!L7!!!!%ͯ!%"*!##"!!!! !"!!!!! 7!N7!N7!%"!}o|g! Ͳ!%!7!%* !z!! "* #" * |)%*(!z!! ">*(+%H!!%"*(}o|g%]!!%͇ **+"****(z|O}|T%**!z!! "**+%H!!%"**}o|g%]!!%͇ "*T*(DM%!,̈́""/*/|go*/**zz{z?go|g}o|*/+%!z!"G! ":*/++%H!!%"*/}o|g#%]!!%͇ *G"/**+"**/#%!z!! "%*/H!!%"*/}o|g+%]!!%͇ **+"*:*/#DM%!,̈́""/*/|go*/**z|}|?go|g}o|* #"(!"!*(DM%̈́""1*1|!%""* *1+"**(DM%! ̈́""3*3|3 *3+**zz+ {z3 "**(DM%! ̈́""5*5|f *5+**zz^ {zf "****(zzw {zs %*(!z!! " ,! ͇ ͠,!@ ͇ ͠,! ͇ ͠,! ͇ ͠,! ͇ ͠,! ͇ ͠,! ͇ ͠,! ͇ ͠,! ͇ ͠,! ͇ ͠,! ͇ ͠*1|go!%"+++**z|: }|?go|g}o|s **##!"!%̈́""1*1|s *1#"(!'!**DM%̈́""3**DM%! ̈́""5*5|¨ !"5*3|go*3*5z| }|go|g}o| * #*3}o| *3+%H!%͇ !͐!%7!%"*###"#!!! !-!!#!! C!| *! !l 7! C!T *# !l 7! C!< *#*!}o|g !- 7!1|  A!d2!$ *#Ϳ*!UQ!>! 7! 7#! (more in MBASIC format!) PERCENT SAVING IN ASCII' A 0 CHARACTERS? SAVINGS W FILE LENGTH AFTER: o CHARACTERS  FILE LENGTH BEFORE:  > < ) ( / * - + , DATA REM '  LINE BEING PROCESSED IS: = O I FROM READ FILE.& WAKE UP! WRITE FILE MUST BE DIFFERENT4 .SQ: .> B:C :G FILE TO WRITE TO: d FILE TO READ FROM: + FILE IS ASSUMED TYPE .SQ UNLESS SPECIFIED WRITE0 DRIVE B: IS ASSUMED UNLESS OTHERWISE SPECIFIED WHICH RUNS ABOUT 30% FASTER$ALSO AVAILABLE IN A COMPILED VERSION'/ 'Y Press any key to continue...1 distributed without limitation. Pass it around!/ author. However, free copies may be made and / for profit without written permission from the1 This program is copyrighted and may not be sold .O (Offer subject to change without notice)& and the name of the program you want.2 too! Be sure to specify double or single density4 the program is worth to you, and send your comments4 by the same author. Contribute as much as you feel2L and its documentation, as well as other programs 4 a diskette with the latest version of this program 3 All contributors sending $10 or more will receive Carmel, CA 93923 4050 Arroyo TrailGregory C. Dahl( contribution to the author:0G ment of new programs, you are invited to send a2z find it useful and wish to encourage the develop- If youUSER SUPPORTED SOFTWARE. This program is 'PORTIONS COPYRIGHTED BY MICROSOFT, 1981%COPYRIGHT (C) 1983 BY GREGORY C. DAHL;BCSQUASH (ver. 1.0)QH[[[[ BASLIB #000000 5.30 - OWNED BY MICROSOFT, 1980 ÞO2=DM*"#*##"#È>22*^#V"##^#V" 2!!!""!t"q6#6P>2x>2w>2v͕.͘.%_6+E5#w+~=w!%=#L~go A= *L![oR=$~/0!9"?ͧ !ͧʫ!!D!R"}!O"ͧ|> @6#s#r#=>29>2<>2;2>!2"K!$\"A>&2Cͷ"&6#}|ͅ& STO#͝*K.. . ........%*Y|*:V˜*T|ʘͧ͞  s#rͧ  {w#6"W*?*T>2V!9N#Fͧ~#~~+~#~+^#V###î###î|~#fo!ͅ& Internal Error - No Line Number 2ͧ~#ͅ& at line͞2Ý>fͅ& at address|ͩ&}ͩ&Ý> => =~#*ͪ=~#foKG!9"5!þ*5"7!*7͝!~<=#~##Ë&Syntax Error in DATRETURN without GOSU Type MismatcOut of DatIllegal Function CalOverfloOut of Memor Subscript Out of Rang Division By ZerOut of String SpacString Formula Too CompleRESUME without Erro2Field Overflo3Internal Erro4Bad File Numbe5File Not Foun6Bad File Mod7File Already Ope9Disk I/O Erro:File Already Exist=Disk Ful>Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erro0ͺ!>w>$|@ͺ}ͱ7;:`i"I!"a!"cw ,ͯRa)3'*>*>*>*>q)́(*>q)'*>*> ,Zͯ~#€x$q!>Kͯ$$͊ @4ڒ ¿¯"G{,xPX@4"!Oz"y  B O{,yā@4" { ,> ""́@4"- U@4U -,U M@4U U*I( 4:{{,{6!$O {+~ o#6!ɷw#V~2#~#^#Vw&++%);:ͺ*I|!$$͊ *cle not found?Can't enter file~G#C!CC!CC!CCoDCOMSCNC"">C2D:DG:DO*.(D# D2D (DD2CWD>2!~6~>2*+++"y=*">:=2|=*y=*G:?C oD2=2=2=2=2=2=2=<2=2=Ců2x=ͺ@$ͺK$ͺV$ͺ$ͺ@FͺKFͺVFͺͫFͺ@ͺKͺVͺͫ>a>a">jH~# bx2&:lš*$<R~ʓx<#ÇA*~ʖ x<#Ý>2&:lF#~#foxR~#x<%>"x x<>,x<W*q#^ |v+=v:t=v =z{ڎ{_Àͺ|}ͱ7ʩ:`i"I++"q!"g!"e2l@2i:}o|g> x<+| =!t"q!"I2l!o~6#w~!.͗&N%i&K +͐*q{ x2>:>:>|/g}/oB:>!>M !=:>goW*>|7g :> +> |/g}/o) !> G|: 1 o& Gȯ|g}oA W >d ~+~?~o +#| + | ͺͺ$ ~##++Ĉ%>ͯ=+V+^+ʷ +r+s%ͺ͊ ~$SK " " * |@}@ @+< {* ~#^#V`i#N#F ͯ=* %ͺ@x$8!8!%%~#~#foͯ=ͺ|@BK͂!PYͺ|@BK s! o_V!ͺz@zʊ! Ґ!_Җ!o}`i$%DMͺ !~@#~#fon&%ͺz!}x$~!s#!@ͺ|@!9>$>">">">">">,"("~#fo##GNX"yX"#~#fo~#foa"#W" G" ya"y<.k")k")%%̈́"x@űʏ" y<2z"F~""#~#foyͪ=O #~#fox""#¼""!z"4 ¹"2z"%%*z"&~%o&~@#^#V++%o&L_### ###&#M)#,#/#2#05#8#);#>#A#_!#4T#5*#"#~#N#F#ڔ#n# ͪ=W#yxy# W#+++6@#yw#xw+++6###!#~6ڥ#ͺ#T#$*##~#~T#7!*#"#~#^#V#$#ͪ=#|##++~_w#~Ww##ͺ#*#DM~#^#V#^$$ $+z;%+{;%##{z~#q#p_ $yS$xS$DM $~#S$ $YP+++"#6@###{_zW+r+sɷʭ$*#|‹$:D#^#V+"#w#s#r+++r+s##!$$*c&{z*e&?$}|~# $yGx$xͯ=Gx$x#N# F& $ͺ$͈%%*c&*e&ͽ=7% &1%͈%%###%]%ͅ& during G.C. 2]%ͅ& 2ͅ& Internal Error - String Space Corrup#N#F*#yx%*#yx%++`i+V+^ͽ=R%##6+6+~6  >@++*#"#s#r+$*##~_#~W%Fr+s##6"####!#~#fo&ͽ=&<*#"#*#}o|g6@#s#r#6"#*e&*c&"#}w>#w##ͽ=J&++6+6#D#|@}@!uwɧ~ =#=y&͋&~ =#Ë&G~#ʧ&#™&++Ͳ&0:ڽ& =P:uGw#˜P!h~7w?##wy7O!lPPE0'*>}/o|/g#">|@'gE'!>~wɯ2>E0*'B@'*>@'gEE0*'B>>(~#E'&!>c'>!>>2j'# i'!>@A!>J(>>>ڌ'>|}+!)H@(E+6!>>͉B2>!(C!(H@!>H@~_#~W#~OGÉC!/ÆC9E'ɇ<o&@'gE*>*>(">`i">!>^#V#N#F#!(ÇD Gx{G!>6Ewg>hG$GN(:&Gw#N(I(c(!>J(>E0>E0A(*>||(](!/W(s'#'à(':>2>:>"1$(:>(((|/g}/o(!"1:>($(">>2&'aj( L}'=' 1>2&`h(~&`0-7)+7)++0*.)eI)Es)+0la)La)qa)Qr):&ʌ)>Ì)~%)#)!)dʌ)D£))+0V0+0ڑ*£)_{_) *§)&E0!'(E0 £))7)+0!'!(ã))+0ã)'3'E0('=E0'' ͎'S*T])))O |Q*">7)y*'7s*t$'p*(͆*K*:'͹'](':'s'K*'''{ Ҡ*0_Ö)*!>E0*:>û*y*:>*:>*:>/*"1h+*6+o(*6-<:&W:&ڍ,ʅ,q+v/!&F :&_ 3+x*3+{3+Aq+0S+ES+DS+03+,3+.V++60{a++:Aw{+p2&!&6 '*>*>2&,E~ʽ+:ҝ+0ڝ+ #~Ž+>DGŒ+">`i">#~+,-+0OxG,#~+`xE+y ҭ+>2& ,|ҭ++í+">`i">(#W.:&7,A,E,E,ͷ.60(.+~0T,.(ʆ,E0>"w#6+w,6-/</ y,:#p#w#6!&#z -ڪ-ͯ.z.v/{̔'=.+ʼ,p#6!&#:&~ ,*,+,+0-+_:A{0-#+0-++w,,-6%ڱ-)-/y'7-*+6%' -A(.\-_x.͢..ě..é,_y *g- *i-{_x-.͢.Ö-͋.y.O͋.GO.¡-*&=.Pò,*'ѯʷ-A(7.y *OzWO *--/<<./!>J(Ϳ' !.n.E0Q.CO'W./y'j.)?. *n.E0.t#'Æ./y'b.=60#Ì.›..60#=×.{ ./>`'/>`'p#=.!>(:/'>$((0?.(/{_#zW#yO++N/'#(p#@/>|/!0>.N#F#*>/}o|gҏ/">p#=|/.w1_cƤ~@zZrN vH Tʚ;@B''d #~: +0 +0 +00?<=:&R07-+++00Oq0Hq0+}0چ0(H#ʲ0Ì0=M!͞0ڜ0}0?)))صoÞ0M!00}00? 0? ))))صo0a{ (E0:>:>':&2&2&==ZņTOvPÝPACETRINGTRWAeGίIQTEПUšAVŖYSTE͉ϛAœAHEΞROF{RO|SRSRSRSRSRSRSRSRSRSRSұSINǡARPTҙAAIyIDT}HILŃENĄRITuOxhp@xh@QQͺ}ͱ7;:!' ~2 2#~2`i31>O #~goPY!' ůw/4:6;=;=S2ѯ;<;!% ^#Vr+sͺ}\7!"1}ͱ7ʨ2 PYž2!2`i>2!' ~*2/4O8ͺ}ͱ7;!&2! ~+ngͺ}ͱ7;! n&*I~::DM'~'24N#V p3zw w+s#r#6#6DM:F3!" s#r#6Ë3! {zVʃ3(1w<3<;!! {w::˜33!! ~(1!) ̹3'2̹3:~#¼3*I~=:( ~3+~#5O ~+~3337>*IT]% N#F+q#p###6 4/4:6>(4>w+w!(37?*I' 6#67~;#^#fk_x4N#~:|4++@;y@;;1 #4~.¦4͹47Ò4#“421%z ;;> ù4ʭ4> 4í4ͺ[4(11<;!11> ͯ=[4:1!1;1< ;1*1~:#N#F++% Of5If5R:*1|f5!"1}_ͱ7y5O8{ͱ7 ;z[4 ͋8"I#1> ͯ=66/4~5<;5<5;ù5!%w#w#w#w~53) p# 5\7 _ͺ[4(11<;ͺ!16# 6m6ͺ[421!16!16(11;O!)1  ~#G.G< ¦6:t W:u6> G<"1>2O!x:"P:M<2M*K"1!p7"Kͺ"1-5*]|n7##nl2]7.g2*1ͺÅ7ͺ21­8"1í8ͺá7ͺ21®8"1î8;<;=_!]~#fo7##{7++7*]7"]q#p#s#4#5++###DM !_"1~#fo-8+V+^##*1{z7BK^#V+*1s#r! DM?8*1 DM%s#r# 6# xB8 !]T]~#fo;xZ8yZ8~#~+*_"_s#r`b{#*1|ʛ8! s#r#w¥828}ͱ7:! ^#V:18*1{;+s#r! w#w! ~#fo!:9>9 BK>!)9)#9))"9 !9#= 9}_}la);99#x;"8! "8!) "8!}o|g:h9bk:8ʮ9:}99DM*8*8:"8PY9}o|g*8#"8K99DM*8*8:"8PYÓ92:*8! ~#fo:s#r9::9!9!& "3~# x:DMk:;`:! w!( V6 8:zwi:;`:! ~![:! ^#V! s#rDMX:R::}ͱ7;ʋ::`i"I!:"R:@4!>Kͺ|@,:-:O;*P!"R{x$f$%:!:*R:F|}!"I>6>4>?>=>:>7>5>2>3>@>C>o&K!"I!";;:L;ͅ&?L;pr<À;:C<>\2C\G<2C G<>s;;>#z; <6D G^G<@G G x<> x<:w=;=> !> !*v<^#V#K=ɷ!>g=!>b=>g=>g=w#w#w#w#{f<÷=>>Ó=>>x= ~#=—=!x=Ʌo$ɧGw#³={zfy!h~#fo###~=¯gy!h6#6x^iBDMPY`i bkT]*m*m"m"m|g##6|g##6͆f^,^#V!~#foh&*m~#foɇ!mL*m~#fo~>L~#fo*m##n&ȇ*mL~#foG6hO=th#~+thth yhxfxʰhKg~¸h#~ʙh¸h6#>B>?$GO ?!,G!>y#?+>$G?,G?FB$??ͽB?!>Bʐ?:>$G:>/OD4rB!=qA=!>A?g?=!>ͽA:><=A!>.B!=,BxM?!>5M?@!>N#FE+6?!>>N͉BA2>:>A$Gx/~5#?>!>Nwy#?$G>B!>B!>CrC!rC!> @!>>F+N+=@!>#@!>>q#p#=&@!>H@"=@ @?*=BF:>F!>N#FDrBqʅ@GܷA͵Bx n@e@A!>͑B}@j0 TeB׳]h!I.k ?FB@?ͽB!>H@!>q#~++w+q@$GDNn"~`35zr1{r1h!IB$GyO2>FAB$G:>?XA/OEG2>!>͉B:>2>x!>>AAҏA4͵B:>A!>~++w$G!>4#¨A4@+6!>># Aɯ# AAA/!>Oyw#AG:>B!>Vwz# AxAF!>,BBxʏA!>wFÏA~w# .B?FBMB?ͽB!>@A?FBiB?ͽB?!>0Ay2>!>=~q+BqڠBNsY+•BËB W~w+ªBãB!>çBgEBF!>w#B$GB}CBCCE!>F#^#V#NûFC}>~#CG++Ny,G>B!>F>UC-CGcC GQC!>6Eg>hG|ԼE!>'CakFrCDrC$G!>~+>w$GyEÉCG$G:>FҜC/C~_#~W#~OһF#4ʪF.~GûFG~_#~W#~OܶEEyECG$G>OÌCyECGʪE$GȯGD">y2>FoEE!D*>:>O;D>4ʪFSDcDg.*>:>Oz:>IDx<=zD{_zWxG)yOHGûFyEÊDGG$GDy+F+F+Fw`h|DgyһD:>O|g}oxG-|¯D}ªDEElaOéD!>~GxDƀFwEw+ɷFF Gx{G!>6EwgEzE >hG|F{>2>E/~TE#~+~+~+~LUX)!">ܶEEEgEEzʪEzBE|G||E4GEO_yW!>~/woG}_}W}OEG!>~7w?##wy7O*>*>">">ajSXDFFJS\E!>F/~7Fx8,FG@G͢FFBF͏F7Fx|qFXFaFjFejSXqFqFch|F{_zW}o|grF">">x!>~w#–F͏F¢FFJ!>qx!>FF#~怩OF 4îFgo">"> Gs#r#q#pGGGG">`i">*>*>DM^#V#N#F#xy,G:>:>7|/G}/O!>OG NG7>{_zW}o|g=EG|g}owGCZQjG o-yOzW{_xGzG>*>DM^#V#N#F#xy,G:>:>7|/G}/O!>OG NG7>{_zW}o|g=EG|g}owGCZQjG o-yOE$GȯGD">y2>FoEE!D*>:>O;D>4ʪFSDcDg.*>:>Oz:>IDx<=zD{_zWxG)yOHGûFyEÊDGG$GDy+F+F+Fw`h|DgyһD:>O|g}oxG-|¯D}ªDEElaOéD!>~GxDƀFwEw+ɷFFBCSQUASH.DOC Documentation for BCSQUASH.COM and BCSQUASH.BAS by Gregory C. Dahl October 28, 1983 COPYRIGHT (C) 1983 by GREGORY C. DAHL This program is a small utility for BASIC programmers which compacts BASIC programs an average of 15-20 per cent by taking out comments and unnecessary blanks. It is particulary useful when working with large programs that strain avail- able memory limits. USER SUPPORTED This program is user supported software. It is copyrighted and cannot be sold for profit, but unlimited copies may be made and distributed for free. Users who find the program useful are encouraged to send a contribution to the author: Gregory C. Dahl 4050 Arroyo Trail Carmel, CA 93923 If this "peoples' marketing" venture is successful, the author will be encouraged t o write and distri- bute more programs in this unrestricted manner, which benefits everyone. So do your part! Any contributors who send $10 or more will receive a diskette containing the latest version of this program and its documentation, along with other programs by the same author. Please be sure to indicate single or double density, and the name of the program that interests you. Comments on programs are also most welcome! Due to possible unforeseen circumstances, the above offer is subject to change without notice. WHAT IT DOES BCSQUASH reads an ASCII file containing your BASIC program and creates a new file with a compacted version of the same program in which all comments beginning with ' and all unnecessary blanks before and after = : , + - / * ( ) < > have been eliminated. Material in double quotes " is not affected, but spaces before and after double-quote strings are removed. REM and DATA statements are unchanged. It is particulary useful for programmers working with long programs or programs which have large memory needs, and for which releasing addi- tional memory would be useful. A master version of the program can be kept containing remarks, inden- tations, etc., and BCSQUASH can be used to quickly prepare a reduced version for execution. The percentage of reduction depends, of course, on the number of comments in the original program. My own experience is that my programs are reduced about 20% when SQUASHed. BCSQUASH requires an input file in ASCII format. This is obtained by using the ASCII save option in MBASIC: SAVE "B:myprog.ASC",A You are free to use any drive, file name and file extension you choose. BCSQUASH asks for the name of your program file to be read from. It assumes this file is on drive B: unless you specify another drive. It then asks for the name of the file to write to. This file will be created if it does not exist, and will reside on the B: drive unless you specify other- wise. It will have an extension of .SQ unless you give a different extension. Please note that you must have two different files with different names. Thus you cannot start with an .ASC file and end up with an .ASC file of the same name. It is recom- mended that you use the default extension .SQ for your squashed programs to distinguish them from the unquashed versions so that you never inadvertenty erase the master version of a program containing your remarks. As the program executes, it displays the current line being squashed and running totals for the size of the file before and after squashing. At the end, the percentage savings is displayed. MBASIC AND COMPILED VERSIONS BCSQUASH is available in two forms: an MBASIC program and a compiled .COM program. The .COM version runs about 30% faster. To execute the .COM version, simply type BCSQUASH at the >A prompt (CP/M). This is a complete machine-language program, and does not need any file with library routines. To execute BCSQUASH.BAS you need to first load MBASIC, and then type RUN "BCSQUASH. PORTABILITY BCSQUASH was written for the Osborne I (tm) and uses certain screen addressing commands which may not work on other machines. With modification to these commands (which are not essential to operation), the program should run on any CP/M machine. PROGRAMMING SUGGESTION It is useful to make the first line of your program a REM containing the name of the program and the date of the last update. REMs are not removed by BCSQUASH. This line will help you to keep track of your programs and their revisions. The stepping motors in your disk drives will be happier if you arrange to put your two files (reading from and writing to) on separate drives. Happy programming! Greg Dahl  en type RUN "BCSQUASH. PORTABILITY BCSQUASH was written for the Osborne I (tm) and uses certain screen addressing commands which may not work on other machines. With modification to these commands (which are not essential to operation), the program should run on any CP/M machine. PROGRAMMING SUGGESTION It is useful to make the first line of your program a REM containing the name of the program and the date of the last update. REMs are not removed by BCSQUASH. This line will help you to keep track of your programs and their revisions. The stepping motors in your disk drives will be happier if you arrange to put your two files (reading from and writing to) on separate drives. Happy programming! Greg Dahl 10000 REM ARCCOS ROUTINE, PLACE VALUE IN AC1 10010 REM AND CALL THIS ROUTINE; RETURNS VALUE IN 10020 REM AC1 IN RADIANS (Bob Scott APR 83) 10030 AC2=ABS(AC1) 10040 IF (AC2<>1) THEN GOTO 10060 10050 IF (AC1<0) THEN AC1=3.1415927# ELSE AC1=0 10055 RETURN 10060 IF (AC2>1) THEN PRINT "ARCCOS ERROR=";AC1:STOP 10070 IF (AC2=0) THEN AC1=1.5707963#:RETURN 10080 AC3=ATN(SQR(1-AC2*AC2)/AC2) 10090 IF (AC1<0) THEN AC1=3.1415927#-AC3 ELSE AC1=AC3 10100 RETURN 10200 REM ARCSIN ROUTINE...SAME STUFF SINE GOES IN 10210 REM AS1 AND VALUE IS RETURNED THERE IN RADS 10220 AS2=ABS(AS1) 10230 IF (AS2=1) THEN AS1=SGN(AS1)*1.5707963#:RETURN 10240 IF (AS2>1) THEN PRINT "ARCSIN ERROR=";AS1:STOP 10250 AS1=ATN(AS2/SQR(1-AS2*AS2))*SGN(AS1) 10260 RETURN 07963#:RETUINVTRIG contains arccos and arcsin inverse trig functions written as GOSUB routines in MBASIC. This was also submitted by Bob Scott and is described in SCOTT.DOC. BCSQUASHCOM/0BCSQUASHDOC)123456INVTRIG BAS7INVTRIG $$$10 ' MULTREG 10/23/83 15 ' COPYRIGHT (c) 1983 BY GREGORY C. DAHL 17 ' * * ALL RIGHTS RESERVED * * * 20 ' THIS PROGRAM RUNS A MULTIPLE REGRESSION 200 ' 210 ' DETAILED INSTRUCTIONS ARE GIVEN IN MULTREG.DOC 220 ' 230 COMP = 0 ' FLAG FOR COMPILED VERSION 240 IF COMP THEN N=350 ELSE N= 80 ' BLINK SPEED 245 WIDTH 52 250 PRINT CHR$(&H1A); 260 PRINT TAB(16)"MULTREG (ver. 1.0)":PRINT 270 PRINT TAB(7)"COPYRIGHT (C) 1983 BY GREGORY C. DAHL 280 IF COMP THEN PRINT TAB(6)CHR$(&H1B)CHR$(&H29)"PORTIONS COPYRIGHTED BY MICROSOFT, 1981"CHR$(&H1B)CHR$(&H28) ELSE PRINT 290 PRINT" This program is "CHR$(&H1B)CHR$(&H6C)"USER SUPPORTED SOFTWARE."CHR$(&H1B)CHR$(&H6D)" If you 300 PRINT" find it useful and wish to encourage the develop- 310 PRINT" ment of new programs, you are invited to send a 320 PRINT" contribution to the author: 330 PRINT TAB(17) "Gregory C. Dahl 340 PRINT TAB(17)"4050 Arroyo Trail 350 PRINT TAB(17)"Carmel, CA 93923 360 PRINT" All contributors sending $10 or more will receive 370 PRINT" a diskette with the latest version of this program 380 PRINT" and its documentation, as well as other programs 390 PRINT" by the same author. Contribute as much as you feel 400 PRINT" the program is worth to you, and send your comments 410 PRINT" too! Be sure to specify double or single density 420 PRINT" and the name of the program you want. 430 PRINT CHR$(&H1B)CHR$(&H29)" (Offer subject to change without notice)" CHR$(&H1B)CHR$(&H28) 440 PRINT" This program is copyrighted and may not be sold 450 PRINT" for profit without written permission from the 460 PRINT" author. However, free copies may be made and 470 PRINT" distributed without limitation. Pass it around! 480 PRINT " Press any key to continue..."; 490 FOR I=1 TO N:A$=INKEY$:IF A$<>""THEN 530 ELSE NEXT I 500 PRINT CHR$(13)" "CHR$(13); 510 FOR I=1 TO N:A$=INKEY$:IF A$<>""THEN 530 ELSE NEXT I 520 GOTO 480 530 ' 600 SC% = 51 'SCREEN DISPLAY WIDTH 610 F1$="######.##" 'FORMAT FOR DISPLAYING DATA ON SCREEN 630 PRINT CHR$(&H1A):PRINT:PRINT:A$="MULTREG":GOSUB 710 640 PRINT:PRINT:A$="Version 1.0":GOSUB 710 650 PRINT:PRINT:PRINT:A$="COPYRIGHT (c) 1983 BY GREGORY C. DAHL":GOSUB 710 660 PRINT:A$="* * All rights reserved * *":GOSUB 710 670 DEFDBL A-D,F-H,O-Y : DEFINT I-N 'SET MOST VARIABLES DOUBLE-PRECISION 680 WIDTH SC%'SETS SCREEN DISPLAY WIDTH 690 GOTO 1000 700 ' DISPLAY LINE, CENTERED 710 PRINT TAB((SC%-LEN(A$))/2) A$:RETURN 720 ' ENTER DATA (AND TRANSFORMATIONS, IF ANY) 1000 N=13 'PUT NUMBER OF OBSERVATIONS HERE * * * * * 1010 V=3 'PUT NUMBER OF INDEPENDENT VARIABLES HERE * * * * * 1020 HEAD$ = " * * PUT THE DATE & A DESCRIPTIVE HEADING HERE * *" ' * * * * * 1030 M=V+1:DIM X(N,M), Y(N), XX(M,M), XXINV(M,M), A(M,M) 1040 ' X IS MATRIX OF DATA, ROWS ARE OBSERVATIONS 1050 ' COL 1 = 1'S, COLS 2 TO V+1 ARE INDEP. VBLES 1060 ' Y IS VECTOR OF DEPENDENT VBLE OBSERVATIONS 1070 ' (XX IS X'X, AND XXINV IS (X'X) INVERSE. A IS A TEMPORARY WORKING MATRIX) 1080 ' NOTE: EACH VARIABLE SHOULD BE MULTIPLIED 1090 ' BY A SCALE FACTOR SO THAT ALL OBSERVATIONS 1100 ' FALL AS CLOSE AS POSSIBLE TO A RANGE OF 1110 ' 0.1 TO 1000.0. RESULTS ARE NOT AFFECTED. 1120 ' ENTER DEPENDENT VARIABLE OBSERVATIONS IN 1130 ' DATA STATEMENTS FOLLOWING, SEPARATED 1140 ' BY COMMAS. (REPLACE EXISTING DATA 1150 ' STATEMENTS.) NUMBER OF OBSERVATIONS 1160 ' MUST EQUAL N (SEE LINE 100). 2000 ' THE FOLLOWING ARE SAMPLE DATA. YOU MUST PUT IN YOUR OWN. 2010 PRINT:PRINT:PRINT:PRINT:PRINT:A$="DEMO DATA ARE BEING LOADED....":GOSUB 710 2020 N1=N+1 2030 DIM VR(N1),VP(N1),VC(N1),VM(N1) 2040 DATA -14687.8,2565.5,48176.6,101613.8,96592.6,-2846.7,-118305.9,-24782.4,43177.9,114296.4,195168.7,147224.9,-10140.8,-32931.3 2050 FOR I=1 TO N1: READ VR(I) : NEXT I 2060 DATA 50,51,53,56,67,77,91,100,107,104,114,132,156,172 2070 FOR I=1 TO N1: READ VP(I) : NEXT I 2080 DATA 218.028,236.846,258.5162,284.8869,387.8018,604.6273,832.7179,984.9344,1192.7398,1483.1753,1757.7751,2096.6606,2513.4998,2774.1448 2090 FOR I=1 TO N1: READ VC(I) : NEXT I 2100 DATA 203.3402,239.4115,306.6958,386.5007,484.3944,601.7806,714.412,960.152,1235.9167,1597.4717,1952.9438,2243.8855,2503.359,2741.2135 2110 FOR I=1 TO N1: READ VM(I) : NEXT I 2120 FOR I=1 TO N 2130 X(I,1)=1 2140 Y(I)=(VR(I+1)-VR(I))/VM(I) 'INDEP. VBLE = CHANGE R/M(T-1) 2150 X(I,2)=1000*(VP(I+1)-VP(I))/VP(I) 'PRICE CHANGE PER CENT 2160 X(I,3)=1000*(VM(I+1)/VP(I+1)-VM(I)/VP(I))*VP(I)/VM(I) 'REAL MONEY CHANGE PER CENT 2170 X(I,4)=1000*(VC(I+1)-VC(I))/VM(I) 'CREDIT CHANGE OVER MONEY 2180 NEXT I 2190 GOTO 4540 2200 ' END OF DEMO DATA 2800 FOR I=1 TO N:READ Y(I):NEXT I 'THIS STATEMENT LOADS YOUR DATA INTO VECTOR Y 2810 ' ENTER INDEPENDENT VARIABLE OBSERVATIONS IN 2820 ' DATA STATEMENTS FOLLOWING: FIRST ALL N 2830 ' OBSERVATIONS OF FIRST VARIABLE, THEN ALL 2840 ' N OBSERVATIONS OF SECOND VARIABLE, ETC. 2850 ' THERE MUST BE V VARIABLES ALL TOGETHER 2860 ' (SEE LINES 1000 AND 1010 ABOVE). 2870 ' 2880 ' 4500 FOR J = 2 TO M : FOR I = 1 TO N : READ X(I,J) : NEXT I,J 'THIS STATEMENT LOADS YOUR DATA 4510 ' INTO MATRIX OF INDEP. VARIABLES, X 4520 FOR I = 1 TO N : X(I,1) = 1 : NEXT I 'LOADS COLUMN OF ONE'S FOR INTERCEPT TERM 4530 ' DISPLAY INPUT DATA 4540 PRINT CHR$(&H1A):A$=HEAD$:GOSUB 710 4550 HEAD1$="* * * * INPUT DATA * * * *":A$=HEAD1$:GOSUB 710 4560 I=(LEN(F1$)-8)/2:IF I<0 THEN I=0 4570 PRINT" OBS# "SPACE$(I)"DEP. VBLE"SPACE$(I+2); 4580 IF SC%-POS(1)-1>LEN(F1$) THEN PRINT"INDEP. VARIABLES:" ELSE PRINT 4590 F$="###. "+F1$+" " 4600 K=INT((SC%-7)/LEN(F1$)): IF K>M THEN K=M 'NUMBER OF INDEP. VARIABLES THAT CAN BE DISPLAYED ON SCREEN 4610 FOR I=1 TO N 4620 PRINT USING F$;I,Y(I); 4630 FOR J=2 TO K : PRINT USING F1$;X(I,J); 4640 NEXT J:PRINT:NEXT I:GOSUB 6640 4650 IF K=M THEN 4740 'ALL INPUT DATA DISPLAYED 4660 L=INT((SC%-6)/LEN(F1$)):K2=K 4670 K1=K2+1:K2=K1+L-1:IF K2>M THEN K2=M 4680 PRINT CHR$(&H1A):A$=HEAD$:GOSUB 710:A$=HEAD1$:GOSUB 710:PRINT:PRINT"INDEP. VARIABLES, CONTINUED:":PRINT 4690 FOR I=1 TO N:PRINT USING "###. ";I; 4700 FOR J=K1 TO K2:PRINT USING F1$;X(I,J); 4710 NEXT J:PRINT:NEXT I:GOSUB 6640 4720 IF K20 THEN 4830 4820 NEXT I : PRINT "SINGULAR MATRIX. STOPPING":STOP 4830 FOR K=1 TO M 4840 S=A(J,K) : A(J,K)=A(I,K) : A(I,K)=S 4850 S=XXINV(J,K) : XXINV(J,K)=XXINV(I,K) : XXINV(I,K)=S 4860 NEXT K 4870 T=1/A(J,J) 4880 FOR K=1 TO M : A(J,K)=T*A(J,K) : XXINV(J,K)=T*XXINV(J,K) 4890 NEXT K 4900 FOR L=1 TO M : IF L=J THEN 4960 4910 T=-A(L,J) 4920 FOR K=1 TO M 4930 A(L,K)=A(L,K)+T*A(J,K) 4940 XXINV(L,K)=XXINV(L,K)+T*XXINV(J,K) 4950 NEXT K 4960 NEXT L,J 4970 GOTO 5110 ' * * * * * 4980 ' TEST INVERSE 4990 PRINT "TEST. SHOULD BE IDENTITY MATRIX I: 5000 FOR I=1 TO M 5010 FOR J=1 TO M 5020 S=0 5030 FOR K=1 TO M 5040 S=S+XX(I,K)*XXINV(K,J) 5050 NEXT K 5060 PRINT USING "#####.###############";S; 5070 NEXT J 5080 PRINT 5090 NEXT I 5100 ' COMPUTE ESTIMATED COEFFICIENTS BETA 5110 DIM BETA(M),C(M),EST(N),ER(N),T(M) 5120 FOR I=1 TO M : C(I)=0 5130 FOR J=1 TO N : C(I)=C(I)+X(J,I)*Y(J) 5140 NEXT J,I 5150 FOR I=1 TO M : BETA(I)=0 5160 FOR J=1 TO M : BETA(I)=BETA(I)+XXINV(I,J)*C(J) 5170 NEXT J,I 5180 ' COMPUTE OTHER STATISTICS 5190 ' S = Y'Y 5200 ' W = (SUM Y)^2 / N 5210 W=0:FOR I=1 TO N:W=W+Y(I):NEXT I 5220 W=W*W/N 5230 RSQR=0:S=0 5240 FOR I=1 TO M:RSQR=RSQR+BETA(I)*C(I):NEXT I 5250 FOR I=1 TO N:S=S+Y(I)*Y(I):NEXT I 5260 RSQR=(RSQR-W)/(S-W) 5270 F = RSQR * (N-M) / ((1 - RSQR)*(M-1)) 5280 ' F DEGREES OF FREEDOM: M-1, N-M 5290 EMIN=1.7E+37 : EMAX = -EMIN 'INITIAL VALUES 5300 ERSQR = 0 5310 FOR I=1 TO N 5320 EST(I)=0 5330 FOR J=1 TO M 5340 EST(I)=EST(I)+BETA(J)*X(I,J) 5350 NEXT J 5360 ER(I)=Y(I)-EST(I) 5370 ERSQR = ERSQR+ ER(I)*ER(I) 5380 IF ER(I)>EMAX THEN EMAX=ER(I) 5390 IF ER(I)EMAX THEN EMAX=ABS(EMIN) ELSE EMIN=-EMAX ' MAKE ERROR LIMITS SYMMETRICAL FOR GRAPHING 5420 U = SQR(ERSQR/(N-M)) 5430 FOR I=1 TO M: T(I) = BETA(I)/(U * SQR(XXINV(I,I))) : NEXT I 5440 ' T HAS N-M DEGREES OF FREEDOM 5450 DW=0: FOR I=2 TO N:DW=DW+(ER(I)-ER(I-1))*(ER(I)-ER(I-1)):NEXT I 5460 DW=DW/ERSQR 'DURBAN-WATSON STATISTIC 5470 ' DISPLAY RESULTS ON SCREEN 5480 PRINT CHR$(&H1A):PRINT HEAD$:PRINT 5490 PRINT " ESTIMATED COEFFICIENTS: 5500 PRINT SPACE$(28) "t STATISTIC" 5510 F3$ = " #######.###" 'FORMAT FOR t STATISTIC 5520 FOR I=0 TO M-1 5530 IF I=0 THEN PRINT "INTERCEPT: "; ELSE PRINT "COEFF #"I": "; 5540 IF ABS(BETA(I+1))>100000! OR ABS(BETA(I+1))<.001 THEN F$="#.######^^^^" ELSE F$="######.#####" 5550 PRINT USING F$;BETA(I+1);:PRINT USING F3$;T(I+1) 5560 NEXT I 5570 Z=RSQR:PRINT " R SQUARED: "Z 5580 Z=F:PRINT " F STATISTIC: "Z 5590 PRINT USING "(degrees of freedom: ##_,###)";M-1,N-M 5600 Z=DW:PRINT " DURBAN-WATSON STATISTIC: "Z 5610 PRINT USING " (t degrees of freedom: ###)";N-M 5620 ' DISPLAY ERRORS 5630 MASK$="* | *" 5640 F$="###. #########.## #########.## #########.##" 5650 PRINT:GOSUB 6640 5660 PRINT CHR$(&H1A):A$=HEAD$:GOSUB 710:A$="* * ERRORS * *":GOSUB 710:PRINT:PRINT "OBS# OBSERVED ESTIMATED ERROR":PRINT 5670 FOR I=1 TO N:PRINT USING F$;I,Y(I),EST(I),ER(I):NEXT I 5680 PRINT:GOSUB 6640 'PRESS RETURN TO CONTINUE 5690 PRINT CHR$(&H1A):PRINT HEAD$:PRINT:PRINT "ERROR PATTERN:":PRINT 5700 M1$=STR$(CSNG(EMIN)):M2$=STR$(CSNG(EMAX)):L=LEN(M1$)+LEN(M2$):L=L/2:IF LLEN(F1$) THEN LPRINT"INDEP. VARIABLES:" ELSE LPRINT 6120 F$="###. "+F1$+" " 6130 K=INT((WID%-7)/LEN(F1$)): IF K>M THEN K=M 'NUMBER OF INDEP. VARIABLES THAT CAN BE DISPLAYED ON SCREEN 6140 FOR I=1 TO N 6150  LPRINT USING F$;I,Y(I); 6160 FOR J=2 TO K : LPRINT USING F1$;X(I,J); 6170 NEXT J:LPRINT:NEXT I 6180 IF K=M THEN 6280 'ALL INPUT DATA DISPLAYED 6190 L=INT((WID%-6)/LEN(F1$)):K2=K 6200 K1=K2+1:K2=K1+L-1:IF K2>M THEN K2=M 6210 GOSUB 6760:IF FLAG THEN A$=HEAD$:GOSUB 6740:A$=HEAD1$:GOSUB 6740 6220 LPRINT:LPRINT"INDEP. VARIABLES, CONTINUED:":LPRINT 6230 FOR I=1 TO N:LPRINT USING "###. ";I; 6240 FOR J=K1 TO K2:LPRINT USING F1$;X(I,J); 6250 NEXT J:LPRINT:NEXT I 6260 IF K2100000! OR ABS(BETA(I+1))<.001 THEN F$="#.######^^^^" ELSE F$="######.#####" 6370 LPRINT USING F$;BETA(I+1);:LPRINT USING F3$;T(I+1) 6380 NEXT I 6390 Z=RSQR:LPRINT " R SQUARED: "Z 6400 Z=F:LPRINT " F STATISTIC: "Z 6410 LPRINT USING "(degrees of freedom: ##_,###)";M-1,N-M 6420 Z=DW:LPRINT" DURBAN-WATSON STATISTIC: "Z 6430 LPRINT USING " (t degrees of freedom: ###)";N-M 6440 ' PRINT ERRORS 6450 A$="ERRORS":GOSUB 6680 6460 IF FLAG THEN 6620 6470 GOSUB 6760 6480 MASK$="* | *" 6490 F$="###. #########.## #########.## #########.##" 6500 IF FLAG THEN A$=HEAD$:GOSUB 6740:A$=" * * * ERRORS * * *":GOSUB 6740 6510 M1$=STR$(CSNG(EMIN)):M2$=STR$(CSNG(EMAX)):L=LEN(M1$)+LEN(M2$):L=L/2:IF LLEN(F1$) THEN PRINT#1,"INDEP. VARIABLES:" ELSE PRINT#1 8140 F$="###. "+F1$+" " 8150 K=INT((WID%-7)/LEN(F1$)): IF K>M THEN K=M 'NUMBER OF INDEP. VARIABLES THAT CAN BE DISPLAYED ON SCREEN 8160 FOR I=1 TO N 8170 PRINT#1, USING F$;I,Y(I); 8180 FOR J=2 TO K : PRINT#1, USING F1$;X(I,J); 8190 NEXT J:PRINT#1,:NEXT I 8200 IF K=M THEN 8300 'ALL INPUT DATA DISPLAYED 8210 L=INT((WID%-6)/LEN(F1$)):K2=K 8220 K1=K2+1:K2=K1+L-1:IF K2>M THEN K2=M 8230 IF FLAG THEN A$=HEAD$:GOSUB 8750:A$=HEAD1$:GOSUB 8750 8240 PRINT#1:PRINT#1,"INDEP. VARIABLES, CONTINUED:":PRINT#1 8250 FOR I=1 TO N:PRINT#1, USING "###. ";I; 8260 FOR J=K1 TO K2:PRINT#1, USING F1$;X(I,J); 8270 NEXT J:PRINT#1:NEXT I 8280 IF K2100000! OR ABS(BETA(I+1))<.001 THEN F$="#.######^^^^" ELSE F$="######.#####" 8390 PRINT#1, USING F$;BETA(I+1);:PRINT#1, USING F3$;T(I+1) 8400 NEXT I 8410 Z=RSQR:PRINT#1, " R SQUARED: "Z 8420 Z=F:PRINT#1, " F STATISTIC: "Z 8430 PRINT#1, USING "(degrees of freedom: ##_,###)";M-1,N-M 8440 Z=DW:PRINT#1," DURBAN-WATSON STATISTIC: "Z 8450 PRINT#1, USING " (t degrees of freedom: ###)";N-M 8460 ' PRINT ERRORS 8470 A$="ERRORS":GOSUB 8690 8480 IF FLAG THEN 8630 8490 MASK$="* | *" 8500 F$="###. #########.## #########.## #########.##" 8510 IF FLAG THEN A$=HEAD$:GOSUB 8750:A$=" * * * ERRORS * * *":GOSUB 8750 8520 M1$=STR$(CSNG(EMIN)):M2$=STR$(CSNG(EMAX)):L=LEN(M1$)+LEN(M2$):L=L/2:IF L"|" THEN L$=MID$(L$,2,LEN(L$)-1):GOTO 1094 1096 L$=MID$(L$,2,LEN(L$)-1) 1104 SUM = 1 1106 FLAG=0 1110 FOR J=1 TO NV 1120 IF FLAG=1 THEN T=1:V#=0:S$=Q$:GOTO 1170 1130 S$=MID$(L$,SUM,CW(J)):REM ** OBTAIN CELL INFO 1133 REM ** SET FLAG IF REST OF LINE IS BLANK 1135 IF CW(J)+SUM>=LEN(L$) THEN FLAG = 1 1140 GOSUB 5000:REM ** IS S$ A 'STRING' OR 'NUMBER' 1170 SUM=SUM+CW(J):REM ** INCREMENT ACROSS ROW 1180 GOSUB 4000:REM ** OUTPUT DATA VALUES 1190 NEXT J 1195 PRINT "ROW #";I-2;" COMPLETE" 1200 NEXT I 1210 T=-1:V#=0:S$="EOD":REM ** OUTPUT END OF DATA 1220 GOSUB 4000 1230 CLOSE 1240 PRINT"FINISHED CREATING DIF FILE ";G$ 1250 END 3000 REM ** ROUTINE TO WRITE OUT DIF HEADER 3010 PRINT#2,"TABLE":PRINT#2,"0,1":GOSUB 3500 3020 PRINT#2,"TUPLES":PRINT#2,"0,";NT:GOSUB 3500 3030 PRINT#2,"VECTORS":PRINT#2,"0,";NV:GOSUB 3500 3040 PRINT#2,"DATA":PRINT#2,"0,0":GOSUB 3500 3050 RETURN 3500 REM ** SUBROUTINE TO WRITE "" (NULL STRING) 3510 PRINT#2,CHR$(34);CHR$(34) 3520 RETURN 4000 REM ** ROUTINE TO WRITE OUT DATA VALUE 4010 PRINT #2,T;",";V# 4012 IF S$="BOT" OR S$="V" OR S$="EOD" THEN PRINT #2,S$:RETURN 4014 REM ** WRITE STRING TO DISK SURROUNDED BY QUOTES 4020 PRINT #2,CHR$(34)+S$+CHR$(34) 4030 RETURN 4040 END 5000 REM ** THIS SUBROUTINE DETERMINES WHETHER 5010 REM ** S$ IS A 'STRING' OR A 'NUMBER' 5012 REM ** IT IS ASSUMED THAT IF S$ 5014 REM ** CONTAINS ONLY NUMERIC VALUES 5015 REM ** OR A DECIMAL POINT AND IF THE 5016 REM ** CHARACTERS ARE TO THE 5018 REM ** RIGHTMOST PART OF THE STRING 5019 REM ** THEN S$ IS A NUMBER 5020 T=1:V#=0 5030 SS$=S$ 5040 C$=LEFT$(SS$,1) 5050 IF C$=" " THEN SS$=RIGHT$(SS$,LEN(SS$)-1):GOTO 5040 5055 IF SS$="" THEN S$="" :RETURN 5060 FLAGG=0 5070 FOR M=1 TO LEN(SS$) 5080 C$=MID$(SS$,M,1) 5090 IF ASC(C$)<46 OR ASC(C$)>57 THEN FLAGG=1 5100 IF ASC(C$)=47 THEN FLAGG=1 5110 NEXT M 5120 IF FLAGG =0 THEN T=0:V#=VAL(S$):S$="V" 5130 RETURN C$)>57 THEN FLAGG=1 5100 IF ASC(C$)=47 THEN FLAGG=1 5110 NEXT M 5120 IF 20 RETURN 4000 REM ** ROUTINE TO WRITE OUT DATA VALUE 4010 PRINT #2,T;",";V# 4012 IF S$="BOT" OR S$="V" OR S$="EOD" THEN PRINT #2,S$:RETURN 4014 REM ** WRITE STRING TO DISK SURROUNDED BY QUOTES 4020 PRINT #2,CHR$(34)+S$+CHR$(34) 4030 RETURN 4040 END 5000 REM ** THIS SUBROUTINE DETERMINES WHETHER 5010 REM ** S$ IS A 'STRING' OR A 'NUMBER' 5012 REM ** IT IS ASSUMED THAT IF S$ 5014 REM ** CONTAINS ONLY NUMERIC VALUES 5015 REM ** OR A DECIMAL POINT AND IF THE 5016 REM ** CHARACTERS ARE TO THE 5018 REM ** RIGHTMOST PART OF THE STRING 5019 REM ** THEN S$ IS A NUMBER 5020 T=1:V#=0 5030 SS$=S$ 5040 C$=LEFT$(SS$,1) 5050 IF C$=" " THEN SS$=RIGHT$(SS$,LEN(SS$)-1):GOTO 5040 5055 IF SS$="" THEN S$="" :RETURN 5060 FLAGG=0 5070 FOR M=1 TO LEN(SS$) 50 Augus 22, 1983 PROGRAM TO CONVERT SUPERCALC PRINT FILES TO VISICALC DIF FILES by Paul D. Bullock ɠ us SuperCal a hom o m Osborn an us Visical o Hewlet Packar 12 a work I i ofte helpfu t b abl t d wor o spreadshee a hom tha ha bee develope a wor an vic versa Visical use DI (Dat Interchang Format whe yo sav dat wit th /S comman an dat ca als b loade fro ᠠ DIƠ fil int Visicalc SuperCal ha th堠 "SuperDat Interchange wit versio 1.12 whic i probabl simila t DI bu ɠ don' hav i wit m versio s enoug o that Th proble the i t b abl t conver th SuperCal dat fro spreadshee t DI fil tha ca b rea int Visicalc creat th SuperCal sheet outpu th .PR file an creat th DIƠ fil o th Osborn a home The uploa th DI fil t ou company' timesharin hos an whe I' a m offic downloa th DI fil t th H 125 Whe th DI fil i rea int Visical wit th /S comman ("b column" reasonabl facsimil o th SuperCal shee i bor i Visicalc. Th progra SCTOVC.BA i MBASI use a it' basi th "Creatin DI File progra foun o pag o th Softwar Technica Art Not (SATN 1 entitle Programmer' Guid t DI date 1981 Th sam numberin i use an line change an adde t inpu an manipulat dat fro SuperCal .PRΠ file Th DI fil create ca b use t inpu th shee int Visical ("b column") O cours th formula an format ar no transferre fro on shee t th other. Usin th SuperCal / (Output comman wit th dis optio instea o th printe fil o th dat ca b created Yo mus b sur tha th widt i se wid enoug t comprehen th whol sheet thi ca b don usin th Setu procedur withi th Outpu command Als th shee mus b outpu wit th borde on Yes th borde mus b o o th leadin space o eac lin wil b los whe th SCTOVC.BA progra input fro th dis file Th progra wil thro awa th borde bu wil retai th leadin space i eac row Th progra wil as fo th fil name fo th SuperCal .PR fil t b rea i an fo th Visical .DI fil t b output Th use wil als b prompte t provid th numbe o SuperCal row an column an th widt o eac o th columns Visicalc o course ha onl equa colum width s car shoul b exercise whe creatin th shee i th firs place Perhap yo wil kee th SuperCal column equa o perhap yo wil selec th wides colum o th SuperCal shee t b th commo widt o th Visical sheet Afte strippin of th borde o th lef en o th ro string th progra the segment th ro of i strin length correspondin t th colum widths The certai logi i use t determin i th cel entr wa numbe o string Th subroutin a lin 500 determine th entr i numbe i i contain onl th intege characters(0-9 o decima point(. an i thes character ar a th rightmos en o th string Thi logi ca sometime lea t wron choice bu mino editin o th Visical spreadshee ca handl thes problems Doubl precisio i use wit al o th numeri variable s tha mor tha si significan digit ca b handle fo numeri values. a alway searchin fo better faster an easie way t d thi kin o thing s pleas sen idea an suggestion i yo hav an to: Paul D. Bullock 104 Heritage Drive Monroeville, Pa. 15146 80 REM ** ************* 85 REM ** VCTOSC.BAS 90 REM ** ************* 95 REM ** by Paul D. Bullock 100 PRINT"*******************************************" 110 PRINT"*******************************************" 120 PRINT"*** THIS PROGRAM READS A VISICALC DIF ***" 130 PRINT"*** FILE AND CREATES A SUPERCALC ***" 140 PRINT"*** EXECUTE FILE THAT WILL IN TURN ***" 150 PRINT"*** CREATE A SPREADSHEET ESSENTIALLY ***" 160 PRINT"*** THE SAME AS THE ORIGINAL ***" 170 PRINT"*** ***" 190 PRINT"*** NOTE ***" 200 PRINT"*** ***" 210 PRINT"*** THE VISICALC DIF FILE MUST BE ***" 220 PRINT"*** SAVED BY COLUMNS ***" 230 PRINT"*** ALSO THE SUPERCALC DIRECTION ***" 240 PRINT"*** INDICATOR MUST BE SET AS ' > ' ***" 250 PRINT"*** THIS CAN BE DONE BY MOVING THE ***" 260 PRINT"*** CURSOR TO THE RIGHT ONE CELL ***" 270 PRINT"*** BEFORE ISSUING THE EXECUTE ***" 280 PRINT"*** COMMAND ***" 290 PRINT"*** ***" 300 PRINT"*******************************************" 310 PRINT"*******************************************" 320 REM ** THIS PROGRAM HAS IT'S ROOTS FROM 330 REM ** THE "LISTING A DIF FILE" PROGRAM FROM 340 REM ** SATN-18 THE "PROGRAMMERS GUIDE TO DIF" 350 REM ** PUBLISHED BY SOFTWARE ARTS, INC 360 REM ** IN 1980 500 DIM T(100) :REM ** MAXIMUM OF 100 COLUMNS 510 DIM V#(100) :REM ** T,V,V$ HOLD THE 520 DIM V$(100) :REM ** TYPE INDICATOR, NUMBER 530 :REM ** VALUE AND STRING VALUE 540 :REM ** OF EACH ELEMENT IN A TUPLE 1000 GOSUB 5000 :REM ** CALL INITIALIZATION CODE 1010 GOSUB 6000 :REM ** READ HEADER 1011 REM ** THIS STATEMENT FORMATS CELL WIDTH TO CW 1012 PRINT#2,"/FG"+MID$(STR$(CW),2,LEN(STR$(CW))-1) 1020 FOR I=1 TO NT:REM ** READ ALL OF THE TUPLES(ROWS) 1030 PRINT "VALUES FOR ROW #"I 1040 GOSUB 7000 :REM ** GET A TUPLE(ROW) 1041 REM ** WHERE TO START THE SUPERCALC ROW 1042 PRINT #2,CHR$(61)+"A"+MID$(STR$(I),2,LEN(STR$(I))-1) 1050 FOR J=1 TO NV :REM ** OUTPUT EACH ELEMENT 1055 REM ** OUTPUT NUMERIC VALUE DOUBLE PREC. 1060 IF T(J)=0 THEN PRINT#2,V#(J) 1062 REM ** OUTPUT NOTHING IF CELL IS BLANK 1065 IF T(J)=1 AND V$(J)="" THEN PRINT#2,V$(J):GOTO 1080 1067 REM ** OUTPUT STRING WITH QUOTES 1070 IF T(J)=1 THEN PRINT#2,CHR$(34)+V$(J) 1080 NEXT J 1090 NEXT I 1100 CLOSE 1110 PRINT"FINISHED CREATING SUPERCALC FILE ";G$ 1120 END 5000 :REM ** INITIALIZATION CODE 5010 PRINT"ENTER VISICALC DIF FILE NAME" 5015 PRINT"INCLUDE THE .DIF" 5020 INPUT F$ :REM ** GET NAME OF FILE TO READ 5022 PRINT"ENTER THE COLUMN WIDTH IN VISICALC FILE" 5024 INPUT CW :REM ** ENTER COLUMN WIDTH 5030 OPEN "I",#1,F$:REM ** OPEN FILE FOR READ 5032 PRINT"ENTER SUPERCALC EXECUTE FILE NAME" 5034 PRINT"INCLUDE THE .XQT" 5036 INPUT G$ :REM ** ENTER NAME OF FILE TO CREATE 5038 OPEN "O",#2,G$:REM ** OPEN FILE FOR OUTPUT 5040 NV=0 :REM ** INIT VECTOR COUNT 5050 NT=0 :REM ** INIT TUPLE COUNT 5060 RETURN 6000 :REM ** READ HEADER, SET NV AND NT 6010 INPUT #1,T$ :REM ** GET TOPIC NAME 6020 INPUT #1,S,N :REM ** GET VECTOR NUMBER, VALUE 6030 INPUT #1,S$ :REM ** GET STRING 6040 IF T$="VECTORS" THEN 6500 :REM ** CHECK FOR KNOWN HEADER 6050 IF T$="TUPLES" THEN 6600 :REM ** ITEMS 6060 IF T$="DATA" THEN RETURN :REM ** DATA ENDS HEADER 6070 GOTO 6010 :REM ** IGNORE UNKOWN ONES 6500 NV=N :REM ** VALUE IS NUMBER OF VECTORS(COLS) 6510 PRINT"THE FILE HAS ";NV;" COLUMNS" 6520 IF NV<=100 THEN 6010 :REM ** IF NOT TOO MANY CONTINUE 6530 CLOSE :REM ** IF TOO MANY STOP 6540 STOP 6600 NT=N :REM ** VALUE IS NUMBER OF TUPLES(ROWS) 6610 PRINT"THE FILE HAS ";NT;" ROWS" 6620 GOTO 6010 :REM *** GET NEXT HEADER ITEM 7000 REM ** GET ALL VECTOR ELEMENTS IN A TUPLE 7010 GOSUB 8000 :REM ** GET NEXT DATA VALUE 7020 IF T1<>-1 THEN 9000 :REM ** MUST BE -1 AND 7030 IF S$<>"BOT" THEN 9000 :REM ** AND BOT OR ERROR 7040 FOR K=1 TO NV :REM ** GET EACH DATA VALUE 7050 GOSUB 8000 7060 IF T1=-1 THEN 9000 7070 V#(K)=V1# :REM ** SAVE VALUES AND TYPE 7080 V$(K)=S$ :REM ** INDICATOR 7090 T(K) =T1 7100 NEXT K 7110 RETURN 8000 REM ** GET NEXT DATA VALUE 8010 INPUT#1,T1,V1# :REM ** GET TYPE INDICATOR 8020 INPUT#1,S$ :REM ** NUMERIC VALUE AND STRING VALUE 8030 RETURN 9000 PRINT"ERROR IN FILE FORMAT" 9010 CLOSE 9020 STOP 20 INPUT#1,S$ :REM ** NUMERIC VALUE AND STRING VALUE 8030 RE510 PRINT"THE FILE HAS ";NV;" COLUMNS" 6520 IF NV<=100 THEN 6010 :REM ** IF NOT TOO MANY CONTINUE 6530 CLOSE :REM ** IF TOO MANY STOP 6540 STOP 6600 NT=N :REM ** VALUE IS NUMBER OF TUPLES(ROWS) 6610 PRINT"THE FILE HAS ";NT;" ROWS" 6620 GOTO 6010 :REM *** GET NEXT HEADER ITEM 7000 REM ** GET ALL VECTOR ELEMENTS IN A TUPLE 7010 GOSUB 8000 :REM **  August 22, 1983 PROGRAM TO CONVERT VISICALC DIF FILES TO SUPERSALC EXECUTE FILES by Paul D. Bullock I yo hav no alread rea th companio .DOà fil SCTOVC.DOC then read it now. Now don' hav t repea al o th genera rational fo developin th programs I i jus a usefu t g fro Visical t SuperCal an th progra VCTOSC.BA facilitate this ca creat Visical spreadshee a m office outpu th dat i DI file an uploa th DI fil t th timesharin host Whe a hom , ca the downloa th DI fil t th Osborne creat a eXecut fil usin VCTOSC.BA an execut thi fil int SuperCal wit th / command I yo hav a earlie versio o Supercal tha doesn' hav thi command sto reading thi progra i no fo you. A wit th companio program thi progra use a it' basi materia fro th Softwar Art Technica Not (SATN -18 Programmer' Guid t DIF Th "Listin DI File progra o pag 1 wa change an addition wer mad t manipulat an outpu th dat t th .XQ file. Th progra prompt th use fo th name o th inpu .DI fil an th outpu .XQ file Remembe tha th Visical .DI fil mus b save "b column. Th outpu fil mus hav th extensio .XQԠ o i wil no wor wit th /ؠ comman i SuperCalc Th progra als require th use t ente th Visical colum widt s tha th SuperCal shee ca b formatte t tha widt throug th execut file Th DIƠ fil carrie wit i th numbe o row an column i th sheet Prio t eXecutin th .XQ fil wit th /ؠ comman th directio indicato i th statu lin mus b se t '> s tha th curso wil mov t th righ whe carriag retur afte dat inpu i detected Th directio indicato i pointe t th righ whe powerin u i SuperCal s thi shoul no b proble whe startin ou o ne sheet T m knowledg ther i n SuperCal comman tha wil chang th directio indicator I helps also t us th /G comman prio t executin th / t deactivat th automati calculating thi ca spee u entry A th beginnin o eac ro th progra generate jum t cel comman (=A o =H1 t b use i th execut fil t mov th curso t th firs colum o th prope row Othe command coul b pu i th execut fil t satisf th need o certai applications Fo example promp coul as fo wher i th SuperCal shee yo wante th upperlef cel o th origina Visical sheet Doubl precisio i use throughou s tha number wit mor tha significan digit ca b accomodated. Pleas sen m suggestion o ho t d thi conversio fro Visical t SuperCal easier faster an better Thanks. Paul D. Bullock 104 Heritage Drive Monroeville, Pa. 15146 indicator I helps also t us th /G comman prio t executin th / t deactivat th automati calculating thi ca spee u entry A th beginnin o eac ro th progra generate jum t cel comman (=A o =H1 t b use i th execut fil t mov th curso t th firs colum o th prope row Othe command coul b pu i th execut fil t satisf th need o certai applications Fo example promp coul as fo wher i th SuperCal shee yo wante th upperlef cel o th origina Visical sheet Doubl precisio i use throughou s tha number wit mor tha significan digit ca b accomodated. Pleas sen m suggestion o ho t d thi conversio fro Vi10 REM VMAP2.BAS VERSION 2.0 10/24/83 20 ' 30 DEFINT A-Z 40 OPTION BASE 0 50 VER$ = "2.0" 60 ' 70 'SET-UP FOR OSBORNE 1 10/15/83 G. Dahl 80 ' 90 COMP = 0 ' FLAG FOR COMPILED VERSION 100 IF COMP THEN N=350 ELSE N= 80 ' BLINK SPEED 110 WIDTH 52: PRINT CHR$(&H1A); ' WIDTH FOR OSBORNE, CLEAR SCREEN 120 PRINT TAB(8)"BASIC VARIABLE MAP PROGRAM, Ver. "VER$:PRINT 130 PRINT TAB(8)"COPYRIGHT (C) 1983 BY GREGORY C. DAHL 140 IF COMP THEN PRINT TAB(7)CHR$(&H1B)CHR$(&H29)"PORTIONS COPYRIGHTED BY MICROSOFT, 1981"CHR$(&H1B)CHR$(&H28) ELSE PRINT 150 PRINT" This program is "CHR$(&H1B)CHR$(&H6C)"USER SUPPORTED SOFTWARE."CHR$(&H1B)CHR$(&H6D)" If you 160 PRINT" find it useful and wish to encourage the develop- 170 PRINT" ment of new programs, you are invited to send a 180 PRINT" contribution to the author: 190 PRINT TAB(17) "Gregory C. Dahl 200 PRINT TAB(17)"4050 Arroyo Trail 210 PRINT TAB(17)"Carmel, CA 93923 220 PRINT" All contributors sending $10 or more will receive 230 PRINT" a diskette with the latest version of this program 240 PRINT" and its documentation, as well as other programs 250 PRINT" by the same author. Contribute as much as you feel 260 PRINT" the program is worth to you, and send your comments 270 PRINT" too! Be sure to specify double or single density 280 PRINT" and the name of the program you want. 290 PRINT CHR$(&H1B)CHR$(&H29)" (Offer subject to change without notice)" CHR$(&H1B)CHR$(&H28) 300 PRINT" This program is copyrighted and may not be sold 310 PRINT" for profit without written permission from the 320 PRINT" author. However, free copies may be made and 330 PRINT" distributed without limitation. Pass it around! 340 PRINT " Press any key to continue..."; 350 FOR I=1 TO N:A$=INKEY$:IF A$<>""THEN 390 ELSE NEXT I 360 PRINT CHR$(13)" "CHR$(13); 370 FOR I=1 TO N:A$=INKEY$:IF A$<>""THEN 390 ELSE NEXT I 380 GOTO 340 390 PRINT CHR$(&H1A):PRINT:PRINT TAB(8)"BASIC VARIABLE MAP PROGRAM, Ver. "VER$:PRINT 400 IF COMP THEN PRINT ELSE PRINT TAB(8)CHR$(&H1B)CHR$(&H29)"ALSO AVAILABLE IN A COMPILED VERSION":PRINT TAB(10)"WHICH RUNS ABOUT 15 TIMES FASTER"CHR$(&H1B)CHR$(&H28):PRINT:PRINT 410 '------------------------------------------------------------- 420 'INITIALIZATION SEGMENT 10/15/83 GCD 430 ' 440 K=132: DIM K$(132) :'NUMBER OF BASIC COMMANDS IN DATA FILE 450 M=400: 'MAX NUMBER OF VARIABLES (CAPACITY) 460 DIM H(9) ' USED IN SORT ROUTINE 470 DIM V$(400), NL%(400), LL$(400), PA%(400), LN$(25), NT%(400), L2(25), L2$(25) 480 ' V$(M) CONTAINS VARIABLE NAMES 490 ' NL%(M) IS THE LAST LINE REFERENCE FOR EACH VARIABLE 500 ' LL$(M) IS LINE REFERENCES, EACH 6 CHARACTERS 510 ' PA%(M) IS A VECTOR OF ASCENDING INTEGERS USED IN THE SORT ROUTINE 520 ' LN$(25) IS STRINGS OF ALL LINE NUMBERS IN THE PROGRAM 530 ' (FOR VALIDITY CHECKS OF GOTO'S) 532 ' L2(25) CONTAINS INDEX POINTERS TO V$ FOR OVERFLOW 533 ' LINE NUMBERS IN L2$ 534 ' L2$(25) IS OVERFLOW LINE NUMBERS WHICH DON'T FIT IN LL$ 540 FOR I=1 TO K: READ K$(I): NEXT I: 'LOAD DATA K$ 550 ' 560 '---------------------------------------------------------- 570 'BATCH BUILD SEGMENT, 10/15/83 GCD 580 ' 590 INPUT "PROCESS LAST BATCH SETUP (Y/) ";I$: IF I$="Y" OR I$="y" THEN GOTO 800 600 PRINT 610 OPEN "O",#1,"VMAPDATA" 620 PRINT"NOTE: THE INPUT FILE MUST BE IN ASCII FORMAT.":PRINT 630 INPUT" INPUT FILE NAME ";PN$ 640 INPUT" BEGIN AT LINE NUMBER <1> ";X:IF X>0 THEN LB!=X ELSE LB!=1 650 INPUT" END AT LINE NUMBER <65529> ";X:IF X>0 THEN UB!=X ELSE UB!=65529! 660 INPUT" DO YOU WANT A PRINTOUT (Y/)";PT$:IF PT$="y" THEN PT$="Y" 670 PRINT" DO YOU WANT TO WRITE 680 INPUT" OUTPUT TO A FILE (Y/) ";FOUT$:IF FOUT$="y" THEN FOUT$="Y" 690 FLNAME$="":IF FOUT$="Y" THEN INPUT" NAME OF OUTPUT FILE: ",FLNAME$ 700 PRINT:PRINT" ADD ANOTHER PROGRAM 710 INPUT" TO THE BATCH? (Y/)";I1$ 720 IF I1$="y" THEN I1$="Y" 730 WRITE#1,PN$,LB!,UB!,PT$,I1$,FOUT$,FLNAME$ 740 IF I1$<>"Y" THEN CLOSE: GOTO 800 750 PRINT: GOTO 630 760 ' 770 '---------------------------------------------------- 780 'MAPPING SEGMENT FOR BASIC FILES, 07/27/81, JWC 790 ' 800 OPEN "I",#1,"VMAPDATA" 810 IF EOF(1) THEN CLOSE: END 820 FOR I=1 TO M:PA%(I)=I:NEXT I: 'COUNT 1 TO M PA% 830 DEF FNA$(A)=MID$(STR$(A),2) 840 INPUT#1,PN$,LB!,UB!,PT$,I1$,FOUT$,FLNAME$ 850 IF INSTR(PN$,".")=0 THEN PN$=PN$+".BAS" 860 OPEN "I",#2,PN$ 870 PRINT:PRINT:PRINT"*** LINES BEING PROCESSED:": 880 PRINT:PRINT"===> variable name [variable #] (# times on line)":PRINT:PRINT 890 IF EOF(2) THEN 930: 'END OF SOURCE FILE FINISH PROCESSING 900 S=0:H=0:O=0:Q=0:LINE INPUT#2,L$ 910 GOSUB 1550 ' PROCESS A LINE 920 IF N+32767!0 THEN GOSUB 1150: IF FLAG THEN PRINT CHR$(7) TAB(7) "**"; ' CHECK FOR INVALID LINE REF. 1005 LT$=LL$(PA%(I)) 1010 PRINT TAB(14);"-";:J=2 1020 J2=J+35:IF J2>LEN(LT$) THEN J2=LEN(LT$):GOTO 1050 1030 FOR J3=J2 TO 1 STEP -1:IF MID$(LT$,J3,1)=" " THEN J2=J3:GOTO 1050 1040 NEXT J3 1050 PRINT TAB(16) MID$(LT$,J,J2-J+1):J=J2+1 ' PRINT LINE REFS. 1060 IF JLT$ THEN LT$=L2$(JQ):GOTO 1010 1068 NEXT JQ 1070 NEXT I 1080 PRINT:PRINT " ** INDICATES AN INVALID LINE REFERENCE":PRINT 1090 CLOSE #2 1100 IF FOUT$="Y" THEN GOSUB 1390 ' FILE OUTPUT 1110 IF I1$<>"Y" THEN 2670 1120 GOTO 820 1130 ' 1140 ' TEST VALIDITY OF LINE REF. 1150 FLAG=-1:FOR JQ=0 TO LNP : IF INSTR(LN$(JQ),STR$(VAL(V$(I)))+" ")>0 THEN FLAG=0:RETURN 1160 NEXT JQ: RETURN 1170 ' 1180 '----------------------------------------------- 1190 'PRINTER SUBROUTINE 1200 ' 1210 LC=0: GOSUB 1340 1220 FOR I=1 TO NF: LPRINT STR$(I)"." TAB(6);V$(I);: IF VAL(V$(I))>0 THEN GOSUB 1150: IF FLAG THEN LPRINT TAB(13) "**";:PRINT CHR$(7)"INVALID LINE REF " V$(I) 1225 LT$=LL$(PA%(I)) 1230 IF LC>60 THEN GOSUB 1330:GOSUB 1340 ' PAGINATION 1235 LPRINT TAB(18);"-";: J=2 1240 J2=J+60:IF J2>LEN(LT$) THEN J2=LEN(LT$):GOTO 1270 1250 FOR J3=J2 TO 1 STEP -1:IF MID$(LT$,J3,1)=" " THEN J2=J3:GOTO 1270 1260 NEXT J3 1270 LPRINT TAB(20) MID$(LT$,J,J2-J+1):J=J2+1:LC=LC+1 ' PRINT LINE REFS. 1280 IF JLT$ THEN LT$=L2$(JQ):GOTO 1230 ' PRINT OVERFLOW 1286 NEXT JQ 1290 LPRINT:LC=LC+1 1300 IF LC>58 THEN GOSUB 1330 :GOSUB 1340' PAGINATION 1310 NEXT I 1320 LPRINT:LPRINT " ** INDICATES AN INVALID LINE REFERENCE" 1330 FOR IK=LC TO 65: LPRINT: NEXT IK: LC=0: RETURN: ' NEXT PAGE 1340 LPRINT:LPRINT:LPRINT TAB(5);"LIST OF VARIABLES FOR PROGRAM " ;PN$;TAB(55) "LINES";NL+32767;"TO";N+32767:LPRINT:LC=LC+4: RETURN 1350 ' 1360 '------------------------------------------------------------- 1370 'OUTPUT TO DISK SUBROUTINE 1380 ' 1390 OPEN "O",#3,FLNAME$ 1400 PRINT#3,TAB(5)"LIST OF VARIABLES FOR PROGRAM " PN$ TAB(55) "LINES" NL+32767! "TO" N+32767!:PRINT#3, 1410 FOR I=1 TO NF: PRINT#3,STR$(I)"." TAB(6);V$(I);: IF VAL(V$(I))>0 THEN GOSUB 1150: IF FLAG THEN PRINT#3,TAB(13) "**";:PRINT CHR$(7)"INVALID LINE REF " V$(I) 1415 LT$=LL$(PA%(I)) 1420 PRINT#3,TAB(18);"-";: J=2 1430 J2=J+60:IF J2>LEN(LT$) THEN J2=LEN(LT$):GOTO 1460 1440 FOR J3=J2 TO 1 STEP -1:IF MID$(LT$,J3,1)=" " THEN J2=J3:GOTO 1460 1450 NEXT J3 1460 PRINT#3,TAB(20) MID$(LT$,J,J2-J+1):J=J2+1' PRINT LINE REFS 1470 IF JLT$ THEN LT$=L2$(JQ):GOTO 1420 1476 NEXT JQ 1480 PRINT#3, 1490 NEXT I 1500 PRINT#3,:PRINT#3," ** INDICATES AN INVALID LINE REFERENCE":CLOSE#3:RETURN 1510 ' 1520 '------------------------------------------------------------- 1530 'VARIABLE SEARCH SUBROUTINE 1540 ' 1550 R=0:V=0:X=INSTR(L$," "):N=VAL(LEFT$(L$,X))-32767!: S$=MID$(L$,X+1) 1560 FOR I=1 TO M:NT%(I)=0:NEXT I ' INITIALIZE NT% 1565 NLS=NLS+1:FL=FL+LEN(L$)+2 ' # LINES AND FILE LENGTH 1570 ' N is line # - 32767 1580 ' NT% IS # OF TIMES A VBLE APPEARS ON THIS LINE 1590 IF N+32767!>UB!THEN RETURN 1600 IF N+32767! ";:IF NOT XN%THEN XN%=-1:NL=N ' CAPTURES FIRST LINE # FOR PRINTOUT 1610 LN$(LNP)=LN$(LNP)+STR$(N+32767):IF LEN(LN$(LNP))>248 THEN LN$(LNP)=LN$(LNP)+" ": LNP=LNP+1 ' ADD LINE # TO LN$ 1620 IF LEFT$(S$,1)=" "THEN S$=MID$(S$,2):GOTO 1620 1630 IF INSTR(S$,"DATA")=1 THEN RETURN 1640 I=INSTR(S$,"OPTION BASE"): IF I<>0 THEN S$=LEFT$(S$,I-1)+MID$(S$,I+11) ' TAKE OUT "OPTION BASE" 1650 ' LOOP THROUGH LENGTH OF LINE, BY CHARACTER: 1660 FOR I=1 TO LEN(S$) 1670 ' IF LEN(S$)-I>1 THEN IF MID$(S$,I,3)="REM" THEN RETURN 'IGNORE REMARKS 1680 X$=MID$(S$,I,1):X=ASC(X$) 1690 ' V IS TRUE WHEN A VARIABLE HAS BEEN FOUND 1700 ' S IS FLAG FOR & 1710 ' H IS FLAG FOR &H (HEX NUMBER) 1720 ' O IS FLAG FOR &O (OCTAL NUMBER) 1730 ' Q IS FLAG FOR " STRING 1740 ' DISCARD HEX AND OCTAL NUMBERS: 1750 IF NOT S THEN 1810 1760 IF H THEN IF(X=>48 AND X<=57)OR(X=>65 AND X<=70) THEN 1950 ELSE H=0:S=0:GOTO 1810 ' CHECK FOR 0-9,A-F 1770 IF O THEN IF(X=>48 AND X<=57)THEN 1950 ELSE O=0:S=0:GOTO 1810 1780 IF X=72 AND NOT H THEN H=-1:GOTO 1950 ' CHECK FOR H 1790 IF X=79 AND NOT O THEN O=-1:GOTO 1950 ELSE S=0:H=0:O=0 'CHECK FOR O 1800 ' END CHECK FOR HEX, OCTAL. CHECK FOR ": 1810 IF X=34 THEN IF Q THEN Q=0:V$="":GOTO 1950 ELSE Q=-1:GOTO 1950 1820 IF Q THEN 1950 1830 IF X=39 THEN RETURN: 'REMARK BEGINNING WITH ' 1840 IF X=38 THEN S=-1:GOTO 1950 ' CHECK FOR & 1850 IF X=35 THEN IF V$="WRITE" OR V$="INPUT" OR V$="PRINT" OR V$="CLOSE" THEN V$=X$:GOTO 1950 'CHECK FOR WRITE#n, ETC. 1860 IF(X=>48 AND X<=57) OR (X=>65 AND X<=90) OR X=46 THEN IF V THEN V$=V$+X$: GOTO 1950 ELSE V$=X$:V=-1:GOTO 1950 ' VLBES COMPOSED OF 0-9,A-Z OR . 1870 IF X=35 AND NOT V THEN V$=X$:V=-1:GOTO 1950 1880 IF X=35 OR X=36 OR X=37 OR X=33 THEN V$=V$+X$: GOTO 1910 '!#$% TERMINATE VBLE NAME 1890 ' IF X=40 AND V THEN V$=V$+X$ 1900 IF NOT V THEN 1950 1910 GOSUB 2000:V=0 1920 IF JZ<5 AND NOT R THEN GFLAG=-1 ELSE GFLAG=0 'SET GFLAG IF RESERVED WORD IS A GOTO, GOSUB, ETC. 1930 ' JZ IS POSITION OF RESERVED WORD IN K$ 1940 IF R THEN RETURN ' R IS FLAG FOR REM OR DATA 1950 NEXT I:IF NOT V THEN RETURN 1960 ' 1970 '------------------------------------------------------ 1980 'KEYWORD COMPARE SUBROUTINE 1990 ' 2000 IF V$="REM"OR V$="DATA"THEN R=-1 2010 ' STOP ' DEBUG * * * * * * * * * 2020 IF NOT GFLAG THEN 2050 2030 GFLAG=0:IF VAL(V$)>0 THEN JZ=50: GOTO 2130 'TREAT NUMBERS AFTER GOTO, ETC., AS VARIABLE 2040 ' GET RID OF NUMBERS: 2050 IF VAL(V$)<>0 OR LEFT$(V$,1)="0" OR LEFT$(V$,1)="." THEN V$=MID$(V$,2):GOTO 2050 2060 IF V$="(" OR V$="" OR V$="!" OR V$="%" OR V$="#" THEN RETURN 2070 ' LOOP THROUGH RESERVED WORDS: 2080 FOR J=1 TO K:IF INSTR(V$,K$(J)) =0 THEN 2100 2090 IF V$=K$(J)THEN JZ=J:RETURN: 'RESERVED WORD FOUND 2100 NEXT J: JZ=J 2110 ' IF HAVEN'T RETURNED BY NOW, WE HAVE A VARIABLE 2120 ' IF IN%THEN PRINT";";:ELSE IN%=-1 ' prints ; except at beginning 2130 IF NF=0 THEN 2230 2140 FOR J=1 TO NF ' SEE IF VBLE ALREADY IN TABLE 2150 IF V$<>V$(J)THEN 2210 2160 NT%(J)=NT%(J)+1:PRINT V$;"(";FNA$(NT%(J));") "; 2170 IF NL%(J)<>N THEN GOTO 2270 ' FIRST APPEARANCE OF VBLE ON LINE 2171 ' PUT LL$(J) IN TEMPORARY STRING LT$; GO TO OVERFLOW IF NECESSARY 2172 LT$=LL$(J):IF LEN(LT$)<245 THEN 2178 2174 FOR JT=25 TO 0 STEP -1 :IF L2(JT)=J THEN LT$=L2$(JT):GOSUB 2180:L2$(JT)=LT$:RETURN 2176 NEXT JT 2178 GOSUB 2180: LL$(J)=LT$:RETURN 2180 IF RIGHT$(LT$,1)<>")" THEN LT$=LT$+"("+FNA$(NT%(J))+")":RETURN ' SECOND OCCURRENCE OF VLBE ON LINE 2190 FOR JQ=2 TO 4:IF MID$(LT$,LEN(LT$)-JQ,1)="(" THEN LT$=LEFT$(LT$,LEN(LT$)-JQ)+FNA$(NT%(J))+")":RETURN '3rd OR HIGHER OCCURRENCE 2200 NEXT JQ:RETURN 2210 NEXT J 2220 IF NF=M OR FRE("")<500 THEN PRINT:PRINT"OUT OF ROOM FOR VARIABLES, "; "CONTINUE NEXT RUN...":GOTO 930 2230 NF=NF+1:PRINT V$;"[";FNA$(NF);"] "; 2240 V$(NF)=V$: NT%(J)=1 2250 J=NF 2260 ' ADD CURRENT LINE NUMBER TO LL$ FOR THIS VBLE: 2270 IF LEN(LL$(J))<245 THEN LL$(J)=LL$(J)+STR$(N+32767):GOTO 2280 2271 ' FIND THIS VARIABLE IN OVERFLOW LINE BUFFER L2$ 2272 FOR JQ=0 TO 25:IF L2(JQ)=J AND LEN(L2$(JQ))<245 THEN 2278 2274 IF L2(JQ)=0 THEN L2(JQ)=J:GOTO 2278 2276 NEXT JQ:PRINT CHR$(7)"OVERFLOW BUFFER FOR LINE NUMBERS IS FULL.":PRINT "MAP YOUR PROGRAM IN SEGMENTS.":GOTO 2670 2278 IF LEN(L2$(JQ))<245 THEN L2$(JQ)=L2$(JQ)+STR$(N+32767) ELSE PRINT CHR$(7) "OVERFLOW LINE BUFFER FOR "V$"IS FULL":PRINT"LINE "N+32767" STOPPING.":GOTO 2670 2280 NL%(J)=N:RETURN 2290 ' 2300 '----------------------------------------------------------- 2310 'SORT SUBROUTINE 2320 ' 2330 H(1)=1: H(2)=4: H(3)=13: T=1 2340 IF H(T+2)<5000 THEN T=T+1:H(T+2)=3*H(T+1)+1:GOTO 2340 2350 IF NF=0 THEN RETURN ELSE FOR T=1 TO 6:IF H(T+2)0 AND VAL(V$(II))<>0 AND VAL(V$)0 AND VAL(V$)=0 THEN TEST=-1 ' V$(II) A LINE # AND V$ A VBLE. 2410 IF TEST THEN V$(II+H)=V$(II):PA%(II+H)=PA%(II):NEXT 2420 V$(II+H)=V$:PA%(II+H)=PA%:NEXT JJ,S 2430 RETURN 2440 ' 2450 '------------------------------------------ 2460 ' MICROSOFT BASIC RESERVED WORDS 2470 DATA GOTO,GOSUB,THEN,ELSE 2480 ' THESE GOTO STATEMENTS MUST BE FIRST! 2490 DATA ABS,AND,ASC,ATN,AUTO,CALL,CDBL,CHAIN,CHR$,CINT,CLEAR,CLOAD,CLOSE 2500 DATA COMMON,CONT,COS,CSAVE,CSNG,CVD,CVI,CVS,DATA,DEF 2510 DATA DEFDBL,DEFINT,DEFSNG,DEFSTR,DELETE,DIM,EDIT,END 2520 DATA EOF,EQV,ERASE,ERL,ERR,ERROR,EXP,FIELD,FILES,FIX,FOR 2530 DATA FRE,GET,HEX$,IF,IMP,INKEY$,INP,INPUT,INPUT$,INSTR 2540 DATA INT,KILL,LEFT$,LEN,LET,LINE,LIST,LLIST,LOAD,LOC,LOF,LOG,LPOS 2550 DATA LPRINT,LSET,MERGE,MID$,MKD$,MKI$,MKS$,MOD,NAME,NEW,NEXT,NOT,NULL 2560 DATA OCT$,ON,OPEN,OPTION,OR,OUT,PEEK,POKE,POS,PRINT,PUT,RANDOMIZE 2570 DATA READ,REM,RENUM,RESET,RESTORE,RESUME,RETURN,RIGHT$,RND 2580 DATA RSET,RUN,SAVE,SGN,SIN,SPACE$,SPC,SQR,STEP,STOP,STR$,STRING$ 2590 DATA SWAP,SYSTEM,TAB,TAN,TO,TROFF,TRON,USING,USR,VAL,VARPTR,WAIT 2600 DATA WEND,WHILE,WIDTH,WRITE,XOR 2610 ' 132 entries 2620 ' LIST RESERVED WORDS: 2630 LPRINT "MICROSOFT BASIC RESERVED WORDS:":LPRINT:LPRINT 2640 FOR J=1 TO K/3:LPRINT STR$(J)"."TAB(7)K$(J)TAB(25)STR$(J+K/3)"."TAB(31)K$(J+K/3)TAB(50)STR$(J+2*K/3)"."TAB(56)K$(J+2*K/3):NEXT J 2650 END 2660 ' CLOSING 2670 PRINT:PRINT:PRINT "MEMORY USE STATISTICS: 2680 PRINT:PRINT 2690 PRINT" FREE MEMORY: " FRE(""):PRINT 2700 PRINT" VARIABLES FOUND: " NF TAB(37) "MAX: " M 2710 PRINT 2720 PRINT" LINE # LIST STRINGS: " LNP TAB(37) "MAX: 25":PRINT 2730 PRINT" # OF LINES PROCESSED: " NLS:PRINT 2740 PRINT" LENGTH OF PROGRAM FILE:" FL 2760 PRINT:PRINT:PRINT" * * * END OF PROGRAM * * *":END SSED: " NLS:PRINT 2740 PRINT" LENGTH OF PROG,OUT,PEEK,POKE,POS,PRINT,PUT,RANDOMIZE 2570 DATA READ,REM,RENUM,RESET,RESTORE,RESUME,RETURN,RIGHT$,RND 2580 DATA RSET,RUN,SAVE,SGN,SIN,SPACE$,SPC,SQR,STEP,STOP,STR$,STRING$ 2590 DATA SWAP,SYSTEM,TAB,TAN,TO,TROFF,TRON,USING,USR,VAL,VARPTR,WAIT 2600 DATA WEND,WHILE,WIDTH,WRITE,XOR 2610 ' 132 entries 2620 ' LIST RESERVED WORDS: 2630 LPRINT "MICROSOFT BASIC RESERVED WORDS:":LPRINT:LPRINT 2640 FOR J=1 TO K/3:LPRINT STR$(J)"."TAB(7)K$(J)TAB(25)STR$(J+K/3)"."TAB(31)K$(J+K/3)TAB(50)STR$(J+2*K/3)"."TAB(56)K$(J+2*K/3):NEXT J 2650 END 2660 ' CLOSING 2670 PRINT:PRINT:PRINT "MEMORY USE STATISTICS: 2680 PRINT:PRINT 2690 PRINT" FREE MEMORY: " FRE(""):PRINT 2700 PRINT" VARIABLES FOUND: " NF TAB(37) "MAX: " M 2710 PRINT 2720 PRINT" LINE # LIST STRINGS: " LNP TAB(37) "MAX: 25":PRINT 2730 PRINT" # OF LINES PROCESSED: " NLS:PRINT 2740 PRINT" LENGTH OF PROG+"6# x+:`i* ">"/##~>;+> 6*s#r w+͊1>2 u+#w+>36*s#rw+6*xDM"+ڍ+s#r#À+! >2:*ã+6*x+Á*~#ʽ+#~+ҽ+~+x 6*s#rw+ɯ2,x_O:*+2,x_O6*9w#w+x,+r+s=,w>#w+Á*~7^#VE,E,!~ѧ7x1P*x1~7!~#fo~ʁ,7,#~+~w}D#wx#1]*KÄ,!9*?>":u,2g>2u:u, PJ-,O:u,-!l{Ps",͖Q!-gQH-*fx-͸QP'-͌Q!l>P͍PH-@]T}_|H-)>-x1P*I&>4ͺ-K3y=d-e#x2#~+Œ-x-xGe#>.xʛ-e#>.xG ʩ->.x#~+>.>X6*s#r+}*W!-K^#V#~.    !> .!> .! > .!> .!> .O*yK !.KF͊1q-x2.H.u+w.#N+͊1q-ڱ.xn.#~+j..n.y. u+w!~#fo#~#w:.ʏ.6~+ž.~ ž.6 «.~«.63ó.ɀ @ PPPPPP #..~.+u+w#w+e#*#~6+/]*6#s#r>6###s#r#6@"=#w:uGf?/b!/####~#B/F#N#~#fo~#fox/ LU/##~>O͖,6#p#6 ####yKͶ,+w~39;5!/K~2>"@&0:/3-3>".͊1P*/ 00`i)9^#V!~`-y0#~#fo##A:x03x>". U0^#V#ͩ+3> ".10#~͸/o&"f>2u./ͩ+3> "."0xGO>$6*H"0s#r# ‹0H +V+^ͩ+s#r#  0͸/w*0w+3yO0e#0e#0**}_|W09LM Bytes Free 201:#x1:>"~>"###^#V"*:Z1L>f1j1#{z+j1>""K3>?ú-:#*#Ͱ2#"#*O*QL{#+V+^"QP*ʴ1ʺ1e#ͩ+þ1++~=w21~#foP*~#!1K~"X[ P*#~+>>2#x1>2#P*|/2!~#@2~#fo32W2##~#~#3232.x1-P*@&b&e#> 2q" 3y2323O]*#s#r+++++++~ʩ2 }|x2!^#Vz< 3z3wL 3DM!35©2x3~͸/! 3=2DM++++r+s:3Oýe#!e#*Qs#r#"Q{z#~+e#*Q++"Q:!9"d3!c3"#̓3[1*"!"""#!"2*"!~#fo3"v=##~#fo]=i=ʷ3͈4͍4͒4å3~Yʿ3=3͋;: >*fM#r+s++Ï3*>$4!~#fo~~Z= ' 6* >K>K!N#F*v=~#fo##^#VX!~#fo"4++~+ng##^#V~4#####~#~*v=w#w#~#fo>wq#p>Ô4>Ô4>*323ͤ423~4]=i=ʼ4ͤ4ð44x½4:3=444{8E55t654{8t6~5<5^#V><5><5H=5><5#~55####^#V<5>###w~2=H=G5N#^#V#~#fo ^,5^,|5F͙9Fx 5~5O!~#fo^,ڿ5"5"5~#F!5w#p+͙9! s#r`iF~ !N#F# 55! F+N+p+q ͈4s#r ~ 6 2k6^#V#~#fo7^,h6"p6!N#F#~#fo^,h6"r6!q#p!l6w+͙9͈4DM!q#p#q#pF z~0![K~O6:3y ʭ6##~++!~#fo!,WyJ!L66717?7L77678~#fo~ 98y>!O8y98D8~#fo~98=wG-3##~#fo3> ".͊1͈46  s#ryP98D8~#fo~4Fy`98@`##~#fo ~#fo ~#foyL}zC5###pywG##^#V~ʧ77!,7@`7! ~<7#~7"7!7͙9! s#r`i4F##~#fo"828!8͙9s#r6F p>͈4>6*s#rw+F##~#fo6 F5G2x8!5###yw> 6*s#r6+~H=O88ʚ8~ڱ8N#F#^#V ڵ8 +++p+q+r+s8##>w++F~!'K~wFFH 8yO^#V#~#fo:3 9~n9n999Í8:309x i9 H9DM!~#fo### i9i9! ~#~! {8r+sÖ9 Ns#Fr^q#Vp++xw{8r+sFF~2M:##~2N:##~#N#F#^#V=´9PY! N#F!^#V6: !:K~2u!lK!f9!bK:N:m;:M:!:!O:K^#Vs"!uw> "~./! s#r`i#w+! N#F!yw#xw :::: : : : : :::; ;;#;3;C;{#Q>͌Q>͸Q>Q:g> ">2uOT];ÊNU];NU;RU;@SҾS:U;R];{MҷS:U;ýR];xMU;åS*f:mg:lotQ*fL+tQ*f:mg:lotQ*f:mg:lotQ*l:g/g:f/otQ*f*l;P*l"f*n"h:uGl!f;!bNwy#;U=i=ʨ;ͷ;yʏ;;Ï; µ;;~4{####6+~++;]=i=;ͷ;;@<~#fo~;~#fo#~+~^#V2#<2=~#foG3##~#fo~0<#####~#~<<^#Vs#r<i<i"*##s#rq#p !#'()+,-.06#~6+E5#w+~=w!%=K~go A= *K!^[oR=$~##~O++###^#VBâ,r+sx##^#Vɍ@CVMAP2 RELp=>?@ABCDEFGHIJpVMAP2 PRNVMAP2 ASCy 0123456789:;&"!y)"b*RTdn#)!@B Bh31C !A^T!" * |7!^"=!P"!4Z6N!2UKL6N!͗N!AKL! oL6N!AoL6N!͗N!AoL* |ʺ6N!͗N!2UKL!)2UKL!lAKL!2UKL!(2UoL6N!AoL6N!XAKL!2UKL!l2UKL!=AKL!2UKL!m2UKL!2AoL6N!@oL6N!@oL6N!@oL6N!͗N!@oL6N!͗N!@oL6N!͗N!q@oL6N!;@oL6N!@oL6N!?oL6N!?oL6N!a?oL6N!,?oL6N!?oL6N!2UKL!)2UKL!>KL!2UKL!(2UoL6N!>oL6N!l>oL6N!:>oL6N!>oL6N!=KL*"!}G^T!AUs*#"**z|}|6N! 2UKL!=KL! 2UKL*"!X}G^T!AUs*#"**z|l}|@6N!2UoL6N!AoL6N!͗N!=KL! oL6N!AoL* |ʺ6N!AoL6N!͗N!2UKL!)2UKL!g=oL6N! ͗N!D=KL!2UKL!(2UoL6N!AoL6N!AoL!"!"*"]!9*QzS*#"**]z|M}|&! =JAI!_}J_!=͹U_!=͹U|g}o|'6N!AoL!=)ڶ!V |8)!*)^#V*)I^#V}o|go*Q"!ʹU|g}o|*^TÛ*#"*|8)r*#"**z|}|=6N!AoL6N!:oL6N!AoL!|fr!=U* ͍#x!=UX7M!"*"!Ë *Qk*QV!rfU!(;ͤTAV|ڇ ʇ !"*#"**z| }|J !")#*"!"LN*NUKL!;KL!͗N!AKL*QKLVQ/!8 *|/!LN! ͗N!:KL6N!2UKL!:KL*QoL*)I^#VQ ^T*|8)_!")#LN!͗N!AKL!:KL!"<*"!V*z|!}|Ҫ!!V"!*!*!U!(;U!*"!*+"*|8)Ұ!LN!͗N**R#UoL*#"*#"!V*R!">)z!!V |8)ڪ"!Ø"*)^#V*)I^#V}o|go*Q"!ʹU|g}o|ʔ"*^TJ!*#"*|8)="LN!AoL*#"*|8)"")#*#"**z|"}|ҹ LN!AoLLN!:oL*#LN!AoL*#"*|8)#!"LN!AoLLN!AoLLN!͗N!AKL!p:KL!bKL!7͗N!h:KL*BL!c:KL*fLLN!AoL*####"!=)ڸ$!V |8)%!%*)^#V*)I^#V}o|go*Q"!ʹU|g}o|%*^TÚ$*#"*|8)w%!M!AoL*#"**z|&}|$!M!AoL!M!:oL!|f!""!(;AV"e*eTVOBR"*e#!U^T*"!É&*)s#r*#"**z|&}|w&*#"!V*##"*tQOAPk&*tQOAPg&6N!AoL6N!oL6N![:KL*|/g}/o|'!"*"*Qk"k*NUͤT*͑T"kV|8)z'*k*k!(;ͤT͑T*#"!T!(;U'!U^Tz'!T:AVR´'!F:AV"*|'*+T *!UͤT^T!V"!À+*!U^T!V"e*|/g}/o|<)*|ʖ(*e|8)?go*e|8)go|g}o*e|8)?go*e|8)go|g}o|g}o||+!""<)*|(*e|8)?go*e|8)go|g}o||+!""<)*e|go*|/g}/o|g}o|)!"|+*e|go*|/g}/o|g}o|0)!"|+!""""*eRk)*|b)!"!A^T|+!"|+*||+'*eR€)&*eR•)!"|+#*eR)!>:͹U!6:͹U|g}o!.:͹U|g}o!&:͹U|g}o|)!^T|+*e|8)?go*e|8)go|g}o*e|8)?go*e|8)go|g}o|g}o*e|go|g}o|ʋ**|y*!ͤT^T|+!^T!"|+*e|go*|/g}/o|g}o|*!^T!"|+*e|go*e|go|g}o*e|go|g}o*e|go|g}o|(+!ͤT^T6+*|/g}/o||+ͧ+!"*|8)go*|/g}/o|g}o|m+!"s+!"*||+*#"**z|+}|'*|/g}/o|ʧ+! :͹U!T:͹U|g}o|+!"*|/g}/o|+!"!VQ+!2",!VP!T!:͹U|g}o!T!;͹U|g}o|G,!U^T+!:͹U!A͹U|g}o!:͹U|g}o!:͹U|g}o! :͹U|g}o|ʚ,*"!,*QAV|,*Q!U,*"*#"**z|,}|Ҧ,*"*|/*"!ú.*Q!U.*)^#V#s#r6N!KL!:KL^#V"}͇KL!:KL*)t^#V*Rb/*Q ^T!V |8)-!-*)^#V*R-*Q^T-*Q͑T*+"*)ҝ--*Q ͑T!T!:U=.!:ͤT*)^#V"}͇ͤT!:ͤT^T!ã.!V*R!U!:U.!V*RT*)^#V"}͇ͤT!:ͤT^T*#"*|8)C.*#"**z|.}|-**}o|go͸VwPA|g}o|/6N!AoL6N!9KL!9oL}*#"6N!KL!9KL*"}͇KL!9KL*Q͑T*)s#r*"*Q" V |8)Ҧ/* * *NUͤT͑T0!0*)^#V*}o|go*QV |8)go|g}o|B0*)"^#V|0**s#rB0*#"*|8)ڬ/6N!2UKL!9oL6N!w9oLX7*Q"V |8)҆0***NUͤT͑T06N!2UKL![9KL!KL!Q9oL6N!I9KL*BL!:9oLX7*)t*s#r!"!"! "!"*)^#Vx|8)11*#"*)^#VQ#"*s#r0*|:1!`1*)^#V*RX1>)r1*#"*|8)@1*R3*)^#V"*"*63*Q^T*)I^#V"*og"**R2!"!VP*Q"VP|g}o*!ͥU|g}o|2!"!VP*Q"VP|g}o!VTP*V͕P|g}o|k2!"*QVP!VP|g}o|ʙ2!"*| 3**Q*Q͑T*)I^#V")I*s#r**"*)2*)1 3*|11**Q͑T)I*s#r*#"**z|J3}|ғ1*+"*|8)x1À33 GOTO,GOSUB,THEN,ELSE33 ABS,AND,ASC,ATN,AUTO,CALL,CDBL,CHAIN,CHR$,CINT,CLEAR,CLOAD,CLOSE34 COMMON,CONT,COS,CSAVE,CSNG,CVD,CVI,CVS,DATA,DEF3484 DEFDBL,DEFINT,DEFSNG,DEFSTR,DELETE,DIM,EDIT,ENDm4r4 EOF,EQV,ERASE,ERL,ERR,ERROR,EXP,FIELD,FILES,FIX,FORå44 FRE,GET,HEX$,IF,IMP,INKEY$,INP,INPUT,INPUT$,INSTR44 INT,KILL,LEFT$,LEN,LET,LINE,LIST,LLIST,LOAD,LOC,LOF,LOG,LPOS/545 LPRINT,LSET,MERGE,MID$,MKD$,MKI$,MKS$,MOD,NAME,NEW,NEXT,NOT,NULLr5w5 OCT$,ON,OPEN,OPTION,OR,OUT,PEEK,POKE,POS,PRINT,PUT,RANDOMIZEî55 READ,REM,RENUM,RESET,RESTORE,RESUME,RETURN,RIGHT$,RND55 RSET,RUN,SAVE,SGN,SIN,SPACE$,SPC,SQR,STEP,STOP,STR$,STRING$2676 SWAP,SYSTEM,TAB,TAN,TO,TROFF,TRON,USING,USR,VAL,VARPTR,WAITS6B WEND,WHILE,WIDTH,WRITE,XORLN!9oLLN!AoLLN!AoL*tQ;OAR"!=7LN*NUKL!;KL!͗N*QKL!͗N*tQUP*tQ;OAO!rZUUPKL!;KL!͗NCPRQKL!2͗N*)tQ;OAO!rZUUPKL!;KL!8͗NCPRQoL*#"**z|Q7}|҅6C6N!AoL6N!AoL6N!8oL6N!AoL6N!AoL6N!8KL͸V!rTL6N!AoL6N!8KL*BL!%͗N!8KL*fL6N!AoL6N!8KL*BL!%͗N!8oL6N!AoL6N!x8KL*fL6N!AoL6N![8KL*fL6N!AoL6N!AoL6N!68oLCC"98 * * * END OF PROGRAM * * *^8 LENGTH OF PROGRAM FILE:{8 # OF LINES PROCESSED: 8MAX: 258 LINE # LIST STRINGS: 8MAX: 8 VARIABLES FOUND: 8 FREE MEMORY: 9MEMORY USE STATISTICS:9MICROSOFT BASIC RESERVED WORDS: =9 STOPPING.L9LINE T9IS FULL^9OVERFLOW LINE BUFFER FOR z9MAP YOUR PROGRAM IN SEGMENTS.)9OVERFLOW BUFFER FOR LINE NUMBERS IS FULL.9] 9[9CONTINUE NEXT RUN...9OUT OF ROOM FOR VARIABLES, :) :) :#:%:!:(:0#:REM):CLOSE1:PRINT9:INPUTA:WRITE I:OPTION BASEW:DATA^:===> f:TOk:LINESs:LIST OF VARIABLES FOR PROGRAM :INVALID LINE REF (: ** INDICATES AN INVALID LINE REFERENCE:-:**:LIST OF VARIABLES FOR PROGRAM ):HIT RETURN WHEN READY FOR LISTING ON CRT +; /;SORTING VARIABLES....... 1K;===> variable name [variable #] (# times on line);*** LINES BEING PROCESSED:;.BAS;.;I!; TO THE BATCH? (Y/); ADD ANOTHER PROGRAM#; NAME OF OUTPUT FILE: !< OUTPUT TO A FILE (Y/) 2< DO YOU WANT TO WRITE!L< DO YOU WANT A PRINTOUT (Y/)!p< END AT LINE NUMBER <65529> !< BEGIN AT LINE NUMBER <1> !< INPUT FILE NAME -) G=WHICH RUNS ABOUT 15 TIMES FASTER$j=ALSO AVAILABLE IN A COMPILED VERSION!=BASIC VARIABLE MAP PROGRAM, Ver. '= '= Press any key to continue...1 > distributed without limitation. Pass it around!/=> author. However, free copies may be made and /o> for profit without written permission from the1> This program is copyrighted and may not be sold .> (Offer subject to change without notice)&? and the name of the program you want.2/? too! Be sure to specify double or single density4d? the program is worth to you, and send your comments4? by the same author. Contribute as much as you feel2? and its documentation, as well as other programs 4@ a diskette with the latest version of this program 3>@ All contributors sending $10 or more will receive t@Carmel, CA 93923@4050 Arroyo Trail@Gregory C. Dahl@ contribution to the author:0@ ment of new programs, you are invited to send a2A find it useful and wish to encourage the develop-5A If you@AUSER SUPPORTED SOFTWARE.[A This program is 'oAPORTIONS COPYRIGHTED BY MICROSOFT, 1981%ACOPYRIGHT (C) 1983 BY GREGORY C. DAHL"ABASIC VARIABLE MAP PROGRAM, Ver. A2.0A*z[[[[ BASLIB #000000 5.30 - OWNED BY MICROSOFT, 1980 MBFDM*"+W*gE##")W7C>2DB2GB*^#V"EB##^#V"HB 2JB!ʘB!!""KB!#C" C6#6P>2'C>2&C>2%CDBBGBBB_EQJFSLLTSGESLESGTSNESEQSLTTGETLQQ!9"BVE !ͷCVEZC!ͷC1C!BͷC!R",C!O".CVE|ʋC> C6#s#r#=€C>2B>2B>2B2B!B"B!$\"B>&2BfB:Z6#}´C|´C͝Z STODCLE*B.. . ........*Y*C|C:CGD*C|GDMDVE  s#rVE  {ͥEw#6"C*B*C>2CͦEC!9N#FVE~#~D~+ʅD~#~D+^#V###]D###]D|ʑD~#fo!D͝Z Internal Error - No Line Number BVE~#.E͝Z at lineMDDLE>E͝Z at address|Z}ZLE> $q> $q~#*eEq~#fo{!9"B!mE*BsE"B!E*BLE!E~Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable ErroiEͶB!|G>ʓGBw>X|CiE}koʵGo`i"B!G"C!JH"C&H ,^HHH ]K[*r*r*r*r H']͙\*r H']4[*r*r G,Z^H~#/HxX HzE!>C^HXXaTXhAH nH^H"ƒHG{,xƒHPXXhH! KOz"yʼH H ¼HO{,y0IXhH ¼H{ H,> HHHH0IXh҈H"H IXhI H,I HXhI I*B( 4:0C*I{,*I6! KXO *I+~ I#6! Kɷw#IʺnN#"?I!9":I"I*B|cI*C!MJ"CA~#* Lq:0CƒI~MJJ•I ]ØI']" LʾIIK[*r*r*r*rI͙\*rI4[*r*r* LqI~#" L,kI MJ:0CMJkI~MJ!"C~,"J#"~'J'J# JMJ"-J#" Lx"BJ BJ+~ 7JyXI͝Z?Redo from Start *:I*Y!zJJ*?I:>IOjI*I5*:I~2J#~#^#V͏Z++ YAoC: KiE*B|K! KXXaT*Cs*#"**z|l}|@!/t!A}̀!<!=2! ͉͆!A͛* |ʺ͞!Aͤͯ!͏!z͕!)!g=͵ͻ! !D=!!(!A!A!"!"*"]!9**#"**]z|M}|&!iExL\MiE̓L\MiE͎L\MiENL\MiExL~MiE̓L~MiE͎L~MiEL~MiExL,MiE̓L,MiE͎L,MiEL,MrÙLrÙL"râLH~# šLx2Z:CSM#ML^X<͊M~L͐p#ÿLyM^~L Đp#L>2Z:CSMF#~#fox#M̊MMM~#͐pMM Y#M>"ÐpG:Cx#M8q* C+~ Ðp#M>,͐pW* C#^ ̴MʮM+=ڮM:#C=ʮM8qz{M{_øM>2CiE|N}kMo`i"B++" C!N"C!N"C2CbNzECf́n}o|g0N> ͐p+|%N8q!#C" C!"B2CbN!&C" C!"B2CbN!C~6#w~!NͯZNyNzEi&C +N* C{<ҫN8q{ʺN=> ͐pëN|C}* CںN<ëNN}ëN|C}ëN|N!* C#n&͍Q7!oO͋O͑OoO͋O͑OoO͋O͑O͝OoO͋O͑O͝OoO͋O͑OoO͋O͑OoO͋O͑O͝OoO͋O͑O͝OͬOO^#V#O"N*NͬOuOͬO^#dPæOͬO^#V#O{O"N~2N"NiE*N*N:NYq:NØq:NOOw xx xOeuUumtOsq~#fo^#V#^#V#{q^#V#{qpq^#V#pqP^#dPcq^#dPpqPP&)))VE>!>!>!>!>!>^#V#!r1Q>!>!>!>!>!>^#dPr8Q>!>!>!>!>!>g:r>P:rƀ>P>!+>P>P>P>P>P>^#V#!rPQ>%Q>%Q>%Q>%Q>%Q>E!rWQR|/g}/oR!RG|RRo& Gȯ|g}oRS>S~+~?~S+#'S+ 'SiET4[r>qSiE!T ]7TK[r>qSiET͙\r>qiE!T~,"ŽS#"~ʥSʥS# ‘SzEC"«S#7Tx"Syq+~ S ºSyXaTVE^#V#{S! C"B"B>2 CSN#F#*B~=T}|TITS!T']7T: CS*Bq~=zECq~,ET#"BɧXT*B"B+V+^"BzECiEXԛT~##++ĠY>q+V+^+ʎT+r+sYiEaT~ YiEC͐XTT Y Y~#~#foqiE|CBKUPYiE|CBK U o_TiEzCzU U_#Uo}`i Y YDMiE|C!9>X!=iE"r>uUiEr>oUiEr>q2Z>!FUpq^>FUcq~#‘UxX>ûU>ûU>ûU>ûU>ûU>U!+>U>U>U>U>U>UU~#fo##GNVyV#~#fo~#fo'V#V V y'Vy<.1V)1V) Y YJVxCűUV y<2@VF~ڟVڟV#~#foyqO #~#foxʣV“V#‚VãV!@V4 V2@V Y Y*@V&ɯ2r̈́EX*'W#V#NX!"r=z~ Yo&~C#^#V++ Yo&iE~W*AW)DWGW#JWMWoPWSWVWYW$_!&W4lW5*'W"'W~#N#F#ڬWW qoWyxґW oW+++6@#yw#xw+++6###!&W~6ڽWWlWX*'W#~#~lWzEC!*)W"'W~#^#V#XWqW|XW++~_w#~Ww#WW*)WDM~#^#V#vX6X%X+zSY+{SY##{z~#q#p_%XykXxkXDM%X~#kX%XYP+++"'W6@###{_zW+r+sɷX*-W|£XzEC\W^#V+"-Ww#s#r+++r+s##!XX*{Z{z*}Z?X}|~# XyG͐XxqG͐Xx#N#F& YX͠YY*{Z*}ZqOY#ZIY͠YY###0YuY͝Z during G.C. BuY͝Z B͝Z Internal Error - String Space Corrup#N#F*)WyxY*+WyxY++`i+V+^qjY##6+6+~6  >@++*-W"-Ws#r+X*'W#~_#~WZzECr+s##6"+W###!-W~#fo7Zq'Z<*)W"'W*+W}o|g6@#s#r#6"+W*}Z*{Z"-W}w>#w##qbZ++6+6/W\W|C}C!$Cwɧ~$q#=‘ZͣZ~$q#ãZG~#ʿZ#±Z++Z0:Z$qg}o|0)!"|+!""""*eRk)*|]d'[*r}/o|/g#"r|X[͌y'[!r~wɯ2r]dB[ wX[*rX[Ìy]dB[v>>\~B#][BZ!r{[>!rr2[# [!reu!rb\r>>ڤ[>|}+!]mt*\z+6!r>ͮv2r!] x!]mt!rmt~_#~W#~O]{îw!cëw^y[ɇ<o&X[Ìy*r*r-\"r`i"r!r^#V#N#F#!]ìxK{x{@{!r6 zwg>ͨ{d{f\:ZGw#f\a\{\!rb\r]dr]dY\*r||<]d*r\u\!co\͋[;[ø\[:r2r:r:e<\:r\\\|/g}/o\!:e:r]<\"r>2Z[aj\ L}/[U[%e>2Z`h\~&xd-O]+O]+Cd6^.]ea]E‹]Cdly]Ly]qy]Qʊ]:Zʤ]>ä]~%]#]!]dʤ]D»]^CdndCdک^»]_{_^#^¿][]d!\]]d »]^O]Cd!\!\û]^Cdû]4[K[]d6\[=]d[[DG¤_"r`i"r#~+`-_0OxG`#~_`xE`y _>2Z!`|_ `_"r`i"r\#W0b:ZO`Y`]`]`b604\b+~0l`.4\ʞ`]d>"w#6+`6-/</ ґ`:#p#w#6!Z#z%aabzb͎c{̬[=b._`p#6!Z#:[~ `*`+`Cd-+_:B{0a#Cda++wa`a6%aAac͑[Oa^+6%Y\0bta_xbͺbbijbb`_y!^a#^a{_xabͺbîaͣbybOͣbGOb¹a*[=bP`B[ѯaY\70by!^OzWO#^aa/< b/>x[c>x[p#=c!r\Rc[><\\3d?b*\/{_#zW#yO++fc[#\p#Xc>Ôc9d>bN#F#*r/}o|gҧc"rp#=”cbw1_cƤ~@zZrN vH Tʚ;@B''d #~: Cd Cd Cd0?<=:Zjd7-++CdeOʉdHʉd+͕dڞd\H#dädzECM!Ͷdڴd}0?)))صoödM!dd}e0? d? ))))صoda{ \]d:r:r[:Z2Z2ZzECzECABS,AND,ASC,ATN,AUTO,CALL,CDBL,CHAIN,CHR$,CINT,CLEAR,CLOAD,CLOSE34 COMMON,CONT,COS,CSAVE,CSNG,CVD,CVI,CVS,DATA,DEF3484 DEFDBL,DEFINT,DEFSNG,DEFSTR,DELETE,DIM,EDIT,ENDm4r4 EOF,EQV,EiE}koo!' ~7f 7f#~,f`ih f>O #~goPY!' ůwGh:LB k3o=-o=kfѯo<3o!% ^#Vr+siE}tk!"e}kf PY¶f!f`i>g!' ~BfGhgliE}ko!&f! ~+ngiE}ko! n&*B~o'nDM'~?f4N#V p3gzw w+s#r#6#6DM:JB^g!" s#r#6ãg! {zVʛg@ew<™g<3o!! {w:o°gh!! ~@e!) g?fg o~#g*B~Un( ~g+~#5O ~+~ hhg7>*BT]% N#F+q#p###6 (hGh:KB k>@h>w+w!(g7?*B' 6#67~0o#^#fk_ڐhN#~:ʔh++@0oy@0o0oe #h~.¾hh7êh#«h2e Yz 0o0o> hh> hhiEsh@ee<'o!ee> qsh:e!e6oe q66Gh~i<3oi._p ¾j:#C W:$Cj> _p_p\pe®j~*6?# kO!!4%k#4%k#4y":k3o><"e>2B!n"B:B<2B*B"e!k"BiE"eEi* C|ʆk##n̈́fuk.f*eiEÝkiE2el"eliEùkiE2el"elo<o=_! C~#fok##{l++k* C l" Cq#p#s#4#5++###DM !C"e~#foEl+V+^##*e{zlBK^#V+*es#r! DMWl*e DMYs#r# 6# xZl ! CT]~#fooxrlyrl~#~+*C"Cs#r*e|ʳl! s#r#w½l2l}ko! ^#V:el*e{o+s#r! w#w! ~#fo!omVmBK>!)+m)#,m)):m 9m#=!m}_}la)6oQm#x6o"l! "l!) "l!}o|goڀmbk:lmoҕmmDM*l*ln"lPYm}o|g*l#"lcmmDM*l*ln"lPYëm2o*l! ~#foos#r n:on!n!& :g~# xnDM̓n*oxn! w!( V6 Pnzẃn*oxn! ~!sn! ^#V! s#rDMpnjno}koʣno`i"B!n"CnXhzE!>CiE|C,n-:Bo*B!B"C{͐Xf$%n!n*Cn|}!"B>6>4>?>=>:>7>5>2>3>@>C>zEo&C̈́E!"B! K" LSo:Jdo͝Z?dop͊pØo:[p>\2[p~oco_p+ʒo~_pæo+_p¦o_p\p! K2[péo͊pOjo:[pʿo>\_p2[py)pbp7 Pp )p odo)pbpdopdo_p> _p>Ëo p>#Òo$p6\p! Ktpæo ڦox<>4pyq#_p ¦o> _p͊pAp ʦoéo:J\pwLE$q>^_p@_p\p~ ƒp> _p_p#tpB* C ʧp#~+<ʦp=8q qq ڸp4+~# ͐p~=q* C!#C" C͐p" C> ͐p> Ðp:&C=Sq> B> B*p^#V#cqɷ!rq!rzqrqrqw#w#w#w#q>rëq>rq ~#=¯q!q#~ q qɅo$ɧGw#q{z6#r wr+sd{O0s!l{!ry#(s+sd{?l{t4{vIstvs!r wʵs:rd{:r/Nͮvu2r:rvd{x/F+N+=4t!rHt!r>q#p#=Kt!rmt"r?t.tt*r w{:r{!rN#Fy͗vqʪtGuvx “tŠtv!rͶvâtj0 TeB׳]h!I.k t4{vttv!rmtkN!rq#~++w+q ud{DNn"~`35zr1{r1h!I wd{yO2rku wd{:rs}u/v!rVwz# #vxv{!rQv6vxʴu!rw{ôu~w# Svt4{vrvtv!reut4{vÎvtvs!rUuy2r!rr~q+¤vqvNsY+ºvðv W~w+vv!rv͌yv4{!rw#vd{w}7w w=w7wz!rF#^#V#Nz=w}r~#%wG++Nyl{r#w!r4{>zwRwkN]{͈wK{vw!r6 zg>ͨ{|y!>Lwak4{w$ywd{!r~+>wd{͞yîwU{d{:r={w/Oñw͞y#xU{yd{ȯGy"ry2rFoyy!D*r:rO`xr4zxx͈xg.*r:rOzax͈xg.*r:rnxx<=x{_zWxG)yOHGz͞yïxU{@{d{yy+F+F+Fw`h|xgyx:rO|g}oxG-|x}x=zElaOx!r~Gxyƀ{wzw+ɷz{K{x{@{!r6 zwgByzAy >ͨ{| {{>2r=z/))z =z!r~7w?##wy7O*r*r"r"rajSẌ́z{JS\E!r{/Ï{ Ҏ{7>{_zW}o|g=…{|g}oڷ{CZQê{ o-yOzW{_xGú{r*rDM^#V#N#F#xyl{:r:r7|/G}/O!>Oy=z͞yxU{d{>Oñw͞y#xU{yd{ȯGy"ry2rFoyy!D*r:rO`xr4zxx͈xg.*r:rOzax͈xg.*r:rnxx<=x{_zWxG)yOHGz͞yïxU{@{d{yy+F+F+Fw`h|xgyx:rO|g}oxG-|x}x=zEla VMAP2.DOC VMAP2.COM VMAP2.BAS VARIABLE MAP FOR BASIC PROGRAMS DOCUMENTATION COPYRIGHT (C) 1983 BY GREGORY C. DAHL VMAP2 creates a cross reference table of variables and GOTO's in a BASIC program. It is an invaluable aid to understanding and debugging any program written in BASIC. VMAP2 output consists of an alphabetical table of variables and all branch statements (GOTO's, GOSUB's, etc.) in your BASIC program with a list of the line numbers in which these variables and branch statements occur. All branch statements are checked for the validity of the referenced line number. The cross reference table can be displayed on the screen, printed, or saved in a text file on disk. The program is available in a compiled version VMAP2.COM which runs very fast--at least 15 times as fast as the MBASIC version. For those using the slower uncompiled version, a batch feature allows several programs to be mapped in sequence un- attended. This version of VMAP is tailored to Microsoft BASIC and is screen-formatted for the Osborne 1. It should run on other machines and with other BASICs with only minor changes. The MBASIC version of VMAP2 is heavily commented to assist anyone wishing to make modifications. USER SUPPORTED This program is user supported software. It is copyrighted and cannot be sold for profit, but unlimited copies may be made and distributed for free. Users who find the program useful are encouraged to send a contribution to the author: Gregory C. Dahl 4050 Arroyo Trail Carmel, CA 93923 If this "peoples' marketing" venture is successful, the author will be encouraged to write and distri- bute more programs in this unrestricted manner, which benefits everyone. So do your part! Any contributors who send $10 or more will receive a diskette containing the latest version of this program and its documentation, along with other programs by the same author. Please be sure to indicate single or double density, and the name of the program that interests you. Comments on programs are also most welcome! Due to possible unforeseen circumstances, the above offer is subject to change without notice. DIRECTIONS FOR USE VMAP2 requires an input file containing your BASIC program in ASCII format. To get such a file, type something like this: SAVE "B:MYPROG.ASC",A Then run the VMAP2 program. If you have the com- piled version, VMAP2.COM, just type VMAP2 (or B:VMAP2 if it is on the B drive) when you have the CP/M prompt: A> VMAP2 If you are using VMAP2.BAS, you will need to load MBASIC and then type RUN "VMAP2. VMAP2 will prompt you for the name of your source file, beginning and ending line numbers (in case you want to map only part of a long program), and the desired form of your output. Screen output is automatic if printer output is NOT selected. Disk output is available as an option in addition. Each line of your program will then appear on the screen with a list of the variables found in that line. In the final output, the variables are listed alphabetically followed by each line number in which that variable occurred. The same is true for program branch statements (GOTO's, etc.). The list also includes all input/output buffer refer- ences, such as the #1 in "PRINT#1". SUGGESTIONS FOR USE Aside from helping in understanding the structure of a program, a variable map is invaluable in catching errors which otherwise would be detected only with time-consuming debugging. Even a quick run of the program with screen output will find GOTO's and GOSUB's which refer to non-existent line numbers. And any variable listed with only one reference indicates a typo in the program or a redundant variable. Variables which appear more than once but only on one line usually can also be eliminated by rewriting that line. On a more sophisticated level, if a programmer is improving a program for efficiency a variable map will identify lines which can safely be deleted or consolidated (with no GOTO's to the line) and variables which can be changed or eliminated. With a long program, it is easy to forget which common variable names (such as I, J, N, etc.) have already been used and/or can safely be reused. The variable map gives this information instantly. Also, the meaning of a variable may not be clear; by quickly finding all references to the variable, it is easy to discover its exact funtion (intentional and unintentional). PROGRAM LIMITS Version 2.0 has a limit of 400 variables in the! variable table, which should be ample even for very large programs. Aside from this constraint, memory is used in a flexible manner, and the compiled version of VMAP2 should be able to handle the largest BASIC programs. Statistics on memory use and the size of the mapped program are given at the end of a mapping run. If memory limits are reached, a program can be mapped in sections by using the beginning and ending line number limits. COMPARISON WITH VERSION 1.0 The skeleton for this program was taken from VMAP, a public domain program available from FOG on their disk -FOG/UTL.017. Those familiar with that program may be interested in the extensive revisions made in upgrading to version 2.0. Almost all features of version 1.0 were revised. The set-up prompts and output formats were improved. The internal storage was restructured around strings to utilize memory more efficiently, resulting in a great expansion of the capacity of the program. The table of reserved words was re- worked to correspond with Microsoft BASIC rules. The logic by which variables are isolated from constants and reserved words was corrected. GOTO and other branch references were added, as was a display of the number of times a given variable is used on each line. A feature was added which allows the output map to be written to a text file on disk, which can then be edited or kept for storage. G. Dahl 10/24/83 .0. Almost all features of version 1.0 were revised. The set-up prompts and output formats were improved. The internal storage was restructured around strings to utilize memory more efficiently, resulting in a great expansi5 PRINT CHR$(26) 10 'THIS PROGRAM IS FOR FILLING OUT THE LISTING 20 'FORM . SAVED AS LISTING 30 PRINT "PLEASE TYPE THE ANSWERS TO THE FOLLOWING " 40 PRINT "QUESTIONS AS THEY ARE ASKED, THEN HIT THE" 50 PRINT "RETURN KEY FOR THE NEXT QUESTION." 51 PRINT 52 PRINT "PLEASE TYPE AN (X) TO ANSWER [YES]" 54 PRINT "OR HIT THE KEY FOR A [NO]" 55 PRINT 60 PRINT "*****************************************" 70 INPUT "WHAT IS THE STREET ADDRESS"; A$ 80 PRINT 90 PRINT 100 INPUT "MAIN ROAD NORTH OR SOUTH IS WHAT"; B$ 101 X=LEN(B$) 102 IF X>10 GOTO 3500 110 PRINT "IS IT NORTH ?";: B$=INPUT$(1) 114 PRINT B$ 120 PRINT "IS IT SOUTH ?";:E$=INPUT$(1) 122 PRINT E$ 130 PRINT 140 PRINT 150 INPUT "MAIN ROAD EAST OR WEST IS WHAT"; C$ 151 X=LEN(C$) 152 IF X>12 GOTO 3530 160 PRINT "IS IT EAST ?";: F$=INPUT$(1) 162 PRINT F$ 170 PRINT "IS IT WEST ?";: G$=INPUT$(1) 172 PRINT G$ 175 PRINT 177 PRINT 180 PRINT "IS IT A CITY ?";:H$=INPUT$(1) 182 PRINT H$ 190 PRINT "IS IT A TWP. ?";: I$=INPUT$(1) 192 PRINT I$ 200 PRINT 210 PRINT 220 INPUT "WHAT CITY OR TWP. IS IT IN"; J$ 230 INPUT "WHAT COUNTY IS IT IN";K$ 240 PRINT 250 PRINT "WITH EVERY FULL SCREEN OF QUESTIONS I'M GOING TO" 270 PRINT "TO GIVE YOU A CHANCE TO REVIEW WHAT YOU'VE " 280 PRINT "ENTERED AND MAKE CHANGES IF YOU MADE A BOO BOO" 290 PRINT " ALRIGHT DO YOU SEE ANY THING YOU WANT TO CHANGE?" 295 PRINT " [Y] [N]";:AN$=INPUT$(1) 297 PRINT CHR$(7) 310 IF AN$="Y" THEN 5 320 PRINT CHR$(26) 330 INPUT "WHAT IS THE LOT AND SUBDIVISON"; L$ 335 X=LEN(L$) 340 IF X>30 GOTO 3560 350 INPUT "WHAT IS THE LOT SIZE FRONT"; M$ 360 PRINT "IS IT OVER 1 ACRE ?";:N$=INPUT$(1) 362 PRINT N$ 370 PRINT 380 PRINT 390 INPUT "WHAT IS THE SECTION NUMBER"; O$ 400 INPUT "WHAT IS THE MAP COORDINANCE"; P$ 410 PRINT 420 INPUT "WHAT IS THE SID.NO."; Q$ 430 INPUT "LETS NOT FORGET THE ZIP CODE WHAT IS IT"; R$ 440 PRINT 450 PRINT "WHAT SIDE OF THE STREET IS IT ON ?";:S$=INPUT$(1) 452 PRINT S$ 460 PRINT "AS IF YOU REALLY CARED IS IT PAVED ?";:T$=INPUT$(1) 462 PRINT T$ 470 PRINT 471 PRINT "NEED TO MAKE ANY CHANGES (Y,N)?";:AN$=INPUT$(1) 472 PRINT CHR$(7) 473 IF AN$="Y" THEN 320 480 PRINT CHR$(26) 490 PRINT "NOW FOR THE BIG ONE" 500 INPUT "WHAT IS THE PRICE"; U! 510 FOR J=1 TO 10 511 PRINT 512 PRINT 513 PRINT 514 PRINT 515 PRINT 516 PRINT USING "$$#####.##";U! 517 PRINT "WOW ! THATS TO HIGH" 518 PRINT "REMEMBER YOU HAVE TO SELL IT TO GET PAID" 519 FOR K=1 TO 200 520 NEXT K 521 PRINT CHR$(26) 522 PRINT CHR$(7) 523 NEXT J 530 PRINT " DO YOU WANT TO CHANGE THE PRICE":AN$=INPUT$(1) 535 IF AN$="Y" THEN 500 560 PRINT CHR$(26) 570 INPUT "WHAT IS THE STYLE NUMBER"; V$ 580 INPUT "WHAT IS THE CODE"; W$ 590 PRINT " COME ON SMILE" 600 PRINT "NOW FOR A FEW QUICK ONES" 610 PRINT "IS IT BRICK";:A1$=INPUT$(1) 612 PRINT A1$ 620 PRINT "IS IT FRAME";:A2$=INPUT$(1) 622 PRINT A2$ 630 PRINT "IS IT ASBESTOS ?";:A3$=INPUT$(1) 632 PRINT A3$ 640 PRINT "IS IT ALUMINUM";:A4$=INPUT$(1) 642 PRINT A4$ 645 PRINT "IF OTHER" X FOR YES";:A12$=INPUT$(1) 646 PRINT A12$ 647 INPUT "PLEASE SPECIFY IN 7 LETTERS OR LESS"; AA12$ 650 INPUT "IS IT 1 STORY"; A5$ 652 X=LEN(A6$) 654 IF X>(1) GOTO 656 656 GOSUB 3580 660 INPUT "IS IT 11/2 STORIES"; A6$ 670 INPUT "IS IT A 2 STORY"; A7$ 680 INPUT "IS IT A SPLIT LEVEL"; A8$ 690 INPUT "IS IT A FLAT"; A9$ 700 INPUT "DOES IT HAVE AN INCOME"; A10$ 710 INPUT "IS IT A DUPLEX"; A11$ 730 PRINT " ISNT THIS FUN" 740 INPUT "WHAT ABOUT ABSTRACT"; A13$ 750 INPUT "WHAT ABOUT TITLE INS."; A14$ 760 INPUT "CASH TO PRESENT MORTGAGE"; B1$ 770 INPUT "NEW MORTGAGE"; B2$ 780 INPUT "LAND CONTRACT"; B3$ 790 INPUT "NEW LAND CONTRACT"; B4$ 800 INPUT "JUST PLAIN CASH"; B5$ 810 PRINT "ANY MISTAKES ON THIS PAGE" 815 PRINT " [Y] OR [NO]";:AN$=INPUT$(1) 820 PRINT CHR$(7) 830 IF AN$="Y" THEN 560 840 PRINT CHR$(26) 850 PRINT "ASSUMTION:" 860 INPUT "SIMPLE"; C1$ 870 INPUT "REQUALIFY"; C2$ 880 INPUT "INT. ADJ."; C3$ 890 PRINT 900 INPUT "LAND CONTRACT DOWN PAYMENT"; C4$ 910 INPUT "YEARS"; C5$ 920 INPUT "MONTH"; C6$ 930 INPUT "WHAT INTEREST RATE"; C7$ 940 PRINT 950 PRINT " DONT LOOK SO SCARED I DONT BITE" 960 PRINT "OWES:" 970 INPUT "CONV."; D1$ 980 INPUT "PMI."; D2$ 990 INPUT "FHA."; D3$ 1000 INPUT "VA."; D4$ 1010 INPUT "LC."; D5$ 1020 INPUT "HOW MUCH IS OWED"; D6$ 1030 INPUT "AT WHAT INTEREST RATE"; D7$ 1040 INPUT "TO WHOM IS IT OWED"; D8$ 1042 X=LEN(D8$) 1044 IF X>12 GOTO 3570 1050 INPUT "WHEN IS MORTGAGE DUE"; D9$ 1060 INPUT "WHAT ARE THE PAYMENTS"; D10$ 1070 INPUT "DO THEY INCLUDE TAXES"; D11$ 1080 INPUT "DO THEY INCLUDE INSURANCE"; D12$ 1090 PRINT "ANY MISTAKES [Y] OR [N]":AN$=INPUT$(1) 1100 PRINT CHR$(7) 1110 IF AN$="Y" THEN 840 1120 PRINT CHR$(26) 1130 INPUT "WHAT ARE THE CITY TAXES"; D13$ 1140 INPUT "WHAT ARE THE COUNTY TAXES"; D14$ 1150 PRINT " SORRY I ASKED" 1160 PRINT 1170 PRINT "WHAT ABOUT SPECIAL ASSEMENTS" 1180 PRINT "OR ASSOCIATION FEES." 1190 INPUT "IF SO PLEASE ENTER THEM";D15$ 1192 X=LEN(D15$) 1194 IF X>20 GOTO 3550 1200 PRINT 1210 INPUT "OCCUPANCY"; D16$ 1220 INPUT "FEE PER DAY"; D17$ 1230 PRINT "NOW LETS FIND OUT A LITTLE MORE ABOUT " 1240 PRINT "THE PROPERTY ITSELF" 1250 INPUT "WHEN WAS IT BUILT"; E1$ 1260 INPUT "IS IT A NEW BLDG."; E2$ 1270 INPUT "WHAT SIZE IS IT"; E3$ 1280 INPUT "HOW MANY ROOMS"; E4$ 1290 INPUT "HOW MANY SQUARE FEET IS IT"; E5$ 1300 PRINT 1310 INPUT "WHAT SIZE IS THE BASEMENT"; E6$ 1320 INPUT "DOES IT HAVE A WALKOUT"; E7$ 1330 INPUT "WHAT SIZE IS THE BLDG. EXTENSION"; E8$ 1340 INPUT "HOW MANY BEDROOMS"; E9$ 1350 INPUT "HOW MANY DOWNSTAIRS"; E10$ 1360 INPUT "HOW MANY UPSTAIRS"; E11$ 1370 PRINT 1380 PRINT "WOOPS! ALMOST FORGOT ANY CHANGES [Y] OR [N]";:AN$=INPUT$(1) 1390 PRINT CHR$(7) 1400 IF AN$="Y" THEN 1120 1410 PRINT CHR$(26) 1420 INPUT "WHAT SIZE IS THE UTILITY ROOM"; E12$ 1430 INPUT "WHAT FLOOR IS IT ON"; E13$ 1440 INPUT "WHAT SIZE IS THE LIVING ROOM"; E14$ 1450 INPUT "HOW MANY LAVATORYS"; E15$ 1460 INPUT "ON THE FIRST FLOOR"; E16$ 1470 INPUT "ON THE 2ND FLOOR"; E17$ 1480 INPUT "IN THE BASEMENT"; E18$ 1482 INPUT "HOW MANY COMPLETE BATHROOMS ON THE 1ST FLOOR"; K1$ 1484 INPUT "HOW MANY ON THE 2ND FLOOR"; K2$ 1490 PRINT 1500 INPUT "WHAT KIND OF WATER HEATER "; E19$ 1510 INPUT "WHAT KIND OF FURNACE IS IT "; E20$ 1520 INPUT "DOES IT HAVE CENTRAL AIR"; E21$ 1530 INPUT "ELECTRIC AIR CLEANER"; E22$ 1540 INPUT "POWER HUMIDIFER"; E23$ 1550 PRINT 1560 PRINT "NEXT WHAT HAS THE KITCHEN GOT" 1570 INPUT "REFRIGERATOR BUILT IN"; E24$ 1580 INPUT "RANGE BUILT IN"; E25$ 1590 INPUT "GARBAGE DISPOSAL BUILT IN"; E26$ 1600 INPUT "DISHWASHER "; E27$ 1610 INPUT "COMPACTOR"; E28$ 1620 INPUT "OVEN OR RANGE"; E29$ 1630 PRINT "HOW ARE WE DOING,ANY MISTAKES [Y] OR [N]" :AN$=INPUT$(1) 1640 PRINT CHR$(7) 1650 IF AN$="Y" THEN 1410 1660 PRINT CHR$(26) 1670 PRINT "WHAT ARE THE SIZES OF THE FOLLOWING ROOMS?" 1680 INPUT "DINING ROOM"; F1$ 1690 INPUT "IS IT SEPARATE"; FF1$ 1700 INPUT "KITCHEN"; F2$ 1710 INPUT "KITCHEN DINING AREA"; F3$ 1720 INPUT "MASTER BEDROOM"; F4$ 1730 INPUT "DOES IT HAVE A MASTER BATH"; FF4$ 1740 INPUT "BEDROOM NUMBER 1"; F5$ 1750 INPUT "BEDROOM NUMBER 2"; F6$ 1760 INPUT "BEDROOM NUMBER 3"; F7$ 1770 INPUT "LIBRARY OR DEN"; F8$ 1780 INPUT "FAMILY ROOM"; F9$ 1790 INPUT "REC. ROOM"; F10$ 1800 INPUT "WHAT KIND OF WINDOWS DOES IT HAVE"; F11$ 1810 INPUT "WHAT KIND OF STORMS & SCREENS DOES IT HAVE"; F12$ 1820 INPUT "DESCRIBE CARPETING"; F13$ 1830 INPUT "DESCRIBE THE VESTIBULE IN 10 LETTERS OR LESS";F14$ 1840 INPUT "PASSAGE OR HALLWAY (X) FOR YES"; F15$ 1850 INPUT "WHAT KIND OF FENCE DOES IT HAVE"; F16$ 1860 INPUT "WHAT KIND OF FIREPLACE DOES IT HAVE"; F17$ 1870 INPUT "WHAT SIZE IS THE PATIO OR DECK"; F18$ 1880 INPUT "TYPE (X) FOR DECK"; F19$ 1890 PRINT "ANY MISTAKES [Y] OR [N]" :AN$=INPUT$(1) 1900 PRINT CHR$(7) 1910 IF AN$="Y" THEN 1660 1920 PRINT CHR$(26) 1930 PRINT "DOES THE ATTIC HAVE" 1940 INPUT "STAIRS (X) FOR YES"; F20$ 1950 INPUT "FLOORED"; F21$ 1960 PRINT 1970 PRINT "WHAT ARE THE NAMES FOR THE FOLLOWING SCHOOLS" 1980 INP#UT "PUBLIC"; F22$ 1985 INPUT "HIGH SCHOOL"; FF22$ 1990 INPUT "PAROC."; F23$ 2000 PRINT 2010 PRINT "WHAT SIZE GARAGE DOES IT HAVE?" 2020 INPUT "1 CAR"; G1$ 2030 INPUT "1 1/2 CAR"; G2$ 2040 INPUT "2 CAR OR MORE"; G3$ 2050 PRINT "NOW WATER (X) FOR YES RETURN FOR NO" 2060 INPUT "CITY"; G4$ 2070 INPUT "WELL"; G5$ 2080 PRINT 2090 INPUT "GAS IN"; G6$ 2100 PRINT 2110 PRINT "NOW THE SEWER" 2120 INPUT "IS IT PUBLIC"; G7$ 2130 INPUT "IS IT A SEPTIC"; G8$ 2140 PRINT "ANY ERRORS [Y] OR [N]" :AN$=INPUT$(1) 2150 PRINT CHR$(7) 2160 IF AN$="Y" THEN 1920 2170 PRINT CHR$(26) 2180 PRINT "JUST A FEW MORE QUESTIONS" 2190 PRINT 2200 INPUT "P"; G9$ 2210 INPUT "CSB"; G10$ 2220 PRINT 2230 INPUT "PHONE NUMBER"; G11$ 2240 INPUT "VACANT (Y,N)"; G12$ 2250 INPUT "PHONE NUMBER TO SHOW"; G13$ 2260 PRINT 2270 INPUT "KEYS IN OFFICE (Y,N)"; G14$ 2280 INPUT "LOCK BOX"; G15$ 2290 PRINT 2300 INPUT "WHO IS THE BROKER"; H1$ 2310 INPUT "WHAT IS THE NO."; H2$ 2320 INPUT "WHO IS THE SALESPERSON"; H3$ 2330 PRINT 2340 INPUT "WHAT IS THE OWNERS NAME"; H4$ 2350 INPUT "OWNER 'X' FOR YES"; H5$ 2360 INPUT "TENANT 'X' FOR YES"; H6$ 2370 PRINT 2380 PRINT "ANY ERRORS [Y] OR [N]" :AN$=INPUT$(1) 2390 PRINT CHR$(7) 2400 IF AN$="Y" THEN 2170 2410 PRINT CHR$(26) 2420 INPUT "DOES IT HAVE A SWIMMING POOL"; H7$ 2430 INPUT "WATERFRONT"; H8$ 2440 INPUT "WATER PRIVILAGE"; H9$ 2450 INPUT "WHAT IS THE NAME OF THE LAKE"; H10$ 2460 PRINT 2470 PRINT 2480 INPUT "IS THE OWNER WILLING TO TRADE OR EXCHANGE"; H11$ 2490 PRINT 2500 PRINT "NOW FOR COMMENTS" 2510 INPUT "*"; J1$ 2520 INPUT "*"; J2$ 2530 INPUT "*"; J3$ 2540 PRINT 2550 INPUT "WHAT IS THE LISTING DATE"; J4$ 2560 INPUT "SALESPERSON I.D. NUMBER"; J5$ 2570 INPUT "SALESPERSON I.D. NUMBER"; J6$ 2580 INPUT "WHAT IS THE EXPIRATION DATE"; J7$ 2590 PRINT "THIS IS IT ANY ERRORS [Y] OR [N]" :AN$=INPUT$(1) 2600 PRINT CHR$(7) 2610 IF AN$="Y" THEN 2410 2620 PRINT CHR$(26) 2630 PRINT " MAKE SURE YOU HAVE A BLANK LISTING" 2640 PRINT "FORM IN THE PRINTER . THEN TYPE (P)" 2650 PRINT "TO PRINT OUT ALL YOUR ANSWERS ." 2660 PRINT "THANK YOU FOR YOUR PATIENCE" 2670 PRINT "HAVE A NICE DAY" 2680 PRINT 2690 PRINT " IF YOUR SURE YOUR READY TYPE (P)":AN$=INPUT$(1) 2700 PRINT CHR$(7) 2710 IF AN$<>"P" THEN 2690 2725 LPRINT CHR$(27)+"!" 2730 LPRINT TAB(5);A$;TAB(39);O$;TAB(44);P$ 2740 LPRINT TAB(3);D$;TAB(6);E$;TAB(8);B$;TAB(19);F$;TAB(21);G$;TAB(25);C$ 2750 LPRINT TAB(1);H$;TAB(5);I$;TAB(8);J$;TAB(24);K$;TAB(35);Q$ 2760 LPRINT TAB(6);L$;TAB(38);R$;TAB(52);U!;TAB(64);V$ 2770 LPRINT TAB(7);M$;TAB(30);N$;TAB(40);S$;TAB(44);T$;TAB(51);W$ 2780 LPRINT TAB(2);A1$;TAB(8);A2$;TAB(13);A3$;TAB(19);A4$;TAB(26);A12$;TAB(33);AA12$;TAB(42);A13$;TAB(49);B1$;TAB(53);B2$;TAB(57);B3$;TAB(61);B4$;TAB(65);B5$ 2790 LPRINT TAB(2);A5$;TAB(8);A6$;TAB(13);A7$;TAB(19);A8$;TAB(26);A9$;TAB(30);A10$;TAB(35);A11$;TAB(42);A14$;TAB(55);C1$;TAB(59);C2$;TAB(65);C3$ 2800 LPRINT TAB(2);E1$;TAB(14);E2$;TAB(18);E3$;TAB(33);E4$;TAB(39);E5$;TAB(50);C4$;TAB(59);C5$;TAB(62);C6$;TAB(67);C7$ 2810 LPRINT TAB(2);E6$;TAB(14);E7$;TAB(18);E8$;TAB(34);E9$;TAB(37);E10$;TAB(43);E11$;TAB(52);D1$;TAB(56);D2$;TAB(60);D3$;TAB(64);D4$;TAB(68);D5$ 2820 LPRINT TAB(4);E12$;TAB(14);E13$;TAB(18);E14$;TAB(33);E15$;TAB(36);E16$;TAB(38);E17$;TAB(41);E8$;TAB(50);D6$;TAB(64);D7$ 2830 LPRINT TAB(4);E19$;TAB(18);F1$;TAB(28);FF1$;TAB(36);K1$;TAB(43);K2$;TAB(50);D8$;TAB(66);D9$ 2840 LPRINT TAB(3);E20$;TAB(18);F2$;TAB(35);F10$;TAB(52);D10$;TAB(61);D11$;TAB(67);D12$ 2850 LPRINT TAB(1);E21$;TAB(4);E22$;TAB(10);E23$;TAB(18);F3$;TAB(34);F11$;TAB(52);D13$;TAB(64);D14$ 2860 LPRINT TAB(5);E24$;TAB(8);E25$;TAB(12);E26$;TAB(18);F4$;TAB(28);FF4$;TAB(34);F12$ 2870 LPRINT TAB(2);E27$;TAB(7);E28$;TAB(13);E29$;TAB(18);F5$;TAB(34);F13$;TAB(49);D15$ 2880 LPRINT TAB(4);F20$;TAB(9);F21$;TAB(18);F6$;TAB(34);F14$;TAB(45);F15$;TAB(50);D16$;TAB(63);D17$ 2890 LPRINT TAB(3);F22$;TAB(18);F7$;TAB(34);F16$;TAB(53);G1$;TAB(58);G2$;TAB(62);G3$ 2900 LPRINT TAB(1);F23$;TAB(18);F8$;TAB(36);F17$;TAB(53)G6$;TAB(65);G9$ 2910 LPRINT TAB(4);FF22$;TAB(19);F9$;TAB(35);F18$;TAB(44);F19$;TAB(52);G7$;TAB(56);G8$;TAB(65);G10$ 2920 LPRINT TAB(4);H1$;TAB(20);H2$;TAB(32);H3$;TAB(51);G11$;TAB(66);G12$ 2930 LPRINT TAB(3);H4$;TAB(40);H5$;TAB(44);H6$;TAB(56);G13$ 2940 LPRINT TAB(1);H7$;TAB(8);H8$;TAB(15);H9$;TAB(27);H10$;TAB(41);H11$;TAB(50);G14$;TAB(56);G15$ 2950 LPRINT 2960 LPRINT J1$ 2970 LPRINT J2$ 2980 LPRINT J3$ 2990 LPRINT 3000 LPRINT TAB(9);J4$;TAB(37);J5$;TAB(52);J6$ 3010 LPRINT 3020 LPRINT TAB(24);J7$ 3030 PRINT CHR$(26) 3040 PRINT "DO YOU WANT ANOTHER COPY [Y] OR [N]":AN$=INPUT$(1) 3050 PRINT CHR$(7) 3060 IF AN$="Y" THEN 2690 3070 PRINT CHR$(26) 3080 PRINT "DO YOU WANT TO FILL OUT ANOTHER ONE [Y] OR [N]":AN$=INPUT$(1) 3090 PRINT CHR$(7) 3100 IF AN$="Y" THEN 5 3110 PRINT " WE HAVE COME TO THE END OF THE PROGRAM" 3112 PRINT " YOU WILL HAVE TO TYPE TO START OVER" 3114 PRINT 3116 PRINT " NOW GO SELL SOMETHING AND MAKE SOME MONEY" 3490 END 3500 PRINT "YOU TYPED TO MANY LETTERS" 3510 PRINT "THERE IS ONLY 10 SPACES ALLOWED" 3520 GOTO 100 3530 PRIN$T "TO MANY LETTERS THERE IS ONLY SPACE FOR 12" 3540 GOTO 150 3550 PRINT "TYPED TO MANY LETTERS ONLY 20 ALLOWED" 3555 GOTO 1170 3560 PRINT "TO MANY LETTERS ONLY 30 ALLOWED" 3565 GOTO 330 3570 PRINT "TO MANY LETTERS ONLY 12 ALLOWED" 3575 GOTO 1040 3580 PRINT"REQUIRES A X FOR YES OR A RETURN FOR NO" 3590 RETURN 570 PRINT "TO MANY LETTERS ONLY 12 ALLOWED" 3575 GOTO 1040 354$;TAB(37);J5$;TAB(52);J6$ 3010 LPRINT 3020 LPRINT TAB(24);J7$ 3030 PRINT CHR$(26) 3040 PRINT "DO YOU WANT ANOTHER COPY [Y] OR [N]":AN$=INPUT$(1) 3050 PRINT CHR$(7) 3060 IF AN$="Y" THEN 2690 3070 PRINT CHR$(26) 3080 PRINT "DO YOU WANT TO FILL OUT ANOTHER ONE [Y] OR [N]":AN$=INPUT$(1) 3090 PRINT CHR$(7) 3100 IF AN$="Y" THEN 5 3110 PRINT " WE HAVE COME TO THE END OF THE PROGRAM" 3112 PRINT " YOU WILL HAVE TO TYPE TO START OVER" 3114 PRINT 3116 PRINT " NOW GO SELL SOMETHING AND MAKE SOME MONEY" 3490 END 3500 PRINT "YOU TYPED TO MANY LETTERS" 3510 PRINT "THERE IS ONLY 10 SPACES ALLOWED" 3520 GOTO 100 3530 PRINLISTINGS, received from Detroit's DeFOG, is a program for entering data regarding a real estate listing. Place LISTINGS.BAS in drive A and MBASIC.COM in drive B. At the A> prompt, type B:MBASIC LISTINGS Then answer questions presented on the screen. (Unfortunately, the spelling is not perfect.) MULTREG BAS9:;<=>?@ABCDEFGHMULTREG BASIJMULTREG DOC%KLMNOSCTOVC BAS"PQRSTSCTOVC DOC UVWXVCTOSC BAS%YZ[\]VCTOSC DOC^_`aVMAP2 BASybcdefghijklmnopqVMAP2 COMrstuvwxyz{|}~VMAP2 COMvVMAP2 DOC6LISTINGSBASkLISTINGS$$$ Fog Library Disk FOG-CPM.071 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. MBasic programs. Filename Description -06-00 .86 This is the release date of the disk. -CPM071 .DOC This is the description of the disk contents. SCOTT .DOC 8A99 3K [CGP-115 Plotter 1 of 4] Three MBasic programs to produce drawing on a Radio Shack CGp-115 plotter. Do three dimensional, polynomial curvefit, or use up to 100 X-Y points. 3-DPLOT .BAS 629E 3K [CGP-115 Plotter 2 of 4] CGPLOT .BAS C4FC 8K [CGP-115 Plotter 3 of 4] PLOT3 .BAS D1D4 7K [CGP-115 Plotter 4 of 4] BCSQUASH.BAS 4654 6K ver. 1.0 [Basic Squash 1 of 3] Program to compact MBasic program by 15 to 20%. Removes comment and blank lines. MBasic source is included. BCSQUASH.COM 646A 18K ver. 1.0 [Basic Squash 2 of 3] BCSQUASH.DOC C10A 6K ver. 1.0 [Basic Squash 3 of 3] INVTRIG .BAS FD8A 1K [INVTRIG 1 of 2] Subroutine to add ARCCOS and ARCSIN trigonometric functions to MBasic programs. INVTRIG .DSC DD1F 1K  [INVTRIG 2 of 2] MULTREG .BAS EE8E 18K ver. 1.0 [Multi Regression 1 of 2] MBasic program which performs multiple linear regression. Outputs, R-squared, F & Durbin-Watson, error scatter plot. MULTREG .DOC C85D 5K ver. 1.0 [Multi Regression 2 of 2] SCTOVC .BAS 4F6A 5K [Super To VisiCalc 1 of 4] MBasic programs to convert SuperCalc .PRN files to Visicalc .DIF files or VisiCalc .DIF to SuperCalc .XQT files. SCTOVC .DOC 2AC1 4K [Super To VisiCalc 2 of 4] VCTOSC .BAS 5576 5K [Super To VisiCalc 3 of 4] VCTOSC .DOC 3662 4K [Super To VisiCalc 4 of 4] VMAP2 .BAS 9E40 16K ver. 2.0. [Variable Map 1 of 3] Builds a cross reference table of variables and GOTOs for your MBasic programs. MBasic source code is included. VMAP2 .COM BDAD 31K ver. 2.0. [Variable Map 2 of 3] VMAP2 .DOC 4C22 7K ver. 2.%0. [Variable Map 3 of 3] LISTINGS.BAS F5FA 14K [Real-estate Listing 1 of 2] MBasic program to manage data for real estate listings. LISTINGS.DSC 93CF 1K [Real-estate Listing 2 of 2] e Map 1 of 3] Builds a cross reference table of variables and GOTOs for your MBasic programs. MBasic source code is included. VMAP2 .COM BDAD 31K ver. 2.0. [Variable Map 2 of 3] VMAP2 .DOC 4C22 7K ver. 2.&'