efont8x6.c

来自「深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心」· C语言 代码 · 共 476 行 · 第 1/2 页

C
476
字号
    0X00,0X00,0X00,0X00,0X1F,0X18,0X18,0X18,
    0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
    0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,
    0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,0XF0,
    0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,0X0F,
    0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,
    0X00,0X00,0X76,0XDC,0XC8,0XDC,0X76,0X00,
    0X00,0X78,0XCC,0XF8,0XCC,0XF8,0XC0,0XC0,
    0X00,0XFC,0XCC,0XC0,0XC0,0XC0,0XC0,0X00,
    0X00,0XFE,0X6C,0X6C,0X6C,0X6C,0X6C,0X00,
    0XFC,0XCC,0X60,0X30,0X60,0XCC,0XFC,0X00,
    0X00,0X00,0X7E,0XD8,0XD8,0XD8,0X70,0X00,
    0X00,0X66,0X66,0X66,0X66,0X7C,0X60,0XC0,
    0X00,0X76,0XDC,0X18,0X18,0X18,0X18,0X00,
    0XFC,0X30,0X78,0XCC,0XCC,0X78,0X30,0XFC,
    0X38,0X6C,0XC6,0XFE,0XC6,0X6C,0X38,0X00,
    0X38,0X6C,0XC6,0XC6,0X6C,0X6C,0XEE,0X00,
    0X1C,0X30,0X18,0X7C,0XCC,0XCC,0X78,0X00,
    0X00,0X00,0X7E,0XDB,0XDB,0X7E,0X00,0X00,
    0X06,0X0C,0X7E,0XDB,0XDB,0X7E,0X60,0XC0,
    0X38,0X60,0XC0,0XF8,0XC0,0X60,0X38,0X00,
    0X78,0XCC,0XCC,0XCC,0XCC,0XCC,0XCC,0X00,
    0X00,0XFC,0X00,0XFC,0X00,0XFC,0X00,0X00,
    0X30,0X30,0XFC,0X30,0X30,0X00,0XFC,0X00,
    0X60,0X30,0X18,0X30,0X60,0X00,0XFC,0X00,
    0X18,0X30,0X60,0X30,0X18,0X00,0XFC,0X00,
    0X0E,0X1B,0X1B,0X18,0X18,0X18,0X18,0X18,
    0X18,0X18,0X18,0X18,0X18,0XD8,0XD8,0X70,
    0X30,0X30,0X00,0XFC,0X00,0X30,0X30,0X00,
    0X00,0X76,0XDC,0X00,0X76,0XDC,0X00,0X00,
    0X38,0X6C,0X6C,0X38,0X00,0X00,0X00,0X00,
    0X00,0X00,0X00,0X18,0X18,0X00,0X00,0X00,
    0X00,0X00,0X00,0X00,0X18,0X00,0X00,0X00,
    0X0F,0X0C,0X0C,0X0C,0XEC,0X6C,0X3C,0X1C,
    0X78,0X6C,0X6C,0X6C,0X6C,0X00,0X00,0X00,
    0X70,0X18,0X30,0X60,0X78,0X00,0X00,0X00,
    0X00,0X00,0X3C,0X3C,0X3C,0X3C,0X00,0X00,
    0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
*/
};

static DWORD ROM8x6_Init(void);
static BOOL ROM8x6_Deinit( DWORD dwData );
static BOOL ROM8x6_InstallFont( DWORD dwData, LPCTSTR lpszPathName );
static HANDLE ROM8x6_CreateFont( DWORD dwData, const LOGFONT *lplf );
static BOOL ROM8x6_DeleteFont( HANDLE );
static int ROM8x6_MaxHeight( HANDLE );
static int ROM8x6_MaxWidth( HANDLE );
static int ROM8x6_WordLength( HANDLE, const BYTE FAR* lpText );
static int ROM8x6_WordHeight( HANDLE, WORD aWord );
static int ROM8x6_WordWidth( HANDLE, WORD aWord );
static int ROM8x6_WordMask( HANDLE, const BYTE FAR* lpText, _LPBITMAPDATA );
static int ROM8x6_TextWidth( HANDLE, const BYTE FAR* lpText, int aLimiteWidth );
static int ROM8x6_TextHeight( HANDLE, const BYTE FAR* lpText, int aLineWidth );
static const BYTE FAR* ROM8x6_NextWord( HANDLE, const BYTE FAR* lpText );


static void _DeleteObject( void );
static int _Resume();

//    DWORD (*lpInit)(void);
//    void  (*lpDeinit)( DWORD dwData );
//	BOOL (*lpInstallFont)( DWORD dwData, LPCTSTR lpszPathName );
//	HANDLE (*lpCreateFont)( DWORD dwData, CONST LOGFONT *lplf );
//	HANDLE (*lpDeleteFont)( HANDLE );
  //  int (*lpMaxHeight)( HANDLE );
    //int (*lpMaxWidth)( HANDLE );
    //int (*lpWordLength)( HANDLE, const BYTE FAR* lpText );
    //int (*lpWordHeight)( HANDLE, WORD wWord );
    //int (*lpWordWidth)( HANDLE, WORD wWord );
    //int (*lpWordBitmap)( HANDLE, const BYTE FAR* lpText, _LPBITMAPDATA );
    //int (*lpTextWidth)( HANDLE, const BYTE FAR* lpText, int iLimiteWidth );
    //int (*lpTextHeight)( HANDLE, const BYTE FAR* lpText, int iLineWidth );
    //const BYTE FAR* (*lpNextWord)( HANDLE, const BYTE FAR* );

