-3 - みる会図書館


検索対象: 月刊 C MAGAZINE 1992年9月号
194件見つかりました。

1. 月刊 C MAGAZINE 1992年9月号

五ロ 用 応 C の道具箱 TabIe 1 凵 PS コマンドー覧 ( べクタモード ) コマンドの内容 0 GI グラフィックセット指定 ( * ) G2 グラフィックセット指定国 G3 グラフィックセット指定 ( * ) 2. 印字属性設定 文字回転指定 ( * ) 文字高指定 ( * ) 文字高単位指定 文字幅拡大指定 ( * ) 文字印刷方向指定 ( * ) 文字間隔指定 ( * ) 文字属性レベル指定 ( * ) 飾り文字属性指定 ( 利 3. 文字印字 文字印刷開始 ( * ) 文字印刷連続 ( * ) 制御文字印刷連続 ( * ) 文字印刷制御 イメージ領域確保 イメージ描画 ( * ) 凵 PS Ⅲのみ Fig. 2 整数の記述方法 ( 参考文献 [ 3 ] ) 上位バイト 2 2 っム コマンド 初期化制御 1 . コマンドモード移行 べクタモード移行 テキストモード移行 2. 文字セットリスト宣言 フォントリスト宣言 ( * ) グラフィックセットリスト宣言 ( * ) 3. ページオリエンテーション設定 ページオリエンテーション設定 4. ピクチャ開始 / 終了 ピクチャ開始 座標単位設定 描画開始 ピクチャ終了 図形描画制御 描画領域設定 原点移動 クリッピング領域の設定 クリッピング 描画論理設定 図形描画 1 . 図形属性設定 線種指定 線幅指定 線属性指定 線接続指定 線端形状指定 マーカタイプ指定 マーカサイズ指定 塗りつぶしノヾターン指定 矩形角丸め指定 グレイスケール指定 スクリーン指定 2. ノヾターン登録 線ノヾターン登録 マーカノヾターン登録 塗りつふしノヾターン登録 3. 図形描画 マーカ描画 折れ線描画 矩形描画 多角形描画 1 多角形描画 2 多角形描画 3 円描画 円弧描画 1 円弧描画 2 楕円描画 楕円弧描画 四分楕円描画 閉領域塗りつぶし 文字印刷制御 1 . 文字セット選択 GO フォント指定国 G 1 フォント指定国 G2 フォント指定国 G3 フォント指定国 GO グラフィックセット指定 2 2 2 2 旧 2 2 2 2 旧 CSI p 旧 2 @ 區 2 2 2 # 旧 2 1 0 旧 2 $ 旧 2 % 旧 2 P 旧 2 0 旧 2 ( 旧 2 * 旧 2 } H 旧 2 旧 2 最下位バイト 十 0 0 1 S 4 ヒット有効 符号ビット b23 ・ + 0 1 + 0 1 6 ビット有効 6 ビット有効 6 ピット有効 2 2 2 2 2 2 2 2 ー O LL w ー 上位バイトの識別子 最下位バイトの識別子 Fig. 3 整数の絶対値が 1 5 ( = 24 ー 1 ) 以下 : 1 バイト 整数の絶対値が 1023 ( = 21 。ー 1 ) 以下 : 2 バイト 整数の絶対値が 65535 ( = 216 ー 1 ) 以下 : 3 バイト 整数の絶対値が 65535 ( = 216 ー 1 ) 以上 : 4 バイト以上 2 っ 4 2 2 2 2 a@o Fig. 4 絶対値が 15 以下の場合 ( 参考文献 [ 3 ] より ) b7 b6 b 5 b4 b3 b2 b 1 bO 0 0 1 S x x x x データビット 符号 1 : 正 ( + ) 識別子最下位バイトであることを示す 0 旧 2 1 旧 2 っ 4 2 2 ワ」 2 2 2 っ 4 2 っ ~ ( 0 ー 6 6 7 ・・ 8 9 Fig. 5 絶対値が 16 以上の場合 ( 参考文献 [ 3 ] より ) b7 b6 b5 b4 b3 b2 b 1 bO b7 b6 b5 b4 b3 b2 b 1 bO テータビット 符号 1 : 正 ( 十 ) 0 : 負 ( ー ) 最下位バイトであること 識別子 を示す テータヒット T 旧 2 m 旧 2 n 旧 2 0 旧 2 旧 2 上位バイトであること 識別子 を示す 0 応用 C 言語 129

2. 月刊 C MAGAZINE 1992年9月号

ー纛朝ル郵 / 次代のアヾンテージ最新の技術をあなたに / lntel Workshop , ー師 rs ・ MS Windows Prog 「 amming Envi 「 onment ・ i8086 基本 16 ピット MPIJ ( 5 日間 ) : 15 万円 ( 5 日間 ) : 18 万円 ・ i80386 / 486 アーキテクャ ( 2 日間 ) : 8.8 万円 ・ MS Windows Applications P 「 og 「 amming ・ i80386 / 486 システム S/W 設計 ( 5 日間 ) : 22 万円 ( 5 日間 ) : 18 万円 ・ i860 ( 日旧 C CPIJ) ( 5 日間 ) : 22 万円 ・ MS OS / 2 P 「 og 「 amming Environment ・ i960 ファミリ組込プロセッサ ( 日旧 C ) ( 5 日間 ) : 22 万円 ( 4 日間 ) : 15 万円 ・ D Ⅵアプリケーション開発 To 団 ( 3 日間 ) : 15 万円 ・ MS OS / 2 Applications P 「 og 「 amming ( 5 日間 ) : 18 万円 lntel Wo 「 kshop ホットライン ・ MS OS / 2 PM Programming Envi 「 onment ( 5 日間 ) : 18 万円 TEL : 03 ( 5461 ) 8220 ( タイヤルイン ) ・ MS OS / 2 PM Applications P 「 og 「 amming ( 5 日間 ) : 18 万円 ( 4 日間 ) : 15 万円 ・ MS OS / 2 Device D 「 ive 「 s ・ MS LAN Manage 「 P 「 og 「 amming Envi 「 onment ( 4 日間 ) : 15 万円 ・ MS LAN Manager Applications P 「 og 「 amming ( 5 日間 ) : 18 万円 UN Ⅸセミナ M 砺ⅳ師取 C0urse ( 1 日間 ) : ・ IJN Ⅸ入門 ・ MS Windows 入門 3 万円 ・ IJN Ⅸシステム管理者 ( 2 日間 ) : ・ MS OS / 2 入門 6 万円 ( 1 日間 ) : ・ IJNIX/C 入門 ・ MS LAN Manage 「入門 3 万円 ・ MS LAN Manage 「 Administ 「 ation—(3 日間 ) : ・ IJN Ⅸシステムコール 9 万円 ・ X-WINDOW 入門 ( 2 日間 ) : ・ C 言語入門 6 万円 ・ X - WINDOW プログラミング ( 3 日間 ) : ・ C 言語応用 9 万円 ・ X - TO ・ Quick BASIC 初級 ( 2 日間 ) : 6 万円 ・ C-Shell 入門 ・ Quick BASIC 中級 ( 3 日間 ) : 9 万円 ・ C - She プログラミング ( 1 日間 ) : 3.5 万円 ・ Visual 日 A C 入門 ・ Visual BASIC 初級 ( 2 日間 ) : ・ Emacs 入門 7 万円 ( 1 日間 ) : ・ MS Excel 入門 3 万円 ( 2 日間 ) : ・ MS Excel 初級 6 万円 ・ MS Excel (Excel 十 Word) ( 2 日間 ) : 6 万円 ・ MS Excel(SoIve 「 ) ( 2 日間 ) : 6 万円 ( 1 日間 ) : ・ MS Excel MAC 日 0 初級 3 万円 ( 2 日間 ) : ・ MS Excel MAC 日 0 テべロッノヾ 7 万円 ・ MS WO 「 d 入門 ( 1 日間 ) : 3 万円 ・ MS WO 「 d 初級 ( 2 日間 ) . 6 万円 TEL: 03 ( 5461 ) 8296 富士ソフトウェア株式会社 品川教育センター FAX: 03 ( 5461 ) 8469 〒 8 東京都港区港南 2 ーに一 27 イケダヤ品川ビル く資料請求番号 176 〉 ( 1 日間 ) : 3 万円 ( 3 日間 ) : 9 万円 ( 3 日間 ) : 9 万円 ( 3 日間 ) : 3 万円 ( 1 日間 ) : 9 万円 ( 3 日間 ) : 9 万円 ( 3 日間 ) : 9 万円 ( 1 日間 ) : 3 万円 ( 3 日間 ) : 9 万円 ( 1 日間 ) : 3 万円 ー各セミナい人一台のマシン環境で御提供しております。 ・実習中心のカリキュラムを設定しております ■金額は消費税を含んでおりません。 ・お問い合せは

3. 月刊 C MAGAZINE 1992年9月号

ワイント プロクラミング TabIe 2 今回使用したファンクションの設定方法 (lNT21h ) ファンクション 3CH : 八ンドルを使うファイルの作成 ファイルを新規に作成する 機能 設定 Ox3C AH DS : DX = ノヾス名のポインタ ファイルの属性 CX ・キャリーフラグがセットされた場合 戻り値 工ラー発生 ( 詳細 ) AX = 03H : 無効なノヾス 04H : オープン数が多すきる 05H : アクセスできない ・キャリーフラグがセットされない場合 正常終了 AX = ファイル八ンドル ファンクション 3DH : 八ンドルを使うファイルのオープン 機能ファイルをオープンする 設定 AH 0X3 D ファイルアクセスコントロールコード AL = ノヾス名のホインタ DS : DX 戻り値 ・キャリーフラグがセットされた場合 工ラー発生 ( 詳細 ) AX = 01H : アクセスできない 02 H : ファイルなし = 03H : 無効なノヾス = 04H : オープン数が多すきる 05H : アクセスできない OCH : アクセスコード設定工ラー ・キャリーフラグがセットされない場合 正常終了 ファンクション 3EH : 八ンドルを使うファイルのクローズ ファイルをクローズする 機能 設定 AH = Ox3E BX = ファイル八ンドル 戻り値 ・キャリーフラグがセットされた場合 工ラー発生 0 戻り値 ・キャリーフラグがセットされた場合 工ラー発生 ( 詳細 ) AX = 05H : アクセスできない = 06H : 無効な八ンドル ・キャリーフラグがセットされない場合 正常終了 AX = 読み出されたノヾイト数 ファンクション 40H : ファイルの書き込み 機能ファイルへ書き込みを行う 設定 AH 0X40 バッフアの位置 DS : DX = 書き込むバイト数 CX ファイル八ンドル BX 戻り値 ・キャリーフラグがセットされた場合 工ラー発生 ( 詳細 ) AX = 05H : アクセスできない = 06H : 無効な八ンドル ・キャリーフラグがセットされない場合 正常終了 AX = 書き込まれたバイト数 ファンクション 41H : ファイルの削除 機能 ファイルを削除する 設定 AH 0X41 DS : DX = ノヾス名のポインタ 戻り値 ・キャリーフラグがセットされた場合 工ラー発生 ( 詳細 ) AX = 02 H : 無効なファイル 05H : アクセスできない ・キャリーフラグかセットされない場合 正常終了 ファンクション 42H : ファイルポインタの移動 機能 ファイルの読み書き開始位置を移動する 設定 0X42 AH ( 詳細 ) = 移動するバイト数 CX : DX = 移動開始位置 AX = 06H : 無効な八ンドル AL ファイル八ンドル BX ・キャリーフラグがセットされない場合 戻り値 ・キャリーフラグがセットされた場合 正常終了 工ラー発生 ファンクション 3FH : ファイルの読み出し ( 詳細 ) AX = 01 H : 無効なファンクション 機能ファイルの読み出しを行う = 06H : 無効な八ンドル 設定 AH 0X3 F ・キャリーフラグがセットされない場合 ーバッフアの位置 DS : DX 正常終了 読み出すバイト数 CX DX : AX = 移動後のポインタ ファイル八ンドル BX ファイルの作成 て、は , DOS 叩 en ( ) 関数のみ使用していませ : file open( ) はずて、す。 への書き込み : file write( ) ・ラージモデル用に変更する場合 んが , これもテスト済みなのて、問題なく動 からの読み込み : file read( ) 作します。 DS : DX のポインタの設定を変更します。 のクローズ : file close( ) 例 ) regs. x. dx FP OFF(fname) ・ ーーーの削除 : file delete( ) segs. ds FP SEG(fname) ; を行う 5 個の関数とそれを制御するメイン関 ・ Lattice C に書き換える場合 数からて、きています。 cflag が regs の中にないのて、 , 次のように ファイルへの読み書きて、は , DOSlseek ( ) このテストプログラムは , MS-C のスモー キャリーフラグを取得します。 関数により書き込み開始位置や読み込み開 ルモデル用に記述しました。 intdos (&regs, &regs) ・ cflag 始位置を自由に移動させてからそれぞれの そのほかのコンパイラやモデルに変更し ちなみに私は DOSIO ℃を DOSIO. ASM (M このテストモジューノレ たい場合には , 次の点を書き換えればよい ASM 用 ) に書き直して使用しています。 処理をしています。 1992 9 140 C MAGAZINE おまけ

