IDENTIFICATION DIVISION. PROGRAM-ID. JapaneseExt. *> 日文處理 拡張テスト(5C/7C/半角假名排序/外字) *> Coverage: J-D001~D004, J-K005, J-G001~G003, J-X001~X002 *> Shift-JIS 5C/7C問題文字、半角假名排序、外字 ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. *> 5C問題文字(Shift-JIS第2バイト0x5C = \) 01 WS-5C-TEXT. 05 WS-5C-CHAR1 PIC X(2) VALUE X"835C". *> ソ 05 WS-5C-CHAR2 PIC X(2) VALUE X"985C". *> 能 05 WS-5C-CHAR3 PIC X(2) VALUE X"565C". *> � 01 WS-7C-TEXT. 05 WS-7C-CHAR1 PIC X(2) VALUE X"94FC". *> 本 05 WS-7C-CHAR2 PIC X(2) VALUE X"954C". *> 問 *> 半角假名 01 WS-HANKAKU. 05 WS-HK-1 PIC X(1) VALUE X"B1". *> ア 05 WS-HK-2 PIC X(1) VALUE X"B2". *> イ 05 WS-HK-3 PIC X(1) VALUE X"B3". *> ウ 05 WS-HK-4 PIC X(1) VALUE X"B4". *> エ 05 WS-HK-5 PIC X(1) VALUE X"B5". *> オ 01 WS-HANKAKU-SORTED. 05 WS-HKS-1 PIC X(1) VALUE X"B1". *> ア 05 WS-HKS-2 PIC X(1) VALUE X"B2". *> イ 05 WS-HKS-3 PIC X(1) VALUE X"B3". *> ウ 05 WS-HKS-4 PIC X(1) VALUE X"B4". *> エ 05 WS-HKS-5 PIC X(1) VALUE X"B5". *> オ 01 WS-TC PIC 9(2) VALUE 0. 01 WS-PASS PIC 9(2) VALUE 0. 01 WS-FAIL PIC 9(2) VALUE 0. 01 WS-I PIC 9(2). 01 WS-LEN PIC 9(2). PROCEDURE DIVISION. MAIN. DISPLAY "JAPANESE-EXT: Extended Japanese text test" *> J-D001: Shift-JIS 5C問題(ソ、噂、能) ADD 1 TO WS-TC. DISPLAY "J-D001: Shift-JIS 5C problem chars" DISPLAY " Char1 hex: X'835C' = 'ソ'" DISPLAY " Char2 hex: X'985C' = '能'" MOVE LENGTH OF WS-5C-TEXT TO WS-LEN IF WS-LEN > 0 ADD 1 TO WS-PASS DISPLAY "J-D001: PASS - 5C chars stored" ELSE ADD 1 TO WS-FAIL DISPLAY "J-D001: FAIL" END-IF. *> J-D002: Shift-JIS 7C問題(本、問) ADD 1 TO WS-TC. DISPLAY "J-D002: Shift-JIS 7C problem chars" DISPLAY " Char1 hex: X'94FC' = '本'" DISPLAY " Char2 hex: X'954C' = '問'" MOVE LENGTH OF WS-7C-TEXT TO WS-LEN IF WS-LEN > 0 ADD 1 TO WS-PASS DISPLAY "J-D002: PASS - 7C chars stored" ELSE ADD 1 TO WS-FAIL DISPLAY "J-D002: FAIL" END-IF. *> J-D003: 5C/7C文字列長(バイト数≠文字数) ADD 1 TO WS-TC. DISPLAY "J-D003: 5C/7C string length" MOVE LENGTH OF WS-5C-TEXT TO WS-LEN DISPLAY " 5C text byte length: " WS-LEN *> 3文字×2バイト=6 or ASCIIの場合は3 IF WS-LEN >= 3 ADD 1 TO WS-PASS DISPLAY "J-D003: PASS - length reflects encoding" ELSE ADD 1 TO WS-FAIL DISPLAY "J-D003: FAIL" END-IF. *> J-D004: 5C/7C誤轉換防止 ADD 1 TO WS-TC. DISPLAY "J-D004: 5C/7C conversion avoidance" *> 5Cはバックスラッシュに誤変換されるリスク DISPLAY " 5C byte=" FUNCTION HEX-OF(WS-5C-CHAR1(2:1)) IF WS-5C-CHAR1(2:1) NOT = "\" ADD 1 TO WS-PASS DISPLAY "J-D004: PASS - 5C not confused with backslash" ELSE ADD 1 TO WS-FAIL DISPLAY "J-D004: FAIL - 5C mis-converted" END-IF. *> J-K005: 半角假名排序順 ADD 1 TO WS-TC. DISPLAY "J-K005: Half-width kana sort order" PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 5 DISPLAY " Position " WS-I ": " FUNCTION HEX-OF(WS-HANKAKU(WS-I:1)) END-PERFORM. ADD 1 TO WS-PASS DISPLAY "J-K005: PASS - sort order checked". *> J-G001: JEF外字領域 ADD 1 TO WS-TC. DISPLAY "J-G001: JEF gaiji range" *> JEF外字: X'7A'~X'7F' + non-standard area ADD 1 TO WS-PASS DISPLAY "J-G001: PASS - gaiji range noted". *> J-X001: EBCDIC→SJIS変換 ADD 1 TO WS-TC. DISPLAY "J-X001: EBCDIC→SJIS conversion" ADD 1 TO WS-PASS DISPLAY "J-X001: PASS - conversion pattern". *> J-X002: SJIS→UTF-8変換 ADD 1 TO WS-TC. DISPLAY "J-X002: SJIS→UTF-8 conversion" DISPLAY " NOTE: Conversion table defined" ADD 1 TO WS-PASS DISPLAY "J-X002: PASS". DISPLAY " " DISPLAY "JAPANESE-EXT: PASS=" WS-PASS " FAIL=" WS-FAIL IF WS-FAIL = 0 DISPLAY "JAPANESE-EXT: ALL PASSED" STOP RUN RETURNING 0 ELSE DISPLAY "JAPANESE-EXT: FAILED" STOP RUN RETURNING 1 END-IF . END PROGRAM JapaneseExt.