////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2003/04/28(Mon) No.204
    配信数： 3190 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００３年４月２８日（月）の更新                */
http://www.kab-studio.com/

・ほとはー１話追加！
　三人合体ホットハーブに１話追加。４章も佳境突入！
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.com/nikki2/

2003/04/20 (Sun)
　こみパとりあえずコンプ！　ベスト３。サブキャラもね。のんびり。郵便
局２４時間。ハオシャオの漢字。

2003/04/21 (Mon)
　VB 。やったことないけど。例外処理をどうしよう。前に作ったもののと
かも。こみパ３人娘。そしてまたーり。そしてほとはー。そして郵便局。

2003/04/22 (Tue)
　VC でやったら３日でできそうなのを VB で。 Struts の Validation で
戻っても値が復活しない……。横浜の事情。サブマシンを DNS サーバーに
するかな。

2003/04/23 (Wed)
　固定 IP アドレスが取れない。電話がないから。 VB 始動。わけわから
ん。 MSDN ないときつい。太極拳やってます。ウソです。 Ever17 ドラマ
ＣＤとか購入。深夜のをリアルタイムで。

2003/04/24 (Thu)
　こみパノーマルエンド。 VB で親フォームへのアクセス方法がわからん。
Java WORLD 付録便利。

2003/04/25 (Fri)
　VB のが思った以上に難敵っぽい。「COM」。動的に DLL のクラスを作れ
ます。早めに言うべきだったか。帰りに秋葉原へ。ハードディスクとか
うたわれるものとか購入。調教の為には３５００円くらい。ゴールデン
ウィークの予定。

2003/04/26 (Sat)
　ハードディスクのセットアップ。 convert 。自作したことないから慣れ
てない。午前中模様替え。午後はぐたーっと。ダイエット。キーボードを変
えようかと。会社と同じ環境にした方がいいかな。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第七章　告白　−５−

　高台の上から夜景を見下ろす。駅を中心としてきらびやかな町並みが広が
っている。今日泊まるホテルも見える。
　もちろん、部屋は別々だけど。
　電車に揺られて数十時間、まだ目的地にはほど遠いらしい。
「やっぱり高速バスの方が良かったんじゃないの？」
「途中まではその方が早かったかもな」
　舞の背後、木々の中から雅樹が現れる。
「誰もいないみたいだぜ、始めるか？」
　舞は、うなずくことなく振り向いた。
　その眼光は、鋭い。
　高台にある公園。野球場にも使えるように高いフェンスが張り巡らされて
いる。雅樹と舞はそれを軽々と登っていき中へと入る。
「今は穂香がいないが」
「ハンデ、ってことね」
　微妙な表情を見せて、舞は自分を納得させた。
　雅樹はマウンドに立ち、右腕を構える。音もなく、炎が立つ。
　ベンチの近くに蛇口を見つけて、舞は駆け寄る。蛇口をひねると、すぐ下
のバケツに水が溜まっていった。
「始めていいか？」
「いつでもいいよ」
　指を上げれば、それを追って水が登る。それがゆっくりと体を取り囲む。
「橙炎連燃！」
　炎が橙色に変わり、腕が振るわれるたびに手元から離れる。いくつもの炎
が闇夜を切り裂き、舞へと向かう。
　舞はそれに向かって指を指す。水槍が炎へと突き刺さり次々と打ち消して
いく。そして今度は、５本の水槍が雅樹へと向かう。
「焦止！」
　円形に回した右手から炎の楯が生まれる。３本の水槍が楯へと突き刺さり
同時に蒸発する。残り２本を雅樹は余裕で躱す。
「嘘！！」
　舞は驚きを隠せなかった。
「なんで炎で止められるの？　まさかあの水量を一瞬で蒸発させたの！？」
「いや、爆散させただけだ」
　雅樹が指で手招きする。舞はぶっきらぼうに腕を振るう。太さ１０センチ
はある水柱が雅樹へと向かう。
「橙炎焦止！」
　橙色の壁に水柱が突き刺さる。それは貫通せず飛沫となって消えた。
「爆散……」
「俺の炎はな、実は仮のものなんだ。そこで実際に燃えてるわけじゃない。
燃やす対象物が存在して、初めて発火する」
「つまり、質量差は関係ないって事？」
「当然だ。空気同然の炎で水を止められるわけがない。これは、その水が突
っ込んできたときに中心から急激に熱してるだけだ」
「そして霧散する……」
「ま、お前が手加減してくれてるから通用する手だがな」
「え、分かってたんだ」
　舞はニヤリと笑い、指を弾いた。そしてそれを見て、雅樹は後ろへと飛
ぶ。元いた場所に霧散していた水蒸気が一瞬にして氷結する。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『ぷらとわもほとはーも人気ないわねー』
「ヒット数、かなり少ないね。まぁ、理由はあるんだけど」
『え、なになに？』
「……あるとは思うんだけど、わかんない」
『それじゃ意味なし！　げし』
「はう」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 11.04
文字種の判定

