annotate dmengine.c @ 368:08ea68abb1f8

Work towards re-entrancy.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 17 Oct 2012 00:01:46 +0300
parents 9875c65029af
children e1c984404b6b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 #include "dmengine.h"
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 #include "dmimage.h"
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 #ifdef DM_USE_TREMOR
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 #include <tremor/ivorbiscodec.h>
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #include <tremor/ivorbisfile.h>
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 #endif
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 DMEngineData engine;
368
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
12 DMEffect *engineEffects = NULL;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
13 int nengineEffects = 0, nengineEffectsAlloc = 0;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
14
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
15
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
16 int engineRegisterEffect(const DMEffect *ef)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
17 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
18 if (ef == NULL)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
19 return DMERR_NULLPTR;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
20
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
21 // Allocate more space for effects
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
22 if (nengineEffects + 1 >= nengineEffectsAlloc)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
23 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
24 nengineEffectsAlloc += 16;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
25 engineEffects = dmRealloc(engineEffects, sizeof(DMEffect) * nengineEffectsAlloc);
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
26 if (engineEffects == NULL)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
27 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
28 dmError("Could not expand effects structure.\n");
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
29 return DMERR_INIT_FAIL;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
30 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
31 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
32
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
33 // Copy effects structure
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
34 memcpy(engineEffects + nengineEffects, ef, sizeof(DMEffect));
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
35 nengineEffects++;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
36
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
37 return DMERR_OK;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
38 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
39
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
40
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
41 int engineInitializeEffects(DMEngineData *engine)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
42 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
43 int i, res;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
44
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
45 dmFree(engine->effectData);
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
46 engine->effectData = dmCalloc(nengineEffectsAlloc, sizeof(void *));
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
47 if (engine->effectData == NULL)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
48 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
49 dmError("Could not expand effects data structure.\n");
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
50 return DMERR_INIT_FAIL;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
51 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
52
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
53 for (i = 0; i < nengineEffects; i++)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
54 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
55 if (engineEffects[i].init != NULL &&
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
56 (res = engineEffects[i].init(engine, &engine->effectData[i])) != DMERR_OK)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
57 return res;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
58 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
59
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
60 return DMERR_OK;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
61 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
62
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
63
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
64 void engineShutdownEffects(DMEngineData *engine)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
65 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
66 int i;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
67 for (i = 0; i < nengineEffects; i++)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
68 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
69 if (engineEffects[i].shutdown != NULL)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
70 engineEffects[i].shutdown(engine, engine->effectData[i]);
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
71 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
72 dmFree(engine->effectData);
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
73 engine->effectData = NULL;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
74 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
75
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
76
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
77 DMEffect *engineFindEffect(const char *name, const int nparams)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
78 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
79 int i;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
80 for (i = 0; i < nengineEffects; i++)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
81 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
82 if (strcmp(engineEffects[i].name, name) == 0 &&
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
83 engineEffects[i].nparams == nparams)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
84 return &engineEffects[i];
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
85 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
86 return NULL;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
87 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
88
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
89
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
90 DMEffect *engineFindEffectByName(const char *name)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
91 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
92 int i;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
93 for (i = 0; i < nengineEffects; i++)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
94 {
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
95 if (strcmp(engineEffects[i].name, name) == 0)
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
96 return &engineEffects[i];
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
97 }
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
98 return NULL;
08ea68abb1f8 Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
99 }
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102 static int engineResImageLoad(DMResource *res)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104 SDL_Surface *img = dmLoadImage(res);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 if (res != NULL)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 res->rdata = img;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 return DMERR_OK;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110 else
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111 return dmferror(res);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 static void engineResImageFree(DMResource *res)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117 SDL_FreeSurface((SDL_Surface *)res->rdata);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120 static BOOL engineResImageProbe(DMResource *res, const char *fext)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122 (void) res;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123 return fext != NULL && (strcasecmp(fext, ".jpg") == 0 || strcasecmp(fext, ".png") == 0);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127 #ifdef JSS_SUP_XM
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 static int engineResModuleLoad(DMResource *res)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130 return jssLoadXM(res, (JSSModule **) &(res->rdata));
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
131 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
133 static void engineResModuleFree(DMResource *res)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
134 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 jssFreeModule((JSSModule *) res->rdata);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138 static BOOL engineResModuleProbe(DMResource *res, const char *fext)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 (void) res;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141 return fext != NULL && (strcasecmp(fext, ".xm") == 0 || strcasecmp(fext, ".jmod") == 0);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143 #endif
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 #ifdef DM_USE_TREMOR
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
147 static size_t vorbisFileRead(void *ptr, size_t size, size_t nmemb, void *datasource)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
149 return dmfread(ptr, size, nmemb, (DMResource *) datasource);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 static int vorbisFileSeek(void *datasource, ogg_int64_t offset, int whence)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154 return dmfseek((DMResource *) datasource, offset, whence);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 static int vorbisFileClose(void *datasource)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
159 (void) datasource;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 return 0;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
161 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
163 static long vorbisFileTell(void *datasource)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
164 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165 return dmftell((DMResource *) datasource);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 static ov_callbacks vorbisFileCBS =
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 vorbisFileRead,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 vorbisFileSeek,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 vorbisFileClose,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174 vorbisFileTell
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175 };
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177 static int engineResVorbisLoad(DMResource *res)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179 OggVorbis_File vf;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
180
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 dmMsg(1, "vorbisfile '%s', %d bytes resource loading\n",
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 res->filename, res->dataSize);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 if (ov_open_callbacks(res, &vf, NULL, 0, vorbisFileCBS) < 0)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 return DMERR_FOPEN;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187 res->rdataSize = ov_pcm_total(&vf, -1) * 2 * 2;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 if ((res->rdata = dmMalloc(res->rdataSize + 16)) == NULL)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 ov_clear(&vf);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191 return DMERR_MALLOC;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 dmMsg(1, "rdataSize=%d bytes?\n", res->rdataSize);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196 BOOL eof = FALSE;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 int left = res->rdataSize;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 char *ptr = res->rdata;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
199 int current_section;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 while (!eof && left > 0)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 int ret = ov_read(&vf, ptr, left > 4096 ? 4096 : left, &current_section);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203 if (ret == 0)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204 eof = TRUE;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 else
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206 if (ret < 0)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
208 ov_clear(&vf);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 return DMERR_INVALID_DATA;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211 else
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213 left -= ret;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214 ptr += ret;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
215 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
217
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
218 ov_clear(&vf);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
219 return DMERR_OK;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
220 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222 static void engineResVorbisFree(DMResource *res)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
224 dmFree(res->rdata);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
227 static BOOL engineResVorbisProbe(DMResource *res, const char *fext)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
228 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
229 (void) res;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
230 return fext != NULL && (strcasecmp(fext, ".ogg") == 0);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
231 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
232 #endif
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
233
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
235 static DMResourceDataOps engineResOps[] =
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
237 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
238 engineResImageProbe,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
239 engineResImageLoad,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
240 engineResImageFree
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
241 },
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
243 #ifdef JSS_SUP_XM
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
244 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
245 engineResModuleProbe,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
246 engineResModuleLoad,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
247 engineResModuleFree
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
248 },
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249 #endif
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
250
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
251 #ifdef DM_USE_TREMOR
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
252 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
253 engineResVorbisProbe,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254 engineResVorbisLoad,
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
255 engineResVorbisFree
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
256 },
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 #endif
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
258 };
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
259
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
260 static const int nengineResOps = sizeof(engineResOps) / sizeof(engineResOps[0]);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
261
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
262
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
263 int engineClassifier(DMResource *res)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
264 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
265 int i;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
266 char *fext;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
267
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
268 if (res == NULL)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
269 return DMERR_NULLPTR;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
270
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
271 fext = strrchr(res->filename, '.');
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
272 for (i = 0; i < nengineResOps; i++)
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
273 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
274 DMResourceDataOps *rops = &engineResOps[i];
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
275 if (rops->probe != NULL && rops->probe(res, fext))
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
276 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
277 res->rops = rops;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
278 return DMERR_OK;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
279 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
280 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
281
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
282 return DMERR_OK;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
283 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
284
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
285
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
286 void *engineGetResource(DMEngineData *eng, const char *name)
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
287 {
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
288 DMResource *res;
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
289 if (eng != NULL &&
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
290 (res = dmres_find(eng->resources, name)) != NULL &&
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
291 res->rdata != NULL)
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
292 return res->rdata;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
293 else
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
294 {
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
295 dmError("Could not find resource '%s'.\n", name);
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
296 return NULL;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
297 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
298 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
299
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
300
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
301 #ifdef DM_USE_JSS
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
302 void engineGetJSSInfo(DMEngineData *eng, BOOL *playing, int *order, JSSPattern **pat, int *npattern, int *row)
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
303 {
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
304 JSS_LOCK(eng->plr);
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
305
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
306 *playing = eng->plr->isPlaying;
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
307 *row = eng->plr->row;
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
308 *pat = eng->plr->pattern;
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
309 *npattern = eng->plr->npattern;
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
310 *order = eng->plr->order;
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
311
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
312 JSS_UNLOCK(eng->plr);
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
313 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
314
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
315 void engineGetJSSChannelInfo(DMEngineData *eng, const int channel, int *ninst, int *nextInst, int *freq, int *note)
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
316 {
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
317 JSS_LOCK(eng->plr);
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
318 JSSPlayerChannel *chn = &(eng->plr->channels[channel]);
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
319 *ninst = chn->ninstrument;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
320 *nextInst = chn->nextInstrument;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
321 *freq = chn->freq;
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
322 *note = chn->note;
366
38e10b5f4e09 Work towards base engine re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
323 JSS_UNLOCK(eng->plr);
342
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
324 }
c6ec970dc3cf Separate some demo engine parts to two different modules.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
325 #endif
367
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
326
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
327
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
328 int engineGetTick(DMEngineData *engine)
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
329 {
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
330 return (engine->frameTime - engine->startTime) + engine->adjustTime;
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
331 }
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
332
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
333
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
334 float engineGetTimeDT(DMEngineData *engine)
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
335 {
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
336 return (float) engineGetTick(engine) / 1000.0f;
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
337 }
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
338
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
339
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
340 int engineGetTimeDTi(DMEngineData *engine)
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
341 {
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
342 return (float) engineGetTick(engine) / 1000;
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
343 }
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
344
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
345
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
346 int engineGetTime(DMEngineData *engine, int t)
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
347 {
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
348 return engineGetTick(engine) - (1000 * t);
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
349 }
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
350
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
351
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
352 int engineGetDT(DMEngineData *engine, int t)
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
353 {
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
354 return engineGetTime(engine, t) / 1000;
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
355 }
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
356
9875c65029af Work towards re-entrancy.
Matti Hamalainen <ccr@tnsp.org>
parents: 366
diff changeset
357