static void Alarm(void) { lua_pushnumber(IupAlarm(luaL_check_string(1), luaL_check_string(2), luaL_check_string(3), luaL_opt_string(4, NULL), luaL_opt_string(5, NULL))); }
static void internaldofile (void) { const char *fname = luaL_opt_string(1, NULL); if (lua_dofile(fname) == 0) if (luaA_passresults() == 0) lua_pushuserdata(NULL); /* at least one result to signal no errors */ }
static int luaB_assert (lua_State *L) { luaL_checkany(L, 1); if (lua_isnil(L, 1)) luaL_verror(L, "assertion failed! %.90s", luaL_opt_string(L, 2, "")); return 0; }
static void luaB_call (void) { lua_Object f = luaL_nonnullarg(1); Hash *arg = gethash(2); char *options = luaL_opt_string(3, ""); lua_Object err = lua_getparam(4); int narg = (int)getnarg(arg); int i, status; if (err != LUA_NOOBJECT) { /* set new error method */ lua_pushobject(err); err = lua_seterrormethod(); } /* push arg[1...n] */ luaD_checkstack(narg); for (i=0; i<narg; i++) *(L->stack.top++) = *luaH_getint(arg, i+1); status = lua_callfunction(f); if (err != LUA_NOOBJECT) { /* restore old error method */ lua_pushobject(err); lua_seterrormethod(); } if (status != 0) { /* error in call? */ if (strchr(options, 'x')) { lua_pushnil(); return; /* return nil to signal the error */ } else lua_error(NULL); } else { /* no errors */ if (strchr(options, 'p')) luaA_packresults(); else luaA_passresults(); } }
static int io_date (lua_State *L) { const char *s = luaL_opt_string(L, 1, "%c"); time_t t = (time_t)(luaL_opt_number(L, 2, -1)); struct tm *stm; if (t == (time_t)(-1)) /* no time given? */ t = time(NULL); /* use current time */ if (*s == '!') { /* UTC? */ stm = gmtime(&t); s++; /* skip `!' */ } else stm = localtime(&t); if (stm == NULL) /* invalid date? */ lua_pushnil(L); else if (strcmp(s, "*t") == 0) { lua_newtable(L); setfield(L, "sec", stm->tm_sec); setfield(L, "min", stm->tm_min); setfield(L, "hour", stm->tm_hour); setfield(L, "day", stm->tm_mday); setfield(L, "month", stm->tm_mon+1); setfield(L, "year", stm->tm_year+1900); setfield(L, "wday", stm->tm_wday+1); setfield(L, "yday", stm->tm_yday+1); setfield(L, "isdst", stm->tm_isdst); } else { char b[256]; if (strftime(b, sizeof(b), s, stm)) lua_pushstring(L, b); else return luaL_verror(L, "invalid `date' format"); } return 1; }
static int luaB_dostring (lua_State *L) { int oldtop = lua_gettop(L); size_t l; const char *s = luaL_check_lstr(L, 1, &l); if (*s == '\27') /* binary files start with ESC... */ lua_error(L, "`dostring' cannot run pre-compiled code"); return passresults(L, lua_dobuffer(L, s, l, luaL_opt_string(L, 2, s)), oldtop); }
static void SaveImageAsText(void) { Ihandle *ih = iuplua_checkihandle(1); const char *file_name = luaL_check_string(2); const char *format = luaL_check_string(3); const char *name = luaL_opt_string(4, NULL); lua_pushnumber(IupSaveImageAsText(ih, file_name, format, name)); }
static void io_read() { int32 arg = FIRSTARG; LuaFile *f = (LuaFile *)getfileparam(FINPUT, &arg); char *buff; const char *p = luaL_opt_string(arg, "[^\n]*{\n}"); int inskip = 0; // to control {skips} int c = NEED_OTHER; luaL_resetbuffer(); while (*p) { if (*p == '{') { inskip++; p++; } else if (*p == '}') { if (inskip == 0) lua_error("unbalanced braces in read pattern"); inskip--; p++; } else { const char *ep; // get what is next int m; // match result if (c == NEED_OTHER) { char z; if (f->read(&z, 1) != 1) c = EOF; else c = z; } m = luaI_singlematch((c == EOF) ? 0 : (char)c, p, &ep); if (m) { if (inskip == 0) luaL_addchar(c); c = NEED_OTHER; } switch (*ep) { case '*': // repetition if (!m) p = ep + 1; // else stay in (repeat) the same item break; case '?': // optional p = ep + 1; // continues reading the pattern break; default: if (m) p = ep; // continues reading the pattern else goto break_while; // pattern fails } } } break_while: if (c >= 0) // not EOF nor NEED_OTHER? f->seek(-1, SEEK_CUR); luaL_addchar(0); buff = luaL_buffer(); if (*buff != 0 || *p == 0) // read something or did not fail? lua_pushstring(buff); }
static void luaB_dostring (void) { long l; char *s = luaL_check_lstr(1, &l); if (*s == ID_CHUNK) lua_error("`dostring' cannot run pre-compiled code"); if (lua_dobuffer(s, l, luaL_opt_string(2, s)) == 0) if (luaA_passresults() == 0) lua_pushuserdata(NULL); /* at least one result to signal no errors */ }
static void io_write() { int32 arg = FIRSTARG; LuaFile *f = (LuaFile *)getfileparam(FOUTPUT, &arg); int32 status = 1; const char *s; while ((s = luaL_opt_string(arg++, NULL)) != NULL) status = status && ((int32)f->write(s, strlen(s)) != EOF); pushresult(status); }
static int io_popen (lua_State *L) { #ifndef POPEN luaL_verror(L, "`popen' not supported"); return 0; #else FILE *f = popen(luaL_check_string(L, 1), luaL_opt_string(L, 2, "r")); return setnewfile(L, f); #endif }
static void io_write (void) { int arg = FIRSTARG; FILE *f = getfileparam(FOUTPUT, &arg); int status = 1; char *s; while ((s = luaL_opt_string(arg++, NULL)) != NULL) status = status && (fputs(s, f) != EOF); pushresult(status); }
static int setloc (lua_State *L) { static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME}; static const char *const catnames[] = {"all", "collate", "ctype", "monetary", "numeric", "time", NULL}; int op = luaL_findstring(luaL_opt_string(L, 2, "all"), catnames); luaL_arg_check(L, op != -1, 2, "invalid option"); lua_pushstring(L, setlocale(cat[op], luaL_check_string(L, 1))); return 1; }
static int io_date (lua_State *L) { char b[256]; const char *s = luaL_opt_string(L, 1, "%c"); struct tm *stm; time_t t; time(&t); stm = localtime(&t); if (strftime(b, sizeof(b), s, stm)) lua_pushstring(L, b); else lua_error(L, "invalid `date' format"); return 1; }
static void io_date (void) { time_t t; struct tm *tm; char *s = luaL_opt_string(1, "%c"); char b[BUFSIZ]; time(&t); tm = localtime(&t); if (strftime(b,sizeof(b),s,tm)) lua_pushstring(b); else lua_error("invalid `date' format"); }
static void io_read (void) { int arg = FIRSTARG; FILE *f = getfileparam(FINPUT, &arg); char *buff; char *p = luaL_opt_string(arg, "[^\n]*{\n}"); int inskip = 0; /* to control {skips} */ int c = NEED_OTHER; luaL_resetbuffer(); while (*p) { if (*p == '{') { inskip++; p++; } else if (*p == '}') { if (inskip == 0) lua_error("unbalanced braces in read pattern"); inskip--; p++; } else { char *ep; /* get what is next */ int m; /* match result */ if (c == NEED_OTHER) c = getc(f); m = luaI_singlematch((c == EOF) ? 0 : (char)c, p, &ep); if (m) { if (inskip == 0) luaL_addchar(c); c = NEED_OTHER; } switch (*ep) { case '*': /* repetition */ if (!m) p = ep+1; /* else stay in (repeat) the same item */ break; case '?': /* optional */ p = ep+1; /* continues reading the pattern */ break; default: if (m) p = ep; /* continues reading the pattern */ else goto break_while; /* pattern fails */ } } } break_while: if (c >= 0) /* not EOF nor NEED_OTHER? */ ungetc(c, f); luaL_addchar(0); buff = luaL_buffer(); if (*buff != 0 || *p == 0) /* read something or did not fail? */ lua_pushstring(buff); }
static int f_seek (lua_State *L) { static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; static const char *const modenames[] = {"set", "cur", "end", NULL}; FILE *f = tofile(L, 1); int op = luaL_findstring(luaL_opt_string(L, 2, "cur"), modenames); long offset = luaL_opt_long(L, 3, 0); luaL_arg_check(L, op != -1, 2, "invalid mode"); op = fseek(f, offset, mode[op]); if (op) return pushresult(L, 0); /* error */ else { lua_pushnumber(L, ftell(f)); return 1; } }
static int getinfo (lua_State *L) { lua_Debug ar; const char *options = luaL_opt_string(L, 2, "flnSu"); char buff[20]; if (lua_isnumber(L, 1)) { if (!lua_getstack(L, (int)lua_tonumber(L, 1), &ar)) { lua_pushnil(L); /* level out of range */ return 1; } } else if (lua_isfunction(L, 1)) { lua_pushvalue(L, 1); sprintf(buff, ">%.10s", options); options = buff; } else luaL_argerror(L, 1, "function or level expected"); if (!lua_getinfo(L, options, &ar)) luaL_argerror(L, 2, "invalid option"); lua_newtable(L); for (; *options; options++) { switch (*options) { case 'S': settabss(L, "source", ar.source); if (ar.source) settabss(L, "short_src", ar.short_src); settabsi(L, "linedefined", ar.linedefined); settabss(L, "what", ar.what); break; case 'l': settabsi(L, "currentline", ar.currentline); break; case 'u': settabsi(L, "nups", ar.nups); break; case 'n': settabss(L, "name", ar.name); settabss(L, "namewhat", ar.namewhat); break; case 'f': lua_pushstring(L, "func"); lua_pushvalue(L, -3); lua_settable(L, -3); break; } } return 1; /* return table */ }
static int io_seek (lua_State *L) { static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; static const char *const modenames[] = {"set", "cur", "end", NULL}; IOCtrl *ctrl = (IOCtrl *)lua_touserdata(L, -1); FILE *f; int op; long offset; lua_pop(L, 1); /* remove upvalue */ f = getnonullfile(L, ctrl, 1); op = luaL_findstring(luaL_opt_string(L, 2, "cur"), modenames); offset = luaL_opt_long(L, 3, 0); luaL_arg_check(L, op != -1, 2, "invalid mode"); op = fseek(f, offset, mode[op]); if (op) return pushresult(L, 0); /* error */ else { lua_pushnumber(L, ftell(f)); return 1; } }
static void luaI_call (void) { lua_Object f = luaL_nonnullarg(1); lua_Object arg = luaL_tablearg(2); const char *options = luaL_opt_string(3, ""); lua_Object err = lua_getparam(4); int32 narg = getnarg(arg); int32 i, status; if (err != LUA_NOOBJECT) { /* set new error method */ lua_pushobject(err); err = lua_seterrormethod(); } /* push arg[1...n] */ for (i=0; i<narg; i++) { lua_Object temp; /* temp = arg[i+1] */ lua_pushobject(arg); lua_pushnumber(i+1); temp = lua_rawgettable(); if (narg == MAX_INT && lua_isnil(temp)) break; lua_pushobject(temp); } status = lua_callfunction(f); if (err != LUA_NOOBJECT) { /* restore old error method */ lua_pushobject(err); lua_seterrormethod(); } if (status != 0) { /* error in call? */ if (strchr(options, 'x')) { lua_pushnil(); return; /* return nil to signal the error */ } else lua_error(NULL); } else { /* no errors */ if (strchr(options, 'p')) luaA_packresults(); else luaA_passresults(); } }
static int luaB_call (lua_State *L) { int oldtop; const char *options = luaL_opt_string(L, 3, ""); int err = 0; /* index of old error method */ int i, status; int n; luaL_checktype(L, 2, LUA_TTABLE); n = lua_getn(L, 2); if (!lua_isnull(L, 4)) /* set new error method */ { lua_getglobal(L, LUA_ERRORMESSAGE); err = lua_gettop(L); /* get index */ lua_pushvalue(L, 4); lua_setglobal(L, LUA_ERRORMESSAGE); } oldtop = lua_gettop(L); /* top before function-call preparation */ /* push function */ lua_pushvalue(L, 1); luaL_checkstack(L, n, "too many arguments"); for (i=0; i<n; i++) /* push arg[1...n] */ lua_rawgeti(L, 2, i+1); status = lua_call(L, n, LUA_MULTRET); if (err != 0) /* restore old error method */ { lua_pushvalue(L, err); lua_setglobal(L, LUA_ERRORMESSAGE); } if (status != 0) /* error in call? */ { if (strchr(options, 'x')) lua_pushnil(L); /* return nil to signal the error */ else lua_error(L, NULL); /* propagate error without additional messages */ return 1; } if (strchr(options, 'p')) /* pack results? */ lua_error(L, "deprecated option `p' in `call'"); return lua_gettop(L) - oldtop; /* results are already on the stack */ }
static void CreateItem(void) { lua_pushusertag(IupItem(luaL_opt_string(1, NULL), NULL), iuplua_tag); }
static void SetClassDefaultAttribute(void) { IupSetClassDefaultAttribute(luaL_check_string(1), luaL_check_string(2), luaL_opt_string(3,NULL)); }
static int luaB_dofile (lua_State *L) { int oldtop = lua_gettop(L); const char *fname = luaL_opt_string(L, 1, NULL); return passresults(L, lua_dofile(L, fname), oldtop); }
static int luaB_error (lua_State *L) { lua_error(L, luaL_opt_string(L, 1, NULL)); return 0; /* to avoid warnings */ }
static void CreateButton(void) { lua_pushusertag(IupButton(luaL_opt_string(1, NULL), NULL), iuplua_tag); }
static void CreateLabel(void) { lua_pushusertag(IupLabel(luaL_opt_string(1, NULL)), iuplua_tag); }
static void CreateToggle(void) { lua_pushusertag(IupToggle(luaL_opt_string(1, NULL), NULL), iuplua_tag); }
static void luaI_assert() { lua_Object p = lua_getparam(1); if (p == LUA_NOOBJECT || lua_isnil(p)) luaL_verror("assertion failed! %.100s", luaL_opt_string(2, "")); }
static void CreateSubmenu(void) { lua_pushusertag(IupSubmenu(luaL_opt_string(1, NULL), iuplua_checkihandle(2)), iuplua_tag); }