Windows NT - みる会図書館


検索対象: UNIX MAGAZINE 1994年10月号
150件見つかりました。

1. UNIX MAGAZINE 1994年10月号

文字の順番によって決定されてしまう。ひらがななどは、 それぞれの不頁のなかでは JIS でも Unicode でも並ひ順 が同しなので問題はないが、たとえば、、 [ あー A ] " (A は 全角 ) にはすべての漢字がマッチするといった現象か起き てしまう。すべての漢字を指定する場合は、 Unicode と JIS では順番が異なり問題がある。 Mule でのように、す べての漢字にマッチする朱文字が必要である。 また現実的ではないが、 Unicode 自体をデータとして 扱う場合、このような問題はとくに生じない。 gawk では、 中国語の、、馬 " も日本語の、、馬 " も同じものとして扱った はうがよいことも多いだろう。 連載 /Windows NT—O 今後の展望 しつは、 gawk はそれほど簡単に Unicode 化できるよ うなプログラムではない。それでも、約 1 週間の作業で こまでもってくることかできた。ウインドウべースの描 画ツールなどなら、はんのわすかな手間で Unicode 化で きる。メモリ使用量が 2 倍を超えるような現象も、このよ うなアプリケーションでは起こらない。入力ガ去、フォン ト、 API などシステム側の整備か進めは、アプリケーショ ンの Unicode 化は意外に早く進むかもしれない。 Windows 製品群のうち、内部文字コードとして Uni- code を採用しているのは Windows NT だけで、同し Ⅵⅱ n32 API を使用する Windows 4.0 (Chicago) の 内部コードは SBCS/DBCS である。ただし、文字コー ド変換ルーチンは提供されているので、 gawk の移植にか ぎっていえば、 ( 日本語版での使用を前提にするのなら ) 本質的問題はない。 CreateFiIe の引数を ANSI にするた けでよいはすだ。 Win32s (Version 1.2 ) でも事情は同し だが、こちらではメモリ不足などの間題か起きるかもしれ ない。 リスト 3 入出力とコマンド引数への文字コード変換ルーチン且込み・ #include "awk . h" #include く fcntl . h> #include く io . h > #include く locale . h> #ifdef UNICODE int cp-arg=—l ; int cp—write=—l ; int cp—read=—l ; 92 static static static Unicode の今後を考えると、 Windows NT の系列で はこれからも Unicode が内部文字コードとして使われて いくようだ。広域ネットワークーヒで重川乍する分散アプリケ ーションの場合、 SBCS/DBCS の切替えによるアプロー チでは手間がかかりすぎる。たとえば、世界各地に駐在す る社員の名簿を各国で入力させ、単一のサーバーに↑褓内す ることを考えよう。同じ地域に住んでいるからといって、 同じ文字コードで名前か表現できるとはかぎらない。ある 社員の名前、住所、所属などを表現するのに、いちいち別 のコードベージ ( 文字コード ) を使わなければならないこ ともある。テキストをオ内するすべてのデータ項目に、そ れぞれコードベージのエントリを付け加えるくらいなら、 適当な内部コードを用意したはうがよい。このようなこと を考えると、 Unicode はごく自然な〕尺であろう。クラ イアント・アプリケーションには Unic 。 de を渡し、その クライアントの能力に応して表示などをおこなうようにす れば、システムはだいふ簡単になる。 今回変更した gawk のソースは、もちろん GNU GPL(General PubIic License) の条件にもとづいて配 布する。麒寺点では、次の anonymous FTP サイトから 入手できる ( ファイル名は gawk-2-1NT.12h ) 。 ftp: //ftp. sigmath. osaka-u ・ ac ・ JP ftp://ftp ・ iij ・ or ・ jp 利用できる環竟にある方は、せひ使ってみてほしい。 ( いがらし・ひさかす ) [ 文献 ] [ 1 ] “ The Unicode S れ d 佖 : 怖 v 記 e C ん rac 7 、 En- co 市れ 9 , レérs を 0 れプ . 0 ” , VOI. 1 and 2 , Addison-Wesley, 1991 , 1992 [ 2 ] “ The Unicode S ねれ d のヨ佐 7 、 s を 0 れノ . ノ” , Unicode Con- sortium, 1993 [ 3 ] ル 32 API 月 e 食 7 ℃れ ce , Microsoft, 1993 UNIX MAGAZINE 1994 ユ 0

2. UNIX MAGAZINE 1994年10月号

