home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
pao
/
ms_dos
/
game
/
src
/
grp.c
next >
Wrap
Text File
|
1980-01-02
|
11KB
|
385 lines
/* << MSC V5.1 >> *************************************************************
**
** GRP.LIB for FMRシリーズ
**
** CREATE : 1990.09.19
** FINISH : 1990.09.19
**
** < NOTES >
** TABS = 4
**
** < HISTORY >
** 1990.09.19 : CREATE
**
** All Rights Reserved, Copyright (C) Y.Hirata 1990.
**
** Programed by Y.Hirata ( Nifty ID : NAB03321 )
**
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <graph.h>
#include <dos.h>
#include "grp.h"
struct videoconfig far _v_config ;
/************************** グラフィック環境の初期設定 **************************/
void far GRP_init()
{
/* カーソル状態設定 : カーソル非表示 */
_displaycursor( _GCURSOROFF ) ;
/* グラフィック環境の取得 */
_getvideoconfig( &_v_config ) ;
/* 画面モード設定 : カラー - グラフィック */
_setvideomode( _FMRESSCOLOR ) ;
/* 書き込みページの設定 : page 0 */
_setactivepage( 0 ) ;
/* 表示ページ設定 : page 0 */
_setvisualpage( 0 ) ;
/* クリップ領域の設定 : XS,YS - XE,YE */
_setviewport( VIEW_XS,VIEW_YS,VIEW_XE,VIEW_YE ) ;
/* テキスト表示領域の設定 : 25行 80桁 */
_settextwindow( (short)(0),(short)(0),(short)(25),(short)(80) ) ;
}
/************************** グラフィック環境の終了設定 **************************/
void far GRP_end()
{
union REGS regs ;
/* 画面モード設定 : カラー - グラフィック */
_setvideomode( _DEFAULTMODE ) ;
/* 書き込みページの設定 : page 0 */
_setactivepage( 0 ) ;
/* 表示ページ設定 : page 0 */
_setvisualpage( 0 ) ;
/* カーソル状態設定 : カーソル表示 */
_displaycursor( _GCURSORON ) ;
regs.h.ah = 0x01 ;
regs.h.al = 0x00 ;
int86( 0x91,®s,®s ) ;
}
/****************************** パレット色設定 ********************************/
void far GRP_palette( short color, long pixel )
/*
** color : 色番号
** pixel : RGBを各1バイトで指定(上位4ビットのみ有効)
*/
{
_remappalette( color,pixel ) ;
}
/************************** 論理座標上の色取得 *****************************/
short far GRP_getpixel( short x, short y )
/*
** x,y : 座標
*/
{
return( _getpixel( x,y ) ) ;
}
/*************************** 書き込みページの設定 ***************************/
void far GRP_writePage( short page )
{
_setactivepage( page ) ;
}
/***************************** 表示ページの設定 *****************************/
void far GRP_displayPage( short page )
{
_setvisualpage( page ) ;
}
/******************************* 背景色設定 ********************************/
void far GRP_bkcolor( long pixel )
/*
** pixel : 背景色をRGB各1バイトで指定(上位4ビットのみ有効)
*/
{
_setbkcolor( pixel ) ;
}
/******************************* 背景色取得 ********************************/
long far GRP_getbkcolor( void )
/*
** 戻り値 : 背景色のピクセル値で戻る(RGB各1バイト,上位4ビットのみ有効)
*/
{
return( _getbkcolor() ) ;
}
/******************************* 描画色設定 ********************************/
void far GRP_color( short colorno )
/*
** colorno : 色番号
*/
{
_setcolor( colorno ) ;
}
/******************************* 描画色取得 ********************************/
short far GRP_getcolor( void )
/*
** 戻り値 : 現在の描画色番号
*/
{
return( _getcolor() ) ;
}
/******************************* フィルマスク設定 ********************************/
void far GRP_setfillmask( unsigned char *mask )
{
_setfillmask( mask ) ;
}
/******************************* 線形状設定 ********************************/
void far GRP_linestyle( unsigned short style )
/*
** style : 線形状(実線:0xFFFF,点線:0x5555/0xAAAA,破線:0xEEEE/0x7777)
*/
{
_setlinestyle( style ) ;
}
/****************************** カレント位置設定 *******************************/
void far GRP_setposion( short x, short y )
/*
** x,y : 描画開始位置
*/
{
_moveto( x,y ) ;
}
/*************************** 論理座標原点の設定 ****************************/
void far GRP_setlogorg( short x, short y )
/*
** x,y : 論理座標原点とする物理座標
*/
{
_setlogorg( x,y ) ;
}
/**************************** クリップ領域の設定 *****************************/
void far GRP_viewport( short x1, short y1, short x2, short y2 )
/*
** x1,y1 : クリップ領域の左上座標(物理座標)
** x2,y2 : クリップ領域の右下座標(物理座標)
**
** ☆ 本関数実行後、論理座標原点は (x1,y1) に設定される。
*/
{
_setviewport( x1,y1,x2,y2 ) ;
}
/***************************** グラフィック画面クリア ******************************/
void far GRP_clearScreen( short sw )
/*
** sw : 0-GRAPHIC, 1-TEXT, 3-GRAPHIC&TEXT
*/
{
switch ( sw ) {
case 0 : /* グラフィック画面だけを背景色で塗り潰す */
_clearscreen( _GCLEARGRAPH ) ;
break ;
case 1 : /* テキスト画面だけを背景色で塗り潰す */
_clearscreen( _GCLEARTEXT ) ;
break ;
case 3 : /* グラフィックとテキスト画面を背景色で塗り潰す */
default :
_clearscreen( _GCLEARSCREEN ) ;
}
}
/********************************* 線描画 **********************************/
void far GRP_line( short x1, short y1, short x2, short y2 )
/*
** x1,y1 : 線描画開始位置
** x2,y2 : 線描画終了位置
*/
{
_moveto( x1,y1 ) ;
_lineto( x2,y2 ) ;
}
/********************************* 点描画 **********************************/
void far GRP_pset( short x, short y )
/*
** x,y : 点描画位置
*/
{
_moveto( x,y ) ;
_lineto( x,y ) ;
}
/******************************** 矩形描画 *********************************/
void far GRP_rectangle( short x1, short y1, short x2, short y2, short control )
/*
** x1,y1 : 矩形の左上座標
** x2,y2 : 矩形の右下座標
** control : 真ならば、矩形内を塗り潰す。 偽ならば、境界線のみ描画。
*/
{
if ( control ) /* 塗り潰し */
_rectangle( _GFILLINTERIOR,x1,y1,x2,y2 ) ;
else /* 境界線だけ */
_rectangle( _GBORDER,x1,y1,x2,y2 ) ;
}
/********************************* 弧描画 **********************************/
void far GRP_arc( short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4 )
/*
** x1,y1 : 弧が内接する長方形の左上座標
** x2,y2 : 弧が内接する長方形の右下座標
** x3,y3 : 開始ベクトル(ベクトルの基点は、外接する長方形の中心です)
** x4,y4 : 終了ベクトル(ベクトルの基点は、外接する長方形の中心です)
**
** ☆ 弧は、開始ベクトルを描画開始点として、終了ベクトルまでを反時計まわりに描画
** します。
*/
{
_arc( x1,y1,x2,y2,x3,y3,x4,y4 ) ;
}
/********************************* 円描画 **********************************/
void far GRP_circle( short x, short y, short r, short control )
/*
** x,y : 円の中心座標
** r : 円の半径
** control : 真ならば、円内を塗り潰す。 偽ならば、境界線のみ描画。
*/
{
_moveto( x,y ) ;
if ( control ) /* 塗り潰し */
_ellipse( _GFILLINTERIOR,x-r,y-r,x+r,y+r ) ;
else /* 境界線だけ */
_ellipse( _GBORDER,x-r,y-r,x+r,y+r ) ;
}
/******************************** 楕円描画 *********************************/
void far GRP_ellipse( short x, short y, short rx, short ry, short control )
/*
** x,y : 楕円の中心座標
** rx,ry : 楕円のX軸方向,Y軸方向のそれぞれの半径
** control : 真ならば、楕円内を塗り潰す。 偽ならば、境界線のみ描画。
*/
{
_moveto( x,y ) ;
if ( control ) /* 塗り潰し */
_ellipse( _GFILLINTERIOR,x-rx,y-ry,x+rx,y+ry ) ;
else /* 境界線だけ */
_ellipse( _GBORDER,x-rx,y-ry,x+rx,y+ry ) ;
}
/******************************** 扇形描画 *********************************/
void far GRP_pie( short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short control )
/*
** x1,y1 : 楕円が内接する長方形の左上座標
** x2,y2 : 楕円が内接する長方形の右下座標
** x3,y3 : 開始ベクトル(ベクトルの基点は、外接する長方形の中心です)
** x4,y4 : 終了ベクトル(ベクトルの基点は、外接する長方形の中心です)
** control : 真ならば、扇形内を塗り潰す。 偽ならば、境界線のみ描画。
**
** ☆ 弧は、開始ベクトルを描画開始点として、終了ベクトルまでを反時計まわりに描画
** します。また、指定された長方形に内接する楕円の一部となります。
** 扇形は、楕円の弧の両端と中心を結んだものとなります。また、楕円と長方
** 形の中心は同じです。
*/
{
if ( control ) /* 塗り潰し */
_pie( _GFILLINTERIOR,x1,y1,x2,y2,x3,y3,x4,y4 ) ;
else /* 境界線だけ */
_pie( _GBORDER,x1,y1,x2,y2,x3,y3,x4,y4 ) ;
}
/******************************** 塗り潰し *********************************/
void far GRP_paint( short x, short y, short color )
/*
** x,y : 塗り潰し開始座標
** color : 境界線の色番号
**
** ☆ 開始座標から、境界線の色番号までの領域を描画色で塗り潰します。
*/
{
_floodfill( x,y,color ) ;
}
/**************************** テキスト表示位置取得 *****************************/
void far GRP_gettextposition( short *row, short *column )
/*
** row,column : テキスト表示位置を行/桁(1~)で取得します。
*/
{
struct rccoord _t_position ;
_t_position = _gettextposition() ;
*row = _t_position.row + 1 ; /* 行位置 */
*column = _t_position.col + 1 ; /* 桁位置 */
}
/**************************** テキスト表示位置設定 *****************************/
void far GRP_locate( short row, short column )
/*
** row,column : テキスト表示位置を行/桁(1~)で指定します。
*/
{
short xe, ye ;
xe = (VIEW_XE+1) / XDOTS ;
ye = (VIEW_YE+1) / YDOTS ;
if ( row < 1 ) row = 1 ;
if ( row > ye ) row = ye ;
if ( column < 1 ) column = 1 ;
if ( column > xe ) column = xe ;
row -- ;
column -- ;
_settextposition( row,column ) ;
}
/***************************** テキスト表示色設定 ******************************/
void far GRP_textcolor( short color )
/*
** color : テキストの色番号
*/
{
_settextcolor( color ) ;
}
/******************************** テキスト表示 *********************************/
void far GRP_outtext( char far *text )
{
_outtext( text ) ;
}
/******************************** カーソル制御 *********************************/
void far GRP_cursor( short toggle )
/*
** toggle : 真ならば、カーソルを表示し、偽ならば、非表示とします。
*/
{
if ( toggle )
_displaycursor( _GCURSORON ) ;
else
_displaycursor( _GCURSOROFF ) ;
}
/*********************** BEEP音を出す(カウンタ数,指定時間) *********************/
unsigned GRP_beep( unsigned short time,unsigned short count )
/* time - 時間 : 10ms 単位 */
/* count - カウンタ数 : 基本周波数(19200Hz) / 周波数(Hz) */
{
union REGS regs ;
regs.h.ah = 0x03 ;
regs.x.bx = time ;
regs.x.dx = count ;
int86( 0x9E,®s,®s ) ;
return( regs.h.ah ) ;
}