loop.c++ 2.51 KB
//====================================================================
// loop.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 <stdlib.h>
#include "libbank.h"

ICLoop::ICLoop()
{
    declclass   = ICLOOP;
    size        = sizeof(ALADPCMloop);
    loop        = 0;
    start = end = count = 0;
}

ICLoop::~ICLoop()
{
    if (loop)
        free(loop);
}

void ICLoop::SetPoints(u32 s, u32 e, u32 c, ICLoopState lstate)
{
    int i;
    
    start = s;
    end   = e;
    count = c;
    if (lstate)
        for (i = 0; i < ADPCMFSIZE; i++)
            state[i] = lstate[i];
        
}

void ICLoop::Assemble()
{
    int i;
    
    size = Size();

    ALADPCMloop *l = (ALADPCMloop *)calloc(1, size);
    FailIf(!l, IC_INTERNAL_ERR);
    
    l->start    = start;
    l->end      = end;
    l->count    = count;
    for (i=0; i<ADPCMFSIZE; i++)
        l->state[i] = state[i];
    
    loop = l;
    thing = loop;
}

void ICLoop::Print()
{
    int i;
    
    if (declid) {
         printf("Loop: %s\n", declid->name);
    } else {
         printf("Loop: \n");
    }
    
    ICObject::Print();
    
    printf("\tstart:\t\t= %d\n", loop->start);
    printf("\tend:\t\t= %d\n", loop->end);
    printf("\tcount:\t\t= %d\n", loop->count);
    printf("\tstate:\n\t");
    for (i=0; i<ADPCMFSIZE/2; i++)
        printf("%6d ",loop->state[i]);
    printf("\n\t");
    for (i=ADPCMFSIZE/2; i<ADPCMFSIZE; i++)
        printf("%6d ",loop->state[i]);
    printf("\n");
        
    printf("\n");
}

char *ReadPString(FILE *ifile)

{
    unsigned char c;
    char        *st;

    fread(&c, 1, 1, ifile);
    st = (char *) malloc(c+1);
    fread(st, c, 1, ifile);
    *(st+c) = 0;
    
    /*
     * Read the pad byte if necessary
     */
    if (!(c & 1))
        fread(&c, 1, 1, ifile);
    return st;
}