9 五十嵐久和 Unicode 連載の 5 回目 ( 1994 年 6 月号 ) で、 gawk ( 2.14 ) 1 を であっても同しような文字には同じコードカ瞎リり当てられ Windows NT に移植したが、これを Unicode を使って ている。 Unicode では、 ANSI 、 JIS 、 Big5 などといっ 多言言靆寸応にしてみた。 Mule などのようにダイナミック た各国て利用されている既存の文字コードが Unicode の に言語を切り替えられるわけではないが、環境変数の設定 部分集合と 1 対 1 に対応する ( 図 1 ) 。それぞれの対応 でさまざまな言語に対応できる。 表も用意されているので、これら既存のコードに対して上 位換のコードとして使うことができる。なお、現状では Unicode と Windows NT Unicode は IS010646 ー 1 UCS2 と内容が一致している。 田は、参考文献 [ 1 , 2 ] を参照してはしい。 W ⅲ 32 API (Windows (T) は、大別して 3 種類 Windows NT では、内部処理のためのコードとして の文字コードをサポートしている。 ANSI などの SBCS Unicode を使う。 API(Application Programming ln- (Single Byte Coding System : 1 ノヾイトコード ) とシフ terface) は、 SBCS/DBCS 対応のものと Unicode 対応 ト JIS などの DBCS (Double Byte Coding System) 、 のものとの 2 種類が用意されている。たとえは、文字列 Unicode である。表現できる文字の数は、それぞれ 256 表示関数 TextOut には、 SBCS あるいは DBCS ( シス 文字、数千 ~ 数万文字、 65 , 536 文字である。 SBCS はっ テムのコードベージによって変わる ) の文字列を受け取る ねに 1 バイトのデータによって文字を表現するが、シフ TextOutA と、 Unicode 文字列を受け取る TextOutW ト JIS などの DBCS では 1 バイトコードと 2 バイト とがある。 TextOutA は 1 バイトデータ (char) の列、 コード (JIS など ) を混在させて表現する。特定のピット TextOutWti 2 バイトデータ (unsigned short) の列 の ON/OFF によって 2 バイトコードの 1 バイト目と 1 を受け取るので、コンパイル時にどちらを使用するか決め バイトコードを判定できるようにしている。 Unicode は、 ておかなけれはならないからだ。文字列表示だけでなく、 つねに 2 バイトのコードである。 フォント名やファイル名、イベント名の指定を含むものな Windows では、文字コードはコードベージという番 ど、文字列を引数や戻り値とする Win32 API の関数に 号で識別され、使用言語、国、アプリケーションなどに はすべてこの 2 不鶤頁が用意されている。これらの API で 応して切り替えて利用できる。これに対し Unicode は、 は、たとえ tiTextOut という汎用の名前を使っておく 単一のコードでどの SBCS 、 DBCS コードベージの文字 と、 UNICODE というマクロが定義されていれは Uni- コードも表現できるように作られている。もちろん、叫屯 code 版、定義されていなければ SBCS/DBCS 版カ硬わ にコードベージとコードという組合せて管理したのでは、 れるようになっている。 Unicode の 65 , 536 種には収まらない。そこで、とくに Windows API では、 16 ビット工韆竟から int や char アルファベットと漢字について、異なる言語に属する文字 などの C 言語のレベルで定義されるデータ型を直接には 使わないことになっている。通常、文字を扱うための型 1 GNU の CD-ROM などに含まれている。自力て舞直するつい ) なら、 は CHAR ( 実体は char) を、 1 バイトのデータを扱う 謝版でもこの版と大きな差はないはすである。 85 UNIX MAGAZINE 1994 ユ 0

3. UNIX MAGAZINE 1994年10月号

