FUNCTION MonthDate RETURNS DATE (INPUT ip-Date# AS DATE, INPUT ip-Months# AS INTEGER). DEFINE VARIABLE Day# AS INTEGER NO-UNDO. DEFINE VARIABLE Month# AS INTEGER NO-UNDO. DEFINE VARIABLE Year# AS INTEGER NO-UNDO. /* Do the initial arithmetic */ ASSIGN Day# = DAY(ip-Date#) Month# = MONTH(ip-Date#) + ip-Months# + YEAR(ip-Date#) * 12 Year# = TRUNC((Month# / 12),0) Month# = Month# MOD 12. IF Month# = 0 THEN Month# = 12. /* Now check the day for the maximum of the month */ IF DAY(DATE(3,1,Year#) - 1) = 29 THEN /* Leapyear */ ASSIGN Day# = MINIMUM(INTEGER(ENTRY(Month#,"31,29,31,30,31,30,31,31,30,31,30,31")),Day#). ELSE /* Normal year */ ASSIGN Day# = MINIMUM(INTEGER(ENTRY(Month#,"31,28,31,30,31,30,31,31,30,31,30,31")),Day#). RETURN DATE(Month#,Day#,Year#). END FUNCTION. DEF VAR x# AS DATE INITIAL 1/31/01. DEF VAR y# AS INT INIT -25. REPEAT WHILE y# < 26: DISPLAY x# y# MonthDate(x#,y#). ASSIGN y# = y# + 1. END.