4. 月刊 C MAGAZINE 1992年9月号

特集。 Borland 3 』研究 もっとも , そんなふうに作られたプログ るわけて、はなくて , TTYi•バイス関連 ( とく す。コンパイルエラーが発生したときなど , に stdin/stdout) がエミュレートされるのが そのエラーメッセージをマウスて選択して , ラムが , はたしてまともな Windows アプリ 売りて、す。おなじみ「 He110 world! 」 (List ケーションとして通用するかというと , そ スピードバーの「 ? 」アイコンをクリックす 27 ) が , そっくりそのまま Windows て、動作し うは問屋がおろしません。 ると , そのエラーに対するヘルプを見るこ てくれるわけて、す (Fig. 22 ) 。 Windows プロ しかし , デバッグ支援に使うような些細 とがて、きます。 グラムを学ばうとすると , 最初に直面する なプログラムて、あれば , 何もぐちゃぐちゃ まさにヘルプづくして、す。顕著な例て、い のがド Hello world ! ' ′だけて、 80 数行」という と Windows 特有のコーディングに悩まされ うと , 工ラーメッセージを表示するダイア ショッキングな事実がありますが , これな ることもありません。簡単さかげんて、 Visu ログに , Ok ボタンと Help ボタンがあったり らば百も承知な世界て、プログラミングて、き aIBasic などが話題を呼んて、いますが , とに します。 HeIp をクリックしたところて、 , 「 0 かく「簡単」さを競うのて、あれば , EasyWin k を選択してメッセージ・ポックスをクロー てしまいます。 WinMain( ) 関数がないと , 自動的に Eas だって相当いい線をいっているといえるて、 ズしてください」なんていうへルプが表示さ yWin がリンクされます。簡単な DOS アプリ れるだけなのて、すが・・・ こまて、くると , て、あったら , 1 行も手を加えることなく Win ちょっと過剰サービスめいてきますが , ま 充実ヘルプシステム d 。 ws に「移植」て、きてしまいます。また , go あ , 悪いことて、はないて、しよう。 toxy( ) などの一部 conio 関数もサポートされ ひとっ間題があるとすれば , 「アクテイプ ているのて、 , そこそこのことはて、きます。 ヘルプファイル」の問題て、す ( Fig. 23 ) 。 TC TCW のヘルプシステムは充実していま Fig. 18 MS-Windows Ver. 3.1 の組み込みダイアログ Fig. 17 ダイアログボックス ( Fig. 8 と比べてほしい ) 0 第、物・を Open Ⅱⅳ日 CtO 「 i 日 S : c : 、れ 31 wi れ 31 0 syste m File 製日 m 日 . ne 0 ー kS. 物「 i p れ te 「 3. W 「 i readme. wri SYS ーれ物 OK 、 Dnyes. List FiIes of p 日 : 回 c: ibmdos—j5v ま lwrite 「 lles (A WRI) 枚気第を蜘リ 20 オプジェクトプラウザクラスメンバー覧表示 Fig. ( メンバをクリックすると型を ( 関数の場合はプロトタイプ宣言ふうに ) 見ることができる ) T ^ 00 ⅱ 0 前 Qn nCmdShow MainVlndow HAccTable KBHandIerWnd ModuIe lTAppIication(char far*,un ÄAp lication() CanClose() Fig. 19 オプジェクトプラウザのクラスツリー表示 ( 「文書」ふうのアイコンで . そのクラスが宣言されているソースを参照することができる ) MDlaient 日 i 旧ロ 0 W ⅲ dow i れ dO MDIFrame 日 Dia 厄 g i れ do しけいいロは日 BMPFileDiaIog ialog itScroIIApp Ap 可 ica 転 0 れ od ⅵ・ れ e 「 C 引厄 ion TB itScroI lAp p Object 8tractArray ShouldDelete 0P3 日 am 3 セ 60n1 iOP8 セ 60E 0 ゆ 8 i ゆ 3 セ eam ipstream pb 3 ・ ps 9 住 m 特集 Borland C 十十 Ver. 3.0 研究 53

