home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 3
/
FreeSoftwareCollection3pd199x-jp.img
/
pao
/
ms_dos
/
cdplay
/
src
/
crt.c
< prev
next >
Wrap
Text File
|
1980-01-02
|
7KB
|
281 lines
/******************************************************************************
**
** CRT.LIB << MSC V5.1 >>
**
** <HISTORY>
** 1990.08.20 : CREATE
**
** Programed by Y.HIRATA Nifty-ID (NAB03321)
**
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include <conio.h>
#include "crt.h"
/******************************************************************************
CRT_cls : 全画面消去
******************************************************************************/
unsigned CRT_cls( void )
{
union REGS regs ;
regs.h.ah = 0x02 ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_cursw : カーソル表示制御
******************************************************************************/
unsigned CRT_cursw( sw )
unsigned sw ; /* = 0 : カーソル表示しない, = 1 : カーソル表示する。 */
{
union REGS regs ;
regs.h.ah = 0x0B ;
if ( sw )
regs.h.al = 0 ;
else
regs.h.al = 1 ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_setcur : カーソル位置設定
******************************************************************************/
unsigned CRT_setcur( clm,line )
unsigned clm ; /* 桁位置( 1 ~ ) */
unsigned line ; /* 行位置( 1 ~ ) */
{
union REGS regs ;
regs.h.ah = 0x0D ;
regs.h.dh = line ;
regs.h.dl = clm ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_getcur : カーソル位置取得
******************************************************************************/
unsigned CRT_getcur( clm,line )
unsigned *clm ; /* 桁位置( 1 ~ ) */
unsigned *line ; /* 行位置( 1 ~ ) */
{
union REGS regs ;
regs.h.ah = 0x0E ;
int86( INT_CRT,®s,®s ) ;
*line = regs.h.dh ;
*clm = regs.h.dl ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_setatr : アトリビュート設定
******************************************************************************/
unsigned CRT_setatr( clm,line,mode,color )
unsigned clm ; /* 桁位置( 1 ~ ) */
unsigned line ; /* 行位置( 1 ~ ) */
unsigned char mode ; /* 表示属性 */
/*
** bit : 7 6 5 4 3 2 1 0
** アンダスコア シークレット 強調 ブリンク リバース 垂線 オーバライン アンダライン
*/
unsigned short color ; /* 色識別番号 */
/*
** 0:黒色 1:青色 2:赤色 3:紫色 4:緑色 5:水色 6:黄色 7:白色
*/
{
union REGS regs ;
struct SREGS sregs ;
struct _disp_mode {
char res ;
char mode ;
unsigned short color ;
} disp_mode ;
disp_mode.mode = mode ;
disp_mode.color = color ;
regs.h.ah = 0x0F ;
regs.h.dh = line ;
regs.h.dl = clm ;
regs.x.di = (unsigned int)&disp_mode ;
segread( &sregs ) ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_getatr : アトリビュート取得
******************************************************************************/
unsigned CRT_getatr( clm,line,mode,color )
unsigned clm ; /* 桁位置( 1 ~ ) */
unsigned line ; /* 行位置( 1 ~ ) */
unsigned char *mode ; /* 表示属性 */
/*
** bit : 7 6 5 4 3 2 1 0
** アンダスコア シークレット 強調 ブリンク リバース 垂線 オーバライン アンダライン
*/
unsigned short *color ; /* 色識別番号 */
/*
** 0:黒色 1:青色 2:赤色 3:紫色 4:緑色 5:水色 6:黄色 7:白色
*/
{
union REGS regs ;
struct SREGS sregs ;
struct _disp_mode {
char res ;
char mode ;
unsigned short color ;
} disp_mode ;
regs.h.ah = 0x10 ;
regs.h.dh = line ;
regs.h.dl = clm ;
regs.x.di = (unsigned int)&disp_mode ;
segread( &sregs ) ;
int86( INT_CRT,®s,®s ) ;
*mode = disp_mode.mode ;
*color = disp_mode.color ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_defatr : デフォルトアトリビュートの設定
******************************************************************************/
unsigned CRT_defatr( mode,color )
unsigned char mode ; /* 表示属性 */
/*
** bit : 7 6 5 4 3 2 1 0
** アンダスコア シークレット 強調 ブリンク リバース 垂線 オーバライン アンダライン
*/
unsigned short color ; /* 色識別番号 */
/*
** 0:黒色 1:青色 2:赤色 3:紫色 4:緑色 5:水色 6:黄色 7:白色
*/
{
union REGS regs ;
struct SREGS sregs ;
struct _disp_mode {
char res ;
char mode ;
unsigned short color ;
} disp_mode ;
disp_mode.mode = mode ;
disp_mode.color = color ;
regs.h.ah = 0x11 ;
regs.x.di = (unsigned int)&disp_mode ;
segread( &sregs ) ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_scroll : 全画面スクロール(上方向へ1行分)
******************************************************************************/
unsigned CRT_scrup( void )
{
union REGS regs ;
regs.h.ah = 0x19 ;
regs.h.al = 0 ;
regs.x.cx = 1 ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_putc : 1文字出力(デフォルトアトリビュート & シフトJISコード)
******************************************************************************/
unsigned CRT_putc( c )
char c ; /* 表示文字 */
{
union REGS regs ;
regs.h.ah = 0x1D ;
regs.h.al = c ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/******************************************************************************
CRT_puts : 文字列出力(デフォルトアトリビュート & シフトJISコード列)
******************************************************************************/
unsigned CRT_puts( s )
char *s ; /* 表示文字列 */
{
union REGS regs ;
struct SREGS sregs ;
regs.h.ah = 0x1E ;
regs.x.cx = strlen( s ) ;
regs.x.di = (unsigned int)s ;
segread( &sregs ) ;
int86( INT_CRT,®s,®s ) ;
return( regs.h.ah ) ;
}
/********************************* 改行 ************************************/
void CRT_cr()
{
unsigned line, clm ;
CRT_getcur( &clm,&line ) ;
line ++ ; clm = 1 ;
if ( line > 24 ) {
line = MAXLINE ;
CRT_scrup() ;
}
CRT_setcur( clm,line ) ;
}
/******************************************************************************
CRT_beep : BEEP音を出す(カウンタ数,指定時間)
******************************************************************************/
unsigned CRT_beep( time,count )
unsigned short time ; /* 時間 : 10ms 単位 */
unsigned short count ; /* カウンタ数 : 基本周波数(19200Hz) / 周波数(Hz) */
{
union REGS regs ;
regs.h.ah = 0x03 ;
regs.x.bx = time ;
regs.x.dx = count ;
int86( INT_BEEP,®s,®s ) ;
return( regs.h.ah ) ;
}