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 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, *from;
   long tmp[2];
   long newdbref;
   int state = 0;
   int linecount;
   long backtrack = 0;
   long backtmp;
   char buf[16384];

   if (argc != 3)
   {
      fprintf(stderr, "Usage: unconvert <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[1]);
   map = fopen(buf, "r+");
   CHECKFILE(map);

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

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

   fread((void *) tmp, sizeof(long), 2, map);

   from = in;

   while (fgets(buf, sizeof(buf), from) != NULL)
   switch(state)
   {
      case 0:
         fprintf(out, "%s", buf);
         if(strncmp(buf, BEGIN_MOVE, strlen(BEGIN_MOVE)) == 0)
         {
            tmp[1] = fseek(map, sizeof(long) * 2 * (tmp[0] + 1), SEEK_SET);
				fread((void *) tmp, sizeof(long), 2, map);

				if (tmp[0] != -1L)
				{
				   fseek(data, tmp[1], SEEK_SET);
					from = data;
					state = 1;
					fgets(buf, sizeof(buf), from); /* chow 1 line */
				}
				else
				{
					tmp[0] = newdbref;
				}
         }
         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;
				from = in;
         }
         else
         {
            fprintf(out, "%s", buf);
         }
         break;
      default:
         fprintf(stderr, "Bleugh!\n");
         exit(1);
   }

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