2013年2月28日木曜日

SHIFT-JIS文字ほぼ全一覧表示(UTF8版)

X68000がサポートしていたSHIFT-JIS文字ほぼ全てを一覧表示します。
算術で作り出したSHIFT-JISコードを表示時にUTF8に変換しています。
強制SHIFT-JISモードをオフに設定して実行してください。
// UTF8版
/* SHIFT-JIS 全文字コード表示プログラム 
// テキスト画面がスクロールできないのでページ切り替え
    font("Migu 1M")
    int fzenhan:// YES=
    width(64,,fzenhan)
    print "fzenhan=";fzenhan
    cls()
    
    if isLocalizeJapan() then {
        setFunctionKey(0,"次へ",&h0d)
        setFunctionKey(1,"中断",&h1b)
        print "半角文字"
    } else {
        setFunctionKey(0,"Next",&h0d)
        setFunctionKey(1,"Break",&h1b)
        print "Half-Width Character"
    }
    print_code0(fzenhan)
    //
    displayFunctionKey(YES,0,1)
    //
    while YES
        if print_code(&h8100,&h9fff) then break
        if print_code(&he000,&hefff) then break
        print_head()
        break
    endwhile
    //
    // ファンクションキー表示は個数を変えても自動的に前の表示は消えないので、
    // ユーザーが消す必要がある(そうしないと表示が重なる)
    displayFunctionKey(NO,0,1)
    if isLocalizeJapan() then {
        setFunctionKey(0,"終了",&h0d)
    } else {
        setFunctionKey(0,"End",&h0d)
    }
    displayFunctionKey(YES,0,0)
    int ky
    repeat
        ky=inkey()
    until ky<>0
end

//--------------------------------

func print_head()
    if fzenhan then {
        print "-code-:-+0-+1-+2-+3-+4-+5-+6-+7-+8-+9-+A-+B-+C-+D-+E-+F-"
    } else {
        print "-code-:-0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-"
    }
endfunc

func print_skip()
    print "      :                                                "
endfunc

func str hex4$(h;int)
    return (right$("0000"+hex$(h),4))
endfunc

func str hex2$(h;int)
    return (right$("00"+hex$(h),2))
endfunc

func printChr(h;int,l;int)
    print chr$((h shl 16)or l);
endfunc

func int print_code(st;int,ed;int)
/* 全角文字表示 
int i,li,hi
int j
    for i=st to ed
        hi=i / 256
        li=i mod 256
        if li=0 then {
            print_head()
            int ky
            int ts=time()
            int dt=0,t
            repeat
                ky=inkey()
                t=time()
                if t-ts>dt then { :/* 秒が変った
                    dt=dt+1
                    locate(40,0):print dt
                    beep2(0)
                }
            until ky<>0
            if ky=&h1b then return (YES)
            cls()
            if isLocalizeJapan() then {
                print "全角文字"
            } else {
                print "Double-Width character"
            }
            print_head()
        }
        if li<&h40 then continue:/* 下位8ビットが<$40の文字はない 
        
        /* アドレス表示 
        print " ";hex4$(i);" :";
        for j=0 to 16-1
            print " ";
            int c=(i+j) and &hff
            if c<&h40 or c=&h7f or c>=&hfd then { /* 未定義文字 
                if fzenhan then {
                    print "**";
                } else {
                    print "*";
                }
            } else {
                c=sjisToUtf8(i+j)
                print chr$(c);    /* 途中で桁上がりを起こさないことを前提にした処理 
            }
        next
        print
        i=i+16-1:/* 次のnext +1されるから
    next
    return (NO)
endfunc

func print_code0(fzenhan;int)
/* 半角文字表示 
int li
int j,c
    print_head()
    for li=&h20 to &he0-1
        /* 途中表示しないエリア 
        if li=&h80 then print_skip()
        if li>=&h80 and li<=&h9f then continue
        
        /* アドレス表示 
        print "  ";hex2$(li);"  :";
        /* 文字表示
        for j=0 to 16-1
            print " ";
            c=li+j
            if c=&h7f or c=&ha0 then c='*' else c=sjisToUtf8(c)
            print chr$(c);
            if fzenhan then print " ";:/* 全角=半角*2のフォントの時は後ろにスペースを入れる
        next
        print
        li=li+16-1:/* 次のnext +1されるから
    next
endfunc

Zipファイル :XBetc.zip

0 件のコメント:

コメントを投稿