?? neo.h
字號:
/*NEO SDK V2.1.41 For DOS
Copyleft Cker Home 2003-2005.
Open Source Obey NEO_PL.TXT.
http://neo.coderlife.net
ckerhome@yahoo.com.cn
文件名稱 : neo.h
摘 要 : 本頭文件包含了NEO SDK里有關系統初使化函數、結構、全局變量的聲明及定義
當前版本 : V0.39
作 者 : 董凱
完成日期 : 2005.7.2
取代版本 : V0.37
原 作 者 : 董凱
完成日期 : 2004.5.16
*/
#ifndef NEO_H
#define NEO_H
#if 1
#define MSVC15
#endif
#ifdef __cplusplus
#ifdef MSVC15
#include <memory.h>
#define inportb(port) _asm{inb dx,port}
#else
#include <mem.h>
#endif
#include <string.h>
#include <dir.h>
#endif
#include <conio.h>
#include <dos.h>
#include <fcntl.h>
#include <io.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
/*以下一部分是NEO默認禁用的一些功能例程,NEO禁用它們并不代表不支持這些功能
而是出于對最后生成執行文件大小的考慮。所以用“編譯開關”將一些不常用或較耗
內存的部分例程禁用了,比如不常用的鼠標硬件光標、較占內存的NEO系統調色板、
尚未完成的位圖傳輸等等。當然,若你想恢復對它們的支持以便使用也是非常簡單的
你只要在#include "neo.h"之前加上開啟該功能的“編譯開關”。比方說如果你想寫
的不是普通圖形程序而是象游戲之類的“高級”圖形程序,你可能就需要播放音頻文
件的功能,而音頻例程是NEO默認禁用的,你可以在#include "neo.h"前邊加上啟用
音頻例程的“編譯開關”#define NEO_sound_used來開啟對其的支持。詳情可以參考
NEO的使用文檔中的“減小你的可執行文件體積”一節*/
/*NEO默認不使用繪圖模式(譬如XOR_PUT等等)*/
#ifndef NEO_draw_mode_used
#define NEO_draw_mode_unused
#endif
/*NEO默認不載入NEO的系統調色板*/
#ifndef NEO_sys_pal_used
#define NEO_sys_pal_unused
#endif
#ifdef MSVC15
unsigned char inb(unsigned short port)
{ unsigned char tmp;
_asm{
push dx;
mov dx,port;
xor ax,ax;
in al,dx;
mov tmp,al;
}
return tmp;
}
#define inportb(port) inb(port)
#define peekb(a,b) (*((char far*)MK_FP((a),(b))))
#endif
/*包含所有的NEO頭文件*/
#include "nerror.h" /*錯誤報告及拋出功能*/
#include "ndraw.h" /*顯卡硬件底層處理*/
#include "n2d.h" /*基本圖形函數*/
#include "nword.h" /*文字輸出*/
#define NEO_VERSION 2
#define NEO_BETA 1
#define NEO_SUB_VERSION 41
#define NEO_VERSION_STR "2.1.41"
#define NEO_DATE_STR "2005/07/02"
/*yyyymmdd*/
#define NEO_DATE 20050702L
extern char neo_id[] = NEO_VERSION_STR;
extern char neo_date[] = NEO_DATE_STR;
char neo_init(void);
void neo_exit(void);
char neo_init(void)
{
union REGS in,out;
struct SREGS segs;
struct vbe_info_t vbe_info;
#ifndef NEO_palette_unused
RGB24 black_rbg = {0,0,0};
int i;
#endif
char far *vbeinfo = (char far *)&vbe_info;
in.x.ax = 0x4F00;
in.x.di = FP_OFF(vbeinfo);
segs.es = FP_SEG(vbeinfo);
int86x(0x10, &in, &out, &segs);
if (stricmp(vbe_info.VESA_signature, "VESA") != 0)
{
#ifndef NEO_sys_report_error_unused
Errinfo_t error = {"neo_init", N_NOT_VESA_CARD, 1};
throw_error(error);
#endif
return (g_vbe_sub_ver = -1);
}
g_vbe_version = vbe_info.VBE_version >> 8;
g_vbe_sub_ver = vbe_info.VBE_version & 0xF;
g_total_vram = vbe_info.total_memory;
#ifndef NEO_palette_unused
for (i=0; i<256; i++)
g_black_palette[i] = black_rbg;
#endif
atexit(neo_exit);
mkdir("neotemp");
return 0;
}
void neo_exit(void)
{
#ifndef NEO_palette_unused
set_dac_size(6);
#endif
set_vbe_mode(3);
/*puts("\nExiting.Please wait...");*/
fcloseall();
system("del NEOTEMP\\*.$$$");
unlink("c:\\neo.vbs");
}
/*函數功能: 與硬件條件無關的高級延時函數. *
*參數說明: delay: 延時量 *
*返回說明: 無. *
*備 注: 由于此函數能產生與具體硬件條件無關的時間 *
* 間隔,因此是庫函數delay()的理想替代者. */
void adv_delay(long delay)
{
unsigned int far *clock = (unsigned int far *)0x0000046CL;
unsigned int now;
now = *clock;
while (abs(*clock - now) < delay);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -