DECLARE SUB distcalc ()
DECLARE SUB fretdist ()
DECLARE SUB intrvlout ()
DECLARE SUB intrvlcalc ()
10

CLS
CONST trt = 1.059463094#
DIM SHARED intrvl(1 TO 24)  AS DOUBLE
DIM SHARED dist(0 TO 24) AS DOUBLE
DIM SHARED slength AS SINGLE
DIM SHARED prt AS INTEGER
prt = 0
INPUT "Enter the scale length in inches (decimal). "; slength


CALL intrvlcalc
CALL distcalc

100
PRINT "new = enter new scale length"
PRINT "prt = output to printer"
PRINT "int = outputs fret intervals"
PRINT "dst = ouputs distance from all frets to a particular fret."
PRINT "q   = quit "

INPUT "enter command"; comm$
IF comm$ = "new" GOTO 10
IF comm$ = "prt" THEN prt = 1
IF comm$ = "int" THEN CALL intrvlout
IF comm$ = "dst" THEN CALL fretdist
IF comm$ = "q" THEN SYSTEM
GOTO 100

SUB distcalc
DIM sum AS SINGLE

sum = 0


FOR a = 1 TO 24

sum = sum + intrvl(a)
dist(a) = sum

NEXT a

END SUB

SUB fretdist
DIM distance AS SINGLE
DIM distance64 AS SINGLE
DIM distance64p AS INTEGER
INPUT "Enter fret # (nut = 0) from which measurements are taken. "; fretnum

CLS
PRINT "Scale length = "; slength
PRINT "Distances from fret # "; fretnum; "  (0=nut)"

IF prt = 1 THEN LPRINT " "
IF prt = 1 THEN LPRINT "Scale length = "; slength
IF prt = 1 THEN LPRINT "Distances from fret # "; fretnum; "  (0=nut)"


FOR a = 0 TO 24

distance = ABS(dist(a) - dist(fretnum))


distance64 = distance * 64

distance64 = distance64 * 10
distance64 = CINT(distance64)
distance64 = distance64 / 10

distance64p = 0
330 IF distance64 >= 64 THEN
       distance64 = distance64 - 64
       distance64p = distance64p + 1
       GOTO 330
    END IF
distance64 = distance64 * 10
distance64 = CINT(distance64)
distance64 = distance64 / 10

PRINT "To fret # "; a; " is "; distance64p; " and "; distance64; "/64 inches"
IF prt = 1 THEN LPRINT " "

IF prt = 1 THEN LPRINT "To fret # "; a; " is "; distance64p; " and "; distance64; "/64 inches"




NEXT a
END SUB

SUB intrvlcalc
FOR a = 1 TO 24
intrvl(a) = (slength / 17.817162#) / (trt ^ (a - 1))
NEXT a
END SUB

SUB intrvlout
DIM space AS SINGLE
DIM spa64 AS SINGLE
DIM spa64p AS INTEGER


PRINT "scale length = "; slength; " inches"
IF prt = 1 THEN LPRINT " "
IF prt = 1 THEN LPRINT "scale length = "; slength; " inches"

FOR a = 1 TO 24
space = intrvl(a)
  spa64 = intrvl(a) * 64
  spa64p = 0

spa64 = spa64 * 10
spa64 = CINT(spa64)
spa64 = spa64 / 10


200 IF spa64 >= 64 THEN
       spa64 = spa64 - 64
       spa64p = spa64p + 1
       GOTO 200
    END IF
spa64 = spa64 * 10
spa64 = CINT(spa64)
spa64 = spa64 / 10


PRINT "fret "; a - 1; " to "; a; " = "; space; "   ", spa64p; " and "; spa64; " / 64   inches"
IF prt = 1 THEN LPRINT " "
IF prt = 1 THEN LPRINT "fret "; a - 1; " to "; a; " = "; space; "   ", spa64p; " and "; spa64; " / 64   inches"




NEXT a

END SUB

