00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef __ALICEML_H__
00028 #define __ALICEML_H__
00029
00030 #include "aliceml_config.h"
00031 #include "aliceml_color.h"
00032 #include "aliceml_rect.h"
00033 #include "aliceml_string.h"
00034
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif
00038
00042 typedef enum ML_BoolIdentifier {
00044 ML_VERTICAL,
00046 ML_CONTINUE_TO_PAUSE,
00048 ML_WAIT,
00050 ML_PAUSE,
00052 ML_AUTO_NEWLINE,
00054 ML_AUTO_NEWPAGE,
00056 ML_CHAR_AUTO_HIDE,
00058 ML_CHAR_SHOWING,
00060 ML_CHAR_HIDING,
00062 ML_AUTO_REFRESH,
00064 ML_TAG_MODE,
00065 } ML_BoolIdentifier;
00066
00070 typedef enum ML_IntIdentifier {
00072 ML_AUTOMODE_NEWLINE_WAIT,
00074 ML_AUTOMODE_NEWPAGE_WAIT,
00076 ML_AUTOMODE_PAUSE_WAIT,
00077
00079 ML_TEXT_ALIGN,
00081 ML_LINE_SPACE,
00083 ML_CHAR_SPACE,
00084
00086 ML_FONT_SIZE,
00088 ML_FONT_STYLE,
00090 ML_RUBY_SIZE,
00092 ML_RUBY_OFFSET,
00093
00095 ML_TEXT_SPEED,
00097 ML_CHAR_SHOW_TIME,
00099 ML_CHAR_SHOWING_TIME,
00101 ML_CHAR_HIDING_TIME,
00102 } ML_IntIdentifier;
00103
00107 typedef enum ML_Mode {
00109 ML_MODE_NORMAL,
00111 ML_MODE_AUTO,
00113 ML_MODE_SKIP,
00115 ML_MODE_SUSPEND,
00116 } ML_Mode;
00117
00121 typedef enum ML_TextAlign {
00123 ML_ALIGN_NORMAL,
00125 ML_ALIGN_TOP,
00127 ML_ALIGN_BOTTOM,
00129 ML_ALIGN_LEFT = ML_ALIGN_TOP,
00131 ML_ALIGN_RIGHT = ML_ALIGN_BOTTOM,
00132 } ML_TextAlign;
00133
00137 typedef enum ML_Encoding {
00138 ML_ENCODING_UCS4,
00139 ML_ENCODING_UTF16,
00140 ML_ENCODING_UTF8,
00141 } ML_Encoding;
00142
00149 typedef int ML_FontStyle;
00151 #define ML_FONTSTYLE_REGULAR 0x0000
00152
00153 #define ML_FONTSTYLE_BOLD 0x0001
00154
00155 #define ML_FONTSTYLE_ITALIC 0x0002
00156
00157 #define ML_FONTSTYLE_UNDERLINE 0x0004
00158
00159 #define ML_FONTSTYLE_VERTICAL 0x0008
00160
00161 #define ML_FONTSTYLE_SHADOW 0x0100
00162
00163 #define ML_FONTSTYLE_HEMMING 0x0200
00164
00165 #define ML_FONTSTYLE_SIMPLEMASK 0x00ff
00166
00167
00168 typedef struct ML_Message ML_Message;
00169 typedef struct ML_Backend ML_Backend;
00170 typedef struct ML_Surface ML_Surface;
00171 typedef struct ML_Command ML_Command;
00172 typedef struct ML_Font ML_Font;
00173 typedef struct ML_CodeConverter ML_CodeConverter;
00174
00176 typedef void (ALICEMLCALL *ML_Callback)(ML_Message *message);
00177
00179 typedef int (ALICEMLCALL *ML_Callback_Insert)(void *elem);
00180
00182 typedef void (ALICEMLCALL *ML_Callback_Remove)(void *elem);
00183
00185 typedef int (ALICEMLCALL *ML_Comparator)(const void *elem1, const void *elem2);
00186
00188 typedef void (ALICEMLCALL *ML_Callback_Text)(ML_Message *message, ML_bool newpage);
00189
00191 #define ML_HAS_FLAG(var, flag) ((ML_bool)(((var) & (flag)) != 0))
00192
00194 #define ML_ABS(x) ((x) >= 0 ? (x) : -(x))
00195
00197 #define ML_MAX(x, y) ((x) > (y) ? (x) : (y))
00198
00200 #define ML_MIN(x, y) ((x) < (y) ? (x) : (y))
00201
00203 #define ML_MEDIAN(x, min_value, max_value) ¥
00204 ML_MIN((max_value), ML_MAX((min_value), (x)))
00205
00206
00207 #define ML_NEW(TYPE) (TYPE *)ML_Malloc(sizeof(TYPE))
00208
00210 #define ML_NEW2(TYPE, NUM) (TYPE *)ML_Malloc(sizeof(TYPE) * (NUM))
00211
00213 #define ML_FREE(PTR) ML_Free(PTR)
00214
00216 #define ML_FREE2(PTR) ML_Free(PTR)
00217
00219 ALICEMLAPI void * ALICEMLCALL
00220 ML_Malloc(ML_size size);
00221
00223 ALICEMLAPI void ALICEMLCALL
00224 ML_Free(void *ptr);
00225
00227 ALICEMLAPI void * ALICEMLCALL
00228 ML_PooledMalloc(ML_size size);
00229
00231 ALICEMLAPI void ALICEMLCALL
00232 ML_PooledFree(void *ptr);
00233
00234
00236 ALICEMLAPI ML_Message * ALICEMLCALL
00237 ML_CreateMessage(ML_Backend *backend, int width, int height);
00238
00240 ALICEMLAPI ML_Message * ALICEMLCALL
00241 ML_CreateMessageFromSurface(ML_Surface *surface, ML_bool share_surface);
00242
00244 ALICEMLAPI void ALICEMLCALL
00245 ML_DestroyMessage(ML_Message *message);
00246
00248 ALICEMLAPI ML_Surface * ALICEMLCALL
00249 ML_CreateSurfaceFromBackend(ML_Backend *backend, void *abstract_surface);
00250
00252 ALICEMLAPI void ALICEMLCALL
00253 ML_DestroySurface(ML_Surface *surface);
00254
00256 ALICEMLAPI void * ALICEMLCALL
00257 ML_GetAbstractSurface(ML_Surface *surface);
00258
00260 ALICEMLAPI void ALICEMLCALL
00261 ML_SetPrivateData(ML_Message *message, void *data);
00262
00264 ALICEMLAPI void * ALICEMLCALL
00265 ML_GetPrivateData(ML_Message *message);
00266
00268 ALICEMLAPI int ALICEMLCALL
00269 ML_Enable(ML_Message *message, ML_BoolIdentifier id);
00270
00272 ALICEMLAPI int ALICEMLCALL
00273 ML_Disable(ML_Message *message, ML_BoolIdentifier id);
00274
00276 ALICEMLAPI int ALICEMLCALL
00277 ML_SetBool(ML_Message *message, ML_BoolIdentifier id, ML_bool value);
00278
00280 ALICEMLAPI ML_bool ALICEMLCALL
00281 ML_IsEnabled(ML_Message *message, ML_BoolIdentifier id);
00282
00284 ALICEMLAPI ML_bool ALICEMLCALL
00285 ML_IsDisabled(ML_Message *message, ML_BoolIdentifier id);
00286
00288 #define ML_GetBool ML_IsEnabled
00289
00291 ALICEMLAPI int ALICEMLCALL
00292 ML_SetInteger(ML_Message *message, ML_IntIdentifier id, int value);
00293
00295 ALICEMLAPI int ALICEMLCALL
00296 ML_GetInteger(ML_Message *message, ML_IntIdentifier id, int *value);
00297
00299 ALICEMLAPI int ALICEMLCALL
00300 ML_PushContext(ML_Message *message);
00301
00303 ALICEMLAPI int ALICEMLCALL
00304 ML_PopContext(ML_Message *message);
00305
00307 ALICEMLAPI int ALICEMLCALL
00308 ML_PushFont(ML_Message *message);
00309
00311 ALICEMLAPI int ALICEMLCALL
00312 ML_PopFont(ML_Message *message);
00313
00315 ALICEMLAPI int ALICEMLCALL
00316 ML_SetMode(ML_Message *message, ML_Mode mode);
00317
00319 ALICEMLAPI int ALICEMLCALL
00320 ML_SetAutoModeWait(ML_Message *message, int newline_wait, int newpage_wait,
00321 int pause_wait);
00322
00324 ALICEMLAPI int ALICEMLCALL
00325 ML_SetNextCharTime(ML_Message *message, int next_char_time);
00326
00328 ALICEMLAPI int ALICEMLCALL
00329 ML_SetTextShowTime(ML_Message *message, int char_showing_time,
00330 int char_show_time, int char_hiding_time);
00331
00333 ALICEMLAPI int ALICEMLCALL
00334 ML_SetLineStyle(ML_Message *message, ML_TextAlign align, int line_space,
00335 int char_space);
00336
00338 ALICEMLAPI int ALICEMLCALL
00339 ML_SetDefaultFontFace(ML_Message *message, int index);
00340
00342 ALICEMLAPI int ALICEMLCALL
00343 ML_SetFontFaceFromStr(ML_Message *message, const char *font_name,
00344 int index, ML_bool add_fontpath);
00345
00347 ALICEMLAPI int ALICEMLCALL
00348 ML_SetFontFaceFromString(ML_Message *message, ML_String8 *font_name,
00349 int index, ML_bool add_fontpath);
00350
00352 ALICEMLAPI int ALICEMLCALL
00353 ML_SetFontSize(ML_Message *message, int size);
00354
00356 ALICEMLAPI int ALICEMLCALL
00357 ML_SetFontStyle(ML_Message *message, ML_FontStyle style);
00358
00360 ALICEMLAPI int ALICEMLCALL
00361 ML_SetFontColor(ML_Message *message, ML_Color color);
00362
00364 ALICEMLAPI int ALICEMLCALL
00365 ML_SetShadowColor(ML_Message *message, ML_Color color);
00366
00368 ALICEMLAPI int ALICEMLCALL
00369 ML_SetShadowOffset(ML_Message *message, int offset_x, int offset_y);
00370
00372 ALICEMLAPI int ALICEMLCALL
00373 ML_SetHemmingColor(ML_Message *message, ML_Color color);
00374
00376 ALICEMLAPI int ALICEMLCALL
00377 ML_SetHemmingWidth(ML_Message *message, int width_x, int width_y);
00378
00380 ALICEMLAPI int ALICEMLCALL
00381 ML_SetRubyStyle(ML_Message *message, int ruby_size, int ruby_offset);
00382
00384 ALICEMLAPI int ALICEMLCALL
00385 ML_SetPosition(ML_Message *message, int left, int top);
00386
00388 ALICEMLAPI int ALICEMLCALL
00389 ML_GetSize(ML_Message *message, int *width, int *height);
00390
00392 ALICEMLAPI int ALICEMLCALL
00393 ML_SetSize(ML_Message *message, int width, int height);
00394
00396 ALICEMLAPI int ALICEMLCALL
00397 ML_SetBounds(ML_Message *message, int left, int top, int width, int height);
00398
00400 ALICEMLAPI int ALICEMLCALL
00401 ML_SetMargin(ML_Message *message, int marginl, int margint, int marginr, int marginb);
00402
00404 ALICEMLAPI int ALICEMLCALL
00405 ML_SetCallbackText(ML_Message *message, ML_Callback_Text callback);
00406
00408 ALICEMLAPI int ALICEMLCALL
00409 ML_SetCodeConverter(ML_Message *message, ML_CodeConverter *converter);
00410
00412 ALICEMLAPI int ALICEMLCALL
00413 ML_SetEncoding(ML_Message *message, ML_Encoding encoding);
00414
00416 ALICEMLAPI int ALICEMLCALL
00417 ML_Update(ML_Message *message, int dt);
00418
00420 ALICEMLAPI int ALICEMLCALL
00421 ML_Refresh(ML_Message *message);
00422
00424 ALICEMLAPI int ALICEMLCALL
00425 ML_NextPage(ML_Message *message);
00426
00428 ALICEMLAPI int ALICEMLCALL
00429 ML_PrevPage(ML_Message *message);
00430
00432 ALICEMLAPI int ALICEMLCALL
00433 ML_SetLastPage(ML_Message *message);
00434
00436 ALICEMLAPI int ALICEMLCALL
00437 ML_Background(ML_Message *message, int dt, ML_bool is_sleep);
00438
00440 ALICEMLAPI int ALICEMLCALL
00441 ML_GoNext(ML_Message *message);
00442
00444 ALICEMLAPI int ALICEMLCALL
00445 ML_DrawText(ML_Message *message, ML_Surface *target);
00446
00448 ALICEMLAPI int ALICEMLCALL
00449 ML_BeginBatch(ML_Message *message);
00450
00452 ALICEMLAPI int ALICEMLCALL
00453 ML_EndBatch(ML_Message *message);
00454
00456 ALICEMLAPI int ALICEMLCALL ML_AddChar32(ML_Message *message, ML_char32 c);
00457 ALICEMLAPI int ALICEMLCALL ML_AddChar16(ML_Message *message, ML_char16 c);
00458 ALICEMLAPI int ALICEMLCALL ML_AddChar8(ML_Message *message, ML_char8 c);
00459
00461 ALICEMLAPI int ALICEMLCALL ML_AddTextl32(ML_Message *message, const ML_char32 *text, ML_size length);
00462 ALICEMLAPI int ALICEMLCALL ML_AddTextl16(ML_Message *message, const ML_char16 *text, ML_size length);
00463 ALICEMLAPI int ALICEMLCALL ML_AddTextl8(ML_Message *message, const ML_char8 *text, ML_size length);
00464
00466 ALICEMLAPI int ALICEMLCALL ML_AddText32(ML_Message *message, const ML_char32 *text);
00467 ALICEMLAPI int ALICEMLCALL ML_AddText16(ML_Message *message, const ML_char16 *text);
00468 ALICEMLAPI int ALICEMLCALL ML_AddText8(ML_Message *message, const ML_char8 *text);
00469
00471 ALICEMLAPI int ALICEMLCALL ML_AddLinkl32(ML_Message *message, const ML_char32 *text, ML_size length, int id);
00472 ALICEMLAPI int ALICEMLCALL ML_AddLinkl16(ML_Message *message, const ML_char16 *text, ML_size length, int id);
00473 ALICEMLAPI int ALICEMLCALL ML_AddLinkl8(ML_Message *message, const ML_char8 *text, ML_size length, int id);
00474
00476 ALICEMLAPI int ALICEMLCALL ML_AddLink32(ML_Message *message, const ML_char32 *text, int id);
00477 ALICEMLAPI int ALICEMLCALL ML_AddLink16(ML_Message *message, const ML_char16 *text, int id);
00478 ALICEMLAPI int ALICEMLCALL ML_AddLink8(ML_Message *message, const ML_char8 *text, int id);
00479
00481 ALICEMLAPI int ALICEMLCALL ML_AddTextWithRuby32(ML_Message *message, const ML_char32 *text, const ML_char32 *reading);
00482 ALICEMLAPI int ALICEMLCALL ML_AddTextWithRuby16(ML_Message *message, const ML_char16 *text, const ML_char16 *reading);
00483 ALICEMLAPI int ALICEMLCALL ML_AddTextWithRuby8(ML_Message *message, const ML_char8 *text, const ML_char8 *reading);
00484
00485
00486 #if ML_WCHAR_SIZE == 4
00487 #define ML_AddCharWChar ML_AddChar32
00488 #define ML_AddTextlWChar ML_AddTextl32
00489 #define ML_AddTextWChar ML_AddText32
00490 #define ML_AddLinklWChar ML_AddLinkl32
00491 #define ML_AddLinkWChar ML_AddLink32
00492 #define ML_AddTextWithRubyWChar ML_AddTextWithRuby32
00493 #else
00494 #define ML_AddCharWChar ML_AddChar16
00495 #define ML_AddTextlWChar ML_AddTextl16
00496 #define ML_AddTextWChar ML_AddText16
00497 #define ML_AddLinklWChar ML_AddLinkl16
00498 #define ML_AddLinkWChar ML_AddLink16
00499 #define ML_AddTextWithRubyWChar ML_AddTextWithRuby16
00500 #endif
00501
00503
00504
00505
00507 ALICEMLAPI int ALICEMLCALL
00508 ML_AddCommand(ML_Message *message, ML_Command *command);
00509
00511 ALICEMLAPI int ALICEMLCALL
00512 ML_AddNewLine(ML_Message *message);
00513
00515 ALICEMLAPI int ALICEMLCALL
00516 ML_AddNewPage(ML_Message *message);
00517
00519 ALICEMLAPI int ALICEMLCALL
00520 ML_AddPause(ML_Message *message);
00521
00523 ALICEMLAPI int ALICEMLCALL
00524 ML_AddWait(ML_Message *message, int time);
00525
00527 ALICEMLAPI int ALICEMLCALL
00528 ML_CopyText(ML_Message *from, ML_Message *to);
00529
00531 ALICEMLAPI int ALICEMLCALL
00532 ML_MakeHistory(ML_Message *from, ML_Message *to);
00533
00535 ALICEMLAPI ML_bool ALICEMLCALL
00536 ML_IsEnd(ML_Message *message);
00537
00539 ALICEMLAPI int ALICEMLCALL
00540 ML_Clear(ML_Message *message);
00541
00543 ALICEMLAPI ML_bool ALICEMLCALL
00544 ML_IsCurrentFull(ML_Message *message);
00545
00547 ALICEMLAPI ML_bool ALICEMLCALL
00548 ML_IsCurrentEmpty(ML_Message *message);
00549
00551 ALICEMLAPI void ALICEMLCALL
00552 ML_DumpCommands(ML_Message *message, FILE *fp, ML_bool only_current);
00553
00555 ALICEMLAPI int ALICEMLCALL
00556 ML_AddAvoidRect(ML_Message *message, ML_Rect *rect);
00557
00559 ALICEMLAPI int ALICEMLCALL
00560 ML_GetAvoidRectSize(ML_Message *message);
00561
00563 ALICEMLAPI ML_Rect * ALICEMLCALL
00564 ML_GetAvoidRect(ML_Message *message, int i);
00565
00567 ALICEMLAPI void ALICEMLCALL
00568 ML_ClearAvoidRect(ML_Message *message);
00569
00571 ALICEMLAPI int ALICEMLCALL
00572 ML_AddDirtyRect(ML_Message *message, const ML_Rect *rect);
00573
00575 ALICEMLAPI int ALICEMLCALL
00576 ML_GetDirtyRectSize(ML_Message *message);
00577
00579 ALICEMLAPI ML_Rect * ALICEMLCALL
00580 ML_GetDirtyRect(ML_Message *message, int i);
00581
00583 ALICEMLAPI ML_bool ALICEMLCALL
00584 ML_IntersectDirtyRect(ML_Message *message, ML_Rect *rect);
00585
00587 ALICEMLAPI int ALICEMLCALL
00588 ML_GetLinkID(ML_Message *message, int x, int y);
00589
00590
00592 ALICEMLAPI void ALICEMLCALL
00593 ML_SetError(const char *format, ...);
00594
00596 ALICEMLAPI const char * ALICEMLCALL
00597 ML_GetError();
00598
00600 ALICEMLAPI void ALICEMLCALL
00601 ML_ClearError();
00602
00604 ALICEMLAPI int ALICEMLCALL
00605 ML_CheckMemory();
00606
00611 ALICEMLAPI ML_String8 * ALICEMLCALL
00612 ML_MakeFontPath(const ML_char8 *fontfile);
00613
00615 ALICEMLAPI ML_String8 * ALICEMLCALL
00616 ML_GetDefaultFont();
00617
00619 ALICEMLAPI ML_uint32 ALICEMLCALL
00620 ML_GetTicks();
00621
00623 ALICEMLAPI int ALICEMLCALL
00624 ML_Delay(ML_uint32 time);
00625
00626 #ifdef __cplusplus
00627 }
00628 #endif
00629
00630 #endif