home *** CD-ROM | disk | FTP | other *** search
/ Software Du Jour / SoftwareDuJour.iso / COMPUTER / PRINTER / PRNTER3.ARC / PLOTTER.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-10-20  |  3.4 KB  |  87 lines

  1. 10  KEY OFF
  2. 20  W%=40
  3. 30  SCREEN 1:COLOR 1
  4. 50  WID%=W%-8:HGHT%=25-4
  5. 90  DIM A$(51)
  6. 91  DIM X(121),Y1(121),Y2(121),Y3(121),Y4(121),Y5(121)
  7. 99  K%=0
  8. 100  GOSUB 7000
  9. 5000  REM *** INITIALIZE PRINTER ARRAY ***
  10. 5100  FOR I%=1 TO HGHT%
  11. 5110    A$(I%)="      |"+SPACE$(120):NEXT I%
  12. 5120    A$(0)= "      +"+STRING$(120,"-")
  13. 5200  REM *** FIND MIN AND MAX VALUES FOR BOTH AXIES ***
  14. 5210  XMIN=X(0):XMAX=X(0):YMIN=Y1(0):YMAX=Y1(0)
  15. 5220  FOR I%=0 TO WID%
  16. 5230     IF X(I%)=-32768 THEN GOTO 5290
  17. 5232     IF X(I%)<XMIN AND X(I%)<>-32768 THEN XMIN=X(I%):GOTO 5250
  18. 5234     IF X(I%)>XMAX THEN XMAX=X(I%)
  19. 5250     IF Y1(I%)=-32768 THEN PRINT "MISSING `Y' VALUE ERROR - PROGRAM TERMINATED":GOTO 9999 ELSE YCHK%=0
  20. 5252     IF Y1(I%)<YMIN AND Y1(I%)<>-32768 THEN YMIN=Y1(I%):YCHK%=1
  21. 5254     IF Y2(I%)<YMIN AND Y2(I%)<>-32768 THEN YMIN=Y2(I%):YCHK%=1
  22. 5256     IF Y3(I%)<YMIN AND Y3(I%)<>-32768 THEN YMIN=Y3(I%):YCHK%=1
  23. 5258     IF Y4(I%)<YMIN AND Y4(I%)<>-32768 THEN YMIN=Y4(I%):YCHK%=1
  24. 5260     IF Y5(I%)<YMIN AND Y5(I%)<>-32768 THEN YMIN=Y5(I%):YCHK%=1
  25. 5270     IF YCHK%=1 THEN GOTO 5281
  26. 5272     IF Y1(I%)>YMAX AND Y1(I%)<>-32768 THEN YMAX=Y1(I%)
  27. 5274     IF Y2(I%)>YMAX AND Y2(I%)<>-32768 THEN YMAX=Y2(I%)
  28. 5276     IF Y3(I%)>YMAX AND Y3(I%)<>-32768 THEN YMAX=Y3(I%)
  29. 5278     IF Y4(I%)>YMAX AND Y4(I%)<>-32768 THEN YMAX=Y4(I%)
  30. 5280     IF Y5(I%)>YMAX AND Y5(I%)<>-32768 THEN YMAX=Y5(I%)
  31. 5281     NEXT I%
  32. 5290     IF XMIN=XMAX AND YMIN=YMAX THEN PRINT "MAXIMUM AND MINIMUM VALUES FOR BOTH AXIES ARE THE SAME - PROGRAM TERMINATED":GOTO 9999
  33. 5300  REM *** FIND THE INCREMENT VALUE FOR EACH AXIS AND SCALE THE AXIES ***
  34. 5305  MAX=XMAX:MIN=XMIN:SIZ%=WID%:GOSUB 5310:XINCR=INCR:XB=BASE
  35. 5306  MAX=YMAX:MIN=YMIN:SIZ%=HGHT%:GOSUB 5310:YINCR=INCR:YB=BASE
  36. 5309  GOTO 5330
  37. 5310  REM *** SUBROUTINE TO FIND BEST INCREMENT AND BASE VALUES ***
  38. 5311  INCR=1/(SIZ%/(MAX-MIN))
  39. 5312  F=1
  40. 5313  IF (F*INCR)<1 AND 1=CINT(-1*(32767>(F*INCR))*(F*INCR)) THEN INCR=1/F:GOTO 5320
  41. 5314  IF (F*INCR)<0.5 AND (F*INCR)>0.1 THEN INCR=1/(2*F):GOTO 5320
  42. 5315  IF INCR<1 THEN F=F*10 ELSE F=F/10
  43. 5316  GOTO 5313
  44. 5320  BASE=INCR*INT(MIN/INCR):RETURN
  45. 5330  FOR I%=0 TO HGHT% STEP 10
  46. 5340  MID$(A$(I%),2,6)=RIGHT$(SPACE$(5)+STR$(CINT(I%*YINCR+YB%))+"+",6)
  47. 5350  NEXT I%
  48. 5400  XLABEL$=SPACE$(7+WID%)
  49. 5410  FOR I%=0 TO WID% STEP 10
  50. 5420  MID$(A$(0),(7+I%),1)="+"
  51. 5430  MID$(XLABEL$,(3+I%),5)=RIGHT$(SPACE$(5)+STR$(CINT(I%*XINCR+XB)),5)
  52. 5440  NEXT I%
  53. 5500  REM *** PLACE POINTS INTO PLOT ARRAY IN APPROPRIATE LOCATIONS ***
  54. 5510  FOR I%=0 TO WID%
  55. 5520  IF X(I%)=-32768 THEN GOTO 5600 ELSE XP%=7+CINT((X(I%)-XB)/XINCR)
  56. 5530  IF Y1(I%)=-32768 THEN GOTO 5600 ELSE MID$(A$(CINT((Y1(I%)-YB)/YINCR)),XP%,1)="*"
  57. 5540  IF Y2(I%)=-32768 THEN GOTO 5600 ELSE MID$(A$(CINT((Y2(I%)-YB)/YINCR)),XP%,1)="+"
  58. 5550  IF Y3(I%)=-32768 THEN GOTO 5600 ELSE MID$(A$(CINT((Y3(I%)-YB)/YINCR)),XP%,1)="O"
  59. 5560  IF Y4(I%)=-32768 THEN GOTO 5600 ELSE MID$(A$(CINT((Y4(I%)-YB)/YINCR)),XP%,1)="#"
  60. 5570  IF Y5(I%)=-32768 THEN GOTO 5600 ELSE MID$(A$(CINT((Y5(I%)-YB)/YINCR)),XP%,1)="."
  61. 5600  NEXT I%
  62. 6000  REM *** OUTPUT THE FINISHED PLOT ***
  63. 6001  IF K%<=1 THEN GOTO 6005
  64. 6002  FOR X%=1 TO 15:Y$=INKEY$:NEXT X%
  65. 6003  IF INKEY$="" THEN 6003
  66. 6005  CLS
  67. 6010  FOR I%=0 TO HGHT%
  68. 6020  PRINT LEFT$(A$(HGHT%-I%),WID%+7)
  69. 6030  NEXT I%
  70. 6040  PRINT LEFT$(XLABEL$,WID%+7)
  71. 6050  PRINT SPACE$(WID%\2)+LABL$
  72. 6999  GOTO 100
  73. 7000  REM *** LOOP THROUGH POSSIBLE CURVES FOR PLOTTING ***
  74. 7005  FOR I%=0 TO 120:X(I%)=-32768:Y1(I%)=-32768:Y2(I%)=-32768:Y3(I%)=-32768:Y4(I%)=-32768:Y5(I%)=-32768:NEXT I%
  75. 7010  IF K%=0 THEN 7050 ELSE IF K%=1 THEN 7060 ELSE IF K%=2 THEN 7070 ELSE IF K%=3 THEN 7100
  76. 7040  FOR X%=1 TO 15:Y$=INKEY$:NEXT X%
  77. 7041  IF INKEY$="" THEN 7041
  78. 7042  SCREEN 0: PRINT"FOR PRINTER, CHANGE PRINT'S TO LPRINT IN PROGRAM.": END
  79. 7050  FOR I%=0 TO 30:X(I%)=I%:Y1(I%)=3*I%:NEXT I%
  80. 7051  LABL$="LINEAR PLOT":K%=1:GOTO 5000
  81. 7060  FOR I%=0 TO 30:X(I%)=I%:Y1(I%)=((I%-15)/1.5)^2:NEXT I%
  82. 7061  LABL$="PARABOLIC PLOT":K%=2:GOTO 5000
  83. 7070  FOR I%=0 TO 30:X(I%)=I%:Y1(I%)=50+50*SIN(I%/2):NEXT I%
  84. 7071  LABL$="TRIGONOMETRIC PLOT":K%=3:GOTO 5000
  85. 7100  FOR I%=0 TO 30:X(I%)=I%:Y1(I%)=3*I%:Y2(I%)=((I%-15)/1.5)^2:Y3(I%)=50+50*SIN(I%/2):NEXT I%
  86. 7101  LABL$="COMBINATION PLOT":K%=999:GOTO 5000
  87.