int main(int argc, char *argv[]) { scew_parser *parser = NULL; if (init() != 0) { return 1; } if (argc == 2) { if (exists(argv[1])) { parser = scew_parser_create(); scew_parser_ignore_whitespaces(parser, 1); scew_parser_load_file(parser, argv[1]); maptree = scew_parser_tree(parser); } else { allegro_message("Cannot load file: %s", argv[1]); close_program = 1; } } else if (argc == 4) { maptree = new_map(0, MAP_WIN.w / TILE_W, atoi(argv[1]), 1, argv[2]); map_offset = atoi(argv[1]) * TILE_H - EDITOR_WIN_H; } else { /* print usage */ allegro_message ("Usage:\n\"editor.exe <filename>\" to load a file\n \"editor.exe <height_in_tiles> <default_tile_name> <newmapfile>\" to create a new map"); close_program = 1; } while (!close_program) { /* get input */ parse_mouse(); get_grid_item(); if (keypressed()) { parse_keyboard(); } /* blit virtual screen */ clear_to_color(vscreen, DEAD_COLOR); draw_select_lists(vscreen); draw_ctrl_box(vscreen); update_screen(); } if (argc == 2) { write_map(argv[1], maptree); scew_parser_free(parser); } else if (argc == 4) { write_map(argv[3], maptree); scew_tree_free(maptree); } destroy_bitmap(vscreen); cleanup(); return 0; }
VeDeviceElement *veDeviceParseElem(char *spec) { VeDeviceElement *e; VeDeviceEContent *content; char *s, *dup, *name, *type, *ptr; dup = veDupString(spec); /* save spec - may not be alterable... */ ptr = dup; name = veNextLElem(&ptr); if (name && strcmp(name,"elem") == 0) name = veNextLElem(&ptr); /* skip leading "elem" if there */ if (!name) { veError(MODULE,"veDeviceParseElem: missing name in spec: %s", spec); veFree(dup); return NULL; } if (!(type = veNextLElem(&ptr))) { veError(MODULE,"veDeviceParseElem: missing type in spec: %s", spec); veFree(dup); return NULL; /* type */ } /* parse content based upon name */ content = NULL; s = ptr ? ptr : ""; if (strcmp(type,"trigger") == 0) content = parse_trigger(s); else if (strcmp(type,"switch") == 0) content = parse_switch(s); else if (strcmp(type,"valuator") == 0) content = parse_valuator(s); else if (strcmp(type,"vector") == 0) content = parse_vector(s); else if (strcmp(type,"keyboard") == 0) content = parse_keyboard(s); else veError(MODULE,"veDeviceParseElem: unknown elem type %s in spec: %s", type, spec); if (!content) { veFree(dup); return NULL; /* parsing of content failed - don't continue */ } e = veAllocObj(VeDeviceElement); e->name = veDupString(name); e->content = content; return e; }