5. 月刊 C MAGAZINE 1992年9月号

ist DDPT にアクセスするための定義 ンの ROM-BIOS が使用しているデータ領域 の一種て、 , ここには FD の物理的なパラメー タが格納されています。同じように HDD の 物理的なパラメータを格納してあるテープ ルもあります。 とにより DDPT をアクセスすることがて、き Gap length (Format) 先ほど出てきたセクタサイズ , 1 トラック offset 07h ます。 DDPT の具体的な値を TabIe 2 に示 セクタとセクタの間のギャップの長さ ( バ あたりのセクタ数などの情報はすべてこ , イト数 ) を定義します。これは FD の物理的な します。この中て、今回関係してくる値につ に格納されており , BIOS が実際にリ フォーマットにより決まる値て、す。詳しい ライト・フォーマットする際に必ず参照さ いて簡単に説明します。 内容は省略します。詳細を知りたい方は FD このパラメータを書き Sector length れます。つまり , offset 03h 換えれば標準の 512 バイト / セクタ以外の , セクタあたりのバイト数を定義します。 コントローラチップのマニュアルをご覧く ださい。最後の 256 / 2HC , 1024 / 2HC のふた たとえば日本形式 2HD の 1024 バイト / セクタ 256 バイト / セクタの場合は 1 に , 512 の場合 て、も懐かしの CP / M の 256 バイト / セクタて、も つは私が調べたものて、 , DOS が標準て、持っ は 2 に , 1024 の場合は 3 にします。 Sectors / Track 好きなフォーマットの FD が読めます。 ているパラメータて、はありません。日本形 offset 04h トラックあたりのセクタ数を定義します。 このテープルが格納されている位置は固 式 2HD / FD を読み書きするためには , この 2D ( 360K バイト ) / 2DD ( 720K バイト ) の場合 1024 / 2HC の値に DDPT を書き換えます。 定て、はありません。 0000 : 0078h からの 4 バ は 9 , 日本形式 2HD ( 1 .25M バイト ) の場合は イトの値が DDPT に対するポインタになっ ドライプタイプの設定 8 , 米国 2HC ( 1.21M バイト ) の場合は 15 , 米 ており , そのポインタの示す番地から 11 バ 次に , PC/AT マシンの「ドライプタイプ 国 2HD ( 1.44M バイト ) の場合は 18 て、す。 イトが実際の DDPT て、す。つまり MS-DOS 設定」という BIOS コール (int 13h ) を行い Gap length (R/W) の C 言語て、すと ,List 1 のように定義するこ offset 05h TabIe 4 引0S コール (int 13h ) コマンド 02h の仕様 TabIe 3 引0S コール (int 13h ) コマンド 17h の仕様 command 02h read sectors Set D 「 ive type command 1 7h 1 uns igned char —far *ddpt ; *(unsigned char —far * -far * ) 0X00000078L ; ddpt AH ニ 1 7h input AL : Drive type 01 h 360KByte Drive 02h : 48- T 円 media in 1 .2M D rive 96 ー T 円 media in 1 .2M 03h 04h 1 35 ー T 円 media DL ニ Drive select ( 00h , 01h ) if CF : 0 , AH : 00h ( success ) ifCF = 1 , AH ニ 01h (Badcommand) input AH ニ 02h AL : number Of sector tO read ES . BX ニ buffer address CH ニ Track CL : Starting Sector DH : head ( 0 0 「 1 ) DL ニ D 「 ive select ( 00h , 01 h ) if CF : 0 , AH : 00h ( success ) if CF : 1 , AH : Status output output TabIe 6 引 OS コール実行後のステータスパイト ()H レジスタ ) の意味 Status(AH) 00h 01 h 02h 03h 04h 06h 08h 09h Och 1 Oh 20h 40h 80h TabIe 5 引0S コール (int 13h ) コマンド 03h の仕様 command 03h W ・ rite sectors 正常終了 ( 工ラーなし ) 異常なコマンドが発行された アドレスマークが見つからない ライトプロテクトされている セクタが見つからない フロッピーが交換されたらしい DMA がオーバランした 転送バッフアの領域が 64K バイトのバウンダリを超えている サポートされていないトラック / セクタの組み合わせである CRC 工ラーが発生した コントローラの応答が異常である シークエラーが発生した ドライプの応答が異常である 特別記事フォーマットトランスレータ [Japan2HD 」 71 AH ニ 03 h input AL ニ number Of sector tO read ES ・ BX : buffer address CH = Track CL : Starting Sector DH ニ head ( 0 0 「 1 ) DL ニ Drive select ( 00h , 01h ) if CF : 0 , AH ニ 00h ( success ) if CF ニ 1 , AH : Status output

6. 月刊 C MAGAZINE 1992年9月号

TabIe 10 プリンタの制御コード 影響する 制御コード 説 オプション スイ、、 プリンタの初期化 すべて ESC @ 工リートサイズ ( 12 キャラクタ / インチ ) の指定すべて ESC M すべて 双方向印字 ESC U 0 n/180 インチ紙送り量の設定 すべて ESC 3 n n/180 インチの順方向紙送りの実行 すべて ESC J n 行単位ページ長設定 ( n : 1 ~ 127 ) ESC C n ニ重打ち文字指定 ESC G 漢字高速印字指定 FS X 1 漢字モード指定 FS & 漢字モード解除 FS . 半角文字指定 FS 半角文字指定解除 FS DC2 縮小文字指定 ()N K 文字 ) 漢字文字間のピッチ調整 FS S n 1 n2 漢字半角文字間のピッチ調整 FS T n 1 n2 m ピットイメージモード種別 ドット密度 1 8 ピン倍密度 120 DPI -d8 -d9 3 8 ピン四倍密度 ESC * m nl n 240 DPI -d8 -d9 ー「 33 24 ピン倍密度 120 DPI -dl 6 ー d24 39 24 ピン三倍密度 180 DPI -dl 6 ー d24 ー スイッチが動作するかどうかは確認してい 認しておりません。 ません。なお , DynaBook の日英 MS-DOS まとめ 5.0 は MS-DOS 3.1 とは BIOS の仕様が変更 されているため , ビットイメージが必要と [ 1 ] fMS-DOS Version 5.0 Programm なるスイッチは機能しません ( 公開した BIO 今回は ESC / P プリンタの例を紹介しまし er's Reference 』 , Microsoft PRESS S の仕様を勝手に変えるなんて困ったものて、 たが , ドットプリンタのもうひとつの標準 [ 2 ] fMS-DOS 工ンサイクロペディア すね ! ? ) 。 DOS/V 工ミュレーションモード て、ある PR ー 201H て、も同じようなプログラム Volume 1 , Volume 2 』 , アスキー にすれば動作するはずて、す。日英 MS-DOS [ 3 ] fIBMDOS バージョン J5. O/VBI を作成することがて、きます。 PR -201H をす 5 . 0 のテクニカルマニュアルを入手しようと て、に手放しているため , OS インターフェース技術解説書』 , 日 こ数年使ってい 問い合わせたところ , まだて、きていないと 本アイ・ビー・エム ませんが , 筆者は今回のサプセット仕様に いうことて、した。 リリースされてからしば 相当するユーティリティを作成しています [ 4 ] 『 IBM DOS バ ージョン J5. 0 , J5 . 0/V 技術解説書』 , らくたっため , て、きていないとはおかしい ( バージョンアップしていないため , 機能ア 日本アイ・ビー・エ のて、すが , 間い合わせた先の調べ方が足り ップから取り残されただけなのて、すが ) 。 p [ 5 ] 『 IBMDOS バージョン J4. O/VBI なかったのかもしれません。 Rー201H は ESC/P プリンタと比較して機能が AX マシンと FM-TOWNS て、は動作を確 低いため , あまり好きて、はないのて、すが , OS インターフェース技術解説書』 , 日 Fig. 3 罫線の縦拡張 明 〇ヘッドピン上ピット 7 〇ヘッドピン上ピット 6 〇ヘッドピン上ビット 5 〇ヘッドピン上ビット 4 〇ヘッドピン上ビット 3 〇ヘッドピン上ピット 2 〇ヘッドピン上ピット 1 〇ヘッドピン上ビット 0 〇ヘッドピン中ピット 7 〇ヘッドピン中ピット 6 〇ヘッドピン中ビット 5 〇ヘッドピン中ビット 4 〇ヘッドピン中ビット 3 〇ヘッドピン中ビット 2 〇ヘッドピン中ピット 1 〇ヘッドピン中ピット 0 〇ヘッドピン下ピット 7 〇ヘッドピン下ビット 6 〇ヘッドピン下ピット 5 〇ヘッドピン下ピット 4 〇ヘッドピン下ビット 3 〇ヘッドピン下ビット 2 OR 〇ヘッドピン下ピット 1 〇ヘッドピン下ピット 0 〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇〇 OR OR OR ¯X すべて すべて OR OR OR テフォルト OR 機会があれば紹介て、きるかもしれません。 ム 90 C MAGAZINE 1992 9

7. 月刊 C MAGAZINE 1992年9月号

指定しない汎用のポインタ」という意味て す。なお , 単に void だけなら戻り値がない ことを意味します。 パラメータの size t は , メモリ領域のバイ ト数を指定するための型て、す。これは実は unsigned または unsigned long の別名て、 , s tdlib. h て、 , [ プログラム ] #include く stdio. h> #include く st ⅵ . h> #include く math. h 〉 #define PI 3.14159265 #define PI 30.0 #define 30.5 main() typedef unsigned size t , または , typedef unsigned long size t ; などと定義されているはずて、す。 具体的には , たとえば a [ 0 ] から a [ 99 ] まて、の 100 個の double 型の場所を確保するに 践 C プログラミング double *a ; 型になります ovoid * 型はキャストなして、 d * 型て、すが , a に代入されると double * のようにします。 malloc ( ) の戻り値は voi a=maIIoc(100*sizeof(double)) ; double * 型にも int * 型にも代入すること がてきます。 int m, n, nenl, nen2, tsukil' tsuki2' hil' i2 : long nissul, nissu2, sou, keisan() ; int msuC12] = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , (1) , tsuC 亠 ] ; int shuki [ 3 ] = ( 23 , 28 , 33 } , tenC3] : char 亠 moj i [ 3 ] = dashes tsu[0] = 0 : = tsuCn-1J + u [ 止 1 ] ; for (n = 1 : n く = 12 ; 舳 + ) tsu[n] scanf("XdXdXd", &nenl, &tsukil, il ) : scanf ( ” % d ” , &nen2, &tsuki2, i2 ) : = keisan(nenl, tsukil, hil, tsu) ; nissul nissu2 = keisan(nen2, tsuki2, hi2, tsu) ; 3 sou printf " % 24d ー % 2d ー % 2d KARA NO BIO-RHYTHM CALENDAR%n ” , nen2' printf("X64d-X2d-X2d UMARE}n ” , nenl, tsukil, hil) : ” JOSHO-KI ” ); printf("X27sX13sX18s *n", "KAKO-KI" printf( ” Xs*n", dashes) : plot [ 61 ] = ' 判 ' : for (m = 0 : m く 30 : m + + ) { for (n = 0 ; れく 61 ; n + + ) plot[n] - for (n = 0 ; n く 3 ; n + + ) { ten Cn] = tsuki2, hi2) : sin((sou % shuki[n] + m) * ( 円 * 2.0 / shuki[n))) * 円 + : plot[ten[n]] = mojiCn]; if (tenC0] = tenC1] Ⅱ tenCOJ = tenC2]) plot[tenC0]] else if (tenCI] = ten[2]) plot[ten[l]] = printf("X4d ー % 61S は 3d \ n ” , m, plot. m) ; hosei = tonen ー zennen ー 365 : tonen = NISSUP nen) : zennen 6 long nissu, zennem hosei : 1 。 keisan( 亠 ) #define NISSUF(Y) ( ( y ) * 365L + (y)/4 ー ( の / 100 + ( y ) / 40 の return 0 ; printf(" Xs*n", dashes) ; return nissu; if (tsuki 〉 2 ) 亠 : nissu = zennen + tsu[tsuki - 1 ] + hi; 実践 c プログラミング入門 83

8. 月刊 C MAGAZINE 1992年9月号

耋おく一 NE 9 PC ・ 9801 DOS/V Macintosh 」・ 3 一 00 FM ・ TOWNS X 08 UNIX ( 略 MIDI ( 産産 ) Al MS-Windows GUI 武 #¯L 、ー MAGAZINE I. 凵いー匯 2. 鱗・・ 3. 4. 燿嶐 さ . 11. 斗ーメ一 2. 》訣こ . 饕醵一 4. 一 5. 洋・ま新 16. 小言 I. 分耋酥 2. ーメ・皿 3. ヰ鑄 4. 5. 洋鑄 : ー 71• A B C ・土ーマ「 A B C 173 F04 : 導いい斗 A B C F03 : ・、 : メ・ 74 ミ ( A B C 174 : ヾ 7 。 & A B C : ・ = チ A B C 175 001 ・ : 朝 4 7 土ープ A B C 1 76 ・ : 騎汁ヾ 7b =7 A B C 003 : ) ー A B C 006 洋 A B C 177 : ・十総 A B C 007 : ・、まメト A B C 103 ・ ・ : 汁 A B C 008 : 、まメト A B C 139 ・ ・ : 斗斗 A B C ・ 4 、メ A B C 149 009 ・ : = 凵ー A B C : 171 ー i トい 7 、 A B C 166 ・ 7 て 47 A B C 172 MAGAZINE C 一ミく窰畊ーア

9. 月刊 C MAGAZINE 1992年9月号

List3 List3 BX, CPTRSAV] LDS DL, BYTE VTR [BX. COUNT+4] OV PUSH CS POP DS MOV CX, 2 ADD PUSH MOV AH, 02H I NT 21 日 LEA DX, MSGDRV MOV AH, 09H INT 21H POP I NC DL LOOP DIEX LEA DX, MSGEND MOV AH, 09H I NT 21H BX, CPTRSAV] LDS [BX. MEDIA], 2 MOV WORD PTR CBX. TRANS], OFFSET DSK_INIT MOV WORD PTR [BX. TRANS + 2], CS MOV WORD PTR CBX. COUNT], OFFSET INIT_TBL MOV WORD PTR [BX. COUNT + 2], CS MOV PUSH CS POP DS CLC JMP 起動メッセー ン・ RWRTN : SI, PRMSAVE PARAMS ET BX, CPTRSAV] CBX. COUNT] , CX EXIT LEA CALL LDS MOV JMP DIEX : RWERR: SI, PRMSAVE LEA PARAMSET CALL CX, SEC_CNT MOV BX, CPTRSAV] LDS [ BX. COUNT] , CX MOV CS PUSH DS POP CMP AH, 40H RWE2 JNE AL, E$SEEK MOV ERR EX IT JMP AH, 80H CMP RWE3 JNE AL, E$NOTRDY MOV ERR_EX IT JMP AL, AH OV AH, AH XOR BX, OFFSET ERRCODE MOV BX, AX ADD AL, [ BX] MOV ERR_EX IT JMP I N T 1 3 h の実行 ( R /W) AH=02H:Read. AH=03H:Write バッフアアドレスは SCTBUFO に固定 AL, INT_CNT MOV DH, INT_S I DE MOV DL, UNIT_NO MOV CH, I NT_TRACK MOV CL, I NT_SECTOR MOV BX, SCTBUFO LEA PUSH CS ES POP 13H I NT I NTRWEND JNC AH, 06H CMP I NTRW JE RET RWEI: RWE2: RWE3: INTRW : EXIT OAH, OD 日 ' Japanese-2HD Driver VI. 2 for IBM/PC Copyright by Tsuru-Zoh, Oct. 10 , 1990 ' , OA 日 , ODH OAH, ODH, ' Drive A: B: assigned to Drive OA 日 , ODH, ' $ ' MSG JAPAN2HD 」 NC Li st 4 INTRWEND: リクエストヘッダ構造体の定義 STRUC DB DB DB DW DB DB DD ENDS M S ー D O S の B P B 構造体の定義 STRUC DB DB DW DB DB DW DB ENDS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU F D D パラメータの設定 DS: SI からの 1 1 バイトを F D D パラメータアドレスに転送 PUSH AX XOR AX, AX MOV ES, AX BX, 圓 78H MOV DI, ES:[BX] LES CX, 11 MOV R EP MOVSB AX POP RET REQ_HEAD CMD LEN UNIT CMD STATUS MEDIA TRANS COUNT START REQ_HEAD BPBTYP SCISIZ ALLS I Z RSVSCT FATCPY DIRENT SCTVOL MEDIAD FATNO BPBRSV BPBTYP PARAMSET: 0 : 0 ! の・・ C ′・ 8 0 ー 0 : 0 ー 0 : ERRCODE: 0 E$ERRCMD E$MEDIA E$WP E$SECTOR 0 E$CHG 0 0 0 0 0 E$SEEK 0 0 0 E$CRC 0 ↓ワ・ 0 : ワ・つ : 0 ! 0 : 0 : ^ 0 工ラーコードの定義 E$WP E$ERRUN IT E$NOTRDY E$ERRCMD E$CRC E$R EQLEN E$SEEK E$MEDIA E$S ECTOR E$PAPER E$WRITE E$R EAD E$ERR E$CHG OOH 01H 02H 03H 04 日 05H 06H 07H 08H 09H OAH OBH OC 日 OF 日 PAGE ; * イニットルーティン ( デバイス登録時に 1 度だけ呼ばれる ) DSK INIT: DX, MSG LEA AH, 09H MOV I NT 21H 特別記事フォーマットトランスレータ rJapan2HD 」 77

