/* ** strlib.c ** String library to LUA ** ** Waldemar Celes Filho ** TeCGraf - PUC-Rio ** 19 May 93 */ #include #include #include #include "lua.h" /* ** Return the position of the first caracter of a substring into a string ** LUA interface: ** n = strfind (string, substring) */ static void str_find (void) { int n; char *s1, *s2; lua_Object o1 = lua_getparam (1); lua_Object o2 = lua_getparam (2); if (!lua_isstring(o1) || !lua_isstring(o2)) { lua_error ("incorrect arguments to function `strfind'"); return; } s1 = lua_getstring(o1); s2 = lua_getstring(o2); n = strstr(s1,s2) - s1 + 1; lua_pushnumber (n); } /* ** Return the string length ** LUA interface: ** n = strlen (string) */ static void str_len (void) { lua_Object o = lua_getparam (1); if (!lua_isstring(o)) { lua_error ("incorrect arguments to function `strlen'"); return; } lua_pushnumber(strlen(lua_getstring(o))); } /* ** Return the substring of a string, from start to end ** LUA interface: ** substring = strsub (string, start, end) */ static void str_sub (void) { int start, end; char *s; lua_Object o1 = lua_getparam (1); lua_Object o2 = lua_getparam (2); lua_Object o3 = lua_getparam (3); if (!lua_isstring(o1) || !lua_isnumber(o2) || !lua_isnumber(o3)) { lua_error ("incorrect arguments to function `strsub'"); return; } s = strdup (lua_getstring(o1)); start = lua_getnumber (o2); end = lua_getnumber (o3); if (end < start || start < 1 || end > strlen(s)) lua_pushstring (""); else { s[end] = 0; lua_pushstring (&s[start-1]); } free (s); } /* ** Convert a string to lower case. ** LUA interface: ** lowercase = strlower (string) */ static void str_lower (void) { char *s, *c; lua_Object o = lua_getparam (1); if (!lua_isstring(o)) { lua_error ("incorrect arguments to function `strlower'"); return; } c = s = strdup(lua_getstring(o)); while (*c != 0) { *c = tolower(*c); c++; } lua_pushstring(s); free(s); } /* ** Convert a string to upper case. ** LUA interface: ** uppercase = strupper (string) */ static void str_upper (void) { char *s, *c; lua_Object o = lua_getparam (1); if (!lua_isstring(o)) { lua_error ("incorrect arguments to function `strlower'"); return; } c = s = strdup(lua_getstring(o)); while (*c != 0) { *c = toupper(*c); c++; } lua_pushstring(s); free(s); } /* ** Open string library */ void strlib_open (void) { lua_register ("strfind", str_find); lua_register ("strlen", str_len); lua_register ("strsub", str_sub); lua_register ("strlower", str_lower); lua_register ("strupper", str_upper); }