int Iputenv (int argc, lvar_t *argv) { if (!T_ISSTRING (argv[0].o) || !T_ISSTRING (argv[1].o)) return L_FAILURE; bufp[0] = 0; strcat (bufp, Tgetstring (argv[0].o)); strcat (bufp, "="); strcat (bufp, Tgetstring (argv[1].o)); putenv (bufp); return L_SUCCESS; }
/* LEFTY builtin */ int TXTask (int argc, lvar_t *argv) { Tobj so, ao; char buf[1200]; char *sp, *ap; int mode; mode = 0; ap = NULL; if (argc < 2) mode = G_QWSTRING; else { so = argv[1].o; if (T_ISSTRING (so)) { sp = Tgetstring (so); if (strcmp (sp, "string") == 0) mode = G_QWSTRING; else if (strcmp (sp, "file") == 0) mode = G_QWFILE; else if (strcmp (sp, "choice") == 0) mode = G_QWCHOICE; else mode = 0; } } if (argc < 3) ap = NULL; else { ao = argv[2].o; if (T_ISSTRING (ao)) ap = Tgetstring (ao); } if (Gqueryask (queryws[mode], Tgetstring (argv[0].o), ap, buf, 1200) == 0) rtno = Tstring (buf); else rtno = NULL; #ifndef NOQUERYFIX if (mode == G_QWCHOICE) { Gwattr_t data[1]; data[0].id = G_ATTRMODE; data[0].u.t = "choice"; Gdestroywidget (queryws[mode]); queryws[mode] = Gcreatewidget (-1, G_QUERYWIDGET, 1, &data[0]); } #endif return L_SUCCESS; }
int Itypeof (int argc, lvar_t *argv) { if (T_ISTABLE (argv[0].o)) rtno = Tstring ("table"); else if (T_ISSTRING (argv[0].o)) rtno = Tstring ("string"); else if (T_ISNUMBER (argv[0].o)) rtno = Tstring ("number"); return L_SUCCESS; }
int Igetenv (int argc, lvar_t *argv) { char *s; if (!T_ISSTRING (argv[0].o)) return L_FAILURE; rtno = NULL; if (!(s = getenv (Tgetstring (argv[0].o))) || !*s) return L_SUCCESS; rtno = Tstring (s); return L_SUCCESS; }
int Iremove (int argc, lvar_t *argv) { Tobj tblo, keyo; if (argc == 2) tblo = argv[1].o, keyo = argv[0].o; else tblo = root, keyo = argv[0].o; if (T_ISTABLE (tblo) && (T_ISNUMBER (keyo) || T_ISSTRING (keyo))) Tdelo (tblo, keyo); return L_SUCCESS; }
static int getvar(Tobj co, int ci, tnk_t * tnkp) { Tobj cvo, cko, cto; Ctype_t ct, vt; long m; int vi, ovi, nn, ni; if ((ct = TCgettype(co, ci)) == C_LVAR) { nn = (int) TCgetinteger(co, (ni = TCgetnext(co, TCgetfp(co, ci)))); cvo = cto = lvarp[flvari + nn].o; vi = TCgetnext(co, ni); if (vi != C_NULL && (!cvo || Tgettype(cvo) != T_TABLE)) Mresetmark(lvarp[flvari + nn].m, (lvarp[flvari + nn].o = cvo = cto = Ttable(0))); } else if (ct == C_GVAR) { /* else it's a global variable */ cvo = root; vi = TCgetfp(co, ci); } else { return -1; } ovi = -1; while (vi != C_NULL) { cto = cvo; if ((vt = TCgettype(co, vi)) == C_STRING) { cvo = Tfinds(cto, TCgetstring(co, vi)); } else if (vt == C_INTEGER) { cvo = Tfindi(cto, TCgetinteger(co, vi)); } else if (vt == C_REAL) { cvo = Tfindr(cto, TCgetreal(co, vi)); } else { if (!(cko = eeval(co, vi)) || !(T_ISSTRING(cko) || T_ISNUMBER(cko))) return -1; cvo = Tfindo(cto, cko); } ovi = vi, vi = TCgetnext(co, vi); if (vi != C_NULL && (!cvo || Tgettype(cvo) != T_TABLE)) { if (vt == C_STRING) Tinss(cto, TCgetstring(co, ovi), (cvo = Ttable(0))); else if (vt == C_INTEGER) Tinsi(cto, TCgetinteger(co, ovi), (cvo = Ttable(0))); else if (vt == C_REAL) Tinsr(cto, TCgetreal(co, ovi), (cvo = Ttable(0))); else m = Mpushmark(cko), Tinso(cto, cko, (cvo = Ttable(0))), Mpopmark(m); } } if (ct == C_LVAR && ovi == -1) { tnkp->type = TNK_LI; tnkp->u.li = nn; } else { switch (vt) { case C_STRING: case C_INTEGER: case C_REAL: tnkp->type = TNK_S; tnkp->u.tnks.kt = vt; tnkp->u.tnks.to = cto; tnkp->u.tnks.co = co; tnkp->u.tnks.vi = ovi; break; default: tnkp->type = TNK_O; tnkp->u.tnko.to = cto; tnkp->u.tnko.ko = cko; break; } } return 0; }
int Imatch (int argc, lvar_t *argv) { if (!T_ISSTRING (argv[0].o) || !T_ISSTRING (argv[1].o)) return L_FAILURE; rtno = Tinteger (strmatch (Tgetstring (argv[0].o), Tgetstring (argv[1].o))); return L_SUCCESS; }