117 lines
2.8 KiB
C++
117 lines
2.8 KiB
C++
#include "wwbios.h"
|
|
|
|
extern "C" {
|
|
#include "../wonx/wonx_include/text.h"
|
|
}
|
|
|
|
enum {
|
|
TEXT_SCREEN_INIT = 0,
|
|
TEXT_WINDOW_INIT,
|
|
TEXT_SET_MODE,
|
|
TEXT_GET_MODE,
|
|
TEXT_PUT_CHAR,
|
|
TEXT_PUT_STRING,
|
|
TEXT_PUT_SUBSTRING,
|
|
TEXT_PUT_NUMERIC,
|
|
TEXT_FILL_CHAR,
|
|
TEXT_SET_PALETTE,
|
|
TEXT_GET_PALETTE,
|
|
TEXT_SET_ANK_FONT,
|
|
TEXT_SET_SJIS_FONT,
|
|
TEXT_GET_FONTDATA,
|
|
TEXT_SET_SCREEN,
|
|
TEXT_GET_SCREEN,
|
|
CURSOR_DISPLAY,
|
|
CURSOR_STATUS,
|
|
CURSOR_SET_LOCATION,
|
|
CURSOR_GET_LOCATION,
|
|
CURSOR_SET_TYPE,
|
|
CURSOR_GET_TYPE,
|
|
};
|
|
|
|
void text_handler(int func_no) {
|
|
int tmp;
|
|
|
|
switch(func_no) {
|
|
case TEXT_SCREEN_INIT:
|
|
text_screen_init();
|
|
break;
|
|
case TEXT_WINDOW_INIT:
|
|
text_window_init(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH], wregs[DX]);
|
|
break;
|
|
case TEXT_SET_MODE:
|
|
text_set_mode(wregs[BX]);
|
|
break;
|
|
case TEXT_GET_MODE:
|
|
wregs[AX] = text_get_mode();
|
|
break;
|
|
case TEXT_PUT_CHAR:
|
|
text_put_char(*bregs[BL], *bregs[BH], wregs[CX]);
|
|
break;
|
|
case TEXT_PUT_STRING:
|
|
wregs[AX] = text_put_string(*bregs[BL], *bregs[BH], (char *)(c_ds + wregs[DX]));
|
|
break;
|
|
case TEXT_PUT_SUBSTRING:
|
|
text_put_substring(*bregs[BL], *bregs[BH], (char *)(c_ds + wregs[DX]), wregs[CX]);
|
|
break;
|
|
case TEXT_PUT_NUMERIC:
|
|
if((*bregs[CH]) & NUM_STORE) {
|
|
text_store_numeric((char *)(c_ds + wregs[SI]), *bregs[CL], *bregs[CH], wregs[DX]);
|
|
} else {
|
|
text_put_numeric(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH], wregs[DX]);
|
|
}
|
|
break;
|
|
case TEXT_FILL_CHAR:
|
|
text_fill_char(*bregs[BL], *bregs[BH], wregs[CX], wregs[DX]);
|
|
break;
|
|
case TEXT_SET_PALETTE:
|
|
text_set_palette(wregs[BX]);
|
|
break;
|
|
case TEXT_GET_PALETTE:
|
|
wregs[AX] = text_get_palette();
|
|
break;
|
|
case TEXT_SET_ANK_FONT:
|
|
text_set_ank_font(*bregs[BL], *bregs[BH], wregs[CX], c_ds + wregs[DX]);
|
|
break;
|
|
case TEXT_SET_SJIS_FONT:
|
|
text_set_sjis_font((void *)(wregs[BX] << 4 | wregs[DX]));
|
|
break;
|
|
case TEXT_GET_FONTDATA:
|
|
wregs[AX] = text_get_fontdata(wregs[CX], c_ds + wregs[DX]);
|
|
break;
|
|
case TEXT_SET_SCREEN:
|
|
// text_set_screen(wregs[BX]); // マニュアル第 1 版は間違い
|
|
text_set_screen(*bregs[AL]);
|
|
break;
|
|
case TEXT_GET_SCREEN:
|
|
wregs[AX] = text_get_screen();
|
|
break;
|
|
case CURSOR_DISPLAY:
|
|
cursor_display(*bregs[AL]);
|
|
break;
|
|
case CURSOR_STATUS:
|
|
wregs[AX] = cursor_status();
|
|
break;
|
|
case CURSOR_SET_LOCATION:
|
|
cursor_set_location(*bregs[BL], *bregs[BH], *bregs[CL], *bregs[CH]);
|
|
break;
|
|
case CURSOR_GET_LOCATION:
|
|
tmp = cursor_get_location();
|
|
wregs[DX] = (tmp >> 16) & 0xffff;
|
|
wregs[AX] = tmp & 0xffff;
|
|
break;
|
|
case CURSOR_SET_TYPE:
|
|
cursor_set_type(*bregs[BL], *bregs[CL]);
|
|
break;
|
|
case CURSOR_GET_TYPE:
|
|
tmp = cursor_get_type();
|
|
wregs[DX] = (tmp >> 16) & 0xffff;
|
|
wregs[AX] = tmp & 0xffff;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
} |