176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Display directory contents
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdlib.h>
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdio.h>
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <console.h>
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <string.h>
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <com32.h>
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <zzjson/zzjson.h>
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdarg.h>
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstatic void myerror(void *ehandle, const char *format, ...) {
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    va_list ap;
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    fprintf(ehandle, "error: ");
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    va_start(ap, format);
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    vfprintf(ehandle, format, ap);
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    va_end(ap);
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    fputc('\n', ehandle);
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint main(int argc, char *argv[])
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman{
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#if 0
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/* this hangs! */
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    openconsole(&dev_rawcon_r, &dev_stdcon_w);
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#else
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	/* this works */
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    openconsole(&dev_rawcon_r, &dev_ansiserial_w);
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    (void) argc;
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    (void) argv;
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    ZZJSON  *tmp;
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    ZZJSON_CONFIG config = { ZZJSON_VERY_STRICT, NULL,
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                             (int(*)(void*)) fgetc,
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                             NULL,
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                             malloc, calloc, free, realloc,
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                             stderr, myerror, stdout,
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                             (int(*)(void*,const char*,...)) fprintf,
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                             (int(*)(int,void*)) fputc };
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    do {
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        ZZJSON *tmp2;
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = zzjson_create_array(&config,
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_number_d(&config, 3.14),
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_number_i(&config, 1234LL),
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_number_i(&config, -4321LL),
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_true(&config),
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_false(&config),
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_null(&config),
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_string(&config, "hello, world"),
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_object(&config,
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                    "picard", zzjson_create_string(&config, "jean-luc"),
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                    "riker",  zzjson_create_string(&config, "william t."),
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                    NULL),
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_object(&config, NULL),
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                zzjson_create_array(&config, NULL),
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                NULL );
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        if (!tmp) {
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman            fprintf(stderr, "error during creation of json tree\n");
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman            break;
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        }
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp2 = zzjson_array_prepend(&config, tmp,
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                    zzjson_create_string(&config, "prepended string"));
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        if (!tmp2) {
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman            fprintf(stderr, "error during prepend\n");
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman            break;
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        }
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = tmp2;
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp2 = zzjson_array_append(&config, tmp,
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                    zzjson_create_string(&config, "appended string (slow)"));
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        if (!tmp2) {
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman            fprintf(stderr, "error during append\n");
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman            break;
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        }
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = tmp2;
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        zzjson_print(&config, tmp);
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    } while(0);
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    if (tmp) zzjson_free(&config, tmp);
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    {
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = zzjson_create_array(&config, NULL); /* empty array */
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = zzjson_array_prepend(&config, tmp, zzjson_create_true(&config));
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        zzjson_print(&config, tmp);
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        zzjson_free(&config, tmp);
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    }
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    {
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = zzjson_create_object(&config, NULL); /* empty object */
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = zzjson_object_prepend(&config, tmp, "hello",
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                                zzjson_create_string(&config, "world"));
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        tmp = zzjson_object_append(&config, tmp, "goodbye",
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman                                zzjson_create_string(&config, "cruel world"));
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        zzjson_print(&config, tmp);
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman        zzjson_free(&config, tmp);
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    }
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    return 0;
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
108