home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / C / TGE129D / PCX2RAW.CPP < prev    next >
C/C++ Source or Header  |  1993-08-27  |  3KB  |  144 lines

  1. #include <alloc.h>
  2. #include <dir.h>
  3. #include <process.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include "types.h"
  7.  
  8. #define GENERAL_ERR    0
  9. #define OK        1
  10. #define OPEN_ERR    2
  11. #define SEEK_ERR    3
  12. #define READ_ERR    4
  13. #define WRITE_ERR    5
  14. #define MEM_ERR        6
  15.  
  16. int openPcxFile(char *filename, int *wide, int *deep, uchar *palette);
  17. void closePcxFile(void);
  18. int translatePcxFile(FILE *outFile, void *lineBuf);
  19. void assumeExtension(char *filename, char *extension);
  20. void forceExtension(char *filename, char *extension);
  21.  
  22. uchar palette[768];
  23.  
  24.  
  25. void main(int argc, char *argv[])
  26. {
  27.   char filename[80];
  28.   uchar *lineBuf;
  29.   int wide, deep;
  30.   FILE *outFile;
  31.  
  32.  
  33.   //*** Print blurb
  34.   printf("PCX2RAW 1.29ßD  Copyright (c) 1993 by Matthew Hildebrand\n\n");
  35.  
  36.   //*** Ensure enough parameters
  37.   if (argc < 2)
  38.   {
  39.     printf("    Usage:  PCX2RAW pcxfile[.pcx]\n\n"
  40.            "    Output:    pcxfile.raw -- bitmap compatible with TGE\n"
  41.            "        pcxfile.pal -- palette compatible with TGE\n\n"
  42.            "    Note:    PCX2RAW will only convert 256-colour PCX files.\n\n");
  43.     exit(1);
  44.   }
  45.  
  46.   //*** Do the job
  47.   strcpy(filename, argv[1]);
  48.   assumeExtension(filename, ".pcx");
  49.   strupr(filename);
  50.  
  51.   //*** Open the PCX file
  52.   if (openPcxFile(filename, &wide, &deep, palette) != OK)
  53.   {
  54.     printf("Error processing file %s\n\n", filename);
  55.     exit(1);
  56.   }
  57.  
  58.   //*** Allocate a line buffer
  59.   if ((lineBuf=(uchar*)malloc(wide)) == NULL)
  60.   {
  61.     closePcxFile();            // close the PCX file
  62.     printf("Out of memory\n\n");
  63.     exit(1);
  64.   }
  65.  
  66.   //*** Create the output RAW file
  67.   forceExtension(filename, ".RAW");
  68.   if ((outFile=fopen(filename,"wb")) == NULL)
  69.   {
  70.     closePcxFile();
  71.     printf("Error creating image file %s\n\n", filename);
  72.     exit(1);
  73.   }
  74.  
  75.   //*** Translate the image data
  76.   printf("Converting image data...");
  77.   fwrite(&wide, 2, 1, outFile);
  78.   fwrite(&deep, 2, 1, outFile);
  79.   if (translatePcxFile(outFile, lineBuf) != OK)
  80.   {
  81.     printf("\n\nError translating formats\n\n");
  82.     exit(1);
  83.   }
  84.  
  85.   //*** Clean up
  86.   free(lineBuf);
  87.   closePcxFile();
  88.   fclose(outFile);
  89.   printf(" Done.\n");
  90.  
  91.   //*** Open palette data file
  92.   forceExtension(filename, ".PAL");
  93.   if ((outFile=fopen(filename,"wb")) == NULL)
  94.   {
  95.     printf("Error creating palette file %s\n\n", filename);
  96.     exit(1);
  97.   }
  98.  
  99.   //*** Write palette data
  100.   if (!fwrite(palette, 768, 1, outFile))
  101.   {
  102.     printf("Error writing palette file %s\n\n", filename);
  103.     fclose(outFile);
  104.     exit(1);
  105.   }
  106.   fclose(outFile);
  107.   printf("Writing palette... Done.\n\n");
  108. }
  109.  
  110.  
  111. //***
  112. //*** Filename manipulation routines
  113. //***
  114.  
  115. void assumeExtension(char *filename, char *defaultExt)
  116. {
  117.   char fileDrive[MAXDRIVE];
  118.   char fileDir[MAXDIR];
  119.   char fileFile[MAXFILE];
  120.   char fileExt[MAXEXT];
  121.   char newPath[MAXPATH];
  122.   int status;
  123.  
  124.   status = fnsplit(filename, fileDrive, fileDir, fileFile, fileExt);
  125.  
  126.   if (!(status&EXTENSION))
  127.     strcpy(fileExt, defaultExt);
  128.  
  129.   fnmerge(newPath, fileDrive, fileDir, fileFile, fileExt);
  130.   strcpy(filename, newPath);
  131. }
  132.  
  133. void forceExtension(char *filename, char *extention)
  134. {
  135.   char fileDrive[MAXDRIVE];
  136.   char fileDir[MAXDIR];
  137.   char fileFile[MAXFILE];
  138.   char fileExt[MAXEXT];
  139.  
  140.   fnsplit(filename, fileDrive, fileDir, fileFile, fileExt);
  141.  
  142.   if (strcmpi(fileExt, extention))
  143.     fnmerge(filename, fileDrive, fileDir, fileFile, extention);
  144. }