home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / twbfcvt.zip / cvt.c next >
C/C++ Source or Header  |  2000-01-29  |  4KB  |  182 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define MAX_WARPS 6
  6. #define _TWBSIG_1_ 0xADDE3412
  7. #define _TWBSIG_2_ 0x2143CEFA
  8. #define _TWVER_MAJOR_ 0
  9. #define _TWVER_MINOR_ 14
  10. #define TRUE 1
  11. #define FALSE 0
  12.  
  13. typedef struct
  14. {
  15.     unsigned long sig1;
  16.     unsigned long sig2;
  17.     unsigned long reserved;
  18.     unsigned char majorVer;
  19.     unsigned char minorVer;
  20.     unsigned short sectorCount;
  21. } TWBinaryHeader;
  22.  
  23. typedef struct
  24. {
  25.     unsigned char explored;
  26.     unsigned char reserved[3];
  27.     unsigned short outWarps[MAX_WARPS];
  28. } TWBinarySectorData;
  29.  
  30. typedef struct
  31. {
  32.     unsigned short outWarps[MAX_WARPS];
  33.     unsigned long explored;
  34. } TWOldBinaryData;
  35.  
  36. void Usage(void);
  37. void FileError(char* fn);
  38. void ReadError(char* fn);
  39. void WriteError(char *fn);
  40. void GarbageData(char *fn);
  41. void NewFormat(char* fn);
  42. int GarbageCheck(TWOldBinaryData *od);
  43.  
  44. int main(int argc, char *argv[])
  45. {
  46.     char iname[256], oname[256];
  47.     FILE *ifile, *ofile;
  48.     unsigned long fi=1, scount=0;
  49.     TWOldBinaryData od;
  50.     TWBinarySectorData bd;
  51.     TWBinaryHeader bh;
  52.  
  53.     if (argc!=3)
  54.         Usage();
  55.  
  56.     strncpy(iname, argv[1], sizeof(iname)-1);
  57.     strncpy(oname, argv[2], sizeof(oname)-1);
  58.  
  59.     ifile=fopen(iname, "rb");
  60.     if (!ifile)
  61.         FileError(iname);
  62.  
  63.     ofile=fopen(oname, "wb");
  64.     if (!ofile)
  65.         FileError(oname);
  66.  
  67.     printf("\nSectors converted:     0");
  68.     fflush(stdout);
  69.  
  70.     do
  71.         {
  72.         if (fread(&od, sizeof(od), 1, ifile)!=1)
  73.             {
  74.             if (!feof(ifile))
  75.                 ReadError(iname);
  76.             break;
  77.             }
  78.         if (fi)
  79.             {
  80.             fi=0;
  81.             memcpy(&bh, &od, sizeof(bh));
  82.             if (bh.sig1==_TWBSIG_1_ && bh.sig2==_TWBSIG_2_)
  83.                 NewFormat(iname);
  84.             memset(&bh, 0, sizeof(bh));
  85.             if (fwrite(&bh, sizeof(bh), 1, ofile)!=1)
  86.                 WriteError(oname);
  87.             }
  88.         if (GarbageCheck(&od))
  89.             GarbageData(iname);
  90.         memset(&bd, 0, sizeof(bd));
  91.         memcpy(&bd.outWarps, &od.outWarps, sizeof(unsigned short)*6);
  92.         bd.explored=(unsigned char)od.explored;
  93.         if (fwrite(&bd, sizeof(bd), 1, ofile)!=1)
  94.             WriteError(oname);
  95.         scount++;
  96.         if (scount%10==0)
  97.             {
  98.             printf("\b\b\b\b\b%5u", scount);
  99.             fflush(stdout);
  100.             }
  101.         } while (!feof(ifile));
  102.  
  103.     printf("\b\b\b\b\b%5u\n", scount);
  104.     fflush(stdout);
  105.  
  106.     fclose(ifile);
  107.     fseek(ofile, 0, SEEK_SET);
  108.  
  109.     bh.sig1=_TWBSIG_1_;
  110.     bh.sig2=_TWBSIG_2_;
  111.     bh.majorVer=(unsigned char)_TWVER_MAJOR_;
  112.     bh.minorVer=(unsigned char)_TWVER_MINOR_;
  113.     bh.sectorCount=(unsigned short)scount;
  114.  
  115.     if (fwrite(&bh, sizeof(bh), 1, ofile)!=1)
  116.         WriteError(oname);
  117.  
  118.     return 0;
  119. }
  120.  
  121. void Usage(void)
  122. {
  123.     printf("\nUsage: cvt.exe <oldname> <newname>\n");
  124.     printf("\noldname - filename of old database\n");
  125.     printf("newname - filename of new database\n");
  126.     exit(1);
  127. }
  128.  
  129. void FileError(char *fn)
  130. {
  131.     printf("\nUnable to open file %s\n", fn);
  132.     exit(1);
  133. }
  134.  
  135. void ReadError(char *fn)
  136. {
  137.     printf("\nError reading file %s\n", fn);
  138.     exit(1);
  139. }
  140.  
  141. void WriteError(char *fn)
  142. {
  143.     printf("\nError writing file %s\n", fn);
  144.     exit(1);
  145. }
  146.  
  147. void GarbageData(char *fn)
  148. {
  149.     printf("\nInput file (%s) contains invalid data.\n", fn);
  150.     exit(1);
  151. }
  152.  
  153. void NewFormat(char *fn)
  154. {
  155.     printf("\nSpecified input file (%s) already in new format.\n", fn);
  156.     exit(1);
  157. }
  158.  
  159. int GarbageCheck(TWOldBinaryData *od)
  160. {
  161.     int i, zeroSet=FALSE;
  162.  
  163.     if (od->explored!=FALSE && od->explored!=TRUE)
  164.         return TRUE;
  165.  
  166.     for (i=0; i<MAX_WARPS; i++)
  167.         {
  168.         if (od->outWarps[i]==0)
  169.             {
  170.             if (!zeroSet)
  171.                 zeroSet=TRUE;
  172.             }
  173.         else
  174.             {
  175.             if (zeroSet)
  176.                 return FALSE;
  177.             }
  178.         }
  179.  
  180.     return FALSE;
  181. }
  182.