Example #1
0
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;
}
Example #2
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;
}