「前回は、日本語の文字列、リードバイトとトレイルバイトについて見てみ
ました」
『なんかすんごくこんがらがっちゃったんだけど……』
「そうだね、ここはわかりにくいと思うからもう一度見ておこうか。まず、
日本語の文字は２バイトで１文字を表します。たとえば、ウィンドウズで使
われている文字コードの Shift JIS だと、カタカナのソは」

ソ   
83 5C

「で表します。で、これがウィンドウズの画面に表示されるときには」

[「ソ」を表す数字 0x83 0x5C ]
　　　　↓
[ Shift JIS 文字コード表で数字を「ソ」に]
　　　　↓
[フォントの「ソ」を使って画面に表示]

「って手順になります」
『でも』

\  
5C 

『って、これがソのあとのバイト……トレイルバイトって言うんだよね』
「そう、最初のバイトがリードバイト、後のバイトがトレイルバイト。だか
ら」

83 : リードバイト
5C : トレイルバイト

「ってなります」
『そう、そのトレイルバイトが \ と同じ数字なんだよねー』
「そう。英数字……前に言ったかな、 ASCII 文字」
『えーっと…… Version 5.04 ( No.069 ) でやったね』
「そう。英数の文字コードは ASCII 文字コードって言います。それと、 
Shift JIS のリードバイトとトレイルバイトはこうなります」

ASCII 文字： 0x20 〜 0x7F
リードバイト： 0x81 〜 0x9F 、 0xE0 〜 0xFC 
トレイルバイト： 0x40 〜 0x7E 、 0x80 〜 0xFC 

『あれ、この前は英数の方は見なかったよね』
「そっちも重要だからね。 ASCII とリードバイトは重なっていないけど、
トレイルバイトとは……」
『あ、重なってる！！』
「 \ も英数の一種だから」
『ソのトレイルバイトと同じになっちゃったわけね……』
「そして、リードバイトとトレイルバイトも重なってます」
『それが前回の＝よね』
「そう。＝は」

＝    
81 81 

「って文字コードだから」
『これじゃリードバイトとトレイルバイトがわかんないよね』
「さっきの ASCII 文字とトレイルバイトもね」

void OutputLeadAndTrail()
{
    char ch[] = "ソ";
    TRACE( "%s\n%s\n", ch, &( ch[1] ) );
}

『ビルドして実行！』

ソ
\

『ってなるわけよねー』
「これはとても重要な点なんです。さっきの＝もだけど、ウィンドウズでさ
えも、いきなり 0x5C を渡されたら、〈ソのトレイルバイト〉って判らない
ってこと」
『ええっ！？　じゃあどうやって調べるの？？』
「種明かしをすると、 ASCII 文字とリードバイト、トレイルバイト、この
３つには次の法則が成り立つんです」

・トレイルバイトは必ずリードバイトの次に来る。
・文字列の最初にトレイルバイトが来ることはない。
・トレイルバイトの次にトレイルバイトが来ることはない。

『……あたりまえじゃない』
「もちろんそうなんだけどね。でもこれを使えば、必ず文字種を判定できる
んです。たとえば」

\  
5C 

「これは１文字目だからトレイルバイトじゃない」
『から \ なわけね』

ソ   
83 5C

「これは、まず 0x83 はリードバイトにもトレイルバイトにもある文字コー
ドだけど、１文字目だからリードバイト」
『うんうん』
「そのリードバイトの次に来る 0x5C は絶対にトレイルバイトだから、この 
0x5C が \ って見られることはなくて、だからこの２バイトはソって見なさ
れるんです」
『なんかちょっとパズルっぽい』
「かもね。これを踏まえて」

C:\ソフト.txt

「を先頭からソまで調べると」

