|
Packit |
437b5e |
/*
|
|
Packit |
437b5e |
* Curses binding for Lua 5.1, 5.2 & 5.3.
|
|
Packit |
437b5e |
*
|
|
Packit |
437b5e |
* (c) Gary V. Vaughan <gary@vaughan.pe> 2013-2015
|
|
Packit |
437b5e |
* (c) Reuben Thomas <rrt@sc3d.org> 2009-2012
|
|
Packit |
437b5e |
* (c) Tiago Dionizio <tiago.dionizio AT gmail.com> 2004-2007
|
|
Packit |
437b5e |
*
|
|
Packit |
437b5e |
* Permission is hereby granted, free of charge, to any person obtaining
|
|
Packit |
437b5e |
* a copy of this software and associated documentation files (the
|
|
Packit |
437b5e |
* "Software"), to deal in the Software without restriction, including
|
|
Packit |
437b5e |
* without limitation the rights to use, copy, modify, merge, publish,
|
|
Packit |
437b5e |
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
Packit |
437b5e |
* permit persons to whom the Software is furnished to do so, subject to
|
|
Packit |
437b5e |
* the following conditions:
|
|
Packit |
437b5e |
*
|
|
Packit |
437b5e |
* The above copyright notice and this permission notice shall be
|
|
Packit |
437b5e |
* included in all copies or substantial portions of the Software.
|
|
Packit |
437b5e |
*
|
|
Packit |
437b5e |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
Packit |
437b5e |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
Packit |
437b5e |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
Packit |
437b5e |
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
Packit |
437b5e |
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
Packit |
437b5e |
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
Packit |
437b5e |
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Full-screen Text Terminal Manipulation.
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
In the underlying curses C library, the following functions:
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
getstr() (and wgetstr(), mvgetstr(), and mvwgetstr())
|
|
Packit |
437b5e |
inchstr() (and winchstr(), mvinchstr(), and mvwinchstr())
|
|
Packit |
437b5e |
instr() (and winstr(), mvinstr(), and mvwinstr())
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
are subject to buffer overflow attack. This is because you pass in the
|
|
Packit |
437b5e |
buffer to be filled in, which has to be of finite length. But in this
|
|
Packit |
437b5e |
Lua module, a buffer is assigned automatically and the function returns
|
|
Packit |
437b5e |
the string, so there is no security issue. You may still use the alternate
|
|
Packit |
437b5e |
functions:
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
s = stdscr:getnstr()
|
|
Packit |
437b5e |
s = stdscr:inchnstr()
|
|
Packit |
437b5e |
s = stdscr:innstr()
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
which take an extra "size of buffer" argument, in order to impose a maximum
|
|
Packit |
437b5e |
length on the string the user may type in.
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
Some of the C functions beginning with "no" do not exist in Lua. You should
|
|
Packit |
437b5e |
use `curses.nl(false)` and `curses.nl(true)` instead of `nonl()` and `nl()`,
|
|
Packit |
437b5e |
and likewise `curses.echo(false)` and `curses.echo(true)` instead of
|
|
Packit |
437b5e |
`noecho()` and `echo()` .
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
In this Lua module the `stdscr:getch()` function always returns an integer.
|
|
Packit |
437b5e |
In C, a single character is an integer, but in Lua (and Perl) a single
|
|
Packit |
437b5e |
character is a short string. The Perl Curses function `getch()` returns a
|
|
Packit |
437b5e |
char if it was a char, and a number if it was a constant; to get this
|
|
Packit |
437b5e |
behaviour in Lua you have to convert explicitly, e.g.:
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
if c < 256 then c = string.char(c) end
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
Some Lua functions take a different set of parameters than their C
|
|
Packit |
437b5e |
counterparts; for example, you should use `str = stdscr.getstr()` and
|
|
Packit |
437b5e |
`y, x = stdscr.getyx()` instead of `getstr(str)` and `getyx(y, x)`, and
|
|
Packit |
437b5e |
likewise for `getbegyx` and `getmaxyx` and `getparyx` and `pair_content`.
|
|
Packit |
437b5e |
The Perl Curses module now uses the C-compatible parameters, so be aware of
|
|
Packit |
437b5e |
this difference when translating code from Perl into Lua, as well as from C
|
|
Packit |
437b5e |
into Lua.
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
Many curses functions have variants starting with the prefixes `w-`, `mv-`,
|
|
Packit |
437b5e |
and/or `wmv-`. These variants differ only in the explicit addition of a
|
|
Packit |
437b5e |
window, or by the addition of two coordinates that are used to move the
|
|
Packit |
437b5e |
cursor first. For example, in C `addch()` has three other variants:
|
|
Packit |
437b5e |
`waddch()`, `mvaddch()` and `mvwaddch()`. The Lua equivalents,
|
|
Packit |
437b5e |
respectively being `stdscr:addch()`, `somewindow:addch()`,
|
|
Packit |
437b5e |
`stdscr:mvaddch()` and `somewindow:mvaddch()`, with the window argument
|
|
Packit |
437b5e |
passed implicitly with Lua's `:` syntax sugar.
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
@module posix.curses
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#include <config.h>
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#include "curses/chstr.c"
|
|
Packit |
437b5e |
#include "curses/window.c"
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#if HAVE_CURSES
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#include "_helpers.c"
|
|
Packit |
437b5e |
#include "strlcpy.c"
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
static const char *STDSCR_REGISTRY = "curses:stdscr";
|
|
Packit |
437b5e |
static const char *RIPOFF_TABLE = "curses:ripoffline";
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Create a new line drawing buffer instance.
|
|
Packit |
437b5e |
@function new_chstr
|
|
Packit |
437b5e |
@int len number of element to allocate
|
|
Packit |
437b5e |
@treturn chstr a new char buffer object
|
|
Packit |
437b5e |
@see posix.curses.chstr
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pnew_chstr(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int len = checkint(L, 1);
|
|
Packit |
437b5e |
chstr* ncs = chstr_new(L, len); /* defined in curses/chstr.c */
|
|
Packit |
437b5e |
memset(ncs->str, ' ', len*sizeof(chtype));
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#define CCR(n, v) \
|
|
Packit |
437b5e |
lua_pushstring(L, n); \
|
|
Packit |
437b5e |
lua_pushinteger(L, v); \
|
|
Packit |
437b5e |
lua_settable(L, lua_upvalueindex(1))
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#define CC(s) CCR(#s, s)
|
|
Packit |
437b5e |
#define CF(i) CCR(LPOSIX_STR(LPOSIX_SPLICE(KEY_F, i)), KEY_F(i))
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/*
|
|
Packit |
437b5e |
** these values may be fixed only after initialization, so this is
|
|
Packit |
437b5e |
** called from Pinitscr, after the curses driver is initialized
|
|
Packit |
437b5e |
**
|
|
Packit |
437b5e |
** curses table is kept at upvalue position 1, in case the global
|
|
Packit |
437b5e |
** name is changed by the user or even in the registration phase by
|
|
Packit |
437b5e |
** the developer
|
|
Packit |
437b5e |
**
|
|
Packit |
437b5e |
** some of these values are not constant so need to register
|
|
Packit |
437b5e |
** them directly instead of using a table
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
static void
|
|
Packit |
437b5e |
register_curses_constants(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
/* colors */
|
|
Packit |
437b5e |
CC(COLOR_BLACK); CC(COLOR_RED); CC(COLOR_GREEN);
|
|
Packit |
437b5e |
CC(COLOR_YELLOW); CC(COLOR_BLUE); CC(COLOR_MAGENTA);
|
|
Packit |
437b5e |
CC(COLOR_CYAN); CC(COLOR_WHITE);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* alternate character set */
|
|
Packit |
437b5e |
CC(ACS_BLOCK); CC(ACS_BOARD);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
CC(ACS_BTEE); CC(ACS_TTEE);
|
|
Packit |
437b5e |
CC(ACS_LTEE); CC(ACS_RTEE);
|
|
Packit |
437b5e |
CC(ACS_LLCORNER); CC(ACS_LRCORNER);
|
|
Packit |
437b5e |
CC(ACS_URCORNER); CC(ACS_ULCORNER);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
CC(ACS_LARROW); CC(ACS_RARROW);
|
|
Packit |
437b5e |
CC(ACS_UARROW); CC(ACS_DARROW);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
CC(ACS_HLINE); CC(ACS_VLINE);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
CC(ACS_BULLET); CC(ACS_CKBOARD); CC(ACS_LANTERN);
|
|
Packit |
437b5e |
CC(ACS_DEGREE); CC(ACS_DIAMOND);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
CC(ACS_PLMINUS); CC(ACS_PLUS);
|
|
Packit |
437b5e |
CC(ACS_S1); CC(ACS_S9);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* attributes */
|
|
Packit |
437b5e |
CC(A_NORMAL); CC(A_STANDOUT); CC(A_UNDERLINE);
|
|
Packit |
437b5e |
CC(A_REVERSE); CC(A_BLINK); CC(A_DIM);
|
|
Packit |
437b5e |
CC(A_BOLD); CC(A_PROTECT); CC(A_INVIS);
|
|
Packit |
437b5e |
CC(A_ALTCHARSET); CC(A_CHARTEXT);
|
|
Packit |
437b5e |
CC(A_ATTRIBUTES);
|
|
Packit |
437b5e |
#ifdef A_COLOR
|
|
Packit |
437b5e |
CC(A_COLOR);
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* key functions */
|
|
Packit |
437b5e |
CC(KEY_BREAK); CC(KEY_DOWN); CC(KEY_UP);
|
|
Packit |
437b5e |
CC(KEY_LEFT); CC(KEY_RIGHT); CC(KEY_HOME);
|
|
Packit |
437b5e |
CC(KEY_BACKSPACE);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
CC(KEY_DL); CC(KEY_IL); CC(KEY_DC);
|
|
Packit |
437b5e |
CC(KEY_IC); CC(KEY_EIC); CC(KEY_CLEAR);
|
|
Packit |
437b5e |
CC(KEY_EOS); CC(KEY_EOL); CC(KEY_SF);
|
|
Packit |
437b5e |
CC(KEY_SR); CC(KEY_NPAGE); CC(KEY_PPAGE);
|
|
Packit |
437b5e |
CC(KEY_STAB); CC(KEY_CTAB); CC(KEY_CATAB);
|
|
Packit |
437b5e |
CC(KEY_ENTER); CC(KEY_SRESET); CC(KEY_RESET);
|
|
Packit |
437b5e |
CC(KEY_PRINT); CC(KEY_LL); CC(KEY_A1);
|
|
Packit |
437b5e |
CC(KEY_A3); CC(KEY_B2); CC(KEY_C1);
|
|
Packit |
437b5e |
CC(KEY_C3); CC(KEY_BTAB); CC(KEY_BEG);
|
|
Packit |
437b5e |
CC(KEY_CANCEL); CC(KEY_CLOSE); CC(KEY_COMMAND);
|
|
Packit |
437b5e |
CC(KEY_COPY); CC(KEY_CREATE); CC(KEY_END);
|
|
Packit |
437b5e |
CC(KEY_EXIT); CC(KEY_FIND); CC(KEY_HELP);
|
|
Packit |
437b5e |
CC(KEY_MARK); CC(KEY_MESSAGE); /* ncurses extension: CC(KEY_MOUSE); */
|
|
Packit |
437b5e |
CC(KEY_MOVE); CC(KEY_NEXT); CC(KEY_OPEN);
|
|
Packit |
437b5e |
CC(KEY_OPTIONS); CC(KEY_PREVIOUS); CC(KEY_REDO);
|
|
Packit |
437b5e |
CC(KEY_REFERENCE); CC(KEY_REFRESH); CC(KEY_REPLACE);
|
|
Packit |
437b5e |
CC(KEY_RESIZE); CC(KEY_RESTART); CC(KEY_RESUME);
|
|
Packit |
437b5e |
CC(KEY_SAVE); CC(KEY_SBEG); CC(KEY_SCANCEL);
|
|
Packit |
437b5e |
CC(KEY_SCOMMAND); CC(KEY_SCOPY); CC(KEY_SCREATE);
|
|
Packit |
437b5e |
CC(KEY_SDC); CC(KEY_SDL); CC(KEY_SELECT);
|
|
Packit |
437b5e |
CC(KEY_SEND); CC(KEY_SEOL); CC(KEY_SEXIT);
|
|
Packit |
437b5e |
CC(KEY_SFIND); CC(KEY_SHELP); CC(KEY_SHOME);
|
|
Packit |
437b5e |
CC(KEY_SIC); CC(KEY_SLEFT); CC(KEY_SMESSAGE);
|
|
Packit |
437b5e |
CC(KEY_SMOVE); CC(KEY_SNEXT); CC(KEY_SOPTIONS);
|
|
Packit |
437b5e |
CC(KEY_SPREVIOUS); CC(KEY_SPRINT); CC(KEY_SREDO);
|
|
Packit |
437b5e |
CC(KEY_SREPLACE); CC(KEY_SRIGHT); CC(KEY_SRSUME);
|
|
Packit |
437b5e |
CC(KEY_SSAVE); CC(KEY_SSUSPEND); CC(KEY_SUNDO);
|
|
Packit |
437b5e |
CC(KEY_SUSPEND); CC(KEY_UNDO);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* KEY_Fx 0 <= x <= 63 */
|
|
Packit |
437b5e |
CC(KEY_F0);
|
|
Packit |
437b5e |
CF(1); CF(2); CF(3); CF(4); CF(5); CF(6); CF(7); CF(8);
|
|
Packit |
437b5e |
CF(9); CF(10); CF(11); CF(12); CF(13); CF(14); CF(15); CF(16);
|
|
Packit |
437b5e |
CF(17); CF(18); CF(19); CF(20); CF(21); CF(22); CF(23); CF(24);
|
|
Packit |
437b5e |
CF(25); CF(26); CF(27); CF(28); CF(29); CF(30); CF(31); CF(32);
|
|
Packit |
437b5e |
CF(33); CF(34); CF(35); CF(36); CF(37); CF(38); CF(39); CF(40);
|
|
Packit |
437b5e |
CF(41); CF(42); CF(43); CF(44); CF(45); CF(46); CF(47); CF(48);
|
|
Packit |
437b5e |
CF(49); CF(50); CF(51); CF(52); CF(53); CF(54); CF(55); CF(56);
|
|
Packit |
437b5e |
CF(57); CF(58); CF(59); CF(60); CF(61); CF(62); CF(63);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/*
|
|
Packit |
437b5e |
** make sure screen is restored (and cleared) at exit
|
|
Packit |
437b5e |
** (for the situations where program is aborted without a
|
|
Packit |
437b5e |
** proper cleanup)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
static void
|
|
Packit |
437b5e |
cleanup(void)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
if (!isendwin())
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
wclear(stdscr);
|
|
Packit |
437b5e |
wrefresh(stdscr);
|
|
Packit |
437b5e |
endwin();
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Initialise screen.
|
|
Packit |
437b5e |
@function initscr
|
|
Packit |
437b5e |
@treturn window main screen
|
|
Packit |
437b5e |
@see curs_initscr(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pinitscr(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
WINDOW *w;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* initialize curses */
|
|
Packit |
437b5e |
w = initscr();
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* no longer used, so clean it up */
|
|
Packit |
437b5e |
lua_pushstring(L, RIPOFF_TABLE);
|
|
Packit |
437b5e |
lua_pushnil(L);
|
|
Packit |
437b5e |
lua_settable(L, LUA_REGISTRYINDEX);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* failed to initialize */
|
|
Packit |
437b5e |
if (w == NULL)
|
|
Packit |
437b5e |
return 0;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* return stdscr - main window */
|
|
Packit |
437b5e |
lc_newwin(L, w);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* save main window on registry */
|
|
Packit |
437b5e |
lua_pushstring(L, STDSCR_REGISTRY);
|
|
Packit |
437b5e |
lua_pushvalue(L, -2);
|
|
Packit |
437b5e |
lua_rawset(L, LUA_REGISTRYINDEX);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* setup curses constants - curses.xxx numbers */
|
|
Packit |
437b5e |
register_curses_constants(L);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* install cleanup handler to help in debugging and screen trashing */
|
|
Packit |
437b5e |
atexit(cleanup);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Clean up terminal prior to exiting or escaping curses.
|
|
Packit |
437b5e |
@function endwin
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_initscr(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pendwin(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushokresult(endwin());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Has @{endwin} been called more recently than @{posix.curses.window:refresh}?
|
|
Packit |
437b5e |
@function isendwin
|
|
Packit |
437b5e |
@treturn bool whether @{endwin} has been called
|
|
Packit |
437b5e |
@see curs_initscr(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pisendwin(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushboolresult(isendwin());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Retern the main screen window.
|
|
Packit |
437b5e |
@function stdscr
|
|
Packit |
437b5e |
@treturn window main screen
|
|
Packit |
437b5e |
@see initscr
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pstdscr(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
lua_pushstring(L, STDSCR_REGISTRY);
|
|
Packit |
437b5e |
lua_rawget(L, LUA_REGISTRYINDEX);
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Number of columns in the main screen window.
|
|
Packit |
437b5e |
@function cols
|
|
Packit |
437b5e |
@treturn int number of columns in the main screen
|
|
Packit |
437b5e |
@see lines
|
|
Packit |
437b5e |
@see stdscr
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pcols(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushintresult(COLS);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Number of lines in the main screen window.
|
|
Packit |
437b5e |
@function lines
|
|
Packit |
437b5e |
@treturn int number of lines in the main screen
|
|
Packit |
437b5e |
@see cols
|
|
Packit |
437b5e |
@see stdscr
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Plines(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushintresult(LINES);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Initialise color output facility.
|
|
Packit |
437b5e |
@function start_color
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_color(3x)
|
|
Packit |
437b5e |
@see has_colors
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pstart_color(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushokresult(start_color());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Does the terminal have color capability?
|
|
Packit |
437b5e |
@function has_colors
|
|
Packit |
437b5e |
@treturn bool `true`, if the terminal supports colors
|
|
Packit |
437b5e |
@see curs_color(3x)
|
|
Packit |
437b5e |
@see start_color
|
|
Packit |
437b5e |
@usage
|
|
Packit |
437b5e |
if curses.has_colors () then
|
|
Packit |
437b5e |
curses.start_color ()
|
|
Packit |
437b5e |
end
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Phas_colors(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushboolresult(has_colors());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Reserve `-1` to represent terminal default colors.
|
|
Packit |
437b5e |
@function use_default_colors
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see default_colors(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Puse_default_colors(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushokresult(use_default_colors());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Associate a color pair id with a specific foreground and background color.
|
|
Packit |
437b5e |
@function init_pair
|
|
Packit |
437b5e |
@int pair color pair id to act on
|
|
Packit |
437b5e |
@int f foreground color to assign
|
|
Packit |
437b5e |
@int b background color to assign
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_color(3x)
|
|
Packit |
437b5e |
@see pair_content
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pinit_pair(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
short pair = checkint(L, 1);
|
|
Packit |
437b5e |
short f = checkint(L, 2);
|
|
Packit |
437b5e |
short b = checkint(L, 3);
|
|
Packit |
437b5e |
return pushokresult(init_pair(pair, f, b));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Return the foreground and background colors associated with a color pair id.
|
|
Packit |
437b5e |
@function pair_content
|
|
Packit |
437b5e |
@int pair color pair id to act on
|
|
Packit |
437b5e |
@treturn int foreground color of *pair*
|
|
Packit |
437b5e |
@treturn int background color of *pair*
|
|
Packit |
437b5e |
@see curs_color(3x)
|
|
Packit |
437b5e |
@see init_pair
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Ppair_content(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
short pair = checkint(L, 1);
|
|
Packit |
437b5e |
short f;
|
|
Packit |
437b5e |
short b;
|
|
Packit |
437b5e |
int ret = pair_content(pair, &f, &b);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
if (ret == ERR)
|
|
Packit |
437b5e |
return 0;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
lua_pushinteger(L, f);
|
|
Packit |
437b5e |
lua_pushinteger(L, b);
|
|
Packit |
437b5e |
return 2;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
How many colors are available for this terminal?
|
|
Packit |
437b5e |
@function colors
|
|
Packit |
437b5e |
@treturn int total number of available colors
|
|
Packit |
437b5e |
@see curs_color(3x)
|
|
Packit |
437b5e |
@see color_pairs
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pcolors(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushintresult(COLORS);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
How may distinct color pairs are supported by this terminal?
|
|
Packit |
437b5e |
@function color_pairs
|
|
Packit |
437b5e |
@treturn int total number of available color pairs
|
|
Packit |
437b5e |
@see curs_color(3x)
|
|
Packit |
437b5e |
@see colors
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pcolor_pairs(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushintresult(COLOR_PAIRS);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Return the attributes for the given color pair id.
|
|
Packit |
437b5e |
@function color_pair
|
|
Packit |
437b5e |
@int pair color pair id to act on
|
|
Packit |
437b5e |
@treturn int attributes for color pair *pair*
|
|
Packit |
437b5e |
@see curs_color(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pcolor_pair(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int n = checkint(L, 1);
|
|
Packit |
437b5e |
return pushintresult(COLOR_PAIR(n));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the output speed of the terminal.
|
|
Packit |
437b5e |
@function baudrate
|
|
Packit |
437b5e |
@treturn int output speed of the terminal in bits-per-second
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pbaudrate(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushintresult(baudrate());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the terminal's current erase character.
|
|
Packit |
437b5e |
@function erasechar
|
|
Packit |
437b5e |
@treturn int current erase character
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Perasechar(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushintresult(erasechar());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the character insert and delete capability of the terminal.
|
|
Packit |
437b5e |
@function has_ic
|
|
Packit |
437b5e |
@treturn bool `true`, if the terminal has insert and delete character
|
|
Packit |
437b5e |
operations
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Phas_ic(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushboolresult(has_ic());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the line insert and delete capability of the terminal.
|
|
Packit |
437b5e |
@function has_il
|
|
Packit |
437b5e |
@treturn bool `true`, if the terminal has insert and delete line operations
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Phas_il(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushboolresult(has_il());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the terminal's current kill character.
|
|
Packit |
437b5e |
@function killchar
|
|
Packit |
437b5e |
@treturn int current line kill character
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pkillchar(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushintresult(killchar());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Bitwise OR of all (or selected) video attributes supported by the terminal.
|
|
Packit |
437b5e |
@function termattrs
|
|
Packit |
437b5e |
@int[opt] a terminal attribute bits
|
|
Packit |
437b5e |
@treturn[1] bool `true`, if the terminal supports attribute *a*
|
|
Packit |
437b5e |
@treturn[2] int bitarray of supported terminal attributes
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Ptermattrs(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
if (lua_gettop(L) > 0)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int a = checkint(L, 1);
|
|
Packit |
437b5e |
return pushboolresult(termattrs() & a);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
return pushintresult(termattrs());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the name of the terminal.
|
|
Packit |
437b5e |
@function termname
|
|
Packit |
437b5e |
@treturn string terminal name
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Ptermname(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushstringresult(termname());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the verbose name of the terminal.
|
|
Packit |
437b5e |
@function longname
|
|
Packit |
437b5e |
@treturn string verbose description of the current terminal
|
|
Packit |
437b5e |
@see curs_termattrs(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Plongname(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushstringresult(longname());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* there is no easy way to implement this... */
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
static lua_State *rip_L = NULL;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
ripoffline_cb(WINDOW* w, int cols)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
static int line = 0;
|
|
Packit |
437b5e |
int top = lua_gettop(rip_L);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* better be safe */
|
|
Packit |
437b5e |
if (!lua_checkstack(rip_L, 5))
|
|
Packit |
437b5e |
return 0;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* get the table from the registry */
|
|
Packit |
437b5e |
lua_pushstring(rip_L, RIPOFF_TABLE);
|
|
Packit |
437b5e |
lua_gettable(rip_L, LUA_REGISTRYINDEX);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* get user callback function */
|
|
Packit |
437b5e |
if (lua_isnil(rip_L, -1)) {
|
|
Packit |
437b5e |
lua_pop(rip_L, 1);
|
|
Packit |
437b5e |
return 0;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
lua_rawgeti(rip_L, -1, ++line); /* function to be called */
|
|
Packit |
437b5e |
lc_newwin(rip_L, w); /* create window object */
|
|
Packit |
437b5e |
lua_pushinteger(rip_L, cols); /* push number of columns */
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
lua_pcall(rip_L, 2, 0, 0); /* call the lua function */
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
lua_settop(rip_L, top);
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Reduce the available size of the main screen.
|
|
Packit |
437b5e |
@function ripoffline
|
|
Packit |
437b5e |
@bool top_line
|
|
Packit |
437b5e |
@func callback
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_kernel(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pripoffline(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
static int rip = 0;
|
|
Packit |
437b5e |
int top_line = lua_toboolean(L, 1);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
if (!lua_isfunction(L, 2))
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
lua_pushliteral(L, "invalid callback passed as second parameter");
|
|
Packit |
437b5e |
lua_error(L);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* need to save the lua state somewhere... */
|
|
Packit |
437b5e |
rip_L = L;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* get the table where we are going to save the callbacks */
|
|
Packit |
437b5e |
lua_pushstring(L, RIPOFF_TABLE);
|
|
Packit |
437b5e |
lua_gettable(L, LUA_REGISTRYINDEX);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
if (lua_isnil(L, -1))
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
lua_pop(L, 1);
|
|
Packit |
437b5e |
lua_newtable(L);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
lua_pushstring(L, RIPOFF_TABLE);
|
|
Packit |
437b5e |
lua_pushvalue(L, -2);
|
|
Packit |
437b5e |
lua_settable(L, LUA_REGISTRYINDEX);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* save function callback in registry table */
|
|
Packit |
437b5e |
lua_pushvalue(L, 2);
|
|
Packit |
437b5e |
lua_rawseti(L, -2, ++rip);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/* and tell curses we are going to take the line */
|
|
Packit |
437b5e |
return pushokresult(ripoffline(top_line ? 1 : -1, ripoffline_cb));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "ripoffline", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Change the visibility of the cursor.
|
|
Packit |
437b5e |
@function curs_set
|
|
Packit |
437b5e |
@int vis one of `0` (invisible), `1` (visible) or `2` (very visible)
|
|
Packit |
437b5e |
@treturn[1] int previous cursor state
|
|
Packit |
437b5e |
@return[2] nil if *vis* is not supported
|
|
Packit |
437b5e |
@see curs_kernel(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pcurs_set(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int vis = checkint(L, 1);
|
|
Packit |
437b5e |
int state = curs_set(vis);
|
|
Packit |
437b5e |
if (state == ERR)
|
|
Packit |
437b5e |
return 0;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
return pushintresult(state);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Sleep for a few milliseconds.
|
|
Packit |
437b5e |
@function napms
|
|
Packit |
437b5e |
@int ms time to wait in milliseconds
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_kernel(3x)
|
|
Packit |
437b5e |
@see delay_output
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pnapms(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int ms = checkint(L, 1);
|
|
Packit |
437b5e |
return pushokresult(napms(ms));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Change the terminal size.
|
|
Packit |
437b5e |
@function resizeterm
|
|
Packit |
437b5e |
@int nlines number of lines
|
|
Packit |
437b5e |
@int ncols number of columns
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@raise unimplemented
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Presizeterm(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int nlines = checkint(L, 1);
|
|
Packit |
437b5e |
int ncols = checkint(L, 2);
|
|
Packit |
437b5e |
#if HAVE_RESIZETERM
|
|
Packit |
437b5e |
return pushokresult(resizeterm (nlines, ncols));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "resizeterm", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Send the terminal audible bell.
|
|
Packit |
437b5e |
@function beep
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_beep(3x)
|
|
Packit |
437b5e |
@see flash
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pbeep(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushokresult(beep());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Send the terminal visible bell.
|
|
Packit |
437b5e |
@function flash
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_beep(3x)
|
|
Packit |
437b5e |
@see beep
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pflash(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushokresult(flash());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Create a new window.
|
|
Packit |
437b5e |
@function newwin
|
|
Packit |
437b5e |
@int nlines number of window lines
|
|
Packit |
437b5e |
@int ncols number of window columns
|
|
Packit |
437b5e |
@int begin_y top line of window
|
|
Packit |
437b5e |
@int begin_x leftmost column of window
|
|
Packit |
437b5e |
@treturn window a new window object
|
|
Packit |
437b5e |
@see curs_window(3x)
|
|
Packit |
437b5e |
@see posix.curses.window
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pnewwin(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int nlines = checkint(L, 1);
|
|
Packit |
437b5e |
int ncols = checkint(L, 2);
|
|
Packit |
437b5e |
int begin_y = checkint(L, 3);
|
|
Packit |
437b5e |
int begin_x = checkint(L, 4);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
lc_newwin(L, newwin(nlines, ncols, begin_y, begin_x));
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Refresh the visible terminal screen.
|
|
Packit |
437b5e |
@function doupdate
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_refresh(3x)
|
|
Packit |
437b5e |
@see posix.curses.window:refresh
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pdoupdate(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushokresult(doupdate());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Initialise the soft label keys area.
|
|
Packit |
437b5e |
This must be called before @{initscr}.
|
|
Packit |
437b5e |
@function slk_init
|
|
Packit |
437b5e |
@int fmt
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_init(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int fmt = checkint(L, 1);
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_init(fmt));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_init", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Set the label for a soft label key.
|
|
Packit |
437b5e |
@function slk_set
|
|
Packit |
437b5e |
@int labnum
|
|
Packit |
437b5e |
@string label
|
|
Packit |
437b5e |
@int fmt
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_set(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int labnum = checkint(L, 1);
|
|
Packit |
437b5e |
const char* label = luaL_checkstring(L, 2);
|
|
Packit |
437b5e |
int fmt = checkint(L, 3);
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_set(labnum, label, fmt));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_set", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Refresh the soft label key area.
|
|
Packit |
437b5e |
@function slk_refresh
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
@see posix.curses.window:refresh
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_refresh(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_refresh());
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_refresh", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Copy the soft label key area backing screen to the virtual screen.
|
|
Packit |
437b5e |
@function slk_noutrefresh
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
@see posix.curses.window:refresh
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_noutrefresh(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_noutrefresh());
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_noutrefresh", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch the label for a soft label key.
|
|
Packit |
437b5e |
@function slk_label
|
|
Packit |
437b5e |
@int labnum
|
|
Packit |
437b5e |
@treturn string current label for *labnum*
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_label(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int labnum = checkint(L, 1);
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushstringresult(slk_label(labnum));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_label", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Clears the soft labels from the screen.
|
|
Packit |
437b5e |
@function slk_clear
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
@see slk_restore
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_clear(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_clear());
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_clear", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Restores the soft labels to the screen.
|
|
Packit |
437b5e |
@function slk_restore
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
@see slk_clear
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_restore(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_restore());
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_restore", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Mark the soft label key area for refresh.
|
|
Packit |
437b5e |
@function slk_touch
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_touch(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_touch());
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_touch", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Enable an attribute for soft labels.
|
|
Packit |
437b5e |
@function slk_attron
|
|
Packit |
437b5e |
@int attrs
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_attron(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
chtype attrs = checkch(L, 1);
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_attron(attrs));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_attron", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Disable an attribute for soft labels.
|
|
Packit |
437b5e |
@function slk_attroff
|
|
Packit |
437b5e |
@int attrs
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_attroff(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
chtype attrs = checkch(L, 1);
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_attroff(attrs));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_attroff", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Set the attributes for soft labels.
|
|
Packit |
437b5e |
@function slk_attrset
|
|
Packit |
437b5e |
@int attrs
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_slk(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pslk_attrset(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
chtype attrs = checkch(L, 1);
|
|
Packit |
437b5e |
#if LPOSIX_CURSES_COMPLIANT
|
|
Packit |
437b5e |
return pushokresult(slk_attrset(attrs));
|
|
Packit |
437b5e |
#else
|
|
Packit |
437b5e |
return binding_notimplemented(L, "slk_attrset", "curses");
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Put the terminal into cbreak mode.
|
|
Packit |
437b5e |
@function cbreak
|
|
Packit |
437b5e |
@bool[opt] on
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_inopts(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pcbreak(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
if (lua_isnoneornil(L, 1) || lua_toboolean(L, 1))
|
|
Packit |
437b5e |
return pushokresult(cbreak());
|
|
Packit |
437b5e |
return pushokresult(nocbreak());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Whether characters are echoed to the terminal as they are typed.
|
|
Packit |
437b5e |
@function echo
|
|
Packit |
437b5e |
@bool[opt] on
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_inopts(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pecho(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
if (lua_isnoneornil(L, 1) || lua_toboolean(L, 1))
|
|
Packit |
437b5e |
return pushokresult(echo());
|
|
Packit |
437b5e |
return pushokresult(noecho());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Put the terminal into raw mode.
|
|
Packit |
437b5e |
@function raw
|
|
Packit |
437b5e |
@bool[opt] on
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_inopts(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Praw(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
if (lua_isnoneornil(L, 1) || lua_toboolean(L, 1))
|
|
Packit |
437b5e |
return pushokresult(raw());
|
|
Packit |
437b5e |
return pushokresult(noraw());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Put the terminal into halfdelay mode.
|
|
Packit |
437b5e |
@function halfdelay
|
|
Packit |
437b5e |
@int tenths delay in tenths of a second
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_inopts(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Phalfdelay(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int tenths = checkint(L, 1);
|
|
Packit |
437b5e |
return pushokresult(halfdelay(tenths));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Whether to translate a return key to newline on input.
|
|
Packit |
437b5e |
@function nl
|
|
Packit |
437b5e |
@bool[opt] on
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_outopts(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pnl(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
if (lua_isnoneornil(L, 1) || lua_toboolean(L, 1))
|
|
Packit |
437b5e |
return pushokresult(nl());
|
|
Packit |
437b5e |
return pushokresult(nonl());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Return a printable representation of a character, ignoring attributes.
|
|
Packit |
437b5e |
@function unctrl
|
|
Packit |
437b5e |
@int c character to act on
|
|
Packit |
437b5e |
@treturn string printable representation of *c*
|
|
Packit |
437b5e |
@see curs_util(3x)
|
|
Packit |
437b5e |
@see keyname
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Punctrl(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
chtype c = checkch(L, 1);
|
|
Packit |
437b5e |
return pushstringresult(unctrl(c));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Return a printable representation of a key.
|
|
Packit |
437b5e |
@function keyname
|
|
Packit |
437b5e |
@int c a key
|
|
Packit |
437b5e |
@treturn string key name of *c*
|
|
Packit |
437b5e |
@see curs_util(3x)
|
|
Packit |
437b5e |
@see unctrl
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pkeyname(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int c = checkint(L, 1);
|
|
Packit |
437b5e |
return pushstringresult(keyname(c));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Insert padding characters to force a short delay.
|
|
Packit |
437b5e |
@function delay_output
|
|
Packit |
437b5e |
@int ms delay time in milliseconds
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_util(3x)
|
|
Packit |
437b5e |
@see napms
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pdelay_output(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int ms = checkint(L, 1);
|
|
Packit |
437b5e |
return pushokresult(delay_output(ms));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Throw away any typeahead in the keyboard input buffer.
|
|
Packit |
437b5e |
@function flushinp
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_util(3x)
|
|
Packit |
437b5e |
@see ungetch
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pflushinp(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
return pushboolresult(flushinp());
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Return a character to the keyboard input buffer.
|
|
Packit |
437b5e |
@function ungetch
|
|
Packit |
437b5e |
@int c
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see curs_getch(3x)
|
|
Packit |
437b5e |
@see flushinp
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pungetch(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int c = checkint(L, 1);
|
|
Packit |
437b5e |
return pushokresult(ungetch(c));
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Create a new pad.
|
|
Packit |
437b5e |
@function newpad
|
|
Packit |
437b5e |
@int nlines
|
|
Packit |
437b5e |
@int ncols
|
|
Packit |
437b5e |
@treturn bool `true`, if successful
|
|
Packit |
437b5e |
@see cur_pad(3x)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Pnewpad(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int nlines = checkint(L, 1);
|
|
Packit |
437b5e |
int ncols = checkint(L, 2);
|
|
Packit |
437b5e |
lc_newwin(L, newpad(nlines, ncols));
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
static char ti_capname[32];
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch terminfo boolean capability.
|
|
Packit |
437b5e |
@function tigetflag
|
|
Packit |
437b5e |
@string capname
|
|
Packit |
437b5e |
@treturn bool content of terminal boolean capability
|
|
Packit |
437b5e |
@see curs_terminfo(3x)
|
|
Packit |
437b5e |
@see terminfo(5)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Ptigetflag (lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int r;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
strlcpy (ti_capname, luaL_checkstring (L, 1), sizeof (ti_capname));
|
|
Packit |
437b5e |
r = tigetflag (ti_capname);
|
|
Packit |
437b5e |
if (-1 == r)
|
|
Packit |
437b5e |
return luaL_error (L, "`%s' is not a boolean capability", ti_capname);
|
|
Packit |
437b5e |
return pushboolresult (r);
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch terminfo numeric capability.
|
|
Packit |
437b5e |
@function tigetnum
|
|
Packit |
437b5e |
@string capname
|
|
Packit |
437b5e |
@treturn int content of terminal numeric capability
|
|
Packit |
437b5e |
@see curs_terminfo(3x)
|
|
Packit |
437b5e |
@see terminfo(5)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Ptigetnum (lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
int res;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
strlcpy (ti_capname, luaL_checkstring (L, 1), sizeof (ti_capname));
|
|
Packit |
437b5e |
res = tigetnum (ti_capname);
|
|
Packit |
437b5e |
if (-2 == res)
|
|
Packit |
437b5e |
return luaL_error (L, "`%s' is not a numeric capability", ti_capname);
|
|
Packit |
437b5e |
else if (-1 == res)
|
|
Packit |
437b5e |
lua_pushnil (L);
|
|
Packit |
437b5e |
else
|
|
Packit |
437b5e |
lua_pushinteger(L, res);
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Fetch terminfo string capability.
|
|
Packit |
437b5e |
@function tigetstr
|
|
Packit |
437b5e |
@string capname
|
|
Packit |
437b5e |
@treturn string content of terminal string capability
|
|
Packit |
437b5e |
@see curs_terminfo(3x)
|
|
Packit |
437b5e |
@see terminfo(5)
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
static int
|
|
Packit |
437b5e |
Ptigetstr (lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
const char *res;
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
strlcpy (ti_capname, luaL_checkstring (L, 1), sizeof (ti_capname));
|
|
Packit |
437b5e |
res = tigetstr (ti_capname);
|
|
Packit |
437b5e |
if ((char *) -1 == res)
|
|
Packit |
437b5e |
return luaL_error (L, "`%s' is not a string capability", ti_capname);
|
|
Packit |
437b5e |
else if (NULL == res)
|
|
Packit |
437b5e |
lua_pushnil (L);
|
|
Packit |
437b5e |
else
|
|
Packit |
437b5e |
lua_pushstring(L, res);
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
static const luaL_Reg curseslib[] =
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
#if HAVE_CURSES
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pbaudrate ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pbeep ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pcbreak ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pcolor_pair ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pcolor_pairs ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pcolors ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pcols ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pcurs_set ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pdelay_output ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pdoupdate ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pecho ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pendwin ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Perasechar ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pflash ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pflushinp ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Phalfdelay ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Phas_colors ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Phas_ic ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Phas_il ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pinit_pair ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pisendwin ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pkeyname ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pkillchar ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Plines ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Plongname ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pnapms ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pnew_chstr ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pnewpad ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pnewwin ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pnl ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Ppair_content ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Praw ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Presizeterm ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pripoffline ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_attroff ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_attron ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_attrset ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_clear ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_init ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_label ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_noutrefresh ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_refresh ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_restore ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_set ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pslk_touch ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pstart_color ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pstdscr ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Ptermattrs ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Ptermname ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Ptigetflag ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Ptigetnum ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Ptigetstr ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Punctrl ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Pungetch ),
|
|
Packit |
437b5e |
LPOSIX_FUNC( Puse_default_colors),
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
{NULL, NULL}
|
|
Packit |
437b5e |
};
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Constants.
|
|
Packit |
437b5e |
@section constants
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
/***
|
|
Packit |
437b5e |
Curses constants.
|
|
Packit |
437b5e |
Any constants not available in the underlying system will be `nil` valued,
|
|
Packit |
437b5e |
see @{curses.lua}. Many of the `KEY_` constants cannot be generated by
|
|
Packit |
437b5e |
modern keyboards and are mostly for historical compatibility with ancient
|
|
Packit |
437b5e |
terminal hardware keyboards.
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
Note that, unlike the other posix submodules, almost all of these constants
|
|
Packit |
437b5e |
remain undefined (`nil`) until after @{posix.curses.initscr} has returned
|
|
Packit |
437b5e |
successfully.
|
|
Packit |
437b5e |
@table posix.curses
|
|
Packit |
437b5e |
@int ACS_BLOCK alternate character set solid block
|
|
Packit |
437b5e |
@int ACS_BOARD alternate character set board of squares
|
|
Packit |
437b5e |
@int ACS_BTEE alternate character set bottom-tee
|
|
Packit |
437b5e |
@int ACS_BULLET alternate character set bullet
|
|
Packit |
437b5e |
@int ACS_CKBOARD alternate character set stipple
|
|
Packit |
437b5e |
@int ACS_DARROW alternate character set down arrow
|
|
Packit |
437b5e |
@int ACS_DEGREE alternate character set degrees mark
|
|
Packit |
437b5e |
@int ACS_DIAMOND alternate character set diamond
|
|
Packit |
437b5e |
@int ACS_HLINE alternate character set horizontal line
|
|
Packit |
437b5e |
@int ACS_LANTERN alternate character set lantern
|
|
Packit |
437b5e |
@int ACS_LARROW alternate character set left arrow
|
|
Packit |
437b5e |
@int ACS_LLCORNER alternate character set lower left corner
|
|
Packit |
437b5e |
@int ACS_LRCORNER alternate character set lower right corner
|
|
Packit |
437b5e |
@int ACS_LTEE alternate character set left tee
|
|
Packit |
437b5e |
@int ACS_PLMINUS alternate character set plus/minus
|
|
Packit |
437b5e |
@int ACS_PLUS alternate character set plus
|
|
Packit |
437b5e |
@int ACS_RARROW alternate character set right arrow
|
|
Packit |
437b5e |
@int ACS_RTEE alternate character set right tee
|
|
Packit |
437b5e |
@int ACS_S1 alternate character set scan-line 1
|
|
Packit |
437b5e |
@int ACS_S9 alternate character set scan-line 9
|
|
Packit |
437b5e |
@int ACS_TTEE alternate character set top tee
|
|
Packit |
437b5e |
@int ACS_UARROW alternate character set up arrow
|
|
Packit |
437b5e |
@int ACS_ULCORNER alternate character set upper left corner
|
|
Packit |
437b5e |
@int ACS_URCORNER alternate character set upper right corner
|
|
Packit |
437b5e |
@int ACS_VLINE alternate character set vertical line
|
|
Packit |
437b5e |
@int A_ALTCHARSET alternatate character set attribute
|
|
Packit |
437b5e |
@int A_ATTRIBUTES attributed character attributes bitmask
|
|
Packit |
437b5e |
@int A_BLINK blinking attribute
|
|
Packit |
437b5e |
@int A_BOLD bold attribute
|
|
Packit |
437b5e |
@int A_CHARTEXT attributed character text bitmask
|
|
Packit |
437b5e |
@int A_COLOR attributed character color-pair bitmask
|
|
Packit |
437b5e |
@int A_DIM half-bright attribute
|
|
Packit |
437b5e |
@int A_INVIS invisible attribute
|
|
Packit |
437b5e |
@int A_NORMAL normal attribute (all attributes off)
|
|
Packit |
437b5e |
@int A_PROTECT protected attribute
|
|
Packit |
437b5e |
@int A_REVERSE reverse video attribute
|
|
Packit |
437b5e |
@int A_STANDOUT standout attribute
|
|
Packit |
437b5e |
@int A_UNDERLINE underline attribute
|
|
Packit |
437b5e |
@int COLOR_BLACK black color attribute
|
|
Packit |
437b5e |
@int COLOR_BLUE blue color attribute
|
|
Packit |
437b5e |
@int COLOR_CYAN cyan color attribute
|
|
Packit |
437b5e |
@int COLOR_GREEN green color attribute
|
|
Packit |
437b5e |
@int COLOR_MAGENTA magenta color attribute
|
|
Packit |
437b5e |
@int COLOR_RED red color attribute
|
|
Packit |
437b5e |
@int COLOR_WHITE white color attribute
|
|
Packit |
437b5e |
@int COLOR_YELLOW yellow color attribute
|
|
Packit |
437b5e |
@int KEY_A1 upper-left of keypad key
|
|
Packit |
437b5e |
@int KEY_A3 upper-right of keypad key
|
|
Packit |
437b5e |
@int KEY_B2 center of keypad key
|
|
Packit |
437b5e |
@int KEY_BACKSPACE backspace key
|
|
Packit |
437b5e |
@int KEY_BEG beginning key
|
|
Packit |
437b5e |
@int KEY_BREAK break key
|
|
Packit |
437b5e |
@int KEY_BTAB backtab key
|
|
Packit |
437b5e |
@int KEY_C1 bottom-left of keypad key
|
|
Packit |
437b5e |
@int KEY_C3 bottom-right of keypad key
|
|
Packit |
437b5e |
@int KEY_CANCEL cancel key
|
|
Packit |
437b5e |
@int KEY_CATAB clear all tabs key
|
|
Packit |
437b5e |
@int KEY_CLEAR clear screen key
|
|
Packit |
437b5e |
@int KEY_CLOSE close key
|
|
Packit |
437b5e |
@int KEY_COMMAND command key
|
|
Packit |
437b5e |
@int KEY_COPY copy key
|
|
Packit |
437b5e |
@int KEY_CREATE create key
|
|
Packit |
437b5e |
@int KEY_CTAB clear tab key
|
|
Packit |
437b5e |
@int KEY_DC delete character key
|
|
Packit |
437b5e |
@int KEY_DL delete line key
|
|
Packit |
437b5e |
@int KEY_DOWN down arrow key
|
|
Packit |
437b5e |
@int KEY_EIC exit insert char mode key
|
|
Packit |
437b5e |
@int KEY_END end key
|
|
Packit |
437b5e |
@int KEY_ENTER enter key
|
|
Packit |
437b5e |
@int KEY_EOL clear to end of line key
|
|
Packit |
437b5e |
@int KEY_EOS clear to end of screen key
|
|
Packit |
437b5e |
@int KEY_EXIT exit key
|
|
Packit |
437b5e |
@int KEY_F0 f0 key
|
|
Packit |
437b5e |
@int KEY_F1 f1 key
|
|
Packit |
437b5e |
@int KEY_F2 f2 key
|
|
Packit |
437b5e |
@int KEY_F3 f3 key
|
|
Packit |
437b5e |
@int KEY_F4 f4 key
|
|
Packit |
437b5e |
@int KEY_F5 f5 key
|
|
Packit |
437b5e |
@int KEY_F6 f6 key
|
|
Packit |
437b5e |
@int KEY_F7 f7 key
|
|
Packit |
437b5e |
@int KEY_F8 f8 key
|
|
Packit |
437b5e |
@int KEY_F9 f9 key
|
|
Packit |
437b5e |
@int KEY_F10 f10 key
|
|
Packit |
437b5e |
@int KEY_F11 f11 key
|
|
Packit |
437b5e |
@int KEY_F12 f12 key
|
|
Packit |
437b5e |
@int KEY_F13 f13 key
|
|
Packit |
437b5e |
@int KEY_F14 f14 key
|
|
Packit |
437b5e |
@int KEY_F15 f15 key
|
|
Packit |
437b5e |
@int KEY_F16 f16 key
|
|
Packit |
437b5e |
@int KEY_F17 f17 key
|
|
Packit |
437b5e |
@int KEY_F18 f18 key
|
|
Packit |
437b5e |
@int KEY_F19 f19 key
|
|
Packit |
437b5e |
@int KEY_F20 f20 key
|
|
Packit |
437b5e |
@int KEY_F21 f21 key
|
|
Packit |
437b5e |
@int KEY_F22 f22 key
|
|
Packit |
437b5e |
@int KEY_F23 f23 key
|
|
Packit |
437b5e |
@int KEY_F24 f24 key
|
|
Packit |
437b5e |
@int KEY_F25 f25 key
|
|
Packit |
437b5e |
@int KEY_F26 f26 key
|
|
Packit |
437b5e |
@int KEY_F27 f27 key
|
|
Packit |
437b5e |
@int KEY_F28 f28 key
|
|
Packit |
437b5e |
@int KEY_F29 f29 key
|
|
Packit |
437b5e |
@int KEY_F30 f30 key
|
|
Packit |
437b5e |
@int KEY_F31 f31 key
|
|
Packit |
437b5e |
@int KEY_F32 f32 key
|
|
Packit |
437b5e |
@int KEY_F33 f33 key
|
|
Packit |
437b5e |
@int KEY_F34 f34 key
|
|
Packit |
437b5e |
@int KEY_F35 f35 key
|
|
Packit |
437b5e |
@int KEY_F36 f36 key
|
|
Packit |
437b5e |
@int KEY_F37 f37 key
|
|
Packit |
437b5e |
@int KEY_F38 f38 key
|
|
Packit |
437b5e |
@int KEY_F39 f39 key
|
|
Packit |
437b5e |
@int KEY_F40 f40 key
|
|
Packit |
437b5e |
@int KEY_F41 f41 key
|
|
Packit |
437b5e |
@int KEY_F42 f42 key
|
|
Packit |
437b5e |
@int KEY_F43 f43 key
|
|
Packit |
437b5e |
@int KEY_F44 f44 key
|
|
Packit |
437b5e |
@int KEY_F45 f45 key
|
|
Packit |
437b5e |
@int KEY_F46 f46 key
|
|
Packit |
437b5e |
@int KEY_F47 f47 key
|
|
Packit |
437b5e |
@int KEY_F48 f48 key
|
|
Packit |
437b5e |
@int KEY_F49 f49 key
|
|
Packit |
437b5e |
@int KEY_F50 f50 key
|
|
Packit |
437b5e |
@int KEY_F51 f51 key
|
|
Packit |
437b5e |
@int KEY_F52 f52 key
|
|
Packit |
437b5e |
@int KEY_F53 f53 key
|
|
Packit |
437b5e |
@int KEY_F54 f54 key
|
|
Packit |
437b5e |
@int KEY_F55 f55 key
|
|
Packit |
437b5e |
@int KEY_F56 f56 key
|
|
Packit |
437b5e |
@int KEY_F57 f57 key
|
|
Packit |
437b5e |
@int KEY_F58 f58 key
|
|
Packit |
437b5e |
@int KEY_F59 f59 key
|
|
Packit |
437b5e |
@int KEY_F60 f60 key
|
|
Packit |
437b5e |
@int KEY_F61 f61 key
|
|
Packit |
437b5e |
@int KEY_F62 f62 key
|
|
Packit |
437b5e |
@int KEY_F63 f63 key
|
|
Packit |
437b5e |
@int KEY_FIND find key
|
|
Packit |
437b5e |
@int KEY_HELP help key
|
|
Packit |
437b5e |
@int KEY_HOME home key
|
|
Packit |
437b5e |
@int KEY_IC enter insert char mode key
|
|
Packit |
437b5e |
@int KEY_IL insert line key
|
|
Packit |
437b5e |
@int KEY_LEFT cursor left key
|
|
Packit |
437b5e |
@int KEY_LL home down or bottom key
|
|
Packit |
437b5e |
@int KEY_MARK mark key
|
|
Packit |
437b5e |
@int KEY_MESSAGE message key
|
|
Packit |
437b5e |
@int KEY_MOUSE mouse event available virtual key
|
|
Packit |
437b5e |
@int KEY_MOVE move key
|
|
Packit |
437b5e |
@int KEY_NEXT next object key
|
|
Packit |
437b5e |
@int KEY_NPAGE next page key
|
|
Packit |
437b5e |
@int KEY_OPEN open key
|
|
Packit |
437b5e |
@int KEY_OPTIONS options key
|
|
Packit |
437b5e |
@int KEY_PPAGE previous page key
|
|
Packit |
437b5e |
@int KEY_PREVIOUS prewious object key
|
|
Packit |
437b5e |
@int KEY_PRINT print key
|
|
Packit |
437b5e |
@int KEY_REDO redo key
|
|
Packit |
437b5e |
@int KEY_REFERENCE reference key
|
|
Packit |
437b5e |
@int KEY_REFRESH refresh key
|
|
Packit |
437b5e |
@int KEY_REPLACE replace key
|
|
Packit |
437b5e |
@int KEY_RESET hard reset key
|
|
Packit |
437b5e |
@int KEY_RESIZE resize event virtual key
|
|
Packit |
437b5e |
@int KEY_RESTART restart key
|
|
Packit |
437b5e |
@int KEY_RESUME resume key
|
|
Packit |
437b5e |
@int KEY_RIGHT cursor right key
|
|
Packit |
437b5e |
@int KEY_SAVE save key
|
|
Packit |
437b5e |
@int KEY_SBEG shift beginning key
|
|
Packit |
437b5e |
@int KEY_SCANCEL shift cancel key
|
|
Packit |
437b5e |
@int KEY_SCOMMAND shift command key
|
|
Packit |
437b5e |
@int KEY_SCOPY shift copy key
|
|
Packit |
437b5e |
@int KEY_SCREATE shift create key
|
|
Packit |
437b5e |
@int KEY_SDC shift delete character key
|
|
Packit |
437b5e |
@int KEY_SDL shift delete line key
|
|
Packit |
437b5e |
@int KEY_SELECT select key
|
|
Packit |
437b5e |
@int KEY_SEND send key
|
|
Packit |
437b5e |
@int KEY_SEOL shift clear to end of line key
|
|
Packit |
437b5e |
@int KEY_SEXIT shift exit key
|
|
Packit |
437b5e |
@int KEY_SF scroll one line forward key
|
|
Packit |
437b5e |
@int KEY_SFIND shift find key
|
|
Packit |
437b5e |
@int KEY_SHELP shift help key
|
|
Packit |
437b5e |
@int KEY_SHOME shift home key
|
|
Packit |
437b5e |
@int KEY_SIC shift enter insert mode key
|
|
Packit |
437b5e |
@int KEY_SLEFT shift cursor left key
|
|
Packit |
437b5e |
@int KEY_SMESSAGE shift message key
|
|
Packit |
437b5e |
@int KEY_SMOVE shift move key
|
|
Packit |
437b5e |
@int KEY_SNEXT shift next object key
|
|
Packit |
437b5e |
@int KEY_SOPTIONS shift options key
|
|
Packit |
437b5e |
@int KEY_SPREVIOUS shift previous object key
|
|
Packit |
437b5e |
@int KEY_SPRINT shift print key
|
|
Packit |
437b5e |
@int KEY_SR scroll one line backward key
|
|
Packit |
437b5e |
@int KEY_SREDO shift redo key
|
|
Packit |
437b5e |
@int KEY_SREPLACE shift replace key
|
|
Packit |
437b5e |
@int KEY_SRESET soft reset key
|
|
Packit |
437b5e |
@int KEY_SRIGHT shift cursor right key
|
|
Packit |
437b5e |
@int KEY_SRSUME shift resume key
|
|
Packit |
437b5e |
@int KEY_SSAVE shift save key
|
|
Packit |
437b5e |
@int KEY_SSUSPEND shift suspend key
|
|
Packit |
437b5e |
@int KEY_STAB shift tab key
|
|
Packit |
437b5e |
@int KEY_SUNDO shift undo key
|
|
Packit |
437b5e |
@int KEY_SUSPEND suspend key
|
|
Packit |
437b5e |
@int KEY_UNDO undo key
|
|
Packit |
437b5e |
@int KEY_UP cursor up key
|
|
Packit |
437b5e |
@usage
|
|
Packit |
437b5e |
-- Print curses constants supported on this host.
|
|
Packit |
437b5e |
for name, value in pairs (require "posix.curses") do
|
|
Packit |
437b5e |
if type (value) == "number" then
|
|
Packit |
437b5e |
print (name, value)
|
|
Packit |
437b5e |
end
|
|
Packit |
437b5e |
end
|
|
Packit |
437b5e |
*/
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
LUALIB_API int
|
|
Packit |
437b5e |
luaopen_posix_curses(lua_State *L)
|
|
Packit |
437b5e |
{
|
|
Packit |
437b5e |
luaopen_posix_curses_window(L);
|
|
Packit |
437b5e |
luaopen_posix_curses_chstr(L);
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
luaL_register(L, "curses", curseslib);
|
|
Packit |
437b5e |
lua_pushliteral(L, "posix curses for " LUA_VERSION " / " PACKAGE_STRING);
|
|
Packit |
437b5e |
lua_setfield(L, -2, "version");
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
#if HAVE_CURSES
|
|
Packit |
437b5e |
lua_pushstring(L, "initscr");
|
|
Packit |
437b5e |
lua_pushvalue(L, -2);
|
|
Packit |
437b5e |
lua_pushcclosure(L, Pinitscr, 1);
|
|
Packit |
437b5e |
lua_settable(L, -3);
|
|
Packit |
437b5e |
#endif
|
|
Packit |
437b5e |
|
|
Packit |
437b5e |
return 1;
|
|
Packit |
437b5e |
}
|