月単位のカレンダーを表示するミニユーティリティー。
操作は十字ボタン左右で月・LRボタンで年の移動だ。
このプログラムのポイントは、曜日を割り出す方法。「ツェラーの公式」がその秘密だが、くわしくはCHECK POiNTコーナーを見てみよう。
F-FLOOR(F/7)*7
という計算をしているのがポイントじゃな。%
」を使う方法もあるね。A=B%3
で、変数Aに「Bを3で割った余り」が入るしくみだよ。BASICではあんまり見ない仕様なんだけど……
FLOOR
が活躍しておるな。
- VISIBLE 1,1,0,0,0,0
- CLS:CLEAR:COLOR 0
- DATA ”Sun”,”Mon”,”Tue”,”Wed”
- DATA ”Thu”,”Fri”,”Sat”
- DIM D$(50)
- FOR I=0 TO 6:READ D$(I):NEXT
- FOR I=7 TO 49:D$(I)=””:NEXT
- DTREAD(DATE$),Y,M,D
- D=1:GOSUB @ZERRER
- GOSUB @LONG
- GOSUB @DISP
- @LOOP
- P=BUTTON()
- IF P==4 THEN M=M-1:GOTO @W
- IF P==8 THEN M=M+1:GOTO @W
- IF P==256 THEN Y=Y-1:GOTO @W
- IF P==512 THEN Y=Y+1:GOTO @W
- GOTO @LOOP
- @W
- COLOR 0
- IF M<1 THEN M=12:Y=Y-1
- IF M>12 THEN M=1:Y=Y+1
- D=1:GOSUB @ZERRER
- FOR I=7 TO 49:D$(I)=””:NEXT
- VSYNC 10
- GOSUB @DISP
- GOTO @LOOP
- @DISP
- CLS
- ? ”キムキム コヨミ ”;Y;” ”;M
- FOR I=1 TO L
- D$(I+G+6)=STR$(I):NEXT
- COLOR 13:FOR I=0 TO 6
- LOCATE 0,3+I*2:? D$(I*7)
- NEXT
- COLOR 0
- FOR J=1 TO 5
- FOR I=0 TO 6
- LOCATE J*4,3+I*2:? D$(I*7+J)
- NEXT
- NEXT
- COLOR 9:FOR I=0 TO 6
- LOCATE 24,3+I*2:? D$(I*7+6)
- NEXT
- RETURN
- @ZERRER
- ’G=0:SUN,1:MON,2:TUE..7:SAT
- A=Y+FLOOR(Y/4)
- B=FLOOR(Y/100)
- C=FLOOR(Y/400)
- E=FLOOR((13*M+8)/5)
- F=A-B+C+E+D:G=F-FLOOR(F/7)*7
- RETURN
- @LONG
- R=M-FLOOR(M/2)*2
- IF M<8 THEN L=30+R
- IF M>7 THEN L=31-R
- IF M==2 THEN GOSUB @URU
- RETURN
- @URU
- L=28:R=Y-FLOOR(Y/4)
- IF R==0 THEN L=29
- R=Y-FLOOR(Y/100)
- IF R==0 THEN L=28
- R=Y-FLOOR(Y/400)
- IF R==0 THEN L=29
- RETURN