這鵝也不太清楚,鵝只知道OS是SCO Openserver 5就是了:asae....
引用:
|
作者peter liou
建議user早日改寫, COBOLer都洗手賣雞排了.
|
其實user是找了寫Web based AP的人打算重寫,但卡在寫AP的人無法正確的把舊資料import進SQL,所以鵝只好連這部份一起想辦法了(鵝本來只是接換機和P2V的部份

),不過COBOLer都洗手賣雞排了倒有點出人意表----真有這麼慘嗎,應該可以轉戰其它程式語言吧

....BTW,以下是鵝稍微看了一下source code的印象,因為西元/民國換算是寫成獨立的procedure(傳入值是Unix系統日期,應該不至於有single byte的問題),只有4-5個procedure會呼叫這部份,是不是只要針對這些部份check就有機會啊

....
引用:
IDENTIFICATION DIVISION.
PROGRAM-ID. DATECHCK.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. ALTOS.
OBJECT-COMPUTER. ALTOS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WK-FILE-S.
05 DATE-CHK-1 PIC X(06).
05 DATE-CHK-2 REDEFINES DATE-CHK-1.
10 DATE-CHK-YY PIC 99.
10 DATE-CHK-MM PIC 99.
88 DATE-DAY-31 VALUE 1 3 5 7 8 10 12.
88 DATE-DAY-30 VALUE 4 6 9 11.
88 DATE-DAY-28 VALUE 2.
10 DATE-CHK-DD PIC 99.
05 DATE-CHK-LEAP PIC 9.
05 DATE-CHK-CNT PIC 9(05).
05 DATE-CHK-REM PIC 9(03).
05 DATE-CHK-QUO PIC 9(03).
05 YEAR-ERR PIC X(38) VALUE "年度錯誤.......!!".
05 MONTH-ERR PIC X(38) VALUE "月份錯誤.......!!".
05 DAY-ERR PIC X(38) VALUE "日期錯誤...... !!".
05 WIN-ERR PIC X(10) VALUE SPACES.
05 QUEST PIC X(01) VALUE SPACES.
LINKAGE SECTION.
COPY "DATECHCK.LNK".
PROCEDURE DIVISION USING DATE-LINK.
CHECK-RTN.
MOVE 0 TO DATE-CHK-RTN.
MOVE DATE-CHK TO DATE-CHK-1.
COMPUTE DATE-CHK-CNT = 1911 + DATE-CHK-YY.
PERFORM LEAP-YEAR-RTN.
IF DATE-CHK-YY IS NOT NUMERIC
MOVE 3 TO DATE-CHK-RTN
GO TO CHECK-1.
IF DATE-CHK-MM < 1 OR DATE-CHK-MM > 12
MOVE 1 TO DATE-CHK-RTN
GO TO CHECK-1.
IF DATE-DAY-31 IF (DATE-CHK-DD < 1 OR DATE-CHK-DD > 31)
MOVE 2 TO DATE-CHK-RTN
GO TO CHECK-1.
IF DATE-DAY-30 IF (DATE-CHK-DD < 1 OR DATE-CHK-DD > 30)
MOVE 2 TO DATE-CHK-RTN
GO TO CHECK-1.
IF DATE-DAY-28 PERFORM DAY-28-RTN.
CHECK-1.
EVALUATE TRUE
WHEN DATE-CHK-RTN = 1 OR 2 OR 3
DISPLAY WINDOW LINE 12 COL 21 LINES 3 SIZE 40
REVERSE POP-UP AREA WIN-ERR
EVALUATE DATE-CHK-RTN
WHEN 1
DISPLAY MONTH-ERR LINE 2 SIZE 40 CENTERED
WHEN 2
DISPLAY DAY-ERR LINE 2 SIZE 40 CENTERED
WHEN 3
DISPLAY YEAR-ERR LINE 2 SIZE 40 CENTERED
END-EVALUATE
ACCEPT QUEST LINE 2 COL 40 OFF NO BEEP AUTO
BEFORE TIME 100 ON EXCEPTION CONTINUE
END-ACCEPT
CLOSE WINDOW WIN-ERR
WHEN DATE-CHK-RTN = 0
PERFORM RTN-DAY-RTN
END-EVALUATE.
CHECK-E.
EXIT PROGRAM.
LEAP-YEAR-RTN.
MOVE 0 TO DATE-CHK-LEAP.
DIVIDE DATE-CHK-CNT BY 4 GIVING DATE-CHK-QUO
REMAINDER DATE-CHK-REM.
IF DATE-CHK-REM = 0 MOVE 1 TO DATE-CHK-LEAP.
DIVIDE DATE-CHK-CNT BY 400 GIVING DATE-CHK-QUO
REMAINDER DATE-CHK-REM.
IF DATE-CHK-REM = 0 MOVE 0 TO DATE-CHK-LEAP.
DAY-28-RTN.
IF DATE-CHK-LEAP = 0
IF (DATE-CHK-DD < 1 OR DATE-CHK-DD > 28)
MOVE 2 TO DATE-CHK-RTN
END-IF
ELSE
IF (DATE-CHK-DD < 1 OR DATE-CHK-DD > 29)
MOVE 2 TO DATE-CHK-RTN.
RTN-DAY-RTN.
IF DATE-DAY-28
IF DATE-CHK-LEAP = 0 MOVE 28 TO DATE-CHK-DD END-IF
IF DATE-CHK-LEAP = 1 MOVE 29 TO DATE-CHK-DD END-IF.
IF DATE-DAY-30 MOVE 30 TO DATE-CHK-DD.
IF DATE-DAY-31 MOVE 31 TO DATE-CHK-DD.
MOVE DATE-CHK-1 TO DATE-CHK.
END-PROGRAM.
|