home *** CD-ROM | disk | FTP | other *** search
- DEFINT A-Z
- '
- SUB DCalendar (DSCR1(), PAGE, SCRMODE) STATIC
-
- '--- set colors
-
- BLACK = 0: BLUE = 1: GREEN = 2: CYAN = 3: RED = 4: MAG = 5 ' to enhance program readability...
- BROWN = 6: GREY = 7: LGREY = 8: LBLUE = 9: LGREEN = 10 ' we will define the standard colors...
- LCYAN = 11: LRED = 12: LMAG = 13: YELLOW = 14: WHITE = 15 ' using more descriptive variable names
- CALL GETVIDMODE(VMODE, VWIDTH, VPAGE) ' check video mode
- MONO = (VMODE = 7) ' if mono then set a flag...
- IF MONO THEN BLUE = 0: RED = 0 ' ... and adjust colors
- CALHEADFORE = BLUE: CALHEADBACK = WHITE ' then we'll give them a name according...
- CALMAINBACK = BLUE: CALMAINDATE = WHITE ' according to how they are used....
- CALWEEKEND = GREY: CALHIDATE = YELLOW ' this will make it easier to
- CALFRAME = MAG: WINDHEADFORE = YELLOW ' tailor the colors to suit...
- WINDHEADBACK = RED: MAINBACK = BLACK
-
- REDIM CDAY$(32), M$(12), MD(12), VPOS(6)
- REDIM CSCR(2000), CSCR1(160)
- DSEG = VARSEG(DSCR1(1))
- DOFS = VARPTR(DSCR1(1))
- CSEG = VARSEG(CSCR(1))
- COFS = VARPTR(CSCR(1))
- CALL VGETSCREEN(DSEG, DOFS, 1, 1, 25, 80, CSEG, COFS) ' save the virtual screen array for restore on exit
- TSEG = VARSEG(CSCR1(1))
- TOFS = VARPTR(CSCR1(1))
- IF DAT$ = "" THEN DAT$ = LEFT$(DATE$, 2) + "/" + RIGHT$(DATE$, 2)
- MONTH = VAL(LEFT$(DAT$, 2))
- YEAR = VAL(RIGHT$(DAT$, 2))
- THISYEAR = VAL(RIGHT$(DATE$, 4))
- IF YEAR < 1900 THEN
- YEAR = YEAR + 1900
- END IF
- YEAR$ = MID$(STR$(YEAR), 2)
- IF MONTH = VAL(LEFT$(DATE$, 2)) THEN
- CURMONTH = -1
- ELSE
- CURMONTH = 0
- END IF
- Y# = -INT((14 - MONTH) / 12)
- Z# = -32073 + INT(1461 * (YEAR + 4800 + Y#) / 4)
- Z# = Z# + INT(367 * (MONTH - 2 - 12 * Y#) / 12)
- D# = Z# - INT(3 * INT((YEAR + 4900 + Y#) / 100) / 4)
- D = D# - 7 * INT(D# / 7)
- RESTORE 106
- FOR I = 1 TO 12
- READ M$(I), MD(I)
- NEXT I
- M$ = M$(MONTH): MD = MD(MONTH)
- IF MONTH = 2 THEN MD = MD - (0 = YEAR MOD 4) + (0 = YEAR MOD 100) - (0 = YEAR MOD 400)
- H$ = M$(MONTH) + " " + YEAR$
- L = LEN(H$)
- LS = 20 - L / 2
- A$ = SPACE$(LS) + H$ + SPACE$(LS + 1)
- X = 4: Y = 42
- DISPLAY$ = LEFT$(A$, 38)
- CALL CALCATTR(WINDHEADFORE, WINDHEADBACK, ATTR)
- CALL DXQPRINT(DSEG, DOFS, DISPLAY$, X, Y, ATTR)
- IF D = 0 THEN Y = 40
- IF D = 1 THEN Y = 45
- IF D = 2 THEN Y = 50
- IF D = 3 THEN Y = 55
- IF D = 4 THEN Y = 60
- IF D = 5 THEN Y = 65
- IF D = 6 THEN Y = 70
- X = 10: Z = 39: J = 0: LM = D - 1
- LASTMONTH = MONTH - 1
- IF LASTMONTH = 0 THEN LASTMONTH = 1
- CALL CALCATTR(CALFRAME, CALMAINBACK, ATTR)
- FOR I = 0 TO D ' last month
- Z = Z + 5
- J = J + 1
- A$ = STR$(MD(LASTMONTH) - LM)
- LM = LM - 1
- CALL DXQPRINT(DSEG, DOFS, A$, X, Z, ATTR)
- NEXT I
- FOR I = 1 TO MD ' this month
- Y = Y + 5
- J = J + 1
- L = 0
- IF Y = 80 THEN Y = 45: X = X + 2
- A$ = MID$(STR$(I), 2)
- T$ = "0" + A$: CDAY$(I) = RIGHT$(T$, 2)
- IF Y = 45 OR Y = 75 THEN
- C = -1
- ELSE
- C = 0
- END IF
- IF C THEN
- CALL CALCATTR(CALWEEKEND, CALMAINBACK, ATTR)
- ELSE
- CALL CALCATTR(CALMAINDATE, CALMAINBACK, ATTR)
- END IF
- IF VAL(CDAY$(I)) = VAL(MID$(DATE$, 4, 2)) THEN
- SD = -1
- ELSE
- SD = 0
- END IF
- IF SD AND CURMONTH THEN CALL CALCATTR(CALHIDATE, CALMAINBACK, ATTR)
- CALL DXQPRINT(DSEG, DOFS, CDAY$(I), X, Y, ATTR)
- NEXT I
- L = 0
- CALL CALCATTR(CALFRAME, CALMAINBACK, ATTR)
- FOR I = J TO 42 ' next month
- Y = Y + 5: L = L + 1
- IF Y = 80 THEN Y = 45: X = X + 2
- A$ = MID$(STR$(L), 2)
- T$ = "0" + A$: A$ = RIGHT$(T$, 2)
- CALL DXQPRINT(DSEG, DOFS, A$, X, Y, ATTR)
- NEXT I
-
- EXIT SUB
-
- DXQ1: CALL DXQPRINT(DSEG, DOFS, A$, X, Y, ATTR)
- RETURN
-
- 106 DATA JANUARY,31,FEBRUARY,28,MARCH,31,APRIL,30,MAY,31
- DATA JUNE,30,JULY,31,AUGUST,31,SEPTEMBER,30,OCTOBER,31
- DATA NOVEMBER,30,DECEMBER,31
- 107 DATA 48,53,58,63,68,73
- END SUB
-