びーし一のおと 坂下秀 す。ハードウェアについては前回書いたので、今月はソ 途中経過はあとで書くとして、現在の様子を紹介しま が達成できそうです。 PC のアプリケーションを使って自分の仕事を楽にしよう んとカ撮初の目標であった、 この連載のおかげで、私の PC 竟もすっかり整い、な などか考えられました。 ・思いきって Windows NT や OS/2 ・ DOS/Windows ・ BSD / 386 などの UNIX ます OS は、 現在の環境 フトウェアです。 40 ないのでやめました。 バーはあるにはありますが、手に入りにくいのと不頁が少 ためらいます。たとえは、 TCP/IP?S ッケージや X サー 続するためのネットワーク製品があまりないのでちょっと NT や OS/2 はたしかによさそうですが、 UNIX と接 0 ている人がいません。そこで、 UNIX は候補から外しま している UNIX もあるようですが、身近には実際に使っ Windows アプリケーションを実行できる仕組みを提供 すが、 Windows のアプリケーションは実行できません。 BSD/386 で DOS プログラムを実行することはできま の達成は、 UNIX では難しそうです。現在のところ、 「 PC のアプリケーションも使える環境」という目標 最後に残ったのは、 DOS/Windows です。もちろん、 「 pc のアプリケーションも使える環竟」は簡単に達成で きます ( 当り前やがな ) 。しかし、逆にいままでの自分の仕 事かできなくなっては困ります。つまり、 UNIX や X の アプリケーション、 Mule や 'IbX Ghostscript などが 使えないとお手上げです。 DOS/Windows 上て動くもの もありますが、私は 8 十 3 文字のファイル名か大嫌いな ので、これはパスです。そこで、 Windows のアプリケー ションと UNIX/X のアプリケーションを同し画面で実 行できる Windows 上の X サーバーを使ってみることに しました 1 。また、 UNIX 上のファイルが簡単に共有でき るように NFS も使ってみることにしました。 Windows 上の X サーバーは数社から販売されており、 それぞれ実績があるようです。私はどれも使ったことがな いので、土に訊くことにしました。 どれがいいですか ? ss : X サーノヾー 僕もあんまり知らんねんけど、 NCD の PC-Xware がええんとちゃうかな。 へえ、どこらへんが ? 先室そうやなあ、ちょっと見てみ・・ ( 延々と説明を受ける ) SS すっかり PC-Xware 凵弸畄されてしまい、使ってみる ことにしました。 NFS などの TCP/IP ノヾッケージは、「 UNIX MAG- AZINE の記事のとおりにすれば、きっとちゃんと使える ようになるにちがいない」と信して、この「昔は昔、今は 今」て紹介されている Chameleon にしました。 けっきよく、 ・ PC の OS は DOS/Windows ・ UNIX との接続は ChameIeon の TCP/IP と NFS のパッケージを使い、ファイルを共有 ・ UNIX/X のアプリケーションの表示は Windows 上 の X サーノヾーである PC-Xware という構成にしました。 この竟のおかげで、次のようなことができるようにな りました ( 図 1 ) 。 1 もちろん、 UNIX/X のアプリケーションは、 Sun などの UNIX ワー クステーション十て動いていて、その表 ) ごけが PC 側に出ています。 SS UNIX MAGAZINE 1994 ユ 0

4. UNIX MAGAZINE 1994年10月号

