/////////////////////////////////////////////////////////////////
// __ ____ _______ ______ //
// /\ \ / / / /\ ____\ / _____\ //
// \ \ \ / / / \ \ \___/ /\ \____/ //
// \ \ \ / / / \ \ \_____ \ \ \________ //
// \ \ \ / / / \ \ ____\ \ \ _______ \ //
// \ \ \ / / / \ \ \___/ \/_______/\ \ V //
// \ \ \_/ / \ \ \______ ____\_\ \ E S //
// \ \___/ \ \_______\ /\_______/ V A E //
// \/__/ \/_______/ \_______/ S A //
///////////////////////////////////////////////////////////// //
/////// 分辨率----位数----色深--------页数-----显存需求量 // //
///////////////////////////////////////////////////////////// //
// 640*480*8Bit----256-Colors----5-Pages-----512K //
// 640*480*16Bit---64K-Colors----10-Pages----1M //
// 800*600*8Bit----256-Colors----8-Pages-----512K //
// 800*600*16Bit---64K-Colors----16-Pages----1M //
// 1024*768*8Bit---256-Colors----12-Pages----1M //
// 1024*768*16Bit--64K-Colors----24-Pages----2M //
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <string.h>
#include <conio.h>
#define FALSE 0
#define TRUE 1
#define SOLID_FILL 1 // fills area in solid fill color
#define S8X8 8 // 8*8 获取ASCII ROM字符集首地址
#define S14X8 14 // 14*8 获取ASCII ROM字符集首地址
#define S16X8 16 // 16*8 获取ASCII ROM字符集首地址
#define VBE800X600X256 0x103
#define VRAM_GRAPH_800X600X256(x,y) (((unsigned long)y<<9L)+((unsigned long)y<<8L)+((unsigned long)y<<5L)+((unsigned long)(x)))
#define DIALOG_TITLE_BK_COLOR LIGHTBLUE // 对话框标题条背景颜色
#define DIALOG_TITLE_TEXT_COLOR BLACK // 对话框标题条文本颜色
#define DIALOG_TEXT_BK_COLOR LIGHTGRAY // 对话框背景颜色
typedef unsigned int BOOL; // 布尔类型
typedef unsigned int XMS_HANDLE; // XMS句柄类型
//////////////////////////////////////////////////////////////////////////////
/////XMS规范使用扩充内存所用的数据结构
//////////////////////////////////////////////////////////////////////////////
typedef struct XMS
{
unsigned long length; // 需传输的数据字节数(32位)
XMS_HANDLE source_handle; // 源数据块句柄
unsigned long source_offset; // 源偏移量(32位)
XMS_HANDLE dest_handle; // 目标数据块句柄
unsigned long dest_offset; // 目标偏移量(32位)
};
//////////////////////////////////////////////////////////////////////////////
////窗口区域保存结构体
//////////////////////////////////////////////////////////////////////////////
struct GUI_STACK
{
unsigned int x1;
unsigned int y1;
unsigned int x2;
unsigned int y2;
XMS_HANDLE handle; // XMS句柄
};
typedef struct
{
// enum WINDOW_TYPE;
char no;
char *chinese_name;
int number;
char unit;
char *help_name;
union
{
struct
{
int min;
int max;
char dot;
}a;
struct
{
int MENU_min;
int MENU_max;
char *MENU_chinese_name;
}b;
}c;
}BOOT_KING,*BOOT_KING_PTR;
void far (*XMS_Function)(void) = 0L;// XMS服务程序入口地址
XMS_HANDLE xms_handle; // 伪指针
int g_cur_vbe_page = 0;
int GUI_SP = 0; // 弹出式堆栈指针
unsigned char far *ROM_ASCII;
int Back_Color,Fore_Color,Fill_Color;
struct XMS xms;
struct GUI_STACK GUI_Stack[10]; // 弹出式堆栈
int _Cdecl TOP_X1(void);
int _Cdecl TOP_X2(void);
int _Cdecl TOP_Y1(void);
int _Cdecl TOP_Y2(void);
int _Cdecl TOP_Handle(void);
int _Cdecl BOTTOM_X1(void);
int _Cdecl BOTTOM_X2(void);
int _Cdecl BOTTOM_Y1(void);
int _Cdecl BOTTOM_Y2(void);
BOOL _Cdecl Stack_Empty(void);
BOOL _Cdecl Stack_Full(void);
BOOL _Cdecl PUSH_Stack(int x1,int y1,int x2,int y2,XMS_HANDLE handle);
BOOL _Cdecl POP_Stack(void);
void _Cdecl setfillstyle(int __pattern,int color);
void _Cdecl setcolor(int color);
int _Cdecl getcolor(void);
void _Cdecl setbkcolor(int color);
int _Cdecl getbkcolor(void);
int _Cdecl getfillcolor(void);
BOOL _Cdecl XMS_Test(void);
unsigned int _Cdecl XMS_Version(void);
int _Cdecl XMS_Size(void);
BOOL _Cdecl XMS_Alloc(int size);
int _Cdecl XMS_ReAlloc(XMS_HANDLE handle,int resize);
BOOL _Cdecl XMS_Free(XMS_HANDLE handle);
BOOL _Cdecl XMS_Move(struct XMS *xms);
void _Cdecl Write_To_XMS(char *buf,unsigned int size,XMS_HANDLE handle,unsigned long offset);
void _Cdecl Read_From_XMS(char *buf,unsigned int size,XMS_HANDLE handle,unsigned long offset);
void _Cdecl ReadHzkXMS(char *Hzkname);
void _Cdecl HzkFree(void);
void _Cdecl ReadHzkBit(unsigned char *qw,unsigned char *buf);
unsigned char far *Get_ASCII_ROM(unsigned int BX);
unsigned char far *Current_ASCII_ROM(int ch);
void _Cdecl set_vbe_page(int page);
char _Cdecl GetPixel(int x, int y);
void _Cdecl Common_PutPixel(int x,int y,int color);
void _Cdecl PutPixel(int x,int y,int color);
void _Cdecl POPUP_PutPixel(int x,int y,int color);
void _Cdecl puthz(int x,int y,char *p,int color,int d);
void _Cdecl POPUP_puthz(int x,int y,char *p,int color,int d);
void _Cdecl Vline(int x, int y1, int y2);
void _Cdecl POPUP_Vline(int x, int y1, int y2);
void _Cdecl Hline(int x1, int y, int x2);
void _Cdecl POPUP_Hline(int x1, int y, int x2);
void _Cdecl Line(int x1,int y1,int x2,int y2);
void _Cdecl Rectangle(int x1,int y1,int x2,int y2);
void _Cdecl POPUP_Rectangle(int x1,int y1,int x2,int y2);
void _Cdecl Bar(int x1, int y1, int x2, int y2);
void _Cdecl POPUP_Bar(int x1, int y1, int x2, int y2);
void _Cdecl Circle(int c_x, int c_y, int r);
void _Cdecl CircleFill(int x0, int y0, int r);
void _Cdecl InitGraph(void);
void _Cdecl CloseGraph(void);
BOOL _Cdecl Save_Image_XMS(int x1,int y1,int x2,int y2);
void _Cdecl Restore_Image_XMS(void);
/////////////////////////////////////////////////////////////////////////////////////////////////
////测试堆栈是否为空
/////////////////////////////////////////////////////////////////////////////////////////////////
BOOL _Cdecl Stack_Empty(void)
{
if (GUI_SP == 0)
return (TRUE);
return (FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////测试堆栈是否溢出
/////////////////////////////////////////////////////////////////////////////////////////////////
BOOL _Cdecl Stack_Full(void)
{
if (GUI_SP == 3)
return (TRUE);
return (FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////窗口区域及窗口句柄入栈
/////////////////////////////////////////////////////////////////////////////////////////////////
BOOL _Cdecl PUSH_Stack(int x1,int y1,int x2,int y2,XMS_HANDLE handle)
{
if (!Stack_Full())
{
GUI_SP++;
GUI_Stack[GUI_SP].x1 = x1;
GUI_Stack[GUI_SP].y1 = y1;
GUI_Stack[GUI_SP].x2 = x2;
GUI_Stack[GUI_SP].y2 = y2;
GUI_Stack[GUI_SP].handle = handle;
return (TRUE);
}
return (FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////窗口区域及窗口句柄出栈
/////////////////////////////////////////////////////////////////////////////////////////////////
BOOL _Cdecl POP_Stack(void)
{
if (!Stack_Empty())
{
GUI_SP--;
return (TRUE);
}
return (FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈顶.x1
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl TOP_X1(void)
{
return (GUI_Stack[GUI_SP].x1);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈顶.x2
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl TOP_X2(void)
{
return (GUI_Stack[GUI_SP].x2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈顶.y1
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl TOP_Y1(void)
{
return (GUI_Stack[GUI_SP].y1);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈顶.y2
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl TOP_Y2(void)
{
return (GUI_Stack[GUI_SP].y2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈顶.handle
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl TOP_Handle(void)
{
return (GUI_Stack[GUI_SP].handle);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈底.x1
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl BOTTOM_X1(void)
{
return (GUI_Stack[1].x1);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈底.x2
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl BOTTOM_X2(void)
{
return (GUI_Stack[1].x2);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈底.y1
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl BOTTOM_Y1(void)
{
return (GUI_Stack[1].y1);
}
/////////////////////////////////////////////////////////////////////////////////////////////////
////获取栈底.y2
/////////////////////////////////////////////////////////////////////////////////////////////////
int _Cdecl BOTTOM_Y2(void)
{
return (GUI_Stack[1].y2);
}