52 lines
1.7 KiB
Text
52 lines
1.7 KiB
Text
(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;
|