バーソナルスーパーユンピュータ誕生 ! Personal Super ( ompu 「 GAIA 275AXP ■浮動小数点演算は地上最高速 0.2 乃 GF [ OPS , 290SPEOP92 , 550 PS ■充実した標準仕様が Y I , 980 , 000 64MB-dram, 2MB-cache, 1 GB-hdd 17"-monitor, 3D -9 「 0 5 , CD-ROM, etc ■水準を超えた Windows NT ネイテイプアプリケーション P 「 0- E ′ NASTRAN, Micro GDS, FEMAP, AVS, PV-WAVE, etc ■優れた開発環境 DEC FORTRAN, MS V ( + + 32 ト i Wlndows 3.5 DAYTONA, 訛 0 ′ 2 ア 5A 期 本体価格 1 13 万円 0.275GFLOPS ■無数にある Windows, り OS ソフトが動作 MS Word, MS EXCEL, DOS 50 etc ■低価格高品質なパソコン局辺機器が使える ( olo 「 - P 「 in 「 , SCS ト HDD, 72pin-DRAM Monitor, etc スーバーコンピュータの速度 スーパーコンピュータに迫る計算速度を誇るパーソナル スーパーコンピュータ GAIA275AXP が誕生しました。 0.275 GFLOPS という値は最高速のワークステーションの値を凌 いでいます。 DECchip 21064A / 275MHz GAIA 275AXP は業界最高性能の 64bit RISC CPU DECchi 21064A を 275MH , で動作させています。内部は 2 命令を冑 時実行のスーパースカラー用い、 16KB / 16KB の内部、 2MB 外部キャッシュを実装し、 128bits データバスを用いてい ます。 CPU アップグレード GAIA 275AXP は、 CPU チップセットやマザーポードの交換 によりアップグレードが可能です。 Windows NT OS, Open GL GAIA 275AXP は OS として Windows NT 3.5 DAYTONA を用い、 マルチプロセッサ・マルチスレッド・強力な I / O など、技 術計算分野に有効な多くの機能を備えています。 開発環境 言語は MS VC + + 、 DEC FORTRAN77 を提供いたします。これ らは CPU に最適化されたコードを生成し高速に動作しま す。 低価格で高性能なソフト GAIA 275AXP は DECpc AXP 機の互換機であり、高性能が求 められる用途には、 WindowsNT 版のアプリケーションが UN Ⅸ版より安く豊富に販売されています。ワープロや表 計算などのツールは、 Windows3.1 用の日本語アプリケー ションが使えます。 製造元 株式会社ダイナス 〒 222 神奈川県横浜市港北区新横浜 2-7-19 TEL: 045-473-2951 FAX. 045-473-2971 GA 275AXP シリーズの製品は、米 DEC 社によりサポートされています。 Dynus ネットワーク環境 IOBASE2 と IOBASET のポートがあり、インストール済みの 料をご請求下さい。 ン開始に際し技術者を必要としています。なお、詳細は電話連絡にて資 ソフトの開発に加え、新たに計算機システムの開発・インテグレーショ ビジネスを目指す、開発型のべンチャー企業です。これまでの数値解析 ・ダイナス ( 株 ) は科学技術計算を中心に据えた、トップレベルの垂直統合 トワークなどに深い関心をお持ちの技術者を募集します。 ・ PC/WS のハードウェア設計経験があり、かっ UNIX 、 Windows NT 、ネッ 技術者募集 が劇的に向上します。 PC/AT 互換、などにより、総合的なコストパフォーマンス 躍的向上・メンテナンスの簡素化・専門要員が不要・ ・データの共有が可能・周辺機器の統合・作業性の飛 た全ての作業を統合環境で実現します。・操作環境の統 ステション、パーソナルコンピュータを用いて行ってい GAIA275AXP は、これまでスーパーコンピュータ、ワーク 統合環境の実現 る交換修理を実施し、お客様の信頼にお応えいたします。 容易です。しかも、万一の故障時には、即時に新品によ ルな設計になっています。そのため故障に強く、保守も GAIA 275AXP は主要な機能が一枚の基板に実装されシンプ シンプル is ベスト 張が低価格で実現できます。 イプを標準装備しています。互換機なので、大規模な拡 512MB まで増設できます。ハードディスクは IGB SCSI ドラ 主メモリーは業界標準の 72pin 60ns SIMM を用いており、 豊富な周辺機器 能です。 現しています。解像度は標準で 1280X 1024 256 色表示可 グラフィックスアクセラレータで俊敏なレスポンスを実 GAIA 275AXP は PCI バスで動作する二次元と三次元の高速 グラフィックスエンジン ftp と telnet により簡単にネットワークが使えます。 本印刷物に記載されている商品名は各社の商標または登録商標です。機器の仕様は予告なく変更される場合があります。 資料請求 N 。 054

5. UNIX MAGAZINE 1994年10月号

UNiX UNIX REVIEW 誌提携 MAGAZINE 20 昔は昔、今は今 ( 5 ) Windows と UNIX( 下 ) 44 UNIX Communication Notes AMD 再説 (4) 52 インターネットの利用と仕組み NCSA httpd の設定と HTML 入門 61 BSD/386 Version 1 . 1 と Pentium 100 MHz? 67 Daemons&Dragons X ウインドウ・システムの色の管理 85 Windows NT Unicode 96 BSD/386 で楽しむ PC-UNIX ・・ BSD/386 on High Performance PC 107 UN Ⅸの道具箱 フォントのインストールと PS プリンタ 121 転ばぬ先のセキュリティ DNS 130 LittIe Language 自由気ままに TcI / Tk プログラミング 9 ) 137 ワークステーションの基礎知識 磁気テープ ( 7 ) 164 NET WORTH インターネットのバックポー ン 168 UN Ⅸ流フログラミング s ect システムコール 177 An lntroduction tO X Window System 動画の扱い CONTENTS 94 / 10 東田 学、坂下 秀 、 , 山可 吉村 中村修、杉浦一徳 g„•Dinah McNutt ・・・五十嵐久和 、吉村、 ' 伸 片山喜章、白崎博生 山本和彦 srekcah@ sra. CO. jp 齊藤明紀 M. Steven Baker 今泉貴史 ・中村眞 ・表紙デサイン・守屋ー於・目次・絵・坂田かよ

6. UNIX MAGAZINE 1994年10月号

ントをダウンロードするとメモリ不足で異常終了し 1 、と くに ' IbX のプレピューは冷汗ものであった。このときに 得た xdm による X 端末の管理、 X 端末に負担をかけない rIbX プレビューアの設定、端末側妾続が切れてしまっ た pty , 、、の再接続などの知識も、現在もなお役に立って いる。 友へ引っ越してからは、 1 人 1 台のワークステーショ ンなど夢のまた夢という貧乏な学利へ所属したため、 X 端 末の入手にすら苦労する羽目になった。 とりあえす、個人で所有する PC て論文を書ける環竟を 構築することを考えた。まずは、 Emacs を樹直し、、 プレピューアの移植と続け、 PC によるネットワーク環竟 を構築してプリンタをマウントした。そのときの知識がこ の原稿を書くときにたいへん役立った。 そうこうするうちに MS-Windows 3.1 がリリースさ CPU と Windows アクセラレータがどんどん高速に なり、 PC の処理能力は下手なワークステーションを凌ぐ ようになった。さらに、個人所有でも 17 インチが当り前 というほど大型モニターか普及し、 Windows ( 対合好の X サーバーのプラットホームとなった。 10 万円程度の追加 投資で、竟が PC で使えるようになるのである。 不劫ゞこれまで利用した Windows の X サ→ヾー・プロ グラムは、 ・ HCL eXceed/W (Humming Bird) ・ Reflection X (Walker Richer & Quinn) ・ PC-Xware (NCD) 、 ChameIeon/X (NetManage) などである 2 。どれも、 ・ X11R5 べースでフォントサーバーや XDMCP に対応 ・ 32bit Windows Extender による実装 ・ Windows Sockets API 1.1 対応 ・ローカル・ウインドウマネージャー機能 という条件を満たしたものである。 なかでも、 Windows Sockets API に対応しているこ とカ寸条件だった。というのも、それまで互換性のない TCP/IP スタックのために使いたいアプリケーションが 1 おおもとの MIT サンプル X サーバーは本当にそういうコーディングに なっていな 2 DEC eXcursion (). S. も使ってみたが、なんとマルチバイト・ フォントに対応していなのでゴミ箱 , 、 : 行した UNIX MAGAZINE 1994.10 昔は昔、今は今■目的指向の環境構築に向けて一 5 対応していないといわドライバを・ f 可隻も購入しなおし た苦い経験があるからだ。 Microsoft は Windows NT で WinSock を標準て採用した 3 。ちなみに WinSock は Windows 4 ( コードネーム Chicago) からは標準機能に なるようだ。 フォントサーバーへの対応は、 X 端末ごとにフォント・ フォーマットが異なっていたり、アプリケーションごと に独自のフォントを要求されるという、インストールに苦 労させられた経験から学んだ重要な条件である。 XDMCP (X Display Manager Control Protocol) への対応によって、アクセス制御をイモられる。 X の認証 機能を面倒に思う私にとっては、多くのホストを渡り歩い てイ乍業する場合には欠カない。ローカル・ウインドウマ ネージャー機能は、 X のウインドウを Windows のウィ ンドウとして扱うことができる。この機能があると、 X の ルート・ウインドウが Windows のルート・ウインドウ へ表示されるため、画面を有効に活用できるようになる。 気になるパフォーマンスだが、私の周りでの最咼の値 は Pentium 60MHz のマシン 4 で記録した Reflection X の 85 , 236 xstones である (Chameleon 3.11J で使 用 ) 。周辺にあるワークステーションでの最高値が Sun の SPARCstation 10 Model 30 (CPU は SuperSPARC で 36MHz 、ビデオ : GX (CG6) ) で SunOS4.1.3 の OpenWindows 3.0 を使った 92 499 xstones なので、 かなりいい線をいっている。ちなみに、私のマシンは、 CPU: 486DX2 / 66MHz 、ビデオ : S3 86C924 (8bit カラー、 1 , 024 x 768 ) 、メモリ : 24MB 、キャッシュ : 256KB 、 Ethernet カード : 3C509 (ISA) という構成 だが、 Reflection X 4.00 カゞ 41 157 xstones 、 0.6574 Xmark 、 PC-Xware 1.03 が 42 092 xstones 、 0.8014 Xmark 、 HCL eXceed/W 3.3.2 が 22 , 135 xstones という値である ( いすれも ChameIeon 4.01 で使用。 xbench の言岩田は表 1 を参照 ) 。 今回は私が気に入っている 2 つのサーバーを紹介す る。アプリケーションとしてのデザインが優れている 「 Reflection X 」と、 X 端末としての機能が優れている 3 Reflection X は、 NT の 16bit Windows サプシステムでも重加、 たのでたいへん重宝しな 4 おもなキ枷友は、ピテオ : S3 86C928 (8bit カラー、 1 , 024 x 768 ) 、 メモリ : 32MB 、キャッシュ : 512KB 、 Ethernet カード : 3C579 (EISA) である。 21

7. UNIX MAGAZINE 1994年10月号

連載 /Windows NT—O 図 1 Unicode の文字コード俿リ当て ヘブライ文字など数式記号など ASC ⅱ アラビア文字 句読記号 漢字などの表意文字 ラテンインド諸語など ギリシャ キリル文字など 日本語 ( かな ) ハングルなど 互換領域 ( 全角英字など ) 外字用 将来の使用のために予約されている領域 こク溷は、文字コードの割当てを大まかに示したものである。料田は、参考文献 [ 1 , 2 ] などを参照していただきたい。 型は BYTE(unsigned char) を用いる。このような定 義が用意されているのは、 near ポインタと far ポインタ の区別が必要な 16 ピット竟の制限にもよるが、 16 ビ ット環竟から 32 / 64 ピットを、、の移行をスムーズにす るためでもある。こついった機構は、 Unicode への移 行でも利用されている。 TCHAR というデータ型も、関 数名と同様に UNICODE マクロ定義の有無で CHAR 、 WCHAR(unsigned short) へと切り替わる。 C コンパイラ自体は、 SBCS と DBCS のソースしか処 理できない。しかし、テキストのリテラルは、 L"abcd'"' などと表記すれは・ WCHAR の定数あるいは列となる。こ れにも TEXT() マクロがあり、 UNICODE マクロの定 義て切り替えられる。 Windows アプリケーションではロ ーカライズの倚喋を減らすため、プログラム中にメッセー ジ、メニュー項目などの文字列は埋め込まず、リソースか らロードすることになっている。 このはか Unicode から SBCS や DBCS へ、あるい はその逆の変換をおこなうためのルーチンが用意されてい る。これらは、引数として SBCS と DBCS のコードペー ジを指定する。変換できるのはあらかじめシステムにイン ストールされた数不鶤頁のコードベージだけだが、 nls とい うファイルをインストールすれば、変換可能なコードベー ジを増やすことができる。 いうまでもなく文字の表示にはフォントが必要だが、 Unicode がすべて表示できるフォントか驃準で付いてく るわけではない。しかし、 TrueType 形式のフォントデー タは Unicode べースてオ内されているため、システムに インストール済みの言語以外の表小に必要なフォントのイ ンストールも可能である。事実、米国版の Windows NT に日本版に添付されるフォントをインストールすれば日本 語も表示できる。 86 Unicode 化 Unicode 対施の Windows アプリケーションの作成は、 次のような手順で進める。 1. 文字を格納するデータ型をすべて CHAR から TCHAR に変更する ( ポインタについても同椥 2. リテラル文字列を TEXT マクロで囲む。 3. ライプラリ、 API などは U ⅲ code 対応のものを使う。 4. 文字列の文字数とバイト数カ立一致していると仮定してい る点を修正する。 5. そのはかに文字が 256 不鶤頁しかないと仮定している部 分を修正する。 6. 文字コード変換ルーチンを組み込む。 gawk の移植でも、 1 ~ 2 のステップについてはとくに 変わることはない。いすれにしてもこの部分は、ある程度 機オ勺におこなうことができる。まず、 Windows NT 対 応の gawk ( 英語のソースを入手する。 なお、 gawk ではバイトをオ内するデータ型と文字を格 納するデータ型が別に定義されているわけではない。した がって本来なら、いったん TCHAR に変更すべきもの とそのまま char に変更すべきものに分ける必要がある のかもしれない。しかし、この作業は煩雑なのですべて TCHAR に変えてしまう。 gawk では unsigned char の データも使われているが、これを unsigned TCHAR と すると、 (TCHAR の実体が unsigned short なので ) 結 果的に unsigned unsigned short という妙なことになっ てコンノヾイルエラーになる。 unsigned char を使ってい る部分の多くは BYTE に置き換えなければならないもの のようだが、詳細か不明なので、気にせず unsigned char をひとまとめにして TCHAR に置き換えてしまう。 UNIX MAGAZINE 1994 ユ 0

8. UNIX MAGAZINE 1994年10月号

連載 /Windows NT else return —read()d , buf, 1 ) ; #undef fwrite int win32—fputc (TCHAR c , if (win32—fwrite(&c, return C ; else return EOF ; ー⑨ sizeof (TCHAR) , FILE *stream) 1 , stream)> 0 ) SIze_t count , size—t win32—fwrite(void *buf , size—t size, BYTE *mbbuf ; alloca(size*count) ; mbbuf if (cp—vrite > 0 ) { int mblen; int numWritten; FILE *stream) mblen = WideCharToMu1tiByte (cp-write , 0 , buf , count*size/sizeof (TCHAR) , mbbuf , size*count , NULL, NULL) ; if ( (count > 0 ) & & mblen = 0 ) fprintf (stderr , TEXT ( "WideCharToMu1tiByte failed %x\n" ) , GetLastError ( ) ) ; return numWritten/2; / * should be less than count * / if (numWritten く mblen) numWritten = fwrite(mbbuf , 1 , mblen, stream) ; else return count ; return fwrite (buf , #endif LPTSTR environ [ 1000 ] ; win32set—args (argc , argv) int *argc ; TCHAR ***argv ; LPTSTR env , cmd; TCHAR *e ; int i ; SIZe count , stream) ; / * what about OEMCP environment string? * / env = GetEnvironmentStrings ( ) ; for(i = 0 , e = env; *e; 十十 , e 十十 ) { vhile(*e) e + 十 ; #ifdef UNICODE if (cp-arg > 0 ) { char *mb_cmd ; 94 UNIX MAGAZINE 1994 ユ 0

