?? neo.h
字號:
/*插件類別:移植插件
插件版本: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 + -