home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3593 / aux.h < prev    next >
C/C++ Source or Header  |  1991-07-07  |  3KB  |  105 lines

  1. /*
  2.  * July 5, 1991
  3.  * Copyright 1991 Lance Norskog And Sundry Contributors
  4.  * This source code is freely redistributable and may be used for
  5.  * any purpose.  This copyright notice must be maintained. 
  6.  * Lance Norskog And Sundry Contributors are not responsible for 
  7.  * the consequences of using this software.
  8.  */
  9.  
  10. /*
  11.  * AUX sources header file.
  12.  */
  13.  
  14. #include <stdio.h>
  15.  
  16. /*
  17.  *  Format information for input and output files.
  18.  */
  19.  
  20. #define    PRIVSIZE    50
  21.  
  22. struct format {
  23.     int    rate;        /* sampling rate */
  24.     int    size;        /* word length of data */
  25.     int    style;        /* format of sample numbers */
  26.     int    channels;    /* number of sound channels: 1, 2, or 4 */
  27.     char    swap;        /* do byte- or word-swap */
  28.     char    seekable;    /* can seek on this file */
  29.     char    *filetype;    /* type of file */
  30.     char    *which;        /* "input" or "output" */
  31.     FILE    *fp;        /* File stream pointer */
  32.     struct handler *h;    /* handler struct for this file */
  33.     char    priv[PRIVSIZE];    /* handler's private data area */
  34. } informat, outformat;
  35.  
  36. typedef struct format *ft_t;
  37.  
  38. /* Size field */
  39. #define    BYTE    1
  40. #define    WORD    2
  41. #define    LONG    4
  42. #define    FLOAT    5
  43. #define DOUBLE    6
  44. #define IEEE    7        /* IEEE 80-bit floats.  Is it necessary? */
  45.  
  46. /* Style field */
  47. #define UNSIGNED    1    /* unsigned linear: Sound Blaster */
  48. #define SIGN2        2    /* signed linear 2's comp: Mac */
  49. #define    ULAW        3    /* U-law signed logs: US telephony, SPARC */
  50. #define ALAW        4    /* A-law signed logs: non-US telephony */
  51.  
  52. /*
  53.  * Handler structure for each format.
  54.  */
  55.  
  56. struct handler {
  57.     char    **names;    /* file type names */
  58.     int    (*startread)();            
  59.     int    (*read)();            
  60.     int    (*stopread)();        
  61.     int    (*startwrite)();            
  62.     int    (*write)();
  63.     int    (*stopwrite)();        
  64. };
  65.  
  66. extern struct handler handlers[];
  67.  
  68. /* Handler types, coordinate with handlers.c */
  69. #define    RAWTYPE    0
  70. #define    VOCTYPE    1
  71. #define    AUTYPE    2
  72. #define    SFTYPE    3
  73.  
  74. extern char *sizes[], *styles[];
  75.  
  76. #ifdef    __ANSI__
  77. #define    P1(x) x
  78. #define    P2(x,y) x, y
  79. #define    P3(x,y,z) x, y, z
  80. #define    P4(x,y,z,z) x, y, z, w
  81. #else
  82. #define P1(x)
  83. #define P2(x,y)
  84. #define P3(x,y,z)
  85. #define P4(x,y,z,w)
  86. #endif
  87.  
  88. /* Utilities to read and write shorts and longs little-endian and big-endian */
  89. unsigned short rlshort(P1(ft_t ft));            /* short little-end */
  90. unsigned short rbshort(P1(ft_t ft));            /* short big-end */
  91. unsigned short wlshort(P2(ft_t ft, unsigned short us));    /* short little-end */
  92. unsigned short wbshort(P2(ft_t ft, unsigned short us));    /* short big-end */
  93. unsigned long  rllong(P1(ft_t ft));            /* long little-end */
  94. unsigned long  rblong(P1(ft_t ft));            /* long big-end */
  95. unsigned long  wllong(P2(ft_t ft, unsigned long ul));    /* long little-end */
  96. unsigned long  wblong(P2(ft_t ft, unsigned long ul));    /* long big-end */
  97. /* Read and write words and longs in "machine format".  Swap if indicated. */
  98. unsigned short rshort(P1(ft_t ft));            
  99. unsigned short wshort(P2(ft_t ft, unsigned short us));
  100. unsigned long  rlong(P1(ft_t ft));        
  101. unsigned long  wlong(P2(ft_t ft, unsigned long ul));
  102. /* Utilities to byte-swap values */
  103. unsigned short swapw(P1(unsigned short us));        /* Swap short */
  104. unsigned long  swapl(P1(unsigned long ul));        /* Swap long */
  105.