From: sparky4 Date: Mon, 23 Mar 2015 02:14:36 +0000 (-0500) Subject: modified: data/test0.map X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=7b33197c9fe3cbd41356ccf6dceb5cb7ae5f6ff2;p=16.git modified: data/test0.map modified: src/lib/jsmn/example/MAPTEST.EXE modified: src/lib/jsmn/example/MAPTEST2.EXE modified: src/lib/jsmn/example/maptest modified: src/lib/jsmn/example/maptest.c modified: src/lib/jsmn/example/maptest2.c --- diff --git a/data/test0.map b/data/test0.map index 56eb3dd5..e5dce468 100644 --- a/data/test0.map +++ b/data/test0.map @@ -1,4 +1,41 @@ { "backgroundcolor":"#000000", "height":30, + "layers":[ + { + "data":[30, 30, 30, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 30, 30, 30, 30, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1], + "height":30, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":40, + "x":0, + "y":0 + }], + "orientation":"orthogonal", + "properties": + { + + }, + "renderorder":"right-down", + "tileheight":16, + "tilesets":[ + { + "firstgid":1, + "image":"bakapi.png", + "imageheight":240, + "imagewidth":320, + "margin":0, + "name":"wwww", + "properties": + { + + }, + "spacing":0, + "tileheight":16, + "tilewidth":16 + }], + "tilewidth":16, + "version":1, "width":40 } \ No newline at end of file diff --git a/src/lib/jsmn/example/MAPTEST.EXE b/src/lib/jsmn/example/MAPTEST.EXE index db505eb8..4b602863 100644 Binary files a/src/lib/jsmn/example/MAPTEST.EXE and b/src/lib/jsmn/example/MAPTEST.EXE differ diff --git a/src/lib/jsmn/example/MAPTEST2.EXE b/src/lib/jsmn/example/MAPTEST2.EXE index 55724432..bb07fc7f 100644 Binary files a/src/lib/jsmn/example/MAPTEST2.EXE and b/src/lib/jsmn/example/MAPTEST2.EXE differ diff --git a/src/lib/jsmn/example/maptest b/src/lib/jsmn/example/maptest index cccbd597..4825f5a1 100644 Binary files a/src/lib/jsmn/example/maptest and b/src/lib/jsmn/example/maptest differ diff --git a/src/lib/jsmn/example/maptest.c b/src/lib/jsmn/example/maptest.c index 1a3416cc..597b0001 100644 --- a/src/lib/jsmn/example/maptest.c +++ b/src/lib/jsmn/example/maptest.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "../jsmn.c" /* @@ -36,17 +37,28 @@ int main() { int r; size_t z; jsmn_parser p; - jsmntok_t t[128]; /* We expect no more than 128 tokens */ + jsmntok_t t[(BUFSIZ/sizeof(jsmntok_t))*2]; /* We expect no more than 128 tokens */ FILE *fh = fopen("../../../../data/test0.map", "r"); char *json_string = malloc(filesize(fh)); //memset(json_string, 0, sizeof(*json_string)); - memset(&p, 0, sizeof(p)); + //memset(&p, 0, sizeof(p)); + + //printf("\n[[[[%d]]]]\n\n", BUFSIZ); if(fh != NULL) { + /*t = malloc(2048); + if (t == NULL) { + fprintf(stderr, "malloc(): errno=%d\n", errno); + return 3; + }*/ + //printf("\n%d\n\n", sizeof(*t)); + printf("\n%d", sizeof(t)); + printf("\n%d\n\n", sizeof(t)/sizeof(t[0])); z = fread(json_string, 1, filesize(fh), fh); + //char json_s[2048]; fclose(fh); fh = NULL; - printf("[[%d]]\n", z); + printf("[%d]\n", z); json_string[z] = '\0'; // we can now close the file //printf("]%s[\n", json_s); @@ -56,6 +68,7 @@ int main() { jsmn_init(&p); r = jsmn_parse(&p, json_string, strlen(json_string), t, sizeof(t)/sizeof(t[0])); printf("[\n%s\n]", json_string); + printf("[[%d]]\n",r); if (r < 0) { printf("Failed to parse JSON: %d\n", r); return 1; @@ -96,8 +109,8 @@ int main() { } i += t[i+1].size + 1; } else { - printf("Unexpected key: %.*s\n", t[i].end-t[i].start, - json_string + t[i].start); + /*printf("Unexpected key: %.*s\n", t[i].end-t[i].start, + json_string + t[i].start);*/ } } diff --git a/src/lib/jsmn/example/maptest2.c b/src/lib/jsmn/example/maptest2.c index ae663a2f..6e18a40d 100644 --- a/src/lib/jsmn/example/maptest2.c +++ b/src/lib/jsmn/example/maptest2.c @@ -1,110 +1,115 @@ #include -#include #include +#include +#include #include "../jsmn.c" /* - * A small example of jsmn parsing when JSON structure is known and number of - * tokens is predictable. + * 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 *JSON_S = - "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n " - "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}";*/ - -char *JSON_STRING; -char JSON_S[BUFSIZ]; - -long int filesize(FILE *fp) -{ - long int save_pos, size_of_file; - - save_pos = ftell(fp); - fseek(fp, 0L, SEEK_END); - size_of_file = ftell(fp); - fseek(fp, save_pos, SEEK_SET); - return(size_of_file); -} - -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) { +static int dump(const char *js, jsmntok_t *t, size_t count, int indent) { + int i, j, k; + if (count == 0) { return 0; } - return -1; + if (t->type == JSMN_PRIMITIVE) { + printf("%.*s", t->end - t->start, js+t->start); + return 1; + } else if (t->type == JSMN_STRING) { + printf("'%.*s'", t->end - t->start, js+t->start); + return 1; + } else if (t->type == JSMN_OBJECT) { + 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"); + } + return j+1; + } else if (t->type == JSMN_ARRAY) { + j = 0; + 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"); + } + return j+1; + } + return 0; } int main() { - int i; int r; + int eof_expected = 0; + char *js = NULL; + size_t jslen = 0; + char buf[BUFSIZ]; + jsmn_parser p; - FILE *fh = fopen("../../../../data/test.map", "r"); - jsmntok_t *t; /* We expect no more than 128 tokens */ - size_t tokcount = 2048; - /* Allocate some tokens as a start */ - t = malloc(sizeof(*t) * tokcount); - //memset(JSON_S, 0, sizeof(JSON_S)); + jsmntok_t *tok; + size_t tokcount = 2; - if(fh != NULL) - { - fread(JSON_S, 1, filesize(fh), fh); - // we can now close the file - //printf("]%s[\n", JSON_S); - JSON_STRING=JSON_S; - //printf("[[%s]]\n", JSON_STRING); + FILE *fh = fopen("../../../../data/test.map", "r"); + /* Prepare parser */ jsmn_init(&p); - r = jsmn_parse(&p, JSON_STRING, filesize(fh), t, sizeof(t)/sizeof(t[0])); - fclose(fh); fh = NULL; - printf("%s", JSON_STRING); - if (r < 0) { - printf("Failed to parse JSON: %d\n", r); - return 1; - } - /* Assume the top-level element is an object */ - if (r < 1 || t[0].type != JSMN_OBJECT) { - printf("Object expected\n"); - return 1; + /* Allocate some tokens as a start */ + tok = malloc(sizeof(*tok) * tokcount); + if (tok == NULL) { + fprintf(stderr, "malloc(): errno=%d\n", errno); + return 3; } - /* Loop over all keys of the root object */ - for (i = 1; i < r; i++) { - if (jsoneq(JSON_STRING, &t[i], "image") == 0) { - /* We may use strndup() to fetch string value */ - printf("- image: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); - i++; - } else if (jsoneq(JSON_STRING, &t[i], "admin") == 0) { - /* We may additionally check if the value is either "true" or "false" */ - printf("- Admin: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); - i++; - } else if (jsoneq(JSON_STRING, &t[i], "uid") == 0) { - /* We may want to do strtol() here to get numeric value */ - printf("- UID: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); - i++; - } else if (jsoneq(JSON_STRING, &t[i], "tilesets") == 0) { - int j; - printf("- tilesets:\n"); - if (t[i+1].type != JSMN_ARRAY) { - continue; /* We expect groups to be an array of strings */ + for (;;) { + /* Read another chunk */ + r = fread(buf, 1, sizeof(buf), fh); + if (r < 0) { + fprintf(stderr, "fread(): %d, errno=%d\n", r, errno); + return 1; + } + if (r == 0) { + if (eof_expected != 0) { + return 0; + } else { + fprintf(stderr, "fread(): unexpected EOF\n"); + return 2; } - for (j = 0; j < t[i+1].size; j++) { - jsmntok_t *g = &t[i+j+2]; - printf(" * %.*s\n", g->end - g->start, JSON_STRING + g->start); + } + + js = realloc(js, jslen + r + 1); + if (js == NULL) { + fprintf(stderr, "realloc(): errno=%d\n", errno); + return 3; + } + strncpy(js + jslen, buf, r); + jslen = jslen + r; + +again: + r = jsmn_parse(&p, js, jslen, tok, tokcount); + if (r < 0) { + if (r == JSMN_ERROR_NOMEM) { + tokcount = tokcount * 2; + tok = realloc(tok, sizeof(*tok) * tokcount); + if (tok == NULL) { + fprintf(stderr, "realloc(): errno=%d\n", errno); + return 3; + } + goto again; } - i += t[i+1].size + 1; } else { - printf("Unexpected key: %.*s\n", t[i].end-t[i].start, - JSON_STRING + t[i].start); + dump(js, tok, p.toknext, 0); + printf("[\n%d\n]", jslen); + eof_expected = 1; } } - //free(JSON_STRING); - } - if (fh != NULL) fclose(fh); - ////} return 0; }