]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/jsmn/example/maptest2.c
did some cleaning~ wwww
[16.git] / src / lib / jsmn / example / maptest2.c
index 41e2544ab65732de4fb9ec014cb6484993361671..017fbf8520111b28161a7dbdfb252496ae9beed1 100644 (file)
@@ -3,50 +3,96 @@
 #include <string.h>
 #include <errno.h>
 #include "../jsmn.c"
+#include "../../../lib/types.h"
 
 /*
  * An example of reading JSON from stdin and printing its content to stdout.
  * The output looks like YAML, but I'm not sure if it's really compatible.
- */
+ */\r
 
-static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {
+char *js_sv;
+
+typedef struct {\r
+       //bitmap_t *data;
+       byte *data;\r
+       word tileHeight;\r
+       word tileWidth;\r
+       unsigned int rows;\r
+       unsigned int cols;\r
+} tiles_t;\r
+\r
+typedef struct {\r
+       byte    *data;\r
+       tiles_t *tiles;\r
+       int width;\r
+       int height;\r
+} map_t;
+
+static int jsoneq(const char *json, jsmntok_t *tok, const char *s) {
+       if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start &&
+                       strncmp(json + tok->start, s, tok->end - tok->start) == 0) {
+               return 0;
+       }
+       return -1;
+}
+
+static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map) {
        int i, j, k;
        if (count == 0) {
                return 0;
        }
+       /* We may want to do strtol() here to get numeric value */
        if (t->type == JSMN_PRIMITIVE) {
-               printf("%.*s", t->end - t->start, js+t->start);
+               if(js_sv == "height")
+               {
+                       map->height = (int)strtol(js+t->start, (char **)js+t->end, 10);
+                       printf("h:[%d]\n", map->height);
+               }else if(js_sv == "width")
+               {
+                       map->width = (int)strtol(js+t->start, (char **)js+t->end, 10);
+                       printf("w:[%d]\n", map->width);
+               }
                return 1;
+               /* We may use strndup() to fetch string value */
        } else if (t->type == JSMN_STRING) {
-               printf("'%.*s'", t->end - t->start, js+t->start);
+               //printf("'%.*s'", t->end - t->start, js+t->start);
+               if (jsoneq(js, t, "height") == 0 && indent==1)
+               {
+                       js_sv="height";//strdup(js+t->start);//, t->end - t->start);
+                       printf("%s\n", js_sv);
+               }else if (jsoneq(js, t, "width") == 0 && indent==1)
+               {
+                       js_sv="width";//strdup(js+t->start);//, t->end - t->start);
+                       printf("%s\n", js_sv);
+               }else js_sv=NULL;
                return 1;
        } else if (t->type == JSMN_OBJECT) {
-               printf("\n");
+               //printf("\n");
                j = 0;
                for (i = 0; i < t->size; i++) {
-                       for (k = 0; k < indent; k++) printf("  ");
-                       j += dump(js, t+1+j, count-j, indent+1);
-                       printf(": ");
-                       j += dump(js, t+1+j, count-j, indent+1);
-                       printf("\n");
+                       //for (k = 0; k < indent; k++) printf("\t");
+                       j += dump(js, t+1+j, count-j, indent+1, map);
+                       //printf(": ");
+                       j += dump(js, t+1+j, count-j, indent+1, map);
+                       //printf("\n");
                }
                return j+1;
        } else if (t->type == JSMN_ARRAY) {
                j = 0;
-               printf("\n");
+               //printf("==\n");
                for (i = 0; i < t->size; i++) {
-                       for (k = 0; k < indent-1; k++) printf("  ");
-                       printf("   - ");
-                       j += dump(js, t+1+j, count-j, indent+1);
-                       printf("\n");
+                       //for (k = 0; k < indent-1; k++) printf("\t");
+                       //printf("\t-");
+                       j += dump(js, t+1+j, count-j, indent+1, map);
+                       //printf("==\n");
                }
                return j+1;
        }
        return 0;
 }
 
-int main() {
-       FILE *fh = fopen("../../../../data/test.map", "r");
+int loadmap(char *mn, map_t *map)
+{
        int r;
        int eof_expected = 0;
        char *js = NULL;
@@ -57,6 +103,8 @@ int main() {
        jsmntok_t *tok;
        size_t tokcount = 2;
 
+       FILE *fh = fopen(mn, "r");
+
        /* Prepare parser */
        jsmn_init(&p);
 
@@ -104,10 +152,19 @@ again:
                                goto again;
                        }
                } else {
-                       dump(js, tok, p.toknext, 0);
+                       dump(js, tok, p.toknext, 0, map);
+                       //fprintf(stdout, "[[[[%d]]]]\n", sizeof(tok));
+                       //printf("[\n%d\n]", jslen);
                        eof_expected = 1;
                }
        }
 
        return 0;
 }
+
+int main()
+{
+       map_t map;
+       loadmap("../../../../data/test.map", &map);
+       return 0;
+}