! Reverie diary
!
!
!
!
TTS.INIT
! init display mode manager


BUNDLE.CREATE global %' 'global' bundle pointer = #1
BUNDLE.PUT global, "mode", "html"


! init display mode manager
FN.DEF dinit()
 LET s$="<html><body style=\"background-color:black\"></body></html>"
 HTML.OPEN 0
 HTML.LOAD.STRING s$
 BUNDLE.PUT 1,"mode","html"
FN.END 


! change display mode to console,html or gr(aphics)
FN.DEF dmode(m$)
 BUNDLE.GET 1,"mode",oldm$
 IF oldm$=m$ THEN FN.RTN 0
 BUNDLE.PUT 1,"mode",m$
 IF oldm$="html" THEN HTML.CLOSE
 IF oldm$="gr" THEN GR.CLOSE
 IF m$="html" THEN HTML.OPEN 0
 IF m$="gr" THEN GR.OPEN 255,0,0,0,0,1
 PAUSE 300
FN.END





FN.DEF readln$(f$) 
 IF isold(f$)
  TEXT.OPEN r,h,f$
  TEXT.READLN h,a$
  TEXT.CLOSE h
 ELSE
  LET A$=""
 ENDIF
 FN.RTN TRIM$(a$)
FN.END


FN.DEF isold(f$) 
 FILE.EXISTS o,f$ 
 FN.RTN o
FN.END

FN.DEF appendln(f$,m$) 
 TEXT.OPEN a,h,f$
 TEXT.WRITELN h,m$
 TEXT.CLOSE h
FN.END

FN.DEF writeln(f$,msg$) 
 TEXT.OPEN w,h,f$
 TEXT.WRITELN h,msg$
 TEXT.CLOSE h 
FN.END






FN.DEF isadigit(s$) 
 FN.RTN IS_IN(s$,"-0123456789.")
FN.END


! extract number from s$
FN.DEF readnumber(s$) 
 LET N$=""
 FOR i=1 TO LEN(s$) 
  LET C$=MID$(s$,I,1)
  IF isadigit(c$) THEN N$+=c$
 NEXT i
 IF LEN(n$)>0 THEN FN.RTN VAL(n$) 
 FN.RTN 0
FN.END



FN.DEF waitclick$()
 DO
  PAUSE 100
  HTML.GET.DATALINK data$
  IF BACKGROUND() 
   cs=CLOCK()
   DO
    PAUSE 100
   UNTIL (CLOCK()-cs)>5000|!BACKGROUND()
   IF BACKGROUND() THEN EXIT
  ENDIF
 UNTIL data$ <> ""
 ! popup data$,0,0,0
 IF IS_IN("BAK:",data$)=1
  EXIT
 ELSEIF IS_IN("DAT:",data$)=1
  data$=MID$(data$,5) %' User link
 ELSEIF IS_IN("LNK:file:///",data$)=1&IS_IN("?",data$) %' Submit link
  i=IS_IN("?",data$)
  data$="SUBMIT&"+MID$(data$,i+1)+"&"
 ENDIF
 FN.RTN data$
FN.END


FN.DEF asklist$(l,msg$,c)
 r$="<br>"
 h$="<!DOCTYPE html><html lang=~en~>"
 h$+="<h1 style=~color:#00ff00~>"+msg$ +"</h1>"
 h$+="<body style=~background-color:#000000; text-align:center;~>"


 LIST.SIZE l,z

 h$+="<div>"

 FOR i=1 TO z
  LIST.GET l,i,s$
  s$=REPLACE$(s$,"'","&apos;")
  but$="<button type=~button~  style=~background-color:#000000;color:#00FF00;text-align:center;font-size:20px;width:300px;height:50px;moz-border-radius: 15px; -webkit-border-radius: 15px;~ onclick=~doDataLink('"+STR$(i)+"')~;>"+s$+"</button><br>"


  h$+=but$
 NEXT i
 h$+="</div>"
 h$+="<script type=~text/javascript~>"
 h$+="function doDataLink(data) "
 h$+="{Android.dataLink(data);}</script>"
 h$+="</body>"
 h$+="</html>"
 h$=REPLACE$(h$,"~","\"")
 dmode("html")
 HTML.LOAD.STRING h$
 DO
  r$=waitclick$()
  c=readnumber(r$)
 UNTIL c>0
 !popup r$
 LIST.GET l,c,s$

 FN.RTN s$
FN.END















