你只要下載patch614forchinese.f
然後在win32for裡面
fload patch614forchinese
即可
這次的修正主要原理是
定義了 xTR ( adr n table -- ) 其功能與 TR ( adr n table -- )一樣, 將位址在 adr 長度為 n 字串中英文字母依 table 變大寫或變小寫。只是 xTR 遇中文會自動跳過, 但 TR 把每個中文字當作兩個英文字母處理 (可能就會改了原來的中文字)
原出處:https://mail.google.com/mail/?zx=c5kun3itqmev&shva=1#inbox/133eae7e98ea9bba
如果你沒法下載,也可以把以下內容存成該檔案即可
\ patch614ForChinese.f \ 這裡定義的 xTR 其功能與 TR 一樣, 將位址在 adr 長度為 n 字串中英文字母依 table 變大寫或變小寫, \ 只是 xTR 遇中文會自動跳過, 但 TR 把每個中文字當作兩個英文字母處理 (可能就會改了原來的中文字) \ 例如: s" aBc陳爽xYz" 2dup uCaseTab xTR type 會印出 ==> ABC陳爽XYZ \ s" aBc陳淇xYz" 2dup lCaseTab xTR type 會印出 ==> abc陳淇xyz \ 但是: s" aBc陳爽xYz" 2dup uCaseTab TR type 會印出 ==> ABC陳淇XYZ \ s" aBc陳淇xYz" 2dup lCaseTab TR type 會印出 ==> abc陳爽xyz \ xTR ( adr n table -- ) ( 404314 18 43 40 00 ) CODE xTR \ ebx <== table ( 404318 5F ) pop edi \ edi <== len ( 404319 59 ) pop ecx \ ecx <== addr ( 40431A 52 ) push edx \ save edx ( 40431B 03 F9 ) add edi, ecx \ edi <== addr + len ( 40431D 33 C0 ) xor eax, eax \ eax <== 0 ( 40431F 3B F9 ) @@1: cmp edi, ecx \ goto @@4, if edi >= ecx ( 404321 72 14 ) jb short @@4 ( 404323 8A 01 ) mov al, [ecx] \ al <== [ecx] ( 404325 80 F8 80 ) cmp al, # $80 \ goto @@2, if eax >= # $80 ( 404328 73 07 ) jae short @@2 ( 40432A 8A 14 03 ) mov dl, [ebx] [eax] \ dl <== uppercase of al ( 40432D 88 11 ) mov [ecx], dl \ [ecx] <== dl \ 原字母換成大寫 ( 40432F EB 02 ) jmp short @@3 \ goto @@3 ( 404331 FF C1 ) @@2: inc ecx \ ecx <== exc + 1 \ 跳過中文字 ( 404333 FF C1 ) @@3: inc ecx \ ecx <== exc + 1 ( 404335 EB E8 ) jmp short @@1 \ back @@1 ( 404337 33 FF ) @@4: xor edi, edi \ edi <= 0 ( 404339 5A ) pop edx \ restore edx ( 40433A 5B ) pop ebx \ tos ( 40433B 8B 06 83 C6 04 FF 20 ) next ( 404342 ) c; : patch614ForChinese ['] xtr dup \ 以 xtr 取代 uppercase 中在位址 402290 的 tr $402290 dup @ ['] tr <> abort" cannot fix uppercase " ! \ 以 xtr 取代 upper 中在位址 40C348 的 tr $40C348 dup @ ['] tr <> abort" cannot fix upper " ! ; patch614ForChinese \ 因為 uppercase 會被下列指令用到 \ ?MISSING SEARCH-WORDLIST CAPS-FIND PARMFIND NEW-NUMBER WINLIBRARY LINKFILE \ NEXTWORD "COMMENT DEFINITE-WORD [DEFINED] (.PROCS) .PROCS (WORDS) CONSTANTS \ CONSTANTS _WORDS @WORD $.VIEWINFO ?UPPERCASE \ 並且 upper 會被下列指令用到 \ "HEADER ARG-1" "PATH+ CAPS-SEARCH CAPS-SEARCH CAPS-COMPARE CAPS-COMPARE \ GET1LINE SHOWHEAD "COMMENT "MATCHES
沒有留言:
張貼留言