/* * ----------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. Lukas Niederbremer. * ----------------------------------------------------------------------------- */ #include #include #include #include #include "endianness.h" #include "nbt.h" static int opt_dupe = 0; void dump_nbt(char *filename); int main(int argc, char **argv) { int c; static int opt_dump = 0; //opterr = 0; for (;;) { static struct option long_options[] = { {"dump", no_argument, &opt_dump, 1}, {"version", no_argument, NULL, 'v'}, {"copy", no_argument, &opt_dupe, 1}, {NULL, no_argument, NULL, 0} }; int option_index = 0; c = getopt_long(argc, argv, "dv", long_options, &option_index); if (c == -1) break; switch (c) { case 0: if (long_options[option_index].flag != 0) break; break; case 'v': printf("nbttool 1.0 (%s, %s)\n", __DATE__, __TIME__); return EXIT_SUCCESS; case '?': break; } } if (optind < argc) { /* There is more in argv */ if (opt_dump) dump_nbt(argv[optind]); } return 0; } void dump_nbt(char *filename) { int i; nbt_file *nbt = NULL; nbt_tag *ba; nbt_tag *p; nbt_list *l; /* Enough parameters given? */ if (nbt_init(&nbt) != NBT_OK) { fprintf(stderr, "NBT_Init(): Failure initializing\n"); return; } /* Try parsing */ if (nbt_parse(nbt, filename) != NBT_OK) { fprintf(stderr, "NBT_Parse(): Error\n"); return; } ba = nbt_find_tag_by_name("listTest (long)", nbt->root); if (ba != NULL) { l = nbt_cast_list(ba); int64_t **c = (int64_t **)l->content; for (i = 0; i < l->length; ++i) { if (*(c[i]) == 13) { int64_t *testval = malloc(sizeof(int64_t)); *testval = 50; //nbt_remove_list_item(c[i], ba); nbt_add_list_item(testval, ba); break; } } nbt_print_tag(ba, 0); } nbt_print_tag(nbt->root, 0); nbt_free(nbt); return; }