9. UNIX MAGAZINE 1994年10月号

図 1 Windows でも UNIX でも Lotus 1-2-3 ) ・トンデト , ア 方仭旧デつ 0 - 卸表示設定 : 0 第チルにアン門ー観ア出 : 要 lh ・ r を肝を料「 0 ーⅱい . 00 you 「日 y ユ毒三トーを h レ 3 をを he ー allO け 0 「 n) は az いユ今 ロータス互検メニュー 7tazt ) 観 tr ディスクからファイルをびし . 力しントファイルにします s 保ロ含 x 一 ! 家存時 L—E け収出し Oi ・イいト新飛 0 オープン一 : 、 : ・をド鳶 L - 人件響 支私利を 貨借料 第宣伝費 3 月 な月 ドな - 物舜 ー G 『竃輸ーノッイル川編 G'J ラフ D データド岱「 、物ー 3 にロ〉ソーノン一トしついて ー・↓次のワークン - トにありよす . ( 位 1 円 ) 。計 : 新 1 卵価 予算は Windows 上の Lotus 1-2 ー 3 て管理する。 使いやすく機能も豊富なので、 Windows 上の 1 ー 2 ー 3 を 愛用しています。 ・ 1-2 ー 3 のファイルは UNIX 上にあるので、 UNIX 上の 1 ー 2-3 からも参照できる。 プリンタは、ネットワークを介して Sun の NeWS- print を利用する。 今度は、 Windows 上の描画ツールに羽馘してみようか と思っています。 前回からの続き 則回は、 MS-DOS と Windows をインストールし、ノ、 ードウェアもなんとか動くことを石忍したところまで書き ました。そのなかで、 UNIX MAGAZINE 1994.10 とすると、 狭になったのて新たにディスクを買ってきて入れ替えよう いなくてはなりません。したがって、ハードディスクが手 6.2 / V をインストールする前になんらかの DOS が入って ストールについて補足です。これは upgrade 版ですから、 それともう 1 つ、 MS-DOS 6.2 / V upgrade 版のイン 動きました。 DOS J6.3 / V との組合で試してみたところ、ちゃんと という意味のことを書きました。その後最新版の PC- わせるとおかしくなる」 「 # 9 のドライバは IBM 版 PC-DOS J6.1 / V と組み合 昔は昔、今は今■目的指向の環境構築に向けて一 5 1. 旧い MS-DOS 5.0 / V を入れる 2. さらに 6.2 / V を入れる とよいようです。 ということカ吩かりました。具イ勺には、次のようにする おかなくても、 6.2 / V upgrade 版がインストールできる 機能を使えは、あらかしめ別の DOS をインストールして インストールされているかどうかをチェックしない。この プション付きて起動けると、ハードディスク上に DOS が 6.2 / V のインストーノレ・コマンド SETUP. EXE を /U オ 事などをあれこオ売んでみました。すると、 ょっと不審に思ったので、マニュアルや解説書、雑誌の記 目に陥り、 2 回もこの面倒なことをしてしまいました ) 。ち ドライバのおかげで DOS や Windows を入れ替える羽 という面倒なことをしなくてはなりません ( 私は、 # 9 の これで、 6.2 / V は簡単かっ無事にインストールできる 4. このあと、 SETUP /U を実行する。 重丿けるのて注意が必要 ) 。 を整える ( ただし、 FDISK コマンドを実行すると再起 マンドや FORMAT コマンドでハードディスクの工竟 のシステムを入れる。このとき、必要なら FDISK コ 3. SYS コマンドを使って、ハードディスクに MS-DOS し、 COMMAND.COM に戻る。 2. インストール・プログラムか起動されたらただちに終了 起動ける。 1.6.2 / V upgrade 版のインストール・ディスクで PC を 41 トールされていないので、 Windows 用のユーティリティ ックを使ってくれるわけではなく、「 Windows がインス ところが、インストール・プログラムは高等なテクニ と思い、インストールするように孑嗣ミしました。 トール・プログラムはようできてるからなんとかなるやろ " ストールしとこ。まあ、 DOS とか、 Vindows のインス せやけど、あとで入れるガ去が分からへんからここはイン W ⅲ dows 用のユーティリティなんておかしいなあ・・ た。初心者の私は、、、 DOS を入れようとしているときに ユーティリティをインストールするかどうかを訊かれまし MS-DOS のインストールの途中で、 Windows 対応の 間知らすだったのです。 ・・・・・・かに思えたのですが、しつはまだ世 ようになった、

