www.pudn.com > ncdzsrc.rar > osdepend.h


/*************************************************************************** 
 
	osdepend.c 
 
	OS依存の関数用ヘッダ 
 
***************************************************************************/ 
 
#ifndef OSDEPEND_H 
#define OSDEPEND_H 
 
#define OSNAME "Windows" 
 
#define WIN32_LEAN_AND_MEAN 
 
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include "osd_cpu.h" 
#include "win32/win32.h" 
 
 
#ifdef __LP64__ 
#define FPTR unsigned long   /* 64bit: sizeof(void *) is sizeof(long)  */ 
#else 
#define FPTR unsigned int 
#endif 
 
 
#ifndef MAX_DRIVE 
#define MAX_DRIVE 26 
#endif 
 
#if defined(_MSC_VER) && (_MSC_VER >= 1400)  /* Visual C++ 2005 */ 
#define chdir		_chdir 
#define getcwd		_getcwd 
#define mkdir		_mkdir 
#define strdup		_strdup 
#define stricmp		_stricmp 
#define strnicmp	_strnicmp 
#define swab		_swab 
#endif 
 
#if !defined(_MSC_VER) || (_MSC_VER < 1300) /* GCC or Visual C++ 6.0 */ 
#define _aligned_malloc(p, a)	malloc(p) 
#define _aligned_free(p)		free(p) 
#endif 
 
 
/*------------------------------------------------------ 
  関数実行結果の値 
 -----------------------------------------------------*/ 
 
enum 
{ 
	OSD_ERROR = 0, 
	OSD_OK 
}; 
 
 
/*------------------------------------------------------ 
  アプリケーション終了管理 
 -----------------------------------------------------*/ 
 
enum 
{ 
	OSD_EXEC = 0,	// 実行 
	OSD_RESET,		// リセット 
	OSD_RESTART,	// エミュレーションを再起動 
	OSD_REBOOT,		// アプリケーションを再起動 
	OSD_QUIT		// アプリケーションを終了 
}; 
 
int osd_get_app_state(void); 
void osd_set_app_state(int state); 
 
 
/*------------------------------------------------------ 
  画面処理 
 -----------------------------------------------------*/ 
 
#define OSD_SCREEN 1 
 
struct rectangle 
{ 
	int min_x; 
	int max_x; 
	int min_y; 
	int max_y; 
}; 
 
struct osd_bitmap 
{ 
	int width; 
	int height; 
	UINT16 *_private; 
	UINT16 **line; 
}; 
 
extern struct osd_bitmap scrbitmap; 
 
// 初期化、終了 
int  osd_video_init(int width, int height, struct rectangle *rect); 
void osd_video_exit(void); 
 
// 汎用ビットマップ管理 
struct osd_bitmap *osd_alloc_bitmap(int width, int height); 
void osd_free_bitmap(struct osd_bitmap *bitmap); 
 
// スクリーン管理 
int  osd_create_screen(int width, int height); 
void osd_set_screen(int no); 
void osd_free_screen(int no); 
int  osd_copy_screen(int no); 
 
// ディスプレイ管理 
int  osd_create_display(int left, int top, int right, int bottom); 
void osd_close_display(void); 
int  osd_change_display(void); 
 
// パレット管理 
int  osd_register_palette(UINT16 *palette, int size); 
void osd_unregister_palette(UINT16 *palette); 
UINT16 osd_set_palette(int r, int g, int b); 
void osd_get_pen(UINT16 pen, int *r, int *g, int *b); 
UINT16 osd_make_pen(int r, int g, int b); 
 
// 画面更新処理 
int  osd_skip_this_frame(void); 
void osd_update_video(int draw_screen); 
 
 
/*------------------------------------------------------ 
  キーボード処理 
 -----------------------------------------------------*/ 
 
struct KeyboardInfo 
{ 
	unsigned code; 
	unsigned standardcode; 
	const char *name; 
	const char *dispname; 
}; 
 
