Calendar - for "REAL" programmers: Difference between revisions
Content added Content deleted
m (→{{header|Racket}}: better module name) |
(Initial entry for PL/I) |
||
Line 574: | Line 574: | ||
REALPROGRAMMERSTHINKINUPPERCASEANDCHEATBYUSINGPRINT |
REALPROGRAMMERSTHINKINUPPERCASEANDCHEATBYUSINGPRINT |
||
; // MAGICAL SEMICOLON</lang> |
; // MAGICAL SEMICOLON</lang> |
||
=={{header|PL/I}}== |
|||
<lang PL/I>(SUBRG, SIZE, FOFL): |
|||
CALENDAR: PROCEDURE (YEAR) OPTIONS (MAIN); |
|||
DECLARE YEAR CHARACTER (4) VARYING; |
|||
DECLARE (A, B, C) (0:5,0:6) CHARACTER (3); |
|||
DECLARE NAME_MONTH(12) STATIC CHARACTER (9) VARYING INITIAL ( |
|||
'JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', |
|||
'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER'); |
|||
DECLARE I FIXED; |
|||
DECLARE (MM, MMP1, MMP2) PIC '99'; |
|||
PUT EDIT (CENTER('CALENDAR FOR ' || YEAR, 67)) (A); |
|||
PUT SKIP (2); |
|||
DO MM = 1 TO 12 BY 3; |
|||
MMP1 = MM + 1; MMP2 = MM + 2; |
|||
CALL PREPARE_MONTH('01' || MM || YEAR, A); |
|||
CALL PREPARE_MONTH('01' || MMP1 || YEAR, B); |
|||
CALL PREPARE_MONTH('01' || MMP2 || YEAR, C); |
|||
PUT SKIP EDIT (CENTER(NAME_MONTH(MM), 23), |
|||
CENTER(NAME_MONTH(MMP1), 23), |
|||
CENTER(NAME_MONTH(MMP2), 23) ) (A); |
|||
PUT SKIP EDIT ((3)' M T W T F S S ') (A); |
|||
DO I = 0 TO 5; |
|||
PUT SKIP EDIT (A(I,*), B(I,*), C(I,*)) (7 A, X(2)); |
|||
END; |
|||
END; |
|||
PREPARE_MONTH: PROCEDURE (START, MONTH); |
|||
DECLARE MONTH(0:5,0:6) CHARACTER (3); |
|||
DECLARE START CHARACTER (8); |
|||
DECLARE I PIC 'ZZ9'; |
|||
DECLARE OFFSET FIXED; |
|||
DECLARE (J, DAY) FIXED BINARY (31); |
|||
DECLARE (THIS_MONTH, NEXT_MONTH, K) FIXED BINARY; |
|||
DAY = DAYS(START, 'DDMMYYYY'); |
|||
OFFSET = WEEKDAY(DAY) - 1; |
|||
IF OFFSET = 0 THEN OFFSET = 7; |
|||
MONTH = ''; |
|||
DO J = DAY BY 1; |
|||
THIS_MONTH = SUBSTR(DAYSTODATE(J, 'DDMMYYYY'), 3, 2); |
|||
NEXT_MONTH = SUBSTR(DAYSTODATE(J+1, 'DDMMYYYY'), 3, 2); |
|||
IF THIS_MONTH^= NEXT_MONTH THEN LEAVE; |
|||
END; |
|||
I = 1; |
|||
DO K = OFFSET-1 TO OFFSET+J-DAY-1; |
|||
MONTH(K/7, MOD(K,7)) = I; I = I + 1; |
|||
END; |
|||
END PREPARE_MONTH; |
|||
END CALENDAR;</lang> |
|||
See CALENDAR for result. |
|||
=={{header|Racket}}== |
=={{header|Racket}}== |