#ifndef LYSTRINGS_H #define LYSTRINGS_H #include /* UPPER8(ch1,ch2) is an extension of (TOUPPER(ch1) - TOUPPER(ch2)) */ extern int UPPER8 PARAMS(( int ch1, int ch2)); extern int get_mouse_link NOPARAMS; extern int peek_mouse_link NOPARAMS; extern int peek_mouse_levent NOPARAMS; extern int fancy_mouse PARAMS((WINDOW *win, int row, int *position)); extern char * LYstrncpy PARAMS(( char * dst, CONST char * src, int n)); extern void ena_csi PARAMS((BOOLEAN flag)); extern int LYgetch NOPARAMS; extern int LYgetch_for PARAMS(( int code)); extern int LYgetstr PARAMS(( char * inputline, int hidden, size_t bufsize, int recall)); extern char *LYstrsep PARAMS(( char ** stringp, CONST char * delim)); extern char * LYstrstr PARAMS(( char * chptr, CONST char * tarptr)); extern char * LYmbcsstrncpy PARAMS(( char * dst, CONST char * src, int n_bytes, int n_glyphs, BOOL utf_flag)); extern char * LYmbcs_skip_glyphs PARAMS(( char * data, int n_glyphs, BOOL utf_flag)); extern int LYmbcsstrlen PARAMS(( char * str, BOOL utf_flag, BOOL count_gcells)); extern char * LYno_attr_mbcs_strstr PARAMS(( char * chptr, CONST char * tarptr, BOOL utf_flag, BOOL count_gcells, int * nstartp, int * nendp)); extern char * LYno_attr_mbcs_case_strstr PARAMS(( char * chptr, CONST char * tarptr, BOOL utf_flag, BOOL count_gcells, int * nstartp, int * nendp)); extern char * LYno_attr_char_strstr PARAMS(( char * chptr, char * tarptr)); extern char * LYno_attr_char_case_strstr PARAMS(( char * chptr, char * tarptr)); extern char * SNACopy PARAMS(( char ** dest, CONST char * src, int n)); extern char * SNACat PARAMS(( char ** dest, CONST char * src, int n)); #define StrnAllocCopy(dest, src, n) SNACopy (&(dest), src, n) #define StrnAllocCat(dest, src, n) SNACat (&(dest), src, n) extern char *LYSafeGets PARAMS((char ** src, FILE * fp)); #ifdef EXP_FILE_UPLOAD extern void base64_encode PARAMS((char * dest, char * src, int len)); #endif /* values for LYgetch */ /* The following are lynxkeycodes, not to be confused with lynxactioncodes (LYK_*) to which they are often mapped. The lynxkeycodes include all single-byte keys as a subset. - kw */ #define UPARROW 256 /* 0x100 */ #define DNARROW 257 /* 0x101 */ #define RTARROW 258 /* 0x102 */ #define LTARROW 259 /* 0x103 */ #define PGDOWN 260 /* 0x104 */ #define PGUP 261 /* 0x105 */ #define HOME 262 /* 0x106 */ #define END_KEY 263 /* 0x107 */ #define F1 264 /* 0x108 */ #define DO_KEY 265 /* 0x109 */ #define FIND_KEY 266 /* 0x10A */ #define SELECT_KEY 267 /* 0x10B */ #define INSERT_KEY 268 /* 0x10C */ #define REMOVE_KEY 269 /* 0x10D */ #define DO_NOTHING 270 /* 0x10E */ #define BACKTAB_KEY 271 /* 0x10F */ #define MOUSE_KEY 0x11d /* 0x11D */ /* ***** NOTES: ***** If you add definitions for new lynxkeycodes to the above list that need to be mapped to LYK_* lynxactioncodes - - AT LEAST the tables keymap[] and key_override[] in LYKeymap.c have to be changed/reviewed, AS WELL AS the lineedit binding tables in LYEditmap.c ! - KEYMAP_SIZE, defined in LYKeymap.h, may need to be changed ! - See also table funckey[] in LYKeymap.c for 'pretty' strings for the keys with codes >= 256 (to appear on the 'K'eymap page). New keycodes should probably be assigned consecutively, so their key names can be easily added to funckey[] (but see next point). They should also be documented in lynx.cfg. - The DOS port uses its own native codes for some keys, unless they are remapped by the code in LYgetch(). See *.key files in docs/ directory. Adding new keys here may conflict with those codes (affecting DOS users), unless/until remapping is added or changed in LYgetch(). (N)curses keypad codes (KEY_* from curses.h) can also directly appear as lynxkeycodes and conflict with our assignments, although that shouldn't happen - the useful ones should be recognized in LYgetch(). - The actual recognition of raw input keys or escape sequences, and mapping to our lynxkeycodes, take place in LYgetch() and/or its subsidiary functions and/or the curses/slang/etc. libraries. The basic lynxkeycodes can appear combined with various flags in higher-order bits as extended lynxkeycodes; see macros in LYKeymap.h. The range of possible basic values is therefore limited, they have to be less than LKC_ISLKC (even if KEYMAP_SIZE is increased). */ # define FOR_PANEL 0 /* normal screen, also LYgetch default */ # define FOR_CHOICE 1 /* mouse menu */ # define FOR_INPUT 2 /* form input and textarea field */ # define FOR_PROMPT 3 /* string prompt editing */ # define FOR_SINGLEKEY 4 /* single key prompt, confirmation */ #define VISIBLE 0 #define HIDDEN 1 #define NORECALL 0 #define RECALL 1 #ifdef EXP_ALT_BINDINGS /* Enable code implementing additional, mostly emacs-like, line-editing functions. - kw */ #define ENHANCED_LINEEDIT #endif /* EditFieldData preserves state between calls to LYEdit1 */ typedef struct _EditFieldData { int sx; /* Origin of editfield */ int sy; int dspwdth; /* Screen real estate for editting */ int strlen; /* Current size of string. */ int maxlen; /* Max size of string, excluding zero at end */ char pad; /* Right padding typically ' ' or '_' */ BOOL hidden; /* Masked password entry flag */ BOOL dirty; /* accumulate refresh requests */ BOOL panon; /* Need horizontal scroll indicator */ int xpan; /* Horizontal scroll offset */ int pos; /* Insertion point in string */ int margin; /* Number of columns look-ahead/look-back */ int current_modifiers; /* Modifiers for next input lynxkeycode */ #ifdef ENHANCED_LINEEDIT int mark; /* position of emacs-like mark */ #endif char buffer[1024]; /* String buffer */ } EditFieldData; /* line-edit action encoding */ #define LYE_NOP 0 /* Do Nothing */ #define LYE_CHAR (LYE_NOP +1) /* Insert printable char */ #define LYE_ENTER (LYE_CHAR +1) /* Input complete, return char/lynxkeycode */ #define LYE_TAB (LYE_ENTER +1) /* Input complete, return TAB */ #define LYE_ABORT (LYE_TAB +1) /* Input cancelled */ #define LYE_FORM_PASS (LYE_ABORT +1) /* In form fields: input complete, return char / lynxkeycode; Elsewhere: Do Nothing */ #define LYE_DELN (LYE_FORM_PASS +1) /* Delete next/curr char */ #define LYE_DELC (LYE_DELN) /* Obsolete (DELC case was equiv to DELN) */ #define LYE_DELP (LYE_DELN +1) /* Delete prev char */ #define LYE_DELNW (LYE_DELP +1) /* Delete next word */ #define LYE_DELPW (LYE_DELNW +1) /* Delete prev word */ #define LYE_ERASE (LYE_DELPW +1) /* Erase the line */ #define LYE_BOL (LYE_ERASE +1) /* Go to begin of line */ #define LYE_EOL (LYE_BOL +1) /* Go to end of line */ #define LYE_FORW (LYE_EOL +1) /* Cursor forwards */ #define LYE_BACK (LYE_FORW +1) /* Cursor backwards */ #define LYE_FORWW (LYE_BACK +1) /* Word forward */ #define LYE_BACKW (LYE_FORWW +1) /* Word back */ #define LYE_LOWER (LYE_BACKW +1) /* Lower case the line */ #define LYE_UPPER (LYE_LOWER +1) /* Upper case the line */ #define LYE_LKCMD (LYE_UPPER +1) /* Invoke command prompt */ #define LYE_AIX (LYE_LKCMD +1) /* Hex 97 */ #define LYE_DELBL (LYE_AIX +1) /* Delete back to BOL */ #define LYE_DELEL (LYE_DELBL +1) /* Delete thru EOL */ #define LYE_SWMAP (LYE_DELEL +1) /* Switch input keymap */ #define LYE_TPOS (LYE_SWMAP +1) /* Transpose characters */ #define LYE_SETM1 (LYE_TPOS +1) /* Set modifier 1 flag */ #define LYE_SETM2 (LYE_SETM1 +1) /* Set modifier 2 flag */ #define LYE_UNMOD (LYE_SETM2 +1) /* Fall back to no-modifier command */ #define LYE_C1CHAR (LYE_UNMOD +1) /* Insert C1 char if printable */ #define LYE_SETMARK (LYE_C1CHAR +1) /* emacs-like set-mark-command */ #define LYE_XPMARK (LYE_SETMARK +1) /* emacs-like exchange-point-and-mark */ #define LYE_KILLREG (LYE_XPMARK +1) /* emacs-like kill-region */ #define LYE_YANK (LYE_KILLREG +1) /* emacs-like yank */ #if defined(WIN_EX) #define LYE_PASTE (LYE_YANK +1) /* ClipBoard to Lynx */ #endif /* All preceding values must be within 0x00..0x7f - kw */ /* The following are meant to be bitwise or-ed: */ #define LYE_DF 0x80 /* Flag to set modifier 3 AND do other action */ #define LYE_FORM_LAC 0x1000 /* Flag to pass lynxactioncode given by lower bits. Doesn't fit in a char! */ #if defined(USE_KEYMAPS) extern int lynx_initialize_keymaps NOPARAMS; extern int map_string_to_keysym PARAMS((CONST char * src, int *lec)); #endif extern void LYLowerCase PARAMS(( char * buffer)); extern void LYUpperCase PARAMS(( char * buffer)); extern void LYRemoveBlanks PARAMS(( char * buffer)); extern char * LYSkipBlanks PARAMS(( char * buffer)); extern char * LYSkipNonBlanks PARAMS(( char * buffer)); extern CONST char * LYSkipCBlanks PARAMS(( CONST char * buffer)); extern CONST char * LYSkipCNonBlanks PARAMS(( CONST char * buffer)); extern void LYTrimLeading PARAMS(( char * buffer)); extern void LYTrimTrailing PARAMS(( char * buffer)); extern BOOLEAN LYTrimStartfile PARAMS(( char * buffer)); extern void LYSetupEdit PARAMS(( EditFieldData * edit, char * old, int maxstr, int maxdsp)); extern void LYRefreshEdit PARAMS(( EditFieldData * edit)); extern int EditBinding PARAMS((int ch)); /* in LYEditmap.c */ extern BOOL LYRemapEditBinding PARAMS(( int xlkc, int lec, int select_edi)); /* in LYEditmap.c */ extern int LYKeyForEditAction PARAMS((int lec)); /* in LYEditmap.c */ extern int LYEditKeyForAction PARAMS((int lac, int *pmodkey));/* LYEditmap.c */ extern int LYEdit1 PARAMS(( EditFieldData * edit, int ch, int action, BOOL maxMessage)); extern void LYOpenCloset NOPARAMS; extern void LYCloseCloset NOPARAMS; extern int current_lineedit; extern char * LYLineeditNames[]; extern char * LYLineEditors[]; extern CONST char * LYLineeditHelpURLs[]; extern CONST char * LYLineeditHelpURL NOPARAMS; #if 0 /* NOT USED, use function instead - kw */ /* Push a character through the lineedit machinery */ #ifdef NOT_ASCII /* S/390 -- gil -- 2080 */ #define EditBinding(c) (LYLineEditors[current_lineedit][(c)<256 ? TOASCII(c) : c]) #else /* NOT_ASCII */ #define EditBinding(c) (LYLineEditors[current_lineedit][c]) #endif /* NOT_ASCII */ #endif /* 0 */ #define LYLineEdit(e,c,m) LYEdit1(e,c,EditBinding(c)&~LYE_DF,m) /* Dummy initializer for LYEditmap.c */ extern int LYEditmapDeclared NOPARAMS; #endif /* LYSTRINGS_H */