enum 
{ 
	KEYCODE_A, KEYCODE_B, KEYCODE_C, KEYCODE_D, KEYCODE_E, KEYCODE_F, 
	KEYCODE_G, KEYCODE_H, KEYCODE_I, KEYCODE_J, KEYCODE_K, KEYCODE_L, 
	KEYCODE_M, KEYCODE_N, KEYCODE_O, KEYCODE_P, KEYCODE_Q, KEYCODE_R, 
	KEYCODE_S, KEYCODE_T, KEYCODE_U, KEYCODE_V, KEYCODE_W, KEYCODE_X, 
	KEYCODE_Y, KEYCODE_Z, KEYCODE_0, KEYCODE_1, KEYCODE_2, KEYCODE_3, 
	KEYCODE_4, KEYCODE_5, KEYCODE_6, KEYCODE_7, KEYCODE_8, KEYCODE_9, 
	KEYCODE_0_PAD, KEYCODE_1_PAD, KEYCODE_2_PAD, KEYCODE_3_PAD, KEYCODE_4_PAD, 
	KEYCODE_5_PAD, KEYCODE_6_PAD, KEYCODE_7_PAD, KEYCODE_8_PAD, KEYCODE_9_PAD, 
	KEYCODE_F1, KEYCODE_F2, KEYCODE_F3, KEYCODE_F4, KEYCODE_F5, 
	KEYCODE_F6, KEYCODE_F7, KEYCODE_F8, KEYCODE_F9, KEYCODE_F10, 
	KEYCODE_F11, KEYCODE_F12, 
	KEYCODE_ESC, KEYCODE_TILDE, KEYCODE_MINUS, KEYCODE_EQUALS, KEYCODE_BACKSPACE, 
	KEYCODE_TAB, KEYCODE_OPENBRACE, KEYCODE_CLOSEBRACE, KEYCODE_ENTER, KEYCODE_COLON, 
	KEYCODE_QUOTE, KEYCODE_BACKSLASH, KEYCODE_COMMA, KEYCODE_PERIOD, 
	KEYCODE_SLASH, KEYCODE_SPACE, KEYCODE_INSERT, KEYCODE_DEL, 
	KEYCODE_HOME, KEYCODE_END, KEYCODE_PGUP, KEYCODE_PGDN, KEYCODE_LEFT, 
	KEYCODE_RIGHT, KEYCODE_UP, KEYCODE_DOWN, 
	KEYCODE_SLASH_PAD, KEYCODE_ASTERISK, KEYCODE_MINUS_PAD, KEYCODE_PLUS_PAD, 
	KEYCODE_DEL_PAD, KEYCODE_ENTER_PAD, KEYCODE_PAUSE, 
	KEYCODE_LSHIFT, KEYCODE_RSHIFT, KEYCODE_LCONTROL, KEYCODE_RCONTROL, 
	KEYCODE_LALT, KEYCODE_RALT, KEYCODE_SCRLOCK, KEYCODE_NUMLOCK, KEYCODE_CAPSLOCK, 
 
	KEYCODE_SEMICOLON, KEYCODE_OEM_102, KEYCODE_F13, KEYCODE_F14, KEYCODE_F15, 
	KEYCODE_KANA, KEYCODE_ABNT_C1, KEYCODE_CONVERT, KEYCODE_NOCONVERT, 
	KEYCODE_YEN, KEYCODE_ABNT_C2, KEYCODE_EQUALS_PAD, KEYCODE_PREVTRACK, 
	KEYCODE_ATMARK, KEYCODE_UNDERLINE, KEYCODE_KANJI, KEYCODE_STOP, KEYCODE_AX, 
	KEYCODE_UNLABELED, KEYCODE_NEXTTRACK, KEYCODE_MUTE, KEYCODE_CALCULATOR, 
	KEYCODE_PLAYPAUSE, KEYCODE_MEDIASTOP, KEYCODE_VOLUMEDOWN, KEYCODE_VOLUMEUP, 
	KEYCODE_WEBHOME, KEYCODE_COMMA_PAD, KEYCODE_SYSRQ, KEYCODE_LWIN, 
	KEYCODE_RWIN, KEYCODE_APPS, KEYCODE_POWER, KEYCODE_SLEEP, KEYCODE_WAKE, 
	KEYCODE_WEBSEARCH, KEYCODE_WEBFAVORITES, KEYCODE_WEBREFRESH, KEYCODE_WEBSTOP, 
	KEYCODE_WEBFORWARD, KEYCODE_WEBBACK, KEYCODE_MYCOMPUTER, KEYCODE_MAIL, 
	KEYCODE_MEDIASELECT, KEYCODE_CIRCUMFLEX, 
 
