9 'setup screen
10 CLS
11 PRINT"The date is ."
12 PRINT"The time is ."
14 LOCATE 0,3
15 PRINT"[exit ][change][redraw] ";
29 'test buttons. the touch buttons are mapped to keycodes 240-255
30 GOSUB 500
35 K=ASC(INKEY$)
40 ON K-251 GOTO 60,100,10
45 GOTO 30
59 'exit
60 CLS
65 PRINT"Bye!"
70 END
99 'date set menu
100 LOCATE 0,3
105 PRINT"change? [date ][time ][cancel]"
110 GOSUB 500
114 'debounce keypress, in theory
115 K=ASC(INKEY$)
116 IF ASC(INKEY$)<>0 GOTO 116 ELSE 120
120 ON K-252 GOTO 200,300,30
125 GOTO 110
195 'set date
200 PMAX=9999
205 PSTR$="year"
210 PVAL$=RIGHT$(DATE$,4)
215 GOSUB 600
220 NY$=PVAL$
225 NY=VAL(NY$)
230 PMAX=12
235 PSTR$="month"
240 PVAL$=LEFT$(DATE$,2)
245 GOSUB 600
250 NM$=PVAL$
255 NM=VAL(NM$)
260 IF NM=2 AND NY MOD 4=0 AND NY MOD 100<>0 THEN PMAX=29 ELSE 400
265 PSTR$="day"
270 PVAL$=MID$(DATE$,4,2)
275 GOSUB 600
280 DATE$=NM$+"-"+PVAL$+"-"+NY$
285 GOTO 10
299 'set time
300 PMAX=23
305 PSTR$="hour"
310 PVAL$=LEFT$(TIME$,2)
315 GOSUB 600
320 NH$=PVAL$
325 PMAX=59
330 PSTR$="minute"
335 PVAL$=MID$(TIME$,4,2)
340 GOSUB 600
345 NT$=NH$+":"+PVAL$
350 LOCATE 0,3
355 PRINT "[set time to ";NT$;" ][cancel]";
360 GOSUB 500
365 K=ASC(INKEY$)
370 IF K<252 GOTO 360 ELSE IF K<>255 GOTO 375 ELSE 100
375 TIME$=NT$
380 GOTO 10
399 'days in month
400 RESTORE 430
405 FOR I=1 TO NM
410 READ PMAX
415 NEXT
420 GOTO 265
430 DATA 31,28,31,30,31,30,31,31,30,31,30,31
499 'print time
500 LOCATE 12,0
510 PRINT DATE$
515 LOCATE 12,1
520 PRINT TIME$
525 RETURN
598 'prompting routine
599 PMAX=max val, PSTR$=prompt, PVAL$=result
600 LOCATE 0,3:PRINT" ";:LOCATE 0,0
605 LOCATE 0,3:PRINT"set ";PSTR$;" ( 1 -";PMAX;")> ";PVAL$;"_";
610 GOSUB 500
615 K=ASC(INKEY$)
620 IF K=13 AND VAL(PVAL$)<>0 GOTO 660 ELSE IF K=8 GOTO 625 ELSE IF K>=48 AND K<58 GOTO 640 ELSE 610
624 'backspace
625 PVAL$=LEFT$(PVAL$,LEN(PVAL$)-1)
630 GOTO 600
639 'digits. allow leading 0s, don't allow value >PMAX
640 NPV$=PVAL$+CHR$(K)
645 NPV=VAL(NPV$)
650 IF (NPV=0 AND K<>48) OR NPV>PMAX GOTO 610 ELSE PVAL$=NPV$:GOTO 600
659 'EXE=submit
660 PLEN=LEN(STR$(PMAX))-1
664 'truncate or add leading 0s
665 IF LEN(PVAL$)<PLEN THEN PVAL$=LEFT$("0000",PLEN-LEN(PVAL$)) ELSE PVAL$=RIGHT$(PVAL$,PLEN)
669 'debounce
670 IF ASC(INKEY$)<>0 GOTO 670 ELSE RETURN