dmuck0.15-beta/docs/muf/
dmuck0.15-beta/game/
dmuck0.15-beta/game/logs/
dmuck0.15-beta/game/muf/
dmuck0.15-beta/game/muf/text/
#include <stdio.h>
#include <unistd.h>

#define BLOCK_SIZE 1024
#define DBREF_TOKEN '#'

#define BEGIN_MOVE  "***Property list start ***"
#define END_MOVE  "***Property list end ***\n"

void main(int argc, char **argv)
{
   FILE *map, *data, *in, *out;
   long tmp[2];
   long newdbref;
   int state = 0;
   int linecount;
   long backtrack = 0;
   long backtmp;
   char buf[16384];

   if (argc != 3)
   {
      fprintf(stderr, "Usage: convert <infile> <outfile>\n");
      exit(1);
   }

#define CHECKFILE(x)  if ((x) == NULL)    \
                      { fprintf(stderr, "Trouble opening %s\n", buf); \
                        exit(1);}

   sprintf(buf, "%s", argv[2]);
   out = fopen(buf, "w+");
   CHECKFILE(out);

   sprintf(buf, "%s.map", argv[2]);
   map = fopen(buf, "w+");
   CHECKFILE(map);

   sprintf(buf, "%s.dat", argv[2]);
   data = fopen(buf, "w+");
   CHECKFILE(data);

   sprintf(buf, "%s", argv[1]);
   in = fopen(buf, "r");
   CHECKFILE(in);

   tmp[0] = -1;
   tmp[1] = -1;
   fwrite((void *) tmp, sizeof(long), 2, map);

   fprintf(data, "--- Doran dbp file ---\n");

   while (fgets(buf, sizeof(buf), in) != NULL)
   switch(state)
   {
      case 0:
         fprintf(out, "%s", buf);
         if(strncmp(buf, BEGIN_MOVE, strlen(BEGIN_MOVE)) == 0)
         {
            tmp[1] = ftell(data);
            fprintf(data, "%s - %ld\n", BEGIN_MOVE, tmp[0]);
            backtrack = ftell(map);
            fwrite((void *) tmp, sizeof(long), 2, map);
            state = 1;
            linecount = 0;
         }
         if(buf[0] == DBREF_TOKEN)
         {
            newdbref = atol(&(buf[1]));
            if ((tmp[0] + 1) == newdbref)
               tmp[0] = newdbref;
         }
         break;
      case 1:
         if (strcmp(buf, END_MOVE) == 0)
         {
            state = 0;
            fprintf(out, "%s", buf);
            fprintf(data, "%s", END_MOVE);
            if (linecount == 0)
            {
               fseek(data, tmp[1], SEEK_SET);
               backtmp = tmp[0];
               tmp[0] = -1L;
               tmp[1] = 0L;
               fseek(map, backtrack, SEEK_SET);
               fwrite((void *) tmp, sizeof(long), 2, map);
               tmp[0] = backtmp;
            }
         }
         else
         {
            fprintf(data, "%s", buf);
            linecount++;
         }
         break;
      default:
         fprintf(stderr, "Bleugh!\n");
         exit(1);
   }

   fclose(map);
   fclose(data);
   fclose(out);
   fclose(in);
}