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

📄 neo.h

📁 NEO SDK是一个跨平台的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操 作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是
💻 H
📖 第 1 页 / 共 3 页
字号:
/*插件类别:移植插件 
插件版本:V0.32
最后更新:2006/03/03
创建日期:2005/09/25
插件描述:将ALLEGRO进行了一次轻量级封装,让ALLEGRO可以直接编译运行NEO程序
推荐在DEV-CPP + ALLEGRO下使用*/

#ifndef  NEO_H
#define  NEO_H

#ifdef __cplusplus
#include <mem.h>
#include <string.h>
#include <dir.h>
#endif

#include <conio.h>
#include <dos.h>
#include <fcntl.h>
#include <io.h>
#include <malloc.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <allegro.h>


typedef struct                 /* can be either */
{
   int height;
   int width_ex;
   int height_ex;
   FILE *font;
}Font;
Font *g_font;

typedef struct Errinfo_T
{  /*错误位置*/
   char *errloc; /*出错时程序流程所在函数的函数名.*/
   /*错误备注*/
   char *errtag;
   char  handle; /*为1时程序继续执行,否则程序退出*/
}Errinfo_t;


char set_vbe_mode(int mode);
char screen_rect(int left, int top, int right, int bottom);
void rect_store(void);
void rect_restore(void);
int  surface_alloc(unsigned sur_num, int clear_flag);
int  surface_realloc(unsigned sur_num, int flag);
BITMAP *work_surface_handle(void);
int  set_work_surface(unsigned sur_num);
int  flip_surface(unsigned sur_num);
void flip(void);
void set_neo_color(void);
BITMAP *get_str_bitmap(char *string, int fc, int bc);
void (*text_callback)() = NULL;


/* ===================================== NEO INIT ===================================== */
#ifndef  NEO_error_unused
#ifndef  NEO_chinese_err_info_unused
#define  ERR_LOG_FILE       "错误日志.err"
/*用户可以在这里加上自己定义的错误信息(中文)*/
/*You can add your own error information at here(in chinese)*/
#define  N_NEO_NOT_INIT     "NEO未初始化"
#define  NO_MEMORY          "内存不足"
#define  CREAT_FILE_FALSE   "创建文件失败"
#define  NOT_INIT_ADVMOUSE  "高级鼠标未初始化"
#define  ERR_VIDEO_MODE     "不合适的显示模式"
#define  ERR_FILE_TYPE      "错误文件类型"
#define  NO_FILE            "找不到文件"
#define  NOT_INIT_MOUSE     "鼠标未安装"
#define  SOURCE_FILE_BAD    "源文件错误"
#define  DEST_FILE_BAD      "目标文件错误"
#define  WRONG_FORMAT       "错误文件格式"
#define  WRONG_SB_SETTING   "声卡配置错误"
#define  N_NOT_VESA_CARD    "非VESA标准显卡"
#define  UNDEFINED_ERROR    "未定义错误"

#else
#define  ERR_LOG_FILE       "neoerror.err"

/*用户可以在这里加上自己定义的错误信息(英文)*/
/*You can add your own error information at here(in english)*/
#define  N_NEO_NOT_INIT     "NEO not init"
#define  NO_MEMORY          "No mem"
#define  CREAT_FILE_FALSE   "Can't Creat file"
#define  NOT_INIT_ADVMOUSE  "Adv-mouse has not ready"
#define  ERR_VIDEO_MODE     "Not suitable video mode"
#define  ERR_FILE_TYPE      "Err file type"
#define  NO_FILE            "Can't find file"
#define  NOT_INIT_MOUSE     "Mouse was not installed"
#define  SOURCE_FILE_BAD    "source file bad"
#define  DEST_FILE_BAD      "dest file bad"
#define  WRONG_FORMAT       "Wrong file format"
#define  WRONG_SB_SETTING   "Wrong SB settings"
#define  N_NOT_VESA_CARD    "NOT VESA Standard VideoCard"
#define  UNDEFINED_ERROR    "Undefined error"
#endif
#endif

#define  NEO_VERSION       2
#define  NEO_BETA          0
#define  NEO_SUB_VERSION   52
#define  NEO_VERSION_STR   "2.0.52 for DEV"
#define  NEO_DATE_STR      "2006/01/04"
                           /*yyyymmdd*/
#define  NEO_DATE          20060104L

char neo_id[] = NEO_VERSION_STR;
char neo_date[] = NEO_DATE_STR;