C : 0x43 : １文字目だからトレイルバイトじゃないので ASCII 文字。
: : 0x3A : 問答無用で ASCII 文字。
\ : 0x5C : ひとつ前の : が ASCII だから次にトレイルバイトが来ること
　　　　　 はないから、これは ASCII 文字。
ソ（１バイト目） : 0x83 : 
　　　　　 ひとつ前の \ が ASCII 文字だからトレイルバイトには成り得
　　　　　 ない、だからリードバイト。
ソ（２バイト目） : 0x5C : 
　　　　　 ひとつ前がリードバイトだからトレイルバイト確定。

「ってなります。だから、このソの２バイト目は \ じゃなくてソのトレイ
ルバイトってことがわかるんです」
『そっか、ようするに最初からひとつひとつ見ていけばいいってことね。
って、それってかなり面倒じゃん！！』
「面倒なんだけど、それでもこうしないとわからないからねー」
『……で？　これ、プログラムでやるの？』
「微妙。とりあえず、 _mbsbtype() って関数があるからまずはこれを使っ
てみます」

void OutputCharType()
{
    unsigned char ch[] = "\\ソ";
    TRACE( "%d\n", _mbsbtype( ch, 0 ) );
    TRACE( "%d\n", _mbsbtype( ch, 1 ) );
    TRACE( "%d\n", _mbsbtype( ch, 2 ) );
}

『？』
「 _mbsbtype() は、第１引数の文字列の、第２引数文字目の種類を返しま
す。実行するとこんな感じ」

0
1
2

『ぜろいちに？』
「これは _mbsbtype() のリファレンスを見てみて」
『えーっと、 0 がシングルバイト文字……？』
「１バイトの文字、つまり ASCII 文字ってこと」
『あー。 1 がマルチバイト文字の先行バイト……？』
「マルチバイト文字っていうのは複数のバイトで表現される文字のこと。
まぁようするに Shift JIS の文字ってこと」
『先行バイトは……あ！　リードバイトのこと！』
「そういうこと。 2 はマルチバイト文字の後続バイト」
『トレイルバイトってことね。おおっ、これ使えばちゃんとわかるじゃな
い！！』
「一応ね」
『一応？』
「まず、この関数って最初に _ が付いてるでしょ。こういう種類のランタ
イムは VC にしか入ってないランタイムなんです」
『ってことは他の……他の、なんだろう』
「まぁ VC 以外は当分ないだろうからそれは考えない方がいいか。じゃ、実
際に、 Version 11.02 ( No.202 ) のファイル名を取り出す関数を改良しま
す」

void OutputFileName2()
{
    char ch[] = "C:\\Test\\ソフト.txt";
    char chOut[MAX_PATH];
    int iCharType = _mbsbtype( (unsigned char *)"\\", 0 );

    // 後ろから見ていきます。
    for( int iIndex = strlen( ch ) - 1; 0 <= iIndex ; iIndex-- )
    {
        // 文字種も含めてチェック。
        if(
            ( ch[iIndex] == '\\' ) &&
            ( _mbsbtype( (unsigned char *)ch, iIndex ) == iCharType )
          )
        {
            // \\ がみつかりました。
            // その次の文字から最後までコピー。
            strcpy( chOut, &( ch[iIndex + 1] ) );
            break;
        }
    }

    // 出力します。
    TRACE( "%s\n", chOut );
}

『そっか、文字コードそのものだけじゃなくて、 _mbsbtype() の文字種も
一致したら、みつかったってすればいいんだね』
「そういうこと。実行すると」

ソフト.txt

『おおっ！！　こうすればちゃんと調べることができるんだね』
「 _mbsbtype() はこの手の問題の特効薬ってくらい便利な関数だから」
『はーい。……あれ？　そういえば unsigned って付いてるのはなんで？』
「それについては次回で」

/*
    Preview Next Story!
*/
『今回はホントにパズルっぽかったね』
「ま、それもプログラムを作る楽しみのひとつかも」
『えー？』
「普通、パズルって問題毎に解くけど、プログラムで作っちゃえば」
『それがどんな問題も解いてくれる……？』
「ってほどうまくいかないんだけどね」
『というわけで次回』
＜ Version 11.05 signed char と unsigned char ＞
「につづく！」
『って前にやったじゃんそれ』
「こういうのを知らないと、パズルを解けたと思ったら……」
『思ったら……？』


////////////////////////////////////////////////////////////////////
/*                ２００３年５月５日（月）の更新                  */
http://www.kab-studio.com/

・５月表紙壁紙の予定
　毎月恒例、新しい表紙です。今回は５月＞子供の日＞鎧＞甲冑＞ファンタ
ジーみたいな予定。時間はあるんでしっかり描こう〜。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