10. 月刊 C MAGAZINE 1992年9月号

■正解者からのメッセージ いつもの問題のように再起呼び出しを用 いてプログラムを作成しましたが , なるべ く時間を短縮するために , 途中て、行・列の 配置数のチェックを入れています。このチ ェックて、約 3 分短縮しました。また , 途中て、 仮分数チェックも加えるとさらに 10 秒ほど もう少し , 問題を明確に 短縮て、きました。 していただきたいと思います。 ( 千葉県八千代市渡辺哲弥 ) 答えがひとつ見つかった時点て、強制終了 ( exit ) していますが , 最初に 3 時間あまり動 かしたときは , 三千以上の組み合わせが書 き出されていましたが , そんなにあるもの て、しようか ? 100 個についてはチェックサ ム ( ? ) は行いましたが , 重複チェックはし ておりません。 ( 奈良県生駒市村山眞弓 ) アルゴリズムにも少し悩みましたが , 出 題の文の解釈にもっと悩んて、しまいました。 解いてみると , 既約分数の条件をつけてみ ても 1312 通りもあり , 「 25 個の分子をすべて」 解答欄に書くことがて、きなくなってしまっ たのて、す。ということて、自分の都合のいい ように「全部て、何通りあるか」と解釈してみ ましたが , どうなるて、しようカ 2 ( 東京都練馬区渥美暢 ) 最初は再帰を使うことを考えましたが , 実行時間が数十分とかかりすぎるのて、やめ ました。本プログラムはいかにもカずくと いう感じて、スマートさには欠けますが , 実 行時間は 6 秒程度と再帰を使うよりずいぶん 短縮することがて、きました ただし , プロ グラムを作り直すたびに異なる解が出てき たのて、 , はたして正解が 64 個て、あるのかま ったく自信がありません。 下記の宛先 , または電子メールて、 R & R に記 成し , 右記の応募規定に従い , ディスクて、 パズルの解答を導き出すプログラムを作 応募の規定 ( 青森県北津軽郡森公正 ) を置くことにより得られることになります。 合わせた数字を各列の商に合うように分子 て、 , 問題の解は 2 , 3 , 7 をかけ算の形て、組み ( 3 % ) ・ 7 ( 0 ミ m ミ 3 , 2 坙 n 坙 3 ) の形になるの 9 / 70400 て、割ると , その商はすべて (2Am) ・ 各列の五つの分母をかけ合わせたものを ( 山口県新南陽市亀澤光博 ) されている ID 宛に解答をお寄せください 締め切りは 9 月 18 日必着とします。 ・パズルの標題 , 解答の明記 ・作成するプログラムは C 言語のみ ・使用機種 , OS, コンパイラおよびオプシ ・上記をすべてテキストファイルにする ・連絡先 ( 住所 , 電話番号 ) ・ 800 字以内のプログラムの説明と感想 ・参考した文献 , プログラム ョンスイッチの明記 C マガジン編集部「 C マガ電脳クラブ」係 ソフトノヾンク株 東京都港区高輪 2 ー 19 ー 13 NS 高輪ビル 宛先〒 108 返却て、きません。ご了承ください なお , お送りいただいたディスクなどは 3 1 ゲーム 今月号のノヾズル 今月は , ふたりで遊 31 ゲームを紹介しよ う。 1 から 6 までの数を書いた駒それぞれ 4 個す つを , Fig. 2 のように左右にだけスライドで きるような盤の上に並べ , すべての駒を左側 に寄せてゲームを始める。ふたりが交互に , 駒をひとっすっ右に移動する。移動するごと に右側の数の合計を唱え , これがちょうど 31 になるようにした者が勝ちだ。でなかった ら , 31 にならなくても相手を 32 以上にしてし まってもよい。もちろん , 「パス」は許されな い。 Fig. 3 は , あるゲームの終了の図で , ち ようど 31 ができている。こんなこともある。 A が 24 を作って B の番になった。見ると 1 の駒 はすべて移動済みだ。そこで B は 6 を動かして 30 にした。すると次の手で A は 32 以上しかっ くれない。そこで B の勝ちとなる。 実はこのゲーム , 先手に必勝法がある。そ こで問題。 1 手目をコンピュータとし , 人と対 戦する必勝プログラムを作ってほしい。対戦 の表示方法はご自由にどうぞ。 Fig. 3 C マガ電脳クラブ 157 5 3