'Build 2.07 will explain significance of brackets
'Build 2.06 corrected bug effecting pauses of length different to the note they follow. (Nokia's fault not mine)
'Build 2.05 changed colours (sorry)
'Build 2.04 drop file to desktop
'build 2.03 add length support
KEY 15, CHR$(32) + CHR$(1)
KEY 16, CHR$(64) + CHR$(1)
KEY 17, CHR$(96) + CHR$(1)
KEY 18, CHR$(0) + CHR$(1)
ON ERROR GOTO bottm
ON KEY(15) GOSUB 543
ON KEY(16) GOSUB 543
ON KEY(17) GOSUB 543
ON KEY(18) GOSUB 543
KEY(17) ON
KEY(18) ON
KEY(16) ON
KEY(15) ON
 COLOR 7, 1, 1
 CLS
 f$ = "c:\windows\desktop\melody.txt"
7720
      OPEN f$ FOR APPEND LOCK WRITE AS #1
  
PRINT #1, "File Created With Mobile Melody Converter v2.08. By Nigel Coldwell"
PRINT #1, "**************************************************"
PRINT #1, " "
CLOSE
top:
'melody converter
has% = 0
totln = 0

PRINT "(v2.08) Enter string to be converted containing no carrage returns"
INPUT ":- ", a$
    OPEN f$ FOR APPEND LOCK WRITE AS #1
PRINT #1, "Enter string to be converted containing no carrage returns :-"


PRINT " "
a$ = a$ + " 1c1"
e$ = "": d$ = ""
   
FOR a = LEN(a$) TO 1 STEP -1
c$ = LEFT$(RIGHT$(a$, a), 1)
'PRINT c$
IF c$ = "," THEN c$ = " "
IF (INSTR(1, "123468abcdefgABCDEFG.-# ", c$)) THEN c$ = c$ ELSE c$ = "": BEEP
c$ = LCASE$(c$)
'PRINT ; ((INSTR(1, "123468abcdefg.-# ", c$)));
'PRINT c$, e$
IF NOT (c$ = " " AND d$ = " ") THEN e$ = e$ + c$ ELSE BEEP
d$ = c$
NEXT
a$ = e$
PRINT a$
PRINT #1, " "
PRINT #1, LEFT$(a$, LEN(a$) - 4)
IF RIGHT$(a$, 1) <> " " THEN a$ = a$ + " "

noofks = 0
COLOR 14, 1, 1
l = 4: o = 1
PRINT " "
1
IF LEN(a$) < 7 THEN maxl = LEN(a$) ELSE maxl = 7
FOR a = 1 TO maxl
IF RIGHT$(LEFT$(a$, a), 1) = " " THEN cut = a: a = maxl

NEXT
b$ = LEFT$(a$, cut)
IF cut < LEN(a$) THEN a$ = RIGHT$(a$, LEN(a$) - cut) ELSE GOTO 4
'PRINT b$
GOSUB eachnote

GOTO 1

eachnote:
k$ = ""
IF INSTR(1, "1234567890", LEFT$(RIGHT$(b$, LEN(b$) - 1), 1)) THEN durl = 2 ELSE durl = 1
rl = VAL(LEFT$(b$, durl))
IF rl = 0 THEN GOTO bottm
IF RIGHT$(LEFT$(b$, durl + 1), 1) = "." THEN dot = 1: durl = durl + 1 ELSE dot = 0
IF RIGHT$(LEFT$(b$, durl + 1), 1) = "#" THEN sharp = 1: durl = durl + 1 ELSE sharp = 0
note$ = RIGHT$(LEFT$(b$, durl + 1), 1)
totln = totln + 32 / rl
'PRINT rl
IF dot THEN totln = totln + 16 / rl
durl = durl + 1
ro = VAL(RIGHT$(LEFT$(b$, durl + 1), 1))
IF note$ = "-" THEN ro = o
'PRINT rl; " "; dot; " "; sharp; " "; note$; " "; ro

IF dot THEN PRINT ; " (";  ELSE PRINT ; "  ";
IF note$ = "a" THEN PRINT ; "6";
IF note$ = "b" THEN PRINT ; "7";
IF note$ = "c" THEN PRINT ; "1";
IF note$ = "d" THEN PRINT ; "2";
IF note$ = "e" THEN PRINT ; "3";
IF note$ = "f" THEN PRINT ; "4";
IF note$ = "g" THEN PRINT ; "5";
IF note$ = "-" THEN PRINT ; "0";
IF dot THEN PRINT ; ") ";  ELSE PRINT ; "  ";
IF dot THEN PRINT #1, ; " (";  ELSE PRINT #1, ; "  ";
IF note$ = "a" THEN PRINT #1, ; "6";
IF note$ = "b" THEN PRINT #1, ; "7";
IF note$ = "c" THEN PRINT #1, ; "1";
IF note$ = "d" THEN PRINT #1, ; "2";
IF note$ = "e" THEN PRINT #1, ; "3";
IF note$ = "f" THEN PRINT #1, ; "4";
IF note$ = "g" THEN PRINT #1, ; "5";
IF note$ = "-" THEN PRINT #1, ; "0";
IF dot THEN PRINT #1, ; ") ";  ELSE PRINT #1, ; "  ";
IF dot THEN has% = 1

noofks = noofks + 1
IF noofks / 16 = noofks \ 16 THEN PRINT ; " ": PRINT #1, ; " "

