⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 neo.h

📁 NEO SDK是一个跨平台的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操 作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是
💻 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 + -