2010-09-13

Win32Forth 支援中文之修改步驟

因為老美不太喜歡亞洲人在Forth上的一些作法,所以在win32forth 4.2版之後,就改變了許多作法,但是透過Jefer & Ching兩位先進,還是完成了相關的修改,可以繼續使用中文指令。



<1>修改 原fkernel.f的 UPPER 內容如下:
( 註: 修改的 SUPPER 會呼叫 UPPERCASE ,所以 要在 UPPERCASE之後定義 )
1 constant cword_support? 
cword_support? #if 
: UPPER         ( addr len -- )                  \ translate to uppercase 
                cword_support? 
                if 
                        2dup 0 -rot ( a l 0 a l) 
                        0 ?do dup i + c@ 127 > 
                                if 
                                        swap drop -1 swap 
                                then 
                        loop drop 
                        if 
                                2drop 
                                exit 
                        then 
                then 
                ucasetab tr ;                    \ use tr to do the work 
#else 
: UPPER         ( addr len -- )                  \ translate to uppercase 
                ucasetab tr ;                    \ use tr to do the work 
#then

cword_support? #if 
: ?UPPERCASE 
        cword_support? 
        if 
                dup 
                @  0xff00ffff and 
                0x27002703 = if exit then       \ skip '?' 
                dup count 0 -rot ( str 0 a l ) 
                0 ?do dup i + c@ 127 > 
                        if 
                                swap drop -1 swap 
                        then 
                loop drop 
                if 
                        exit 
                then 
        then 
        UPPERCASE 
; 
#else 
' UPPERCASE ALIAS ?UPPERCASE 
#then

<2>修改 src\class.f 中的 @word 內容如下:
: @word         ( -- addr ) 
\                bl word uppercase ; 
                bl word ?uppercase ;


<3>修改 fkernel.f & class.f 後
執行 setup.exe 選 B (Rebuild win32for.exe)
之後執行 win32for.exe

<4>
: 古惑仔 ." 古惑仔" ;
如果你看到古惑仔 , 就表示成功了
這時你打 words 當然也會出現 古惑仔這個詞.
( p.s 原本 "古" 會變成 "仔" )

PS:若要讓系統找指令也不出錯,則需再將fkernel.f源程式中尾段PARMFIND指令中的UPPERCASE也改成?UPPERCASE才行。

原文出處: http://groups.google.com.tw/group/figtaiwan/web/win32forth-61400

沒有留言: