// $Id$ #ifndef _VISIO_H #define _VISIO_H /* * visio.h * piaip's new implementation of visio * * see visio.c for license, usage, and introduction. */ #include "bbs.h" #include "ansi.h" // we need it. #include // THEME DEFINITION ---------------------------------------------------- #define VCLR_HEADER ANSI_COLOR(1;37;46) // was: TITLE_COLOR #define VCLR_HEADER_MID ANSI_COLOR(1;33;46) #define VCLR_HEADER_RIGHT ANSI_COLOR(1;37;46) #define VCLR_HDR ANSI_COLOR(1;37;46) #define VCLR_FOOTER_CAPTION ANSI_COLOR(0;34;46) #define VCLR_FOOTER ANSI_COLOR(0;30;47) #define VCLR_FOOTER_QUOTE ANSI_COLOR(0;31;47) #define VCLR_ZA_CAPTION ANSI_COLOR(1;37;42) #define VCLR_MSG_FLOAT ANSI_COLOR(1;33;46) #define VCLR_MSG ANSI_COLOR(1;36;44) #define VCLR_PAUSE_PAD ANSI_COLOR(1;34;44) #define VCLR_PAUSE ANSI_COLOR(1;37;44) #define VCLR_INPUT_FIELD ANSI_COLOR(0;7) #define VMSG_PAUSE " 請按任意鍵繼續 " #define VMSG_PAUSE_PAD "▄" #define VMSG_MSG_FLOAT " [按任意鍵繼續]" #define VMSG_MSG_PREFIX " ◆ " #define VMSG_HDR_PREFIX "【 " #define VMSG_HDR_POSTFIX " 】" // CONSTANT DEFINITION ------------------------------------------------- #define VCOL_MAXW (INT16_MAX) #define VCOL_MAXPRI (INT16_MAX) #define VFILL_DEFAULT (0x00) // #define VFILL_NO_ANSI VFILL_DEFAULT #define VFILL_HAS_ANSI (0x01) // #define VVILL_LEFT_ALIGN VFILL_DEFAULT #define VFILL_RIGHT_ALIGN (0x02) // #define VFILL_HAS_BORDER VFILL_DEFAULT #define VFILL_NO_BORDER (0x08) #define VGET_DEFAULT (0x00) // #define VGET_DOECHO (VGET_DEFAULT) #define VGET_NOECHO (0x01) #define VGET_LOWERCASE (0x02) #define VGET_DIGITS (0x04) #define VGET_TRANSPARENT (0x08) #define VGET_ASCII_ONLY (0x10) #define VGET_PASSWORD (VGET_NOECHO | VGET_ASCII_ONLY) // DATATYPE DEFINITION ------------------------------------------------- typedef void * VREFSCR; typedef long VREFCUR; typedef short VCOLW; typedef short VCOLPRI; typedef struct VCOL { char *attr; // default attribute VCOLW minw; // minimal width VCOLW maxw; // max width VCOLPRI pri; // priority (higher expands first) struct { char has_ansi; // field data have ANSI escapes char right_align; // align output to right side char usewhole; // draw entire column and prevent borders } flags; } VCOL; #define VGETCB_NONE (0) // do nothing #define VGETCB_NEXT (1) // skip to next event loop #define VGETCB_END (2) // finish input #define VGETCB_ABORT (3) // clear buffer and finish typedef struct { char *buf; const int len; // callbacks should not change this. int icurr; // cursor position int iend; // buffer tail (= strlen(buf)) } VGET_RUNTIME; typedef int (*VGET_FCALLBACK)(int key, VGET_RUNTIME *prt, void *instance); typedef struct { VGET_FCALLBACK peek; // called immediately after key hit VGET_FCALLBACK data; // called before inserting character data VGET_FCALLBACK post; // called after every data inserted into buffer. } VGET_CALLBACKS; // API DEFINITION ---------------------------------------------------- // curses flavor void prints(const char *fmt, ...) GCC_CHECK_FORMAT(1,2); void mvprints(int y, int x, const char *fmt, ...) GCC_CHECK_FORMAT(3,4); void mvouts(int y, int x, const char *str); // input history int InputHistoryAdd (const char *s); int InputHistoryExists (const char *s); void InputHistoryPrev (char *s, int sz); void InputHistoryNext (char *s, int sz); // v*: primitive rendering void vpad (int n, const char *pattern); /// pad n fields by pattern int vgety (void); /// return cursor position (y) void vfill (int n, int flags, const char *s); /// fill n-width space with s void vfillf (int n, int flags, const char *s, ...) GCC_CHECK_FORMAT(3,4); /// formatted version of vfill void vbarlr (const char *l, const char *r); /// draw a left-right expanded bar with (l,r) void vbarf (const char *s, ...) GCC_CHECK_FORMAT(1,2); /// vbarlr with formatted input (\t splits (l,r) void vshowmsg(const char *msg); /// draw standard pause/message // v*: input widgets // int vans(char *prompt); // prompt at bottom and return y/n in lower case. int vmsg (const char *msg); /// draw standard pause/message and return input int vmsgf (const char *fmt,...) GCC_CHECK_FORMAT(1,2); /// formatted input of vmsg int vans (const char *msg); /// prompt and return (lowercase) single byte input int vansf (const char *fmt,...) GCC_CHECK_FORMAT(1,2); /// formatted input of vans // vget: (y, x, ...) int vgets (char *buf, int len, int flags); /// input with edit box control int vgetstr (char *buf, int len, int flags, const char *str);/// input with default value int vget (int y, int x, const char *prompt, char *buf, int len, int mode); int vgetstring(char *_buf, int len, int flags, const char *defstr, const VGET_CALLBACKS *pcbs, void *instance); // vs_*: formatted and themed virtual screen layout // you cannot use ANSI escapes in these APIs. void vs_header (const char *title, const char *mid, const char *right); // vs_head, showtitle void vs_hdr (const char *title); // vs_bar, stand_title void vs_footer (const char *caption, const char *prompt); // columned output void vs_cols_layout (const VCOL* cols, VCOLW *ws, int n); /// calculate VCOL to fit current screen in ws void vs_cols (const VCOL* cols, const VCOLW *ws, int n, ...); // VREF: save and storing temporary objects (restore will also free object). VREFSCR vscr_save (void); void vscr_restore(VREFSCR); VREFCUR vcur_save (void); void vcur_restore(VREFCUR); #endif // _VISIO_H