|
|
1.1 root 1: #ifndef SMACKH
2: #define SMACKH
3:
4: #include "rad.h"
5:
6: RCSTART
7:
8: #define SMACKVERSION "2.0y"
9:
10: typedef struct SmackSumTag {
11: u32 TotalTime; // total time
12: u32 MS100PerFrame; // MS*100 per frame (100000/MS100PerFrame=Frames/Sec)
13: u32 TotalOpenTime; // Time to open and prepare for decompression
14: u32 TotalFrames; // Total Frames displayed
15: u32 SkippedFrames; // Total number of skipped frames
16: u32 TotalBlitTime; // Total time spent blitting
17: u32 TotalReadTime; // Total time spent reading
18: u32 TotalDecompTime; // Total time spent decompressing
19: u32 TotalBackReadTime; // Total time spent reading in background
20: u32 TotalReadSpeed; // Total io speed (bytes/second)
21: u32 SlowestFrameTime; // Slowest single frame time
22: u32 Slowest2FrameTime; // Second slowest single frame time
23: u32 SlowestFrameNum; // Slowest single frame number
24: u32 Slowest2FrameNum; // Second slowest single frame number
25: u32 AverageFrameSize; // Average size of the frame
26: u32 Highest1SecRate; // Highest 1 sec data rate
27: u32 Highest1SecFrame; // Highest 1 sec data rate starting frame
28: u32 HighestMemAmount; // Highest amount of memory allocated
29: u32 TotalExtraMemory; // Total extra memory allocated
30: u32 HighestExtraUsed; // Highest extra memory actually used
31: } SmackSum;
32:
33: typedef struct SmackTag {
34: u32 Version; // SMK2 only right now
35: u32 Width; // Width (1 based, 640 for example)
36: u32 Height; // Height (1 based, 480 for example)
37: u32 Frames; // Number of frames (1 based, 100 = 100 frames)
38: u32 MSPerFrame; // Frame Rate
39: u32 SmackerType; // bit 0 set=ring frame
40: u32 LargestInTrack[7]; // Largest single size for each track
41: u32 tablesize; // Size of the init tables
42: u32 codesize; // Compression info
43: u32 absize; // ditto
44: u32 detailsize; // ditto
45: u32 typesize; // ditto
46: u32 TrackType[7]; // high byte=0x80-Comp,0x40-PCM data,0x20-16 bit,0x10-stereo
47: u32 extra; // extra value (should be zero)
48: u32 NewPalette; // set to one if the palette changed
49: u8 Palette[772]; // palette data
50: u32 FrameNum; // Frame Number to be displayed
51: u32 LastRectx; // Rect set in from SmackToBufferRect (X coord)
52: u32 LastRecty; // Rect set in from SmackToBufferRect (Y coord)
53: u32 LastRectw; // Rect set in from SmackToBufferRect (Width)
54: u32 LastRecth; // Rect set in from SmackToBufferRect (Height)
55: u32 OpenFlags; // flags used on open
56: u32 LeftOfs; // Left Offset used in SmackTo
57: u32 TopOfs; // Top Offset used in SmackTo
58: } Smack;
59:
60: #define SmackHeaderSize(smk) ((((u8*)&((smk)->extra))-((u8*)(smk)))+4)
61:
62: //=======================================================================
63: #define SMACKNEEDPAN 0x00020L // Will be setting the pan
64: #define SMACKNEEDVOLUME 0x00040L // Will be setting the volume
65: #define SMACKFRAMERATE 0x00080L // Override fr (call SmackFrameRate first)
66: #define SMACKLOADEXTRA 0x00100L // Load the extra buffer during SmackOpen
67: #define SMACKPRELOADALL 0x00200L // Preload the entire animation
68: #define SMACKNOSKIP 0x00400L // Don't skip frames if falling behind
69: #define SMACKSIMULATE 0x00800L // Simulate the speed (call SmackSim first)
70: #define SMACKFILEHANDLE 0x01000L // Use when passing in a file handle
71: #define SMACKTRACK1 0x02000L // Play audio track 1
72: #define SMACKTRACK2 0x04000L // Play audio track 2
73: #define SMACKTRACK3 0x08000L // Play audio track 3
74: #define SMACKTRACK4 0x10000L // Play audio track 4
75: #define SMACKTRACK5 0x20000L // Play audio track 5
76: #define SMACKTRACK6 0x40000L // Play audio track 6
77: #define SMACKTRACK7 0x80000L // Play audio track 7
78: #define SMACKTRACKS (SMACKTRACK1|SMACKTRACK2|SMACKTRACK3|SMACKTRACK4|SMACKTRACK5|SMACKTRACK6|SMACKTRACK7)
79:
80: #define SMACKAUTOEXTRA 0xffffffffL // NOT A FLAG! - Use as extrabuf param
81: //=======================================================================
82:
83: #define SMACKSURFACEFAST 0
84: #define SMACKSURFACESLOW 1
85: #define SMACKSURFACEDIRECT 2
86:
87:
88: Smack PTR4* RADEXPLINK SmackOpen(char PTR4* name,u32 flags,u32 extrabuf);
89:
90: #ifdef __RADMAC__
91: #include <files.h>
92:
93: Smack PTR4* RADEXPLINK SmackMacOpen(FSSpec* fsp,u32 flags,u32 extrabuf);
94: #endif
95:
96: u32 RADEXPLINK SmackDoFrame(Smack PTR4* smk);
97: void RADEXPLINK SmackNextFrame(Smack PTR4* smk);
98: u32 RADEXPLINK SmackWait(Smack PTR4* smk);
99: void RADEXPLINK SmackClose(Smack PTR4* smk);
100:
101: void RADEXPLINK SmackVolumePan(Smack PTR4* smk, u32 trackflag,u32 volume,u32 pan);
102:
103: void RADEXPLINK SmackSummary(Smack PTR4* smk,SmackSum PTR4* sum);
104:
105: u32 RADEXPLINK SmackSoundInTrack(Smack PTR4* smk,u32 trackflags);
106: u32 RADEXPLINK SmackSoundOnOff(Smack PTR4* smk,u32 on);
107:
108: #ifdef __RADMAC__
109: void RADEXPLINK SmackToScreen(Smack PTR4* smk,u32 left,u32 top);
110: #else
111: void RADEXPLINK SmackToScreen(Smack PTR4* smk,u32 left,u32 top,u32 BytesPS,u16 PTR4* WinTbl,u32 SetBank);
112: #endif
113:
114: void RADEXPLINK SmackToBuffer(Smack PTR4* smk,u32 left,u32 top,u32 Pitch,u32 destheight,void PTR4* buf,u32 Reversed);
115: u32 RADEXPLINK SmackToBufferRect(Smack PTR4* smk, u32 SmackSurface);
116:
117: void RADEXPLINK SmackGoto(Smack PTR4* smk,u32 frame);
118: void RADEXPLINK SmackColorRemap(Smack PTR4* smk,void PTR4* remappal,u32 numcolors,u32 paltype);
119: void RADEXPLINK SmackColorTrans(Smack PTR4* smk,void PTR4* trans);
120: void RADEXPLINK SmackFrameRate(u32 forcerate);
121: void RADEXPLINK SmackSimulate(u32 sim);
122:
123: u32 RADEXPLINK SmackGetTrackData(Smack PTR4* smk,void PTR4* dest,u32 trackflag);
124:
125: void RADEXPLINK SmackSoundCheck();
126:
127: //======================================================================
128: #ifdef __RADDOS__
129:
130: #define SMACKSOUNDNONE -1
131:
132: extern void* cdecl SmackTimerSetupAddr;
133: extern void* cdecl SmackTimerReadAddr;
134: extern void* cdecl SmackTimerDoneAddr;
135:
136: typedef void RADLINK (*SmackTimerSetupType)();
137: typedef u32 RADLINK (*SmackTimerReadType)();
138: typedef void RADLINK (*SmackTimerDoneType)();
139:
140: #define SmackTimerSetup() ((SmackTimerSetupType)(SmackTimerSetupAddr))()
141: #define SmackTimerRead() ((SmackTimerReadType)(SmackTimerReadAddr))()
142: #define SmackTimerDone() ((SmackTimerDoneType)(SmackTimerDoneAddr))()
143:
144: u8 RADEXPLINK SmackSoundUseMSS(void* DigDriver,u32 MaxTimerSpeed);
145: void RADEXPLINK SmackSoundMSSLiteInit();
146: void RADEXPLINK SmackSoundMSSLiteDone();
147:
148: u8 RADEXPLINK SmackSoundUseSOS3r(u32 SOSDriver,u32 MaxTimerSpeed);
149: u8 RADEXPLINK SmackSoundUseSOS3s(u32 SOSDriver,u32 MaxTimerSpeed);
150: u8 RADEXPLINK SmackSoundUseSOS4r(u32 SOSDriver,u32 MaxTimerSpeed);
151: u8 RADEXPLINK SmackSoundUseSOS4s(u32 SOSDriver,u32 MaxTimerSpeed);
152:
153: #ifdef __SW_3R
154: #define SmackSoundUseSOS3 SmackSoundUseSOS3r
155: #define SmackSoundUseSOS4 SmackSoundUseSOS4r
156: #else
157: #define SmackSoundUseSOS3 SmackSoundUseSOS3s
158: #define SmackSoundUseSOS4 SmackSoundUseSOS4s
159: #endif
160:
161: #else
162:
163: #define SMACKRESRESET 0
164: #define SMACKRES640X400 1
165: #define SMACKRES640X480 2
166: #define SMACKRES800X600 3
167: #define SMACKRES1024X768 4
168:
169: u32 RADEXPLINK SmackSetSystemRes(u32 mode); // use SMACKRES* values
170:
171: #ifdef __RADMAC__
172:
173: #include <windows.h>
174: #include <palettes.h>
175: #include <qdoffscreen.h>
176: #include <timer.h>
177:
178: typedef struct SmkTMInfoTag {
179: TMTask smTask;
180: u32 milli;
181: } SmkTMInfo;
182:
183: extern SmkTMInfo __SmackTimeInfo;
184:
185: void RADEXPLINK SmackTimerSetup();
186: void RADEXPLINK SmackTimerDone();
187: #define SmackTimerRead() (__SmackTimeInfo.milli)
188:
189: #define SMACKAUTOBLIT 0
190: #define SMACKDIRECTBLIT 1
191: #define SMACKGWORLDBLIT 2
192:
193: typedef struct SmackBufTag {
194: u32 Reversed;
195: u32 SurfaceType; // SMACKSURFACExxxxxx
196: u32 BlitType; // SMACKxxxxxBLIT
197: u32 Width;
198: u32 Height;
199: u32 Pitch;
200: u32 Zoomed;
201: u32 ZWidth;
202: u32 ZHeight;
203: u32 DispColors; // colors on screen
204: u32 MaxPalColors;
205: u32 PalColorsInUse;
206: u32 StartPalColor;
207: u32 EndPalColor;
208: void* Buffer;
209: void* Palette;
210: u32 PalType;
211:
212: WindowPtr wp;
213: GWorldPtr gwp;
214: CTabHandle cth;
215: PaletteHandle palh;
216: } SmackBuf;
217:
218: #else
219:
220: #ifdef __RADWIN__
221:
222: #define INCLUDE_MMSYSTEM_H
223: #include "windows.h"
224: #include "windowsx.h"
225:
226: #define SMACKAUTOBLIT 0
227: #define SMACKFULL320X240BLIT 1
228: #define SMACKFULL320X200BLIT 2
229: #define SMACKSTANDARDBLIT 3
230: #define SMACKWINGBLIT 4
231:
232: #define WM_SMACKACTIVATE WM_USER+0x5678
233:
234: typedef struct SmackBufTag {
235: u32 Reversed; // 1 if the buffer is upside down
236: u32 SurfaceType; // SMACKSURFACExxxx defines
237: u32 BlitType; // SMACKxxxxBLIT defines
238: u32 FullScreen; // 1 if full-screen
239: u32 Width;
240: u32 Height;
241: u32 Zoomed;
242: u32 ZWidth;
243: u32 ZHeight;
244: u32 DispColors; // colors on the screen
245: u32 MaxPalColors; // total possible colors in palette (usually 256)
246: u32 PalColorsInUse; // Used colors in palette (usually 236)
247: u32 StartPalColor; // first usable color index (usually 10)
248: u32 EndPalColor; // last usable color index (usually 246)
249: RGBQUAD Palette[256];
250: u32 PalType;
251:
252: void PTR4* Buffer;
253: void PTR4* DIBRestore;
254: u32 OurBitmap;
255: u32 OrigBitmap;
256: u32 OurPalette;
257: u32 WinGDC;
258: u32 FullFocused;
259: u32 ParentHwnd;
260: u32 OldParWndProc;
261: u32 OldDispWndProc;
262: u32 DispHwnd;
263: u32 WinGBufHandle;
264: } SmackBuf;
265:
266: void RADEXPLINK SmackGet(Smack PTR4* smk,void PTR4* dest);
267: void RADEXPLINK SmackBufferGet( SmackBuf PTR4* sbuf, void PTR4* dest);
268:
269: u8 RADEXPLINK SmackSoundUseMSS(void PTR4* dd);
270: u8 RADEXPLINK SmackSoundUseDirectSound(HWND hw);
271:
272: #define SmackTimerSetup()
273: #define SmackTimerDone()
274: #define SmackTimerRead timeGetTime
275:
276: #endif
277:
278: #endif
279:
280: #ifdef __RADMAC__
281: SmackBuf PTR4* RADEXPLINK SmackBufferOpen( WindowPtr wp, u16 BlitType, u16 width, u16 height, u16 ZoomW, u16 ZoomH );
282: u16 RADEXPLINK SmackBufferBlit( SmackBuf PTR4* sbuf, u16 hwndx, u16 hwndy, u16 subx, u16 suby, u16 subw, u16 subh );
283: void RADEXPLINK SmackBufferFromScreen( SmackBuf PTR4* destbuf, u16 x, u16 y);
284: #else
285: SmackBuf PTR4* RADEXPLINK SmackBufferOpen( HWND wnd, u16 BlitType, u16 width, u16 height, u16 ZoomW, u16 ZoomH );
286: u16 RADEXPLINK SmackBufferBlit( SmackBuf PTR4* sbuf, HDC dc, u16 hwndx, u16 hwndy, u16 subx, u16 suby, u16 subw, u16 subh );
287: void RADEXPLINK SmackBufferFromScreen( SmackBuf PTR4* destbuf, HWND hw, u16 x, u16 y);
288: #endif
289:
290: char PTR4* RADEXPLINK SmackBufferString(char PTR4* dest,u16 BlitType);
291:
292: void RADEXPLINK SmackBufferNewPalette( SmackBuf PTR4* sbuf, void PTR4* pal, u16 paltype );
293: u16 RADEXPLINK SmackBufferSetPalette( SmackBuf PTR4* sbuf );
294: void RADEXPLINK SmackBufferClose( SmackBuf PTR4* sbuf );
295:
296: void RADEXPLINK SmackBufferClear( SmackBuf PTR4* destbuf, u16 color);
297: void RADEXPLINK SmackBufferToBuffer( SmackBuf PTR4* destbuf, u16 destx, u16 desty, SmackBuf PTR4* sourcebuf,u16 sourcex,u16 sourcey,u16 sourcew,u16 sourceh);
298: void RADEXPLINK SmackBufferToBufferTrans( SmackBuf PTR4* destbuf, u16 destx, u16 desty, SmackBuf PTR4* sourcebuf,u16 sourcex,u16 sourcey,u16 sourcew,u16 sourceh,u16 TransColor);
299: void RADEXPLINK SmackBufferCopyPalette( SmackBuf PTR4* destbuf, SmackBuf PTR4* sourcebuf, u16 remap);
300:
301: u16 RADEXPLINK SmackBufferFocused( SmackBuf PTR4* sbuf);
302:
303: #endif
304:
305: RCEND
306:
307: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.