const _FONTDRV FAR _ROM8x6Drv = {
//                      OBJ_FONT,
                      ROM8x6_Init,
                      ROM8x6_Deinit,
	                  ROM8x6_InstallFont,
	                  ROM8x6_CreateFont,
	                  ROM8x6_DeleteFont,
                      ROM8x6_MaxHeight,
                      ROM8x6_MaxWidth,
                      ROM8x6_WordLength,
                      ROM8x6_WordHeight,
                      ROM8x6_WordWidth,
                      ROM8x6_WordMask,
                      ROM8x6_TextWidth,
                      ROM8x6_TextHeight,
                      ROM8x6_NextWord 
};

//const _FONT _ROM8x6Font = { 
//	{ OBJ_FONT | OBJ_FREE_DISABLE, NULL, NULL, NULL, 0 },
//	1, 
//	(HANDLE)1,  
//	(_LPFONTDRV)&_ROM8x6Drv };

//HFONT hEngFont8x6 = (HFONT)&ROM8x6Font;
//const _FONT * _lpROM8x6Font;


#define MK_FARP( seg, ofs ) ( (void * )MAKELONG( ofs, seg ) )

#define IS_CHINESE( lpText ) ( (*(lpText) & 0x80) && ( *((lpText) + 1) & 0x80 ) )
#define IS_TEXT_MARK( v ) ( (v) == TEXT_SOFT_BREAK || (v) == TEXT_KEY_BREAK || (v) == TEXT_EOF )
#define _GET_CHINESE( lpText ) ( (((WORD)*(lpText)) << 8) | *((lpText) + 1) )
#define _GET_ENGLISH( lpText ) ( *(lpText) )
#define FONT_HEIGHT 8
#define FONT_WIDTH 8

// define all function

static void _DeleteObject( void )
{
}

static int _Resume( void )
{
    return 1;
}

static DWORD ROM8x6_Init( void )
{
   //_Resume();

	return 1;
}

static BOOL ROM8x6_Deinit( DWORD dwData )
{
    _DeleteObject();
	return TRUE;
}

BOOL ROM8x6_InstallFont( DWORD dwData, LPCTSTR lpszPathName )
{
	return FALSE;
}

HANDLE ROM8x6_CreateFont( DWORD dwData, const LOGFONT *lplf )
{
	return (HANDLE)1;
}

BOOL ROM8x6_DeleteFont( HANDLE handle )
{
	return TRUE;
}

static int ROM8x6_MaxHeight( HANDLE handle )
{
    return 8;
}

static int ROM8x6_MaxWidth( HANDLE handle )
{
    return 6;
}

static int ROM8x6_WordHeight( HANDLE handle, WORD aWord )
{
    return 8;
}

static int ROM8x6_WordWidth( HANDLE handle, WORD aWord )
{
    return 6;
}

static int ROM8x6_WordMask( HANDLE handle, const BYTE FAR* lpText, _LPBITMAPDATA lpMask )
{
    int iPosition;
    iPosition=*lpText-'0';
    if (iPosition<0||iPosition>=10)
       iPosition=10; // This is Blank
    iPosition*=8;

    lpMask->bmWidth = 6;
    lpMask->bmHeight = 8;
    lpMask->bmWidthBytes = 1;
    lpMask->bmBits = (BYTE *)&eng8x8Mask[iPosition];
    return 1;
}

static int ROM8x6_TextWidth( HANDLE handle, const BYTE FAR* lpText, int len )
{
   int  w = 0;

   if( lpText )
   {
       while( !IS_TEXT_MARK( *lpText ) && *lpText && len )
       {
           w += 6;
           lpText++;
           if( len > 0 )
               len--;
       }
   }
   return w;
}

static int ROM8x6_TextHeight( HANDLE handle, const BYTE FAR* lpText, int aLineWidth )
{
    int h = 0, w = 0;

    if( lpText )
    {
        h = FONT_HEIGHT;
        do
        {
            if( (aLineWidth > 0 && w + 6 >= aLineWidth) ||
                IS_TEXT_MARK( *lpText ) )
            {
                h += 8;
                w = 0;
            }
            else
                w += 6;
            lpText++;
        }while( *lpText );
    }
    return h;
}

const BYTE FAR* ROM8x6_NextWord( HANDLE handle, const BYTE FAR* lpText )
{
    return (lpText + 1);
}

int ROM8x6_WordLength( HANDLE handle, const BYTE FAR* lpText )
{
     int l = 0;
     while( *lpText++ )l++;
     return l;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?