home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 3 / FreeSoftwareCollection3pd199x-jp.img / pao / ms_dos / game / src / grp.c next >
Text File  |  1980-01-02  |  11KB  |  385 lines

  1. /* << MSC V5.1 >> *************************************************************
  2. **
  3. **    GRP.LIB  for FMRシリーズ
  4. **
  5. **    CREATE : 1990.09.19
  6. **    FINISH : 1990.09.19
  7. **
  8. **    < NOTES >
  9. **    TABS = 4
  10. **
  11. **    < HISTORY >
  12. **    1990.09.19 : CREATE
  13. **
  14. **    All Rights Reserved, Copyright (C) Y.Hirata 1990.
  15. **
  16. **    Programed by Y.Hirata ( Nifty ID : NAB03321 )
  17. **
  18. ******************************************************************************/
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <graph.h>
  23. #include <dos.h>
  24. #include "grp.h"
  25.  
  26. struct videoconfig far    _v_config ;
  27.  
  28. /**************************  グラフィック環境の初期設定  **************************/
  29. void far GRP_init()
  30. {
  31. /*    カーソル状態設定 : カーソル非表示                                                */
  32.     _displaycursor( _GCURSOROFF ) ;
  33. /*    グラフィック環境の取得                                                        */
  34.     _getvideoconfig( &_v_config ) ;
  35. /*    画面モード設定 : カラー - グラフィック                                            */
  36.     _setvideomode( _FMRESSCOLOR ) ;
  37. /*    書き込みページの設定 : page 0                                            */
  38.     _setactivepage( 0 ) ;
  39. /*    表示ページ設定 : page 0                                                    */
  40.     _setvisualpage( 0 ) ;
  41. /*    クリップ領域の設定 : XS,YS - XE,YE                                            */
  42.     _setviewport( VIEW_XS,VIEW_YS,VIEW_XE,VIEW_YE ) ;
  43. /*    テキスト表示領域の設定 : 25行 80桁                                            */
  44.     _settextwindow( (short)(0),(short)(0),(short)(25),(short)(80) ) ;
  45. }
  46.  
  47. /**************************  グラフィック環境の終了設定  **************************/
  48. void far GRP_end()
  49. {
  50.     union REGS    regs ;
  51.  
  52. /*    画面モード設定 : カラー - グラフィック                                            */
  53.     _setvideomode( _DEFAULTMODE ) ;
  54. /*    書き込みページの設定 : page 0                                            */
  55.     _setactivepage( 0 ) ;
  56. /*    表示ページ設定 : page 0                                                    */
  57.     _setvisualpage( 0 ) ;
  58. /*    カーソル状態設定 : カーソル表示                                                    */
  59.     _displaycursor( _GCURSORON ) ;
  60.  
  61.     regs.h.ah = 0x01 ;
  62.     regs.h.al = 0x00 ;
  63.     int86( 0x91,®s,®s ) ;
  64. }
  65.  
  66. /******************************  パレット色設定  ********************************/
  67. void far GRP_palette( short color, long pixel )
  68. /*
  69. **    color : 色番号
  70. **    pixel : RGBを各1バイトで指定(上位4ビットのみ有効)
  71. */
  72. {
  73.     _remappalette( color,pixel ) ;
  74. }
  75.  
  76. /**************************  論理座標上の色取得  *****************************/
  77. short far GRP_getpixel( short x, short y )
  78. /*
  79. **    x,y : 座標
  80. */
  81. {
  82.     return( _getpixel( x,y ) ) ;
  83. }
  84.  
  85. /***************************  書き込みページの設定  ***************************/
  86. void far GRP_writePage( short page )
  87. {
  88.     _setactivepage( page ) ;
  89. }
  90.  
  91. /*****************************  表示ページの設定  *****************************/
  92. void far GRP_displayPage( short page )
  93. {
  94.     _setvisualpage( page ) ;
  95. }
  96.  
  97. /*******************************  背景色設定  ********************************/
  98. void far GRP_bkcolor( long pixel )
  99. /*
  100. **    pixel : 背景色をRGB各1バイトで指定(上位4ビットのみ有効)
  101. */
  102. {
  103.     _setbkcolor( pixel ) ;
  104. }
  105.  
  106. /*******************************  背景色取得  ********************************/
  107. long far GRP_getbkcolor( void )
  108. /*
  109. **    戻り値 : 背景色のピクセル値で戻る(RGB各1バイト,上位4ビットのみ有効)
  110. */
  111. {
  112.     return( _getbkcolor() ) ;
  113. }
  114.  
  115. /*******************************  描画色設定  ********************************/
  116. void far GRP_color( short colorno )
  117. /*
  118. **    colorno : 色番号
  119. */
  120. {
  121.     _setcolor( colorno ) ;
  122. }
  123.  
  124. /*******************************  描画色取得  ********************************/
  125. short far GRP_getcolor( void )
  126. /*
  127. **    戻り値 : 現在の描画色番号
  128. */
  129. {
  130.     return( _getcolor() ) ;
  131. }
  132.  
  133. /*******************************  フィルマスク設定  ********************************/
  134. void far GRP_setfillmask( unsigned char *mask )
  135. {
  136.     _setfillmask( mask ) ;
  137. }
  138.  
  139. /*******************************  線形状設定  ********************************/
  140. void far GRP_linestyle( unsigned short style )
  141. /*
  142. **    style : 線形状(実線:0xFFFF,点線:0x5555/0xAAAA,破線:0xEEEE/0x7777)
  143. */
  144. {
  145.     _setlinestyle( style ) ;
  146. }
  147.  
  148. /******************************  カレント位置設定  *******************************/
  149. void far GRP_setposion( short x, short y )
  150. /*
  151. **    x,y : 描画開始位置
  152. */
  153. {
  154.     _moveto( x,y ) ;
  155. }
  156.  
  157. /***************************  論理座標原点の設定  ****************************/
  158. void far GRP_setlogorg( short x, short y )
  159. /*
  160. **    x,y : 論理座標原点とする物理座標
  161. */
  162. {
  163.     _setlogorg( x,y ) ;
  164. }
  165.  
  166. /****************************  クリップ領域の設定  *****************************/
  167. void far GRP_viewport( short x1, short y1, short x2, short y2 )
  168. /*
  169. **    x1,y1 : クリップ領域の左上座標(物理座標)
  170. **    x2,y2 : クリップ領域の右下座標(物理座標)
  171. **
  172. **    ☆ 本関数実行後、論理座標原点は (x1,y1) に設定される。
  173. */
  174. {
  175.     _setviewport( x1,y1,x2,y2 ) ;
  176. }
  177.  
  178. /*****************************  グラフィック画面クリア  ******************************/
  179. void far GRP_clearScreen( short sw )
  180. /*
  181. **    sw : 0-GRAPHIC, 1-TEXT, 3-GRAPHIC&TEXT
  182. */
  183. {
  184.     switch ( sw ) {
  185.         case 0 :                /*  グラフィック画面だけを背景色で塗り潰す    */
  186.             _clearscreen( _GCLEARGRAPH ) ;
  187.             break ;
  188.         case 1 :                /*  テキスト画面だけを背景色で塗り潰す        */
  189.             _clearscreen( _GCLEARTEXT ) ;
  190.             break ;
  191.         case 3 :                /*  グラフィックとテキスト画面を背景色で塗り潰す    */
  192.         default :
  193.             _clearscreen( _GCLEARSCREEN ) ;
  194.     }
  195. }
  196.  
  197. /*********************************  線描画  **********************************/
  198. void far GRP_line( short x1, short y1, short x2, short y2 )
  199. /*
  200. **    x1,y1 : 線描画開始位置
  201. **    x2,y2 : 線描画終了位置
  202. */
  203. {
  204.     _moveto( x1,y1 ) ;
  205.     _lineto( x2,y2 ) ;
  206. }
  207.  
  208. /*********************************  点描画  **********************************/
  209. void far GRP_pset( short x, short y )
  210. /*
  211. **    x,y : 点描画位置
  212. */
  213. {
  214.     _moveto( x,y ) ;
  215.     _lineto( x,y ) ;
  216. }
  217.  
  218. /********************************  矩形描画  *********************************/
  219. void far GRP_rectangle( short x1, short y1, short x2, short y2, short control )
  220. /*
  221. **    x1,y1   : 矩形の左上座標
  222. **    x2,y2   : 矩形の右下座標
  223. **    control : 真ならば、矩形内を塗り潰す。 偽ならば、境界線のみ描画。
  224. */
  225. {
  226.     if ( control )                                            /*  塗り潰し    */
  227.         _rectangle( _GFILLINTERIOR,x1,y1,x2,y2 ) ;
  228.     else                                                    /*  境界線だけ    */
  229.         _rectangle( _GBORDER,x1,y1,x2,y2 ) ;
  230. }
  231.  
  232. /*********************************  弧描画  **********************************/
  233. void far GRP_arc( short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4 )
  234. /*
  235. **    x1,y1   : 弧が内接する長方形の左上座標
  236. **    x2,y2   : 弧が内接する長方形の右下座標
  237. **    x3,y3   : 開始ベクトル(ベクトルの基点は、外接する長方形の中心です)
  238. **    x4,y4   : 終了ベクトル(ベクトルの基点は、外接する長方形の中心です)
  239. **
  240. **    ☆ 弧は、開始ベクトルを描画開始点として、終了ベクトルまでを反時計まわりに描画
  241. **       します。
  242. */
  243. {
  244.     _arc( x1,y1,x2,y2,x3,y3,x4,y4 ) ;
  245. }
  246.  
  247. /*********************************  円描画  **********************************/
  248. void far GRP_circle( short x, short y, short r, short control )
  249. /*
  250. **    x,y     : 円の中心座標
  251. **    r       : 円の半径
  252. **    control : 真ならば、円内を塗り潰す。 偽ならば、境界線のみ描画。
  253. */
  254. {
  255.     _moveto( x,y ) ;
  256.     if ( control )                                            /*  塗り潰し    */
  257.         _ellipse( _GFILLINTERIOR,x-r,y-r,x+r,y+r ) ;
  258.     else                                                    /*  境界線だけ    */
  259.         _ellipse( _GBORDER,x-r,y-r,x+r,y+r ) ;
  260. }
  261.  
  262. /********************************  楕円描画  *********************************/
  263. void far GRP_ellipse( short x, short y, short rx, short ry, short control )
  264. /*
  265. **    x,y     : 楕円の中心座標
  266. **    rx,ry   : 楕円のX軸方向,Y軸方向のそれぞれの半径
  267. **    control : 真ならば、楕円内を塗り潰す。 偽ならば、境界線のみ描画。
  268. */
  269. {
  270.     _moveto( x,y ) ;
  271.     if ( control )                                            /*  塗り潰し    */
  272.         _ellipse( _GFILLINTERIOR,x-rx,y-ry,x+rx,y+ry ) ;
  273.     else                                                    /*  境界線だけ    */
  274.         _ellipse( _GBORDER,x-rx,y-ry,x+rx,y+ry ) ;
  275. }
  276.  
  277. /********************************  扇形描画  *********************************/
  278. void far GRP_pie( short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short control )
  279. /*
  280. **    x1,y1   : 楕円が内接する長方形の左上座標
  281. **    x2,y2   : 楕円が内接する長方形の右下座標
  282. **    x3,y3   : 開始ベクトル(ベクトルの基点は、外接する長方形の中心です)
  283. **    x4,y4   : 終了ベクトル(ベクトルの基点は、外接する長方形の中心です)
  284. **    control : 真ならば、扇形内を塗り潰す。 偽ならば、境界線のみ描画。
  285. **
  286. **    ☆ 弧は、開始ベクトルを描画開始点として、終了ベクトルまでを反時計まわりに描画
  287. **       します。また、指定された長方形に内接する楕円の一部となります。
  288. **       扇形は、楕円の弧の両端と中心を結んだものとなります。また、楕円と長方
  289. **       形の中心は同じです。
  290. */
  291. {
  292.     if ( control )                                            /*  塗り潰し    */
  293.         _pie( _GFILLINTERIOR,x1,y1,x2,y2,x3,y3,x4,y4 ) ;
  294.     else                                                    /*  境界線だけ    */
  295.         _pie( _GBORDER,x1,y1,x2,y2,x3,y3,x4,y4 ) ;
  296. }
  297.  
  298. /********************************  塗り潰し  *********************************/
  299. void far GRP_paint( short x, short y, short color )
  300. /*
  301. **    x,y   : 塗り潰し開始座標
  302. **    color : 境界線の色番号
  303. **
  304. **    ☆ 開始座標から、境界線の色番号までの領域を描画色で塗り潰します。
  305. */
  306. {
  307.     _floodfill( x,y,color ) ;
  308. }
  309.  
  310. /****************************  テキスト表示位置取得  *****************************/
  311. void far GRP_gettextposition( short *row, short *column )
  312. /*
  313. **    row,column : テキスト表示位置を行/桁(1~)で取得します。
  314. */
  315. {
  316.     struct rccoord     _t_position ;
  317.  
  318.     _t_position = _gettextposition() ;
  319.     *row    = _t_position.row + 1 ;                                /*  行位置    */
  320.     *column = _t_position.col + 1 ;                                /*  桁位置    */
  321. }
  322.  
  323. /****************************  テキスト表示位置設定  *****************************/
  324. void far GRP_locate( short row, short column )
  325. /*
  326. **    row,column : テキスト表示位置を行/桁(1~)で指定します。
  327. */
  328. {
  329.     short    xe, ye ;
  330.  
  331.     xe = (VIEW_XE+1) / XDOTS ;
  332.     ye = (VIEW_YE+1) / YDOTS ;
  333.     if ( row < 1 ) row = 1 ;
  334.     if ( row > ye ) row = ye ;
  335.     if ( column < 1 ) column = 1 ;
  336.     if ( column > xe ) column = xe ;
  337.     row -- ;
  338.     column -- ;
  339.     _settextposition( row,column ) ;
  340. }
  341.  
  342. /*****************************  テキスト表示色設定  ******************************/
  343. void far GRP_textcolor( short color )
  344. /*
  345. **    color : テキストの色番号
  346. */
  347. {
  348.     _settextcolor( color ) ;
  349. }
  350.  
  351. /********************************  テキスト表示  *********************************/
  352. void far GRP_outtext( char far *text )
  353. {
  354.     _outtext( text ) ;
  355. }
  356.  
  357. /********************************  カーソル制御  *********************************/
  358. void far GRP_cursor( short toggle )
  359. /*
  360. **    toggle : 真ならば、カーソルを表示し、偽ならば、非表示とします。
  361. */
  362. {
  363.     if ( toggle )
  364.         _displaycursor( _GCURSORON ) ;
  365.     else
  366.         _displaycursor( _GCURSOROFF ) ;
  367. }
  368.  
  369. /***********************  BEEP音を出す(カウンタ数,指定時間)  *********************/
  370. unsigned GRP_beep( unsigned short time,unsigned short count )
  371. /*  time  - 時間   : 10ms 単位                                                */
  372. /*  count - カウンタ数 : 基本周波数(19200Hz) / 周波数(Hz)                        */
  373. {
  374.     union    REGS    regs ;
  375.  
  376.     regs.h.ah = 0x03 ;
  377.     regs.x.bx = time ;
  378.     regs.x.dx = count ;
  379.  
  380.     int86( 0x9E,®s,®s ) ;
  381.  
  382.     return( regs.h.ah ) ;
  383. }
  384.  
  385.