1 'CARTPT 11/15/87.2--Mergeable SCREEN DUMP--J HOLOVACS,74756,413 2 DR$="NONE" 3 CLS:PRINT "*CARTPLOT DRIVER:";DR$ 4 DEFSNG X,Y:ON ERROR GOTO 1700 5 PRINT "Pairs of coordinates will be plotted into a 2 dimensional cartesian plane." 6 TP=1:PRINT "TYPE OF SCALING":PRINT "1) LINEAR X,Y [default]":PRINT "2) LOG Y":PRINT "3) LOG X":PRINT "4) LOG X,Y ";:INPUT TP 8 CLS:PRINT "WHEN COMPLETE,":PRINT" HIT [F1] FOR SCREEN DUMP":PRINT " [F2] FOR NEW PARAMETERS (FILE ONLY)" 9 PRINT"DISPLAY STYLE:":PRINT"1) PLOT POINTS ONLY":PRINT"2) POINTS CONNECTED BY LINE":INPUT"3) HISTOGRAM (BAR) STYLE";CO:IF CO>3 OR CO<1 THEN 9 10 IF RD$="1" THEN R$="F":GOTO 24 'ON REPLOT CYCLE 11 IF CO=2 THEN INPUT "ARE X VALS SEQUENTIAL (NO SORT)";ST$ 15 ON KEY GOSUB 63000,1600,2000'HARD COPY,REPLOT,EXIT 20 INPUT "ENTER K)EYBOARD OR F)ILE INPUT";R$:CLS 24 XN=1E6:XX=-1E6:YN=1E6:YX=-1E6 25 ON INSTR(1,"KkFf",R$) GOSUB 400,400,700,700 30 R$="Y":INPUT "AUTO-RANGE [Y]/N";R$:IF INSTR(1,"Yy",R$) THEN 50 32 CLS:PRINT"* Manual Range Input *" 35 PRINT "X minimum";XN;:INPUT XN:PRINT "X maximum";XX;:INPUT XX:PRINT "Y minimum";YN;:INPUT YN:PRINT "Y maximum";YX;:INPUT YX:GOSUB 2150 50 R$="n":IXGRD=0:IYGRD=0:INPUT "Gridlines Y/N";R$:IF INSTR(1,"Yy",R$) THEN GOSUB 2100 51 CLS:Y1=YN:Y2=YX:X1=XN:X2=XX:IF TP=1 THEN 54 52 IF (TP=2 OR TP=4) AND YN<=0 THEN 1500 53 IF (TP=3 OR TP=4) AND XN<=0 THEN 1500 54 ON TP GOSUB 1170,1270,1370,1470 'LABEL TYPE OF SCALES 55 ON TP GOSUB 1150,1250,1350,1450:YI=64/(YX-YN)*.98:XI=240/(XX-XN)*.995 'FIND INCREMENT 60 IF SGN(XX*XN)=-1 THEN GOSUB 250 ELSE GOSUB 800 61 IF SGN(YX*YN)=-1 THEN GOSUB 200 ELSE GOSUB 850 65 DT=CO:IF N>30 AND CO<3 THEN DT=1 'DOT TYPE 67 FOR Q=1 TO N:ON TP GOSUB 1100,1200,1300,1400:X(Q)=INT((X(Q)-XN)*XI):Y(Q)=INT((YX-Y(Q))*YI):ON DT GOSUB 300,1000,1050:NEXT Q 'dot plots 68 IF CO<>2 THEN 112 'BYPASS SORT AND LINE ROUTINE 69 IF ST$="Y" OR ST$="y" THEN 110 'BYPASS SORT BUT DRAW LINE 70 REM SORT & DRAW LINE ROUTINE (ASCENDING X) 75 FOR L=N TO 2 STEP -1:FOR I=1 TO L-1 80 IF X(I)<=X(L) THEN 100 90 XT=X(I):X(I)=X(L):X(L)=XT:YT=Y(I):Y(I)=Y(L):Y(L)=YT 100 NEXT I:NEXT L 110 FOR Q=2 TO N:LINE(X(Q),Y(Q))-(X(Q-1),Y(Q-1)):NEXT Q 112 RESTORE 1900:FOR Z=1 TO 8:READ L1,L2,L3,L4:LINE(L1,L2)-(L3,L4):NEXT Z 113 GOSUB 2200'GRIDLINES 115 KEY ON:RD$="" 120 IF RD$="1" THEN CLS:GOTO 6 125 IF F2 THEN 1800 130 GOTO 120 200 REM X-AXIS 210 XA=INT(YX*YI):LX=INT(XA/8)*40 223 HX=LX+39:IF HX>=319 THEN HX=318 224 HX=HX-LEN(XX$) 235 PRINT @HX,XX$;CHR$(154);:PRINT @LX,CHR$(155);XN$; 238 LINE(0,XA)-(239,XA),1 240 RETURN 250 REM Y-AXIS 260 YA=INT(-XN*XI) 265 HY=INT(YA/6)-LEN(YX$):IF HY<0 THEN HY=0 267 LY=INT(YA/6)+280:IF LY>320 THEN LY=320:LY=LY-LEN(YN$)-1 269 PRINT @LY,YN$;CHR$(153);:PRINT @HY,YX$;CHR$(152); 295 LINE (YA,0)-(YA,63):RETURN 300 REM PLOT INDIVIDUAL POINTS 310 RESTORE 330:FOR QQ=1 TO 5:READ XP%,YP%:XP%=ABS(X(Q)+XP%):YP%=ABS(Y(Q)+YP%) 315 PSET(XP%,YP%):NEXT QQ 320 RETURN 330 DATA -1,0,0,-1,0,0,0,1,1,0 400 REM KEYBOARD ENTRY 415 CLS:PRINT "**KEYBOARD INPUT**":INPUT "NUMBER OF PAIRS";N:DIM X(N),Y(N) 420 FOR Q=1 TO N:PRINT "PAIR #";Q;" X,Y=";:INPUT X(Q),Y(Q):GOSUB 500:NEXT Q:GOSUB 2150:RETURN 500 REM CHECK FOR MAX &MIN X,Y 503 IF X(Q)XX THEN XX=X(Q) 505 IF Y(Q)YX THEN YX=Y(Q) 510 RETURN 700 REM FILE ENTRY 702 IF RD$="1" THEN 711 705 CLS:PRINT "**FILE INPUT**":PRINT "FOR DATA FILES IN THE FORMAT X,Y ETC" 710 FILES:INPUT "NAME OF '.DO' FILE";F$ 711 Q=0:OPEN F$ FOR INPUT AS 1 712 IF N=0 THEN INPUT "MAX NUMBER OF PAIRS";NX:N=NX:DIM X(N),Y(N) 714 IF Q=NX THEN 720 715 Q=Q+1:INPUT #1,X(Q),Y(Q):GOSUB 500:IF EOF(1) THEN 720 718 GOTO 714 720 N=Q:CLOSE:GOSUB 2150 721 IF RD$<>"1" THEN INPUT "2ND FILE";F2$ 723 F2=(F2$<>"") 'FLAG FOR 2ND FILE 725 RETURN 800 REM MAX/MIN Y VALUES (WHEN NO AXIS) 810 PRINT @18,YX$;CHR$(152);:PRINT @298,YN$;CHR$(153); 820 RETURN 850 REM MAX/MIN X VALUES (WHEN NO AXIS) 860 PRINT @120,CHR$(155);XN$; 870 HX=159-LEN(XX$):PRINT @HX,XX$;CHR$(154); 880 RETURN 1000 Y(Q)=ABS(Y(Q)):PSET(X(Q),Y(Q)):RETURN 'PLOT POINT 1050 Y(Q)=ABS(Y(Q)):IF XA=0 THEN LINE(X(Q),Y(Q))-(X(Q),62):LINE(X(Q)+1,Y(Q))-(X(Q)+1,62):RETURN 'HISTO-LINE (WHEN NO X AXIS) 1055 LINE(X(Q),Y(Q))-(X(Q),XA):LINE(X(Q)+1,Y(Q))-(X(Q)+1,XA):RETURN 'HISTOGRAM LINE (WHEN X AXIS) 1100 RETURN 'LINEAR PLOT 1150 RETURN 1170 RETURN 1200 Y(Q)=LOG(Y(Q)):RETURN 'LOG Y AXIS 1250 YX=LOG(YX):YN=LOG(YN):RETURN 1270 PRINT @72,"LOG Y";:RETURN 1300 X(Q)=LOG(X(Q)):RETURN 'LOG X AXIS 1350 XX=LOG(XX):XN=LOG(XN):RETURN 'PARAMENTERS LOG X 1370 PRINT @72,"LOG X";:RETURN 1400 Y(Q)=LOG(Y(Q)):X(Q)=LOG(X(Q)):RETURN 'LOG X,Y AXIS 1450 XX=LOG(XX):XN=LOG(XN):YX=LOG(YX):YN=LOG(YN):RETURN 'PARAMETERS LOG X,Y 1470 PRINT @71,"LOG X,Y";:RETURN 1500 CLS:BEEP:PRINT "**INPUT ERROR--DATA SET CONTAINS":PRINT"INVALID NUMBER FOR LOG FUNCTION" 1510 IF R$="F" OR R$="f" THEN PRINT "HIT [F2] FOR RESTART":F2=0:GOTO 115 ELSE END 1600 IF F$="" THEN RETURN 'FLAG FOR REDO 1610 CLOSE #1:RD$="1":RETURN 1700 REM Error Routine 1710 IF ERR=52 OR ERR=55 THEN CLS:PRINT "* * *incorrect file name, try again":RESUME 710 1715 IF ERR=5 AND (ERL=315 OR (ERL>999 AND ERL<1100) OR ERL=110 OR ERL=2212 OR ERL=2262) THEN RESUME NEXT 1750 PRINT "error=";ERR;" in line ";ERL:END 1800 REM 2ND FILE 1811 OPEN F2$ FOR INPUT AS 1 1814 Q=0 1815 Q=Q+1:INPUT #1,X(Q),Y(Q):IF EOF(1) OR Q=NX THEN N=Q:F2=0:CLOSE:GOTO 65 1818 GOTO 1815 1900 DATA 0,0,0,5,0,0,5,0,239,0,239,5,239,0,234,0 1910 DATA 0,63,0,57,0,63,5,63,239,63,234,63,239,63,239,57 2000 CLEAR 256,MAXRAM:MENU'exit 2100 'accept grid line specs 2105 CLS:PRINT"* *Input Grid Lines* *":PRINT "Vertical lines: [enter]=none":PRINT "Lowest X val:";XN$;" Highest:";XX$:INPUT "X value of first vertical";GX:INPUT "Interval";IXGRD 2110 PRINT"Horizontal lines: [enter]=none":PRINT "Lowest Y val:";YN$;" Highest:";YX$:INPUT "Y value of first horizontal";GY:INPUT "Interval";IYGRD 2115 RETURN 2150 XX$=STR$(XX):XN$=STR$(XN):YX$=STR$(YX):YN$=STR$(YN):RETURN'set max/min 2200 'DRAW GRID LINES assumes YX=fn(YX);XN=fn(XN);XI,YI 2203 XPS=0 2205 IF IXGRD=0 THEN 2250 'NO VERTICAL LINES 2207 YAX=XPS+GX:ON TP GOTO 2212,2212,2210,2210 2210 YAX=LOG(YAX) 2212 YAX=INT((YAX-XN)*XI):LINE(YAX,0)-(YAX,63):XPS=XPS+IXGRD:IF XPS<=X2 THEN 2205'DRAW LINE REPEAT IF NEEDED 2250 YPS=0 2255 IF IYGRD=0 THEN RETURN 'NO VERTICAL LINES 2257 XAX=YPS+GY:ON TP GOTO 2262,2260,2262,2260 2260 XAX=LOG(XAX) 2262 XAX=63-INT((XAX-YN)*YI):LINE(0,XAX)-(239,XAX):YPS=YPS+IYGRD:IF YPS<=Y2 THEN 2255'DRAW LINE REPEAT IF NEEDED 2270 RETURN 63000 RETURN