BEGIN JOB TEST/DATEMODULE; 00100100 NOJOBSUMMARYIO; 00100200 00102000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00102100 %% TEST JOB FOR THE WFL DATE MODULE %% 00102200 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00102300 %% %% 00102400 %% Copyright (C) 2002: %% 00102500 %% Paradigm Corporation %% 00102600 %% 9625 Black Mountain Road, Suite 218 %% 00102700 %% San Diego, California 92126-4598 USA %% 00102800 %% voice +1-858-536-5533; fax 858-536-5545 %% 00102900 %% http://www.digm.com %% 00103000 %% %% 00103100 %% This material may be copied and used for any purpose %% 00103200 %% providing this copyright notice is preserved and that %% 00103300 %% appropriate credit is given. %% 00103400 %% %% 00103500 %% This material is offered AS-IS WITH NO WARRANTY. %% 00103600 %% Paradigm hereby disclaims all warranties respecting this %% 00103700 %% material, expressed or implied, including without limita- %% 00103800 %% tion warranty of design, merchantability, fitness for a %% 00103900 %% particular purpose and against infringement. %% 00104000 %% %% 00105000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00105001 % 2002-11-22 P.KIMPEL 00105002 % ORIGINAL VERSION. 00105003 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00109900 00110000 INTEGER 00110100 DOW, 00110300 JULDAY, 00110400 NEWGREG, 00110500 TODAY, 00110600 DIFF, 00110700 YR; 00110800 00130000 STRING 00130100 DAYNAME; 00130200 00180000 FILE 00180100 F (DISK, DEPENDENTSPECS); 00180200 00200000 $$ INCLUDE (PAUL)WFL/UTIL/DATE/MODULE ON OPS 00200100 00210000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00210100 SUBROUTINE DOWNAME (INTEGER DOW VALUE, STRING DAYNAME); 00210200 % TRANSLATES A DAY-OF-WEEK NUMBER TO A STRING DAY NAME. 00210300 BEGIN 00210400 CASE DOW OF 00210500 BEGIN 00210600 (DATESUNDAYV): DAYNAME:= "SUNDAY"; 00210700 (DATEMONDAYV): DAYNAME:= "MONDAY"; 00210800 (DATETUESDAYV): DAYNAME:= "TUESDAY"; 00210900 (DATEWEDNESDAYV): DAYNAME:= "WEDNESDAY"; 00211000 (DATETHURSDAYV): DAYNAME:= "THURSDAY"; 00211100 (DATEFRIDAYV): DAYNAME:= "FRIDAY"; 00211200 (DATESATURDAYV): DAYNAME:= "SATURDAY"; 00211300 ELSE: DAYNAME:= "*UNKNOWN*"; 00211400 END; 00211500 END DOWNAME; 00211600 00220000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00220100 SUBROUTINE ENDOFMONTH (INTEGER GREGORIAN VALUE, INTEGER EOMDATE); 00220200 % COMPUTE THE END-OF-MONTH DATE FOR THE MONTH SPECIFIED BY THE GREGORIAN 00220300 % DATE, RETURNING THE EOM DATE IN "EOMDATE". 00220400 BEGIN 00220500 INTEGER 00220600 YY, 00220700 MM; 00220800 00220900 YY:= GREGORIAN DIV 10000; 00221000 MM:= (GREGORIAN DIV 100) MOD 100 + 1; 00221100 IF MM > 12 THEN 00221200 BEGIN 00221300 MM:= 1; 00221400 YY:= YY+1; 00221500 END; 00221600 00221700 DATEINCREMENT ((YY*100 + MM)*100 + 1, -1, EOMDATE); 00221800 END ENDOFMONTH; 00221900 00230000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00230100 SUBROUTINE THANKSGIVING (INTEGER YEAR VALUE); 00230200 % DISPLAYS THE DATE OF U.S. THANKSGIVING (LAST THURSDAY IN NOVEMBER) 00230300 % FOR A GIVEN YEAR. 00230400 BEGIN 00230500 INTEGER 00230600 DIFF, 00230700 DOW, 00230800 TDAY; 00230900 STRING 00231000 MSG; 00231100 00231200 TDAY:= YEAR*10000 + 1201; 00231300 DATEWEEKDAY (TDAY, DOW); 00231400 DIFF:= DATETHURSDAYV - DOW; 00231500 IF DIFF GEQ 0 THEN 00231600 DIFF:= DIFF - 7; 00231700 00231800 DATEINCREMENT (TDAY, DIFF, TDAY); 00231900 MSG:= "THANKSGIVING IN THE YEAR " & STRING(TDAY DIV 10000,*); 00232000 IF TDAY < TODAY THEN 00232100 MSG:= MSG & " WAS " 00232200 ELSE 00232300 MSG:= MSG & " WILL BE "; 00232400 00232500 MSG:= MSG & "NOVEMBER " & STRING(TDAY MOD 100,*); 00232600 DISPLAY MSG; 00232700 END THANKSGIVING; 00232800 00240000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00240100 SUBROUTINE TESTVALID (INTEGER GREGORIAN VALUE); 00240200 % TESTS THE GREGORIAN DATE FOR VALIDITY. 00240300 BEGIN 00240400 BOOLEAN 00240500 RESULT; 00240600 STRING 00240700 MSG; 00240800 00240900 DATEVALIDATE (GREGORIAN, RESULT); 00241000 MSG:= STRING (GREGORIAN,*) & " IS "; 00241100 IF RESULT THEN 00241200 MSG:= MSG & "A VALID DATE" 00241300 ELSE 00241400 MSG:= MSG & "NOT A VALID DATE"; 00241500 00241600 DISPLAY MSG; 00241700 END TESTVALID; 00241800 00250000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00250100 SUBROUTINE EDITDATE (INTEGER MMDDYY VALUE, INTEGER YYYYMMDD); 00250200 % CONVERTS A DATE FROM MMDDYY FORMAT TO YYYYMMDD FORMAT, DEDUCING THE 00250300 % CENTURY FROM THE CURRENT DATE, AND TESTING THAT THIS IS A VALID DATE. 00250400 % RETURNS THE DATE IN YYYYMMDD. IF THE DATE IS NOT VALID, RETURNS ZERO. 00250500 BEGIN 00250600 INTEGER 00250700 YY, 00250800 MM, 00250900 DD, 00251000 CURRYEAR, 00251100 RESULT; 00251200 BOOLEAN 00251300 VALID; 00251400 00251500 MM:= MMDDYY DIV 10000; 00251600 DD:= (MMDDYY DIV 100) MOD 100; 00251700 YY:= MMDDYY MOD 100; 00251800 CURRYEAR:= DECIMAL(TIMEDATE(YYYYMMDD)) DIV 10000; 00251900 IF YY - CURRYEAR MOD 100 > 5 THEN 00252000 YY:= YY + DATEYEARBIASV 00252100 ELSE 00252200 YY:= YY + DATEYEARBIASV + 100; 00252300 00252400 RESULT:= (YY*100 + MM)*100 + DD; 00252500 IF RESULT > DATEMAXV THEN 00252600 RESULT:= 0 00252700 ELSE 00252800 IF RESULT < DATEMINV THEN 00252900 RESULT:= 0 00253000 ELSE 00253100 BEGIN 00253200 DATEVALIDATE (RESULT, VALID); 00253300 IF NOT VALID THEN 00253400 RESULT:= 0; 00253500 END; 00253600 00253700 YYYYMMDD:= RESULT; 00253800 END EDITDATE; 00253900 00256000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00256100 SUBROUTINE TESTEDIT (INTEGER MMDDYY VALUE); 00256200 BEGIN 00256300 INTEGER 00256400 YYYYMMDD; 00256500 00256600 EDITDATE (MMDDYY, YYYYMMDD); 00256700 IF YYYYMMDD = 0 THEN 00256800 DISPLAY STRING(MMDDYY,*) & " IS NOT A VALID DATE"; 00256900 ELSE 00257000 DISPLAY STRING(MMDDYY,*) & " IS VALID AS " & STRING(YYYYMMDD,*); 00257100 END TESTEDIT; 00257200 00260000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00260100 SUBROUTINE FILEDATE (STRING ID VALUE); 00260200 BEGIN 00260300 INTEGER 00260400 RESULT, 00260500 CDATE; 00260600 00260700 F (TITLE=#ID); 00260800 RESULT:= F(AVAILABLE); 00260900 IF RESULT = 1 THEN 00261000 BEGIN 00261100 DATEJULIANTOGREGORIAN (F(CREATIONDATE), CDATE); 00261200 DISPLAY "FILE " & ID & " CREATION DATE = " & STRING(CDATE,*); 00261300 END 00261400 ELSE 00261500 DISPLAY "FILE " & ID & " NOT AVAILABLE (" & STRING(RESULT,*) & ")"; 00261600 00261700 RELEASE (F); 00261800 END FILEDATE; 00261900 00900000 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00900050 TODAY:= DECIMAL(TIMEDATE(YYYYMMDD)); 00900100 DATEWEEKDAY (TODAY, DOW); 00900200 DOWNAME (DOW, DAYNAME); 00900300 DISPLAY "TODAY IS " & DAYNAME & ", " & STRING(TODAY,*); 00900400 00901000 %--- DETERMINE THE JULIAN DATE --- 00901100 DATEGREGORIANTOJULIAN (TODAY, JULDAY); 00901200 DISPLAY "THE JULIAN DATE IS: " & STRING(JULDAY,*); 00901300 00901400 %--- DETERMINE THE NUMBER OF DAYS UNTIL THE NEXT FRIDAY --- 00901500 DIFF:= DATEFRIDAYV - DOW; 00901600 IF DIFF LEQ 0 THEN 00901700 DIFF:= DIFF + 7; 00901800 00902000 DATEINCREMENT (TODAY, DIFF, NEWGREG); 00902100 DISPLAY "IT IS " & STRING(DIFF,*) & " DAYS UNTIL THE NEXT FRIDAY, " & 00902200 STRING(NEWGREG,*); 00902300 00902400 %--- DETERMINE THE NUMBER OF DAYS UNTIL THE END OF THE MONTH, THE EOM DATE, 00903000 % AND THE EOM DAY OF WEEK --- 00903100 ENDOFMONTH (TODAY, NEWGREG); 00903200 DATEDIFFERENCE (NEWGREG, TODAY, DIFF); 00903300 DATEWEEKDAY (NEWGREG, DOW); 00903400 DOWNAME (DOW, DAYNAME); 00903500 DISPLAY "IT IS " & STRING(DIFF,*) & " DAYS UNTIL THE END OF MONTH, " & 00903600 STRING(NEWGREG,*) & " (" & DAYNAME & ")"; 00903700 00904000 %--- TEST THE VALIDITY OF SEVERAL DATES --- 00904100 TESTVALID (TODAY); % THIS BETTER BE VALID... 00904200 TESTVALID (20020229); 00904300 TESTVALID (20000229); 00904400 TESTVALID (20040229); 00904500 TESTVALID (19991131); 00904600 TESTVALID (20050000); 00904700 TESTVALID (19501200); 00904800 TESTVALID (20221302); 00904900 00905000 %--- TEST THE EDITDATE ROUTINE --- 00905100 TESTEDIT (DECIMAL(TIMEDATE(MMDDYY))); 00905200 TESTEDIT (111302); 00905300 TESTEDIT (22903); 00905400 TESTEDIT (22954); 00905500 TESTEDIT (70108); 00905600 TESTEDIT (50108); 00905700 00907000 %--- TEST THE FILEDATE ROUTINE --- 00907100 FILEDATE ("*SYSTEM/WFLSUPPORT"); 00907200 FILEDATE ("NOSUCHFILE"); 00907300 00908000 %--- COMPUTE A SET OF U.S. THANKSGIVING DATES (LAST THURSDAY IN NOVEMBER) --- 00908100 YR:= TODAY DIV 10000; 00908200 DIFF:= -5; 00908300 DO 00908400 BEGIN 00908500 THANKSGIVING (YR+DIFF); 00908600 DIFF:= DIFF+1; 00908700 END 00908800 UNTIL DIFF > 5; 00908900 00999000 ? END JOB 00999100