]> 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 8d4fec246beb2b2ceb55550452abd56266a2f9e5..017fbf8520111b28161a7dbdfb252496ae9beed1 100644 (file)
@@ -3,11 +3,30 @@
 #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
+
+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 &&
@@ -17,47 +36,63 @@ static int jsoneq(const char *json, jsmntok_t *tok, const char *s) {
        return -1;
 }
 
-static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {
+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);
-               /*if (jsoneq(js, t, "image") == 0) {
-                       printf("- image: %.*s\n", 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("\t");
-                       j += dump(js, t+1+j, count-j, indent+1);
-                       printf(": ");
-                       j += dump(js, t+1+j, count-j, indent+1);
-                       printf("\n");
+                       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("\t");
-                       printf("\t-");
-                       j += dump(js, t+1+j, count-j, indent+1);
-                       printf("\n");
+                       //printf("\t-");
+                       j += dump(js, t+1+j, count-j, indent+1, map);
+                       //printf("==\n");
                }
                return j+1;
        }
        return 0;
 }
 
-int main() {
+int loadmap(char *mn, map_t *map)
+{
        int r;
        int eof_expected = 0;
        char *js = NULL;
@@ -68,7 +103,7 @@ int main() {
        jsmntok_t *tok;
        size_t tokcount = 2;
 
-       FILE *fh = fopen("../../../../data/test.map", "r");
+       FILE *fh = fopen(mn, "r");
 
        /* Prepare parser */
        jsmn_init(&p);
@@ -117,12 +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);
+                       //printf("[\n%d\n]", jslen);
                        eof_expected = 1;
                }
        }
 
        return 0;
 }
+
+int main()
+{
+       map_t map;
+       loadmap("../../../../data/test.map", &map);
+       return 0;
+}