From: sparky4 Date: Mon, 23 Mar 2015 19:02:34 +0000 (-0500) Subject: wwww working on reading the main map data of the bg layer~ wwww X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=cb813c605876f11ce54bee2b44a33e97b00dcf16;p=16.git wwww working on reading the main map data of the bg layer~ wwww modified: pcxtest.exe modified: scroll.exe deleted: src/lib/jsmn/example/JSONDUMP.EXE deleted: src/lib/jsmn/example/MAPTEST.EXE deleted: src/lib/jsmn/example/MAPTEST2.EXE deleted: src/lib/jsmn/example/SIMPLE.EXE deleted: src/lib/jsmn/example/jsondump deleted: src/lib/jsmn/example/jsondump.c deleted: src/lib/jsmn/example/maptest deleted: src/lib/jsmn/example/maptest.c deleted: src/lib/jsmn/example/maptest2 deleted: src/lib/jsmn/example/maptest2.c deleted: src/lib/jsmn/example/simple.c new file: src/lib/jsmn/jsmn.7z modified: src/lib/mapread.c modified: src/lib/mapread.h --- diff --git a/pcxtest.exe b/pcxtest.exe index 3ddfde92..98fa93af 100644 Binary files a/pcxtest.exe and b/pcxtest.exe differ diff --git a/scroll.exe b/scroll.exe index fd02ce14..77635411 100644 Binary files a/scroll.exe and b/scroll.exe differ diff --git a/src/lib/jsmn/example/JSONDUMP.EXE b/src/lib/jsmn/example/JSONDUMP.EXE deleted file mode 100644 index fc4c97a4..00000000 Binary files a/src/lib/jsmn/example/JSONDUMP.EXE and /dev/null differ diff --git a/src/lib/jsmn/example/MAPTEST.EXE b/src/lib/jsmn/example/MAPTEST.EXE deleted file mode 100644 index f3a71677..00000000 Binary files a/src/lib/jsmn/example/MAPTEST.EXE and /dev/null differ diff --git a/src/lib/jsmn/example/MAPTEST2.EXE b/src/lib/jsmn/example/MAPTEST2.EXE deleted file mode 100644 index df045463..00000000 Binary files a/src/lib/jsmn/example/MAPTEST2.EXE and /dev/null differ diff --git a/src/lib/jsmn/example/SIMPLE.EXE b/src/lib/jsmn/example/SIMPLE.EXE deleted file mode 100644 index 77ee0f40..00000000 Binary files a/src/lib/jsmn/example/SIMPLE.EXE and /dev/null differ diff --git a/src/lib/jsmn/example/jsondump b/src/lib/jsmn/example/jsondump deleted file mode 100644 index bf6541f5..00000000 Binary files a/src/lib/jsmn/example/jsondump and /dev/null differ diff --git a/src/lib/jsmn/example/jsondump.c b/src/lib/jsmn/example/jsondump.c deleted file mode 100644 index 04d9f5ae..00000000 --- a/src/lib/jsmn/example/jsondump.c +++ /dev/null @@ -1,112 +0,0 @@ -#include -#include -#include -#include -#include "../jsmn.c" - -/* - * 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. - */ - -static int dump(const char *js, jsmntok_t *t, size_t count, int indent) { - int i, j, k; - if (count == 0) { - return 0; - } - 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 r; - int eof_expected = 0; - char *js = NULL; - size_t jslen = 0; - char buf[BUFSIZ]; - - jsmn_parser p; - jsmntok_t *tok; - size_t tokcount = 2; - - /* Prepare parser */ - jsmn_init(&p); - - /* Allocate some tokens as a start */ - tok = malloc(sizeof(*tok) * tokcount); - if (tok == NULL) { - fprintf(stderr, "malloc(): errno=%d\n", errno); - return 3; - } - - for (;;) { - /* Read another chunk */ - r = fread(buf, 1, sizeof(buf), stdin); - 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; - } - } - - 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; - } - } else { - dump(js, tok, p.toknext, 0); - eof_expected = 1; - } - } - - return 0; -} diff --git a/src/lib/jsmn/example/maptest b/src/lib/jsmn/example/maptest deleted file mode 100644 index a72fa7f9..00000000 Binary files a/src/lib/jsmn/example/maptest and /dev/null differ diff --git a/src/lib/jsmn/example/maptest.c b/src/lib/jsmn/example/maptest.c deleted file mode 100644 index 7cceabb8..00000000 --- a/src/lib/jsmn/example/maptest.c +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include -//#include -#include "../jsmn.c" - -//#define BUFSIZ 2048 - -/* - * A small example of jsmn parsing when JSON structure is known and number of - * tokens is predictable. - */ - -/*char *json_string = - "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n " - "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}";*/ - -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) { - return 0; - } - return -1; -} - -int main() { - int i; - int r; - size_t z; - jsmn_parser p; - jsmntok_t t[(BUFSIZ/sizeof(jsmntok_t))*2]; /* We expect no more than 128 tokens */ - FILE *fh = fopen("../../../../data/test.map", "r"); - char *json_string = malloc(filesize(fh)); - - 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", 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); - json_string[z] = '\0'; - // we can now close the file - //printf("]%s[\n", json_s); - //json_string=json_s; - //printf("[[%s]]\n", json_string); - - jsmn_init(&p); - r = jsmn_parse(&p, json_string, strlen(json_string), t, sizeof(t)/sizeof(t[0])); - //t[(BUFSIZ/sizeof(jsmntok_t))*2+1].type=JSMN_OBJECT; - printf("[\n%s\n]", json_string); - printf("[[%d]]\n",r); - 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; - } - - /* 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 (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); - } - i += t[i+1].size + 1; - } else { - /*printf("Unexpected key: %.*s\n", t[i].end-t[i].start, - json_string + t[i].start);*/ - } - } - - //free(json_string); - } - if (fh != NULL) fclose(fh); - ////} - return 0; -} diff --git a/src/lib/jsmn/example/maptest2 b/src/lib/jsmn/example/maptest2 deleted file mode 100644 index abc5640f..00000000 Binary files a/src/lib/jsmn/example/maptest2 and /dev/null differ diff --git a/src/lib/jsmn/example/maptest2.c b/src/lib/jsmn/example/maptest2.c deleted file mode 100644 index 017fbf85..00000000 --- a/src/lib/jsmn/example/maptest2.c +++ /dev/null @@ -1,170 +0,0 @@ -#include -#include -#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 && - 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) { - 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, "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"); - 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, 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"); - 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, map); - //printf("==\n"); - } - return j+1; - } - return 0; -} - -int loadmap(char *mn, map_t *map) -{ - int r; - int eof_expected = 0; - char *js = NULL; - size_t jslen = 0; - char buf[BUFSIZ]; - - jsmn_parser p; - jsmntok_t *tok; - size_t tokcount = 2; - - FILE *fh = fopen(mn, "r"); - - /* Prepare parser */ - jsmn_init(&p); - - /* Allocate some tokens as a start */ - tok = malloc(sizeof(*tok) * tokcount); - if (tok == NULL) { - fprintf(stderr, "malloc(): errno=%d\n", errno); - return 3; - } - - 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; - } - } - - 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; - } - } else { - 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; -} diff --git a/src/lib/jsmn/example/simple.c b/src/lib/jsmn/example/simple.c deleted file mode 100644 index ca2902b5..00000000 --- a/src/lib/jsmn/example/simple.c +++ /dev/null @@ -1,75 +0,0 @@ -#include -#include -#include "../jsmn.c" - -/* - * A small example of jsmn parsing when JSON structure is known and number of - * tokens is predictable. - */ - -const char *JSON_STRING = - "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n " - "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}"; - -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; -} - -int main() { - int i; - int r; - jsmn_parser p; - jsmntok_t t[128]; /* We expect no more than 128 tokens */ - - jsmn_init(&p); - r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), t, sizeof(t)/sizeof(t[0])); - 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; - } - - /* Loop over all keys of the root object */ - for (i = 1; i < r; i++) { - if (jsoneq(JSON_STRING, &t[i], "user") == 0) { - /* We may use strndup() to fetch string value */ - printf("- User: %.*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], "groups") == 0) { - int j; - printf("- Groups:\n"); - if (t[i+1].type != JSMN_ARRAY) { - continue; /* We expect groups to be an array of strings */ - } - 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); - } - i += t[i+1].size + 1; - } else { - printf("Unexpected key: %.*s\n", t[i].end-t[i].start, - JSON_STRING + t[i].start); - } - } - return 0; -} diff --git a/src/lib/jsmn/jsmn.7z b/src/lib/jsmn/jsmn.7z new file mode 100644 index 00000000..58ba68e0 Binary files /dev/null and b/src/lib/jsmn/jsmn.7z differ diff --git a/src/lib/mapread.c b/src/lib/mapread.c index 90c13a7a..5cd4f1cf 100644 --- a/src/lib/mapread.c +++ b/src/lib/mapread.c @@ -9,7 +9,7 @@ static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { } //this function is quite messy ^^; sorry! it is a quick and dirty fix~ -static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map, short q) { +static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map, int q) { int i, j, k; if (count == 0) { return 0; @@ -18,9 +18,11 @@ static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char * if (t->type == JSMN_PRIMITIVE) { if(js_sv == "data") { + //bgdata[q] = (byte)strtol(js+t->start, (char **)js+t->end, 10); + if(strtol(js+t->start, (char **)js+t->end, 10)==0){ fprintf(stderr, "FACK! %d\n", errno); exit(-1); } map->tiles->data->data[q] = (byte)strtol(js+t->start, (char **)js+t->end, 10); - printf("[%d]", map->tiles->data->data[q]); - q++; + printf("%d[%d]", q, map->tiles->data->data[q]); + //printf("%d[%d]", q, bgdata[q]); }else if(js_sv == "height") { map->height = (int)strtol(js+t->start, (char **)js+t->end, 10); @@ -34,7 +36,7 @@ static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char * /* 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, "data") == 0 && indent==2) + if (jsoneq(js, t, "data") == 0) { js_sv="data";//strdup(js+t->start);//, t->end - t->start); //printf("%s\n", js_sv); @@ -53,9 +55,9 @@ static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char * 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, map, q); + j += dump(js, t+1+j, count-j, indent+1, map, i); //printf(": "); - j += dump(js, t+1+j, count-j, indent+1, map, q); + j += dump(js, t+1+j, count-j, indent+1, map, i); //printf("\n"); } return j+1; @@ -63,9 +65,10 @@ static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char * j = 0; //printf("==\n"); for (i = 0; i < t->size; i++) { + //if(bgdata==NULL) bgdata=malloc(sizeof(char)*t->size); //for (k = 0; k < indent-1; k++) printf("\t"); //printf("\t-"); - j += dump(js, t+1+j, count-j, indent+1, map, q); + j += dump(js, t+1+j, count-j, indent+1, map, i); //printf("==\n"); } return j+1; diff --git a/src/lib/mapread.h b/src/lib/mapread.h index fcc773a7..26682626 100644 --- a/src/lib/mapread.h +++ b/src/lib/mapread.h @@ -7,6 +7,7 @@ #include "src/lib/modex16.h" char *js_sv; +byte bgdata[4096]; typedef struct { bitmap_t *data; @@ -24,7 +25,7 @@ typedef struct { } map_t; static int jsoneq(const char *json, jsmntok_t *tok, const char *s); -static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map, short q); +static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map, int q); int loadmap(char *mn, map_t *map); #endif/*_LIBMAPREAD_H_*/