home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / XBD2_SRC.ZIP / XBD2_SRC / CONVERT.C < prev    next >
C/C++ Source or Header  |  1991-02-04  |  2KB  |  127 lines

  1. #include <fcntl.h>
  2. #include <sys\types.h>
  3. #include <sys\stat.h>
  4. #include <io.h>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <dos.h>
  8. #include <process.h>
  9. #include <malloc.h>
  10.  
  11.  
  12. #include "sound.h"
  13.  
  14. #define SIZE    32768L
  15.  
  16.  
  17. byte convTab[256];
  18.  
  19.  
  20. void convertFile(char *inSound, unsigned int wave, char *outSound, char *name)
  21. {
  22.     int            inFd;
  23.     int            outFd;
  24.     
  25.     int            mult = 1;
  26.     
  27.     byte _huge    *inPtr;
  28.     
  29.     struct stat    fStat;
  30.     
  31.     unsigned int    part = SIZE;
  32.     unsigned int    tmp;
  33.     unsigned int    newWave = wave;
  34.     
  35.     struct sound    header;
  36.     
  37.     
  38.     if (wave < 15000) {
  39.         while (newWave < 22000) {
  40.             mult++;
  41.             newWave = wave * mult;
  42.         }
  43.         wave = newWave;
  44.     }
  45.     
  46.     if (mult > 4) {
  47.         printf("Frequency to low\n");
  48.         exit(1);
  49.     }
  50.  
  51.  
  52.     if (stat(inSound,&fStat) != 0) {
  53.         perror(inSound);
  54.         exit(1);
  55.     }
  56.  
  57.     inPtr  = (byte _huge *)halloc(SIZE, sizeof(byte));
  58.  
  59.     if (inPtr == NULL) {
  60.         perror("Can't allocate memory");
  61.         exit(1);
  62.     }
  63.     
  64.     if (_dos_open(inSound, O_RDONLY, &inFd) != 0) {
  65.         perror(inSound);
  66.         exit(1);
  67.     }
  68.  
  69.     if (_dos_creatnew(outSound, _A_NORMAL, &outFd)) {
  70.         perror(outSound);
  71.         exit(1);
  72.     }
  73.     _dos_close(outFd);
  74.     
  75.     if (_dos_open(outSound, O_RDWR, &outFd) != 0) {
  76.         perror(outSound);
  77.         exit(1);
  78.     }
  79.     
  80.     strcpy(header.ident,IDENT);
  81.     header.mult = mult;
  82.     header.nbValues = 0;
  83.     header.hertz = wave;
  84.     header.timer = (1193180L / wave);
  85.     strncpy(header.memo, name, 254);
  86.  
  87.     _dos_write(outFd, &header, sizeof(struct sound), &tmp);
  88.     
  89.     while (part == SIZE) {
  90.         _dos_read(inFd, inPtr, (unsigned int)SIZE, &part);
  91.         header.nbValues += part;
  92.         _dos_write(outFd, inPtr, part, &tmp);
  93.     }
  94.  
  95.     lseek(outFd, SEEK_SET, 0);
  96.     _dos_write(outFd, &header, sizeof(struct sound), &tmp);
  97.  
  98.     _dos_close(inFd);
  99.     _dos_close(outFd);
  100.  
  101.     hfree(inPtr);
  102. }
  103.  
  104.  
  105.  
  106.  
  107.  
  108. main(int argc, char *argv[])
  109. {
  110.     if (argc != 5) {
  111.         printf ("\nusage : convert <inFile> <hertz> <outFile> <name>\n");
  112.         printf ("            inFile  : name of source file\n");
  113.         printf ("            hertz   : frequency of source file\n");
  114.         printf ("            outFile : name of converted file\n");
  115.         printf ("            name    : comment for converted file\n");
  116.         exit (1);
  117.     }
  118.  
  119.     if (strlen(argv[4]) > 250) {
  120.         printf("Name is limited to 250 characters.\n");
  121.         exit (-1);
  122.     }
  123.     
  124.     convertFile(argv[1], atoi(argv[2]), argv[3], argv[4]);
  125.     exit(1);
  126. }
  127.