home *** CD-ROM | disk | FTP | other *** search
- /*
- * July 5, 1991
- * Copyright 1991 Lance Norskog And Sundry Contributors
- * This source code is freely redistributable and may be used for
- * any purpose. This copyright notice must be maintained.
- * Lance Norskog And Sundry Contributors are not responsible for
- * the consequences of using this software.
- */
-
- /*
- * AUX raw format file.
- */
-
- /*
- * Notes: most of the headerless formats set their handlers to raw
- * in their startread/write routines.
- *
- */
-
- #include "aux.h"
- #include "libst.h"
-
- extern int summary, verbose;
-
- rawstartread(ft)
- ft_t ft;
- {
- }
-
- rawstartwrite(ft)
- ft_t ft;
- {
- }
-
- rawread(ft, buf, len)
- ft_t ft;
- long *buf, len;
- {
- register int datum;
- int abs;
- int done = 0;
-
- char c;
- unsigned char uc;
- short s;
- unsigned short us;
- long l;
- unsigned long ul;
- float f;
- double d;
-
- switch(ft->size) {
- case BYTE: switch(ft->style) {
- case SIGN2:
- while(done < len) {
- if ((datum = getc(ft->fp)) == EOF)
- return done;
- /* scale signed up to long's range */
- datum *= 16777216; /* 2^24 */
- *buf++ = datum;
- done++;
- }
- return done;
- case UNSIGNED:
- while(done < len) {
- if ((datum = getc(ft->fp)) == EOF)
- return done;
- /* Convert to signed */
- datum ^= 128;
- /* scale signed up to long's range */
- datum *= 16777216; /* 2^24 */
- *buf++ = datum;
- done++;
- }
- return done;
- case ULAW:
- /* grab table from Posk stuff */
- while(done < len) {
- if ((datum = getc(ft->fp)) == EOF)
- return done;
- datum = st_ulaw_to_linear(datum);
- /* scale signed up to long's range */
- datum *= 65536; /* 2^16 */
- *buf++ = datum;
- done++;
- }
- return done;
- case ALAW:
- fail("No A-Law support");
- return done;
- }
- case WORD: switch(ft->style) {
- case SIGN2:
- while(done < len) {
- datum = rshort(ft);
- /* scale signed up to long's range */
- datum *= 65536; /* 2^16 */
- *buf++ = datum;
- done++;
- }
- return done;
- case UNSIGNED:
- while(done < len) {
- datum = rshort(ft);
- /* Convert to signed */
- datum ^= 0x8000;
- /* scale signed up to long's range */
- datum *= 65536; /* 2^16 */
- *buf++ = datum;
- done++;
- }
- return done;
- case ULAW:
- fail("No U-Law support for shorts");
- return done;
- case ALAW:
- fail("No A-Law support");
- return done;
- }
- }
- fail("Drop through in rawread!");
- }
-
- rawwrite(ft, buf, len)
- ft_t ft;
- long *buf, len;
- {
- register int datum;
- int abs;
- int done = 0;
-
- char c;
- unsigned char uc;
- short s;
- unsigned short us;
- long l;
- unsigned long ul;
- double d;
-
- switch(ft->size) {
- case BYTE: switch(ft->style) {
- case SIGN2:
- while(done < len) {
- datum = *buf++;
- /* scale signed up to long's range */
- datum >>= 24;
- putc(datum, ft->fp);
- done++;
- }
- return;
- case UNSIGNED:
- while(done < len) {
- datum = *buf++;
- /* scale signed up to long's range */
- /* datum += 0x10000000; */
- datum >>= 24;
- /* Convert to unsigned */
- datum ^= 128;
- putc(datum, ft->fp);
- done++;
- }
- return;
- case ULAW:
- /* grab table from Posk stuff */
- while(done < len) {
- datum = *buf++;
- /* scale signed up to long's range */
- /* datum += 0x10000000; */
- datum /= 65536; /* 2^16 */
- datum = st_linear_to_ulaw(datum);
- putc(datum, ft->fp);
- done++;
- }
- return;
- case ALAW:
- fail("No A-Law support");
- return;
- }
- case WORD: switch(ft->style) {
- case SIGN2:
- while(done < len) {
- datum = *buf++;
- /* scale signed up to long's range */
- datum /= 65536;
- wshort(ft, datum);
- done++;
- }
- return;
- case UNSIGNED:
- while(done < len) {
- datum = *buf++;
- /* scale signed up to long's range */
- datum /= 65536;
- /* Convert to unsigned */
- datum ^= 0x8000;
- wshort(ft, datum);
- done++;
- }
- return;
- case ULAW:
- fail("No U-Law support for shorts");
- return;
- case ALAW:
- fail("No A-Law support");
- return;
- }
- }
- fail("Drop through in rawwrite!");
- }
-
-
-
-