home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / fmgraph / sample.grp < prev   
Encoding:
Text File  |  1990-06-14  |  4.6 KB  |  97 lines

  1. FreeWare Collection用 補足説明
  2.  
  3.     FM グラフィックBIOS アクセスライブラリ使用法
  4.  
  5.  グラフィックライブラリの使い方ですが、まずインクルード,ライブラリ両ファイル
  6. をそれぞれのサーチパスの中におきます。
  7.  たいていは、\LSIC86 (インクルード), \LSIC86\S (ライブラリ)でしょう。
  8.  
  9.  Cのソースの中で、FMGRAPH.H をインクルードします。
  10.  
  11.  グラフィック関数を使うさいには必ず、最初に g_init() 関数を実行しておきます。
  12.  g_init() 関数ではグラフィックBIOSの初期化をおこないます。この時パラメー
  13. タとして、グラフィックBIOSの作業領域アドレスを指定します。これは far 形式
  14. なので注意して下さい。
  15.  作業領域アドレスに NULL を指定すると、グラフィックBIOS内のデフォルト領域
  16. を使用することになります。これは複雑な図形を表示しない時には必要サイズが小さく
  17. なって便利です。
  18.  
  19.  作業領域は、あらかじめ malloc() 関数等で確保しておく必要があります。そして、
  20. この領域の先頭には、1ワード(unsigned)で作業領域のサイズを設定しておきます。
  21. 図に書くと以下のようになります。
  22.  
  23.     作業領域アドレス->+---------+---------+ ------
  24.                             |         n        |     ↑
  25.                             +---------+---------+ ---  | mはmalloc()で
  26.                             |                   |  ↑    | 確保するサイズ
  27.                             |                   |  |  m
  28.                            ~~               ~~  n  |
  29.                             |                   |  |  |
  30.                             |                   |  ↓  ↓
  31.                             +-------------------+ ------
  32.  
  33.  この中はユーザーの設定するタイル,ハッチング,線分パターンのデータや、ペイン
  34. トを実行するさいの作業データ等に使われます。
  35.  
  36.  初期化によってグラフィック画面はクリアされ、各種設定は初期値となります。
  37. 座標の範囲は、左上が(0,0) 右下が(639,399)です。この他の値は、
  38. 必要資料(徹底解析マニュアル)を参照して下さい。
  39.  なお、幾つかのモード設定の中には、初期化を行っても以前に設定された値のまま、
  40. 変わらないものもあります。
  41.  
  42.  g_init() 関数を実行した後は、もうそれぞれのグラフィック関数を呼び出して、自分
  43. の行いたい処理を実行します。
  44.  
  45.  各関数のパラメータは、インクルードファイルに名称を書いておきました。しばらく
  46. の間はこれだけでも充分だと思います。ちなみに line と pset を以下に示します。
  47.  
  48. /*==線分  */
  49. int  g_line(int,int,int,int); /* 始点X座標,始点Y座標,終点X座標,終点Y座標     */
  50.  
  51. /*==点  */
  52. int  g_pset(int,int); /* 描画X座標,描画Y座標                                 */
  53.  
  54.  その他として、文字列出力関数g_string(),g_string_cont()を使う時には farstr.lib
  55. を、楕円弧,楕円扇形関数g_oval_arc(),g_oval_sector()を使う時には mathlib.libを、
  56. それぞれリンクする必要があります。
  57.  
  58.  参考までに私の LSIC86.CFG ファイルと、psetによる円の表示プログラムを載せます
  59.  ただ、このプログラムは基点から段々と線が延びていくように作ったつもりだったの
  60. ですが、パラパラと離散的に点が描画され、その間を詰めていくように表示されます。
  61.  
  62.                                                     MHF00560  福地 邦雄
  63.  
  64. ===================================LSIC86.CFG==================================
  65. -dLSI_C
  66. -xD:\LSIC86\ -bD:\LSIC86\ -iD:\LSIC86\ -t
  67. -acdos -ldoslib -lknjlib -lfarstr -lfmgraph -lmathlib -v
  68. ===============================================================================
  69. =====================================yen.c=====================================
  70. #include <stdio.h>
  71. #include <math.h>
  72. #include <fmgraph.h> /*<-LSIC86ディレクトリにインクルードファイルを入れた場合*/
  73.  
  74. main(int argc,char *argv[])
  75. {
  76.         double  px,py,degree,r,ratio;
  77.         int     cx,cy,color;
  78.  
  79.         g_init(NULL); /* グラフィックBIOS初期化(BIOS内作業領域使用)*/
  80.         r = 150.0 ;                                            /* 半径を設定 */
  81.         ratio = 400.0 / 465.0 ;        /* 正円になるように縦/横の比率を設定 */
  82.         cx = 319 ;                                            /* 中心X座標 */
  83.         cy = 199 ;                                            /* 中心Y座標 */
  84.  
  85.         g_setcompatiblemode(COMPATI_EXTD);       /* 拡張モード(16色表示)指定 */
  86.         for(degree=0; degree < 360; degree += 0.5 ) {
  87.                                  /* 0度から360度まで0.5度きざみに描画 */
  88.                 px = cos( degree ) * r ;               /* X座標の変移を計算 */
  89.                 py = sin( degree ) * r * ratio ;       /* Y座標の変移を計算 */
  90.                 color = ( (int)degree % 15 ) + 1 ;     /* 点ごとに色を変える */
  91.                 g_pointcolor( color );                       /* 点の色を設定 */
  92.                 g_pset( cx+(int)px, cy+(int)py );                /* 点を描画 */
  93.         }
  94. }
  95. ========END====================================================================
  96. /E
  97.