#ifndef MIN
#define MIN(x,y)     (((x) < (y)) ? (x) : (y))
#endif
#ifndef MAX
#define MAX(x,y)     (((x) > (y)) ? (x) : (y))
#endif
#ifndef MID
#define MID(x,y,z)   MAX((x), MIN((y), (z)))
#endif

#ifndef ABS
#define ABS(x)       (((x) >= 0) ? (x) : (-(x)))
#endif
#ifndef SGN
#define SGN(x)       (((x) >= 0) ? 1 : -1)
#endif 
#define neo_exit()  allegro_exit()
#define get_err_method()    err_method(-1)
#define max_x()     SCREEN_W
#define max_y()     SCREEN_H
#define clear_vram_on()
#define clear_vram_off()
#define get_current_page()  0
#define get_total_vram()    64
#define get_total_surfaces()    g_total_surfaces
#define get_vbe_mode()  0
#define get_page_num()  0
#define set_display_start(fir_scan_dot, fir_scan_line)
#define set_draw_mode(draw_mode)
#define n_screen(left, top, right, bottom) screen_rect(left, top, right, bottom)
#define set_neo_palette() set_neo_color()
#define _set_palette_range(pal_buf, from, to, vsync_flag)   set_palette_range(pal_buf, from, to, vsync_flag)
#define _get_palette_range(pal_buf, from, to)   get_palette_range(pal_buf, from, to)
#define _set_palette(pal_buf)   set_palette(pal_buf)
#define _get_palette(pal_buf)   get_palette(pal_buf)
#define set_dac_size(size)
#define get_dac_size()  6
#define _fade_in(p, speed)  fade_in(p, speed)
#define _fade_out(speed)    fade_out(speed)
#define set_text_blank(blank)  g_blank  = blank
#define text_mode(mode)        g_text_bg = mode
#define set_str_color(color)   g_str_color = color
#define get_str_color()        g_str_color
#define cn_s16_out(str, x, y)   set_cn_size(S16X16);put_chinese(str, x, y, g_str_color, 1)
#define cn_s24_out(str, x, y)   set_cn_size(S24X24);put_chinese(str, x, y, g_str_color, 1)
#define get_cn_size()   g_ilimit
#define en_out(c, cx, cy)   asc_out(c, cx, cy, g_str_color)
#define install_timer(new_1ch_int)  install_timer()
#define _install_timer()    install_timer()
#define change_timer(hz)
#define LOOP_END_OF_TIMER()
#define hide_mouse()    show_mouse(NULL);
#define get_mouse_x()   mouse_x
#define get_mouse_y()   mouse_y
#define get_mouse_z()   mouse_z
#define get_click()  mouse_b
#define set_mouse_focus(x, y)   set_mouse_sprite_focus(x, y)
#define mouse_act() get_click() == 0?0 : 1
#define _getch()    readkey()
#define kbhit() keypressed()
#define get_asc() readkey()&&0XFF
#define get_scan()  readkey()>>8
#define _get_asc() readkey()&&0XFF
#define _get_scan()  readkey()>>8
#define play_sample_ex play_sample

/* ============================Graphics modes of NEO SDK ============================ */
#define  VBE320X200X256   0X13
#define  VBE320X240X256   0X14
#define  VBE640X400X256   0X100
#define  VBE640X480X256   0X101
#define  VBE800X600X256   0X103
#define  VBE1024X768X256  0X105
#define  VBE1280X1024X256 0X107

#define  VBE320X200X32K   0X10D
#define  VBE320X240X32K   0X15
#define  VBE640X480X32K   0X110
#define  VBE800X600X32K   0X113
#define  VBE1024X768X32K  0X116
#define  VBE1280X1024X32K 0X119

#define  VBE320X200X64K   0X10E
#define  VBE320X240X64K   0X16
#define  VBE640X480X64K   0X111
#define  VBE800X600X64K   0X114
#define  VBE1024X768X64K  0X117
#define  VBE1280X1024X64K 0X11A

#define  VBE320X200X16M   0X10F
#define  VBE320X240X16M   0X17
#define  VBE640X480X16M   0X112
#define  VBE800X600X16M   0X115
#define  VBE1024X768X16M  0X118
#define  VBE1280X1024X16M 0X11B

#define  g_screen_h SCREEN_W      
#define  g_screen_v SCREEN_H

#define  _UP_ROLL      0
#define  _DOWN_ROLL    1
#define  _LEFT_ROLL    2
#define  _RIGHT_ROLL   3