	KEYCODE_NONE = 0x8000, KEYCODE_UNKNOWN = 0xffff 
}; 
 
// 初期化、終了 
int osd_keyboard_init(void); 
void osd_keyboard_exit(void); 
void osd_keyboard_reset(void); 
 
// 入力情報更新 
void osd_poll_keyboard(void); 
 
// キー入力チェック 
int osd_is_key_pressed(int keycode); 
int osd_is_key_pressed_memory(int keycode); 
 
// 汎用コードとコード名文字列の変換 
int osd_get_keycode_by_name(char *name); 
const char *osd_get_keyname_by_code(int code); 
const char *osd_keyboard_get_dispname(int code); 
 
 
/*------------------------------------------------------ 
  ゲームコントローラー処理 
 -----------------------------------------------------*/ 
 
struct JoystickInfo 
{ 
	unsigned code; 
	const char *name; 
	const char *dispname; 
}; 
 
enum 
{ 
	JOY_AXIS_X_NEG, 
	JOY_AXIS_X_POS, 
	JOY_AXIS_Y_NEG, 
	JOY_AXIS_Y_POS, 
	JOY_AXIS_Z_NEG, 
	JOY_AXIS_Z_POS, 
	JOY_AXIS_RX_NEG, 
	JOY_AXIS_RX_POS, 
	JOY_AXIS_RY_NEG, 
	JOY_AXIS_RY_POS, 
	JOY_AXIS_RZ_NEG, 
	JOY_AXIS_RZ_POS, 
	JOY_BUTTON1, 
	JOY_BUTTON2, 
	JOY_BUTTON3, 
	JOY_BUTTON4, 
	JOY_BUTTON5, 
	JOY_BUTTON6, 
	JOY_BUTTON7, 
	JOY_BUTTON8, 
	JOY_BUTTON9, 
	JOY_BUTTON10, 
	JOY_BUTTON11, 
	JOY_BUTTON12, 
	JOY_BUTTON13, 
	JOY_BUTTON14, 
	JOY_BUTTON15, 
	JOY_BUTTON16, 
	JOY_UNKNOWN = 0xffff 
}; 
 
 
// 初期化、終了 
int osd_joystick_init(void); 
void osd_joystick_exit(void); 
void osd_joystick_reset(void); 
 
// ゲームコントローラー割り当て 
void osd_set_joystick(void); 
 
// 入力情報更新 
void osd_poll_joystick(void); 
 
// ボタン入力チェック 
int osd_is_joy_pressed(int keycode); 
int osd_is_joy_pressed_memory(int joycode); 
 
// 汎用コードと内部コードの変換 
int osd_make_internal_joycode(int player, int code); 
int osd_restore_internal_joycode(int code); 
 
// 汎用コードとコード名文字列の変換 
int osd_get_joycode_by_name(char *name); 
const char *osd_get_joyname_by_code(int code); 
const char *osd_joystick_get_dispnamee(int code); 
 
 
/*------------------------------------------------------ 
  サウンド処理 
 -----------------------------------------------------*/ 
 
// オーディオストリーム操作 
int osd_start_audio_stream(void); 
void osd_stop_audio_stream(void); 
int osd_update_audio_stream(INT16 *buffer); 
 
// オーディオ有効/無効切り替え 
void osd_sound_enable(int enable_it); 
 
