Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
ref:uifc [2018/03/01 12:11] – Links to util:binkit changed to module:binkit digital man | ref:uifc [2020/11/28 13:57] – [UIFC List Window Flags] remove c/js chart mlong | ||
---|---|---|---|
Line 3: | Line 3: | ||
===== Background ===== | ===== Background ===== | ||
- | UIFC (User InterFaCe) is the text mode full-screen user interface library used by [[module:binkit]], [[module:binkit]], and others. | + | UIFC (User InterFaCe) is the text mode full-screen user interface library used by [[util:SCFG]], [[util:echocfg]], and others. |
- | ===== Implementations | + | ===== Interfaces |
- | Over the years, a few different implementations have been ported/ | + | ==== Input ==== |
- | ==== uifc.c ==== | + | === Mouse === |
+ | In most environments, | ||
+ | * Left-click to select a menu option | ||
+ | * Left-click outside of active window to move backwards | ||
+ | * Right-click to move backwards/ | ||
+ | * Left-click '' | ||
+ | * Left-click '' | ||
+ | * Left-click '' | ||
+ | * Left-click '' | ||
- | The original DOS 16-bit implementation, | + | === Keyboard === |
- | ==== uifc32.c | + | ^ Operation |
+ | | Move selection bar | Up and Down arrows, Home ('' | ||
+ | | Select item | Enter | | ||
+ | | Edit item | '' | ||
+ | | Insert item | Insert or '' | ||
+ | | Delete item | Delete or '' | ||
+ | | Exit | ESC or Backspace ('' | ||
+ | | Copy item | '' | ||
+ | | Cut item | '' | ||
+ | | Paste item | '' | ||
+ | |||
+ | |||
+ | ===== Development Documentation ===== | ||
+ | |||
+ | ==== C Interface ==== | ||
+ | |||
+ | === uifc.h === | ||
+ | |||
+ | The C API is exposed through the header file: '' | ||
+ | |||
+ | === uifc32.c === | ||
The 32-bit port of the DOS version, initialized using uifcini32(). | The 32-bit port of the DOS version, initialized using uifcini32(). | ||
- | ==== uifcx.c | + | === uifcx.c === |
The command-line version using standard I/O, initialized using uifcinix(). | The command-line version using standard I/O, initialized using uifcinix(). | ||
- | ===== Interfaces ===== | ||
- | |||
- | ==== C Interface ==== | ||
==== Javascript Interface ==== | ==== Javascript Interface ==== | ||
+ | |||
+ | See [[http:// | ||
+ | |||
+ | When using uifc.list, you can pass the WIN_SAV option, along with a context object to preserve the menu selection index. | ||
+ | |||
+ | The context object is created as follows: | ||
+ | |||
+ | < | ||
+ | var ctx = new uifc.list.CTX( | ||
+ | 0, // current | ||
+ | 0, // bar | ||
+ | 0, // left | ||
+ | 0, // top | ||
+ | 0 // width | ||
+ | ); | ||
+ | </ | ||
+ | |||
+ | ==== UIFC List Window Flags ==== | ||
+ | |||
+ | ^ Flag ^ Description ^ | ||
+ | | WIN_ORG | Original menu, destroy valid screen area | | ||
+ | | WIN_SAV | Save existing text and replace when finished (use with context object) | | ||
+ | || | ||
+ | | WIN_ACT | Menu remains active after a selection | | ||
+ | | WIN_INSACT | Remains active after insert key | | ||
+ | | WIN_DELACT | Remains active after delete key | | ||
+ | | WIN_CHE | Stay active after escape if changes | | ||
+ | | WIN_EXTKEYS | Return on any keypress. Return value is -2 - keyvalue | | ||
+ | | WIN_POP | Exit the list as though ESC was pressed. For use after WIN_EXTKEYS or WIN_DYN | | ||
+ | | WIN_SEL | Exit the list as though ENTER was pressed. For use after WIN_EXTKEYS or WIN_DYN | | ||
+ | | WIN_ESC | Screen is active when escape is hit | | ||
+ | | WIN_EDITACT | Remain active after edit key | | ||
+ | || | ||
+ | | WIN_L2R | Center the window based on width | | ||
+ | | WIN_T2B | Center the window based on height | | ||
+ | | WIN_RHT | Place window against right side of screen | | ||
+ | | WIN_MID | Place window in middle of screen | | ||
+ | | WIN_BOT | Place window against bottom of screen | | ||
+ | | WIN_FIXEDHEIGHT | Use light_height from uifc struct | | ||
+ | | WIN_NOBRDR | Do not draw a border around the window | | ||
+ | ||| | ||
+ | | WIN_IMM | Draw window and return immediately | | ||
+ | | WIN_INACT | Draw window inactive, intended for use with WIN_IMM | | ||
+ | ||| | ||
+ | | WIN_DYN | Dynamic window, return at least every second | | ||
+ | | WIN_REDRAW | Force redraw on dynamic window | | ||
+ | | WIN_NODRAW | Force not to redraw on dynamic window | | ||
+ | ||| | ||
+ | | WIN_INS | Allow user to use insert key | | ||
+ | | WIN_DEL | Allows use to use delete key | | ||
+ | | WIN_COPY | Allows F5 to Get/Copy a menu item | | ||
+ | | WIN_PASTE | Allows F6 to Put/Paste a menu item | | ||
+ | | WIN_XTR | Add extra line at end for inserting at end | | ||
+ | | WIN_CUT | Allow Ctrl-X/Cut a Menu Item | | ||
+ | | WIN_EDIT | Allow F2 to edit a menu item | | ||
+ | | WIN_PASTEXTR | Allow paste into extra (blank) item | | ||
+ | | WIN_GET | Alias for WIN_COPY | | ||
+ | | WIN_PUT | Alias for WIN_PASTE | | ||
+ | ||| | ||
+ | | WIN_HLP | Parse Help Codes | | ||
+ | | WIN_PACK | Pack text in window (no padding) | | ||
+ | | WIN_FAT | Do not pad outside borders | | ||
+ | | WIN_UNGETMOUSE | If the mouse is clicked outside window, put mouse even back into even queue | | ||
+ | |||
+ | |||
+ | ==== UIFC Input Keyboard Modes ==== | ||
+ | ^ Flag ^ Description ^ C ^ JS ^ | ||
+ | | K_NONE | No special behavior | Y | Y | | ||
+ | | K_UPPER | Converts all letters to upper case | Y | Y | | ||
+ | | K_UPRLWR | Upper/lower case automatically | Y | Y | | ||
+ | | K_NUMBER | Allow numbers only | Y | Y | | ||
+ | | K_WRAP | Allows word wrap | Y | Y | | ||
+ | | K_MSG | Allows ANSI, Ctrl-N, Ctrl-A, Ctrl-G | Y | Y | | ||
+ | | K_SPIN | Spinning cursor | Y | Y | | ||
+ | | K_LINE | Input line (inverse color) | Y | Y | | ||
+ | | K_EDIT | Edit string passed | Y | Y | | ||
+ | | K_CHAT | In chat multi-chat | Y | Y | | ||
+ | | K_NOCRLF | Don't print CRLF after string input | Y | Y | | ||
+ | | K_ALPHA | Only allow alphabetic characters | Y | Y | | ||
+ | | K_SCANNING | UPC Scanner is active, return on ' | ||
+ | | K_LOWPRIO | Low-priority input | Y | Y | | ||
+ | | K_NOEXASC | No extended ASCII allowed | Y | Y | | ||
+ | | K_E71DETECT | Detect E-7-1 terminal type | Y | Y | | ||
+ | | K_AUTODEL | Auto-delete text (used with K_EDIT) | Y | Y | | ||
+ | | K_COLD | Possible cold key mode | Y | Y | | ||
+ | | K_NOECHO | Don't echo input | Y | Y | | ||
+ | | K_TAB | Treat TAB as CR | Y | Y | | ||
+ | | K_LEFTEXIT | Allow exit from getstr() with backspace | Y | Y | | ||
+ | | K_USEOFFSET | Use console.getstr_offset with getstr() | Y | Y | | ||
+ | | K_NOSPIN | Do not honor user's spinning cursor | Y | Y | | ||
+ | | K_ANSI_CPR | ANSI Cursor Position Report expected | Y | Y | | ||
+ | | K_TRIM | Trim white-space from both ends of str | Y | Y | | ||
+ | | K_CTRLKEYS | No control-key handling in inkey() | Y | Y | | ||
+ | | K_TABEXIT | Exit on TAB or BACKTAB | Y | Y | | ||
+ | | K_DECIMAL | Allow floating point numbers only | Y | Y | | ||
+ | | K_DEUCEEXIT | Return on up/down/F2 | Y | Y | | ||
+ | | K_MOUSEEXIT | Returns when mouse is clicked outside of input area (not window) | Y | Y | | ||
+ | | K_PASSWORD | Do not display text while editing | Y | - | | ||
+ | | K_FIND | Don't set the " | ||
+ | |||
+ | ==== UIFC List Return Input Masks ==== | ||
+ | |||
+ | Use these masks to check for specific inputs. | ||
+ | |||
+ | ^ Mask ^ Description ^ | ||
+ | | MSK_ON | Use when checking input (see example) | | ||
+ | | MSK_OFF | Use when checking input (see example) | | ||
+ | | MSK_INS | Insert key pressed, or ENTER pressed on empty entry | | ||
+ | | MSK_DEL | Delete key pressed | | ||
+ | | MSK_COPY | Item copied (Ctrl-C) | | ||
+ | | MSK_CUT | Item cut (Ctrl-X) | | ||
+ | | MSK_PASTE | Item pasted (Ctrl-V) | | ||
+ | | MSK_EDIT | | | ||
+ | |||
+ | Example Javascript Usage: | ||
+ | |||
+ | < | ||
+ | if ((selection & MSK_ON) == MSK_DEL) { | ||
+ | // delete key pressed | ||
+ | selection &= MSK_OFF; | ||
+ | } | ||
+ | </ |