#define  _WHITE   0xf
#define  _BLACK   0

#ifndef N_MAX_SURFACE_NUM
#define N_MAX_SURFACE_NUM   64
#endif

#define N_FULLSCREEN  TRUE
#define N_WINDOWED    FALSE
BITMAP *g_surface_ptr[N_MAX_SURFACE_NUM]; 

#define  S12X12   12
#define  S16X16   16
#define  S24X24   24
#define  S32X32   32
#define  S48X48   48

#define  N_TEXT_L_SLANT 1
#define  N_TEXT_R_SLANT -1

#ifndef _FONT_PATH
#define _FONT_PATH ""
#endif

#ifndef _FONT_12
#define _FONT_12 "hzk12"
#endif

#ifndef _FONT_16
#define _FONT_16 "hzk16"
#endif

#ifndef _FONT_24
#define _FONT_24 "hzk24"
#endif

/* dark colors */
#define _BLACK        makecol(0, 0, 0)
#define _BLUE         makecol(0, 0, 128)
#define _GREEN        makecol(0, 128, 0)
#define _CYAN         makecol(0, 128, 128)
#define _RED          makecol(128, 0, 0)
#define _MAGENTA      makecol(128, 0, 128)
#define _BROWN        makecol(128, 0, 64)
#define _LIGHTGRAY    makecol(192, 192, 192)
#define _DARKGRAY     makecol(128, 128, 128)
/* light colors */
#define _LIGHTBLUE    makecol(0, 0, 255)
#define _LIGHTGREEN   makecol(0, 255, 0)
#define _LIGHTCYAN    makecol(0, 255, 255)
#define _LIGHTRED     makecol(255, 0, 0)
#define _LIGHTMAGENTA makecol(255, 0, 255)
#define _YELLOW       makecol(255, 255, 0)
#define _WHITE        makecol(255, 255, 255)

#if defined NEO_error_unused
#define NEO_sys_report_error_unused
#endif     
/*===============NEO的私有全局变量(请勿擅自俢改,以免造成不可预料的错误!)================*/
char g_green_mask  = 0;
char g_green_bit   = 0;
char g_color_depth = 0;    /*记录当前图形模式的色深,为0表示非图形模式*/
char g_color_byte  = 0;    /*记录当前图形模式每个点占用的字节数*/
int  g_clear_vram  = 0;    /*清除显存标志,0表示每次显示模式的改变都同步清除显存原有内容*/
int  g_cur_vbe_page= 0;    /*当前所处的显示页*/
long g_screen_size;        /*记录当前图形模式的屏幕面积*/
char g_work_surface = 0;   /*当前工作页*/
char g_look_surface = 0;   /*当前可视页*/
char g_vbe_version =  3;   /*VBE的主版本号*/
char g_vbe_sub_ver =  0;   /*VBE的副版本号*/
char g_total_surfaces =N_MAX_SURFACE_NUM;  /*记录能创建的后台页的总量*/
char g_alloc_surface = 0;  /*已经申请的后台页数*/
char g_reserved_page = 1;  /*保留页面张数*/
char g_flip_flag = 0;      /*换页状态标志,用来与鼠标例程通讯*/
unsigned g_sl_offset  = 0;
unsigned g_total_vram = 0; /*总显存数*/
unsigned g_blit_fix;       /*NEO目前用于blit()函数的临时变量*/
/*=======================================================================================*/
int  g_frt_color = 1;
int  g_tptcolor  = 0;     /*本开发包指定透明色(Transparent color)*/
char g_draw_mode = 0;     /*绘图模式,分为COPY_PUT,XOR_PUT,OR_PUT,AND_PUT,NOT_PUT,与TC中Graphics的绘图模式意义相同*/
/*以下4个变量用来支持裁剪输出,分别代表裁剪区域的左上角及右下角坐标(用户通过screen()函数间接设置)*/
int  g_rect_left;
int  g_rect_right;
int  g_rect_top;
int  g_rect_bottom;
int  g_temp_top;
int  g_temp_left;
int  g_temp_right;
int  g_temp_bottom;
double  g_time_total  = 0.0;
char g_dac_size_fix = 2;    /*记录DAC调色板宽度修正值,由8-当前DAC宽度得来,默认为2*/

char g_slant = 0;
int  g_str_color = 0xff15;
int  g_text_bg = -1;
int  g_ilimit = 16;
int  g_jlimit = 2;
int  g_blank = 1;
int  g_hz_size = 32;       /*一个字占用的字节数*/
int  g_hz_width= 16;
char g_start = 0;          /*汉字在字库中的起始区号*/
char *g_hz_font = _FONT_16; /*字库名*/