10. UNIX MAGAZINE 1994年10月号

連載 /Windows NT—O は必要のなかった windows . h に TEXT マクロや TCHAR マクロが含まれているため、これをすべての ソースにインクルードする必要がある。 windows . h は、 Windows のすべての API 定義をインクルードしている ため、コンパイルに必要な日判りが大幅に増えてしまうかや むをえない。大量のマクロや定数、関数プロトタイプか定 義されるために名前の衝突か起きてもおかしくはないのだ が、 gawk では問題が生しなかった。 C Run Time 3 ステッブ目は、ライプラリの切替えである。 Win32 API 自体には、 TextOutA と TextOutW のようにあ らかしめ Unicode 版と SBCS/DBCS 版が用意されて いるが、 C のランタイム・ライプラリでは若干事情が異 なる。入出力、ストリンク髞作などに使われる多くの関数 群に手を加えなければならないが、システム側の対応の有 無 Unicode 化の必要の有無などによっていくっかのグ ループに分けて考えるべきである。 文字列操作やファイル操作などの関数は、ウインドウ べースのアプリケーションでも必要となるので、 Win32 API のコアの部分にも用意されている。これらを使うか ぎり、 UNICODE マクロを定義するだけでとくに問題 はない。しかし、これはあくまでウインドウべースのアフ リケーションのために用意されたものであり、 printf に あたるものはなく sprintf に相当する wsprintf があると いった程度だ。 scanf もないし、文字列操作関数も lstr- cat 、 lstrcmp 、 lstrcmpi 、 lstrcpy 、 lstrlen の 5 不頁し かない。 gawk では、 strdup 、 strcat 、 strchr 、 strlwr 、 strnicmp 、 strncmp 、 strncpy 、 strstr など多くの関数 カイ吏われている。 C のランタイム関数としては、これらの文字列処理闕数 も用意されてはいるが、こちらは IstrIenA と lstrlenW などの規則が通用せず、 strcat が wcscat のような独自の 名前になっている。 UNICODE マクロを定義すれば自動 的に切り替わるような仕掛けになっていればいいのだが、 そういうサホートは用意されていない。 ランタイムの用意するインクルード・ファイル tch 矼 . 五 —ftprintf fprintf —ftprintf 88 f wpr int f などのマクロ定義が用意されている。しかし、 fopen 、 fgets 、 getchar などのストリーム I/O ははは、全滅である。 そこで、大量の #define が必要になる。調べてみたと ころ 70 行くらいある。なかには、 #define atof (s) wcstod((s) , NULL) といった多少作業を要するものもあって面倒である。名 前からは窺い知ることができないが、 atof も wcstod も double を返す関数である。しつは、 wcstod をよく調べ すにわざわざ float にキャストし、トラブルを招いてし まった。これでも、 gawk では fread や fgetc などを使っ ていないので多少は楽ができる。 最後まて残ったのが open である。これには Unicode 版がない。 gawk ではプログラム中からファイル名カ甘旨定 できるので、 Unicode が使えないと具合が悪い。仕方がな いので、リスト 2 のように Unicode 対応の open を作っ てみた。 すこし解説しておくと、 CreateFiIe や SetFilePointer はⅥⅱ n32 API で定義される関数で、Ⅵⅲ 32 API で 資源を参照するため汎用に使われる HANDLE を返した り操作したりする。この HANDLE は、 ReadFile な ど W ⅲ 32 API の関数でしか操作できない。そこで、 C ランタイムカ甘是供する -open-osfhandle によって、この HANDLE を read などてイ吏える FILE * 型のものに変換 する。 Win32 でのエラー情報を perror に伝えるカ 1 去が 分からなかったので、 open に失敗したときのエラーメッ セージの内容は正しいものにはならない。 ここまでの作業で、 UNICODE を定義してコンパイ ル、リンクできるようにはなる。もちろん、実行するとた だちに異常終了する exe しかできない。 メモリ管理 4 ステッブ目は、文字列の文字数とバイト数が一致する と仮定している部分の修正である。たとえば、次のような コードである ( 実際のコードとはすこし違う ) 。 s->stlen=strlen(sp) ; s—>stptr=(TCHAR *)malloc(s—>stlen + 2 ) ; memcpy(s—>stptr, sp, (s—>stlen + 1) ) ; UNIX MAGAZINE 1994.10