Synchronet v3.19b-Win32 (install) has been released (Jan-2022).

You can donate to the Synchronet project using PayPal.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ref:uifc [2020/11/28 10:57] – [C Interface] mlongref:uifc [2024/03/05 13:37] (current) – [Background] Update link to NetWare SYSCON page digital man
Line 3: Line 3:
 ===== Background ===== ===== Background =====
  
-UIFC (User InterFaCe) is the text mode full-screen user interface library used by [[util:SCFG]], [[util:echocfg]], and others.  It was originally inspired by the text mode user interface for NetWare 2.x server management utilities for DOS (e.g. [[http://technet.microsoft.com/en-us/library/Cc751416.w9p9774g_big(l=en-us).gif|SYSCON]]), and was written from scratch by [[person:Digital Man]].+UIFC (User InterFaCe) is the text mode full-screen user interface library used by [[util:SCFG]], [[util:echocfg]], and others.  It was originally inspired by the text mode user interface for NetWare 2.x server management utilities for DOS (e.g. [[https://www.zx.net.nz/netware/client/syscon-375/|SYSCON]]), and was written from scratch by [[person:Digital Man]].
  
-===== Implementations =====+===== Interfaces =====
  
-Over the years, a few different implementations have been ported/written. +==== Output ====
  
-==== uifc.c ====+The UIFC library uses the Synchronet Console I/O Library (CIOLIB).
  
-The original DOS 16-bit implementation, initialized using uifcini().  This implementation is no longer supported and may have problems due to the size of integers.+=== Windows Console Mode ===
  
-==== uifc32.c ====+== Windows Terminal ==
  
-The 32-bit port of the DOS version, initialized using uifcini32().  This is the best supported version and is reccomended for effectively every use. +UIFC apps are often not pretty when run from within Windows Terminal (''wt.exe''). To use the legacy Windows Console Host insteadrun ''conhost.exe'' and pass the path and arguments to the UIFC application on the command-line.
- +
-==== uifcx.c ==== +
- +
-The command-line version using standard I/Oinitialized using uifcinix() This version is a "last resort" type of implementation.  Many features don't work as intended and it can be difficult to navigate the menus.  it is intended to work though. +
- +
-==== Javascript ==== +
- +
-The Javascript implementation that can be utilized with jsexec.js. +
-===== Interfaces =====+
  
 ==== Input ==== ==== Input ====
Line 55: Line 46:
  
 ==== C Interface ==== ==== C Interface ====
 +
 +=== uifc.h ===
 +
 +The C API is exposed through the header file: ''uifc.h''.
 +
 +=== uifc32.c ===
 +
 +The 32-bit port of the DOS version, initialized using uifcini32().  This is the best supported version and is reccomended for effectively every use.
 +
 +=== uifcx.c ===
 +
 +The command-line version using standard I/O, initialized using uifcinix().  This version is a "last resort" type of implementation.  Many features don't work as intended and it can be difficult to navigate the menus.  it is intended to work though.
 +
  
 ==== Javascript Interface ==== ==== Javascript Interface ====
  
 See [[http://www.synchro.net/docs/jsobjs.html#uifc|JavaScript Object Reference]] See [[http://www.synchro.net/docs/jsobjs.html#uifc|JavaScript Object Reference]]
 +
 +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:
 +
 +<code>
 +var ctx = new uifc.list.CTX(
 +  0, // current
 +  0, // bar
 +  0, // left
 +  0, // top
 +  0 // width
 +);
 +</code>
  
 ==== UIFC List Window Flags ==== ==== UIFC List Window Flags ====
  
-^ Flag ^ Description ^ C ^ JS +^ Flag ^ Description ^ 
-| WIN_ORG | Original menu, destroy valid screen area  | Y | Y +| WIN_ORG | Original menu, destroy valid screen area  |  
-| WIN_SAV | Save existing text and replace when finished (use with context object) | Y | Y +| WIN_SAV | Save existing text and replace when finished (use with context object) | 
-|||| +|| 
-| WIN_ACT | Menu remains active after a selection | Y | Y +| WIN_ACT | Menu remains active after a selection | 
-| WIN_INSACT | Remains active after insert key | Y | Y +| WIN_INSACT | Remains active after insert key |  
-| WIN_DELACT | Remains active after delete key | Y | Y +| WIN_DELACT | Remains active after delete key | 
-| WIN_CHE | Stay active after escape if changes | Y | Y +| WIN_CHE | Stay active after escape if changes | 
-| WIN_EXTKEYS | Return on any keypress. Return value is -2 - keyvalue | Y | Y +| 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 | Y | - +| 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 | Y | - +| 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 | Y | Y +| WIN_ESC | Screen is active when escape is hit | 
-| WIN_EDITACT | Remain active after edit key | - | Y |+| WIN_EDITACT | Remain active after edit key | 
 || ||
-| WIN_L2R | Center the window based on width | Y | Y +| WIN_L2R | Center the window based on width |  
-| WIN_T2B | Center the window based on height | Y | Y +| WIN_T2B | Center the window based on height | 
-| WIN_RHT | Place window against right side of screen | Y | Y +| WIN_RHT | Place window against right side of screen |  
-| WIN_MID | Place window in middle of screen | Y | Y +| WIN_MID | Place window in middle of screen |  
-| WIN_BOT | Place window against bottom of screen | Y | Y +| WIN_BOT | Place window against bottom of screen |  
-| WIN_FIXEDHEIGHT | Use light_height from uifc struct | Y | Y +| WIN_FIXEDHEIGHT | Use light_height from uifc struct |  
-| WIN_NOBRDR | Do not draw a border around the window | Y | Y +| WIN_NOBRDR | Do not draw a border around the window |  
-|||| +||| 
-| WIN_IMM | Draw window and return immediately | Y | Y +| WIN_IMM | Draw window and return immediately |  
-| WIN_INACT | Draw window inactive, intended for use with WIN_IMM | Y | - +| WIN_INACT | Draw window inactive, intended for use with WIN_IMM | 
-|||| +||| 
-| WIN_DYN | Dynamic window, return at least every second | Y | Y +| WIN_DYN | Dynamic window, return at least every second |  
-| WIN_REDRAW | Force redraw on dynamic window | Y | Y +| WIN_REDRAW | Force redraw on dynamic window |  
-| WIN_NODRAW | Force not to redraw on dynamic window | Y | Y +| WIN_NODRAW | Force not to redraw on dynamic window |  
-|||| +||| 
-| WIN_INS | Allow user to use insert key | Y | Y +| WIN_INS | Allow user to use insert key |  
-| WIN_DEL | Allows use to use delete key | Y | Y +| WIN_DEL | Allows use to use delete key |  
-| WIN_COPY | Allows F5 to Get/Copy a menu item | Y | Y +| WIN_COPY | Allows F5 to Get/Copy a menu item |  
-| WIN_PASTE | Allows F6 to Put/Paste a menu item | Y | Y +| WIN_PASTE | Allows F6 to Put/Paste a menu item | 
-| WIN_XTR | Add extra line at end for inserting at end | Y | Y +| WIN_XTR | Add extra line at end for inserting at end | 
-| WIN_CUT | Allow Ctrl-X/Cut a Menu Item | Y | Y +| WIN_CUT | Allow Ctrl-X/Cut a Menu Item |  
-| WIN_EDIT | Allow F2 to edit a menu item | Y | Y +| WIN_EDIT | Allow F2 to edit a menu item |  
-| WIN_PASTEXTR | Allow paste into extra (blank) item | Y | - | +| WIN_PASTEXTR | Allow paste into extra (blank) item |   
-| WIN_GET | Alias for WIN_COPY | Y | - | +||| 
-| WIN_PUT | Alias for WIN_PASTE | Y | - | +| WIN_HLP | Parse Help Codes | 
-|||| +| WIN_PACK | Pack text in window (no padding) |  
-| WIN_HLP | Parse Help Codes | Y | - +| WIN_FAT | Do not pad outside borders |  
-| WIN_PACK | Pack text in window (no padding) | Y | Y +| WIN_UNGETMOUSE | If the mouse is clicked outside window, put mouse even back into even queue | 
-| WIN_FAT | Do not pad outside borders | Y | Y +
-| WIN_UNGETMOUSE | If the mouse is clicked outside window, put mouse even back into even queue | Y | Y |+
  
  
 ==== UIFC Input Keyboard Modes ==== ==== UIFC Input Keyboard Modes ====
-^ Flag ^ Description ^ C ^ JS +^ Flag ^ Description ^ 
-| K_NONE | No special behavior | Y | Y +| K_NONE | No special behavior |  
-| K_UPPER | Converts all letters to upper case | Y | Y +| K_UPPER | Converts all letters to upper case |  
-| K_UPRLWR | Upper/lower case automatically | Y | Y +| K_UPRLWR | Upper/lower case automatically | 
-| K_NUMBER | Allow numbers only | Y | Y | +| K_NUMBER | Allow numbers only |  
-| K_WRAP | Allows word wrap | Y | Y +| K_MSG | Allows Ctrl-A codes |  
-| K_MSG | Allows ANSI, Ctrl-N, Ctrl-A, Ctrl-G | Y | Y | +| K_EDIT | Edit string passed |  
-| K_SPIN | Spinning cursor | Y | Y | +| K_ALPHA | Only allow alphabetic characters |  
-| K_LINE | Input line (inverse color) | Y | Y +| K_SCANNING | UPC Scanner is active, return on '%' |  
-| K_EDIT | Edit string passwd | Y | Y | +| K_LEFTEXIT | Allow exit from getstr() with backspace |  
-| K_CHAT | In chat multi-chat | Y | Y | +| K_TABEXIT | Exit on TAB or BACKTAB |  
-| K_NOCRLF | Don't print CRLF after string input | Y | Y +| K_DECIMAL | Allow floating point numbers only | 
-| K_ALPHA | Only allow alphabetic characters | Y | Y +| K_DEUCEEXIT | Return on up/down/F2 |  
-| K_SCANNING | UPC Scanner is active, return on '%' | Y | Y | +| K_MOUSEEXIT | Returns when mouse is clicked outside of input area (not window) | 
-| K_LOWPRIO | Low-priority input | Y | Y | +| K_PASSWORD | Do not display text while editing |  
-| K_NOEXASC | No extended ASCII allowed | Y | Y | +| K_FIND | Don't set the "changes" flag | 
-| 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 "changes" flag | Y | - +
  
 ==== UIFC List Return Input Masks ==== ==== UIFC List Return Input Masks ====
Line 155: Line 154:
 | MSK_CUT | Item cut (Ctrl-X) |  | MSK_CUT | Item cut (Ctrl-X) | 
 | MSK_PASTE | Item pasted (Ctrl-V) |  | MSK_PASTE | Item pasted (Ctrl-V) | 
-| MSK_EDIT | |+| MSK_EDIT | Item was selected for edit (F2) |
  
-Example Javascript Usage:+Example JavaScript Usage:
  
 <code> <code>
Line 165: Line 164:
 } }
 </code> </code>
 +
 +{{tag>javascript uifc}}