Logo Search packages:      
Sourcecode: xconq version File versions  Download package

imf2imf.c

/* Manipulate Xconq image format files.
   Copyright (C) 1995, 1999 Stanley T. Shebs.

Xconq is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.  See the file COPYING.  */

#include "config.h"
#include "misc.h"
#include "lisp.h"
#include "imf.h"

char *indirname;

char *outdirname;

char imdirname[BUFSIZE];

int showprogress = 0;

int explode = 0;

char *xconqlib = "";

char spbuf[BUFSIZE];

char readerrbuf[1000];

static void usage(void);

int
main(int argc, char *argv[])
{
    int i, rslt;
    char *arg;
    FILE *ifp, *ofp, *fp;
    Obj *form;
    int startlineno = 0, endlineno = 0;

    init_lisp();

    if (argc == 1) usage();
    for (i = 1; i < argc; ++i) {
      arg = argv[i];
      if (strcmp(arg, "-i") == 0) {
          if (i + 1 < argc) {
            indirname = argv[i + 1];
            /* Blast the arg because we'll be scanning the args again
               and we want to ignore it then. */
            argv[i] = NULL;
            argv[i + 1] = NULL;
            ++i;
          } else {
            init_error("No input directory following -i");
          }
      } else if (strcmp(arg, "-o") == 0) {
          if (i + 1 < argc) {
            outdirname = argv[i + 1];
            /* Blast the arg because we'll be scanning the args again
               and we want to ignore it then. */
            argv[i] = NULL;
            argv[i + 1] = NULL;
            ++i;
          } else {
            init_error("No output directory following -o");
          }
      } else if (strcmp(arg, "-p") == 0) {
          showprogress = 1;
          argv[i] = NULL;
      } else if (strcmp(arg, "--help") == 0) {
          usage();
          argv[i] = NULL;
      } else if (strcmp(arg, "--explode") == 0) {
          explode = 1;
          argv[i] = NULL;
      }
    }
    /* Open and read an image directory file (and associated files)
       if supplied. */
    if (indirname != NULL) {
      ifp = fopen(indirname, "r");
      if (ifp != NULL) {
          load_image_families(ifp, TRUE, NULL);
      } else {
          run_warning("Couldn't open \"%s\", ignoring", indirname);
      }
    }
    /* Now append contents of random imf files. */
    for (i = 1; i < argc; ++i) {
      if (argv[i] != NULL) {
          rslt = load_imf_file(argv[i], NULL);
          if (!rslt)
            run_warning("Couldn't open \"%s\", ignoring", argv[i]);
      }
    }
    sort_all_images();
    if (outdirname) {
      /* Write the image directory file. */
      sprintf(imdirname, "%s%s", outdirname, "imf.dir");
      ofp = fopen(imdirname, "w");
    } else {
      ofp = NULL;
    }
    for (i = 0; i < numimages; ++i) {
      if (showprogress)
        fprintf(stderr, "; %s\n", images[i]->name);
      if (explode && outdirname) {
          sprintf(spbuf, "%s%s", outdirname, images[i]->name);
          fp = fopen(spbuf, "w");
          if (fp != NULL) {
            write_imf(fp, images[i]);
            fclose(fp);
          } else {
            fprintf(stderr, "could not open \"%s\"\n", spbuf);
          }
      } else {
          write_imf(stdout, images[i]);
      }
    }
    if (ofp != NULL) {
      fclose(ofp);
    }
    return 0;
}

static void
usage(void)
{
    fprintf(stderr,
          "usage: imf2imf [ -i indir ] [ -o outdir ] [ -p ] [ files ... ]\n");
    exit(1);
}

void
close_displays(void)
{
}

int
write_entire_game_state(char *fname)
{
    return 0;
}

/* Need these so we can link in Lisp reader code. */

void
announce_read_progress()
{
}

void  
syntax_error(Obj *x, char *msg)
{
    sprintlisp(readerrbuf, x, BUFSIZE);
    init_warning("syntax error in `%s' - %s", readerrbuf, msg);
}

void
low_init_error(char *str)
{
    fprintf(stderr, "Error: %s.\n", str);
    fflush(stderr);
}

/* A warning just gets displayed, no other action is taken. */

void
low_init_warning(char *str)
{
    fprintf(stdout, "Warning: %s.\n", str);
    fflush(stdout);
}

/* A run error is fatal. */

void
low_run_error(char *str)
{
    fprintf(stderr, "Error: %s.\n", str);
    fflush(stderr);
    exit(1);
}

void
low_run_warning(char *str)
{
    fprintf(stdout, "Warning: %s.\n", str);
    fflush(stdout);
}

/* Fake definitions of unneeded routines called by lisp.c. */

int
keyword_code(char *str)
{
    run_warning("fake keyword_code being called");
    return 0;
}

/* Make the table so keyword lookup works. */

struct a_key {
    char *name;
} keywordtable[] = {

#undef  DEF_KWD
#define DEF_KWD(NAME,code)  { NAME },

#include "keyword.def"

    { NULL }
};

char *
keyword_name(enum keywords k)
{
    return keywordtable[k].name;
}

void
init_predefined_symbols(void)
{
}

int
lazy_bind(Obj *sym)
{
    run_warning("fake lazy_bind being called");
    return FALSE;
}

void
prealloc_debug(void)
{
}

Generated by  Doxygen 1.6.0   Back to index