wavtab.c++
2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
//====================================================================
// wavtab.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 "libbank.h"
ICWavTab::ICWavTab()
{
compact = FALSE; /* default value */
}
void ICWavTab::Append(ICObject *o)
{
objList.Append(o);
}
void ICWavTab::Print()
{
Node *obj;
for (obj = objList.head; obj != 0; obj = obj->next) {
ICObject *ptr = (ICObject *)obj->data;
ptr->Print();
}
}
void ICWavTab::Write(FILE *f)
{
Node *obj;
for (obj = objList.head; obj != 0; obj = obj->next) {
ICObject *ptr = (ICObject *)obj->data;
ptr->Write(f);
}
}
void ICWavTab::LayOutFile()
{
Node *node = objList.head;
Node *prev = (Node*)&objList.head;
int curOffset = 0;
ICObject *obj;
ICSoundFile *sndFileobj;
ICWave *waveObj;
if(compact)
{
while(node !=0)
{
sndFileobj = (ICSoundFile *)node->data;
waveObj = sndFileobj->GetWaveTable();
if(waveObj->GetUsedFlag())
{
curOffset = sndFileobj->LayOut(curOffset);
prev = node;
node = node->next;
}
else
{
delete sndFileobj; // delete object attached
node = objList.Remove(node, prev); // remove from list & delete
}
}
}
else
{
while(node != 0)
{
obj = (ICObject *)node->data;
curOffset = obj->LayOut(curOffset);
node = node->next;
}
}
}
void ICWavTab::AssembleFile()
{
Node *obj = objList.head;
for (obj = objList.head; obj != 0; obj = obj->next) {
((ICObject *)obj->data)->Assemble();
}
}