Calendar - for "REAL" programmers: Difference between revisions

Content added Content deleted
(remove Lua as Lua needs lower letters)
(added FreeBASIC)
Line 984: Line 984:
</pre>
</pre>
Actual lineprinters offer the opportunity of overprinting lines, so with underlines (and for overlines, an underline on the previous line) the appearance can be improved. Vertical bars can also be used, and more advanced lineprinters (IBM1403 etc. using the "TN" chain) or dot-matrix printers also supplied "corner" glyphs so that boxes would not have leaks.
Actual lineprinters offer the opportunity of overprinting lines, so with underlines (and for overlines, an underline on the previous line) the appearance can be improved. Vertical bars can also be used, and more advanced lineprinters (IBM1403 etc. using the "TN" chain) or dot-matrix printers also supplied "corner" glyphs so that boxes would not have leaks.
=={{header|FreeBASIC}}==
<lang freebasic>' VERSION 16-03-2016
' COMPILE WITH: FBC -S CONSOLE

#IFNDEF TRUE ' DEFINE TRUE AND FALSE FOR OLDER FREEBASIC VERSIONS
#Define FALSE 0
#Define TRUE NOT FALSE
#ENDIF

FUNCTION WD(M AS INTEGER, D AS INTEGER, Y AS INTEGER) AS INTEGER
' ZELLERISH
' 0 = SUNDAY, 1 = MONDAY, 2 = TUESDAY, 3 = WEDNESDAY
' 4 = THURSDAY, 5 = FRIDAY, 6 = SATURDAY

IF M < 3 THEN ' IF M = 1 OR M = 2 THEN
M += 12
Y -= 1
END IF
RETURN (Y + (Y \ 4) - (Y \ 100) + (Y \ 400) + D + ((153 * M + 8) \ 5)) MOD 7
END FUNCTION

FUNCTION LEAPYEAR(Y AS INTEGER) AS INTEGER

IF (Y MOD 4) <> 0 THEN RETURN FALSE
IF (Y MOD 100) = 0 ANDALSO (Y MOD 400) <> 0 THEN RETURN FALSE
RETURN TRUE
END FUNCTION

' ------=< MAIN >=------
' HARD CODED FOR 132 CHARACTERS PER LINE

DIM AS STRING WDN = "MO TU WE TH FR SA SU" ' WEEKDAY NAMES
DIM AS STRING MO(1 TO 12) => {"JANUARY", "FEBRUARY", "MARCH", "APRIL", _
"MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", _
"OCTOBER", "NOVEMBER", "DECEMBER"}
DIM AS STRING TMP1, TMP2, D(1 TO 12)

DIM AS UINTEGER ML(1 TO 12) => {31,28,31,30,31,30,31,31,30,31,30,31}
DIM AS UINTEGER I, I1, J, K, Y = 1969

'SCREENRES 1080,600,8

IF LEAPYEAR(Y) = TRUE THEN ML(2) = 29

TMP1 = ""
FOR I = 1 TO 31
TMP1 = TMP1 + RIGHT((" " + STR(I)), 3)
NEXT I


FOR I = 1 TO 12
TMP2 = ""
J = WD(I,1, Y)
IF J = 0 THEN J = 7
J = J - 1
TMP2 = SPACE(J * 3) + LEFT(TMP1, ML(I) * 3) + SPACE(21)
D(I) = TMP2
NEXT I

PRINT
TMP1 = "INSERT YOUR SNOOPY PICTURE HERE"
PRINT SPACE((132 - LEN(TMP1)) \ 2); TMP1
PRINT
TMP1 = STR(Y)
PRINT SPACE((132 - LEN(TMP1)) \ 2); TMP1
PRINT

' 6 MONTH ON A ROW
TMP2 = " "
FOR I = 1 TO 6
TMP2 = TMP2 + WDN
IF I < 6 THEN TMP2 = TMP2 + " "
NEXT I

FOR I = 1 TO 12 STEP 6
TMP1 = ""
FOR J = I TO I + 4
TMP1 = TMP1 + LEFT(SPACE((22 - LEN(MO(J))) \ 2) + MO(J) + SPACE(11), 22)
NEXT J
TMP1 = TMP1 + SPACE((22 - LEN(MO(I + 5))) \ 2) + MO(I + 5)
PRINT TMP1
PRINT TMP2
FOR J = 1 TO 85 STEP 21
FOR K = I TO I + 4
PRINT MID(D(K), J ,21); " ";
NEXT K
PRINT MID(D(I + 5), J ,21)
NEXT J
PRINT
NEXT I

' EMPTY KEYBOARD BUFFER
WHILE INKEY <> "" : VAR _KEY_ = INKEY : WEND
PRINT : PRINT "HIT ANY KEY TO END PROGRAM"
SLEEP
END</lang>
{{out}}
<pre> INSERT YOUR SNOOPY PICTURE HERE

1969

JANUARY FEBRUARY MARCH APRIL MAY JUNE
MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU
1 2 3 4 5 1 2 1 2 1 2 3 4 5 6 1 2 3 4 1
6 7 8 9 10 11 12 3 4 5 6 7 8 9 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 2 3 4 5 6 7 8
13 14 15 16 17 18 19 10 11 12 13 14 15 16 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 9 10 11 12 13 14 15
20 21 22 23 24 25 26 17 18 19 20 21 22 23 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 16 17 18 19 20 21 22
27 28 29 30 31 24 25 26 27 28 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 23 24 25 26 27 28 29

JULY AUGUST SEPTEMBER OCTOBER NOVEMBER DECEMBER
MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU
1 2 3 4 5 6 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 1 2 1 2 3 4 5 6 7
7 8 9 10 11 12 13 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 8 9 10 11 12 13 14
14 15 16 17 18 19 20 11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 15 16 17 18 19 20 21
21 22 23 24 25 26 27 18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 22 23 24 25 26 27 28
28 29 30 31 25 26 27 28 29 30 31 29 30 27 28 29 30 31 24 25 26 27 28 29 30 29 30 31 </pre>


=={{header|Icon}} and {{header|Unicon}}==
=={{header|Icon}} and {{header|Unicon}}==