wavetable.c 2.67 KB
/*====================================================================
 * wavetable.c
 *
 * Copyright 1993, Silicon Graphics, Inc.
 * All Rights Reserved.
 *
 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics,
 * Inc.; the contents of this file may not be disclosed to third
 * parties, copied or duplicated in any form, in whole or in part,
 * without the prior written permission of Silicon Graphics, Inc.
 *
 * RESTRICTED RIGHTS LEGEND:
 * Use, duplication or disclosure by the Government is subject to
 * restrictions as set forth in subdivision (c)(1)(ii) of the Rights
 * in Technical Data and Computer Software clause at DFARS
 * 252.227-7013, and/or in similar or successor clauses in the FAR,
 * DOD or NASA FAR Supplement. Unpublished - rights reserved under the
 * Copyright Laws of the United States.
 *====================================================================*/

#include <assert.h>
#include "ic.h"

void waveNew(ICWave *w)
{
    w->decl.declclass = ICWAVE;
    w->decl.id = objectID++;
    w->decl.offset = (void *)-1;
    w->decl.size = sizeof(ALWaveTable);
}

void waveSetTable(ICWave *w, char *base, int len)
{
    w->base = base;
    w->len  = len;
}

void waveSetRate(ICWave *w, int rate)
{
    w->rate = rate;
}

void waveSetChannels(ICWave *w, char channels)
{
    w->channels = channels;
}

void waveSetSize(ICWave *w, char size)
{
    w->size = size;
}

void waveSetFormat(ICWave *w, char format)
{
    w->format = format;
}

void waveLayOut(ICWave *icw)
{
    ALWaveTable *w;

    icw->decl.size = declSize((Decl *)icw);
    w = calloc(1, icw->decl.size);
    assert(w);

    w->base     = icw->base;
    w->len      = icw->len;
    w->rate     = icw->rate;
    w->channels = icw->channels;
    w->size     = icw->size;
    w->format   = icw->format;

    if (icw->loop) {
        w->loop         = icw->loop->decl.offset;
    } else {
        w->loop = 0;
    }
    
    w->book             = icw->book->decl.offset;

    icw->wave = w;
}

void wavePrint(ICWave *icw)
{
    ALWaveTable   *w = icw->wave;
    Id          *name;
    
    name = findname((Decl *)icw);
    
    if (name) {
        printf("Wave Table: %s\n", name->name);
    } else {
        printf("Wave Table: \n");
    }
    
    declPrint((Decl *)icw);
    
    printf("\tbase:\t\t= 0x%x\n", w->base);
    printf("\tlen:\t\t= 0x%x\n", w->len);
    printf("\trate:\t\t= %d\n", w->rate);
    printf("\tchannels:\t= %x\n", w->channels);
    printf("\tsize:\t\t= %d\n", w->size);
    printf("\tformat:\t\t= %x\n", w->format);
    printf("\tloop:\t\t= %x\n", w->loop);
    printf("\tbook:\t\t= %x\n", w->book);
    printf("\n");
}

void waveWrite(ICWave *w, FILE *file)
{
    fwrite(w->wave, w->decl.size, 1, file);
}