int  g_mode = TRUE; /*全屏标志,为FALSE时使用窗口模式,否则使用全屏模式*/

void abort_on_error(const char *message){
   if (screen != NULL)
   set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);

   allegro_message("%s.\nLast Allegro error `%s'\n",
                    message, allegro_error);
   exit(-1);
}

int  neo_init(){
   /*char *tem = (char *)malloc(strlen(_FONT_PATH) + strlen(_FONT_16) + 2); 
  
   g_font = (Font *)malloc(sizeof(Font));
   if (g_font && tem)
   {
      strcpy(tem, _FONT_PATH);
      g_hz_font = strcat(tem, _FONT_16);
      g_font->height = 8;
      g_font->width_ex  = 16;
      g_font->height_ex = 16;
      g_font->font = fopen(g_hz_font, "rb+");      
   } */      
   return allegro_init();
}

char err_method(int method){
   static int oldmeth1 = 3;
   if (method >= 0)
   {
      oldmeth1 = method;
   }

   return oldmeth1;
}

void neo_warn(void){
    printf("\a");
}

void throw_error(Errinfo_t err){
   FILE *errlog_p;
   static char fir_run;
   char method = err_method(-1);

   if (method & 1)   /*声音报警*/
   {
      neo_warn();
   }
   if (method & 2) /*写入错误日志*/
   {
      errlog_p = fopen(ERR_LOG_FILE, "a");

      if (!fir_run)
      {
         fprintf(errlog_p, "      {ERROR LOG}\n");
         fprintf(errlog_p, "{NEO SDK V2.1.45 To Allegro}\n");
         fprintf(errlog_p, ">>RUN START\n");
         fir_run = 10;
      }
      fprintf(errlog_p, ">>[Error   in] : %s().\n", err.errloc);
      fprintf(errlog_p, ">>[Error info] : %s.\n\n", err.errtag);
      fclose(errlog_p);
   }
   if (method & 4) /*在屏幕上显示*/
   {
      fprintf(stderr, "[Error   in] : %s().\n", err.errloc);
      fprintf(stderr, "[Error info] : %s.\n\n", err.errtag);
   }
   if (err.handle != 1)
   {
      exit(err.handle);
   }
}

void set_window_mode(int mode){
    g_mode = mode;
}

int get_window_mode(void){
    return g_mode? GFX_AUTODETECT : GFX_AUTODETECT_WINDOWED;
}

char set_video_mode(int w, int h, int bpp, int refresh, int flags){
    set_color_depth(bpp);
    request_refresh_rate(refresh);
    if (set_gfx_mode(get_window_mode(), w, h, 0, 0) != 0)
    {
       abort_on_error("Couldn't set graphic mode!");
       return FALSE;
    }
    g_rect_left  = g_rect_top   = 0;
    g_rect_right = g_screen_h - 1;
    g_rect_bottom= g_screen_v - 1;
    g_surface_ptr[0] = screen;   
    return TRUE;
}

char set_vbe_mode(int mode){
    int  screen_wid;
    int  screen_hig;
    char color_dpt;
    switch (mode)
    {
        case VBE320X200X256:   
            color_dpt = 8;
            screen_wid = 320;
            screen_hig = 200;
            break;
        case VBE320X240X256:        
            color_dpt = 8;
            screen_wid = 320;
            screen_hig = 240;
            break;            
        case VBE640X400X256:        
            color_dpt = 8;
            screen_wid = 640;
            screen_hig = 400;
            break;
        case VBE640X480X256:        
            color_dpt = 8;
            screen_wid = 640;
            screen_hig = 480;
            break;
        case VBE800X600X256:        
            color_dpt = 8;
            screen_wid = 800;
            screen_hig = 600;
            break;
        case VBE1024X768X256:        
            color_dpt = 8;
            screen_wid = 1024;
            screen_hig = 768;
            break;
        case VBE1280X1024X256:        
            color_dpt = 8;
            screen_wid = 1280;
            screen_hig = 1024;
            break;

        case VBE320X200X32K:        
            color_dpt = 15;
            screen_wid = 320;
            screen_hig = 200;
            break;
        case VBE320X240X32K:        
            color_dpt = 15;
            screen_wid = 320;
            screen_hig = 240;
            break;
        case VBE640X480X32K:        

⌨️ 快捷键说明

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