// メニューの移動音(WAV)再生用。なくても問題なし 
void osd_play_wav(unsigned char *wav); 
 
 
/*------------------------------------------------------ 
  ファイル及びドライブ操作 
 -----------------------------------------------------*/ 
 
enum { 
	OSD_DRIVE_UNKNOWN = 0, 
	OSD_DRIVE_NOTFOUND, 
	OSD_DRIVE_REMOVABLE, 
	OSD_DRIVE_FIXED, 
	OSD_DRIVE_NETWORK, 
	OSD_DRIVE_CDROM, 
	OSD_DRIVE_RAMDISK, 
	OSD_DRIVE_MAX 
}; 
 
int osd_file_exist(const char *path); 
int osd_mkdir(const char *path); 
int osd_get_drive_type(int drive); 
int osd_drive_is_ready(int drive); 
int osd_get_tray_state(int drive); 
 
 
/*------------------------------------------------------ 
  CDDA処理 
 -----------------------------------------------------*/ 
 
// CDDAの状態 
enum 
{ 
	CDDA_NOTREADY = 0, 
	CDDA_PLAY, 
	CDDA_STOP, 
	CDDA_PAUSE, 
	CDDA_STATUS_MAX 
}; 
 
// 初期化、終了 
int  osd_cdda_init(int drive); 
void osd_cdda_exit(void); 
 
// 基本操作 
int  osd_cdda_play_track(int track); 
int  osd_cdda_play_tracks(int start_track); 
int  osd_cdda_play_next_track(void); 
int  osd_cdda_play_prev_track(void); 
int  osd_cdda_play_foward(int sec); 
int  osd_cdda_play_rewind(int sec); 
int  osd_cdda_pause(void); 
int  osd_cdda_resume(void); 
int  osd_cdda_stop(void); 
 
// プログラム再生 (NEOGEO CD用みたいなもの) 
int  osd_cdda_play_program(int *program_list); 
int  osd_cdda_play_program_no(int program_no); 
void osd_cdda_chancel_program(void); 
 
// 再生時間取得 
int osd_cdda_get_play_time(int *minutes, int *seconds); 
 
// オートループ設定 
void osd_cdda_set_autoloop(int loop); 
 
// CDDAデータ取得 
int  osd_cdda_get_status(void); 
int  osd_cdda_get_num_tracks(void); 
int  osd_cdda_get_track_length(int track); 
int  osd_cdda_get_track_sec(int track); 
void osd_cdda_get_totaltime(int *minutes, int *seconds); 
int  osd_cdda_get_track_type(int track); 
int  osd_cdda_has_audio_track(void); 
int  osd_cdda_get_current_track(void); 
int  osd_cdda_get_current_program(void); 
 
// TOCチェック用 
int  osd_cdda_get_track_lba(int track); 
 
// CDDA音量操作 
void osd_cdda_init_volume(void); 
void osd_cdda_set_volume(int volume); 
void osd_cdda_restore_volume(void); 
 
 
/*------------------------------------------------------ 
  ログ 
 -----------------------------------------------------*/ 
 
void logerror(const char *text, ...); 
 
 
/*------------------------------------------------------ 
  その他 
 -----------------------------------------------------*/ 
 
#ifndef CPUID_RESULT 
#define CPUID_RESULT 
#define HAS_MMX      0x00000001 // MMX 
#define HAS_MMX2     0x00000002 // Enhanced MMX 
#define HAS_SSE      0x00000010 // Stream SIMD Extention 
#define HAS_SSE2     0x00000020 // Stream SIMD Extention 2 
#define HAS_3DNow    0x00000100 // 3DNow! 
#define HAS_E3DNow   0x00000200 // 3DNow! + Enhanced MMX 
#define HAS_3DNowPro 0x00000310 // Enhanced 3DNow! + SSE 
#define HAS_RDTSC    0x00010000 // RDSTC 
#endif /* CPUID_RESULT */ 
 
// ウィンドウタイトル設定 
void osd_set_title(const char *text, ...); 
 
// ユーザへのメッセージ表示 
void osd_show_message(const char *text, ...); 
 
#endif /* OSDEPEND_H */