]> git.webhop.me Git - lcd4linux.git/commitdiff
strstr() and substr() added to string plugin
authormichael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sat, 24 Feb 2007 14:06:57 +0000 (14:06 +0000)
committermichael <michael@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sat, 24 Feb 2007 14:06:57 +0000 (14:06 +0000)
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@770 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

plugin_string.c

index 58777099e63503dd207b520796172ed162a15bcf..c555464dbbe7c17c15703b281e70fa91f84497d1 100644 (file)
@@ -65,12 +65,77 @@ static void my_strupper(RESULT * result, RESULT * arg1)
     free(value);
 }
 
+static void my_strstr(RESULT * result, RESULT * arg1, RESULT * arg2)
+{
+    char *p;
+    double value;
+
+    char *haystack = R2S(arg1);
+    char *needle = R2S(arg2);
+
+    p = strstr(haystack, needle);
+
+    if (p == NULL) {
+       value = -1;
+    } else {
+       value = p - haystack;
+    }
+
+    SetResult(&result, R_NUMBER, &value);
+}
+
+static void my_substr(RESULT * result, int argc, RESULT * argv[])
+{
+    char *str, *p1, *p2;
+    int pos, len;
+
+    if (argc < 2 || argc > 3) {
+       error("substr(): wrong number of parameters");
+       SetResult(&result, R_STRING, "");
+       return;
+    }
+
+    str = strdup(R2S(argv[0]));
+
+    pos = R2N(argv[1]);
+    if (pos < 0)
+       pos = 0;
+
+    if (argc == 3) {
+       len = R2N(argv[2]);
+       if (len < 0)
+           len = 0;
+    } else {
+       len = -1;
+    }
+
+    p1 = str;
+    while (pos > 0 && *p1 != '\0') {
+       p1++;
+       pos--;
+    }
+
+    if (len >= 0) {
+       p2 = p1;
+       while (len > 0 && *p2 != '\0') {
+           p2++;
+           len--;
+       }
+       *p2 = '\0';
+    }
+
+    SetResult(&result, R_STRING, p1);
+    free(str);
+}
+
 int plugin_init_string(void)
 {
 
     /* register some basic string functions */
     AddFunction("strlen", 1, my_strlen);
     AddFunction("strupper", 1, my_strupper);
+    AddFunction("strstr", 2, my_strstr);
+    AddFunction("substr", -1, my_substr);
     return 0;
 }