0 'CARTPT.BA - BY J. HOLOVACS CLUB 100 LIBRARY - 415/939-1246 BBS, 937-5039 NEWSLETTER, 932-8856 VOICE 1 REM VER 1.2 (6/17/85) BASED ON CARTPT V5.8 w/EPSON SCREEN DUMP,CORRECTED AXIS PROBLEM Jay Holovacs; 95 King George Rd.; Warren, NJ 07060 2 CLEAR 256,62711:GOSUB 63017 '!!THIS MUST BE FIRST EXECUTABLE LINE OF PROGRAM!! RETURN HIMEM TO 62745 AT END OF RUN 3 DEFSNG X,Y:ON ERROR GOTO 1700:CLS:PRINT "***GRAPH/SCATTER PLOT***":PRINT "Pairs of coordinates will be plotted into a 2 dimensional cartesian plane." 4 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:CLS:PRINT "WHEN COMPLETE,":PRINT" HIT [F1] FOR SCREEN DUMP" 5 PRINT " [F2] FOR NEW PARAMETERS (FILE ONLY)";:PRINT" [F3] TO TERMINATE & RESTORE MEMORY":CO$="n":INPUT "POINTS CONNECTED BY A LINE(Y/[N])";CO$:IF RD$="1" THEN 8 'ON REPLOT CYCLE 6 ON KEY GOSUB 63000,866,1800 'HARD COPY 7 INPUT "ENTER K)EYBOARD OR F)ILE INPUT";R$:CLS 8 XN=1E6:XX=-1E6:YN=1E6:YX=-1E6:IF R$="K" OR R$="k" THEN GOSUB 400:GOTO 11 9 IF R$="F" OR R$="f" THEN GOSUB 700:GOTO 11 10 GOTO 7 11 CLS:IF TP=1 THEN 14 12 IF (TP=2 OR TP=4) AND YN<=0 THEN 865 13 IF (TP=3 OR TP=4) AND XN<=0 THEN 865 14 ON TP GOSUB 855,858,861,864 'LABEL TYPE OF SCALES 15 ON TP GOSUB 854,857,860,863:YI=64/(YX-YN)*.98:XI=240/(XX-XN)*.995 'FIND INCREMENT 16 IF SGN(XX*XN)=-1 THEN GOSUB 250 ELSE GOSUB 800 17 IF SGN(YX*YN)=-1 THEN GOSUB 200 ELSE GOSUB 850 18 IF N>30 THEN 20 'draw simple dots 19 FOR Q=1 TO N:ON TP GOSUB 853,856,859,862:X(Q)=INT((X(Q)-XN)*XI):Y(Q)=INT((YX-Y(Q))*YI):GOSUB 300:NEXT Q:GOTO 21 'cross hair plots 20 FOR Q=1 TO N:ON TP GOSUB 853,856,859,862:X(Q)=INT((X(Q)-XN)*XI):Y(Q)=INT((YX-Y(Q))*YI):GOSUB 852:NEXT Q' dot plots 21 IF CO$<>"Y" AND CO$<>"y" THEN 73 'bypass sort 69 REM SORT & DRAW LINE ROUTINE (ASCENDING X) 70 FOR L=N TO 2 STEP -1:FOR I=1 TO L-1:IF X(I)<=X(L) THEN 72 71 XT=X(I):X(I)=X(L):X(L)=XT:YT=Y(I):Y(I)=Y(L):Y(L)=YT 72 NEXT I:NEXT L:FOR Q=2 TO N:LINE(X(Q),Y(Q))-(X(Q-1),Y(Q-1)):NEXT Q 73 LINE (0,0)-(239,62),1,B 'box in chart for screen dump 74 KEY ON:RD$="" 75 IF RD$="1" THEN CLS:GOTO 4 ELSE 75 200 REM X-AXIS 201 XA=INT(YX*YI):LX=INT(XA/8)*40:XN$=STR$(XN):XX$=STR$(XX):HX=LX+39:IF HX>319 THEN HX=319 202 HX=HX-LEN(XX$):PRINT @HX,XX$;CHR$(154):PRINT @LX,CHR$(155);XN$;:LINE(0,XA)-(239,XA),1:RETURN 250 REM Y-AXIS 251 YA=INT(-XN*XI):YX$=STR$(YX):HY=INT(YA/6)-LEN(YX$):IF HY<0 THEN HY=0 252 YN$=STR$(YN):LY=INT(YA/6)+280:IF LY>320 THEN LY=320:LY=LY-LEN(YN$)-1 253 PRINT @LY,YN$;CHR$(153);:PRINT @HY,YX$;CHR$(152);:LINE (YA,0)-(YA,63):RETURN 300 REM PLOT INDIVIDUAL POINTS 301 RESTORE 302:FOR QQ=1 TO 5:READ XP%,YP%:XP%=ABS(X(Q)+XP%):YP%=ABS(Y(Q)+YP%):PSET(XP%,YP%):NEXT QQ:RETURN 302 DATA -1,0,0,-1,0,0,0,1,1,0 400 REM KEYBOARD ENTRY 401 CLS:PRINT "**KEYBOARD INPUT**":INPUT "NUMBER OF PAIRS";N:DIM X(N),Y(N): FOR Q=1 TO N:PRINT "PAIR #";Q;" X,Y=";:INPUT X(Q),Y(Q):GOSUB 500:NEXT Q:RETURN 500 REM CHECK FOR MAX &MIN X,Y 501 IF X(Q)XX THEN XX=X(Q) 503 IF Y(Q)YX THEN YX=Y(Q) 505 RETURN 700 REM FILE ENTRY 701 Q=0:IF RD$="1" THEN 704 702 CLS:PRINT "**FILE INPUT**":PRINT "FOR DATA FILES IN THE FORMAT X,Y ETC" 703 FILES:INPUT "NAME OF '.DO' FILE";F$ 704 OPEN F$ FOR INPUT AS 1:IF N=0 THEN INPUT "NUMBER OF PAIRS";N:DIM X(N),Y(N) 705 IF Q=N THEN 708 706 Q=Q+1:INPUT #1,X(Q),Y(Q):GOSUB 500:IF EOF(1) THEN 708 707 GOTO 705 708 N=Q:CLOSE:RETURN 800 REM MAX/MIN Y VALUES (WHEN NO AXIS) 801 PRINT @18,YX;CHR$(152);:PRINT @298,YN;CHR$(153);:RETURN 850 REM MAX/MIN X VALUES (WHEN NO AXIS) 851 PRINT @120,CHR$(155);XN;:XX$=STR$(XX):HX=159-LEN(XX$):PRINT @HX,XX$;CHR$(154);:RETURN 852 Y(Q)=ABS(Y(Q)):PSET(X(Q),Y(Q)):RETURN 'PLOT POINT 853 RETURN 'LINEAR PLOT 854 RETURN 855 RETURN 856 Y(Q)=LOG(Y(Q)):RETURN 'LOG Y AXIS 857 YX=LOG(YX):YN=LOG(YN):RETURN 858 PRINT @72,"LOG Y";:RETURN 859 X(Q)=LOG(X(Q)):RETURN 'LOG X AXIS 860 XX=LOG(XX):XN=LOG(XN):RETURN 'PARAMENTERS LOG X 861 PRINT @72,"LOG X";:RETURN 862 Y(Q)=LOG(Y(Q)):X(Q)=LOG(X(Q)):RETURN 'LOG X,Y AXIS 863 XX=LOG(XX):XN=LOG(XN):YX=LOG(YX):YN=LOG(YN):RETURN 'PARAMETERS LOG X,Y 864 PRINT @71,"LOG X,Y";:RETURN 865 CLS:BEEP:PRINT "**INPUT ERROR--DATA SET CONTAINS":PRINT"INVALID NUMBER FOR LOG FUNCTION":IF R$="F" OR R$="f" THEN PRINT "HIT [F2] FOR RESTART":GOTO 74 ELSE GOTO 1800 866 IF F$="" THEN RETURN 'FLAG FOR REDO 867 CLOSE #1:RD$="1":RETURN 1700 REM error routine 1701 IF ERR=52 OR ERR=55 THEN CLS:PRINT "* * *incorrect file name, try again":RESUME 703 1702 PRINT "error=";ERR;" in line ";ERL 'GO ON TO END 1800 REM END ROUTINE 1801 CLEAR 256,62745:END 'RESTORE MEMORY 63000 REM GRAPHIC DUMP FOR EPSON V1.0 5/17/85 63001 BEEP:IF ZZ%=0 THEN DIM CZ%(50) 63002 FOR BZ%=1 TO 32 STEP 31 'SELECT UPPER/LOWER ROW OF DRIVERS 63003 FOR RZ%=0 TO 3 'ROW WITHIN DRIVER 63004 LPRINT CHR$(27);"K";CHR$(240);CHR$(0);'PREPARE PRINTER FOR ROW 63005 DATA 50,50,50,50,40:DZ%=BZ%:RESTORE 63005:FOR DV%=1 TO 5:READ LZ% 'LENGTH OF DRIVER 63006 CALL 30300:OUT 185,DZ% AND 255:ST%=INP(186) AND 252:OUT 186,ST% OR DZ%\256 'ENABLE DRIVER 63007 DZ%=DZ%*2 'NEXT DRIVER 63008 OUT 254,RZ%*64 'SELECT ROW 63009 FOR PZ%=0 TO LZ%:CZ%(PZ%)=INP(255):NEXT PZ%:FOR PZ%=1 TO LZ%:CALL 62712,CZ%(PZ%):NEXT PZ% 'REVERSE BITS AND SEND TO PRINTER 63010 NEXT DV%:LPRINT CHR$(27);"J";CHR$(24);CHR$(13) '24/216" LINEFEED 63011 NEXT RZ%:NEXT BZ% 'NEXT ROW, BANK 63012 CLS:BEEP:INPUT "Do you want to print out COMMENTS-Y/[N]";CM$:IF CM$<>"Y" AND CM$<>"y" THEN 63015 63013 PRINT "[ENTER] after each line":PRINT"ENTER BLANK LINE TO TERMINATE":PRINT " COMMENT MODE" 63014 LINE INPUT "Comment: ";CM$:IF CM$<>"" THEN LPRINT CM$;CHR$(10):GOTO 63014 63015 IF F$="" THEN 1800 ELSE RD$="1":CLOSE #1 63016 RETURN 63017 RESTORE 63018:FORPP=62712TO62743:READPX:POKEPP,PX:NEXT:RETURN 63018 DATA71,14,128,22,1,30,0,120,161,202,7,245,123,130,95,121,31,218,19,245,79,122,23,87,195,255,244,123,205,63,109,201