home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 December / VPR9712A.ISO / OLS / OS2 / LHA2P205 / LHA2P205.LZH / lha2-2.05pre / source.lzh / src / lzh2c.c < prev    next >
C/C++ Source or Header  |  1995-10-15  |  2KB  |  107 lines

  1. /*
  2.  * lzh2c.c --- archive file to C code transelator
  3.  *   Copyright (C) 1988-1992, Haruyasu YOSHIZAKI (lzh2asm.c)
  4.  *   Copyright (C) 1991-1995, Satoshi HIRAMATSU
  5.  *
  6.  * $Log$
  7.  */
  8.  
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include "typedef.h"
  14.  
  15.  
  16. struct hdr
  17. {
  18.   uchar size;
  19.   uchar sum;
  20.   uchar method[6];
  21.   ulong packed;
  22.   ulong original;
  23.   ulong time;
  24.   ushort attr;
  25.   uchar fnlen;
  26.   uchar fname[256];
  27.   ushort crc;
  28.   uchar *ext;
  29. } header;
  30. FILE *f0, *f1;
  31. char title[] = "char NAM_X[] = {\n";
  32. char foot[]  = "\n};\n";
  33.  
  34.  
  35. int
  36. main(int argc, char *argv[])
  37. {
  38.   int i, c, d;
  39.   char *p;
  40.  
  41.   f0 = fopen(argv[1], "rb");
  42.   if(f0 == NULL)
  43.     exit(1);
  44.   f1 = fopen(argv[2], "w");
  45.   if(f1 == NULL)
  46.     exit(1);
  47.  
  48.   fread(&header, 1, 2, f0);
  49.   fread(header.method, 1, 5, f0);
  50.   fread(&header.packed, 4, 1, f0);
  51.   fread(&header.original, 4, 1, f0);
  52.   fread(&header.time, 4, 1, f0);
  53.   fread(&header.attr, 2, 1, f0);
  54.   fread(&header.fnlen, 1, 1, f0);
  55.   fread(header.fname, 1, header.fnlen, f0);
  56.   fread(&header.crc, 2, 1, f0);
  57.   header.ext = (uchar *) malloc(i = header.size - (header.fnlen + 22));
  58.   fread(header.ext, 1, i, f0);
  59.   free(header.ext);
  60.   header.method[5] = '\0';
  61.  
  62. #ifdef DEBUG
  63.   printf("\n=== LZH header info. =================\n");
  64.   printf(" header size is   %10u byte(s).\n",header.size);
  65.   printf(" compression method is       \"%s\".\n",header.method);
  66.   printf(" packed size is   %10lu byte(s).\n", header.packed);
  67.   printf(" original size is %10lu byte(s).\n", header.original);
  68.   printf(" crc is                  %10xH.\n", header.crc, header.crc);
  69.   printf("======================================\n\n");
  70. #endif
  71.  
  72.   do
  73.     {
  74.       p = strstr(title, "NAM_X");
  75.       if(p)
  76.     strncpy(p, argv[1], 5);
  77.     }
  78.   while(p);
  79.   fprintf(f1, "%s", title);
  80.   fprintf(f1,
  81.       "\t0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",
  82.       header.packed & 0xff, (header.packed >> 8) & 0xff,
  83.       (header.packed >> 16) & 0xff, (header.packed >> 24) & 0xff,
  84.       header.original & 0xff, (header.original >> 8) & 0xff,
  85.       (header.original >> 16) & 0xff, (header.original >> 24) & 0xff);
  86.   d = getc(f0);
  87.   for(i = 0; (c = getc(f0)) != EOF; ++i)
  88.     {
  89.       if(i == 8)
  90.     {
  91.       fprintf(f1, ",\n\t");
  92.       i = 0;
  93.     }
  94.       else
  95.     {
  96.       fputc(',', f1);
  97.       fputc(' ', f1);
  98.     }
  99.       fprintf(f1, "0x%02x", d);
  100.       d = c;
  101.     }
  102.   fprintf(f1, "%s", foot);
  103.   fclose(f1);
  104.  
  105.   return 0;
  106. }
  107.