~aleteoryx/pb1000

pb1000/clock.b -rw-r--r-- 2.3 KiB
718a70d5 — Aleteoryx init 11 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
  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