#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
-static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {
+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 &&
+ 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) {
- 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);
+ //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(" ");
- j += dump(js, t+1+j, count-j, indent+1);
- printf(": ");
- j += dump(js, t+1+j, count-j, indent+1);
- printf("\n");
+ //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");
+ //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");
+ //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 main() {
- FILE *fh = fopen("../../../../data/test.map", "r");
+int loadmap(char *mn, map_t *map)
+{
int r;
int eof_expected = 0;
char *js = NULL;
jsmntok_t *tok;
size_t tokcount = 2;
+ FILE *fh = fopen(mn, "r");
+
/* Prepare parser */
jsmn_init(&p);
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);
eof_expected = 1;
}
}
return 0;
}
+
+int main()
+{
+ map_t map;
+ loadmap("../../../../data/test.map", &map);
+ return 0;
+}