FN.DEF htmledit$(p$,s$) 

 dmode("html")
 w$="<html>"
 w$+="<head >"
 w$+="<meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\"/>"
 w$+="<title >edit text</title>"
 w$+="</head>"
 w$+="<script type=\"text/javascript\">"
 w$+="function doDataLink(data) {"
 w$+="Android.dataLink(data);"
 w$+="}"
 w$+="</script>"
 w$+="<body bgcolor=\"black\" >"
 w$+="<div align=\"left\">"
 w$+="<h2 style=\"color:#999999\">###prompt</h2>"
 w$+=""
 w$+="<form id='main' method='get' action='FORM'>"
 w$+="<input type='submit' style=\"float:left;\" name='submit' value='Done'/>"
 w$+="<TEXTAREA NAME=\"id\"  ROWS=10 COLS=30 style=\"font-size:16px;\" >"
 w$+="###edit"
 w$+="</TEXTAREA>"
 w$+="</form>"
 w$+="</div>"
 w$+="</body>"
 w$+="</html>"
 w$ =REPLACE$(w$,"###prompt",p$)
 w$ = REPLACE$(w$,"###edit", TRIM$(s$))
 HTML.LOAD.STRING w$
 HTML.LOAD.URL "javascript:DoDataLink(document.getElementById('id'))
 r$=waitclick$()
 ! popup "please wait..."
 s$= DECODE$("URL","UTF-8",r$)
 s$=REPLACE$(s$,"SUBMIT&submit=Done&id=","")
 s$=LEFT$(s$,LEN(s$)-1)
 FN.RTN s$
FN.END 



FN.DEF Sendemail(user$) 
 IF isold(user$) THEN GRABFILE m$, user$
 LET M$=REPLACE$(m$, CHR$(13),CHR$(10))
 EMAIL.SEND "" ,"Reverie list",m$
FN.END



!=============================================================
!
!
! MAIN
!

TIME Year$, Month$, Day$, Hour$, Minute$, Second$, WeekDay, isDST

ARRAY.LOAD Months$[], "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"

LET Lastdate$=readln$("Revlastdate.txt") 

LET User$="rev list.txt"

LET Today$="###"+ Months$[VAL(month$)]+" "+day$


IF today$<> lastdate$
 Writeln("Revlastdate.txt", today$) 
ENDIF


dinit()

autoquit=readln$("autoquit")="1"

Main:


auto$="autoquit:off"
IF autoquit THEN auto$="autoquit:on"

LIST.CREATE s,cl
LIST.ADD cl,"new item","add with voice","view/edit","recall", "email",auto$,"quit"
c=0
R$=asklist$(cl,"Reverie  List",&c)


IF R$="view/edit"
 S$="" 
 FILE.EXISTS e, user$
 IF e THEN GRABFILE s$,user$
 S$=TRIM$(s$) 
 UNDIM ff$[] 
 SPLIT ff$[], s$, "\n" 
 ARRAY.LENGTH n, ff$[]
 IF LEN(s$)<5 THEN n=0
 s$=htmledit$("view/edit:<br>  ("+INT$(n)+" memories)" ,s$) 
 writeln(user$,s$)
 GOTO main
ENDIF

IF R$="email" 
 sendemail(user$) 
 GOTO main
ENDIF

IF R$="recall" 
 IF isold(user$) THEN GRABFILE f$, user$
 F$=TRIM$(f$) 
 IF LEN(f$) >8
  UNDIM ff$[] 
  SPLIT ff$[], f$, "\n" 
  ARRAY.LENGTH n, ff$[]
  R=FLOOR(RND() * n) +1
  POPUP ff$[r] 
  TTS.SPEAK ff$[r] 
 ELSE
  POPUP "no memories yet!" 
 ENDIF

ENDIF

IF R$="add with voice"
 dmode("console")
 STT.LISTEN "Say a happy memory"
 STT.RESULTS theList
 LIST.GET thelist,1,msg$
 IF msg$="Recognition Cancelled" THEN GOTO main
 c=0
 LIST.SIZE thelist,z
 IF z>1
  LIST.ADD thelist,"cancel"
  msg$=asklist$(thelist,"what did you say?",&c)
 ENDIF
 IF msg$<>"cancel"
  Appendln(user$, msg$) 
  POPUP msg$+"...added!"
  IF autoquit THEN EXIT
 ENDIF

ENDIF


IF R$="new item"
 dmode("console")
 INPUT "Enter a happy memory",msg$,"",canc
 IF canc
  POPUP "cancelled"
 ELSE
  Msg$=REPLACE$(msg$, "<br>" ,"")
  Msg$=REPLACE$(msg$, CHR$(10) ,"")

  Appendln(user$,msg$) 
  POPUP msg$+"...added!"
 ENDIF
 IF autoquit THEN EXIT

 GOTO main
ENDIF 


IF IS_IN("autoquit",R$)
 autoquit=!autoquit
 writeln("autoquit",INT$(autoquit))
ENDIF

IF R$="quit" THEN EXIT


GOTO main
