?? hal_ink.c
字號:
/*
**===========================================================================
** HAL_INK.C - Hardware ink layer support.
**---------------------------------------------------------------------------
** Copyright (c) 1998, 2001 Epson Research and Development, Inc.
** All Rights Reserved.
**===========================================================================
*/
#include "hal.h"
#include "assert.h"
#include "nonsefns.h"
/*-------------------------------------------------------------------------*/
static const char Revision[] = "HAL_INK.C=$Revision: 19 $";
/*-------------------------------------------------------------------------*/
DWORD seInitLcdInk(void)
{
DWORD addr;
unsigned regDisplayMode;
unsigned width, height;
/*
** If in rotate90 mode, get out of rotate90 mode.
*/
regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);
seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode & ~0x40);
seGetLcdResolution(&width, &height);
addr = _InitLcdInkCursorAddress((DWORD) width * height / 4, INK_LAYER);
#ifdef INTEL_DOS
if (addr == -1)
return -1;
#else
if (addr == 0)
return 0;
#endif
/*
** Fill ink layer with transparent color.
*/
seDrawLcdInkRect(0, 0, width-1, height-1, 0xaa, 1);
seEnableLcdInk(TRUE);
seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode);
return addr;
}
/*-------------------------------------------------------------------------*/
DWORD seInitCrtInk(void)
{
DWORD addr;
unsigned width, height;
seGetCrtResolution(&width, &height);
addr = _InitCrtInkCursorAddress((DWORD) width * height / 4, INK_LAYER);
#ifdef INTEL_DOS
if (addr == -1)
return -1;
#else
if (addr == 0)
return 0;
#endif
/*
** Fill ink layer with transparent color.
*/
seDrawCrtInkRect(0, 0, width-1, height-1, 0xaa, 1);
seEnableCrtInk(TRUE);
return addr;
}
/*-------------------------------------------------------------------------*/
DWORD seInitTvInk(void)
{
DWORD addr;
unsigned width, height;
seGetTvResolution(&width, &height);
addr = _InitTvInkCursorAddress((DWORD) width * height / 4, INK_LAYER);
#ifdef INTEL_DOS
if (addr == -1)
return -1;
#else
if (addr == 0)
return 0;
#endif
/*
** Fill ink layer with transparent color.
*/
seDrawTvInkRect(0, 0, width-1, height-1, 0xaa, 1);
seEnableTvInk(TRUE);
return addr;
}
/*-------------------------------------------------------------------------*/
DWORD seInitInk(void)
{
DWORD addr;
unsigned regDisplayMode;
unsigned width, height;
/*
** If in rotate90 mode, get out of rotate90 mode.
*/
regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);
seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode & ~0x40);
seGetResolution(&width, &height);
addr = _InitInkCursorAddress((DWORD) width * height / 4, INK_LAYER);
#ifdef INTEL_DOS
if (addr == -1)
return -1;
#else
if (addr == 0)
return 0;
#endif
/*
** Fill ink layer with transparent color.
*/
seDrawInkRect(0, 0, width-1, height-1, 0xaa, 1);
seEnableInk(TRUE);
seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode);
return addr;
}
/*-------------------------------------------------------------------------*/
void seFreeLcdInk(void)
{
seFreeLcdCursor();
}
/*-------------------------------------------------------------------------*/
void seFreeCrtInk(void)
{
seFreeCrtCursor();
}
/*-------------------------------------------------------------------------*/
void seFreeTvInk(void)
{
seFreeTvInk();
}
/*-------------------------------------------------------------------------*/
void seFreeInk(void)
{
seFreeCursor();
}
/*-------------------------------------------------------------------------*/
void seEnableLcdInk(int enable)
{
unsigned regLcdInkCursorCtrl;
if (enable)
{
regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
regLcdInkCursorCtrl &= ~0x03;
regLcdInkCursorCtrl |= 0x02;
seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
}
else
{
regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
regLcdInkCursorCtrl &= ~0x03;
seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
}
}
/*-------------------------------------------------------------------------*/
void seEnableCrtInk(int enable)
{
unsigned regCrtTvInkCursorCtrl;
if (enable)
{
regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
regCrtTvInkCursorCtrl &= ~0x03;
regCrtTvInkCursorCtrl |= 0x02;
seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
}
else
{
regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
regCrtTvInkCursorCtrl &= ~0x03;
seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
}
}
/*-------------------------------------------------------------------------*/
void seEnableTvInk(int enable)
{
seEnableCrtInk(enable);
}
/*-------------------------------------------------------------------------*/
void seEnableInk(int enable)
{
unsigned regLcdInkCursorCtrl;
unsigned regCrtTvInkCursorCtrl;
if (enable)
{
if (_ActiveImageSurface->DisplayMode & LCD)
{
regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
regLcdInkCursorCtrl &= ~0x03;
regLcdInkCursorCtrl |= 0x02;
seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
}
if (_ActiveImageSurface->DisplayMode & (CRT | TV))
{
regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
regCrtTvInkCursorCtrl &= ~0x03;
regCrtTvInkCursorCtrl |= 0x02;
seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
}
}
else
{
if (_ActiveImageSurface->DisplayMode & LCD)
{
regLcdInkCursorCtrl = seReadRegByte(REG_LCD_INK_CURS_CTRL);
regLcdInkCursorCtrl &= ~0x03;
seWriteRegByte(REG_LCD_INK_CURS_CTRL, regLcdInkCursorCtrl);
}
if (_ActiveImageSurface->DisplayMode & (CRT | TV))
{
regCrtTvInkCursorCtrl = seReadRegByte(REG_CRTTV_INK_CURS_CTRL);
regCrtTvInkCursorCtrl &= ~0x03;
seWriteRegByte(REG_CRTTV_INK_CURS_CTRL, regCrtTvInkCursorCtrl);
}
}
}
/*-------------------------------------------------------------------------*/
DWORD seGetLcdInkLinearAddress(void)
{
return seGetLcdCursorLinearAddress();
}
/*-------------------------------------------------------------------------*/
DWORD seGetCrtInkLinearAddress(void)
{
return seGetCrtCursorLinearAddress();
}
/*-------------------------------------------------------------------------*/
DWORD seGetTvInkLinearAddress(void)
{
return seGetTvCursorLinearAddress();
}
/*-------------------------------------------------------------------------*/
DWORD seGetInkLinearAddress(void)
{
return seGetCursorLinearAddress();
}
/*-------------------------------------------------------------------------*/
DWORD seGetLcdInkOffsetAddress(void)
{
return seGetLcdCursorOffsetAddress();
}
/*-------------------------------------------------------------------------*/
DWORD seGetCrtInkOffsetAddress(void)
{
return seGetCrtCursorOffsetAddress();
}
/*-------------------------------------------------------------------------*/
DWORD seGetTvInkOffsetAddress(void)
{
return seGetTvCursorOffsetAddress();
}
/*-------------------------------------------------------------------------*/
DWORD seGetInkOffsetAddress(void)
{
return seGetCursorOffsetAddress();
}
/*-------------------------------------------------------------------------*/
void seSetLcdInkColor(int index, DWORD color)
{
seSetLcdCursorColor(index, color);
}
/*-------------------------------------------------------------------------*/
void seSetCrtInkColor(int index, DWORD color)
{
seSetCrtCursorColor(index, color);
}
/*-------------------------------------------------------------------------*/
void seSetTvInkColor(int index, DWORD color)
{
seSetTvCursorColor(index, color);
}
/*-------------------------------------------------------------------------*/
void seSetInkColor(int index, DWORD color)
{
seSetCursorColor(index, color);
}
/*-------------------------------------------------------------------------*/
void seSetLcdInkPixel(long x, long y, DWORD color)
{
DWORD StartLinearAddress;
unsigned regDisplayMode;
unsigned width;
StartLinearAddress = seGetLcdInkLinearAddress();
/*
** If in rotate90 mode, get out of rotate90 mode.
*/
regDisplayMode = seReadRegByte(REG_DISPLAY_MODE);
seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode & ~0x40);
width = (seReadRegByte( REG_LCD_HDP ) + 1) * 8;
/*
** Each line in the ink layer has the same number of pixels as the
** physical width of the display. Since the ink layer is in 2 bpp
** mode, there are width/4 bytes per line.
*/
_Pixel2bpp( StartLinearAddress, width/4, x, y, color);
seWriteRegByte(REG_DISPLAY_MODE, regDisplayMode);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -