From: erg Date: Fri, 8 Apr 2005 20:45:34 +0000 (+0000) Subject: Update with new lefty, fixing many bugs and supporting new features X-Git-Tag: LAST_LIBGRAPH~32^2~7705 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=91a515181bc225031752c510219ffbc35ed1bf14;p=graphviz Update with new lefty, fixing many bugs and supporting new features --- diff --git a/cmd/lefty/internal.c b/cmd/lefty/internal.c index a831da29d..e27e9787a 100644 --- a/cmd/lefty/internal.c +++ b/cmd/lefty/internal.c @@ -14,8 +14,7 @@ * AT&T Research, Florham Park NJ * **********************************************************/ - -/* Lefteris Koutsofios - AT&T Bell Laboratories */ +/* Lefteris Koutsofios - AT&T Labs Research */ #include "common.h" #include "g.h" @@ -37,152 +36,159 @@ #include "internal.h" #ifndef FEATURE_MS #include -#ifdef HAVE_UNISTD_H -#include -#include -#endif #endif -int Idump(int, Tonm_t *); -int Icopy(int, Tonm_t *); -int Iremove(int, Tonm_t *); -int Itablesize(int, Tonm_t *); -int Iopenio(int, Tonm_t *); -int Icloseio(int, Tonm_t *); -int Ireadline(int, Tonm_t *); -int Iread(int, Tonm_t *); -int Iwriteline(int, Tonm_t *); -int Iatan(int, Tonm_t *); -int Itan(int, Tonm_t *); -int Icos(int, Tonm_t *); -int Isin(int, Tonm_t *); -int Isqrt(int, Tonm_t *); -int Irandom(int, Tonm_t *); -int Intos(int, Tonm_t *); -int Iston(int, Tonm_t *); -int Isplit(int, Tonm_t *); -int Iconcat(int, Tonm_t *); -int Iquote(int, Tonm_t *); -int Itoint(int, Tonm_t *); -int Istrlen(int, Tonm_t *); -int Iload(int, Tonm_t *); -int Irun(int, Tonm_t *); -int Imonitor(int, Tonm_t *); -int Iidlerun(int, Tonm_t *); -int Itime(int, Tonm_t *); -int Isleep(int, Tonm_t *); -int Iecho(int, Tonm_t *); -int Igetenv(int, Tonm_t *); -int Iputenv(int, Tonm_t *); -int Isystem(int, Tonm_t *); -int Iexit(int, Tonm_t *); +int Idump (int, Tonm_t *); +int Itypeof (int, Tonm_t *); +int Icopy (int, Tonm_t *); +int Iremove (int, Tonm_t *); +int Itablesize (int, Tonm_t *); +int Iopenio (int, Tonm_t *); +int Icloseio (int, Tonm_t *); +int Ireadline (int, Tonm_t *); +int Iread (int, Tonm_t *); +int Iwriteline (int, Tonm_t *); +int Iatan (int, Tonm_t *); +int Itan (int, Tonm_t *); +int Icos (int, Tonm_t *); +int Isin (int, Tonm_t *); +int Isqrt (int, Tonm_t *); +int Irandom (int, Tonm_t *); +int Intos (int, Tonm_t *); +int Iston (int, Tonm_t *); +int Isplit (int, Tonm_t *); +int Iconcat (int, Tonm_t *); +int Iquote (int, Tonm_t *); +int Ihtmlquote (int, Tonm_t *); +int Itoint (int, Tonm_t *); +int Istrlen (int, Tonm_t *); +int Iload (int, Tonm_t *); +int Irun (int, Tonm_t *); +int Imonitor (int, Tonm_t *); +int Iidlerun (int, Tonm_t *); +int Itime (int, Tonm_t *); +int Isleep (int, Tonm_t *); +int Iecho (int, Tonm_t *); +int Igetenv (int, Tonm_t *); +int Iputenv (int, Tonm_t *); +int Isystem (int, Tonm_t *); +int Iexit (int, Tonm_t *); #ifdef FEATURE_DOT -int Iparsegraphlabel(int, Tonm_t *); -int Ireadgraph(int, Tonm_t *); -int Iwritegraph(int, Tonm_t *); +int Iparsegraphlabel (int, Tonm_t *); +int Ireadgraph (int, Tonm_t *); +int Iwritegraph (int, Tonm_t *); +#endif +#ifdef _PACKAGE_ast +int Imatch (int, Tonm_t *); #endif #ifdef FEATURE_CS -int C2Lreadcsmessage(int, Tonm_t *); +int C2Lreadcsmessage (int, Tonm_t *); #endif #define MAXN 10000 Ifunc_t Ifuncs[] = { - {"createwidget", GFXcreatewidget, 2, 2}, - {"setwidgetattr", GFXsetwidgetattr, 2, 2}, - {"getwidgetattr", GFXgetwidgetattr, 2, 2}, - {"destroywidget", GFXdestroywidget, 1, 1}, - {"clear", GFXclear, 1, 1}, - {"setgfxattr", GFXsetgfxattr, 2, 2}, - {"getgfxattr", GFXgetgfxattr, 2, 2}, - {"arrow", GFXarrow, 4, 5}, - {"line", GFXline, 4, 5}, - {"box", GFXbox, 3, 4}, - {"polygon", GFXpolygon, 3, 4}, - {"splinegon", GFXsplinegon, 3, 4}, - {"arc", GFXarc, 4, 5}, - {"text", GFXtext, 7, 8}, - {"textsize", GFXtextsize, 4, 4}, - {"createbitmap", GFXcreatebitmap, 2, 2}, - {"destroybitmap", GFXdestroybitmap, 1, 1}, - {"readbitmap", GFXreadbitmap, 2, 2}, - {"writebitmap", GFXwritebitmap, 2, 2}, - {"bitblt", GFXbitblt, 6, 7}, - {"clearpick", GFXclearpick, 2, 2}, - {"setpick", GFXsetpick, 3, 3}, - {"displaymenu", GFXdisplaymenu, 2, 2}, - {"txtview", TXTmode, 1, 1}, - {"ask", TXTask, 1, 3}, - {"dump", Idump, 0, MAXN}, - {"copy", Icopy, 1, 1}, - {"remove", Iremove, 1, 2}, - {"tablesize", Itablesize, 1, 1}, - {"openio", Iopenio, 3, 4}, - {"closeio", Icloseio, 1, 2}, - {"readline", Ireadline, 1, 1}, - {"read", Iread, 1, 1}, - {"writeline", Iwriteline, 2, 2}, - {"atan", Iatan, 2, 2}, - {"tan", Itan, 1, 1}, - {"cos", Icos, 1, 1}, - {"sin", Isin, 1, 1}, - {"sqrt", Isqrt, 1, 1}, - {"random", Irandom, 1, 1}, - {"ntos", Intos, 1, 1}, - {"ston", Iston, 1, 1}, - {"split", Isplit, 2, 2}, - {"concat", Iconcat, 1, MAXN}, - {"quote", Iquote, 1, 3}, - {"toint", Itoint, 1, 1}, - {"strlen", Istrlen, 1, 1}, - {"load", Iload, 1, 1}, - {"run", Irun, 1, 1}, - {"monitor", Imonitor, 2, 2}, - {"idlerun", Iidlerun, 1, 1}, - {"time", Itime, 0, 0}, - {"sleep", Isleep, 1, 1}, - {"echo", Iecho, 1, MAXN}, - {"getenv", Igetenv, 1, 1}, - {"putenv", Iputenv, 2, 2}, - {"system", Isystem, 1, MAXN}, - {"exit", Iexit, 0, 0}, + { "createwidget", GFXcreatewidget, 2, 2 }, + { "setwidgetattr", GFXsetwidgetattr, 2, 2 }, + { "getwidgetattr", GFXgetwidgetattr, 2, 2 }, + { "destroywidget", GFXdestroywidget, 1, 1 }, + { "clear", GFXclear, 1, 1 }, + { "setgfxattr", GFXsetgfxattr, 2, 2 }, + { "getgfxattr", GFXgetgfxattr, 2, 2 }, + { "arrow", GFXarrow, 4, 5 }, + { "line", GFXline, 4, 5 }, + { "box", GFXbox, 3, 4 }, + { "polygon", GFXpolygon, 3, 4 }, + { "splinegon", GFXsplinegon, 3, 4 }, + { "arc", GFXarc, 4, 5 }, + { "text", GFXtext, 7, 8 }, + { "textsize", GFXtextsize, 4, 4 }, + { "createbitmap", GFXcreatebitmap, 2, 2 }, + { "destroybitmap", GFXdestroybitmap, 1, 1 }, + { "readbitmap", GFXreadbitmap, 2, 2 }, + { "writebitmap", GFXwritebitmap, 2, 2 }, + { "bitblt", GFXbitblt, 6, 7 }, + { "clearpick", GFXclearpick, 2, 2 }, + { "setpick", GFXsetpick, 3, 3 }, + { "displaymenu", GFXdisplaymenu, 2, 2 }, + { "colormap", GFXcolormap, 1, 1 }, + { "txtview", TXTmode, 1, 1 }, + { "ask", TXTask, 1, 3 }, + { "dump", Idump, 0, MAXN }, + { "typeof", Itypeof, 1, 1 }, + { "copy", Icopy, 1, 1 }, + { "remove", Iremove, 1, 2 }, + { "tablesize", Itablesize, 1, 1 }, + { "openio", Iopenio, 3, 4 }, + { "closeio", Icloseio, 1, 2 }, + { "readline", Ireadline, 1, 1 }, + { "read", Iread, 1, 1 }, + { "writeline", Iwriteline, 2, 2 }, + { "atan", Iatan, 2, 2 }, + { "tan", Itan, 1, 1 }, + { "cos", Icos, 1, 1 }, + { "sin", Isin, 1, 1 }, + { "sqrt", Isqrt, 1, 1 }, + { "random", Irandom, 1, 1 }, + { "ntos", Intos, 1, 1 }, + { "ston", Iston, 1, 1 }, + { "split", Isplit, 2, 3 }, + { "concat", Iconcat, 1, MAXN }, + { "quote", Iquote, 1, 3 }, + { "htmlquote", Ihtmlquote, 1, 1 }, + { "toint", Itoint, 1, 1 }, + { "strlen", Istrlen, 1, 1 }, + { "load", Iload, 1, 1 }, + { "run", Irun, 1, 1 }, + { "monitor", Imonitor, 2, 2 }, + { "idlerun", Iidlerun, 1, 1 }, + { "time", Itime, 0, 0 }, + { "sleep", Isleep, 1, 1 }, + { "echo", Iecho, 1, MAXN }, + { "getenv", Igetenv, 1, 1 }, + { "putenv", Iputenv, 2, 2 }, + { "system", Isystem, 1, MAXN }, + { "exit", Iexit, 0, 0 }, #ifdef FEATURE_DOT - {"parsegraphlabel", Iparsegraphlabel, 2, 2}, - {"readgraph", Ireadgraph, 1, 2}, - {"writegraph", Iwritegraph, 3, 3}, + { "parsegraphlabel", Iparsegraphlabel, 2, 2 }, + { "readgraph", Ireadgraph, 1, 2 }, + { "writegraph", Iwritegraph, 3, 3 }, +#endif +#ifdef _PACKAGE_ast + { "match", Imatch, 2, 2 }, #endif #ifdef FEATURE_CS - {"readcsmessage", C2Lreadcsmessage, 1, 1}, + { "readcsmessage", C2Lreadcsmessage, 1, 1 }, #endif #ifdef FEATURE_GMAP - {"createwindow", G2Lcreatewindow, 2, 2}, - {"destroywindow", G2Ldestroywindow, 1, 1}, - {"setwindowattr", G2Lsetwindowattr, 2, 2}, - {"getwindowattr", G2Lgetwindowattr, 2, 2}, - {"createchannel", G2Lcreatechannel, 2, 2}, - {"destroychannel", G2Ldestroychannel, 1, 1}, - {"setchannelattr", G2Lsetchannelattr, 2, 2}, - {"getchannelattr", G2Lgetchannelattr, 2, 2}, - {"getchannelcoord", G2Lgetchannelcoord, 2, 2}, - {"loadgeometry", G2Lloadgeometry, 1, 1}, - {"unloadgeometry", G2Lunloadgeometry, 1, 1}, - {"setgeometryattr", G2Lsetgeometryattr, 2, 2}, - {"getgeometryattr", G2Lgetgeometryattr, 2, 2}, - {"getgeometryitems", G2Lgetgeometryitems, 3, 3}, - {"insertgeom2chan", G2Linsertgeom2chan, 2, 2}, - {"removegeom2chan", G2Lremovegeom2chan, 1, 1}, - {"loadvalue", G2Lloadvalue, 1, 1}, - {"unloadvalue", G2Lunloadvalue, 1, 1}, - {"setvalueattr", G2Lsetvalueattr, 2, 2}, - {"getvalueattr", G2Lgetvalueattr, 2, 2}, - {"getvalueitems", G2Lgetvalueitems, 2, 2}, - {"insertval2geom", G2Linsertval2geom, 3, 3}, - {"removeval2geom", G2Lremoveval2geom, 1, 1}, - {"setval2geomattr", G2Lsetval2geomattr, 2, 2}, - {"getval2geomattr", G2Lgetval2geomattr, 2, 2}, - {"updatewindows", G2Lupdatewindows, 0, 0}, + { "createwindow", G2Lcreatewindow, 2, 2 }, + { "destroywindow", G2Ldestroywindow, 1, 1 }, + { "setwindowattr", G2Lsetwindowattr, 2, 2 }, + { "getwindowattr", G2Lgetwindowattr, 2, 2 }, + { "createchannel", G2Lcreatechannel, 2, 2 }, + { "destroychannel", G2Ldestroychannel, 1, 1 }, + { "setchannelattr", G2Lsetchannelattr, 2, 2 }, + { "getchannelattr", G2Lgetchannelattr, 2, 2 }, + { "getchannelcoord", G2Lgetchannelcoord, 2, 3 }, + { "loadgeometry", G2Lloadgeometry, 1, 1 }, + { "unloadgeometry", G2Lunloadgeometry, 1, 1 }, + { "setgeometryattr", G2Lsetgeometryattr, 2, 2 }, + { "getgeometryattr", G2Lgetgeometryattr, 2, 2 }, + { "getgeometryitems", G2Lgetgeometryitems, 3, 3 }, + { "insertgeom2chan", G2Linsertgeom2chan, 2, 2 }, + { "removegeom2chan", G2Lremovegeom2chan, 1, 1 }, + { "loadvalue", G2Lloadvalue, 1, 1 }, + { "unloadvalue", G2Lunloadvalue, 1, 1 }, + { "setvalueattr", G2Lsetvalueattr, 2, 2 }, + { "getvalueattr", G2Lgetvalueattr, 2, 2 }, + { "getvalueitems", G2Lgetvalueitems, 2, 2 }, + { "insertval2geom", G2Linsertval2geom, 3, 3 }, + { "removeval2geom", G2Lremoveval2geom, 1, 1 }, + { "setval2geomattr", G2Lsetval2geomattr, 2, 2 }, + { "getval2geomattr", G2Lgetval2geomattr, 2, 2 }, + { "updatewindows", G2Lupdatewindows, 0, 0 }, #endif - {0, 0, 0, 0} + { 0, 0, 0, 0 } }; int Ifuncn; @@ -190,652 +196,653 @@ static char *bufp; static int bufn; #define BUFINCR 10240 #define BUFSIZE sizeof (char) -static void growbufp(int); +static void growbufp (int); -void Iinit(void) -{ +void Iinit (void) { int i; - if (!(bufp = malloc(BUFINCR * BUFSIZE))) - panic(POS, "Iinit", "buf malloc failed"); + if (!(bufp = malloc (BUFINCR * BUFSIZE))) + panic (POS, "Iinit", "buf malloc failed"); bufn = BUFINCR; for (i = 0; Ifuncs[i].name; i++) - Efunction(Pfunction(Ifuncs[i].name, i), Ifuncs[i].name); - Ifuncn = sizeof(Ifuncs) / sizeof(Ifunc_t) - 1; + Efunction (Pfunction (Ifuncs[i].name, i), Ifuncs[i].name); + Ifuncn = sizeof (Ifuncs) / sizeof (Ifunc_t) - 1; } -void Iterm(void) -{ +void Iterm (void) { int i; for (i = 0; i < Ifuncn; i++) - Tdels(root, Ifuncs[i].name); + Tdels (root, Ifuncs[i].name); Ifuncn = 0; - free(bufp), bufp = NULL, bufn = 0; + free (bufp), bufp = NULL, bufn = 0; } -int Igetfunc(char *name) -{ +int Igetfunc (char *name) { int i = 0; - while (Ifuncs[i].name && Strcmp(Ifuncs[i].name, name) != 0) - i++; + while (Ifuncs[i].name && strcmp (Ifuncs[i].name, name) != 0) + i++; return (Ifuncs[i].name) ? i : -1; } /* display.c functions */ -int Idump(int argc, lvar_t * argv) -{ +int Idump (int argc, lvar_t *argv) { int i; if (argc == 0) - Dtrace(root, 0); + Dtrace (root, 0); else - for (i = 0; i < argc; i++) - Dtrace(argv[i].o, 0); + for (i = 0; i < argc; i++) + Dtrace (argv[i].o, 0); return L_SUCCESS; } /* tbl.c functions */ -int Icopy(int argc, lvar_t * argv) -{ - rtno = Tcopy(argv[0].o); +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 Icopy (int argc, lvar_t *argv) { + rtno = Tcopy (argv[0].o); return L_SUCCESS; } -int Iremove(int argc, lvar_t * argv) -{ +int Iremove (int argc, lvar_t *argv) { Tobj tblo, keyo; if (argc == 2) - tblo = argv[1].o, keyo = argv[0].o; + 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); + tblo = root, keyo = argv[0].o; + if (T_ISTABLE (tblo) && (T_ISNUMBER (keyo) || T_ISSTRING (keyo))) + Tdelo (tblo, keyo); return L_SUCCESS; } -int Itablesize(int argc, lvar_t * argv) -{ +int Itablesize (int argc, lvar_t *argv) { Tobj vo; - if (Tgettype((vo = argv[0].o)) != T_TABLE) - return L_FAILURE; - rtno = Tinteger(((Ttable_t *) vo)->n); + if (Tgettype ((vo = argv[0].o)) != T_TABLE) + return L_FAILURE; + rtno = Tinteger (((Ttable_t *) vo)->n); return L_SUCCESS; } /* file.c functions */ -int Iopenio(int argc, lvar_t * argv) -{ +int Iopenio (int argc, lvar_t *argv) { int rtn; if (argc == 3) - rtn = IOopen(Tgetstring(argv[0].o), - Tgetstring(argv[1].o), Tgetstring(argv[2].o), NULL); + rtn = IOopen ( + Tgetstring (argv[0].o), + Tgetstring (argv[1].o), Tgetstring (argv[2].o), NULL + ); else - rtn = IOopen(Tgetstring(argv[0].o), - Tgetstring(argv[1].o), Tgetstring(argv[2].o), - Tgetstring(argv[3].o)); + rtn = IOopen ( + Tgetstring (argv[0].o), + Tgetstring (argv[1].o), Tgetstring (argv[2].o), + Tgetstring (argv[3].o) + ); rtno = NULL; if (rtn == -1) - return L_SUCCESS; - rtno = Tinteger(rtn); + return L_SUCCESS; + rtno = Tinteger (rtn); return L_SUCCESS; } -int Icloseio(int argc, lvar_t * argv) -{ +int Icloseio (int argc, lvar_t *argv) { if (argc == 1) - IOclose((int) Tgetnumber(argv[0].o), NULL); + IOclose ((int) Tgetnumber (argv[0].o), NULL); else - IOclose((int) Tgetnumber(argv[0].o), Tgetstring(argv[1].o)); + IOclose ((int) Tgetnumber (argv[0].o), Tgetstring (argv[1].o)); return L_SUCCESS; } -int Ireadline(int argc, lvar_t * argv) -{ +int Ireadline (int argc, lvar_t *argv) { char *s; int m, n; s = bufp, n = bufn; - while ((m = IOreadline((int) Tgetnumber(argv[0].o), s, n)) != -1) { - if (m < n - 1) - break; - m += (s - bufp); - growbufp(bufn + BUFINCR); - s = bufp + m, n = bufn - m; + while ((m = IOreadline ((int) Tgetnumber (argv[0].o), s, n)) != -1) { + if (m < n - 1) + break; + m += (s - bufp); + growbufp (bufn + BUFINCR); + s = bufp + m, n = bufn - m; } if (m != -1) - rtno = Tstring(bufp); + rtno = Tstring (bufp); else - rtno = NULL; + rtno = NULL; return L_SUCCESS; } -int Iread(int argc, lvar_t * argv) -{ - if (IOread((int) Tgetnumber(argv[0].o), bufp, bufn) > 0) - rtno = Tstring(bufp); +int Iread (int argc, lvar_t *argv) { + if (IOread ((int) Tgetnumber (argv[0].o), bufp, bufn) > 0) + rtno = Tstring (bufp); else - rtno = NULL; + rtno = NULL; return L_SUCCESS; } -int Iwriteline(int argc, lvar_t * argv) -{ - IOwriteline((int) Tgetnumber(argv[0].o), Tgetstring(argv[1].o)); +int Iwriteline (int argc, lvar_t *argv) { + IOwriteline ((int) Tgetnumber (argv[0].o), Tgetstring (argv[1].o)); return L_SUCCESS; } /* math functions */ -int Iatan(int argc, lvar_t * argv) -{ +int Iatan (int argc, lvar_t *argv) { double x, y; - y = Tgetnumber(argv[0].o), x = Tgetnumber(argv[1].o); - rtno = Treal(180 * atan2(y, x) / M_PI); + y = Tgetnumber (argv[0].o), x = Tgetnumber (argv[1].o); + rtno = Treal (180 * atan2 (y, x) / M_PI); return L_SUCCESS; } -int Itan(int argc, lvar_t * argv) -{ - rtno = Treal(tan(M_PI * Tgetnumber(argv[0].o) / 180.0)); +int Itan (int argc, lvar_t *argv) { + rtno = Treal (tan (M_PI * Tgetnumber (argv[0].o) / 180.0)); return L_SUCCESS; } -int Icos(int argc, lvar_t * argv) -{ - rtno = Treal(cos(M_PI * Tgetnumber(argv[0].o) / 180.0)); +int Icos (int argc, lvar_t *argv) { + rtno = Treal (cos (M_PI * Tgetnumber (argv[0].o) / 180.0)); return L_SUCCESS; } -int Isin(int argc, lvar_t * argv) -{ - rtno = Treal(sin(M_PI * Tgetnumber(argv[0].o) / 180.0)); +int Isin (int argc, lvar_t *argv) { + rtno = Treal (sin (M_PI * Tgetnumber (argv[0].o) / 180.0)); return L_SUCCESS; } -int Isqrt(int argc, lvar_t * argv) -{ - rtno = Treal(sqrt(Tgetnumber(argv[0].o))); +int Isqrt (int argc, lvar_t *argv) { + rtno = Treal (sqrt (Tgetnumber (argv[0].o))); return L_SUCCESS; } -/* the gnu way is to test for a feature explicitly */ -#ifndef HAVE_LRAND48 -#define lrand48 rand -#endif -/* the othe way is to presume a feature based on the OS */ -#if defined(FEATURE_MS) || defined(__Mac_OSX__) +#if !defined(HAVE_LRAND48) || defined(FEATURE_MS) #define lrand48 rand #endif -int Irandom(int argc, lvar_t * argv) -{ - rtno = Treal((Tgetnumber(argv[0].o) * - (lrand48() & 0xffff)) / (double) (0xffff)); +int Irandom (int argc, lvar_t *argv) { + rtno = Treal ( + (Tgetnumber (argv[0].o) * + (lrand48 () & 0xffff)) / (double) (0xffff) + ); return L_SUCCESS; } /* conversion functions */ -int Intos(int argc, lvar_t * argv) -{ +int Intos (int argc, lvar_t *argv) { double d; - d = Tgetnumber(argv[0].o); + d = Tgetnumber (argv[0].o); if ((long) d == d) - sprintf(bufp, "%ld", (long) d); + sprintf (bufp, "%ld", (long) d); else - sprintf(bufp, "%f", d); - rtno = Tstring(bufp); + sprintf (bufp, "%f", d); + rtno = Tstring (bufp); return L_SUCCESS; } -int Iston(int argc, lvar_t * argv) -{ - rtno = Treal((double) atof(Tgetstring(argv[0].o))); +int Iston (int argc, lvar_t *argv) { + rtno = Treal ((double) atof (Tgetstring (argv[0].o))); return L_SUCCESS; } -int Isplit(int argc, lvar_t * argv) -{ +int Isplit (int argc, lvar_t *argv) { Tobj so, fo; char *sp, *sp2, *s; char fc, tc, qmode; long rtnm, rtni; - int bufi; - - if (Tgettype((so = argv[0].o)) != T_STRING || - Tgettype((fo = argv[1].o)) != T_STRING) - return L_FAILURE; - sp = Tgetstring(so); - s = Tgetstring(fo); + int bufi, qflag; + + if ( + Tgettype ((so = argv[0].o)) != T_STRING || + Tgettype ((fo = argv[1].o)) != T_STRING + ) + return L_FAILURE; + qflag = (argc == 3) ? FALSE : TRUE; + sp = Tgetstring (so); + s = Tgetstring (fo); if (s[0] == '\\' && s[1] == 'n') - fc = '\n'; + fc = '\n'; else - fc = s[0]; - rtno = Ttable(4); - rtnm = Mpushmark(rtno); + fc = s[0]; + rtno = Ttable (4); + rtnm = Mpushmark (rtno); rtni = 0; if (s[0] == 0) { - for (sp2 = sp; *sp2; sp2++) { - tc = *(sp2 + 1), *(sp2 + 1) = '\000'; - Tinsi(rtno, rtni++, Tstring(sp2)); - *(sp2 + 1) = tc; - } - } else if (fc == ' ' || fc == ' ') { - while (*sp == fc) - sp++; - while (*sp) { - bufi = 0; - qmode = 0; - for (sp2 = sp; *sp2; sp2++) { - if (bufi == bufn) - growbufp(bufn + BUFINCR); - if (*sp2 == '"' || *sp2 == '\'') { - if (qmode) { - if (qmode == *sp2) - qmode = 0; - else - bufp[bufi++] = *sp2; - } else - qmode = *sp2; - } else if (*sp2 == fc && !qmode) - break; - else - bufp[bufi++] = *sp2; - } - if (bufi == bufn) - growbufp(bufn + BUFINCR); - bufp[bufi] = 0; - Tinsi(rtno, rtni++, Tstring(bufp)); - while (*sp2 == fc) - sp2++; - sp = sp2; - } + for (sp2 = sp; *sp2; sp2++) { + tc = *(sp2 + 1), *(sp2 + 1) = '\000'; + Tinsi (rtno, rtni++, Tstring (sp2)); + *(sp2 + 1) = tc; + } + } else if (qflag && (fc == ' ' || fc == ' ')) { + while (*sp == fc) + sp++; + while (*sp) { + bufi = 0; + qmode = 0; + for (sp2 = sp; *sp2; sp2++) { + if (bufi == bufn) + growbufp (bufn + BUFINCR); + if (*sp2 == '"' || *sp2 == '\'') { + if (qmode) { + if (qmode == *sp2) + qmode = 0; + else + bufp[bufi++] = *sp2; + } else + qmode = *sp2; + } else if (*sp2 == fc && !qmode) + break; + else + bufp[bufi++] = *sp2; + } + if (bufi == bufn) + growbufp (bufn + BUFINCR); + bufp[bufi] = 0; + Tinsi (rtno, rtni++, Tstring (bufp)); + while (*sp2 == fc) + sp2++; + sp = sp2; + } } else { - while (*sp) { - for (sp2 = sp; *sp2 && *sp2 != fc; sp2++); - tc = *sp2, *sp2 = '\000'; - Tinsi(rtno, rtni++, Tstring(sp)); - *sp2 = tc; - if (*sp2) { - sp2++; - if (!*sp2) - Tinsi(rtno, rtni++, Tstring("")); - } - sp = sp2; - } + while (*sp) { + for (sp2 = sp; *sp2 && *sp2 != fc; sp2++) + ; + tc = *sp2, *sp2 = '\000'; + Tinsi (rtno, rtni++, Tstring (sp)); + *sp2 = tc; + if (*sp2) { + sp2++; + if (!*sp2) + Tinsi (rtno, rtni++, Tstring ("")); + } + sp = sp2; + } } - Mpopmark(rtnm); + Mpopmark (rtnm); return L_SUCCESS; } -int Iconcat(int argc, lvar_t * argv) -{ +int Iconcat (int argc, lvar_t *argv) { Tobj ao; char buf2[50]; char *s; int i, n, bufi; for (bufi = 0, i = 0; i < argc; i++) { - ao = argv[i].o; - switch (Tgettype(argv[i].o)) { - case T_STRING: - if (bufi + (n = strlen(Tgetstring(ao)) + 1) > bufn) - growbufp(bufi + n); - for (s = Tgetstring(ao); *s; s++) - bufp[bufi++] = *s; - break; - case T_INTEGER: - if (bufi + 50 > bufn) - growbufp(bufi + 50); - sprintf(buf2, "%ld", Tgetinteger(ao)); - for (s = buf2; *s; s++) - bufp[bufi++] = *s; - break; - case T_REAL: - if (bufi + 50 > bufn) - growbufp(bufi + 50); - sprintf(buf2, "%f", Tgetreal(ao)); - for (s = buf2; *s; s++) - bufp[bufi++] = *s; - break; - case T_CODE: - case T_TABLE: - case T_SIZE: - break; - } + ao = argv[i].o; + switch (Tgettype (argv[i].o)) { + case T_STRING: + if (bufi + (n = strlen (Tgetstring (ao)) + 1) > bufn) + growbufp (bufi + n); + for (s = Tgetstring (ao); *s; s++) + bufp[bufi++] = *s; + break; + case T_INTEGER: + if (bufi + 50 > bufn) + growbufp (bufi + 50); + sprintf (buf2, "%ld", Tgetinteger (ao)); + for (s = buf2; *s; s++) + bufp[bufi++] = *s; + break; + case T_REAL: + if (bufi + 50 > bufn) + growbufp (bufi + 50); + sprintf (buf2, "%f", Tgetreal (ao)); + for (s = buf2; *s; s++) + bufp[bufi++] = *s; + break; + } } bufp[bufi] = '\000'; - rtno = Tstring(bufp); + rtno = Tstring (bufp); return L_SUCCESS; } -int Iquote(int argc, lvar_t * argv) -{ - Tobj so, ao = NULL, qo = NULL; +int Iquote (int argc, lvar_t *argv) { + Tobj so, ao, qo; char *s, *s1, *s2, *qs, *as; char buf2[50]; int n, bufi; - s = 0; - if ((Tgettype((so = argv[0].o)) != T_STRING && !T_ISNUMBER(so)) || - (argc > 1 && Tgettype((qo = argv[1].o)) != T_STRING) || - (argc > 2 && Tgettype((ao = argv[2].o)) != T_STRING)) - return L_FAILURE; - switch (Tgettype(so)) { + if ( + (Tgettype ((so = argv[0].o)) != T_STRING && !T_ISNUMBER (so)) || + (argc > 1 && Tgettype ((qo = argv[1].o)) != T_STRING) || + (argc > 2 && Tgettype ((ao = argv[2].o)) != T_STRING) + ) + return L_FAILURE; + switch (Tgettype (so)) { case T_STRING: - s = Tgetstring(so); - break; + s = Tgetstring (so); + break; case T_INTEGER: - sprintf(buf2, "%ld", Tgetinteger(so)); - s = &buf2[0]; - break; + sprintf (buf2, "%ld", Tgetinteger (so)); + s = &buf2[0]; + break; case T_REAL: - sprintf(buf2, "%f", Tgetreal(so)); - s = &buf2[0]; - break; - case T_CODE: - case T_TABLE: - case T_SIZE: - break; + sprintf (buf2, "%f", Tgetreal (so)); + s = &buf2[0]; + break; } if (argc > 1) - qs = Tgetstring(qo); + qs = Tgetstring (qo); else - qs = "'\""; + qs = "'\""; if (argc > 2) - as = Tgetstring(ao); + as = Tgetstring (ao); else - as = NULL; + as = NULL; bufi = 0; - if ((n = strlen(s) + 3) * 2 > bufn) - growbufp(n * 2); /* the *2 is max for chars to quote */ + if ((n = strlen (s) + 3) * 2 > bufn) + growbufp (n * 2); /* the *2 is max for chars to quote */ if (as) - bufp[bufi++] = *as; + bufp[bufi++] = *as; for (s1 = s; *s1; s1++) { - for (s2 = qs; *s2; s2++) - if (*s1 == *s2) { - bufp[bufi++] = '\\', bufp[bufi++] = *s1; - break; - } - if (!*s2) { - switch (*s1) { - case '\n': - bufp[bufi++] = '\\', bufp[bufi++] = 'n'; - break; - case '\r': - bufp[bufi++] = '\\', bufp[bufi++] = 'r'; - break; - default: - bufp[bufi++] = *s1; - break; - } - } + for (s2 = qs; *s2; s2++) + if (*s1 == *s2) { + bufp[bufi++] = '\\', bufp[bufi++] = *s1; + break; + } + if (!*s2) { + switch (*s1) { + case '\n': bufp[bufi++] = '\\', bufp[bufi++] = 'n'; break; + case '\r': bufp[bufi++] = '\\', bufp[bufi++] = 'r'; break; + default: bufp[bufi++] = *s1; break; + } + } } if (as) - bufp[bufi++] = *as; + bufp[bufi++] = *as; + bufp[bufi] = '\000'; + rtno = Tstring (bufp); + return L_SUCCESS; +} + +int Ihtmlquote (int argc, lvar_t *argv) { + Tobj so; + char *s, *s1; + int n, bufi; + + if (Tgettype ((so = argv[0].o)) != T_STRING) + return L_FAILURE; + s = Tgetstring (so); + bufi = 0; + if ((n = strlen (s) + 1) * 4 > bufn) + growbufp (n * 4); /* the *4 is max for chars to quote */ + for (s1 = s; *s1; s1++) { + switch (*s1) { + case '/': + bufp[bufi++] = '%'; + bufp[bufi++] = '2'; + bufp[bufi++] = 'F'; + break; + case '%': + bufp[bufi++] = '%'; + bufp[bufi++] = '2'; + bufp[bufi++] = '5'; + break; + case ' ': + bufp[bufi++] = '+'; + break; + default: + bufp[bufi++] = *s1; + break; + } + } bufp[bufi] = '\000'; - rtno = Tstring(bufp); + rtno = Tstring (bufp); return L_SUCCESS; } -int Itoint(int argc, lvar_t * argv) -{ - rtno = Tinteger((long) Tgetnumber(argv[0].o)); +int Itoint (int argc, lvar_t *argv) { + rtno = Tinteger ((long) Tgetnumber (argv[0].o)); return L_SUCCESS; } -int Istrlen(int argc, lvar_t * argv) -{ - rtno = Tinteger(strlen(Tgetstring(argv[0].o))); +int Istrlen (int argc, lvar_t *argv) { + rtno = Tinteger (strlen (Tgetstring (argv[0].o))); return L_SUCCESS; } /* script loading functions */ -int Iload(int argc, lvar_t * argv) -{ +int Iload (int argc, lvar_t *argv) { Psrc_t src; char *fn; FILE *fp; Tobj co; - if ((fn = Tgetstring(argv[0].o))) { - if (fn[0] == '-' && fn[1] == '\000') - fp = stdin; - else { - fp = NULL; - if ((fn = buildpath(fn, FALSE))) - fp = fopen(fn, "r"); - } - if (fp) { - src.flag = FILESRC, src.s = NULL, src.fp = fp; - src.tok = -1, src.lnum = 1; - while ((co = Punit(&src))) - Eoktorun = TRUE, Eunit(co); - if (fp != stdin) - fclose(fp); - } else - return L_FAILURE; + if ((fn = Tgetstring (argv[0].o))) { + if (fn[0] == '-' && fn[1] == '\000') + fp = stdin; + else { + fp = NULL; + if ((fn = buildpath (fn, FALSE))) + fp = fopen (fn, "r"); + } + if (fp) { + src.flag = FILESRC, src.s = NULL, src.fp = fp; + src.tok = -1, src.lnum = 1; + while ((co = Punit (&src))) + Eoktorun = TRUE, Eunit (co); + if (fp != stdin) + fclose (fp); + } else + return L_FAILURE; } return L_SUCCESS; } -int Irun(int argc, lvar_t * argv) -{ +int Irun (int argc, lvar_t *argv) { Psrc_t src; char *s; Tobj co; - if ((s = Tgetstring(argv[0].o))) { - src.flag = CHARSRC, src.s = s, src.fp = NULL; - src.tok = -1, src.lnum = 1; - while ((co = Punit(&src))) - Eoktorun = TRUE, Eunit(co); + if ((s = Tgetstring (argv[0].o))) { + src.flag = CHARSRC, src.s = s, src.fp = NULL; + src.tok = -1, src.lnum = 1; + while ((co = Punit (&src))) + Eoktorun = TRUE, Eunit (co); } return L_SUCCESS; } /* mode setting functions */ -int Imonitor(int argc, lvar_t * argv) -{ +int Imonitor (int argc, lvar_t *argv) { Tobj mo, io; char *ms; int ioi; - if (Tgettype((mo = argv[0].o)) != T_STRING || - (Tgettype((io = argv[1].o)) != T_INTEGER && - Tgettype(io) != T_REAL)) - return L_FAILURE; - ms = Tgetstring(mo), ioi = Tgetnumber(io); + if ( + Tgettype ((mo = argv[0].o)) != T_STRING || + (Tgettype ((io = argv[1].o)) != T_INTEGER && Tgettype (io) != T_REAL) + ) + return L_FAILURE; + ms = Tgetstring (mo), ioi = Tgetnumber (io); if (ioi < 0 || ioi >= ion) - return L_FAILURE; - if (Strcmp(ms, "on") == 0) - IOmonitor(ioi, inputfds); - else if (Strcmp(ms, "off") == 0) - IOunmonitor(ioi, inputfds); + return L_FAILURE; + if (strcmp (ms, "on") == 0) + IOmonitor (ioi, inputfds); + else if (strcmp (ms, "off") == 0) + IOunmonitor (ioi, inputfds); else - return L_FAILURE; + return L_FAILURE; return L_SUCCESS; } -int Iidlerun(int argc, lvar_t * argv) -{ +int Iidlerun (int argc, lvar_t *argv) { Tobj mo; char *ms; int mode; - if (Tgettype((mo = argv[0].o)) != T_STRING) - return L_SUCCESS; - ms = Tgetstring(mo); - if (Strcmp(ms, "on") == 0) - mode = 1; - else if (Strcmp(ms, "off") == 0) - mode = 0; + if (Tgettype ((mo = argv[0].o)) != T_STRING) + return L_SUCCESS; + ms = Tgetstring (mo); + if (strcmp (ms, "on") == 0) + mode = 1; + else if (strcmp (ms, "off") == 0) + mode = 0; else - return L_FAILURE; + return L_FAILURE; idlerunmode = mode; return L_SUCCESS; } /* system functions */ -int Itime(int argc, lvar_t * argv) -{ +int Itime (int argc, lvar_t *argv) { #ifndef FEATURE_MS struct timeval tz; - gettimeofday(&tz, NULL); - rtno = Treal(tz.tv_sec + tz.tv_usec / 1000000.0); + gettimeofday (&tz, NULL); + rtno = Treal (tz.tv_sec + tz.tv_usec / 1000000.0); #else - rtno = Treal(0); + rtno = Treal (0); #endif return L_SUCCESS; } -int Isleep(int argc, lvar_t * argv) -{ +int Isleep (int argc, lvar_t *argv) { #ifndef FEATURE_MS struct timeval tz; - long l; - - Gsync(); - l = Tgetnumber(argv[0].o); - tz.tv_sec = l; - tz.tv_usec = (l - tz.tv_sec) * 1000000; - if (select(0, NULL, NULL, NULL, &tz) == -1) - return L_FAILURE; + float f; + + Gsync (); + f = Tgetnumber (argv[0].o); + tz.tv_sec = f; + tz.tv_usec = (f - tz.tv_sec) * 1000000; + if (select (0, NULL, NULL, NULL, &tz) == -1) + return L_FAILURE; #endif return L_SUCCESS; } -int Iecho(int argc, lvar_t * argv) -{ +int Iecho (int argc, lvar_t *argv) { int i; for (i = 0; i < argc; i++) { - switch (Tgettype(argv[i].o)) { - case T_STRING: - printf("%s", Tgetstring(argv[i].o)); - break; - case T_INTEGER: - printf("%ld", Tgetinteger(argv[i].o)); - break; - case T_REAL: - printf("%f", Tgetreal(argv[i].o)); - break; - case T_TABLE: - printf("[\n"), Dtrace(argv[i].o, 4); - break; - case T_CODE: - case T_SIZE: - break; - } + switch (Tgettype (argv[i].o)) { + case T_STRING: printf ("%s", Tgetstring (argv[i].o)); break; + case T_INTEGER: printf ("%ld", Tgetinteger (argv[i].o)); break; + case T_REAL: printf ("%f", Tgetreal (argv[i].o)); break; + case T_TABLE: printf ("[\n"), Dtrace (argv[i].o, 4); break; + } } - printf("\n"); + printf ("\n"); return L_SUCCESS; } -int Igetenv(int argc, lvar_t * argv) -{ +int Igetenv (int argc, lvar_t *argv) { char *s; - if (!T_ISSTRING(argv[0].o)) - return L_FAILURE; - if (!(s = getenv(Tgetstring(argv[0].o))) || !*s) - return L_SUCCESS; - rtno = Tstring(s); + if (!T_ISSTRING (argv[0].o)) + return L_FAILURE; + if (!(s = getenv (Tgetstring (argv[0].o))) || !*s) + return L_SUCCESS; + rtno = Tstring (s); return L_SUCCESS; } -int Iputenv(int argc, lvar_t * argv) -{ - if (!T_ISSTRING(argv[0].o) || !T_ISSTRING(argv[1].o)) - return L_FAILURE; +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); + strcat (bufp, Tgetstring (argv[0].o)); + strcat (bufp, "="); + strcat (bufp, Tgetstring (argv[1].o)); + putenv (bufp); return L_SUCCESS; } -int Isystem(int argc, lvar_t * argv) -{ +int Isystem (int argc, lvar_t *argv) { int i; bufp[0] = 0; - strcat(bufp, Tgetstring(argv[0].o)); + strcat (bufp, Tgetstring (argv[0].o)); for (i = 1; i < argc; i++) - strcat(bufp, " "), strcat(bufp, Tgetstring(argv[i].o)); + strcat (bufp, " "), strcat (bufp, Tgetstring (argv[i].o)); #ifndef FEATURE_MS - system(bufp); + system (bufp); #else { - UINT handle; - handle = WinExec(bufp, SW_SHOW); + UINT handle; + handle = WinExec (bufp, SW_SHOW); } #endif return L_SUCCESS; } -int Iexit(int argc, lvar_t * argv) -{ - longjmp(exitljbuf, 1); - return L_SUCCESS; /* NOT REACHED */ +int Iexit (int argc, lvar_t *argv) { + longjmp (exitljbuf, 1); + return L_SUCCESS; /* NOT REACHED */ } #ifdef FEATURE_DOT /* dot related functions */ -int Iparsegraphlabel(int argc, lvar_t * argv) -{ - rtno = D2Lparsegraphlabel(argv[0].o, argv[1].o); +int Iparsegraphlabel (int argc, lvar_t *argv) { + rtno = D2Lparsegraphlabel (argv[0].o, argv[1].o); return L_SUCCESS; } -int Ireadgraph(int argc, lvar_t * argv) -{ +int Ireadgraph (int argc, lvar_t *argv) { int ioi; - if ((ioi = Tgetnumber(argv[0].o)) < 0 || ioi >= ion) - return L_FAILURE; - if (argc == 2 && !T_ISTABLE(argv[1].o)) - return L_FAILURE; - if (!(rtno = D2Lreadgraph(ioi, (argc == 2 ? argv[1].o : NULL)))) - return L_FAILURE; + if ((ioi = Tgetnumber (argv[0].o)) < 0 || ioi >= ion) + return L_FAILURE; + if (argc == 2 && !T_ISTABLE (argv[1].o)) + return L_FAILURE; + if (!(rtno = D2Lreadgraph (ioi, (argc == 2 ? argv[1].o : NULL)))) + return L_FAILURE; return L_SUCCESS; } -int Iwritegraph(int argc, lvar_t * argv) -{ +int Iwritegraph (int argc, lvar_t *argv) { int ioi; - if (!T_ISNUMBER(argv[0].o) || !T_ISTABLE(argv[1].o) || - !T_ISINTEGER(argv[2].o)) - return L_FAILURE; - if ((ioi = Tgetnumber(argv[0].o)) < 0 || ioi >= ion) - return L_FAILURE; - D2Lwritegraph(ioi, argv[1].o, Tgetinteger(argv[2].o)); + if ( + !T_ISNUMBER (argv[0].o) || !T_ISTABLE (argv[1].o) || + !T_ISINTEGER (argv[2].o) + ) + return L_FAILURE; + if ((ioi = Tgetnumber (argv[0].o)) < 0 || ioi >= ion) + return L_FAILURE; + D2Lwritegraph (ioi, argv[1].o, Tgetinteger (argv[2].o)); + return L_SUCCESS; +} +#endif + +#ifdef _PACKAGE_ast +/* ast related functions */ + +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; } #endif -static void growbufp(int newsize) -{ - if (!(bufp = realloc(bufp, - ((newsize + BUFINCR - - 1) / BUFINCR) * BUFINCR * BUFSIZE))) - panic(POS, "growbufp", "buf realloc failed"); +static void growbufp (int newsize) { + if (!(bufp = realloc ( + bufp, ((newsize + BUFINCR - 1) / BUFINCR) * BUFINCR * BUFSIZE + ))) + panic (POS, "growbufp", "buf realloc failed"); bufn = ((newsize + BUFINCR - 1) / BUFINCR) * BUFINCR; }