THE
PAST
MASTER
CLUB
CLOCK & CALENDAR.HTM
' ** NICK K. VAN VLIET AUG/98 CLOCK.bas VERS2.7 CALENDAR (C) 1964/81
' **
' ** HOME PAGE: http://www.geocities.com/klaus_vanv/index.html
' **
' ** LOOK FOR MORE BAS FILES; AS WELL AS, OTHER PERHAPS MORE INTERESTING
' ** PROGRAM FILES.
' **
DEFDBL A-Z
DECLARE SUB MASK ()
DECLARE SUB DIAL () 'face
DECLARE SUB DrawCircles (T, scale, radius, X0, Y0, clr, size) 'dots
DECLARE SUB HALO (scale, X0, Y0, clr) 'circle
DECLARE SUB CALENDAR () 'calendar
CONST true = -1
CONST false = NOT true
CONST pi = 3.141592654# 'PI /7 = 0.44880 4 * ATN(1#)
CONST maxx = 319 - 3 'half of 640x480
CONST maxy = 239 'half screen
CONST RADIUS0 = 220
CONST radius1 = 200
CONST radius2 = 190
CONST radius3 = 140
CONST BRDR = 10
CONST CLRH = 0 ' 12
COMMON SHARED xx, yy, RW, CL, IY, ID, DD, CLK, RWK, K$, DI, KD
COMMON SHARED X0, Y0, h, K, A$, G, R, S, T, U, C, clr, LTR$, radius
SCREEN 12 '640x480 w/256 colors
DIM SHARED B(6 * 6): DIM SHARED C(18 * 18): DIM SHARED D(18 * 18)
DrawCircles T, 3, 0, 3, 3, 12, 7.5 '15 MINS RD12
GET (0, 0)-(9, 9), B
CLS
DrawCircles T, 9, 0, 9, 9, 14, 30 'HOURS YEL14
GET (0, 0)-(18, 18), C
CLS
DrawCircles T, 9, 0, 9, 9, 4, 30 'HOUR HAND BK0
GET (0, 0)-(18, 18), D
DD = 0: SCK = VAL(MID$(TIME$, 7, 2))
CLS
PAINT (1, 1), 9 '7=lgrey 9=lblue
x1 = RADIUS0 + 15 + maxx
y1 = maxy
FOR II = 0 TO 360
X2 = (RADIUS0 + 15) * COS((II + 0) / 180 * pi) + maxx
Y2 = (RADIUS0 + 15) * SIN((II + 0) / 180 * pi) + maxy
LINE (x1, y1)-(X2, Y2), 4 'CLCK OUTLINE
x1 = X2: y1 = Y2
NEXT II
DIAL 'FACE
CALENDAR 'CALENDAR
MASK 'RESTORE CORNERS
alarm = false: salarm = false
LOCATE 27, 68: PRINT "S=Set Alarm"
LOCATE 28, 68: PRINT "A=Alarm Off"
LOCATE 28, 3: PRINT "cntrl pause=exit"
DO ' <<<<<<< MAIN LOOP <<<<<<<<
IF ID <> VAL(MID$(DATE$, 4, 2)) THEN RUN: ' start over at midnight!
y$ = TIME$
LOCATE RW, CL + 14 - KD: COLOR BRDR: PRINT y$
hr = CDBL(VAL(MID$(y$, 1, 2))): 'PRINT hr
MN = CDBL(VAL(MID$(y$, 4, 2))): 'PRINT mn
sc = CDBL(VAL(MID$(y$, 7, 2))): 'PRINT sc: INPUT u$
MN = CDBL(MN + sc / 60#)
hr = CDBL(hr + MN / 60#)
'HOUR HAND
x1 = radius1 * COS((90 - (hr * 30)) / 180 * pi) '360/12=30
y1 = -radius1 * SIN((90 - (hr * 30)) / 180 * pi)
X2 = (radius1 - 30) * COS((90 - (hr * 30)) / 180 * pi)
Y2 = -(radius1 - 30) * SIN((90 - (hr * 30)) / 180 * pi)
'MINUTE HAND
x3 = radius2 * COS((90 - (MN * 6)) / 180 * pi) '360/60=6
y3 = -radius2 * SIN((90 - (MN * 6)) / 180 * pi)
X4 = (radius2 - 30) * COS((90 - (MN * 6)) / 180 * pi)
Y4 = -(radius2 - 30) * SIN((90 - (MN * 6)) / 180 * pi)
'SECOND HAND
x5 = radius2 * COS((90 - (sc * 6)) / 180 * pi) '360/60/60=.1
y5 = -radius2 * SIN((90 - (sc * 6)) / 180 * pi) '@MIN
x6 = (radius2 - 30) * COS((90 - (sc * 6)) / 180 * pi)
y6 = -(radius2 - 30) * SIN((90 - (sc * 6)) / 180 * pi)
LINE (maxx + (x3 + X4) / 2 - 10, maxy + (y3 + Y4) / 2 - 10)-(maxx + (x3 + X4) / 2 + 10, maxy + (y3 + Y4) / 2 + 10), 9, BF 'MN ERR
PUT (maxx + (x3 + X4) / 2 - 3, maxy + (y3 + Y4) / 2 - 3), B(0), OR 'MN
PAINT (maxx + (x3 + X4) / 2, maxy + (y3 + Y4) / 2), CLRH, 9
LINE (maxx + x1, maxy + y1)-(maxx + X2, maxy + Y2), CLRH 'HR HAND
LINE (maxx + x3, maxy + y3)-(maxx + X4, maxy + Y4), CLRH 'MN HAND
LINE (maxx + x5, maxy + y5)-(maxx + x6, maxy + y6), CLRH 'SC HAND
PUT (maxx + (x1 + X2) / 2 - 9, maxy + (y1 + Y2) / 2 - 9), D(0), OR 'HR
PAINT (maxx + (x1 + X2) / 2, maxy + (y1 + Y2) / 2), CLRH, 9
HALO 4, maxx + (x3 + X4) / 2, maxy + (y3 + Y4) / 2, 9 'erase circle MN
HALO 10, maxx + (x1 + X2) / 2, maxy + (y1 + Y2) / 2, 9 'erase circle HR
ND = ((sc MOD 6) + 8): IF ND = 9 OR ND = 11 OR ND = 8 THEN ND = 14
COLOR ND: LOCATE RWK, CLK: PRINT K$: COLOR 15 'CHAR CLR
LINE (maxx + x1, maxy + y1)-(maxx + X2, maxy + Y2), 9 'ERASE LINES HR
LINE (maxx + x3, maxy + y3)-(maxx + X4, maxy + Y4), 9 'MN
LINE (maxx + x5, maxy + y5)-(maxx + x6, maxy + y6), 9 'SC
Key$ = INKEY$ 'get any keystrokes
IF LEN(Key$) THEN keyval = ASC(Key$) 'convert to an integer
IF keyval = 64 OR keyval = 97 THEN 'set alarm
IF NOT alarm THEN zzz$ = "On ": alarm = true ELSE zzz$ = "Off": alarm = false
FOR zzz = 0 TO 100:
LOCATE 28, 76: PRINT zzz$
NEXT zzz
keyval = 0
END IF
IF keyval = 83 OR keyval = 115 THEN 'set time alarm
alarm = true
loopsalarm:
LOCATE 27, 68: PRINT "EnterTimeDc"
LOCATE 28, 68: PRINT " "
LOCATE 28, 68: INPUT zzzs
IF NOT (zzzs >= 0 AND zzzs <= 24) THEN GOTO loopsalarm
IF zzzs >= 12! THEN szzs = zzzs - 12 ELSE szzs = zzzs
LOCATE 27, 68: PRINT USING " ##.##"; szzs;
IF zzzs >= 12! THEN PRINT " pm " ELSE PRINT " am "
'PRINT USING " ##"; FIX(dys); : PRINT " dys ";
'PRINT USING " ##"; CINT((thr - .5) MOD 12); : PRINT ":";
'PRINT USING " ##"; CINT((tmn + .5) MOD 60); : PRINT ":";
'PRINT USING " ##"; CINT((sc + .5) MOD 60); : PRINT " "; :
'IF am THEN PRINT " am "; ELSE PRINT " pm "
LOCATE 28, 68: COLOR 10: PRINT "A=Alarm "; : COLOR 15: PRINT "On "
FOR zzz = 0 TO 100:
LOCATE 28, 76: PRINT zzz$
NEXT zzz
keyval = 0
END IF 'off
IF VAL(TIME$) >= zzzs AND VAL(TIME$) <= (zzzs + 1) AND alarm THEN
FOR h = 0 TO 10 '12RED TURN THIS LINE INTO 1000 TO CHECK YOUT AIM
FOR T = 0 TO 2
SOUND T * 100, 1.3 'noise LONGER
SOUND T * 100, .2 'noise
NEXT T
' SOUND h * 100, .3 'noise SHORT
' SOUND h * 100, .2 'noise
NEXT h
'ELSE
' alarm = false
END IF
LOOP WHILE keyval <> 27 'keep going until escape is pressed
END
SUB CALENDAR
10 REM NICK K. VAN VLIET CALENDAR VERS2.1 COPYRIGHTED 1981 AND EARLIER
20 REM CONVERTED DIRECTLY FROM GWBASIC PROGRAM C:\N\NIC4\BAS\CAL.BAS
40 IM = VAL(MID$(DATE$, 1, 2))
50 ID = VAL(MID$(DATE$, 4, 2))
60 IY = VAL(MID$(DATE$, 7, 4))
62 REM IM = 9: ID = 27: IY = 1943 TEST '12RD-OK '13PINK
70 RW = 11: CL = 26: DI = ID '2GRN '7GRY '0 '9BLU '10lgrn-OK
150 GOSUB 630
160 KD = 0: FOR I = 1 TO 8
170 IF MID$(U$, I, 1) = " " THEN KD = FIX(9 - I) / 2: I = 90
180 NEXT I
230 COLOR 15: PRINT : LOCATE RW, CL: PRINT DI; U$; TAB(23 + CL); IY
234 LOCATE RW, CL + 14 - KD: PRINT TIME$: LOCATE RW + 1, CL: COLOR BRDR
240 PRINT CHR$(201); : FOR I = 1 TO 6: FOR J = 1 TO 3: PRINT CHR$(205);
250 NEXT J: PRINT CHR$(203); : NEXT I: FOR J = 1 TO 3: PRINT CHR$(205);
260 NEXT J: PRINT CHR$(187); : LOCATE RW + 2, CL: PRINT CHR$(186);
262 COLOR 11: PRINT "SUN";
270 COLOR BRDR: PRINT CHR$(186); : COLOR 15: PRINT "MON"; 'DAYS
272 COLOR BRDR: PRINT CHR$(186); : COLOR 15: PRINT "TUE"; :
280 COLOR BRDR: PRINT CHR$(186); : COLOR 15: PRINT "WED";
290 COLOR BRDR: PRINT CHR$(186); : COLOR 15: PRINT "THU"; : COLOR BRDR
300 PRINT CHR$(186); : COLOR 15: PRINT "FRI"; : COLOR BRDR: PRINT CHR$(186);
310 COLOR 11: PRINT "SAT"; : COLOR BRDR: PRINT CHR$(186);
320 LOCATE RW + 3, CL: PRINT CHR$(204); : FOR I = 1 TO 6: FOR J = 1 TO 3
330 PRINT CHR$(205); : NEXT J: PRINT CHR$(202); : NEXT I 'BAR
340 FOR J = 1 TO 3: PRINT CHR$(205); : NEXT J: PRINT CHR$(185);
350 G = -(IM = 1 OR IM = 10) - 2 * (IM = 5) - 3 * (IM = 8)
360 G = G - 4 * (IM = 2 OR IM = 3 OR IM = 11) - 5 * (IM = 6)
370 G = G - 6 * (IM = 9 OR IM = 12) - 7 * (IM = 4 OR IM = 7)
380 U$ = MID$("MABCKFGAIDEFNBCDLGABJEFGHCDE", Z + 1, 1)
390 G = G - 2 + (Z = IZ AND (IM = 1 OR IM = 2)) - (U$ = "A" OR U$ = "N")
400 G = G - 2 * (U$ = "B" OR U$ = "H") - 3 * (U$ = "C" OR U$ = "I")
410 G = G - 4 * (U$ = "D" OR U$ = "J") - 5 * (U$ = "E" OR U$ = "K")
420 G = G - 6 * (U$ = "F" OR U$ = "L") - 7 * (U$ = "G" OR U$ = "M") + 7 * 7
430 G = G - 7 * INT(G / 7 + .1) + 1:
432 REM 'PRINT " G= "; G; "U$ = "; U$ '6+6-2=10-7=3
434 DD = 4: K = 1
440 FOR I = 1 TO 6: LOCATE RW + 3 + I, CL: COLOR BRDR: PRINT CHR$(186);
450 DD = DD + 1: FOR J = 1 TO 7: A = 7 * (I - 1) + J: COLOR 15
460 IF J = 1 OR J = 7 THEN COLOR 11
470 IF K = ID THEN COLOR 14: CLK = (4 * (J - 1) + 2 + (K >= 10) + CL): RWK = RW + I + 3: K$ = STR$(K)
480 IF A >= G AND K <= DL THEN PRINT TAB(4 * (J - 1) + 2 + (K >= 10) + CL); STR$(K); : COLOR 15
490 K = K - (A >= G): NEXT J: COLOR BRDR: PRINT TAB(CL + 28); CHR$(186)
500 IF K > DL THEN I = I + 1: GOTO 512
510 NEXT I
512 LOCATE RW + 3 + I, CL: COLOR BRDR: PRINT CHR$(200);
514 FOR I = 1 TO 27: PRINT CHR$(205);
520 NEXT I: PRINT CHR$(188)
530 GOTO 800
630 REM GOSUB
632 U$ = ">8><><>><><>"
640 IF IY = 1800 THEN IY = 1902
650 IF IY = 1900 THEN IY = 1906
660 IF IY < 1900 THEN IY = IY + 12
670 Z = IY - 28 * FIX(IY / 28): IZ = 4 * FIX(Z / 4)
674 DL = ASC(MID$(U$, IM, 1)) / 2 - (IM = 2 AND Z = IZ)
680 U$ = "JANUARY FEBRUARY MARCH APRIL MAY JUNE JULY AUGU"
690 U$ = U$ + "ST SEPTEMBEROCTOBER NOVEMBER DECEMBER "
700 U$ = MID$(U$, (IM - 1) * 9 + 1, 9)
710 RETURN
800
END SUB
SUB DIAL
PAINT (1, 1), 7, 4
FOR T = 0 TO 360 STEP 5
x1 = RADIUS0 * COS(T * 1 / 180 * pi)
y1 = -RADIUS0 * SIN(T * 1 / 180 * pi)
X2 = (RADIUS0 - 15) * COS(T * 1 / 180 * pi)
Y2 = -(RADIUS0 - 15) * SIN(T * 1 / 180 * pi)
LINE (maxx + x1, maxy + y1)-(maxx + X2, maxy + Y2), 14 'TICS
NEXT T
FOR T = 1 TO 48
x1 = RADIUS0 * COS((90 - T * 7.5) / 180 * pi) '15 MIN.
y1 = -RADIUS0 * SIN((90 - T * 7.5) / 180 * pi)
PUT (maxx + x1 - 3, maxy + y1 - 3), B(0), OR
PAINT (maxx + x1, maxy + y1), 12, 9
NEXT T
FOR T = 1 TO 12
x1 = RADIUS0 * COS((90 - T * 30) / 180 * pi) 'HRLY
y1 = -RADIUS0 * SIN((90 - T * 30) / 180 * pi)
PUT (maxx + x1 - 9, maxy + y1 - 9), C(0), OR
PAINT (maxx + x1, maxy + y1), 14, 9
NEXT T
END SUB
SUB DrawCircles (T, scale, radius, X0, Y0, clr, size)
x1 = radius * COS((90 - T * size) / 180 * pi)
y1 = -radius * SIN((90 - T * size) / 180 * pi)
FOR II = 0 TO 360
X2 = scale * COS((II + 0) / 180 * pi)
Y2 = scale * SIN((II + 0) / 180 * pi)
LINE (X0 + x1, Y0 + y1)-(X2 + X0 + x1, Y2 + Y0 + y1), clr
NEXT II
END SUB
SUB HALO (scale, X0, Y0, clr) 'to erase hr hand
x1 = scale + X0
y1 = Y0
FOR II = 0 TO 360
X2 = scale * COS((II + 0) / 180 * pi) + X0
Y2 = scale * SIN((II + 0) / 180 * pi) + Y0
LINE (x1, y1)-(X2, Y2), clr, BF
x1 = X2: y1 = Y2
NEXT II
END SUB
SUB MASK
LINE (CL * 8 - 8, RW * 16 - 20)-(432, (RW + DD) * 16 - 2), 0, B ' 1 TOP BRDR
LINE (CL * 8 - 9, RW * 16 - 21)-(433, (RW + DD) * 16 - 2), 0, B ' 2 TOP BRDR
LINE (CL * 8 - 10, RW * 16 - 21)-(434, (RW + DD) * 16 - 2), 0, B ' 3 TOP
LINE (CL * 8 - 11, RW * 16 - 21)-(435, (RW + DD) * 16 - 1), 0, B ' 4 TOP
LINE (CL * 8 - 8, RW * 16 - 20)-(432, RW * 16 - 17), 0, BF 'LETTERING TOP
LOCATE RW + DD + 0, CL: COLOR BRDR: PRINT CHR$(200); CHR$(205); 'CORNERS
LOCATE RW + DD + 0, CL + 27: COLOR BRDR: PRINT CHR$(205); CHR$(188); '
END SUB
RETURN TO TOP
RETURN TO PMC MENU
HOME PAGE
You are visitor no.
to this page.