+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#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;
-}
+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-//#include <errno.h>
-#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)\r
-{\r
- long int save_pos, size_of_file;\r
-\r
- save_pos = ftell(fp);\r
- fseek(fp, 0L, SEEK_END);\r
- size_of_file = ftell(fp);\r
- fseek(fp, save_pos, SEEK_SET);\r
- return(size_of_file);\r
-}
-
-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;
-}
+++ /dev/null
-#include <stdio.h>
-#include <stdlib.h>
-#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
-
-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) {
- 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;
-}
+++ /dev/null
-#include <stdio.h>
-#include <string.h>
-#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;
-}
}
//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;
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);
/* 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);
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;
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;
#include "src/lib/modex16.h"
char *js_sv;
+byte bgdata[4096];
typedef struct {\r
bitmap_t *data;
} 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_*/