IF rl - l = 2 OR rl - l = 8 OR rl - l = 4 OR rl - l = 16 OR rl - l = 1 THEN k$ = k$ + "8"
IF rl - l = -2 OR rl - l = -8 OR rl - l = -4 OR rl - l = -16 OR rl - l = -1 THEN k$ = k$ + "9"
IF rl - l = 6 OR rl - l = 12 OR rl - l = 24 OR rl - l = 3 THEN k$ = k$ + "88"
IF rl - l = -6 OR rl - l = -12 OR rl - l = -24 OR rl - l = -3 THEN k$ = k$ + "99"
IF rl - l = 14 OR rl - l = 28 OR rl - l = 7 THEN k$ = k$ + "888"
IF rl - l = -14 OR rl - l = -28 OR rl - l = -7 THEN k$ = k$ + "999"
IF rl - l = 30 OR rl - l = 15 THEN k$ = k$ + "8888"
IF rl - l = -30 OR rl - l = -15 THEN k$ = k$ + "9999"
IF rl - l = 31 THEN k$ = k$ + "88888"
IF rl - l = -31 THEN k$ = k$ + "99999"


IF ro - o = 1 THEN k$ = k$ + "*"
IF ro - o = 2 OR ro - o = -1 THEN k$ = k$ + "**"

IF sharp THEN k$ = k$ + "#"

FOR k = 1 TO LEN(k$)
PRINT ; "  "; RIGHT$(LEFT$(k$, k), 1); "  ";
PRINT #1, ; "  "; RIGHT$(LEFT$(k$, k), 1); "  ";

noofks = noofks + 1
IF noofks / 16 = noofks \ 16 THEN PRINT " ": PRINT #1, " "
NEXT

o = ro: IF note$ <> "-" THEN l = rl



RETURN
4
COLOR 7, 1, 1
PRINT " "
IF has% THEN PRINT "NB Keys in brackets must be held until a dot appears."
IF has% THEN PRINT #1, " "
IF has% THEN PRINT #1, "NB Keys in brackets must be held until a dot appears."

PRINT " "
PRINT #1, " "
wrngtmp:
INPUT "Enter tempo (32-255)"; t%
IF t% < 32 OR t% > 255 THEN GOTO wrngtmp
m$ = "MB T" + STR$(t%)
PRINT "Tune length "; totln; " 32nds of a note @ tempo ="; t%; " quater notes "
PRINT "per minute is "; CINT(totln / 32 / t% * 24000) / 100; " secs."
PRINT " "
PRINT #1, "Tune length "; totln; " 32nds of a note @ tempo ="; t%; " quater notes "
PRINT #1, "per minute is "; CINT(totln / 32 / t% * 24000) / 100; " secs."
PRINT #1, " "

a$ = e$
IF RIGHT$(a$, 1) <> " " THEN a$ = a$ + " "
l = 4: o = 1
8
IF LEN(a$) < 7 THEN maxl = LEN(a$) ELSE maxl = 7
FOR a = 1 TO maxl
IF RIGHT$(LEFT$(a$, a), 1) = " " THEN cut = a: a = maxl

NEXT
b$ = LEFT$(a$, cut)
IF cut < LEN(a$) THEN a$ = RIGHT$(a$, LEN(a$) - cut) ELSE GOTO 10
'PRINT b$
GOSUB eachplay

GOTO 8
10
PRINT #1, "**************************************************"

CLOSE
PLAY m$
GOTO top

eachplay:

IF INSTR(1, "1234567890", LEFT$(RIGHT$(b$, LEN(b$) - 1), 1)) THEN durl = 2 ELSE durl = 1
rl = VAL(LEFT$(b$, durl))

IF RIGHT$(LEFT$(b$, durl + 1), 1) = "." THEN dot = 1: durl = durl + 1 ELSE dot = 0
IF RIGHT$(LEFT$(b$, durl + 1), 1) = "#" THEN sharp = 1: durl = durl + 1 ELSE sharp = 0
note$ = RIGHT$(LEFT$(b$, durl + 1), 1)
durl = durl + 1
ro = VAL(RIGHT$(LEFT$(b$, durl + 1), 1))

m$ = m$ + "O" + STR$(ro + 2)
m$ = m$ + "L" + STR$(rl)
IF note$ <> "-" THEN m$ = m$ + note$ ELSE m$ = m$ + "P" + STR$(rl)
IF sharp THEN m$ = m$ + "#"
IF dot THEN m$ = m$ + "."

RETURN
543
CLS
SCREEN 0
PRINT " "
PRINT "Bye Bye...."
PRINT " "
PRINT "Melody 2.08 produced by Nigel Coldwell"
PRINT "E-Mail nokiatonesandstuff@yahoo.com"
PRINT "http://www.geocities.com/nokiatonesandstuff"
PRINT " "
PRINT "This program is freely distributable so long as"
PRINT "it remains intact and unaltered."

old = TIMER
DO UNTIL TIMER - old > 1: LOOP
PRINT " "
PRINT "Nigel Coldwell"
CLOSE
SYSTEM

bottm:
IF ERR <> 76 THEN PRINT "Unexpected error, check inputs and start from begining."
IF ERR <> 76 THEN CLOSE
IF ERR <> 76 THEN COLOR 7, 1, 1
IF ERR <> 76 THEN GOTO top

f$ = "melody.txt"
GOTO 7720

