From: sparky4 Date: Tue, 26 May 2015 17:31:38 +0000 (-0500) Subject: polished the map reading system~ i made it ... more robust.... now onwards to far... X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=2bab9c38c2b93c18474dd9189f1801eb13508a5e;p=16.git polished the map reading system~ i made it ... more robust.... now onwards to far pointing with map loading~ modified: 0.bat modified: makefile modified: maptest.exe modified: pcxtest.exe modified: scroll.exe modified: src/lib/mapread.c modified: src/lib/mapread.h modified: src/maptest.c modified: test.exe modified: test2.exe --- diff --git a/0.bat b/0.bat index 24cb25c9..067a93aa 100644 --- a/0.bat +++ b/0.bat @@ -1 +1,3 @@ -wmakescroll.exe > ..\w +wmake clean +@rem wmakescroll.exe > scroll.out +wmake maptest.exemaptest.exe > maptest.out diff --git a/makefile b/makefile index 6f049e20..ea954ebc 100644 --- a/makefile +++ b/makefile @@ -2,8 +2,10 @@ #-zk0 = kanji support~ #-zkl = current codepage -OFLAGS=-ot -ox -ob -oh# -or -om -ol -ol+ -FLAGS=-0 -d2 -wo $(OFLAGS) -zkl -zm# -mh# -zdp# -zm# -zp16 -zq +CFLAGS=-zkl# -zm# -mh# -wo -x# -zdp# -zp16 -zq +OFLAGS=-ot -ox -ob -oh -or# -om -ol -ol+ +FLAGS=-0 -d2 $(OFLAGS) $(CFLAGS) +REMOVECOMMAND=del DIRSEP=\ SRC=src$(DIRSEP) SRCLIB=$(SRC)lib$(DIRSEP) @@ -63,5 +65,11 @@ jsmn.obj: $(JSMNLIB)jsmn.h $(JSMNLIB)jsmn.c wcl $(FLAGS) -c $(JSMNLIB)jsmn.c clean: .symbolic - @del *.obj -# @del *.exe + @$(REMOVECOMMAND) *.obj + @$(REMOVECOMMAND) *.OBJ + @$(REMOVECOMMAND) *.out + @$(REMOVECOMMAND) *.OUT + @$(REMOVECOMMAND) makefi~1 + @$(REMOVECOMMAND) __WCL__.LNK + @$(REMOVECOMMAND) *.smp + @$(REMOVECOMMAND) *.SMP diff --git a/maptest.exe b/maptest.exe index 4b25c028..c1406547 100644 Binary files a/maptest.exe and b/maptest.exe differ diff --git a/pcxtest.exe b/pcxtest.exe index 6378e10c..3f18a930 100644 Binary files a/pcxtest.exe and b/pcxtest.exe differ diff --git a/scroll.exe b/scroll.exe index b7545fb1..d1dae04c 100644 Binary files a/scroll.exe and b/scroll.exe differ diff --git a/src/lib/mapread.c b/src/lib/mapread.c index 8f84071a..aa9761ec 100644 --- a/src/lib/mapread.c +++ b/src/lib/mapread.c @@ -1,6 +1,6 @@ #include "src/lib/mapread.h" -static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { +int jsoneq(const char /*far*/ *json, jsmntok_t /*far*/ *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; @@ -9,15 +9,26 @@ 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, int q) { +int dump(const char /*far*/ *js, jsmntok_t /*far*/ *t, size_t count, int indent, char *js_sv, map_t *map, int q) { int i, j, k; bitmap_t bp; + #ifdef DEBUG_JS + if(indent==0) + { + fprintf(stdout, "%s\n", js); + fprintf(stdout, "\n"); + } + #endif + #ifdef DEBUG_DUMPVARS + fprintf(stdout, "indent= [%d] ", indent); + fprintf(stdout, "js_sv= [%s]\n", js_sv); + #endif if (count == 0) { return 0; } /* We may want to do strtol() here to get numeric value */ if (t->type == JSMN_PRIMITIVE) { - if(js_sv == "data") + if(strstr(js_sv, "data")) { /* here we should recursivly call dump again here to skip over the array until we get the facking width of the map. @@ -26,29 +37,39 @@ static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char * FUCK well i am stuck.... wwww */ - map->data[q] = (byte)strtol(js+t->start, (char **)t->end, 10); -// printf("%d[%d]", q, map->data[q]); +//---- map->data[q] = (byte)strtol(js+t->start, (char **)t->end, 10); + map->data[q] = (byte)atoi(js+t->start); + #ifdef DEBUG_MAPDATA + fprintf(stdout, "%d[%d]", q, map->data[q]); + #endif } else - if(js_sv == "height") + if(strstr(js_sv, "height")) { - //map->height = (int)malloc(sizeof(int)); - map->height = (int)strtol(js+t->start, (char **)js+t->end, 10); - //printf("h:[%d]\n", map->height); - }else if(js_sv == "width") +//---- map->height = (unsigned int)strtol(js+t->start, (char **)js+t->end, 10); + map->height = (unsigned int)atoi(js+t->start); + #ifdef DEBUG_MAPVAR + fprintf(stdout, "indent= [%d] ", indent); + fprintf(stdout, "h:[%d]\n", map->height); + #endif + }else if(strstr(js_sv, "width")) { - map->width = (int)strtol(js+t->start, (char **)js+t->end, 10); -// printf("w:[%d]\n", map->width); +//---- map->width = (unsigned int)strtol(js+t->start, (char **)js+t->end, 10); + map->width = (unsigned int)atoi(js+t->start); + #ifdef DEBUG_MAPVAR + fprintf(stdout, "indent= [%d] ", indent); + fprintf(stdout, "w:[%d]\n", map->width); + #endif } return 1; /* We may use strndup() to fetch string value */ } else if (t->type == JSMN_STRING) { - if(jsoneq(js, t, "data") == 0 ) + if(jsoneq(js, t, "data") == 0) { -// printf("[[[[%d|%d]]]]\n", &(t+1)->size, (t+1)->size); -// printf("\n%.*s[xx[%d|%d]xx]\n", (t+1)->end - (t+1)->start, js+(t+1)->start, &(t+1)->size, (t+1)->size); - map->data = malloc(sizeof(byte) * (t+1)->size); - map->tiles = malloc(sizeof(tiles_t)); +// fprintf(stdout, "[[[[%d|%d]]]]\n", &(t+1)->size, (t+1)->size); +// fprintf(stdout, "\n%.*s[xx[%d|%d]xx]\n", (t+1)->end - (t+1)->start, js+(t+1)->start, &(t+1)->size, (t+1)->size); + map->data = /*_f*/malloc(sizeof(byte) * (t+1)->size); + map->tiles = /*_f*/malloc(sizeof(tiles_t)); //map->tiles->data = malloc(sizeof(bitmap_t)); //fix this bp = bitmapLoadPcx("data/ed.pcx"); @@ -60,52 +81,54 @@ static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char * map->tiles->tileWidth = 16; map->tiles->rows = 1; map->tiles->cols = 1; - js_sv="data";//strdup(js+t->start);//, t->end - t->start); + strcpy(js_sv, "data");//strdup(js+t->start);//, t->end - t->start); } else - if (jsoneq(js, t, "height") == 0 && indent==1) + if (jsoneq(js, t, "height") == 0 && indent<=1) { - js_sv="height";//strdup(js+t->start);//, t->end - t->start); - }else if (jsoneq(js, t, "width") == 0 && indent==1) + strcpy(js_sv, "height");//strdup(js+t->start);//, t->end - t->start); + }else if(jsoneq(js, t, "width") == 0 && indent<=1) { - js_sv="width";//strdup(js+t->start);//, t->end - t->start); - }else js_sv=NULL; + strcpy(js_sv, "width");//strdup(js+t->start);//, t->end - t->start); + }else strcpy(js_sv, "\0"); return 1; } else if (t->type == JSMN_OBJECT) { - //printf("\n"); + //fprintf(stdout, "\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, i); - //printf(": "); - j += dump(js, t+1+j, count-j, indent+1, map, i); - //printf("\n"); + //for (k = 0; k < indent; k++) fprintf(stdout, "\t"); + j += dump(js, t+1+j, count-j, indent+1, js_sv, map, i); + //fprintf(stdout, ": "); + j += dump(js, t+1+j, count-j, indent+1, js_sv, map, i); + //fprintf(stdout, "\n"); } return j+1; } else if (t->type == JSMN_ARRAY) { j = 0; - //printf("==\n"); + //fprintf(stdout, "==\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, i); - //printf("==\n"); + //for (k = 0; k < indent-1; k++) fprintf(stdout, "\t"); + //fprintf(stdout, "\t-"); + j += dump(js, t+1+j, count-j, indent+1, js_sv, map, i); + //fprintf(stdout, "==\n"); } return j+1; } return 0; } -static int loadmap(char *mn, map_t *map) +int loadmap(char *mn, map_t *map) { int r; + static int incr=0; int eof_expected = 0; - char *js = NULL; + char /*far*/ *js = NULL; size_t jslen = 0; char buf[BUFSIZ]; + static char js_ss[16]; jsmn_parser p; - jsmntok_t *tok; + jsmntok_t /*far*/ *tok; size_t tokcount = 2; FILE *fh = fopen(mn, "r"); @@ -114,7 +137,7 @@ static int loadmap(char *mn, map_t *map) jsmn_init(&p); /* Allocate some tokens as a start */ - tok = malloc(sizeof(*tok) * tokcount); + tok = /*_f*/malloc(sizeof(*tok) * tokcount); if (tok == NULL) { fprintf(stderr, "malloc(): errno=%d\n", errno); return 3; @@ -136,7 +159,7 @@ static int loadmap(char *mn, map_t *map) } } - js = realloc(js, jslen + r + 1); + js = /*_f*/realloc(js, jslen + r + 1); if (js == NULL) { fprintf(stderr, "realloc(): errno = %d\n", errno); return 3; @@ -149,7 +172,7 @@ again: if (r < 0) { if (r == JSMN_ERROR_NOMEM) { tokcount = tokcount * 2; - tok = realloc(tok, sizeof(*tok) * tokcount); + tok = /*_f*/realloc(tok, sizeof(*tok) * tokcount); if (tok == NULL) { fprintf(stderr, "realloc(): errno=%d\n", errno); return 3; @@ -157,13 +180,13 @@ again: goto again; } } else { - dump(js, tok, p.toknext, 0, map, 0); + dump(js, tok, p.toknext, incr, &js_ss, map, 0); eof_expected = 1; } } - free(js); - free(tok); + /*_f*/free(js); + /*_f*/free(tok); fclose(fh); return 0; diff --git a/src/lib/mapread.h b/src/lib/mapread.h index eaca2566..f0e07cc8 100644 --- a/src/lib/mapread.h +++ b/src/lib/mapread.h @@ -1,16 +1,19 @@ #ifndef _LIBMAPREAD_H_ #define _LIBMAPREAD_H_ +//#include +//#include #include #include - -//#include +#include #include "src/lib/jsmn/jsmn.h" #include "src/lib/modex16.h" #include "src/lib/lib_head.h" -//---- temp! -static char *js_sv; +//#define DEBUG_MAPDATA +#define DEBUG_MAPVAR +//#define DEBUG_DUMPVARS +#define DEBUG_JS typedef struct { bitmap_t *data; @@ -21,14 +24,14 @@ typedef struct { } tiles_t; typedef struct { - byte *data; + byte *data; tiles_t *tiles; - int width; - int height; + unsigned int width; + unsigned int height; } 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, map_t *map, int q); -static int loadmap(char *mn, map_t *map); +int jsoneq(const char /*far*/ *json, jsmntok_t /*far*/ *tok, const char *s); +int dump(const char /*far*/ *js, jsmntok_t /*far*/ *t, size_t count, int indent, char *js_sv, map_t *map, int q); +int loadmap(char *mn, map_t *map); #endif/*_LIBMAPREAD_H_*/ diff --git a/src/maptest.c b/src/maptest.c index 48c022d1..1f7e03fc 100644 --- a/src/maptest.c +++ b/src/maptest.c @@ -1,9 +1,25 @@ -#include "src/lib/mapread.c" - +#include "src/lib/mapread.h" + +#define DUMP +#define DUMP_MAP + void main(int argc, char *argv[]) { map_t map; + short i; + //int lm; loadmap("data/test.map", &map); - fprintf(stderr, "%d\n", map.data[0]); + //fprintf(stdout, "loadmap= %d\n\n", lm); + #ifdef DUMP + fprintf(stdout, "map.width= %d\n", map.width); + fprintf(stdout, "map.height= %d\n", map.height); + #ifdef DUMP_MAP + for(i=0; i<(map.width*map.height); i++) + { + fprintf(stdout, "%04d[%02d]", i, map.data[i]); + if(i && !(i%map.width)) fprintf(stdout, "\n"); + } + #endif + #endif } diff --git a/test.exe b/test.exe index 4faa1ec2..3e26ba26 100644 Binary files a/test.exe and b/test.exe differ diff --git a/test2.exe b/test2.exe index 05bb1367..5475dfeb 100644 Binary files a/test2.exe and b/test2.exe differ