X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fjsmn%2Fexample%2Fmaptest2.c;h=017fbf8520111b28161a7dbdfb252496ae9beed1;hb=acc96b5371d3d51633b9175609b0ce030a3d75db;hp=8d4fec246beb2b2ceb55550452abd56266a2f9e5;hpb=a731fa2dda47dfd29c48dc0b3486837179474c44;p=16.git diff --git a/src/lib/jsmn/example/maptest2.c b/src/lib/jsmn/example/maptest2.c index 8d4fec24..017fbf85 100644 --- a/src/lib/jsmn/example/maptest2.c +++ b/src/lib/jsmn/example/maptest2.c @@ -3,11 +3,30 @@ #include #include #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. - */ + */ + +char *js_sv; + +typedef struct { + //bitmap_t *data; + byte *data; + word tileHeight; + word tileWidth; + unsigned int rows; + unsigned int cols; +} tiles_t; + +typedef struct { + byte *data; + tiles_t *tiles; + int width; + int height; +} 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; +}